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;
mp_int tmpQ, tmpX;
if (key == NULL || rng == NULL || priv == NULL || privSz == NULL)
return BAD_FUNC_ARG;
/* Parameters validated in calling functions. */
if (mp_iszero(&key->q) == MP_YES) {
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
* requested_security_strength of (L,N) */
err = wc_RNG_GenerateBlock(rng, cBuf, cSz);
if (err != MP_OKAY) {
mp_clear(&tmpX);
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)
err = mp_read_unsigned_bin(&tmpX, cBuf, cSz);
if (err != MP_OKAY) {
mp_clear(&tmpX);
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,
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) {
return BAD_FUNC_ARG;
ret = BAD_FUNC_ARG;
}
/* may have leading 0 */
if (p[0] == 0) {
pSz--; p++;
}
if (g[0] == 0) {
gSz--; g++;
}
if (q != NULL) {
if (q[0] == 0) {
qSz--; q++;
if (ret == 0) {
/* may have leading 0 */
if (p[0] == 0) {
pSz--; p++;
}
}
if (mp_init(&key->p) != MP_OKAY)
return MP_INIT_E;
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 (g[0] == 0) {
gSz--; g++;
}
if (mp_read_unsigned_bin(&key->q, q, qSz) != 0) {
mp_clear(&key->g);
mp_clear(&key->p);
mp_clear(&key->q);
return MP_INIT_E;
if (q != NULL) {
if (q[0] == 0) {
qSz--; q++;
}
}
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
break;
case SHA224h:
#if defined(WOLFSSL_SHA224)
#ifdef WOLFSSL_SHA224
hash_type = WC_HASH_TYPE_SHA224;
#endif
break;
@@ -247,7 +247,7 @@ int wc_HashGetDigestSize(enum wc_HashType hash_type)
#endif
break;
case WC_HASH_TYPE_SHA384:
#if defined(WOLFSSL_SHA512) && defined(WOLFSSL_SHA384)
#ifdef WOLFSSL_SHA384
dig_size = WC_SHA384_DIGEST_SIZE;
#endif
break;

View File

@@ -2310,8 +2310,7 @@ static int RsaGetValue(mp_int* in, byte* out, word32* outSz)
word32 sz;
int ret = 0;
if (in == NULL || out == NULL || outSz == NULL)
return BAD_FUNC_ARG;
/* Parameters ensured by calling function. */
sz = (word32)mp_unsigned_bin_size(in);
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);
}
y = e[0] & 0xf;
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);
y = e[0] & ((1 << c) - 1);
for (; c > 0; c--)
sp_2048_mont_sqr_16(r, r, m, mp);
sp_2048_mont_mul_16(r, r, t[y], m, mp);
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);
}
y = e[0] & 0xf;
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);
y = e[0] & ((1 << c) - 1);
for (; c > 0; c--)
sp_2048_mont_sqr_avx2_16(r, r, m, mp);
sp_2048_mont_mul_avx2_16(r, r, t[y], m, mp);
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);
}
y = e[0] & 0x7;
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);
y = e[0] & ((1 << c) - 1);
for (; c > 0; c--)
sp_2048_mont_sqr_32(r, r, m, mp);
sp_2048_mont_mul_32(r, r, t[y], m, mp);
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);
}
y = e[0] & 0x7;
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);
y = e[0] & ((1 << c) - 1);
for (; c > 0; c--)
sp_2048_mont_sqr_avx2_32(r, r, m, mp);
sp_2048_mont_mul_avx2_32(r, r, t[y], m, mp);
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);
}
y = e[0] & 0x1;
sp_3072_mont_sqr_24(r, r, m, mp);
y = e[0] & ((1 << c) - 1);
for (; c > 0; c--)
sp_3072_mont_sqr_24(r, r, m, mp);
sp_3072_mont_mul_24(r, r, t[y], m, mp);
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);
}
y = e[0] & 0x1;
sp_3072_mont_sqr_avx2_24(r, r, m, mp);
y = e[0] & ((1 << c) - 1);
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);
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);
}
y = e[0] & 0x3;
sp_3072_mont_sqr_48(r, r, m, mp);
sp_3072_mont_sqr_48(r, r, m, mp);
y = e[0] & ((1 << c) - 1);
for (; c > 0; c--)
sp_3072_mont_sqr_48(r, r, m, mp);
sp_3072_mont_mul_48(r, r, t[y], m, mp);
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);
}
y = e[0] & 0x3;
sp_3072_mont_sqr_avx2_48(r, r, m, mp);
sp_3072_mont_sqr_avx2_48(r, r, m, mp);
y = e[0] & ((1 << c) - 1);
for (; c > 0; c--)
sp_3072_mont_sqr_avx2_48(r, r, m, mp);
sp_3072_mont_mul_avx2_48(r, r, t[y], m, mp);
XMEMSET(&r[48], 0, sizeof(sp_digit) * 48);

File diff suppressed because it is too large Load Diff