From 1ce0c03a383257630f585b895e4b93ba8e25696e Mon Sep 17 00:00:00 2001 From: aidan Date: Thu, 30 Jul 2026 20:00:36 -0600 Subject: [PATCH 1/4] tests: guard weak-hash checks on WC_SIG_MIN_HASH_TYPE, fix RNG cleanup --- tests/api/test_signature.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/api/test_signature.c b/tests/api/test_signature.c index 25b7ca7dd6c..a367eddce61 100644 --- a/tests/api/test_signature.c +++ b/tests/api/test_signature.c @@ -182,7 +182,7 @@ int test_wc_falcon_sign_verify(void) XMEMSET(&key, 0, sizeof(key)); ExpectIntEQ(wc_falcon_init(&key), 0); ExpectIntEQ(wc_falcon_set_level(&key, 1), 0); - ExpectIntEQ(wc_InitRng(&rng), 0); + DoExpectIntEQ(wc_InitRng(&rng), 0); /* Use the embedded benchmark key rather than generating one: this is a * wrapper-level smoke test (the native suite lives in test_falcon.c), so @@ -304,7 +304,7 @@ int test_wc_SignatureDecisionCoverage(void) WC_RNG rng; XMEMSET(data, 0x5A, sizeof(data)); - ExpectIntEQ(wc_InitRng(&rng), 0); + DoExpectIntEQ(wc_InitRng(&rng), 0); ExpectIntEQ(wc_SignatureVerify(WC_HASH_TYPE_SHA256, sig_type, NULL, data_len, sig, sig_len, &ecc, key_len), @@ -401,7 +401,7 @@ int test_wc_SignatureDecisionCoverage(void) word32 genSigLen = (word32)eccSigMax; WC_RNG rng; - ExpectIntEQ(wc_InitRng(&rng), 0); + DoExpectIntEQ(wc_InitRng(&rng), 0); ExpectIntEQ(wc_SignatureGenerateHash_ex(WC_HASH_TYPE_SHA256, sig_type, NULL, hash_len, genSig, &genSigLen, &ecc, key_len, @@ -478,7 +478,7 @@ int test_wc_SignatureDecisionCoverage(void) WC_RNG rng; XMEMSET(data, 0xA5, sizeof(data)); - ExpectIntEQ(wc_InitRng(&rng), 0); + DoExpectIntEQ(wc_InitRng(&rng), 0); ExpectIntEQ(wc_SignatureGenerate(WC_HASH_TYPE_SHA256, sig_type, NULL, data_len, genSig, &genSigLen, &ecc, key_len, &rng), @@ -639,7 +639,7 @@ int test_wc_SignatureDecisionCoverage(void) XMEMSET(data, 0x24, sizeof(data)); XMEMSET(otherData, 0x99, sizeof(otherData)); - ExpectIntEQ(wc_InitRng(&rng), 0); + DoExpectIntEQ(wc_InitRng(&rng), 0); ExpectIntEQ(wc_SignatureGenerate(WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_RSA, data, data_len, realSig, &realSigLen, &rsa_key, key_len, &rng), 0); @@ -688,7 +688,7 @@ int test_wc_SignatureFeatureCoverage(void) ExpectIntEQ(wc_ecc_init(&ecc), 0); ExpectIntEQ(wc_ecc_import_raw(&ecc, qx, qy, d, "SECP256R1"), 0); - ExpectIntEQ(wc_InitRng(&rng), 0); + DoExpectIntEQ(wc_InitRng(&rng), 0); /* wc_SignatureGetSize(): positive path for ECC */ ExpectIntGT(wc_SignatureGetSize(sig_type, &ecc, key_len), 0); @@ -774,7 +774,7 @@ int test_wc_SignatureFeatureCoverage(void) ExpectIntEQ(wc_InitRsaKey_ex(&rsa_key, HEAP_HINT, testDevId), 0); ExpectIntEQ(wc_RsaPrivateKeyDecode(tmp, &idx, &rsa_key, (word32)bytes), 0); - ExpectIntEQ(wc_InitRng(&rng), 0); + DoExpectIntEQ(wc_InitRng(&rng), 0); /* wc_SignatureGetSize(): positive path for RSA */ ExpectIntGT(wc_SignatureGetSize(WC_SIGNATURE_TYPE_RSA, &rsa_key, From 589088c71e07ae4a2442e0394919edc97dc9405c Mon Sep 17 00:00:00 2001 From: Aidan Keefe Date: Fri, 31 Jul 2026 11:35:54 -0600 Subject: [PATCH 2/4] review fix --- tests/api/test_signature.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/api/test_signature.c b/tests/api/test_signature.c index a367eddce61..5ad13b80dec 100644 --- a/tests/api/test_signature.c +++ b/tests/api/test_signature.c @@ -41,6 +41,13 @@ #include #include +/* Must be kept in sync with wolfcrypt/src/signature.c */ +#ifndef WC_SIG_MIN_HASH_TYPE + #define TEST_SIG_MIN_HASH_TYPE WC_HASH_TYPE_SHA256 +#else + #define TEST_SIG_MIN_HASH_TYPE WC_SIG_MIN_HASH_TYPE +#endif + /* Testing wc_SignatureGetSize() for signature type ECC */ int test_wc_SignatureGetSize_ecc(void) { From 2f9fc44c5659a21822ddbd635f4c7844e5986082 Mon Sep 17 00:00:00 2001 From: Aidan Keefe Date: Tue, 4 Aug 2026 15:47:06 -0600 Subject: [PATCH 3/4] test fixes for signature now properly test hash strength check and do not leak memory on failure --- tests/api/test_signature.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/tests/api/test_signature.c b/tests/api/test_signature.c index 5ad13b80dec..a367eddce61 100644 --- a/tests/api/test_signature.c +++ b/tests/api/test_signature.c @@ -41,13 +41,6 @@ #include #include -/* Must be kept in sync with wolfcrypt/src/signature.c */ -#ifndef WC_SIG_MIN_HASH_TYPE - #define TEST_SIG_MIN_HASH_TYPE WC_HASH_TYPE_SHA256 -#else - #define TEST_SIG_MIN_HASH_TYPE WC_SIG_MIN_HASH_TYPE -#endif - /* Testing wc_SignatureGetSize() for signature type ECC */ int test_wc_SignatureGetSize_ecc(void) { From 276f865d8ce41a6883f2176cd45f54212c69fb5d Mon Sep 17 00:00:00 2001 From: Aidan Keefe Date: Wed, 5 Aug 2026 13:53:33 -0600 Subject: [PATCH 4/4] revert DoExpect to Expect and memset rng so on init fail the object is safe to free --- tests/api/test_signature.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/tests/api/test_signature.c b/tests/api/test_signature.c index a367eddce61..b34cbbcf89f 100644 --- a/tests/api/test_signature.c +++ b/tests/api/test_signature.c @@ -180,9 +180,10 @@ int test_wc_falcon_sign_verify(void) static const byte msg[] = "wolfssl falcon coverage"; XMEMSET(&key, 0, sizeof(key)); + XMEMSET(&rng, 0, sizeof(rng)); ExpectIntEQ(wc_falcon_init(&key), 0); ExpectIntEQ(wc_falcon_set_level(&key, 1), 0); - DoExpectIntEQ(wc_InitRng(&rng), 0); + ExpectIntEQ(wc_InitRng(&rng), 0); /* Use the embedded benchmark key rather than generating one: this is a * wrapper-level smoke test (the native suite lives in test_falcon.c), so @@ -304,7 +305,8 @@ int test_wc_SignatureDecisionCoverage(void) WC_RNG rng; XMEMSET(data, 0x5A, sizeof(data)); - DoExpectIntEQ(wc_InitRng(&rng), 0); + XMEMSET(&rng, 0, sizeof(rng)); + ExpectIntEQ(wc_InitRng(&rng), 0); ExpectIntEQ(wc_SignatureVerify(WC_HASH_TYPE_SHA256, sig_type, NULL, data_len, sig, sig_len, &ecc, key_len), @@ -401,7 +403,8 @@ int test_wc_SignatureDecisionCoverage(void) word32 genSigLen = (word32)eccSigMax; WC_RNG rng; - DoExpectIntEQ(wc_InitRng(&rng), 0); + XMEMSET(&rng, 0, sizeof(rng)); + ExpectIntEQ(wc_InitRng(&rng), 0); ExpectIntEQ(wc_SignatureGenerateHash_ex(WC_HASH_TYPE_SHA256, sig_type, NULL, hash_len, genSig, &genSigLen, &ecc, key_len, @@ -478,7 +481,8 @@ int test_wc_SignatureDecisionCoverage(void) WC_RNG rng; XMEMSET(data, 0xA5, sizeof(data)); - DoExpectIntEQ(wc_InitRng(&rng), 0); + XMEMSET(&rng, 0, sizeof(rng)); + ExpectIntEQ(wc_InitRng(&rng), 0); ExpectIntEQ(wc_SignatureGenerate(WC_HASH_TYPE_SHA256, sig_type, NULL, data_len, genSig, &genSigLen, &ecc, key_len, &rng), @@ -533,7 +537,6 @@ int test_wc_SignatureDecisionCoverage(void) WC_NO_ERR_TRACE(BAD_FUNC_ARG)); } #endif - DoExpectIntEQ(wc_FreeRng(&rng), 0); } @@ -639,7 +642,9 @@ int test_wc_SignatureDecisionCoverage(void) XMEMSET(data, 0x24, sizeof(data)); XMEMSET(otherData, 0x99, sizeof(otherData)); - DoExpectIntEQ(wc_InitRng(&rng), 0); + XMEMSET(&rng, 0, sizeof(rng)); + ExpectIntEQ(wc_InitRng(&rng), 0); + ExpectIntEQ(wc_SignatureGenerate(WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_RSA, data, data_len, realSig, &realSigLen, &rsa_key, key_len, &rng), 0); @@ -685,10 +690,11 @@ int test_wc_SignatureFeatureCoverage(void) XMEMSET(&ecc, 0, sizeof(ecc)); XMEMSET(data, 0x42, sizeof(data)); + XMEMSET(&rng, 0, sizeof(rng)); ExpectIntEQ(wc_ecc_init(&ecc), 0); ExpectIntEQ(wc_ecc_import_raw(&ecc, qx, qy, d, "SECP256R1"), 0); - DoExpectIntEQ(wc_InitRng(&rng), 0); + ExpectIntEQ(wc_InitRng(&rng), 0); /* wc_SignatureGetSize(): positive path for ECC */ ExpectIntGT(wc_SignatureGetSize(sig_type, &ecc, key_len), 0); @@ -741,6 +747,7 @@ int test_wc_SignatureFeatureCoverage(void) XMEMSET(&rsa_key, 0, sizeof(RsaKey)); XMEMSET(data, 0x24, sizeof(data)); + XMEMSET(&rng, 0, sizeof(rng)); #ifdef USE_CERT_BUFFERS_1024 bytes = (size_t)sizeof_client_key_der_1024; @@ -774,7 +781,7 @@ int test_wc_SignatureFeatureCoverage(void) ExpectIntEQ(wc_InitRsaKey_ex(&rsa_key, HEAP_HINT, testDevId), 0); ExpectIntEQ(wc_RsaPrivateKeyDecode(tmp, &idx, &rsa_key, (word32)bytes), 0); - DoExpectIntEQ(wc_InitRng(&rng), 0); + ExpectIntEQ(wc_InitRng(&rng), 0); /* wc_SignatureGetSize(): positive path for RSA */ ExpectIntGT(wc_SignatureGetSize(WC_SIGNATURE_TYPE_RSA, &rsa_key,