summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/des
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/des')
-rw-r--r--src/lib/libcrypto/des/des.h15
-rw-r--r--src/lib/libcrypto/des/des_enc.c121
-rw-r--r--src/lib/libcrypto/des/des_fcrypt.c34
-rw-r--r--src/lib/libcrypto/des/des_local.h6
4 files changed, 44 insertions, 132 deletions
diff --git a/src/lib/libcrypto/des/des.h b/src/lib/libcrypto/des/des.h
index 2d957a192c..ad7a418c01 100644
--- a/src/lib/libcrypto/des/des.h
+++ b/src/lib/libcrypto/des/des.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: des.h,v 1.23 2025/01/25 17:59:44 tb Exp $ */ 1/* $OpenBSD: des.h,v 1.26 2025/06/09 17:49:45 tb Exp $ */
2/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -56,11 +56,20 @@
56 * [including the GNU Public Licence.] 56 * [including the GNU Public Licence.]
57 */ 57 */
58 58
59#ifndef HEADER_NEW_DES_H 59#ifndef HEADER_DES_H
60#define HEADER_NEW_DES_H 60#define HEADER_DES_H
61 61
62#include <openssl/opensslconf.h> 62#include <openssl/opensslconf.h>
63 63
64#ifndef DES_LONG
65/* XXX - typedef to unsigned int everywhere. */
66#ifdef __i386__
67#define DES_LONG unsigned long
68#else
69#define DES_LONG unsigned int
70#endif
71#endif
72
64#ifdef __cplusplus 73#ifdef __cplusplus
65extern "C" { 74extern "C" {
66#endif 75#endif
diff --git a/src/lib/libcrypto/des/des_enc.c b/src/lib/libcrypto/des/des_enc.c
index deec50bffb..cb89784fb0 100644
--- a/src/lib/libcrypto/des/des_enc.c
+++ b/src/lib/libcrypto/des/des_enc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: des_enc.c,v 1.20 2024/08/31 16:17:13 jsing Exp $ */ 1/* $OpenBSD: des_enc.c,v 1.21 2025/07/27 13:26:24 jsing Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -210,10 +210,8 @@ void
210DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc) 210DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc)
211{ 211{
212 DES_LONG l, r, t, u; 212 DES_LONG l, r, t, u;
213#ifndef DES_UNROLL
214 int i;
215#endif
216 DES_LONG *s; 213 DES_LONG *s;
214 int i;
217 215
218 r = data[0]; 216 r = data[0];
219 l = data[1]; 217 l = data[1];
@@ -231,56 +229,21 @@ DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc)
231 l = ROTATE(l, 29) & 0xffffffffL; 229 l = ROTATE(l, 29) & 0xffffffffL;
232 230
233 s = ks->ks->deslong; 231 s = ks->ks->deslong;
234 /* I don't know if it is worth the effort of loop unrolling the 232
235 * inner loop */
236 if (enc) { 233 if (enc) {
237#ifdef DES_UNROLL 234 for (i = 0; i < 32; i += 8) {
238 D_ENCRYPT(l, r, 0); /* 1 */ 235 D_ENCRYPT(l, r, i + 0);
239 D_ENCRYPT(r, l, 2); /* 2 */ 236 D_ENCRYPT(r, l, i + 2);
240 D_ENCRYPT(l, r, 4); /* 3 */ 237 D_ENCRYPT(l, r, i + 4);
241 D_ENCRYPT(r, l, 6); /* 4 */ 238 D_ENCRYPT(r, l, i + 6);
242 D_ENCRYPT(l, r, 8); /* 5 */
243 D_ENCRYPT(r, l, 10); /* 6 */
244 D_ENCRYPT(l, r, 12); /* 7 */
245 D_ENCRYPT(r, l, 14); /* 8 */
246 D_ENCRYPT(l, r, 16); /* 9 */
247 D_ENCRYPT(r, l, 18); /* 10 */
248 D_ENCRYPT(l, r, 20); /* 11 */
249 D_ENCRYPT(r, l, 22); /* 12 */
250 D_ENCRYPT(l, r, 24); /* 13 */
251 D_ENCRYPT(r, l, 26); /* 14 */
252 D_ENCRYPT(l, r, 28); /* 15 */
253 D_ENCRYPT(r, l, 30); /* 16 */
254#else
255 for (i = 0; i < 32; i += 4) {
256 D_ENCRYPT(l, r, i + 0); /* 1 */
257 D_ENCRYPT(r, l, i + 2); /* 2 */
258 } 239 }
259#endif
260 } else { 240 } else {
261#ifdef DES_UNROLL 241 for (i = 32; i > 0; i -= 8) {
262 D_ENCRYPT(l, r, 30); /* 16 */ 242 D_ENCRYPT(l, r, i - 2);
263 D_ENCRYPT(r, l, 28); /* 15 */ 243 D_ENCRYPT(r, l, i - 4);
264 D_ENCRYPT(l, r, 26); /* 14 */ 244 D_ENCRYPT(l, r, i - 6);
265 D_ENCRYPT(r, l, 24); /* 13 */ 245 D_ENCRYPT(r, l, i - 8);
266 D_ENCRYPT(l, r, 22); /* 12 */
267 D_ENCRYPT(r, l, 20); /* 11 */
268 D_ENCRYPT(l, r, 18); /* 10 */
269 D_ENCRYPT(r, l, 16); /* 9 */
270 D_ENCRYPT(l, r, 14); /* 8 */
271 D_ENCRYPT(r, l, 12); /* 7 */
272 D_ENCRYPT(l, r, 10); /* 6 */
273 D_ENCRYPT(r, l, 8); /* 5 */
274 D_ENCRYPT(l, r, 6); /* 4 */
275 D_ENCRYPT(r, l, 4); /* 3 */
276 D_ENCRYPT(l, r, 2); /* 2 */
277 D_ENCRYPT(r, l, 0); /* 1 */
278#else
279 for (i = 30; i > 0; i -= 4) {
280 D_ENCRYPT(l, r, i - 0); /* 16 */
281 D_ENCRYPT(r, l, i - 2); /* 15 */
282 } 246 }
283#endif
284 } 247 }
285 248
286 /* rotate and clear the top bits on machines with 8byte longs */ 249 /* rotate and clear the top bits on machines with 8byte longs */
@@ -298,10 +261,8 @@ void
298DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc) 261DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc)
299{ 262{
300 DES_LONG l, r, t, u; 263 DES_LONG l, r, t, u;
301#ifndef DES_UNROLL
302 int i;
303#endif
304 DES_LONG *s; 264 DES_LONG *s;
265 int i;
305 266
306 r = data[0]; 267 r = data[0];
307 l = data[1]; 268 l = data[1];
@@ -320,53 +281,19 @@ DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc)
320 /* I don't know if it is worth the effort of loop unrolling the 281 /* I don't know if it is worth the effort of loop unrolling the
321 * inner loop */ 282 * inner loop */
322 if (enc) { 283 if (enc) {
323#ifdef DES_UNROLL 284 for (i = 0; i < 32; i += 8) {
324 D_ENCRYPT(l, r, 0); /* 1 */ 285 D_ENCRYPT(l, r, i + 0);
325 D_ENCRYPT(r, l, 2); /* 2 */ 286 D_ENCRYPT(r, l, i + 2);
326 D_ENCRYPT(l, r, 4); /* 3 */ 287 D_ENCRYPT(l, r, i + 4);
327 D_ENCRYPT(r, l, 6); /* 4 */ 288 D_ENCRYPT(r, l, i + 6);
328 D_ENCRYPT(l, r, 8); /* 5 */
329 D_ENCRYPT(r, l, 10); /* 6 */
330 D_ENCRYPT(l, r, 12); /* 7 */
331 D_ENCRYPT(r, l, 14); /* 8 */
332 D_ENCRYPT(l, r, 16); /* 9 */
333 D_ENCRYPT(r, l, 18); /* 10 */
334 D_ENCRYPT(l, r, 20); /* 11 */
335 D_ENCRYPT(r, l, 22); /* 12 */
336 D_ENCRYPT(l, r, 24); /* 13 */
337 D_ENCRYPT(r, l, 26); /* 14 */
338 D_ENCRYPT(l, r, 28); /* 15 */
339 D_ENCRYPT(r, l, 30); /* 16 */
340#else
341 for (i = 0; i < 32; i += 4) {
342 D_ENCRYPT(l, r, i + 0); /* 1 */
343 D_ENCRYPT(r, l, i + 2); /* 2 */
344 } 289 }
345#endif
346 } else { 290 } else {
347#ifdef DES_UNROLL 291 for (i = 32; i > 0; i -= 8) {
348 D_ENCRYPT(l, r, 30); /* 16 */ 292 D_ENCRYPT(l, r, i - 2);
349 D_ENCRYPT(r, l, 28); /* 15 */ 293 D_ENCRYPT(r, l, i - 4);
350 D_ENCRYPT(l, r, 26); /* 14 */ 294 D_ENCRYPT(l, r, i - 6);
351 D_ENCRYPT(r, l, 24); /* 13 */ 295 D_ENCRYPT(r, l, i - 8);
352 D_ENCRYPT(l, r, 22); /* 12 */
353 D_ENCRYPT(r, l, 20); /* 11 */
354 D_ENCRYPT(l, r, 18); /* 10 */
355 D_ENCRYPT(r, l, 16); /* 9 */
356 D_ENCRYPT(l, r, 14); /* 8 */
357 D_ENCRYPT(r, l, 12); /* 7 */
358 D_ENCRYPT(l, r, 10); /* 6 */
359 D_ENCRYPT(r, l, 8); /* 5 */
360 D_ENCRYPT(l, r, 6); /* 4 */
361 D_ENCRYPT(r, l, 4); /* 3 */
362 D_ENCRYPT(l, r, 2); /* 2 */
363 D_ENCRYPT(r, l, 0); /* 1 */
364#else
365 for (i = 30; i > 0; i -= 4) {
366 D_ENCRYPT(l, r, i - 0); /* 16 */
367 D_ENCRYPT(r, l, i - 2); /* 15 */
368 } 296 }
369#endif
370 } 297 }
371 /* rotate and clear the top bits on machines with 8byte longs */ 298 /* rotate and clear the top bits on machines with 8byte longs */
372 data[0] = ROTATE(l, 3) & 0xffffffffL; 299 data[0] = ROTATE(l, 3) & 0xffffffffL;
diff --git a/src/lib/libcrypto/des/des_fcrypt.c b/src/lib/libcrypto/des/des_fcrypt.c
index b33b1240c2..2dd071f5d0 100644
--- a/src/lib/libcrypto/des/des_fcrypt.c
+++ b/src/lib/libcrypto/des/des_fcrypt.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: des_fcrypt.c,v 1.4 2024/08/31 16:22:18 jsing Exp $ */ 1/* $OpenBSD: des_fcrypt.c,v 1.5 2025/07/27 13:26:24 jsing Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -90,8 +90,8 @@ fcrypt_body(DES_LONG *out, DES_key_schedule *ks, DES_LONG Eswap0,
90{ 90{
91 DES_LONG l, r, t, u; 91 DES_LONG l, r, t, u;
92 DES_LONG *s; 92 DES_LONG *s;
93 int j;
94 DES_LONG E0, E1; 93 DES_LONG E0, E1;
94 int i, j;
95 95
96 l = 0; 96 l = 0;
97 r = 0; 97 r = 0;
@@ -101,32 +101,12 @@ fcrypt_body(DES_LONG *out, DES_key_schedule *ks, DES_LONG Eswap0,
101 E1 = Eswap1; 101 E1 = Eswap1;
102 102
103 for (j = 0; j < 25; j++) { 103 for (j = 0; j < 25; j++) {
104#ifndef DES_UNROLL 104 for (i = 0; i < 32; i += 8) {
105 int i; 105 D_ENCRYPT(l, r, i + 0);
106 106 D_ENCRYPT(r, l, i + 2);
107 for (i = 0; i < 32; i += 4) { 107 D_ENCRYPT(l, r, i + 4);
108 D_ENCRYPT(l, r, i + 0); /* 1 */ 108 D_ENCRYPT(r, l, i + 6);
109 D_ENCRYPT(r, l, i + 2); /* 2 */
110 } 109 }
111#else
112 D_ENCRYPT(l, r, 0); /* 1 */
113 D_ENCRYPT(r, l, 2); /* 2 */
114 D_ENCRYPT(l, r, 4); /* 3 */
115 D_ENCRYPT(r, l, 6); /* 4 */
116 D_ENCRYPT(l, r, 8); /* 5 */
117 D_ENCRYPT(r, l, 10); /* 6 */
118 D_ENCRYPT(l, r, 12); /* 7 */
119 D_ENCRYPT(r, l, 14); /* 8 */
120 D_ENCRYPT(l, r, 16); /* 9 */
121 D_ENCRYPT(r, l, 18); /* 10 */
122 D_ENCRYPT(l, r, 20); /* 11 */
123 D_ENCRYPT(r, l, 22); /* 12 */
124 D_ENCRYPT(l, r, 24); /* 13 */
125 D_ENCRYPT(r, l, 26); /* 14 */
126 D_ENCRYPT(l, r, 28); /* 15 */
127 D_ENCRYPT(r, l, 30); /* 16 */
128#endif
129
130 t = l; 110 t = l;
131 l = r; 111 l = r;
132 r = t; 112 r = t;
diff --git a/src/lib/libcrypto/des/des_local.h b/src/lib/libcrypto/des/des_local.h
index 61bfde7520..077c03139f 100644
--- a/src/lib/libcrypto/des/des_local.h
+++ b/src/lib/libcrypto/des/des_local.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: des_local.h,v 1.5 2024/08/31 16:22:18 jsing Exp $ */ 1/* $OpenBSD: des_local.h,v 1.6 2025/04/23 10:08:20 jsing Exp $ */
2/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -217,10 +217,6 @@ ROTATE(uint32_t a, uint32_t n)
217 217
218extern const DES_LONG DES_SPtrans[8][64]; 218extern const DES_LONG DES_SPtrans[8][64];
219 219
220#ifdef OPENSSL_SMALL_FOOTPRINT
221#undef DES_UNROLL
222#endif
223
224__END_HIDDEN_DECLS 220__END_HIDDEN_DECLS
225 221
226#endif 222#endif