@@ -36876,9 +36876,12 @@ static wc_test_ret_t ecc_test_curve_size(WC_RNG* rng, int keySize, int testVerif
3687636876#if !defined(ECC_TIMING_RESISTANT) || (defined(ECC_TIMING_RESISTANT) && \
3687736877 !defined(WC_NO_RNG) && !defined(WOLFSSL_KCAPI_ECC))
3687836878#ifdef HAVE_ECC_SIGN
36879- /* some hardware doesn't support sign/verify of all zero digest */
36880- #if !defined(WC_TEST_NO_ECC_SIGN_VERIFY_ZERO_DIGEST)
36881- /* test DSA sign hash with zeros */
36879+ /* WC_TEST_NO_ECC_SIGN_VERIFY_ZERO_DIGEST: build rejects all-zero digest,
36880+ * so test expects failure. */
36881+ #ifdef WOLFSSL_SM2
36882+ if (curve_id != ECC_SM2P256V1)
36883+ #endif
36884+ {
3688236885 for (i = 0; i < (int)ECC_DIGEST_SIZE; i++) {
3688336886 digest[i] = 0;
3688436887 }
@@ -36892,29 +36895,47 @@ static wc_test_ret_t ecc_test_curve_size(WC_RNG* rng, int keySize, int testVerif
3689236895 ret = wc_ecc_sign_hash(digest, ECC_DIGEST_SIZE, sig, &x, rng,
3689336896 userA);
3689436897 } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E));
36898+ #ifdef WC_TEST_NO_ECC_SIGN_VERIFY_ZERO_DIGEST
36899+ if (ret == 0) {
36900+ ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done);
36901+ }
36902+ else {
36903+ ret = 0;
36904+ }
36905+ #else
3689536906 if (ret != 0)
3689636907 ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done);
36908+ #endif
3689736909 TEST_SLEEP();
3689836910
3689936911#ifdef HAVE_ECC_VERIFY
36900- for (i=0; i<testVerifyCount; i++) {
36901- verify = 0;
36902- do {
36903- #if defined(WOLFSSL_ASYNC_CRYPT)
36904- ret = wc_AsyncWait(ret, &userA->asyncDev, WC_ASYNC_FLAG_CALL_AGAIN);
36905- #endif
36906- if (ret == 0)
36907- ret = wc_ecc_verify_hash(sig, x, digest, ECC_DIGEST_SIZE,
36908- &verify, userA);
36909- } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E));
36910- if (ret != 0)
36911- ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done);
36912- if (verify != 1)
36913- ERROR_OUT(WC_TEST_RET_ENC_NC, done);
36914- TEST_SLEEP();
36912+ verify = 0;
36913+ do {
36914+ #if defined(WOLFSSL_ASYNC_CRYPT)
36915+ ret = wc_AsyncWait(ret, &userA->asyncDev, WC_ASYNC_FLAG_CALL_AGAIN);
36916+ #endif
36917+ if (ret == 0)
36918+ ret = wc_ecc_verify_hash(sig, x, digest, ECC_DIGEST_SIZE,
36919+ &verify, userA);
36920+ } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E));
36921+ #ifdef WC_TEST_NO_ECC_SIGN_VERIFY_ZERO_DIGEST
36922+ if (ret == 0) {
36923+ ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done);
3691536924 }
36925+ else {
36926+ ret = 0;
36927+ }
36928+ if (verify == 1)
36929+ ERROR_OUT(WC_TEST_RET_ENC_NC, done);
36930+ #else
36931+ if (ret != 0)
36932+ ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done);
36933+ if (verify != 1)
36934+ ERROR_OUT(WC_TEST_RET_ENC_NC, done);
36935+ #endif
36936+ TEST_SLEEP();
3691636937#endif /* HAVE_ECC_VERIFY */
36917- #endif /* !WC_TEST_NO_ECC_SIGN_VERIFY_ZERO_DIGEST */
36938+ }
3691836939
3691936940 /* test DSA sign hash with sequence (0,1,2,3,4,...) */
3692036941 for (i = 0; i < (int)ECC_DIGEST_SIZE; i++) {
0 commit comments