diff options
author | jsing <> | 2023-05-28 14:14:33 +0000 |
---|---|---|
committer | jsing <> | 2023-05-28 14:14:33 +0000 |
commit | 5461471aa9e2132fb780d650c80d2d98b4b596fe (patch) | |
tree | d6fae681c5e0ec19d6c3bdbbdbbe173561184559 /src | |
parent | 0eb718914decfe880abddbeaaa38a9f4085be18d (diff) | |
download | openbsd-5461471aa9e2132fb780d650c80d2d98b4b596fe.tar.gz openbsd-5461471aa9e2132fb780d650c80d2d98b4b596fe.tar.bz2 openbsd-5461471aa9e2132fb780d650c80d2d98b4b596fe.zip |
Reorder functions.
No intended functional change.
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/sha/sha256.c | 428 |
1 files changed, 214 insertions, 214 deletions
diff --git a/src/lib/libcrypto/sha/sha256.c b/src/lib/libcrypto/sha/sha256.c index 62e7a397f6..5b536bfba7 100644 --- a/src/lib/libcrypto/sha/sha256.c +++ b/src/lib/libcrypto/sha/sha256.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: sha256.c,v 1.19 2023/05/28 13:57:27 jsing Exp $ */ | 1 | /* $OpenBSD: sha256.c,v 1.20 2023/05/28 14:14:33 jsing Exp $ */ |
2 | /* ==================================================================== | 2 | /* ==================================================================== |
3 | * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. | 3 | * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. |
4 | * | 4 | * |
@@ -63,92 +63,6 @@ | |||
63 | 63 | ||
64 | #if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA256) | 64 | #if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA256) |
65 | 65 | ||
66 | int | ||
67 | SHA224_Init(SHA256_CTX *c) | ||
68 | { | ||
69 | memset (c, 0, sizeof(*c)); | ||
70 | |||
71 | c->h[0] = 0xc1059ed8UL; | ||
72 | c->h[1] = 0x367cd507UL; | ||
73 | c->h[2] = 0x3070dd17UL; | ||
74 | c->h[3] = 0xf70e5939UL; | ||
75 | c->h[4] = 0xffc00b31UL; | ||
76 | c->h[5] = 0x68581511UL; | ||
77 | c->h[6] = 0x64f98fa7UL; | ||
78 | c->h[7] = 0xbefa4fa4UL; | ||
79 | |||
80 | c->md_len = SHA224_DIGEST_LENGTH; | ||
81 | |||
82 | return 1; | ||
83 | } | ||
84 | |||
85 | int | ||
86 | SHA256_Init(SHA256_CTX *c) | ||
87 | { | ||
88 | memset (c, 0, sizeof(*c)); | ||
89 | |||
90 | c->h[0] = 0x6a09e667UL; | ||
91 | c->h[1] = 0xbb67ae85UL; | ||
92 | c->h[2] = 0x3c6ef372UL; | ||
93 | c->h[3] = 0xa54ff53aUL; | ||
94 | c->h[4] = 0x510e527fUL; | ||
95 | c->h[5] = 0x9b05688cUL; | ||
96 | c->h[6] = 0x1f83d9abUL; | ||
97 | c->h[7] = 0x5be0cd19UL; | ||
98 | |||
99 | c->md_len = SHA256_DIGEST_LENGTH; | ||
100 | |||
101 | return 1; | ||
102 | } | ||
103 | |||
104 | unsigned char * | ||
105 | SHA224(const unsigned char *d, size_t n, unsigned char *md) | ||
106 | { | ||
107 | SHA256_CTX c; | ||
108 | static unsigned char m[SHA224_DIGEST_LENGTH]; | ||
109 | |||
110 | if (md == NULL) | ||
111 | md = m; | ||
112 | |||
113 | SHA224_Init(&c); | ||
114 | SHA256_Update(&c, d, n); | ||
115 | SHA256_Final(md, &c); | ||
116 | |||
117 | explicit_bzero(&c, sizeof(c)); | ||
118 | |||
119 | return (md); | ||
120 | } | ||
121 | |||
122 | unsigned char * | ||
123 | SHA256(const unsigned char *d, size_t n, unsigned char *md) | ||
124 | { | ||
125 | SHA256_CTX c; | ||
126 | static unsigned char m[SHA256_DIGEST_LENGTH]; | ||
127 | |||
128 | if (md == NULL) | ||
129 | md = m; | ||
130 | |||
131 | SHA256_Init(&c); | ||
132 | SHA256_Update(&c, d, n); | ||
133 | SHA256_Final(md, &c); | ||
134 | |||
135 | explicit_bzero(&c, sizeof(c)); | ||
136 | |||
137 | return (md); | ||
138 | } | ||
139 | |||
140 | int | ||
141 | SHA224_Update(SHA256_CTX *c, const void *data, size_t len) | ||
142 | { | ||
143 | return SHA256_Update(c, data, len); | ||
144 | } | ||
145 | |||
146 | int | ||
147 | SHA224_Final(unsigned char *md, SHA256_CTX *c) | ||
148 | { | ||
149 | return SHA256_Final(md, c); | ||
150 | } | ||
151 | |||
152 | #define DATA_ORDER_IS_BIG_ENDIAN | 66 | #define DATA_ORDER_IS_BIG_ENDIAN |
153 | 67 | ||
154 | #define HASH_LONG SHA_LONG | 68 | #define HASH_LONG SHA_LONG |
@@ -167,133 +81,6 @@ void sha256_block_data_order (SHA256_CTX *ctx, const void *in, size_t num); | |||
167 | 81 | ||
168 | #include "md32_common.h" | 82 | #include "md32_common.h" |
169 | 83 | ||
170 | int | ||
171 | SHA256_Update(HASH_CTX *c, const void *data_, size_t len) | ||
172 | { | ||
173 | const unsigned char *data = data_; | ||
174 | unsigned char *p; | ||
175 | SHA_LONG l; | ||
176 | size_t n; | ||
177 | |||
178 | if (len == 0) | ||
179 | return 1; | ||
180 | |||
181 | l = (c->Nl + (((SHA_LONG)len) << 3))&0xffffffffUL; | ||
182 | /* 95-05-24 eay Fixed a bug with the overflow handling, thanks to | ||
183 | * Wei Dai <weidai@eskimo.com> for pointing it out. */ | ||
184 | if (l < c->Nl) /* overflow */ | ||
185 | c->Nh++; | ||
186 | c->Nh+=(SHA_LONG)(len>>29); /* might cause compiler warning on 16-bit */ | ||
187 | c->Nl = l; | ||
188 | |||
189 | n = c->num; | ||
190 | if (n != 0) { | ||
191 | p = (unsigned char *)c->data; | ||
192 | |||
193 | if (len >= SHA_CBLOCK || len + n >= SHA_CBLOCK) { | ||
194 | memcpy (p + n, data, SHA_CBLOCK - n); | ||
195 | sha256_block_data_order(c, p, 1); | ||
196 | n = SHA_CBLOCK - n; | ||
197 | data += n; | ||
198 | len -= n; | ||
199 | c->num = 0; | ||
200 | memset (p,0,SHA_CBLOCK); /* keep it zeroed */ | ||
201 | } else { | ||
202 | memcpy (p + n, data, len); | ||
203 | c->num += (unsigned int)len; | ||
204 | return 1; | ||
205 | } | ||
206 | } | ||
207 | |||
208 | n = len/SHA_CBLOCK; | ||
209 | if (n > 0) { | ||
210 | sha256_block_data_order(c, data, n); | ||
211 | n *= SHA_CBLOCK; | ||
212 | data += n; | ||
213 | len -= n; | ||
214 | } | ||
215 | |||
216 | if (len != 0) { | ||
217 | p = (unsigned char *)c->data; | ||
218 | c->num = (unsigned int)len; | ||
219 | memcpy (p, data, len); | ||
220 | } | ||
221 | return 1; | ||
222 | } | ||
223 | |||
224 | void | ||
225 | SHA256_Transform(HASH_CTX *c, const unsigned char *data) | ||
226 | { | ||
227 | sha256_block_data_order(c, data, 1); | ||
228 | } | ||
229 | |||
230 | int | ||
231 | SHA256_Final(unsigned char *md, HASH_CTX *c) | ||
232 | { | ||
233 | unsigned char *p = (unsigned char *)c->data; | ||
234 | size_t n = c->num; | ||
235 | unsigned long ll; | ||
236 | unsigned int nn; | ||
237 | |||
238 | p[n] = 0x80; /* there is always room for one */ | ||
239 | n++; | ||
240 | |||
241 | if (n > (SHA_CBLOCK - 8)) { | ||
242 | memset (p + n, 0, SHA_CBLOCK - n); | ||
243 | n = 0; | ||
244 | sha256_block_data_order(c, p, 1); | ||
245 | } | ||
246 | memset (p + n, 0, SHA_CBLOCK - 8 - n); | ||
247 | |||
248 | p += SHA_CBLOCK - 8; | ||
249 | #if defined(DATA_ORDER_IS_BIG_ENDIAN) | ||
250 | HOST_l2c(c->Nh, p); | ||
251 | HOST_l2c(c->Nl, p); | ||
252 | #elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) | ||
253 | HOST_l2c(c->Nl, p); | ||
254 | HOST_l2c(c->Nh, p); | ||
255 | #endif | ||
256 | p -= SHA_CBLOCK; | ||
257 | sha256_block_data_order(c, p, 1); | ||
258 | c->num = 0; | ||
259 | memset (p, 0, SHA_CBLOCK); | ||
260 | |||
261 | /* | ||
262 | * Note that FIPS180-2 discusses "Truncation of the Hash Function Output." | ||
263 | * default: case below covers for it. It's not clear however if it's | ||
264 | * permitted to truncate to amount of bytes not divisible by 4. I bet not, | ||
265 | * but if it is, then default: case shall be extended. For reference. | ||
266 | * Idea behind separate cases for pre-defined lengths is to let the | ||
267 | * compiler decide if it's appropriate to unroll small loops. | ||
268 | */ | ||
269 | switch (c->md_len) { | ||
270 | case SHA224_DIGEST_LENGTH: | ||
271 | for (nn = 0; nn < SHA224_DIGEST_LENGTH / 4; nn++) { | ||
272 | ll = c->h[nn]; | ||
273 | HOST_l2c(ll, md); | ||
274 | } | ||
275 | break; | ||
276 | |||
277 | case SHA256_DIGEST_LENGTH: | ||
278 | for (nn = 0; nn < SHA256_DIGEST_LENGTH / 4; nn++) { | ||
279 | ll = c->h[nn]; | ||
280 | HOST_l2c(ll, md); | ||
281 | } | ||
282 | break; | ||
283 | |||
284 | default: | ||
285 | if (c->md_len > SHA256_DIGEST_LENGTH) | ||
286 | return 0; | ||
287 | for (nn = 0; nn < c->md_len / 4; nn++) { | ||
288 | ll = c->h[nn]; | ||
289 | HOST_l2c(ll, md); | ||
290 | } | ||
291 | break; | ||
292 | } | ||
293 | |||
294 | return 1; | ||
295 | } | ||
296 | |||
297 | #ifndef SHA256_ASM | 84 | #ifndef SHA256_ASM |
298 | static const SHA_LONG K256[64] = { | 85 | static const SHA_LONG K256[64] = { |
299 | 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, | 86 | 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, |
@@ -541,4 +328,217 @@ sha256_block_data_order(SHA256_CTX *ctx, const void *in, size_t num) | |||
541 | #endif | 328 | #endif |
542 | #endif /* SHA256_ASM */ | 329 | #endif /* SHA256_ASM */ |
543 | 330 | ||
331 | int | ||
332 | SHA224_Init(SHA256_CTX *c) | ||
333 | { | ||
334 | memset (c, 0, sizeof(*c)); | ||
335 | |||
336 | c->h[0] = 0xc1059ed8UL; | ||
337 | c->h[1] = 0x367cd507UL; | ||
338 | c->h[2] = 0x3070dd17UL; | ||
339 | c->h[3] = 0xf70e5939UL; | ||
340 | c->h[4] = 0xffc00b31UL; | ||
341 | c->h[5] = 0x68581511UL; | ||
342 | c->h[6] = 0x64f98fa7UL; | ||
343 | c->h[7] = 0xbefa4fa4UL; | ||
344 | |||
345 | c->md_len = SHA224_DIGEST_LENGTH; | ||
346 | |||
347 | return 1; | ||
348 | } | ||
349 | |||
350 | int | ||
351 | SHA224_Update(SHA256_CTX *c, const void *data, size_t len) | ||
352 | { | ||
353 | return SHA256_Update(c, data, len); | ||
354 | } | ||
355 | |||
356 | int | ||
357 | SHA224_Final(unsigned char *md, SHA256_CTX *c) | ||
358 | { | ||
359 | return SHA256_Final(md, c); | ||
360 | } | ||
361 | |||
362 | unsigned char * | ||
363 | SHA224(const unsigned char *d, size_t n, unsigned char *md) | ||
364 | { | ||
365 | SHA256_CTX c; | ||
366 | static unsigned char m[SHA224_DIGEST_LENGTH]; | ||
367 | |||
368 | if (md == NULL) | ||
369 | md = m; | ||
370 | |||
371 | SHA224_Init(&c); | ||
372 | SHA256_Update(&c, d, n); | ||
373 | SHA256_Final(md, &c); | ||
374 | |||
375 | explicit_bzero(&c, sizeof(c)); | ||
376 | |||
377 | return (md); | ||
378 | } | ||
379 | |||
380 | int | ||
381 | SHA256_Init(SHA256_CTX *c) | ||
382 | { | ||
383 | memset (c, 0, sizeof(*c)); | ||
384 | |||
385 | c->h[0] = 0x6a09e667UL; | ||
386 | c->h[1] = 0xbb67ae85UL; | ||
387 | c->h[2] = 0x3c6ef372UL; | ||
388 | c->h[3] = 0xa54ff53aUL; | ||
389 | c->h[4] = 0x510e527fUL; | ||
390 | c->h[5] = 0x9b05688cUL; | ||
391 | c->h[6] = 0x1f83d9abUL; | ||
392 | c->h[7] = 0x5be0cd19UL; | ||
393 | |||
394 | c->md_len = SHA256_DIGEST_LENGTH; | ||
395 | |||
396 | return 1; | ||
397 | } | ||
398 | |||
399 | int | ||
400 | SHA256_Update(HASH_CTX *c, const void *data_, size_t len) | ||
401 | { | ||
402 | const unsigned char *data = data_; | ||
403 | unsigned char *p; | ||
404 | SHA_LONG l; | ||
405 | size_t n; | ||
406 | |||
407 | if (len == 0) | ||
408 | return 1; | ||
409 | |||
410 | l = (c->Nl + (((SHA_LONG)len) << 3))&0xffffffffUL; | ||
411 | /* 95-05-24 eay Fixed a bug with the overflow handling, thanks to | ||
412 | * Wei Dai <weidai@eskimo.com> for pointing it out. */ | ||
413 | if (l < c->Nl) /* overflow */ | ||
414 | c->Nh++; | ||
415 | c->Nh+=(SHA_LONG)(len>>29); /* might cause compiler warning on 16-bit */ | ||
416 | c->Nl = l; | ||
417 | |||
418 | n = c->num; | ||
419 | if (n != 0) { | ||
420 | p = (unsigned char *)c->data; | ||
421 | |||
422 | if (len >= SHA_CBLOCK || len + n >= SHA_CBLOCK) { | ||
423 | memcpy (p + n, data, SHA_CBLOCK - n); | ||
424 | sha256_block_data_order(c, p, 1); | ||
425 | n = SHA_CBLOCK - n; | ||
426 | data += n; | ||
427 | len -= n; | ||
428 | c->num = 0; | ||
429 | memset (p,0,SHA_CBLOCK); /* keep it zeroed */ | ||
430 | } else { | ||
431 | memcpy (p + n, data, len); | ||
432 | c->num += (unsigned int)len; | ||
433 | return 1; | ||
434 | } | ||
435 | } | ||
436 | |||
437 | n = len/SHA_CBLOCK; | ||
438 | if (n > 0) { | ||
439 | sha256_block_data_order(c, data, n); | ||
440 | n *= SHA_CBLOCK; | ||
441 | data += n; | ||
442 | len -= n; | ||
443 | } | ||
444 | |||
445 | if (len != 0) { | ||
446 | p = (unsigned char *)c->data; | ||
447 | c->num = (unsigned int)len; | ||
448 | memcpy (p, data, len); | ||
449 | } | ||
450 | return 1; | ||
451 | } | ||
452 | |||
453 | void | ||
454 | SHA256_Transform(HASH_CTX *c, const unsigned char *data) | ||
455 | { | ||
456 | sha256_block_data_order(c, data, 1); | ||
457 | } | ||
458 | |||
459 | int | ||
460 | SHA256_Final(unsigned char *md, HASH_CTX *c) | ||
461 | { | ||
462 | unsigned char *p = (unsigned char *)c->data; | ||
463 | size_t n = c->num; | ||
464 | unsigned long ll; | ||
465 | unsigned int nn; | ||
466 | |||
467 | p[n] = 0x80; /* there is always room for one */ | ||
468 | n++; | ||
469 | |||
470 | if (n > (SHA_CBLOCK - 8)) { | ||
471 | memset (p + n, 0, SHA_CBLOCK - n); | ||
472 | n = 0; | ||
473 | sha256_block_data_order(c, p, 1); | ||
474 | } | ||
475 | memset (p + n, 0, SHA_CBLOCK - 8 - n); | ||
476 | |||
477 | p += SHA_CBLOCK - 8; | ||
478 | #if defined(DATA_ORDER_IS_BIG_ENDIAN) | ||
479 | HOST_l2c(c->Nh, p); | ||
480 | HOST_l2c(c->Nl, p); | ||
481 | #elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) | ||
482 | HOST_l2c(c->Nl, p); | ||
483 | HOST_l2c(c->Nh, p); | ||
484 | #endif | ||
485 | p -= SHA_CBLOCK; | ||
486 | sha256_block_data_order(c, p, 1); | ||
487 | c->num = 0; | ||
488 | memset (p, 0, SHA_CBLOCK); | ||
489 | |||
490 | /* | ||
491 | * Note that FIPS180-2 discusses "Truncation of the Hash Function Output." | ||
492 | * default: case below covers for it. It's not clear however if it's | ||
493 | * permitted to truncate to amount of bytes not divisible by 4. I bet not, | ||
494 | * but if it is, then default: case shall be extended. For reference. | ||
495 | * Idea behind separate cases for pre-defined lengths is to let the | ||
496 | * compiler decide if it's appropriate to unroll small loops. | ||
497 | */ | ||
498 | switch (c->md_len) { | ||
499 | case SHA224_DIGEST_LENGTH: | ||
500 | for (nn = 0; nn < SHA224_DIGEST_LENGTH / 4; nn++) { | ||
501 | ll = c->h[nn]; | ||
502 | HOST_l2c(ll, md); | ||
503 | } | ||
504 | break; | ||
505 | |||
506 | case SHA256_DIGEST_LENGTH: | ||
507 | for (nn = 0; nn < SHA256_DIGEST_LENGTH / 4; nn++) { | ||
508 | ll = c->h[nn]; | ||
509 | HOST_l2c(ll, md); | ||
510 | } | ||
511 | break; | ||
512 | |||
513 | default: | ||
514 | if (c->md_len > SHA256_DIGEST_LENGTH) | ||
515 | return 0; | ||
516 | for (nn = 0; nn < c->md_len / 4; nn++) { | ||
517 | ll = c->h[nn]; | ||
518 | HOST_l2c(ll, md); | ||
519 | } | ||
520 | break; | ||
521 | } | ||
522 | |||
523 | return 1; | ||
524 | } | ||
525 | |||
526 | unsigned char * | ||
527 | SHA256(const unsigned char *d, size_t n, unsigned char *md) | ||
528 | { | ||
529 | SHA256_CTX c; | ||
530 | static unsigned char m[SHA256_DIGEST_LENGTH]; | ||
531 | |||
532 | if (md == NULL) | ||
533 | md = m; | ||
534 | |||
535 | SHA256_Init(&c); | ||
536 | SHA256_Update(&c, d, n); | ||
537 | SHA256_Final(md, &c); | ||
538 | |||
539 | explicit_bzero(&c, sizeof(c)); | ||
540 | |||
541 | return (md); | ||
542 | } | ||
543 | |||
544 | #endif /* OPENSSL_NO_SHA256 */ | 544 | #endif /* OPENSSL_NO_SHA256 */ |