1 /* sha256.c - Functions to compute SHA256 and SHA224 message digest of files or
2 memory blocks according to the NIST specification FIPS-180-2.
4 Copyright (C) 2005, 2006 Free Software Foundation, Inc.
6 This program is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published by the
8 Free Software Foundation; either version 2, or (at your option) any
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software Foundation,
18 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
20 /* Written by David Madore, considerably copypasting from
21 Scott G. Miller's sha1.c
32 # include "unlocked-io.h"
35 #ifdef WORDS_BIGENDIAN
39 (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
42 #define BLOCKSIZE 4096
43 #if BLOCKSIZE % 64 != 0
44 # error "invalid BLOCKSIZE"
47 /* This array contains the bytes used to pad the buffer to the next
49 static const unsigned char fillbuf
[64] = { 0x80, 0 /* , 0, 0, ... */ };
53 Takes a pointer to a 256 bit block of data (eight 32 bit ints) and
54 intializes it to the start constants of the SHA256 algorithm. This
55 must be called before using hash in the call to sha256_hash
58 sha256_init_ctx (struct sha256_ctx
*ctx
)
60 ctx
->state
[0] = 0x6a09e667UL
;
61 ctx
->state
[1] = 0xbb67ae85UL
;
62 ctx
->state
[2] = 0x3c6ef372UL
;
63 ctx
->state
[3] = 0xa54ff53aUL
;
64 ctx
->state
[4] = 0x510e527fUL
;
65 ctx
->state
[5] = 0x9b05688cUL
;
66 ctx
->state
[6] = 0x1f83d9abUL
;
67 ctx
->state
[7] = 0x5be0cd19UL
;
69 ctx
->total
[0] = ctx
->total
[1] = 0;
74 sha224_init_ctx (struct sha256_ctx
*ctx
)
76 ctx
->state
[0] = 0xc1059ed8UL
;
77 ctx
->state
[1] = 0x367cd507UL
;
78 ctx
->state
[2] = 0x3070dd17UL
;
79 ctx
->state
[3] = 0xf70e5939UL
;
80 ctx
->state
[4] = 0xffc00b31UL
;
81 ctx
->state
[5] = 0x68581511UL
;
82 ctx
->state
[6] = 0x64f98fa7UL
;
83 ctx
->state
[7] = 0xbefa4fa4UL
;
85 ctx
->total
[0] = ctx
->total
[1] = 0;
89 /* Put result from CTX in first 32 bytes following RESBUF. The result
90 must be in little endian byte order.
92 IMPORTANT: On some systems it is required that RESBUF is correctly
93 aligned for a 32-bit value. */
95 sha256_read_ctx (const struct sha256_ctx
*ctx
, void *resbuf
)
99 for (i
= 0; i
< 8; i
++)
100 ((uint32_t *) resbuf
)[i
] = SWAP (ctx
->state
[i
]);
106 sha224_read_ctx (const struct sha256_ctx
*ctx
, void *resbuf
)
110 for (i
= 0; i
< 7; i
++)
111 ((uint32_t *) resbuf
)[i
] = SWAP (ctx
->state
[i
]);
116 /* Process the remaining bytes in the internal buffer and the usual
117 prolog according to the standard and write the result to RESBUF.
119 IMPORTANT: On some systems it is required that RESBUF is correctly
120 aligned for a 32-bit value. */
122 sha256_conclude_ctx (struct sha256_ctx
*ctx
)
124 /* Take yet unprocessed bytes into account. */
125 uint32_t bytes
= ctx
->buflen
;
126 size_t size
= (bytes
< 56) ? 64 / 4 : 64 * 2 / 4;
128 /* Now count remaining bytes. */
129 ctx
->total
[0] += bytes
;
130 if (ctx
->total
[0] < bytes
)
133 /* Put the 64-bit file length in *bits* at the end of the buffer. */
134 ctx
->buffer
[size
- 2] = SWAP ((ctx
->total
[1] << 3) | (ctx
->total
[0] >> 29));
135 ctx
->buffer
[size
- 1] = SWAP (ctx
->total
[0] << 3);
137 memcpy (&((char *) ctx
->buffer
)[bytes
], fillbuf
, (size
- 2) * 4 - bytes
);
139 /* Process last bytes. */
140 sha256_process_block (ctx
->buffer
, size
* 4, ctx
);
144 sha256_finish_ctx (struct sha256_ctx
*ctx
, void *resbuf
)
146 sha256_conclude_ctx (ctx
);
147 return sha256_read_ctx (ctx
, resbuf
);
151 sha224_finish_ctx (struct sha256_ctx
*ctx
, void *resbuf
)
153 sha256_conclude_ctx (ctx
);
154 return sha224_read_ctx (ctx
, resbuf
);
157 /* Compute SHA256 message digest for bytes read from STREAM. The
158 resulting message digest number will be written into the 32 bytes
159 beginning at RESBLOCK. */
161 sha256_stream (FILE *stream
, void *resblock
)
163 struct sha256_ctx ctx
;
164 char buffer
[BLOCKSIZE
+ 72];
167 /* Initialize the computation context. */
168 sha256_init_ctx (&ctx
);
170 /* Iterate over full file contents. */
173 /* We read the file in blocks of BLOCKSIZE bytes. One call of the
174 computation function processes the whole buffer so that with the
175 next round of the loop another block can be read. */
179 /* Read block. Take care for partial reads. */
182 n
= fread (buffer
+ sum
, 1, BLOCKSIZE
- sum
, stream
);
186 if (sum
== BLOCKSIZE
)
191 /* Check for the error flag IFF N == 0, so that we don't
192 exit the loop after a partial read due to e.g., EAGAIN
196 goto process_partial_block
;
199 /* We've read at least one byte, so ignore errors. But always
200 check for EOF, since feof may be true even though N > 0.
201 Otherwise, we could end up calling fread after EOF. */
203 goto process_partial_block
;
206 /* Process buffer with BLOCKSIZE bytes. Note that
209 sha256_process_block (buffer
, BLOCKSIZE
, &ctx
);
212 process_partial_block
:;
214 /* Process any remaining bytes. */
216 sha256_process_bytes (buffer
, sum
, &ctx
);
218 /* Construct result in desired memory. */
219 sha256_finish_ctx (&ctx
, resblock
);
223 /* FIXME: Avoid code duplication */
225 sha224_stream (FILE *stream
, void *resblock
)
227 struct sha256_ctx ctx
;
228 char buffer
[BLOCKSIZE
+ 72];
231 /* Initialize the computation context. */
232 sha224_init_ctx (&ctx
);
234 /* Iterate over full file contents. */
237 /* We read the file in blocks of BLOCKSIZE bytes. One call of the
238 computation function processes the whole buffer so that with the
239 next round of the loop another block can be read. */
243 /* Read block. Take care for partial reads. */
246 n
= fread (buffer
+ sum
, 1, BLOCKSIZE
- sum
, stream
);
250 if (sum
== BLOCKSIZE
)
255 /* Check for the error flag IFF N == 0, so that we don't
256 exit the loop after a partial read due to e.g., EAGAIN
260 goto process_partial_block
;
263 /* We've read at least one byte, so ignore errors. But always
264 check for EOF, since feof may be true even though N > 0.
265 Otherwise, we could end up calling fread after EOF. */
267 goto process_partial_block
;
270 /* Process buffer with BLOCKSIZE bytes. Note that
273 sha256_process_block (buffer
, BLOCKSIZE
, &ctx
);
276 process_partial_block
:;
278 /* Process any remaining bytes. */
280 sha256_process_bytes (buffer
, sum
, &ctx
);
282 /* Construct result in desired memory. */
283 sha224_finish_ctx (&ctx
, resblock
);
287 /* Compute SHA512 message digest for LEN bytes beginning at BUFFER. The
288 result is always in little endian byte order, so that a byte-wise
289 output yields to the wanted ASCII representation of the message
292 sha256_buffer (const char *buffer
, size_t len
, void *resblock
)
294 struct sha256_ctx ctx
;
296 /* Initialize the computation context. */
297 sha256_init_ctx (&ctx
);
299 /* Process whole buffer but last len % 64 bytes. */
300 sha256_process_bytes (buffer
, len
, &ctx
);
302 /* Put result in desired memory area. */
303 return sha256_finish_ctx (&ctx
, resblock
);
307 sha224_buffer (const char *buffer
, size_t len
, void *resblock
)
309 struct sha256_ctx ctx
;
311 /* Initialize the computation context. */
312 sha224_init_ctx (&ctx
);
314 /* Process whole buffer but last len % 64 bytes. */
315 sha256_process_bytes (buffer
, len
, &ctx
);
317 /* Put result in desired memory area. */
318 return sha224_finish_ctx (&ctx
, resblock
);
322 sha256_process_bytes (const void *buffer
, size_t len
, struct sha256_ctx
*ctx
)
324 /* When we already have some bits in our internal buffer concatenate
325 both inputs first. */
326 if (ctx
->buflen
!= 0)
328 size_t left_over
= ctx
->buflen
;
329 size_t add
= 128 - left_over
> len
? len
: 128 - left_over
;
331 memcpy (&((char *) ctx
->buffer
)[left_over
], buffer
, add
);
334 if (ctx
->buflen
> 64)
336 sha256_process_block (ctx
->buffer
, ctx
->buflen
& ~63, ctx
);
339 /* The regions in the following copy operation cannot overlap. */
341 &((char *) ctx
->buffer
)[(left_over
+ add
) & ~63],
345 buffer
= (const char *) buffer
+ add
;
349 /* Process available complete blocks. */
352 #if !_STRING_ARCH_unaligned
353 # define alignof(type) offsetof (struct { char c; type x; }, x)
354 # define UNALIGNED_P(p) (((size_t) p) % alignof (uint32_t) != 0)
355 if (UNALIGNED_P (buffer
))
358 sha256_process_block (memcpy (ctx
->buffer
, buffer
, 64), 64, ctx
);
359 buffer
= (const char *) buffer
+ 64;
365 sha256_process_block (buffer
, len
& ~63, ctx
);
366 buffer
= (const char *) buffer
+ (len
& ~63);
371 /* Move remaining bytes in internal buffer. */
374 size_t left_over
= ctx
->buflen
;
376 memcpy (&((char *) ctx
->buffer
)[left_over
], buffer
, len
);
380 sha256_process_block (ctx
->buffer
, 64, ctx
);
382 memcpy (ctx
->buffer
, &ctx
->buffer
[16], left_over
);
384 ctx
->buflen
= left_over
;
388 /* --- Code below is the primary difference between sha1.c and sha256.c --- */
390 /* SHA256 round constants */
391 #define K(I) sha256_round_constants[I]
392 static const uint32_t sha256_round_constants
[64] = {
393 0x428a2f98UL
, 0x71374491UL
, 0xb5c0fbcfUL
, 0xe9b5dba5UL
,
394 0x3956c25bUL
, 0x59f111f1UL
, 0x923f82a4UL
, 0xab1c5ed5UL
,
395 0xd807aa98UL
, 0x12835b01UL
, 0x243185beUL
, 0x550c7dc3UL
,
396 0x72be5d74UL
, 0x80deb1feUL
, 0x9bdc06a7UL
, 0xc19bf174UL
,
397 0xe49b69c1UL
, 0xefbe4786UL
, 0x0fc19dc6UL
, 0x240ca1ccUL
,
398 0x2de92c6fUL
, 0x4a7484aaUL
, 0x5cb0a9dcUL
, 0x76f988daUL
,
399 0x983e5152UL
, 0xa831c66dUL
, 0xb00327c8UL
, 0xbf597fc7UL
,
400 0xc6e00bf3UL
, 0xd5a79147UL
, 0x06ca6351UL
, 0x14292967UL
,
401 0x27b70a85UL
, 0x2e1b2138UL
, 0x4d2c6dfcUL
, 0x53380d13UL
,
402 0x650a7354UL
, 0x766a0abbUL
, 0x81c2c92eUL
, 0x92722c85UL
,
403 0xa2bfe8a1UL
, 0xa81a664bUL
, 0xc24b8b70UL
, 0xc76c51a3UL
,
404 0xd192e819UL
, 0xd6990624UL
, 0xf40e3585UL
, 0x106aa070UL
,
405 0x19a4c116UL
, 0x1e376c08UL
, 0x2748774cUL
, 0x34b0bcb5UL
,
406 0x391c0cb3UL
, 0x4ed8aa4aUL
, 0x5b9cca4fUL
, 0x682e6ff3UL
,
407 0x748f82eeUL
, 0x78a5636fUL
, 0x84c87814UL
, 0x8cc70208UL
,
408 0x90befffaUL
, 0xa4506cebUL
, 0xbef9a3f7UL
, 0xc67178f2UL
,
411 /* Round functions. */
412 #define F2(A,B,C) ( ( A & B ) | ( C & ( A | B ) ) )
413 #define F1(E,F,G) ( G ^ ( E & ( F ^ G ) ) )
415 /* Process LEN bytes of BUFFER, accumulating context into CTX.
416 It is assumed that LEN % 64 == 0.
417 Most of this code comes from GnuPG's cipher/sha1.c. */
420 sha256_process_block (const void *buffer
, size_t len
, struct sha256_ctx
*ctx
)
422 const uint32_t *words
= buffer
;
423 size_t nwords
= len
/ sizeof (uint32_t);
424 const uint32_t *endp
= words
+ nwords
;
426 uint32_t a
= ctx
->state
[0];
427 uint32_t b
= ctx
->state
[1];
428 uint32_t c
= ctx
->state
[2];
429 uint32_t d
= ctx
->state
[3];
430 uint32_t e
= ctx
->state
[4];
431 uint32_t f
= ctx
->state
[5];
432 uint32_t g
= ctx
->state
[6];
433 uint32_t h
= ctx
->state
[7];
435 /* First increment the byte count. FIPS PUB 180-2 specifies the possible
436 length of the file up to 2^64 bits. Here we only compute the
437 number of bytes. Do a double word increment. */
438 ctx
->total
[0] += len
;
439 if (ctx
->total
[0] < len
)
442 #define rol(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
443 #define S0(x) (rol(x,25)^rol(x,14)^(x>>3))
444 #define S1(x) (rol(x,15)^rol(x,13)^(x>>10))
445 #define SS0(x) (rol(x,30)^rol(x,19)^rol(x,10))
446 #define SS1(x) (rol(x,26)^rol(x,21)^rol(x,7))
448 #define M(I) ( tm = S1(x[(I-2)&0x0f]) + x[(I-7)&0x0f] \
449 + S0(x[(I-15)&0x0f]) + x[I&0x0f] \
452 #define R(A,B,C,D,E,F,G,H,K,M) do { t0 = SS0(A) + F2(A,B,C); \
457 D += t1; H = t0 + t1; \
465 /* FIXME: see sha1.c for a better implementation. */
466 for (t
= 0; t
< 16; t
++)
468 x
[t
] = SWAP (*words
);
472 R( a
, b
, c
, d
, e
, f
, g
, h
, K( 0), x
[ 0] );
473 R( h
, a
, b
, c
, d
, e
, f
, g
, K( 1), x
[ 1] );
474 R( g
, h
, a
, b
, c
, d
, e
, f
, K( 2), x
[ 2] );
475 R( f
, g
, h
, a
, b
, c
, d
, e
, K( 3), x
[ 3] );
476 R( e
, f
, g
, h
, a
, b
, c
, d
, K( 4), x
[ 4] );
477 R( d
, e
, f
, g
, h
, a
, b
, c
, K( 5), x
[ 5] );
478 R( c
, d
, e
, f
, g
, h
, a
, b
, K( 6), x
[ 6] );
479 R( b
, c
, d
, e
, f
, g
, h
, a
, K( 7), x
[ 7] );
480 R( a
, b
, c
, d
, e
, f
, g
, h
, K( 8), x
[ 8] );
481 R( h
, a
, b
, c
, d
, e
, f
, g
, K( 9), x
[ 9] );
482 R( g
, h
, a
, b
, c
, d
, e
, f
, K(10), x
[10] );
483 R( f
, g
, h
, a
, b
, c
, d
, e
, K(11), x
[11] );
484 R( e
, f
, g
, h
, a
, b
, c
, d
, K(12), x
[12] );
485 R( d
, e
, f
, g
, h
, a
, b
, c
, K(13), x
[13] );
486 R( c
, d
, e
, f
, g
, h
, a
, b
, K(14), x
[14] );
487 R( b
, c
, d
, e
, f
, g
, h
, a
, K(15), x
[15] );
488 R( a
, b
, c
, d
, e
, f
, g
, h
, K(16), M(16) );
489 R( h
, a
, b
, c
, d
, e
, f
, g
, K(17), M(17) );
490 R( g
, h
, a
, b
, c
, d
, e
, f
, K(18), M(18) );
491 R( f
, g
, h
, a
, b
, c
, d
, e
, K(19), M(19) );
492 R( e
, f
, g
, h
, a
, b
, c
, d
, K(20), M(20) );
493 R( d
, e
, f
, g
, h
, a
, b
, c
, K(21), M(21) );
494 R( c
, d
, e
, f
, g
, h
, a
, b
, K(22), M(22) );
495 R( b
, c
, d
, e
, f
, g
, h
, a
, K(23), M(23) );
496 R( a
, b
, c
, d
, e
, f
, g
, h
, K(24), M(24) );
497 R( h
, a
, b
, c
, d
, e
, f
, g
, K(25), M(25) );
498 R( g
, h
, a
, b
, c
, d
, e
, f
, K(26), M(26) );
499 R( f
, g
, h
, a
, b
, c
, d
, e
, K(27), M(27) );
500 R( e
, f
, g
, h
, a
, b
, c
, d
, K(28), M(28) );
501 R( d
, e
, f
, g
, h
, a
, b
, c
, K(29), M(29) );
502 R( c
, d
, e
, f
, g
, h
, a
, b
, K(30), M(30) );
503 R( b
, c
, d
, e
, f
, g
, h
, a
, K(31), M(31) );
504 R( a
, b
, c
, d
, e
, f
, g
, h
, K(32), M(32) );
505 R( h
, a
, b
, c
, d
, e
, f
, g
, K(33), M(33) );
506 R( g
, h
, a
, b
, c
, d
, e
, f
, K(34), M(34) );
507 R( f
, g
, h
, a
, b
, c
, d
, e
, K(35), M(35) );
508 R( e
, f
, g
, h
, a
, b
, c
, d
, K(36), M(36) );
509 R( d
, e
, f
, g
, h
, a
, b
, c
, K(37), M(37) );
510 R( c
, d
, e
, f
, g
, h
, a
, b
, K(38), M(38) );
511 R( b
, c
, d
, e
, f
, g
, h
, a
, K(39), M(39) );
512 R( a
, b
, c
, d
, e
, f
, g
, h
, K(40), M(40) );
513 R( h
, a
, b
, c
, d
, e
, f
, g
, K(41), M(41) );
514 R( g
, h
, a
, b
, c
, d
, e
, f
, K(42), M(42) );
515 R( f
, g
, h
, a
, b
, c
, d
, e
, K(43), M(43) );
516 R( e
, f
, g
, h
, a
, b
, c
, d
, K(44), M(44) );
517 R( d
, e
, f
, g
, h
, a
, b
, c
, K(45), M(45) );
518 R( c
, d
, e
, f
, g
, h
, a
, b
, K(46), M(46) );
519 R( b
, c
, d
, e
, f
, g
, h
, a
, K(47), M(47) );
520 R( a
, b
, c
, d
, e
, f
, g
, h
, K(48), M(48) );
521 R( h
, a
, b
, c
, d
, e
, f
, g
, K(49), M(49) );
522 R( g
, h
, a
, b
, c
, d
, e
, f
, K(50), M(50) );
523 R( f
, g
, h
, a
, b
, c
, d
, e
, K(51), M(51) );
524 R( e
, f
, g
, h
, a
, b
, c
, d
, K(52), M(52) );
525 R( d
, e
, f
, g
, h
, a
, b
, c
, K(53), M(53) );
526 R( c
, d
, e
, f
, g
, h
, a
, b
, K(54), M(54) );
527 R( b
, c
, d
, e
, f
, g
, h
, a
, K(55), M(55) );
528 R( a
, b
, c
, d
, e
, f
, g
, h
, K(56), M(56) );
529 R( h
, a
, b
, c
, d
, e
, f
, g
, K(57), M(57) );
530 R( g
, h
, a
, b
, c
, d
, e
, f
, K(58), M(58) );
531 R( f
, g
, h
, a
, b
, c
, d
, e
, K(59), M(59) );
532 R( e
, f
, g
, h
, a
, b
, c
, d
, K(60), M(60) );
533 R( d
, e
, f
, g
, h
, a
, b
, c
, K(61), M(61) );
534 R( c
, d
, e
, f
, g
, h
, a
, b
, K(62), M(62) );
535 R( b
, c
, d
, e
, f
, g
, h
, a
, K(63), M(63) );
537 a
= ctx
->state
[0] += a
;
538 b
= ctx
->state
[1] += b
;
539 c
= ctx
->state
[2] += c
;
540 d
= ctx
->state
[3] += d
;
541 e
= ctx
->state
[4] += e
;
542 f
= ctx
->state
[5] += f
;
543 g
= ctx
->state
[6] += g
;
544 h
= ctx
->state
[7] += h
;