Improve coverage

Renumber errors in test.c to be unique.
Fix stack usage to work in --enable-distro --enable-stacksize builds.
This commit is contained in:
Sean Parkinson
2018-05-23 13:27:36 +10:00
parent 438f8da11f
commit 3bb4949e02
5 changed files with 2700 additions and 2091 deletions

View File

@@ -614,8 +614,7 @@ static int GeneratePrivateDh186(DhKey* key, WC_RNG* rng, byte* priv,
int qSz, pSz, cSz, err; int qSz, pSz, cSz, err;
mp_int tmpQ, tmpX; mp_int tmpQ, tmpX;
if (key == NULL || rng == NULL || priv == NULL || privSz == NULL) /* Parameters validated in calling functions. */
return BAD_FUNC_ARG;
if (mp_iszero(&key->q) == MP_YES) { if (mp_iszero(&key->q) == MP_YES) {
WOLFSSL_MSG("DH q parameter needed for FIPS 186-4 key generation"); WOLFSSL_MSG("DH q parameter needed for FIPS 186-4 key generation");
@@ -649,14 +648,8 @@ static int GeneratePrivateDh186(DhKey* key, WC_RNG* rng, byte* priv,
* Hash_DRBG uses SHA-256 which matches maximum * Hash_DRBG uses SHA-256 which matches maximum
* requested_security_strength of (L,N) */ * requested_security_strength of (L,N) */
err = wc_RNG_GenerateBlock(rng, cBuf, cSz); err = wc_RNG_GenerateBlock(rng, cBuf, cSz);
if (err != MP_OKAY) { if (err == MP_OKAY)
mp_clear(&tmpX); err = mp_read_unsigned_bin(&tmpX, cBuf, cSz);
mp_clear(&tmpQ);
XFREE(cBuf, key->heap, DYNAMIC_TYPE_TMP_BUFFER);
return err;
}
err = mp_read_unsigned_bin(&tmpX, cBuf, cSz);
if (err != MP_OKAY) { if (err != MP_OKAY) {
mp_clear(&tmpX); mp_clear(&tmpX);
mp_clear(&tmpQ); mp_clear(&tmpQ);
@@ -1166,57 +1159,71 @@ int wc_DhAgree(DhKey* key, byte* agree, word32* agreeSz, const byte* priv,
int wc_DhSetKey_ex(DhKey* key, const byte* p, word32 pSz, const byte* g, int wc_DhSetKey_ex(DhKey* key, const byte* p, word32 pSz, const byte* g,
word32 gSz, const byte* q, word32 qSz) word32 gSz, const byte* q, word32 qSz)
{ {
int ret = 0;
mp_int* keyP = NULL;
mp_int* keyG = NULL;
mp_int* keyQ = NULL;
if (key == NULL || p == NULL || g == NULL || pSz == 0 || gSz == 0) { if (key == NULL || p == NULL || g == NULL || pSz == 0 || gSz == 0) {
return BAD_FUNC_ARG; ret = BAD_FUNC_ARG;
} }
/* may have leading 0 */ if (ret == 0) {
if (p[0] == 0) { /* may have leading 0 */
pSz--; p++; if (p[0] == 0) {
} pSz--; p++;
if (g[0] == 0) {
gSz--; g++;
}
if (q != NULL) {
if (q[0] == 0) {
qSz--; q++;
} }
}
if (mp_init(&key->p) != MP_OKAY) if (g[0] == 0) {
return MP_INIT_E; gSz--; g++;
if (mp_read_unsigned_bin(&key->p, p, pSz) != 0) {
mp_clear(&key->p);
return ASN_DH_KEY_E;
}
if (mp_init(&key->g) != MP_OKAY) {
mp_clear(&key->p);
return MP_INIT_E;
}
if (mp_read_unsigned_bin(&key->g, g, gSz) != 0) {
mp_clear(&key->g);
mp_clear(&key->p);
return ASN_DH_KEY_E;
}
if (q != NULL) {
if (mp_init(&key->q) != MP_OKAY) {
mp_clear(&key->g);
mp_clear(&key->p);
return MP_INIT_E;
} }
if (mp_read_unsigned_bin(&key->q, q, qSz) != 0) {
mp_clear(&key->g); if (q != NULL) {
mp_clear(&key->p); if (q[0] == 0) {
mp_clear(&key->q); qSz--; q++;
return MP_INIT_E; }
} }
if (mp_init(&key->p) != MP_OKAY)
ret = MP_INIT_E;
} }
return 0; if (ret == 0) {
if (mp_read_unsigned_bin(&key->p, p, pSz) != MP_OKAY)
ret = ASN_DH_KEY_E;
else
keyP = &key->p;
}
if (ret == 0 && mp_init(&key->g) != MP_OKAY)
ret = MP_INIT_E;
if (ret == 0) {
if (mp_read_unsigned_bin(&key->g, g, gSz) != MP_OKAY)
ret = ASN_DH_KEY_E;
else
keyG = &key->g;
}
if (ret == 0 && q != NULL) {
if (mp_init(&key->q) != MP_OKAY)
ret = MP_INIT_E;
}
if (ret == 0 && q != NULL) {
if (mp_read_unsigned_bin(&key->q, q, qSz) != MP_OKAY)
ret = MP_INIT_E;
else
keyQ = &key->q;
}
if (ret != 0 && key != NULL) {
if (keyQ)
mp_clear(keyQ);
if (keyG)
mp_clear(keyG);
if (keyP)
mp_clear(keyP);
}
return ret;
} }

View File

@@ -182,7 +182,7 @@ enum wc_HashType wc_OidGetHash(int oid)
#endif #endif
break; break;
case SHA224h: case SHA224h:
#if defined(WOLFSSL_SHA224) #ifdef WOLFSSL_SHA224
hash_type = WC_HASH_TYPE_SHA224; hash_type = WC_HASH_TYPE_SHA224;
#endif #endif
break; break;
@@ -247,7 +247,7 @@ int wc_HashGetDigestSize(enum wc_HashType hash_type)
#endif #endif
break; break;
case WC_HASH_TYPE_SHA384: case WC_HASH_TYPE_SHA384:
#if defined(WOLFSSL_SHA512) && defined(WOLFSSL_SHA384) #ifdef WOLFSSL_SHA384
dig_size = WC_SHA384_DIGEST_SIZE; dig_size = WC_SHA384_DIGEST_SIZE;
#endif #endif
break; break;

View File

@@ -2310,8 +2310,7 @@ static int RsaGetValue(mp_int* in, byte* out, word32* outSz)
word32 sz; word32 sz;
int ret = 0; int ret = 0;
if (in == NULL || out == NULL || outSz == NULL) /* Parameters ensured by calling function. */
return BAD_FUNC_ARG;
sz = (word32)mp_unsigned_bin_size(in); sz = (word32)mp_unsigned_bin_size(in);
if (sz > *outSz) if (sz > *outSz)

View File

@@ -7084,11 +7084,9 @@ static int sp_2048_mod_exp_16(sp_digit* r, sp_digit* a, sp_digit* e,
sp_2048_mont_mul_16(r, r, t[y], m, mp); sp_2048_mont_mul_16(r, r, t[y], m, mp);
} }
y = e[0] & 0xf; y = e[0] & ((1 << c) - 1);
sp_2048_mont_sqr_16(r, r, m, mp); for (; c > 0; c--)
sp_2048_mont_sqr_16(r, r, m, mp); sp_2048_mont_sqr_16(r, r, m, mp);
sp_2048_mont_sqr_16(r, r, m, mp);
sp_2048_mont_sqr_16(r, r, m, mp);
sp_2048_mont_mul_16(r, r, t[y], m, mp); sp_2048_mont_mul_16(r, r, t[y], m, mp);
XMEMSET(&r[16], 0, sizeof(sp_digit) * 16); XMEMSET(&r[16], 0, sizeof(sp_digit) * 16);
@@ -7401,11 +7399,9 @@ static int sp_2048_mod_exp_avx2_16(sp_digit* r, sp_digit* a, sp_digit* e,
sp_2048_mont_mul_avx2_16(r, r, t[y], m, mp); sp_2048_mont_mul_avx2_16(r, r, t[y], m, mp);
} }
y = e[0] & 0xf; y = e[0] & ((1 << c) - 1);
sp_2048_mont_sqr_avx2_16(r, r, m, mp); for (; c > 0; c--)
sp_2048_mont_sqr_avx2_16(r, r, m, mp); sp_2048_mont_sqr_avx2_16(r, r, m, mp);
sp_2048_mont_sqr_avx2_16(r, r, m, mp);
sp_2048_mont_sqr_avx2_16(r, r, m, mp);
sp_2048_mont_mul_avx2_16(r, r, t[y], m, mp); sp_2048_mont_mul_avx2_16(r, r, t[y], m, mp);
XMEMSET(&r[16], 0, sizeof(sp_digit) * 16); XMEMSET(&r[16], 0, sizeof(sp_digit) * 16);
@@ -9126,10 +9122,9 @@ static int sp_2048_mod_exp_32(sp_digit* r, sp_digit* a, sp_digit* e,
sp_2048_mont_mul_32(r, r, t[y], m, mp); sp_2048_mont_mul_32(r, r, t[y], m, mp);
} }
y = e[0] & 0x7; y = e[0] & ((1 << c) - 1);
sp_2048_mont_sqr_32(r, r, m, mp); for (; c > 0; c--)
sp_2048_mont_sqr_32(r, r, m, mp); sp_2048_mont_sqr_32(r, r, m, mp);
sp_2048_mont_sqr_32(r, r, m, mp);
sp_2048_mont_mul_32(r, r, t[y], m, mp); sp_2048_mont_mul_32(r, r, t[y], m, mp);
XMEMSET(&r[32], 0, sizeof(sp_digit) * 32); XMEMSET(&r[32], 0, sizeof(sp_digit) * 32);
@@ -9540,10 +9535,9 @@ static int sp_2048_mod_exp_avx2_32(sp_digit* r, sp_digit* a, sp_digit* e,
sp_2048_mont_mul_avx2_32(r, r, t[y], m, mp); sp_2048_mont_mul_avx2_32(r, r, t[y], m, mp);
} }
y = e[0] & 0x7; y = e[0] & ((1 << c) - 1);
sp_2048_mont_sqr_avx2_32(r, r, m, mp); for (; c > 0; c--)
sp_2048_mont_sqr_avx2_32(r, r, m, mp); sp_2048_mont_sqr_avx2_32(r, r, m, mp);
sp_2048_mont_sqr_avx2_32(r, r, m, mp);
sp_2048_mont_mul_avx2_32(r, r, t[y], m, mp); sp_2048_mont_mul_avx2_32(r, r, t[y], m, mp);
XMEMSET(&r[32], 0, sizeof(sp_digit) * 32); XMEMSET(&r[32], 0, sizeof(sp_digit) * 32);
@@ -23649,8 +23643,9 @@ static int sp_3072_mod_exp_24(sp_digit* r, sp_digit* a, sp_digit* e,
sp_3072_mont_mul_24(r, r, t[y], m, mp); sp_3072_mont_mul_24(r, r, t[y], m, mp);
} }
y = e[0] & 0x1; y = e[0] & ((1 << c) - 1);
sp_3072_mont_sqr_24(r, r, m, mp); for (; c > 0; c--)
sp_3072_mont_sqr_24(r, r, m, mp);
sp_3072_mont_mul_24(r, r, t[y], m, mp); sp_3072_mont_mul_24(r, r, t[y], m, mp);
XMEMSET(&r[24], 0, sizeof(sp_digit) * 24); XMEMSET(&r[24], 0, sizeof(sp_digit) * 24);
@@ -24011,8 +24006,9 @@ static int sp_3072_mod_exp_avx2_24(sp_digit* r, sp_digit* a, sp_digit* e,
sp_3072_mont_mul_avx2_24(r, r, t[y], m, mp); sp_3072_mont_mul_avx2_24(r, r, t[y], m, mp);
} }
y = e[0] & 0x1; y = e[0] & ((1 << c) - 1);
sp_3072_mont_sqr_avx2_24(r, r, m, mp); for (; c > 0; c--)
sp_3072_mont_sqr_avx2_24(r, r, m, mp);
sp_3072_mont_mul_avx2_24(r, r, t[y], m, mp); sp_3072_mont_mul_avx2_24(r, r, t[y], m, mp);
XMEMSET(&r[24], 0, sizeof(sp_digit) * 24); XMEMSET(&r[24], 0, sizeof(sp_digit) * 24);
@@ -26357,9 +26353,9 @@ static int sp_3072_mod_exp_48(sp_digit* r, sp_digit* a, sp_digit* e,
sp_3072_mont_mul_48(r, r, t[y], m, mp); sp_3072_mont_mul_48(r, r, t[y], m, mp);
} }
y = e[0] & 0x3; y = e[0] & ((1 << c) - 1);
sp_3072_mont_sqr_48(r, r, m, mp); for (; c > 0; c--)
sp_3072_mont_sqr_48(r, r, m, mp); sp_3072_mont_sqr_48(r, r, m, mp);
sp_3072_mont_mul_48(r, r, t[y], m, mp); sp_3072_mont_mul_48(r, r, t[y], m, mp);
XMEMSET(&r[48], 0, sizeof(sp_digit) * 48); XMEMSET(&r[48], 0, sizeof(sp_digit) * 48);
@@ -26866,9 +26862,9 @@ static int sp_3072_mod_exp_avx2_48(sp_digit* r, sp_digit* a, sp_digit* e,
sp_3072_mont_mul_avx2_48(r, r, t[y], m, mp); sp_3072_mont_mul_avx2_48(r, r, t[y], m, mp);
} }
y = e[0] & 0x3; y = e[0] & ((1 << c) - 1);
sp_3072_mont_sqr_avx2_48(r, r, m, mp); for (; c > 0; c--)
sp_3072_mont_sqr_avx2_48(r, r, m, mp); sp_3072_mont_sqr_avx2_48(r, r, m, mp);
sp_3072_mont_mul_avx2_48(r, r, t[y], m, mp); sp_3072_mont_mul_avx2_48(r, r, t[y], m, mp);
XMEMSET(&r[48], 0, sizeof(sp_digit) * 48); XMEMSET(&r[48], 0, sizeof(sp_digit) * 48);

File diff suppressed because it is too large Load Diff