]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
accelerated: accept NULL as digest argument for gnutls_hash_output
authorDaiki Ueno <ueno@gnu.org>
Tue, 2 Dec 2025 06:10:37 +0000 (15:10 +0900)
committerDaiki Ueno <ueno@gnu.org>
Tue, 2 Dec 2025 07:23:10 +0000 (16:23 +0900)
As a follow-up of commit eced4c0c2b3d3ee6a35dab99616a25910b623f79 this
also extends the accelerated version of gnutls_hash_output to be able
to reset the context by passing NULL as the digest argument.

Signed-off-by: Daiki Ueno <ueno@gnu.org>
lib/accelerated/aarch64/sha-aarch64.c
lib/accelerated/afalg.c
lib/accelerated/x86/sha-padlock.c
lib/accelerated/x86/sha-x86-ssse3.c

index 725dd5456dbea3d2c875b78c1c42879e8516ab54..3b7089c803e04fda0b467ee84d0a57cebafa3466 100644 (file)
@@ -327,6 +327,11 @@ static int wrap_aarch64_hash_output(void *src_ctx, void *digest,
        struct aarch64_hash_ctx *ctx;
        ctx = src_ctx;
 
+       if (digest == NULL) {
+               ctx->init(ctx->ctx_ptr);
+               return 0;
+       }
+
        if (digestsize < ctx->length)
                return gnutls_assert_val(GNUTLS_E_SHORT_MEMORY_BUFFER);
 
index 8971e93fae6e8b2839e65efcd6a89ab040762db8..8438cf46c60618e6c9bf9befc9cbb4976e0c0d1c 100644 (file)
@@ -628,6 +628,10 @@ static int afalg_mac_output(void *ctx, void *digest, size_t digestsize)
 {
        struct kcapi_handle *handle = ctx;
 
+       if (digest == NULL) {
+               return gnutls_assert_val(GNUTLS_E_UNIMPLEMENTED_FEATURE);
+       }
+
        if (kcapi_md_final(handle, digest, digestsize) < 0) {
                gnutls_assert();
                return GNUTLS_E_ENCRYPTION_FAILED;
index 44e1eabd4b855ec15fb5c353623f5fa85c14a683..edc2c63a0c7ae78705750070c7706acc941d6c18 100644 (file)
@@ -310,6 +310,11 @@ static int wrap_padlock_hash_output(void *src_ctx, void *digest,
        struct padlock_hash_ctx *ctx;
        ctx = src_ctx;
 
+       if (digest == NULL) {
+               ctx->init(ctx->ctx_ptr);
+               return 0;
+       }
+
        if (digestsize < ctx->length)
                return gnutls_assert_val(GNUTLS_E_SHORT_MEMORY_BUFFER);
 
index eab6c7043a21bdf670c19cd49b7f8b769a64da79..0f3e613b83ecaae435add3b3edcfaa1a0fcc5542 100644 (file)
@@ -323,6 +323,11 @@ static int wrap_x86_hash_output(void *src_ctx, void *digest, size_t digestsize)
        struct x86_hash_ctx *ctx;
        ctx = src_ctx;
 
+       if (digest == NULL) {
+               ctx->init(ctx->ctx_ptr);
+               return 0;
+       }
+
        if (digestsize < ctx->length)
                return gnutls_assert_val(GNUTLS_E_SHORT_MEMORY_BUFFER);