MCPcopy Create free account
hub / github.com/REhints/HexRaysCodeXplorer / SHA1ProcessMessageBlock

Function SHA1ProcessMessageBlock

src/HexRaysCodeXplorer/Utility.cpp:169–242  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

167}
168
169void SHA1ProcessMessageBlock(SHA1Context *context)
170{
171 const uint32_t K[] = { 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6};
172 int t; // Loop counter
173 uint32_t temp; // Temporary word value
174 uint32_t W[80]; // Word sequence
175 uint32_t A, B, C, D, E; // Word buffers
176 // Initialize the first 16 words in the array W
177 for (t = 0; t < 16; t++)
178 {
179 W[t] = context->Message_Block[t * 4] << 24;
180 W[t] |= context->Message_Block[t * 4 + 1] << 16;
181 W[t] |= context->Message_Block[t * 4 + 2] << 8;
182 W[t] |= context->Message_Block[t * 4 + 3];
183 }
184
185 for (t = 16; t < 80; t++)
186 W[t] = SHA1CircularShift(1, W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16]);
187
188 A = context->Intermediate_Hash[0];
189 B = context->Intermediate_Hash[1];
190 C = context->Intermediate_Hash[2];
191 D = context->Intermediate_Hash[3];
192 E = context->Intermediate_Hash[4];
193
194 for (t = 0; t < 20; t++)
195 {
196 temp = SHA1CircularShift(5, A) +
197 ((B & C) | ((~B) & D)) + E + W[t] + K[0];
198 E = D;
199 D = C;
200 C = SHA1CircularShift(30, B);
201 B = A;
202 A = temp;
203 }
204
205 for (t = 20; t < 40; t++)
206 {
207 temp = SHA1CircularShift(5, A) + (B ^ C ^ D) + E + W[t] + K[1];
208 E = D;
209 D = C;
210 C = SHA1CircularShift(30, B);
211 B = A;
212 A = temp;
213 }
214
215 for (t = 40; t < 60; t++)
216 {
217 temp = SHA1CircularShift(5, A) +
218 ((B & C) | (B & D) | (C & D)) + E + W[t] + K[2];
219 E = D;
220 D = C;
221 C = SHA1CircularShift(30, B);
222 B = A;
223 A = temp;
224 }
225
226 for (t = 60; t < 80; t++)

Callers 2

SHA1InputFunction · 0.85
SHA1PadMessageFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected