Skip to content

Commit 0829436

Browse files
authored
Merge pull request #9422 from SparkiDev/ecc_sign_hash_inlen_check
ECC sign hash: only allow up to max digest size
2 parents 5a8411a + 6c30186 commit 0829436

3 files changed

Lines changed: 15 additions & 1 deletion

File tree

tests/api/test_ecc.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,10 @@ int test_wc_ecc_signVerify_hash(void)
429429
WC_NO_ERR_TRACE(ECC_BAD_ARG_E));
430430
ExpectIntEQ(wc_ecc_sign_hash(digest, digestlen, sig, &siglen, &rng, NULL),
431431
WC_NO_ERR_TRACE(ECC_BAD_ARG_E));
432+
#if (!defined(HAVE_FIPS) || FIPS_VERSION_GT(7,0)) && !defined(HAVE_SELFTEST)
433+
ExpectIntEQ(wc_ecc_sign_hash(digest, WC_MAX_DIGEST_SIZE+1, sig, &siglen,
434+
&rng, &key), WC_NO_ERR_TRACE(BAD_LENGTH_E));
435+
#endif
432436

433437
#ifdef HAVE_ECC_VERIFY
434438
ExpectIntEQ(wc_ecc_verify_hash(sig, siglen, digest, digestlen, &verify,
@@ -457,6 +461,10 @@ int test_wc_ecc_signVerify_hash(void)
457461
WC_NO_ERR_TRACE(ECC_BAD_ARG_E));
458462
ExpectIntEQ(wc_ecc_verify_hash(sig, siglen, digest, digestlen, &verify,
459463
NULL), WC_NO_ERR_TRACE(ECC_BAD_ARG_E));
464+
#if (!defined(HAVE_FIPS) || FIPS_VERSION_GT(7,0)) && !defined(HAVE_SELFTEST)
465+
ExpectIntEQ(wc_ecc_verify_hash(sig, siglen, digest, WC_MAX_DIGEST_SIZE+1,
466+
&verify, &key), WC_NO_ERR_TRACE(BAD_LENGTH_E));
467+
#endif
460468
#endif /* HAVE_ECC_VERIFY */
461469

462470
DoExpectIntEQ(wc_FreeRng(&rng), 0);

wolfcrypt/src/ecc.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6716,6 +6716,9 @@ int wc_ecc_sign_hash(const byte* in, word32 inlen, byte* out, word32 *outlen,
67166716
if (in == NULL || out == NULL || outlen == NULL || key == NULL) {
67176717
return ECC_BAD_ARG_E;
67186718
}
6719+
if (inlen > WC_MAX_DIGEST_SIZE) {
6720+
return BAD_LENGTH_E;
6721+
}
67196722

67206723
#ifdef WOLF_CRYPTO_CB
67216724
#ifndef WOLF_CRYPTO_CB_FIND
@@ -8496,6 +8499,9 @@ int wc_ecc_verify_hash(const byte* sig, word32 siglen, const byte* hash,
84968499
if (sig == NULL || hash == NULL || res == NULL || key == NULL) {
84978500
return ECC_BAD_ARG_E;
84988501
}
8502+
if (hashlen > WC_MAX_DIGEST_SIZE) {
8503+
return BAD_LENGTH_E;
8504+
}
84998505

85008506
#ifdef WOLF_CRYPTO_CB
85018507
#ifndef WOLF_CRYPTO_CB_FIND

wolfcrypt/test/test.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31118,7 +31118,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t srtpkdf_test(void)
3111831118
#define HAVE_ECC_DETERMINISTIC_K
3111931119
#define ECC_DIGEST_SIZE WC_SHA256_DIGEST_SIZE
3112031120
#else
31121-
#define ECC_DIGEST_SIZE MAX_ECC_BYTES
31121+
#define ECC_DIGEST_SIZE WC_MAX_DIGEST_SIZE
3112231122
#endif
3112331123
#define ECC_SIG_SIZE ECC_MAX_SIG_SIZE
3112431124

0 commit comments

Comments
 (0)