| 296 | // finish computing the SHA digest |
| 297 | |
| 298 | void sha_final(unsigned char digest[SHA_DIGESTSIZE], SHA_INFO *sha_info) |
| 299 | { |
| 300 | const Sha1::LONG lo_bit_count = sha_info->count_lo; |
| 301 | const Sha1::LONG hi_bit_count = sha_info->count_hi; |
| 302 | unsigned int count = (int) ((lo_bit_count >> 3) & 0x3f); |
| 303 | sha_info->data[count++] = 0x80; |
| 304 | if (count > SHA_BLOCKSIZE - 8) |
| 305 | { |
| 306 | memset(sha_info->data + count, 0, SHA_BLOCKSIZE - count); |
| 307 | sha_transform(sha_info); |
| 308 | memset(sha_info->data, 0, SHA_BLOCKSIZE - 8); |
| 309 | } |
| 310 | else { |
| 311 | memset(sha_info->data + count, 0, SHA_BLOCKSIZE - 8 - count); |
| 312 | } |
| 313 | sha_info->data[56] = (unsigned char) ((hi_bit_count >> 24) & 0xff); |
| 314 | sha_info->data[57] = (unsigned char) ((hi_bit_count >> 16) & 0xff); |
| 315 | sha_info->data[58] = (unsigned char) ((hi_bit_count >> 8) & 0xff); |
| 316 | sha_info->data[59] = (unsigned char) ((hi_bit_count >> 0) & 0xff); |
| 317 | sha_info->data[60] = (unsigned char) ((lo_bit_count >> 24) & 0xff); |
| 318 | sha_info->data[61] = (unsigned char) ((lo_bit_count >> 16) & 0xff); |
| 319 | sha_info->data[62] = (unsigned char) ((lo_bit_count >> 8) & 0xff); |
| 320 | sha_info->data[63] = (unsigned char) ((lo_bit_count >> 0) & 0xff); |
| 321 | sha_transform(sha_info); |
| 322 | digest[ 0] = (unsigned char) ((sha_info->digest[0] >> 24) & 0xff); |
| 323 | digest[ 1] = (unsigned char) ((sha_info->digest[0] >> 16) & 0xff); |
| 324 | digest[ 2] = (unsigned char) ((sha_info->digest[0] >> 8) & 0xff); |
| 325 | digest[ 3] = (unsigned char) ((sha_info->digest[0] ) & 0xff); |
| 326 | digest[ 4] = (unsigned char) ((sha_info->digest[1] >> 24) & 0xff); |
| 327 | digest[ 5] = (unsigned char) ((sha_info->digest[1] >> 16) & 0xff); |
| 328 | digest[ 6] = (unsigned char) ((sha_info->digest[1] >> 8) & 0xff); |
| 329 | digest[ 7] = (unsigned char) ((sha_info->digest[1] ) & 0xff); |
| 330 | digest[ 8] = (unsigned char) ((sha_info->digest[2] >> 24) & 0xff); |
| 331 | digest[ 9] = (unsigned char) ((sha_info->digest[2] >> 16) & 0xff); |
| 332 | digest[10] = (unsigned char) ((sha_info->digest[2] >> 8) & 0xff); |
| 333 | digest[11] = (unsigned char) ((sha_info->digest[2] ) & 0xff); |
| 334 | digest[12] = (unsigned char) ((sha_info->digest[3] >> 24) & 0xff); |
| 335 | digest[13] = (unsigned char) ((sha_info->digest[3] >> 16) & 0xff); |
| 336 | digest[14] = (unsigned char) ((sha_info->digest[3] >> 8) & 0xff); |
| 337 | digest[15] = (unsigned char) ((sha_info->digest[3] ) & 0xff); |
| 338 | digest[16] = (unsigned char) ((sha_info->digest[4] >> 24) & 0xff); |
| 339 | digest[17] = (unsigned char) ((sha_info->digest[4] >> 16) & 0xff); |
| 340 | digest[18] = (unsigned char) ((sha_info->digest[4] >> 8) & 0xff); |
| 341 | digest[19] = (unsigned char) ((sha_info->digest[4] ) & 0xff); |
| 342 | } |
| 343 | |
| 344 | } // anonymous namespace |
| 345 |
no test coverage detected