Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 13 additions & 6 deletions tests/api/test_signature.c
Original file line number Diff line number Diff line change
Expand Up @@ -337,10 +337,14 @@ int test_wc_SignatureDecisionCoverage(void)

#ifndef NO_SHA
/* Hash weaker than WC_SIG_MIN_HASH_TYPE (default SHA-256)
* rejected by wc_SignatureCheckHashStrength() */
ExpectIntEQ(wc_SignatureVerify(WC_HASH_TYPE_SHA, sig_type,
data, data_len, sig, sig_len, &ecc, key_len),
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
* rejected by wc_SignatureCheckHashStrength(). Only assert
* when SHA-1 is below the effective floor of this build. */
if (wc_HashGetDigestSize(WC_SIG_MIN_HASH_TYPE) >
wc_HashGetDigestSize(WC_HASH_TYPE_SHA)) {
ExpectIntEQ(wc_SignatureVerify(WC_HASH_TYPE_SHA, sig_type,
data, data_len, sig, sig_len, &ecc, key_len),
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
}
#endif

/* Real signature that fails verification: SIG_VERIFY_E.
Expand Down Expand Up @@ -518,8 +522,11 @@ int test_wc_SignatureDecisionCoverage(void)
}

#ifndef NO_SHA
/* Weak hash rejected before any hashing/signing occurs */
{
/* Weak hash rejected before any hashing/signing occurs. Only
* assert when SHA-1 is below the effective floor of this
* build. */
if (wc_HashGetDigestSize(WC_SIG_MIN_HASH_TYPE) >
wc_HashGetDigestSize(WC_HASH_TYPE_SHA)) {
word32 lenCopy = (word32)eccSigMax;
ExpectIntEQ(wc_SignatureGenerate(WC_HASH_TYPE_SHA, sig_type,
data, data_len, genSig, &lenCopy, &ecc, key_len, &rng),
Expand Down
10 changes: 0 additions & 10 deletions wolfcrypt/src/signature.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,16 +53,6 @@
#endif
#endif

/* Minimum hash strength accepted by the wc_SignatureVerify/Generate
* convenience APIs. Default is SHA-256 to keep MD5 and SHA-1 (both with
* known collision attacks) out of new code. Define WC_SIG_MIN_HASH_TYPE
* to a weaker wc_HashType (e.g. WC_HASH_TYPE_SHA) to opt back into legacy
* behavior. The lower-level wc_SignatureVerifyHash/wc_SignatureGenerateHash
* APIs are unaffected. */
#ifndef WC_SIG_MIN_HASH_TYPE
#define WC_SIG_MIN_HASH_TYPE WC_HASH_TYPE_SHA256
#endif

static int wc_SignatureCheckHashStrength(enum wc_HashType hash_type)
{
int min_sz, this_sz;
Expand Down
10 changes: 10 additions & 0 deletions wolfssl/wolfcrypt/signature.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,16 @@
extern "C" {
#endif

/* Minimum hash strength accepted by the wc_SignatureVerify/Generate
* convenience APIs. Default is SHA-256 to keep MD5 and SHA-1 (both with
* known collision attacks) out of new code. Define WC_SIG_MIN_HASH_TYPE
* to a weaker wc_HashType (e.g. WC_HASH_TYPE_SHA) to opt back into legacy
* behavior. The lower-level wc_SignatureVerifyHash/wc_SignatureGenerateHash
* APIs are unaffected. */
#ifndef WC_SIG_MIN_HASH_TYPE
#define WC_SIG_MIN_HASH_TYPE WC_HASH_TYPE_SHA256
#endif

enum wc_SignatureType {
WC_SIGNATURE_TYPE_NONE = 0,
WC_SIGNATURE_TYPE_ECC = 1,
Expand Down
Loading