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 | |