* SHA512 block compression function. The 512-bit state is transformed via * the 512-bit input block to produce a new state. */
| 158 | * the 512-bit input block to produce a new state. |
| 159 | */ |
| 160 | static void |
| 161 | SHA512_Transform(uint64_t * state, const unsigned char block[SHA512_BLOCK_LENGTH]) |
| 162 | { |
| 163 | uint64_t W[80]; |
| 164 | uint64_t S[8]; |
| 165 | int i; |
| 166 | |
| 167 | /* 1. Prepare the first part of the message schedule W. */ |
| 168 | be64dec_vect(W, block, SHA512_BLOCK_LENGTH); |
| 169 | |
| 170 | /* 2. Initialize working variables. */ |
| 171 | memcpy(S, state, SHA512_DIGEST_LENGTH); |
| 172 | |
| 173 | /* 3. Mix. */ |
| 174 | for (i = 0; i < 80; i += 16) { |
| 175 | RNDr(S, W, 0, i); |
| 176 | RNDr(S, W, 1, i); |
| 177 | RNDr(S, W, 2, i); |
| 178 | RNDr(S, W, 3, i); |
| 179 | RNDr(S, W, 4, i); |
| 180 | RNDr(S, W, 5, i); |
| 181 | RNDr(S, W, 6, i); |
| 182 | RNDr(S, W, 7, i); |
| 183 | RNDr(S, W, 8, i); |
| 184 | RNDr(S, W, 9, i); |
| 185 | RNDr(S, W, 10, i); |
| 186 | RNDr(S, W, 11, i); |
| 187 | RNDr(S, W, 12, i); |
| 188 | RNDr(S, W, 13, i); |
| 189 | RNDr(S, W, 14, i); |
| 190 | RNDr(S, W, 15, i); |
| 191 | |
| 192 | if (i == 64) |
| 193 | break; |
| 194 | MSCH(W, 0, i); |
| 195 | MSCH(W, 1, i); |
| 196 | MSCH(W, 2, i); |
| 197 | MSCH(W, 3, i); |
| 198 | MSCH(W, 4, i); |
| 199 | MSCH(W, 5, i); |
| 200 | MSCH(W, 6, i); |
| 201 | MSCH(W, 7, i); |
| 202 | MSCH(W, 8, i); |
| 203 | MSCH(W, 9, i); |
| 204 | MSCH(W, 10, i); |
| 205 | MSCH(W, 11, i); |
| 206 | MSCH(W, 12, i); |
| 207 | MSCH(W, 13, i); |
| 208 | MSCH(W, 14, i); |
| 209 | MSCH(W, 15, i); |
| 210 | } |
| 211 | |
| 212 | /* 4. Mix local working variables into global state */ |
| 213 | for (i = 0; i < 8; i++) |
| 214 | state[i] += S[i]; |
| 215 | } |
| 216 | |
| 217 | static unsigned char PAD[SHA512_BLOCK_LENGTH] = { |
no test coverage detected