50 for(
int t = 0; t < 16; t++)
52 W[t] = ((uint32_t)block[t * 4] << 24) | ((uint32_t)block[t * 4 + 1] << 16) | ((uint32_t)block[t * 4 + 2] << 8) |
53 ((uint32_t)block[t * 4 + 3]);
55 for(
int t = 16; t < 80; t++) { W[t] =
ROTL32(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1); }
57 uint32_t a = state[0];
58 uint32_t b = state[1];
59 uint32_t c = state[2];
60 uint32_t d = state[3];
61 uint32_t e = state[4];
63 for(
int t = 0; t < 80; t++)
67 temp =
ROTL32(a, 5) +
F0(b, c, d) + e + W[t] + 0x5A827999UL;
69 temp =
ROTL32(a, 5) +
F1(b, c, d) + e + W[t] + 0x6ED9EBA1UL;
71 temp =
ROTL32(a, 5) +
F2(b, c, d) + e + W[t] + 0x8F1BBCDCUL;
73 temp =
ROTL32(a, 5) +
F3(b, c, d) + e + W[t] + 0xCA62C1D6UL;
127 memset(pad, 0,
sizeof(pad));
130 uint8_t length_be[8];
131 uint64_t bits = ctx->
count;
132 for(
int i = 0; i < 8; i++) { length_be[7 - i] = (uint8_t)(bits >> (i * 8)); }
135 uint32_t buffer_bytes = (uint32_t)((ctx->
count >> 3) & 0x3F);
137 uint32_t pad_len = (buffer_bytes < 56) ? (56 - buffer_bytes) : (120 - buffer_bytes);
143 for(
int i = 0; i < 5; i++)
145 digest[i * 4] = (uint8_t)(ctx->
state[i] >> 24);
146 digest[i * 4 + 1] = (uint8_t)(ctx->
state[i] >> 16);
147 digest[i * 4 + 2] = (uint8_t)(ctx->
state[i] >> 8);
148 digest[i * 4 + 3] = (uint8_t)(ctx->
state[i]);