| 167 | } |
| 168 | |
| 169 | void 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++) |
no outgoing calls
no test coverage detected