From 0a05129bd626d92c56d48eb105b9fd711331ff1b Mon Sep 17 00:00:00 2001 From: Yosuke Shimizu Date: Thu, 9 Apr 2026 17:12:57 +0900 Subject: [PATCH 1/2] Fix authTagSz validation --- wolfcrypt/src/aes.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wolfcrypt/src/aes.c b/wolfcrypt/src/aes.c index 41b01031c4..b92590f271 100644 --- a/wolfcrypt/src/aes.c +++ b/wolfcrypt/src/aes.c @@ -12604,7 +12604,7 @@ int wc_AesGcmDecryptFinal(Aes* aes, const byte* authTag, word32 authTagSz) /* Check validity of parameters. */ if ((aes == NULL) || (authTag == NULL) || (authTagSz > WC_AES_BLOCK_SIZE) || - (authTagSz == 0)) { + (authTagSz < WOLFSSL_MIN_AUTH_TAG_SZ)) { ret = BAD_FUNC_ARG; } From d48fc1801e0d3563d42c8b54eb6637a6c59014ef Mon Sep 17 00:00:00 2001 From: Yosuke Shimizu Date: Mon, 13 Apr 2026 08:39:56 +0900 Subject: [PATCH 2/2] Add regression test for authTagSz validation --- wolfcrypt/test/test.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/wolfcrypt/test/test.c b/wolfcrypt/test/test.c index 5499ec8947..4caa125ae9 100644 --- a/wolfcrypt/test/test.c +++ b/wolfcrypt/test/test.c @@ -18056,6 +18056,21 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t aesgcm_test(void) ERROR_OUT(WC_TEST_RET_ENC_NC, out); #endif + /* Regression test: wc_AesGcmDecryptFinal must reject authTagSz below + * WOLFSSL_MIN_AUTH_TAG_SZ, consistent with wc_AesGcmDecrypt and + * wc_AesGcmEncryptFinal. */ +#if defined(HAVE_AES_DECRYPT) && WOLFSSL_MIN_AUTH_TAG_SZ > 1 + ret = wc_AesGcmDecryptInit(enc, k1, sizeof(k1), iv1, sizeof(iv1)); + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); + ret = wc_AesGcmDecryptUpdate(enc, resultP, c1, sizeof(c1), a, sizeof(a)); + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); + ret = wc_AesGcmDecryptFinal(enc, t1, WOLFSSL_MIN_AUTH_TAG_SZ - 1); + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); +#endif /* HAVE_AES_DECRYPT && WOLFSSL_MIN_AUTH_TAG_SZ > 1 */ + /* alen is the size to pass in with each update. */ for (alen = 1; alen < WC_AES_BLOCK_SIZE + 1; alen++) { ret = wc_AesGcmEncryptInit(enc, k1, sizeof(k1), iv1, sizeof(iv1));