107 context->Length_High = context->Length_Low = 0;
108 context->Message_Block_Index = 0;
111 context->Intermediate_Hash[0] = 0x67452301;
112 context->Intermediate_Hash[1] = 0xEFCDAB89;
113 context->Intermediate_Hash[2] = 0x98BADCFE;
114 context->Intermediate_Hash[3] = 0x10325476;
115 context->Intermediate_Hash[4] = 0xC3D2E1F0;
117 context->Computed = 0;
262 const uint32_t K[4] = {
263 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6
268 uint32_t A, B, C, D, E;
273 for (t = 0; t < 16; t++) {
274 W[t] = ((uint32_t) context->Message_Block[t * 4]) << 24;
275 W[t] |= ((uint32_t) context->Message_Block[t * 4 + 1]) << 16;
276 W[t] |= ((uint32_t) context->Message_Block[t * 4 + 2]) << 8;
277 W[t] |= ((uint32_t) context->Message_Block[t * 4 + 3]);
280 for (t = 16; t < 80; t++) {
281 W[t] =
SHA1_ROTL(1, W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16]);
284 A = context->Intermediate_Hash[0];
285 B = context->Intermediate_Hash[1];
286 C = context->Intermediate_Hash[2];
287 D = context->Intermediate_Hash[3];
288 E = context->Intermediate_Hash[4];
290 for (t = 0; t < 20; t++) {
299 for (t = 20; t < 40; t++) {
308 for (t = 40; t < 60; t++) {
317 for (t = 60; t < 80; t++) {
326 context->Intermediate_Hash[0] += A;
327 context->Intermediate_Hash[1] += B;
328 context->Intermediate_Hash[2] += C;
329 context->Intermediate_Hash[3] += D;
330 context->Intermediate_Hash[4] += E;
332 context->Message_Block_Index = 0;
379 context->Message_Block[context->Message_Block_Index++] = Pad_Byte;
381 context->Message_Block[context->Message_Block_Index++] = 0;
386 context->Message_Block[context->Message_Block_Index++] = Pad_Byte;
389 context->Message_Block[context->Message_Block_Index++] = 0;
395 context->Message_Block[56] = (uint8_t) (context->Length_High >> 24);
396 context->Message_Block[57] = (uint8_t) (context->Length_High >> 16);
397 context->Message_Block[58] = (uint8_t) (context->Length_High >> 8);
398 context->Message_Block[59] = (uint8_t) (context->Length_High);
399 context->Message_Block[60] = (uint8_t) (context->Length_Low >> 24);
400 context->Message_Block[61] = (uint8_t) (context->Length_Low >> 16);
401 context->Message_Block[62] = (uint8_t) (context->Length_Low >> 8);
402 context->Message_Block[63] = (uint8_t) (context->Length_Low);
int SHA1FinalBits(SHA1Context *context, uint8_t message_bits, unsigned int length)
SHA1FinalBits Add in any final bits of the message.