| 72 | } |
| 73 | |
| 74 | void SHA1ProcessMessageBlock(SHA1Context *context) |
| 75 | { |
| 76 | DWORD i, temp; |
| 77 | DWORD W[80]; |
| 78 | DWORD A, B, C, D, E; |
| 79 | |
| 80 | DWORD *buf = (DWORD *)context->buffer; |
| 81 | for (i = 0; i < 16; i++) |
| 82 | W[i] = SwapLE32(buf[i]); |
| 83 | |
| 84 | |
| 85 | for (i = 16; i < 80; i++) { |
| 86 | W[i] = W[i - 16] ^ W[i - 14] ^ W[i - 8] ^ W[i - 3]; |
| 87 | } |
| 88 | |
| 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]; |
| 94 | |
| 95 | for (i = 0; i < 20; i++) { |
| 96 | temp = SHA1CircularShift(5, A) + ((B & C) | ((~B) & D)) + E + W[i] + 0x5A827999; |
| 97 | E = D; |
| 98 | D = C; |
| 99 | C = SHA1CircularShift(30, B); |
| 100 | B = A; |
| 101 | A = temp; |
| 102 | } |
| 103 | |
| 104 | for (i = 20; i < 40; i++) { |
| 105 | temp = SHA1CircularShift(5, A) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1; |
| 106 | E = D; |
| 107 | D = C; |
| 108 | C = SHA1CircularShift(30, B); |
| 109 | B = A; |
| 110 | A = temp; |
| 111 | } |
| 112 | |
| 113 | for (i = 40; i < 60; i++) { |
| 114 | temp = SHA1CircularShift(5, A) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC; |
| 115 | E = D; |
| 116 | D = C; |
| 117 | C = SHA1CircularShift(30, B); |
| 118 | B = A; |
| 119 | A = temp; |
| 120 | } |
| 121 | |
| 122 | for (i = 60; i < 80; i++) { |
| 123 | temp = SHA1CircularShift(5, A) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6; |
| 124 | E = D; |
| 125 | D = C; |
| 126 | C = SHA1CircularShift(30, B); |
| 127 | B = A; |
| 128 | A = temp; |
| 129 | } |
| 130 | |
| 131 | context->state[0] += A; |
no test coverage detected