libsodium (1.0.19)
1 #ifndef crypto_hash_sha512_H
2 #define crypto_hash_sha512_H
3
4 /*
5 * WARNING: Unless you absolutely need to use SHA512 for interoperability,
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) __attribute__ ((nonnull(1)));
40
41 SODIUM_EXPORT
42 int crypto_hash_sha512_init(crypto_hash_sha512_state *state)
43 __attribute__ ((nonnull));
44
45 SODIUM_EXPORT
46 int crypto_hash_sha512_update(crypto_hash_sha512_state *state,
47 const unsigned char *in,
48 unsigned long long inlen)
49 __attribute__ ((nonnull(1)));
50
51 SODIUM_EXPORT
52 int crypto_hash_sha512_final(crypto_hash_sha512_state *state,
53 unsigned char *out)
54 __attribute__ ((nonnull));
55
56 #ifdef __cplusplus
57 }
58 #endif
59
60 #endif