| 1 | /* |
| 2 | * Special version of sha512.c that uses the libc SHA512 implementation |
| 3 | * of libc. |
| 4 | */ |
| 5 | |
| 6 | #include <string.h> |
| 7 | #include <sys/sha2.h> |
| 8 | |
| 9 | #include "internal/sha.h" |
| 10 | |
| 11 | static const uint64_t sha512_224_initial_hash_value[] = { |
| 12 | 0x8c3d37c819544da2ULL, |
| 13 | 0x73e1996689dcd4d6ULL, |
| 14 | 0x1dfab7ae32ff9c82ULL, |
| 15 | 0x679dd514582f9fcfULL, |
| 16 | 0x0f6d2b697bd44da8ULL, |
| 17 | 0x77e36f7304c48942ULL, |
| 18 | 0x3f9d85a86a1d36c8ULL, |
| 19 | 0x1112e6ad91d692a1ULL, |
| 20 | }; |
| 21 | |
| 22 | static const uint64_t sha512_256_initial_hash_value[] = { |
| 23 | 0x22312194fc2bf72cULL, |
| 24 | 0x9f555fa3c84c64c2ULL, |
| 25 | 0x2393b86b6f53b151ULL, |
| 26 | 0x963877195940eabdULL, |
| 27 | 0x96283ee2a88effe3ULL, |
| 28 | 0xbe5e1e2553863992ULL, |
| 29 | 0x2b0199fc2c85b8aaULL, |
| 30 | 0x0eb72ddc81c52ca2ULL, |
| 31 | }; |
| 32 | |
| 33 | int |
| 34 | sha512_224_init(SHA512_CTX *context) |
| 35 | { |
| 36 | if (context == NULL) |
| 37 | return 1; |
| 38 | |
| 39 | memcpy(context->state, sha512_224_initial_hash_value, |
| 40 | (size_t)(SHA512_DIGEST_LENGTH)); |
| 41 | memset(context->buffer, 0, (size_t)(SHA512_BLOCK_LENGTH)); |
| 42 | context->bitcount[0] = context->bitcount[1] = 0; |
| 43 | |
| 44 | return 1; |
| 45 | |
| 46 | } |
| 47 | |
| 48 | int |
| 49 | sha512_256_init(SHA512_CTX *context) |
| 50 | { |
| 51 | if (context == NULL) |
| 52 | return 1; |
| 53 | |
| 54 | memcpy(context->state, sha512_256_initial_hash_value, |
| 55 | (size_t)(SHA512_DIGEST_LENGTH)); |
| 56 | memset(context->buffer, 0, (size_t)(SHA512_BLOCK_LENGTH)); |
| 57 | context->bitcount[0] = context->bitcount[1] = 0; |
| 58 | |
| 59 | return 1; |
| 60 | } |
| 61 | |