1 #ifndef crypto_hash_sha512_H
2 #define crypto_hash_sha512_H
3 
4 /*
5  * WARNING: Unless you absolutely need to use SHA512 for interoperatibility,
6  * purposes, you might want to consider crypto_generichash() instead.
7  * Unlike SHA512, crypto_generichash() is not vulnerable to length
8  * extension attacks.
9  */
10 
11 #include <stddef.h>
12 #include <stdint.h>
13 #include <stdlib.h>
14 
15 #include "export.h"
16 
17 #ifdef __cplusplus
18 # ifdef __GNUC__
19 #  pragma GCC diagnostic ignored "-Wlong-long"
20 # endif
21 extern "C" {
22 #endif
23 
24 typedef struct crypto_hash_sha512_state {
25     uint64_t state[8];
26     uint64_t count[2];
27     uint8_t  buf[128];
28 } crypto_hash_sha512_state;
29 
30 SODIUM_EXPORT
31 size_t crypto_hash_sha512_statebytes(void);
32 
33 #define crypto_hash_sha512_BYTES 64U
34 SODIUM_EXPORT
35 size_t crypto_hash_sha512_bytes(void);
36 
37 SODIUM_EXPORT
38 int crypto_hash_sha512(unsigned char *out, const unsigned char *in,
39                        unsigned long long inlen);
40 
41 SODIUM_EXPORT
42 int crypto_hash_sha512_init(crypto_hash_sha512_state *state);
43 
44 SODIUM_EXPORT
45 int crypto_hash_sha512_update(crypto_hash_sha512_state *state,
46                               const unsigned char *in,
47                               unsigned long long inlen);
48 
49 SODIUM_EXPORT
50 int crypto_hash_sha512_final(crypto_hash_sha512_state *state,
51                              unsigned char *out);
52 
53 #ifdef __cplusplus
54 }
55 #endif
56 
57 #endif
58