28 #define POLARSSL_SHA512_C
30 #if defined(POLARSSL_SHA512_C)
34 #if defined(POLARSSL_FS_IO) || defined(POLARSSL_SELF_TEST)
38 #define polarssl_printf printf
41 static void polarssl_zeroize(
void *v,
size_t n ) {
42 volatile unsigned char *p = v;
while( n-- ) *p++ = 0;
45 #if !defined(POLARSSL_SHA512_ALT)
51 #define GET_UINT64_BE(n,b,i) \
53 (n) = ( (uint64_t) (b)[(i) ] << 56 ) \
54 | ( (uint64_t) (b)[(i) + 1] << 48 ) \
55 | ( (uint64_t) (b)[(i) + 2] << 40 ) \
56 | ( (uint64_t) (b)[(i) + 3] << 32 ) \
57 | ( (uint64_t) (b)[(i) + 4] << 24 ) \
58 | ( (uint64_t) (b)[(i) + 5] << 16 ) \
59 | ( (uint64_t) (b)[(i) + 6] << 8 ) \
60 | ( (uint64_t) (b)[(i) + 7] ); \
65 #define PUT_UINT64_BE(n,b,i) \
67 (b)[(i) ] = (unsigned char) ( (n) >> 56 ); \
68 (b)[(i) + 1] = (unsigned char) ( (n) >> 48 ); \
69 (b)[(i) + 2] = (unsigned char) ( (n) >> 40 ); \
70 (b)[(i) + 3] = (unsigned char) ( (n) >> 32 ); \
71 (b)[(i) + 4] = (unsigned char) ( (n) >> 24 ); \
72 (b)[(i) + 5] = (unsigned char) ( (n) >> 16 ); \
73 (b)[(i) + 6] = (unsigned char) ( (n) >> 8 ); \
74 (b)[(i) + 7] = (unsigned char) ( (n) ); \
81 static const uint64_t K[80] =
83 UL64(0x428A2F98D728AE22),
UL64(0x7137449123EF65CD),
84 UL64(0xB5C0FBCFEC4D3B2F),
UL64(0xE9B5DBA58189DBBC),
85 UL64(0x3956C25BF348B538),
UL64(0x59F111F1B605D019),
86 UL64(0x923F82A4AF194F9B),
UL64(0xAB1C5ED5DA6D8118),
87 UL64(0xD807AA98A3030242),
UL64(0x12835B0145706FBE),
88 UL64(0x243185BE4EE4B28C),
UL64(0x550C7DC3D5FFB4E2),
89 UL64(0x72BE5D74F27B896F),
UL64(0x80DEB1FE3B1696B1),
90 UL64(0x9BDC06A725C71235),
UL64(0xC19BF174CF692694),
91 UL64(0xE49B69C19EF14AD2),
UL64(0xEFBE4786384F25E3),
92 UL64(0x0FC19DC68B8CD5B5),
UL64(0x240CA1CC77AC9C65),
93 UL64(0x2DE92C6F592B0275),
UL64(0x4A7484AA6EA6E483),
94 UL64(0x5CB0A9DCBD41FBD4),
UL64(0x76F988DA831153B5),
95 UL64(0x983E5152EE66DFAB),
UL64(0xA831C66D2DB43210),
96 UL64(0xB00327C898FB213F),
UL64(0xBF597FC7BEEF0EE4),
97 UL64(0xC6E00BF33DA88FC2),
UL64(0xD5A79147930AA725),
98 UL64(0x06CA6351E003826F),
UL64(0x142929670A0E6E70),
99 UL64(0x27B70A8546D22FFC),
UL64(0x2E1B21385C26C926),
100 UL64(0x4D2C6DFC5AC42AED),
UL64(0x53380D139D95B3DF),
101 UL64(0x650A73548BAF63DE),
UL64(0x766A0ABB3C77B2A8),
102 UL64(0x81C2C92E47EDAEE6),
UL64(0x92722C851482353B),
103 UL64(0xA2BFE8A14CF10364),
UL64(0xA81A664BBC423001),
104 UL64(0xC24B8B70D0F89791),
UL64(0xC76C51A30654BE30),
105 UL64(0xD192E819D6EF5218),
UL64(0xD69906245565A910),
106 UL64(0xF40E35855771202A),
UL64(0x106AA07032BBD1B8),
107 UL64(0x19A4C116B8D2D0C8),
UL64(0x1E376C085141AB53),
108 UL64(0x2748774CDF8EEB99),
UL64(0x34B0BCB5E19B48A8),
109 UL64(0x391C0CB3C5C95A63),
UL64(0x4ED8AA4AE3418ACB),
110 UL64(0x5B9CCA4F7763E373),
UL64(0x682E6FF3D6B2B8A3),
111 UL64(0x748F82EE5DEFB2FC),
UL64(0x78A5636F43172F60),
112 UL64(0x84C87814A1F0AB72),
UL64(0x8CC702081A6439EC),
113 UL64(0x90BEFFFA23631E28),
UL64(0xA4506CEBDE82BDE9),
114 UL64(0xBEF9A3F7B2C67915),
UL64(0xC67178F2E372532B),
115 UL64(0xCA273ECEEA26619C),
UL64(0xD186B8C721C0C207),
116 UL64(0xEADA7DD6CDE0EB1E),
UL64(0xF57D4F7FEE6ED178),
117 UL64(0x06F067AA72176FBA),
UL64(0x0A637DC5A2C898A6),
118 UL64(0x113F9804BEF90DAE),
UL64(0x1B710B35131C471B),
119 UL64(0x28DB77F523047D84),
UL64(0x32CAAB7B40C72493),
120 UL64(0x3C9EBE0A15C9BEBC),
UL64(0x431D67C49C100D4C),
121 UL64(0x4CC5D4BECB3E42B6),
UL64(0x597F299CFC657E2A),
122 UL64(0x5FCB6FAB3AD6FAEC),
UL64(0x6C44198C4A475817)
149 ctx->
state[0] =
UL64(0x6A09E667F3BCC908);
150 ctx->
state[1] =
UL64(0xBB67AE8584CAA73B);
151 ctx->
state[2] =
UL64(0x3C6EF372FE94F82B);
152 ctx->
state[3] =
UL64(0xA54FF53A5F1D36F1);
153 ctx->
state[4] =
UL64(0x510E527FADE682D1);
154 ctx->
state[5] =
UL64(0x9B05688C2B3E6C1F);
155 ctx->
state[6] =
UL64(0x1F83D9ABFB41BD6B);
156 ctx->
state[7] =
UL64(0x5BE0CD19137E2179);
161 ctx->
state[0] =
UL64(0xCBBB9D5DC1059ED8);
162 ctx->
state[1] =
UL64(0x629A292A367CD507);
163 ctx->
state[2] =
UL64(0x9159015A3070DD17);
164 ctx->
state[3] =
UL64(0x152FECD8F70E5939);
165 ctx->
state[4] =
UL64(0x67332667FFC00B31);
166 ctx->
state[5] =
UL64(0x8EB44A8768581511);
167 ctx->
state[6] =
UL64(0xDB0C2E0D64F98FA7);
168 ctx->
state[7] =
UL64(0x47B5481DBEFA4FA4);
177 uint64_t temp1, temp2, W[80];
178 uint64_t A, B, C, D, E, F, G, H;
180 #define SHR(x,n) (x >> n)
181 #define ROTR(x,n) (SHR(x,n) | (x << (64 - n)))
183 #define S0(x) (ROTR(x, 1) ^ ROTR(x, 8) ^ SHR(x, 7))
184 #define S1(x) (ROTR(x,19) ^ ROTR(x,61) ^ SHR(x, 6))
186 #define S2(x) (ROTR(x,28) ^ ROTR(x,34) ^ ROTR(x,39))
187 #define S3(x) (ROTR(x,14) ^ ROTR(x,18) ^ ROTR(x,41))
189 #define F0(x,y,z) ((x & y) | (z & (x | y)))
190 #define F1(x,y,z) (z ^ (x & (y ^ z)))
192 #define P(a,b,c,d,e,f,g,h,x,K) \
194 temp1 = h + S3(e) + F1(e,f,g) + K + x; \
195 temp2 = S2(a) + F0(a,b,c); \
196 d += temp1; h = temp1 + temp2; \
199 for( i = 0; i < 16; i++ )
206 W[i] =
S1(W[i - 2]) + W[i - 7] +
207 S0(W[i - 15]) + W[i - 16];
222 P( A, B, C, D, E, F, G, H, W[i], K[i] ); i++;
223 P( H, A, B, C, D, E, F, G, W[i], K[i] ); i++;
224 P( G, H, A, B, C, D, E, F, W[i], K[i] ); i++;
225 P( F, G, H, A, B, C, D, E, W[i], K[i] ); i++;
226 P( E, F, G, H, A, B, C, D, W[i], K[i] ); i++;
227 P( D, E, F, G, H, A, B, C, W[i], K[i] ); i++;
228 P( C, D, E, F, G, H, A, B, W[i], K[i] ); i++;
229 P( B, C, D, E, F, G, H, A, W[i], K[i] ); i++;
255 left = (
unsigned int) (ctx->
total[0] & 0x7F);
258 ctx->
total[0] += (uint64_t) ilen;
260 if( ctx->
total[0] < (uint64_t) ilen )
263 if( left && ilen >= fill )
265 memcpy( (
void *) (ctx->
buffer + left), input, fill );
280 memcpy( (
void *) (ctx->
buffer + left), input, ilen );
283 static const unsigned char sha512_padding[128] =
285 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
286 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
287 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
288 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
289 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
290 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
291 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
292 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
302 unsigned char msglen[16];
304 high = ( ctx->
total[0] >> 61 )
305 | ( ctx->
total[1] << 3 );
306 low = ( ctx->
total[0] << 3 );
311 last = (size_t)( ctx->
total[0] & 0x7F );
312 padn = ( last < 112 ) ? ( 112 - last ) : ( 240 - last );
324 if( ctx->
is384 == 0 )
336 void sha512(
const unsigned char *input,
size_t ilen,
337 unsigned char output[64],
int is384 )
348 #if defined(POLARSSL_FS_IO)
352 int sha512_file(
const char *path,
unsigned char output[64],
int is384 )
357 unsigned char buf[1024];
359 if( ( f = fopen( path,
"rb" ) ) == NULL )
365 while( ( n = fread( buf, 1,
sizeof( buf ), f ) ) > 0 )
371 if( ferror( f ) != 0 )
382 #ifdef POLARSSL_SHA512_HMAC
386 void sha512_hmac_starts(
sha512_context *ctx,
const unsigned char *key,
387 size_t keylen,
int is384 )
390 unsigned char sum[64];
394 sha512( key, keylen, sum, is384 );
395 keylen = ( is384 ) ? 48 : 64;
399 memset( ctx->
ipad, 0x36, 128 );
400 memset( ctx->
opad, 0x5C, 128 );
402 for( i = 0; i < keylen; i++ )
404 ctx->
ipad[i] = (
unsigned char)( ctx->
ipad[i] ^ key[i] );
405 ctx->
opad[i] = (
unsigned char)( ctx->
opad[i] ^ key[i] );
411 polarssl_zeroize( sum,
sizeof( sum ) );
418 const unsigned char *input,
size_t ilen )
426 void sha512_hmac_finish(
sha512_context *ctx,
unsigned char output[64] )
429 unsigned char tmpbuf[64];
432 hlen = ( is384 == 0 ) ? 64 : 48;
440 polarssl_zeroize( tmpbuf,
sizeof( tmpbuf ) );
455 void sha512_hmac(
const unsigned char *key,
size_t keylen,
456 const unsigned char *input,
size_t ilen,
457 unsigned char output[64],
int is384 )
462 sha512_hmac_starts( &ctx, key, keylen, is384 );
463 sha512_hmac_update( &ctx, input, ilen );
464 sha512_hmac_finish( &ctx, output );
467 #endif // POLARSSL_SHA512_HMAC
468 #ifdef POLARSSL_SELF_TEST
473 static unsigned char sha512_test_buf[3][113] =
476 {
"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
477 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" },
481 static const int sha512_test_buflen[3] =
486 static const unsigned char sha512_test_sum[6][64] =
491 { 0xCB, 0x00, 0x75, 0x3F, 0x45, 0xA3, 0x5E, 0x8B,
492 0xB5, 0xA0, 0x3D, 0x69, 0x9A, 0xC6, 0x50, 0x07,
493 0x27, 0x2C, 0x32, 0xAB, 0x0E, 0xDE, 0xD1, 0x63,
494 0x1A, 0x8B, 0x60, 0x5A, 0x43, 0xFF, 0x5B, 0xED,
495 0x80, 0x86, 0x07, 0x2B, 0xA1, 0xE7, 0xCC, 0x23,
496 0x58, 0xBA, 0xEC, 0xA1, 0x34, 0xC8, 0x25, 0xA7 },
497 { 0x09, 0x33, 0x0C, 0x33, 0xF7, 0x11, 0x47, 0xE8,
498 0x3D, 0x19, 0x2F, 0xC7, 0x82, 0xCD, 0x1B, 0x47,
499 0x53, 0x11, 0x1B, 0x17, 0x3B, 0x3B, 0x05, 0xD2,
500 0x2F, 0xA0, 0x80, 0x86, 0xE3, 0xB0, 0xF7, 0x12,
501 0xFC, 0xC7, 0xC7, 0x1A, 0x55, 0x7E, 0x2D, 0xB9,
502 0x66, 0xC3, 0xE9, 0xFA, 0x91, 0x74, 0x60, 0x39 },
503 { 0x9D, 0x0E, 0x18, 0x09, 0x71, 0x64, 0x74, 0xCB,
504 0x08, 0x6E, 0x83, 0x4E, 0x31, 0x0A, 0x4A, 0x1C,
505 0xED, 0x14, 0x9E, 0x9C, 0x00, 0xF2, 0x48, 0x52,
506 0x79, 0x72, 0xCE, 0xC5, 0x70, 0x4C, 0x2A, 0x5B,
507 0x07, 0xB8, 0xB3, 0xDC, 0x38, 0xEC, 0xC4, 0xEB,
508 0xAE, 0x97, 0xDD, 0xD8, 0x7F, 0x3D, 0x89, 0x85 },
513 { 0xDD, 0xAF, 0x35, 0xA1, 0x93, 0x61, 0x7A, 0xBA,
514 0xCC, 0x41, 0x73, 0x49, 0xAE, 0x20, 0x41, 0x31,
515 0x12, 0xE6, 0xFA, 0x4E, 0x89, 0xA9, 0x7E, 0xA2,
516 0x0A, 0x9E, 0xEE, 0xE6, 0x4B, 0x55, 0xD3, 0x9A,
517 0x21, 0x92, 0x99, 0x2A, 0x27, 0x4F, 0xC1, 0xA8,
518 0x36, 0xBA, 0x3C, 0x23, 0xA3, 0xFE, 0xEB, 0xBD,
519 0x45, 0x4D, 0x44, 0x23, 0x64, 0x3C, 0xE8, 0x0E,
520 0x2A, 0x9A, 0xC9, 0x4F, 0xA5, 0x4C, 0xA4, 0x9F },
521 { 0x8E, 0x95, 0x9B, 0x75, 0xDA, 0xE3, 0x13, 0xDA,
522 0x8C, 0xF4, 0xF7, 0x28, 0x14, 0xFC, 0x14, 0x3F,
523 0x8F, 0x77, 0x79, 0xC6, 0xEB, 0x9F, 0x7F, 0xA1,
524 0x72, 0x99, 0xAE, 0xAD, 0xB6, 0x88, 0x90, 0x18,
525 0x50, 0x1D, 0x28, 0x9E, 0x49, 0x00, 0xF7, 0xE4,
526 0x33, 0x1B, 0x99, 0xDE, 0xC4, 0xB5, 0x43, 0x3A,
527 0xC7, 0xD3, 0x29, 0xEE, 0xB6, 0xDD, 0x26, 0x54,
528 0x5E, 0x96, 0xE5, 0x5B, 0x87, 0x4B, 0xE9, 0x09 },
529 { 0xE7, 0x18, 0x48, 0x3D, 0x0C, 0xE7, 0x69, 0x64,
530 0x4E, 0x2E, 0x42, 0xC7, 0xBC, 0x15, 0xB4, 0x63,
531 0x8E, 0x1F, 0x98, 0xB1, 0x3B, 0x20, 0x44, 0x28,
532 0x56, 0x32, 0xA8, 0x03, 0xAF, 0xA9, 0x73, 0xEB,
533 0xDE, 0x0F, 0xF2, 0x44, 0x87, 0x7E, 0xA6, 0x0A,
534 0x4C, 0xB0, 0x43, 0x2C, 0xE5, 0x77, 0xC3, 0x1B,
535 0xEB, 0x00, 0x9C, 0x5C, 0x2C, 0x49, 0xAA, 0x2E,
536 0x4E, 0xAD, 0xB2, 0x17, 0xAD, 0x8C, 0xC0, 0x9B }
539 #ifdef POLARSSL_SHA512_HMAC
543 static unsigned char sha512_hmac_test_key[7][26] =
545 {
"\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B\x0B"
546 "\x0B\x0B\x0B\x0B" },
548 {
"\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
549 "\xAA\xAA\xAA\xAA" },
550 {
"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10"
551 "\x11\x12\x13\x14\x15\x16\x17\x18\x19" },
552 {
"\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C\x0C"
553 "\x0C\x0C\x0C\x0C" },
558 static const int sha512_hmac_test_keylen[7] =
560 20, 4, 20, 25, 20, 131, 131
563 static unsigned char sha512_hmac_test_buf[7][153] =
566 {
"what do ya want for nothing?" },
567 {
"\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
568 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
569 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
570 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"
571 "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" },
572 {
"\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD"
573 "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD"
574 "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD"
575 "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD"
576 "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD" },
577 {
"Test With Truncation" },
578 {
"Test Using Larger Than Block-Size Key - Hash Key First" },
579 {
"This is a test using a larger than block-size key "
580 "and a larger than block-size data. The key needs to "
581 "be hashed before being used by the HMAC algorithm." }
584 static const int sha512_hmac_test_buflen[7] =
586 8, 28, 50, 50, 20, 54, 152
589 static const unsigned char sha512_hmac_test_sum[14][64] =
594 { 0xAF, 0xD0, 0x39, 0x44, 0xD8, 0x48, 0x95, 0x62,
595 0x6B, 0x08, 0x25, 0xF4, 0xAB, 0x46, 0x90, 0x7F,
596 0x15, 0xF9, 0xDA, 0xDB, 0xE4, 0x10, 0x1E, 0xC6,
597 0x82, 0xAA, 0x03, 0x4C, 0x7C, 0xEB, 0xC5, 0x9C,
598 0xFA, 0xEA, 0x9E, 0xA9, 0x07, 0x6E, 0xDE, 0x7F,
599 0x4A, 0xF1, 0x52, 0xE8, 0xB2, 0xFA, 0x9C, 0xB6 },
600 { 0xAF, 0x45, 0xD2, 0xE3, 0x76, 0x48, 0x40, 0x31,
601 0x61, 0x7F, 0x78, 0xD2, 0xB5, 0x8A, 0x6B, 0x1B,
602 0x9C, 0x7E, 0xF4, 0x64, 0xF5, 0xA0, 0x1B, 0x47,
603 0xE4, 0x2E, 0xC3, 0x73, 0x63, 0x22, 0x44, 0x5E,
604 0x8E, 0x22, 0x40, 0xCA, 0x5E, 0x69, 0xE2, 0xC7,
605 0x8B, 0x32, 0x39, 0xEC, 0xFA, 0xB2, 0x16, 0x49 },
606 { 0x88, 0x06, 0x26, 0x08, 0xD3, 0xE6, 0xAD, 0x8A,
607 0x0A, 0xA2, 0xAC, 0xE0, 0x14, 0xC8, 0xA8, 0x6F,
608 0x0A, 0xA6, 0x35, 0xD9, 0x47, 0xAC, 0x9F, 0xEB,
609 0xE8, 0x3E, 0xF4, 0xE5, 0x59, 0x66, 0x14, 0x4B,
610 0x2A, 0x5A, 0xB3, 0x9D, 0xC1, 0x38, 0x14, 0xB9,
611 0x4E, 0x3A, 0xB6, 0xE1, 0x01, 0xA3, 0x4F, 0x27 },
612 { 0x3E, 0x8A, 0x69, 0xB7, 0x78, 0x3C, 0x25, 0x85,
613 0x19, 0x33, 0xAB, 0x62, 0x90, 0xAF, 0x6C, 0xA7,
614 0x7A, 0x99, 0x81, 0x48, 0x08, 0x50, 0x00, 0x9C,
615 0xC5, 0x57, 0x7C, 0x6E, 0x1F, 0x57, 0x3B, 0x4E,
616 0x68, 0x01, 0xDD, 0x23, 0xC4, 0xA7, 0xD6, 0x79,
617 0xCC, 0xF8, 0xA3, 0x86, 0xC6, 0x74, 0xCF, 0xFB },
618 { 0x3A, 0xBF, 0x34, 0xC3, 0x50, 0x3B, 0x2A, 0x23,
619 0xA4, 0x6E, 0xFC, 0x61, 0x9B, 0xAE, 0xF8, 0x97 },
620 { 0x4E, 0xCE, 0x08, 0x44, 0x85, 0x81, 0x3E, 0x90,
621 0x88, 0xD2, 0xC6, 0x3A, 0x04, 0x1B, 0xC5, 0xB4,
622 0x4F, 0x9E, 0xF1, 0x01, 0x2A, 0x2B, 0x58, 0x8F,
623 0x3C, 0xD1, 0x1F, 0x05, 0x03, 0x3A, 0xC4, 0xC6,
624 0x0C, 0x2E, 0xF6, 0xAB, 0x40, 0x30, 0xFE, 0x82,
625 0x96, 0x24, 0x8D, 0xF1, 0x63, 0xF4, 0x49, 0x52 },
626 { 0x66, 0x17, 0x17, 0x8E, 0x94, 0x1F, 0x02, 0x0D,
627 0x35, 0x1E, 0x2F, 0x25, 0x4E, 0x8F, 0xD3, 0x2C,
628 0x60, 0x24, 0x20, 0xFE, 0xB0, 0xB8, 0xFB, 0x9A,
629 0xDC, 0xCE, 0xBB, 0x82, 0x46, 0x1E, 0x99, 0xC5,
630 0xA6, 0x78, 0xCC, 0x31, 0xE7, 0x99, 0x17, 0x6D,
631 0x38, 0x60, 0xE6, 0x11, 0x0C, 0x46, 0x52, 0x3E },
636 { 0x87, 0xAA, 0x7C, 0xDE, 0xA5, 0xEF, 0x61, 0x9D,
637 0x4F, 0xF0, 0xB4, 0x24, 0x1A, 0x1D, 0x6C, 0xB0,
638 0x23, 0x79, 0xF4, 0xE2, 0xCE, 0x4E, 0xC2, 0x78,
639 0x7A, 0xD0, 0xB3, 0x05, 0x45, 0xE1, 0x7C, 0xDE,
640 0xDA, 0xA8, 0x33, 0xB7, 0xD6, 0xB8, 0xA7, 0x02,
641 0x03, 0x8B, 0x27, 0x4E, 0xAE, 0xA3, 0xF4, 0xE4,
642 0xBE, 0x9D, 0x91, 0x4E, 0xEB, 0x61, 0xF1, 0x70,
643 0x2E, 0x69, 0x6C, 0x20, 0x3A, 0x12, 0x68, 0x54 },
644 { 0x16, 0x4B, 0x7A, 0x7B, 0xFC, 0xF8, 0x19, 0xE2,
645 0xE3, 0x95, 0xFB, 0xE7, 0x3B, 0x56, 0xE0, 0xA3,
646 0x87, 0xBD, 0x64, 0x22, 0x2E, 0x83, 0x1F, 0xD6,
647 0x10, 0x27, 0x0C, 0xD7, 0xEA, 0x25, 0x05, 0x54,
648 0x97, 0x58, 0xBF, 0x75, 0xC0, 0x5A, 0x99, 0x4A,
649 0x6D, 0x03, 0x4F, 0x65, 0xF8, 0xF0, 0xE6, 0xFD,
650 0xCA, 0xEA, 0xB1, 0xA3, 0x4D, 0x4A, 0x6B, 0x4B,
651 0x63, 0x6E, 0x07, 0x0A, 0x38, 0xBC, 0xE7, 0x37 },
652 { 0xFA, 0x73, 0xB0, 0x08, 0x9D, 0x56, 0xA2, 0x84,
653 0xEF, 0xB0, 0xF0, 0x75, 0x6C, 0x89, 0x0B, 0xE9,
654 0xB1, 0xB5, 0xDB, 0xDD, 0x8E, 0xE8, 0x1A, 0x36,
655 0x55, 0xF8, 0x3E, 0x33, 0xB2, 0x27, 0x9D, 0x39,
656 0xBF, 0x3E, 0x84, 0x82, 0x79, 0xA7, 0x22, 0xC8,
657 0x06, 0xB4, 0x85, 0xA4, 0x7E, 0x67, 0xC8, 0x07,
658 0xB9, 0x46, 0xA3, 0x37, 0xBE, 0xE8, 0x94, 0x26,
659 0x74, 0x27, 0x88, 0x59, 0xE1, 0x32, 0x92, 0xFB },
660 { 0xB0, 0xBA, 0x46, 0x56, 0x37, 0x45, 0x8C, 0x69,
661 0x90, 0xE5, 0xA8, 0xC5, 0xF6, 0x1D, 0x4A, 0xF7,
662 0xE5, 0x76, 0xD9, 0x7F, 0xF9, 0x4B, 0x87, 0x2D,
663 0xE7, 0x6F, 0x80, 0x50, 0x36, 0x1E, 0xE3, 0xDB,
664 0xA9, 0x1C, 0xA5, 0xC1, 0x1A, 0xA2, 0x5E, 0xB4,
665 0xD6, 0x79, 0x27, 0x5C, 0xC5, 0x78, 0x80, 0x63,
666 0xA5, 0xF1, 0x97, 0x41, 0x12, 0x0C, 0x4F, 0x2D,
667 0xE2, 0xAD, 0xEB, 0xEB, 0x10, 0xA2, 0x98, 0xDD },
668 { 0x41, 0x5F, 0xAD, 0x62, 0x71, 0x58, 0x0A, 0x53,
669 0x1D, 0x41, 0x79, 0xBC, 0x89, 0x1D, 0x87, 0xA6 },
670 { 0x80, 0xB2, 0x42, 0x63, 0xC7, 0xC1, 0xA3, 0xEB,
671 0xB7, 0x14, 0x93, 0xC1, 0xDD, 0x7B, 0xE8, 0xB4,
672 0x9B, 0x46, 0xD1, 0xF4, 0x1B, 0x4A, 0xEE, 0xC1,
673 0x12, 0x1B, 0x01, 0x37, 0x83, 0xF8, 0xF3, 0x52,
674 0x6B, 0x56, 0xD0, 0x37, 0xE0, 0x5F, 0x25, 0x98,
675 0xBD, 0x0F, 0xD2, 0x21, 0x5D, 0x6A, 0x1E, 0x52,
676 0x95, 0xE6, 0x4F, 0x73, 0xF6, 0x3F, 0x0A, 0xEC,
677 0x8B, 0x91, 0x5A, 0x98, 0x5D, 0x78, 0x65, 0x98 },
678 { 0xE3, 0x7B, 0x6A, 0x77, 0x5D, 0xC8, 0x7D, 0xBA,
679 0xA4, 0xDF, 0xA9, 0xF9, 0x6E, 0x5E, 0x3F, 0xFD,
680 0xDE, 0xBD, 0x71, 0xF8, 0x86, 0x72, 0x89, 0x86,
681 0x5D, 0xF5, 0xA3, 0x2D, 0x20, 0xCD, 0xC9, 0x44,
682 0xB6, 0x02, 0x2C, 0xAC, 0x3C, 0x49, 0x82, 0xB1,
683 0x0D, 0x5E, 0xEB, 0x55, 0xC3, 0xE4, 0xDE, 0x15,
684 0x13, 0x46, 0x76, 0xFB, 0x6D, 0xE0, 0x44, 0x60,
685 0x65, 0xC9, 0x74, 0x40, 0xFA, 0x8C, 0x6A, 0x58 }
687 #endif // POLARSSL_SHA512_HMAC
691 int sha512_self_test(
int verbose )
693 int i, j, k, buflen, ret = 0;
694 unsigned char buf[1024];
695 unsigned char sha512sum[64];
700 for( i = 0; i < 6; i++ )
712 memset( buf,
'a', buflen = 1000 );
714 for( j = 0; j < 1000; j++ )
719 sha512_test_buflen[j] );
723 if( memcmp( sha512sum, sha512_test_sum[i], 64 - k * 16 ) != 0 )
738 #ifdef POLARSSL_SHA512_HMAC
739 for( i = 0; i < 14; i++ )
747 if( j == 5 || j == 6 )
749 memset( buf,
'\xAA', buflen = 131 );
750 sha512_hmac_starts( &ctx, buf, buflen, k );
753 sha512_hmac_starts( &ctx, sha512_hmac_test_key[j],
754 sha512_hmac_test_keylen[j], k );
756 sha512_hmac_update( &ctx, sha512_hmac_test_buf[j],
757 sha512_hmac_test_buflen[j] );
759 sha512_hmac_finish( &ctx, sha512sum );
761 buflen = ( j == 4 ) ? 16 : 64 - k * 16;
763 if( memcmp( sha512sum, sha512_hmac_test_sum[i], buflen ) != 0 )
778 #endif // POLARSSL_SHA512_HMAC
SHA-512 context structure.
unsigned char buffer[128]