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