From e20291d78e5118ef594f651cc60843e191476438 Mon Sep 17 00:00:00 2001 From: Paul Barker Date: Sat, 16 Jan 2016 17:25:14 +0000 Subject: [PATCH] Add crypt_generichash_blake2b_statebytes function The function crypto_generichash_statebytes exists to dynamically determine the size of a crypto_generichash_state struct. This is useful when using libsodium from a language which can't use sizeof on C types. However, no equivalent existed for the crypto_generichash_blake2b_state struct for users who want to explicitly use the blake2b algorithm. The function crypt_generichash_blake2b_statebytes is added to fill this gap. --- .../crypto_generichash/blake2/generichash_blake2_api.c | 7 +++++++ src/libsodium/include/sodium/crypto_generichash_blake2b.h | 3 +++ test/default/generichash3.c | 1 + 3 files changed, 11 insertions(+) diff --git a/src/libsodium/crypto_generichash/blake2/generichash_blake2_api.c b/src/libsodium/crypto_generichash/blake2/generichash_blake2_api.c index b775921e..14f16e42 100644 --- a/src/libsodium/crypto_generichash/blake2/generichash_blake2_api.c +++ b/src/libsodium/crypto_generichash/blake2/generichash_blake2_api.c @@ -39,3 +39,10 @@ size_t crypto_generichash_blake2b_personalbytes(void) { return crypto_generichash_blake2b_PERSONALBYTES; } + +size_t +crypto_generichash_blake2b_statebytes(void) +{ + return (sizeof(crypto_generichash_blake2b_state) + (size_t) 63U) + & ~(size_t) 63U; +} diff --git a/src/libsodium/include/sodium/crypto_generichash_blake2b.h b/src/libsodium/include/sodium/crypto_generichash_blake2b.h index 1708813e..3998e1bd 100644 --- a/src/libsodium/include/sodium/crypto_generichash_blake2b.h +++ b/src/libsodium/include/sodium/crypto_generichash_blake2b.h @@ -67,6 +67,9 @@ size_t crypto_generichash_blake2b_saltbytes(void); SODIUM_EXPORT size_t crypto_generichash_blake2b_personalbytes(void); +SODIUM_EXPORT +size_t crypto_generichash_blake2b_statebytes(void); + SODIUM_EXPORT int crypto_generichash_blake2b(unsigned char *out, size_t outlen, const unsigned char *in, diff --git a/test/default/generichash3.c b/test/default/generichash3.c index e430b725..fa0045e2 100644 --- a/test/default/generichash3.c +++ b/test/default/generichash3.c @@ -20,6 +20,7 @@ main(void) size_t i; size_t j; + assert(crypto_generichash_blake2b_statebytes() >= sizeof st); for (h = 0; h < crypto_generichash_blake2b_KEYBYTES_MAX; ++h) { k[h] = (unsigned char) h; }