From 4defa543c4a08e986d93077a738ffb89fbc2985d Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 15 Mar 2026 13:06:59 +0100 Subject: [PATCH] Relax crypto_auth_hmacsha{256,512}_init to accept NULL pointers --- src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256.c | 5 +++++ src/libsodium/crypto_auth/hmacsha512/auth_hmacsha512.c | 5 +++++ src/libsodium/include/sodium/crypto_auth_hmacsha256.h | 2 +- src/libsodium/include/sodium/crypto_auth_hmacsha512.h | 2 +- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256.c b/src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256.c index a951e932..7c0c57c3 100644 --- a/src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256.c +++ b/src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256.c @@ -3,6 +3,7 @@ #include #include +#include "core.h" #include "crypto_auth_hmacsha256.h" #include "crypto_hash_sha256.h" #include "crypto_verify_32.h" @@ -47,6 +48,10 @@ crypto_auth_hmacsha256_init(crypto_auth_hmacsha256_state *state, crypto_hash_sha256_final(&state->ictx, khash); key = khash; keylen = 32; + } else if (key == NULL) { + if (keylen > 0) { + sodium_misuse(); + } } crypto_hash_sha256_init(&state->ictx); memset(pad, 0x36, 64); diff --git a/src/libsodium/crypto_auth/hmacsha512/auth_hmacsha512.c b/src/libsodium/crypto_auth/hmacsha512/auth_hmacsha512.c index 018d7a4e..67e3e085 100644 --- a/src/libsodium/crypto_auth/hmacsha512/auth_hmacsha512.c +++ b/src/libsodium/crypto_auth/hmacsha512/auth_hmacsha512.c @@ -3,6 +3,7 @@ #include #include +#include "core.h" #include "crypto_auth_hmacsha512.h" #include "crypto_hash_sha512.h" #include "crypto_verify_64.h" @@ -47,6 +48,10 @@ crypto_auth_hmacsha512_init(crypto_auth_hmacsha512_state *state, crypto_hash_sha512_final(&state->ictx, khash); key = khash; keylen = 64; + } else if (key == NULL) { + if (keylen > 0) { + sodium_misuse(); + } } crypto_hash_sha512_init(&state->ictx); memset(pad, 0x36, 128); diff --git a/src/libsodium/include/sodium/crypto_auth_hmacsha256.h b/src/libsodium/include/sodium/crypto_auth_hmacsha256.h index 3da864c7..5c4d44bb 100644 --- a/src/libsodium/include/sodium/crypto_auth_hmacsha256.h +++ b/src/libsodium/include/sodium/crypto_auth_hmacsha256.h @@ -46,7 +46,7 @@ size_t crypto_auth_hmacsha256_statebytes(void); SODIUM_EXPORT int crypto_auth_hmacsha256_init(crypto_auth_hmacsha256_state *state, const unsigned char *key, - size_t keylen) __attribute__ ((nonnull)); + size_t keylen) __attribute__ ((nonnull(1))); SODIUM_EXPORT int crypto_auth_hmacsha256_update(crypto_auth_hmacsha256_state *state, diff --git a/src/libsodium/include/sodium/crypto_auth_hmacsha512.h b/src/libsodium/include/sodium/crypto_auth_hmacsha512.h index d992cb81..3910953d 100644 --- a/src/libsodium/include/sodium/crypto_auth_hmacsha512.h +++ b/src/libsodium/include/sodium/crypto_auth_hmacsha512.h @@ -46,7 +46,7 @@ size_t crypto_auth_hmacsha512_statebytes(void); SODIUM_EXPORT int crypto_auth_hmacsha512_init(crypto_auth_hmacsha512_state *state, const unsigned char *key, - size_t keylen) __attribute__ ((nonnull)); + size_t keylen) __attribute__ ((nonnull(1))); SODIUM_EXPORT int crypto_auth_hmacsha512_update(crypto_auth_hmacsha512_state *state,