1#ifndef crypto_hash_sha256_H 2#define crypto_hash_sha256_H 3 4/* 5 * WARNING: Unless you absolutely need to use SHA256 for interoperatibility, 6 * purposes, you might want to consider crypto_generichash() instead. 7 * Unlike SHA256, 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 21extern "C" { 22#endif 23 24typedef struct crypto_hash_sha256_state { 25 uint32_t state[8]; 26 uint64_t count; 27 uint8_t buf[64]; 28} crypto_hash_sha256_state; 29 30SODIUM_EXPORT 31size_t crypto_hash_sha256_statebytes(void); 32 33#define crypto_hash_sha256_BYTES 32U 34SODIUM_EXPORT 35size_t crypto_hash_sha256_bytes(void); 36 37SODIUM_EXPORT 38int crypto_hash_sha256(unsigned char *out, const unsigned char *in, 39 unsigned long long inlen); 40 41SODIUM_EXPORT 42int crypto_hash_sha256_init(crypto_hash_sha256_state *state); 43 44SODIUM_EXPORT 45int crypto_hash_sha256_update(crypto_hash_sha256_state *state, 46 const unsigned char *in, 47 unsigned long long inlen); 48 49SODIUM_EXPORT 50int crypto_hash_sha256_final(crypto_hash_sha256_state *state, 51 unsigned char *out); 52 53#ifdef __cplusplus 54} 55#endif 56 57#endif 58