20 return (word << bits) | (~((~word) >> (32 - bits)));
22 return (word << bits) | (word >> (32 - bits));
37 DWORD *Message_Digest_Block;
40 Message_Digest_Block = (DWORD *)Message_Digest;
42 for (i = 0; i < 5; i++) {
44 Message_Digest_Block++;
60 count = context->
count[0] + 8 * len;
61 if (count < context->count[0])
64 context->
count[0] = count;
65 context->
count[1] += len >> 29;
67 for (i = len; i >= 64; i -= 64) {
68 memcpy(context->
buffer, message_array,
sizeof(context->
buffer));
80 DWORD *buf = (DWORD *)context->
buffer;
81 for (i = 0; i < 16; i++)
85 for (i = 16; i < 80; i++) {
86 W[i] = W[i - 16] ^ W[i - 14] ^ W[i - 8] ^ W[i - 3];
89 A = context->
state[0];
90 B = context->
state[1];
91 C = context->
state[2];
92 D = context->
state[3];
93 E = context->
state[4];
95 for (i = 0; i < 20; i++) {
104 for (i = 20; i < 40; i++) {
113 for (i = 40; i < 60; i++) {
114 temp =
SHA1CircularShift(5, A) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC;
122 for (i = 60; i < 80; i++) {
131 context->
state[0] += A;
132 context->
state[1] += B;
133 context->
state[2] += C;
134 context->
state[3] += D;
135 context->
state[4] += E;
145 context->
count[0] = 0;
146 context->
count[1] = 0;
147 context->
state[0] = 0x67452301;
148 context->
state[1] = 0xEFCDAB89;
149 context->
state[2] = 0x98BADCFE;
150 context->
state[3] = 0x10325476;
151 context->
state[4] = 0xC3D2E1F0;