| /* | |
| * WARNING: Unless you absolutely need to use SHA256 for interoperatibility, | |
| * purposes, you might want to consider crypto_generichash() instead. | |
| * Unlike SHA256, crypto_generichash() is not vulnerable to length | |
| * extension attacks. | |
| */ | |
| extern "C" { | |
| typedef struct crypto_hash_sha256_state { | |
| uint32_t state[8]; | |
| uint64_t count; | |
| uint8_t buf[64]; | |
| } crypto_hash_sha256_state; | |
| SODIUM_EXPORT | |
| size_t crypto_hash_sha256_statebytes(void); | |
| SODIUM_EXPORT | |
| size_t crypto_hash_sha256_bytes(void); | |
| SODIUM_EXPORT | |
| int crypto_hash_sha256(unsigned char *out, const unsigned char *in, | |
| unsigned long long inlen) __attribute__ ((nonnull(1))); | |
| SODIUM_EXPORT | |
| int crypto_hash_sha256_init(crypto_hash_sha256_state *state) | |
| __attribute__ ((nonnull)); | |
| SODIUM_EXPORT | |
| int crypto_hash_sha256_update(crypto_hash_sha256_state *state, | |
| const unsigned char *in, | |
| unsigned long long inlen) | |
| __attribute__ ((nonnull(1))); | |
| SODIUM_EXPORT | |
| int crypto_hash_sha256_final(crypto_hash_sha256_state *state, | |
| unsigned char *out) | |
| __attribute__ ((nonnull)); | |
| } | |