86 #if defined(__cplusplus) 91 #if defined( _MSC_VER ) && ( _MSC_VER > 800 ) 92 #pragma intrinsic(memcpy) 95 #if 0 && defined(_MSC_VER) 99 #define rotl32(x,n) (((x) << n) | ((x) >> (32 - n))) 100 #define rotr32(x,n) (((x) >> n) | ((x) << (32 - n))) 103 #if !defined(bswap_32) 104 #define bswap_32(x) ((rotr32((x), 24) & 0x00ff00ff) | (rotr32((x), 8) & 0xff00ff00)) 107 #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN) 115 #define ch(x,y,z) (((x) & (y)) ^ (~(x) & (z))) 116 #define maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) 120 #define ch(x,y,z) ((z) ^ ((x) & ((y) ^ (z)))) 121 #define maj(x,y,z) (((x) & (y)) | ((z) & ((x) ^ (y)))) 127 #define vf(n,i) v[(n - i) & 7] 129 #define hf(i) (p[i & 15] += \ 130 g_1(p[(i + 14) & 15]) + p[(i + 9) & 15] + g_0(p[(i + 1) & 15])) 132 #define v_cycle(i,j) \ 133 vf(7,i) += (j ? hf(i) : p[i]) + k_0[i+j] \ 134 + s_1(vf(4,i)) + ch(vf(4,i),vf(5,i),vf(6,i)); \ 135 vf(3,i) += vf(7,i); \ 136 vf(7,i) += s_0(vf(0,i))+ maj(vf(0,i),vf(1,i),vf(2,i)) 138 #if defined(SHA_224) || defined(SHA_256) 140 #define SHA256_MASK (SHA256_BLOCK_SIZE - 1) 142 #if defined(SWAP_BYTES) 143 #define bsw_32(p,n) \ 144 { int _i = (n); while(_i--) ((uint_32t*)p)[_i] = bswap_32(((uint_32t*)p)[_i]); } 149 #define s_0(x) (rotr32((x), 2) ^ rotr32((x), 13) ^ rotr32((x), 22)) 150 #define s_1(x) (rotr32((x), 6) ^ rotr32((x), 11) ^ rotr32((x), 25)) 151 #define g_0(x) (rotr32((x), 7) ^ rotr32((x), 18) ^ ((x) >> 3)) 152 #define g_1(x) (rotr32((x), 17) ^ rotr32((x), 19) ^ ((x) >> 10)) 161 #define one_cycle(a,b,c,d,e,f,g,h,k,w) \ 162 q(h) += s_1(q(e)) + ch(q(e), q(f), q(g)) + k + w; \ 163 q(d) += q(h); q(h) += s_0(q(a)) + maj(q(a), q(b), q(c)) 168 { 0x428a2f98ul, 0x71374491ul, 0xb5c0fbcful, 0xe9b5dba5ul,
169 0x3956c25bul, 0x59f111f1ul, 0x923f82a4ul, 0xab1c5ed5ul,
170 0xd807aa98ul, 0x12835b01ul, 0x243185beul, 0x550c7dc3ul,
171 0x72be5d74ul, 0x80deb1feul, 0x9bdc06a7ul, 0xc19bf174ul,
172 0xe49b69c1ul, 0xefbe4786ul, 0x0fc19dc6ul, 0x240ca1ccul,
173 0x2de92c6ful, 0x4a7484aaul, 0x5cb0a9dcul, 0x76f988daul,
174 0x983e5152ul, 0xa831c66dul, 0xb00327c8ul, 0xbf597fc7ul,
175 0xc6e00bf3ul, 0xd5a79147ul, 0x06ca6351ul, 0x14292967ul,
176 0x27b70a85ul, 0x2e1b2138ul, 0x4d2c6dfcul, 0x53380d13ul,
177 0x650a7354ul, 0x766a0abbul, 0x81c2c92eul, 0x92722c85ul,
178 0xa2bfe8a1ul, 0xa81a664bul, 0xc24b8b70ul, 0xc76c51a3ul,
179 0xd192e819ul, 0xd6990624ul, 0xf40e3585ul, 0x106aa070ul,
180 0x19a4c116ul, 0x1e376c08ul, 0x2748774cul, 0x34b0bcb5ul,
181 0x391c0cb3ul, 0x4ed8aa4aul, 0x5b9cca4ful, 0x682e6ff3ul,
182 0x748f82eeul, 0x78a5636ful, 0x84c87814ul, 0x8cc70208ul,
183 0x90befffaul, 0xa4506cebul, 0xbef9a3f7ul, 0xc67178f2ul,
194 #if !defined(UNROLL_SHA2) 196 uint_32t j, *p = ctx->
wbuf, v[8];
198 memcpy(v, ctx->
hash, 8 *
sizeof(uint_32t));
200 for(j = 0; j < 64; j += 16)
212 ctx->
hash[0] += v[0]; ctx->
hash[1] += v[1];
213 ctx->
hash[2] += v[2]; ctx->
hash[3] += v[3];
214 ctx->
hash[4] += v[4]; ctx->
hash[5] += v[5];
215 ctx->
hash[6] += v[6]; ctx->
hash[7] += v[7];
219 uint_32t *p = ctx->
wbuf,v0,v1,v2,v3,v4,v5,v6,v7;
221 v0 = ctx->
hash[0]; v1 = ctx->
hash[1];
222 v2 = ctx->
hash[2]; v3 = ctx->
hash[3];
223 v4 = ctx->
hash[4]; v5 = ctx->
hash[5];
224 v6 = ctx->
hash[6]; v7 = ctx->
hash[7];
294 ctx->
hash[0] += v0; ctx->
hash[1] += v1;
295 ctx->
hash[2] += v2; ctx->
hash[3] += v3;
296 ctx->
hash[4] += v4; ctx->
hash[5] += v5;
297 ctx->
hash[6] += v6; ctx->
hash[7] += v7;
307 const unsigned char *sp = data;
309 if((ctx->
count[0] += len) < len)
314 memcpy(((
unsigned char*)ctx->
wbuf) + pos, sp, space);
320 memcpy(((
unsigned char*)ctx->
wbuf) + pos, sp, len);
337 ctx->
wbuf[i >> 2] &= 0xffffff80 << 8 * (~i & 3);
338 ctx->
wbuf[i >> 2] |= 0x00000080 << 8 * (~i & 3);
345 if(i < 60) ctx->
wbuf[15] = 0;
365 for(i = 0; i < hlen; ++i)
366 hval[i] = (
unsigned char)(ctx->
hash[i >> 2] >> (8 * (~i & 3)));
375 0xc1059ed8ul, 0x367cd507ul, 0x3070dd17ul, 0xf70e5939ul,
376 0xffc00b31ul, 0x68581511ul, 0x64f98fa7ul, 0xbefa4fa4ul
382 memcpy(ctx->
hash,
i224, 8 *
sizeof(uint_32t));
404 0x6a09e667ul, 0xbb67ae85ul, 0x3c6ef372ul, 0xa54ff53aul,
405 0x510e527ful, 0x9b05688cul, 0x1f83d9abul, 0x5be0cd19ul
411 memcpy(ctx->
hash,
i256, 8 *
sizeof(uint_32t));
429 #if defined(SHA_384) || defined(SHA_512) 431 #define SHA512_MASK (SHA512_BLOCK_SIZE - 1) 433 #define rotr64(x,n) (((x) >> n) | ((x) << (64 - n))) 435 #if !defined(bswap_64) 436 #define bswap_64(x) (((uint_64t)(bswap_32((uint_32t)(x)))) << 32 | bswap_32((uint_32t)((x) >> 32))) 439 #if defined(SWAP_BYTES) 440 #define bsw_64(p,n) \ 441 { int _i = (n); while(_i--) ((uint_64t*)p)[_i] = bswap_64(((uint_64t*)p)[_i]); } 456 #define s_0(x) (rotr64((x), 28) ^ rotr64((x), 34) ^ rotr64((x), 39)) 457 #define s_1(x) (rotr64((x), 14) ^ rotr64((x), 18) ^ rotr64((x), 41)) 458 #define g_0(x) (rotr64((x), 1) ^ rotr64((x), 8) ^ ((x) >> 7)) 459 #define g_1(x) (rotr64((x), 19) ^ rotr64((x), 61) ^ ((x) >> 6)) 466 li_64(428a2f98d728ae22), li_64(7137449123ef65cd),
467 li_64(b5c0fbcfec4d3b2f), li_64(e9b5dba58189dbbc),
468 li_64(3956c25bf348b538), li_64(59f111f1b605d019),
469 li_64(923f82a4af194f9b), li_64(ab1c5ed5da6d8118),
470 li_64(d807aa98a3030242), li_64(12835b0145706fbe),
471 li_64(243185be4ee4b28c), li_64(550c7dc3d5ffb4e2),
472 li_64(72be5d74f27b896f), li_64(80deb1fe3b1696b1),
473 li_64(9bdc06a725c71235), li_64(c19bf174cf692694),
474 li_64(e49b69c19ef14ad2), li_64(efbe4786384f25e3),
475 li_64(0fc19dc68b8cd5b5), li_64(240ca1cc77ac9c65),
476 li_64(2de92c6f592b0275), li_64(4a7484aa6ea6e483),
477 li_64(5cb0a9dcbd41fbd4), li_64(76f988da831153b5),
478 li_64(983e5152ee66dfab), li_64(a831c66d2db43210),
479 li_64(b00327c898fb213f), li_64(bf597fc7beef0ee4),
480 li_64(c6e00bf33da88fc2), li_64(d5a79147930aa725),
481 li_64(06ca6351e003826f), li_64(142929670a0e6e70),
482 li_64(27b70a8546d22ffc), li_64(2e1b21385c26c926),
483 li_64(4d2c6dfc5ac42aed), li_64(53380d139d95b3df),
484 li_64(650a73548baf63de), li_64(766a0abb3c77b2a8),
485 li_64(81c2c92e47edaee6), li_64(92722c851482353b),
486 li_64(a2bfe8a14cf10364), li_64(a81a664bbc423001),
487 li_64(c24b8b70d0f89791), li_64(c76c51a30654be30),
488 li_64(d192e819d6ef5218), li_64(d69906245565a910),
489 li_64(f40e35855771202a), li_64(106aa07032bbd1b8),
490 li_64(19a4c116b8d2d0c8), li_64(1e376c085141ab53),
491 li_64(2748774cdf8eeb99), li_64(34b0bcb5e19b48a8),
492 li_64(391c0cb3c5c95a63), li_64(4ed8aa4ae3418acb),
493 li_64(5b9cca4f7763e373), li_64(682e6ff3d6b2b8a3),
494 li_64(748f82ee5defb2fc), li_64(78a5636f43172f60),
495 li_64(84c87814a1f0ab72), li_64(8cc702081a6439ec),
496 li_64(90befffa23631e28), li_64(a4506cebde82bde9),
497 li_64(bef9a3f7b2c67915), li_64(c67178f2e372532b),
498 li_64(ca273eceea26619c), li_64(d186b8c721c0c207),
499 li_64(eada7dd6cde0eb1e), li_64(f57d4f7fee6ed178),
500 li_64(06f067aa72176fba), li_64(0a637dc5a2c898a6),
501 li_64(113f9804bef90dae), li_64(1b710b35131c471b),
502 li_64(28db77f523047d84), li_64(32caab7b40c72493),
503 li_64(3c9ebe0a15c9bebc), li_64(431d67c49c100d4c),
504 li_64(4cc5d4becb3e42b6), li_64(597f299cfc657e2a),
505 li_64(5fcb6fab3ad6faec), li_64(6c44198c4a475817)
515 { uint_64t v[8], *p = ctx->
wbuf;
518 memcpy(v, ctx->
hash, 8 *
sizeof(uint_64t));
520 for(j = 0; j < 80; j += 16)
532 ctx->
hash[0] += v[0]; ctx->
hash[1] += v[1];
533 ctx->
hash[2] += v[2]; ctx->
hash[3] += v[3];
534 ctx->
hash[4] += v[4]; ctx->
hash[5] += v[5];
535 ctx->
hash[6] += v[6]; ctx->
hash[7] += v[7];
548 const unsigned char *sp = data;
550 if((ctx->
count[0] += len) < len)
555 memcpy(((
unsigned char*)ctx->
wbuf) + pos, sp, space);
561 memcpy(((
unsigned char*)ctx->
wbuf) + pos, sp, len);
578 ctx->
wbuf[i >> 3] &= li_64(ffffffffffffff00) << 8 * (~i & 7);
579 ctx->
wbuf[i >> 3] |= li_64(0000000000000080) << 8 * (~i & 7);
586 if(i < 120) ctx->
wbuf[15] = 0;
606 for(i = 0; i < hlen; ++i)
607 hval[i] = (
unsigned char)(ctx->
hash[i >> 3] >> (8 * (~i & 7)));
618 li_64(cbbb9d5dc1059ed8), li_64(629a292a367cd507),
619 li_64(9159015a3070dd17), li_64(152fecd8f70e5939),
620 li_64(67332667ffc00b31), li_64(8eb44a8768581511),
621 li_64(db0c2e0d64f98fa7), li_64(47b5481dbefa4fa4)
627 memcpy(ctx->
hash,
i384, 8 *
sizeof(uint_64t));
651 li_64(6a09e667f3bcc908), li_64(bb67ae8584caa73b),
652 li_64(3c6ef372fe94f82b), li_64(a54ff53a5f1d36f1),
653 li_64(510e527fade682d1), li_64(9b05688c2b3e6c1f),
654 li_64(1f83d9abfb41bd6b), li_64(5be0cd19137e2179)
660 memcpy(ctx->
hash,
i512, 8 *
sizeof(uint_64t));
680 #define CTX_224(x) ((x)->uu->ctx256) 681 #define CTX_256(x) ((x)->uu->ctx256) 682 #define CTX_384(x) ((x)->uu->ctx512) 683 #define CTX_512(x) ((x)->uu->ctx512) 695 ctx->
sha2_len = 28;
return EXIT_SUCCESS;
701 ctx->
sha2_len = 32;
return EXIT_SUCCESS;
707 ctx->
sha2_len = 48;
return EXIT_SUCCESS;
713 ctx->
sha2_len = 64;
return EXIT_SUCCESS;
715 default:
return EXIT_FAILURE;
758 const unsigned char data[],
unsigned long len)
771 #if defined(__cplusplus)