Merge pull request #3542 from SparkiDev/sp_mod_odd

SP: ensure modulus/prime is odd before performing RSA/DH/ModExp ops
pull/3572/head
toddouska 2020-12-16 08:51:10 -08:00 committed by GitHub
commit b0464c93e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 1114 additions and 808 deletions

View File

@ -7449,11 +7449,16 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
sp_digit e[1];
int err = MP_OKAY;
if (*outLen < 256)
if (*outLen < 256) {
err = MP_TO_E;
if (err == MP_OKAY && (mp_count_bits(em) > 32 || inLen > 256 ||
mp_count_bits(mm) != 2048))
}
else if (mp_count_bits(em) > 32 || inLen > 256 ||
mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -7800,12 +7805,15 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 2048) {
err = MP_READ_E;
}
if (inLen > 256) {
else if (inLen > 256) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 2048) {
else if (mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -7859,10 +7867,15 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
(void)dm;
(void)mm;
if (*outLen < 256)
if (*outLen < 256) {
err = MP_TO_E;
if (err == MP_OKAY && (inLen > 256 || mp_count_bits(mm) != 2048))
}
else if (inLen > 256 || mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -8022,17 +8035,14 @@ int sp_ModExp_2048(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 2048) {
err = MP_READ_E;
}
else if (expBits > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -8592,17 +8602,14 @@ int sp_DhExp_2048(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 256) {
err = MP_READ_E;
}
else if (expLen > 256) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -8654,17 +8661,14 @@ int sp_ModExp_1024(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 1024) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 1024) {
err = MP_READ_E;
}
else if (expBits > 1024) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 1024) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 1024) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -19066,11 +19070,16 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
sp_digit e[1];
int err = MP_OKAY;
if (*outLen < 384)
if (*outLen < 384) {
err = MP_TO_E;
if (err == MP_OKAY && (mp_count_bits(em) > 32 || inLen > 384 ||
mp_count_bits(mm) != 3072))
}
else if (mp_count_bits(em) > 32 || inLen > 384 ||
mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -19497,12 +19506,15 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 3072) {
err = MP_READ_E;
}
if (inLen > 384) {
else if (inLen > 384) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 3072) {
else if (mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -19556,10 +19568,15 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
(void)dm;
(void)mm;
if (*outLen < 384)
if (*outLen < 384) {
err = MP_TO_E;
if (err == MP_OKAY && (inLen > 384 || mp_count_bits(mm) != 3072))
}
else if (inLen > 384 || mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -19719,17 +19736,14 @@ int sp_ModExp_3072(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 3072) {
err = MP_READ_E;
}
else if (expBits > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -20481,17 +20495,14 @@ int sp_DhExp_3072(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 384) {
err = MP_READ_E;
}
else if (expLen > 384) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -20543,17 +20554,14 @@ int sp_ModExp_1536(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 1536) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 1536) {
err = MP_READ_E;
}
else if (expBits > 1536) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 1536) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 1536) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -27088,11 +27096,16 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
sp_digit e[1];
int err = MP_OKAY;
if (*outLen < 512)
if (*outLen < 512) {
err = MP_TO_E;
if (err == MP_OKAY && (mp_count_bits(em) > 32 || inLen > 512 ||
mp_count_bits(mm) != 4096))
}
else if (mp_count_bits(em) > 32 || inLen > 512 ||
mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -27599,12 +27612,15 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 4096) {
err = MP_READ_E;
}
if (inLen > 512) {
else if (inLen > 512) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 4096) {
else if (mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -27658,10 +27674,15 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
(void)dm;
(void)mm;
if (*outLen < 512)
if (*outLen < 512) {
err = MP_TO_E;
if (err == MP_OKAY && (inLen > 512 || mp_count_bits(mm) != 4096))
}
else if (inLen > 512 || mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -27821,17 +27842,14 @@ int sp_ModExp_4096(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 4096) {
err = MP_READ_E;
}
else if (expBits > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -28775,17 +28793,14 @@ int sp_DhExp_4096(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 512) {
err = MP_READ_E;
}
else if (expLen > 512) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {

View File

@ -4945,11 +4945,16 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
sp_digit e[1];
int err = MP_OKAY;
if (*outLen < 256)
if (*outLen < 256) {
err = MP_TO_E;
if (err == MP_OKAY && (mp_count_bits(em) > 64 || inLen > 256 ||
mp_count_bits(mm) != 2048))
}
else if (mp_count_bits(em) > 64 || inLen > 256 ||
mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -5192,12 +5197,15 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 2048) {
err = MP_READ_E;
}
if (inLen > 256) {
else if (inLen > 256) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 2048) {
else if (mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -5251,10 +5259,15 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
(void)dm;
(void)mm;
if (*outLen < 256)
if (*outLen < 256) {
err = MP_TO_E;
if (err == MP_OKAY && (inLen > 256 || mp_count_bits(mm) != 2048))
}
else if (inLen > 256 || mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -5414,17 +5427,14 @@ int sp_ModExp_2048(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 2048) {
err = MP_READ_E;
}
else if (expBits > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -5794,17 +5804,14 @@ int sp_DhExp_2048(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 256) {
err = MP_READ_E;
}
else if (expLen > 256) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -5856,17 +5863,14 @@ int sp_ModExp_1024(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 1024) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 1024) {
err = MP_READ_E;
}
else if (expBits > 1024) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 1024) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 1024) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -12713,11 +12717,16 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
sp_digit e[1];
int err = MP_OKAY;
if (*outLen < 384)
if (*outLen < 384) {
err = MP_TO_E;
if (err == MP_OKAY && (mp_count_bits(em) > 64 || inLen > 384 ||
mp_count_bits(mm) != 3072))
}
else if (mp_count_bits(em) > 64 || inLen > 384 ||
mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -12988,12 +12997,15 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 3072) {
err = MP_READ_E;
}
if (inLen > 384) {
else if (inLen > 384) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 3072) {
else if (mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -13047,10 +13059,15 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
(void)dm;
(void)mm;
if (*outLen < 384)
if (*outLen < 384) {
err = MP_TO_E;
if (err == MP_OKAY && (inLen > 384 || mp_count_bits(mm) != 3072))
}
else if (inLen > 384 || mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -13210,17 +13227,14 @@ int sp_ModExp_3072(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 3072) {
err = MP_READ_E;
}
else if (expBits > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -13686,17 +13700,14 @@ int sp_DhExp_3072(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 384) {
err = MP_READ_E;
}
else if (expLen > 384) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -13748,17 +13759,14 @@ int sp_ModExp_1536(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 1536) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 1536) {
err = MP_READ_E;
}
else if (expBits > 1536) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 1536) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 1536) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -17680,11 +17688,16 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
sp_digit e[1];
int err = MP_OKAY;
if (*outLen < 512)
if (*outLen < 512) {
err = MP_TO_E;
if (err == MP_OKAY && (mp_count_bits(em) > 64 || inLen > 512 ||
mp_count_bits(mm) != 4096))
}
else if (mp_count_bits(em) > 64 || inLen > 512 ||
mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -17983,12 +17996,15 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 4096) {
err = MP_READ_E;
}
if (inLen > 512) {
else if (inLen > 512) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 4096) {
else if (mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -18042,10 +18058,15 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
(void)dm;
(void)mm;
if (*outLen < 512)
if (*outLen < 512) {
err = MP_TO_E;
if (err == MP_OKAY && (inLen > 512 || mp_count_bits(mm) != 4096))
}
else if (inLen > 512 || mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -18205,17 +18226,14 @@ int sp_ModExp_4096(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 4096) {
err = MP_READ_E;
}
else if (expBits > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -18777,17 +18795,14 @@ int sp_DhExp_4096(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 512) {
err = MP_READ_E;
}
else if (expLen > 512) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {

View File

@ -4314,11 +4314,16 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
sp_digit e[1];
int err = MP_OKAY;
if (*outLen < 256)
if (*outLen < 256) {
err = MP_TO_E;
if (err == MP_OKAY && (mp_count_bits(em) > 32 || inLen > 256 ||
mp_count_bits(mm) != 2048))
}
else if (mp_count_bits(em) > 32 || inLen > 256 ||
mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -4498,12 +4503,15 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 2048) {
err = MP_READ_E;
}
if (inLen > 256) {
else if (inLen > 256) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 2048) {
else if (mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -4557,10 +4565,15 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
(void)dm;
(void)mm;
if (*outLen < 256)
if (*outLen < 256) {
err = MP_TO_E;
if (err == MP_OKAY && (inLen > 256 || mp_count_bits(mm) != 2048))
}
else if (inLen > 256 || mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -4720,17 +4733,14 @@ int sp_ModExp_2048(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 2048) {
err = MP_READ_E;
}
else if (expBits > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -5298,17 +5308,14 @@ int sp_DhExp_2048(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 256) {
err = MP_READ_E;
}
else if (expLen > 256) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -5360,17 +5367,14 @@ int sp_ModExp_1024(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 1024) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 1024) {
err = MP_READ_E;
}
else if (expBits > 1024) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 1024) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 1024) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -10178,11 +10182,16 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
sp_digit e[1];
int err = MP_OKAY;
if (*outLen < 384)
if (*outLen < 384) {
err = MP_TO_E;
if (err == MP_OKAY && (mp_count_bits(em) > 32 || inLen > 384 ||
mp_count_bits(mm) != 3072))
}
else if (mp_count_bits(em) > 32 || inLen > 384 ||
mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -10362,12 +10371,15 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 3072) {
err = MP_READ_E;
}
if (inLen > 384) {
else if (inLen > 384) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 3072) {
else if (mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -10421,10 +10433,15 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
(void)dm;
(void)mm;
if (*outLen < 384)
if (*outLen < 384) {
err = MP_TO_E;
if (err == MP_OKAY && (inLen > 384 || mp_count_bits(mm) != 3072))
}
else if (inLen > 384 || mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -10584,17 +10601,14 @@ int sp_ModExp_3072(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 3072) {
err = MP_READ_E;
}
else if (expBits > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -11360,17 +11374,14 @@ int sp_DhExp_3072(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 384) {
err = MP_READ_E;
}
else if (expLen > 384) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -11422,17 +11433,14 @@ int sp_ModExp_1536(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 1536) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 1536) {
err = MP_READ_E;
}
else if (expBits > 1536) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 1536) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 1536) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -14100,11 +14108,16 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
sp_digit e[1];
int err = MP_OKAY;
if (*outLen < 512)
if (*outLen < 512) {
err = MP_TO_E;
if (err == MP_OKAY && (mp_count_bits(em) > 32 || inLen > 512 ||
mp_count_bits(mm) != 4096))
}
else if (mp_count_bits(em) > 32 || inLen > 512 ||
mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -14285,12 +14298,15 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 4096) {
err = MP_READ_E;
}
if (inLen > 512) {
else if (inLen > 512) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 4096) {
else if (mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -14344,10 +14360,15 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
(void)dm;
(void)mm;
if (*outLen < 512)
if (*outLen < 512) {
err = MP_TO_E;
if (err == MP_OKAY && (inLen > 512 || mp_count_bits(mm) != 4096))
}
else if (inLen > 512 || mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -14507,17 +14528,14 @@ int sp_ModExp_4096(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 4096) {
err = MP_READ_E;
}
else if (expBits > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -15479,17 +15497,14 @@ int sp_DhExp_4096(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 512) {
err = MP_READ_E;
}
else if (expLen > 512) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {

View File

@ -3217,12 +3217,15 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
if (mp_count_bits(em) > 23) {
err = MP_READ_E;
}
if (inLen > 256U) {
else if (inLen > 256U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 2048) {
else if (mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -3310,12 +3313,15 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
if (mp_count_bits(em) > 23) {
err = MP_READ_E;
}
if (inLen > 256U) {
else if (inLen > 256U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 2048) {
else if (mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
@ -3457,12 +3463,15 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 2048) {
err = MP_READ_E;
}
if (inLen > 256) {
else if (inLen > 256) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 2048) {
else if (mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -3511,12 +3520,15 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 2048) {
err = MP_READ_E;
}
if (inLen > 256U) {
else if (inLen > 256U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 2048) {
else if (mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -3559,9 +3571,12 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
if (inLen > 256) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 2048) {
else if (mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -3633,9 +3648,12 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
if (inLen > 256U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 2048) {
else if (mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -3773,18 +3791,16 @@ int sp_ModExp_2048(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 2048) {
err = MP_READ_E;
}
else if (expBits > 2048) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
}
if (err == MP_OKAY) {
d = (sp_digit*)XMALLOC(sizeof(*d) * 90 * 4, NULL, DYNAMIC_TYPE_DH);
@ -3831,17 +3847,14 @@ int sp_ModExp_2048(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 2048) {
err = MP_READ_E;
}
else if (expBits > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
#ifdef WOLFSSL_SMALL_STACK
@ -4222,17 +4235,14 @@ int sp_DhExp_2048(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 256) {
err = MP_READ_E;
}
else if (expLen > 256) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -4292,18 +4302,16 @@ int sp_DhExp_2048(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 256U) {
err = MP_READ_E;
}
else if (expLen > 256U) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
}
#ifdef WOLFSSL_SMALL_STACK
if (err == MP_OKAY) {
d = (sp_digit*)XMALLOC(sizeof(*d) * 90 * 4, NULL, DYNAMIC_TYPE_DH);
@ -4387,18 +4395,16 @@ int sp_ModExp_1024(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 1024) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 1024) {
err = MP_READ_E;
}
else if (expBits > 1024) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 1024) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 1024) {
err = MP_READ_E;
}
}
if (err == MP_OKAY) {
d = (sp_digit*)XMALLOC(sizeof(*d) * 45 * 4, NULL, DYNAMIC_TYPE_DH);
@ -4446,17 +4452,14 @@ int sp_ModExp_1024(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 1024) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 1024) {
err = MP_READ_E;
}
else if (expBits > 1024) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 1024) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 1024) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
#ifdef WOLFSSL_SMALL_STACK
@ -7099,12 +7102,15 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
if (mp_count_bits(em) > 23) {
err = MP_READ_E;
}
if (inLen > 384U) {
else if (inLen > 384U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 3072) {
else if (mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -7192,12 +7198,15 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
if (mp_count_bits(em) > 23) {
err = MP_READ_E;
}
if (inLen > 384U) {
else if (inLen > 384U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 3072) {
else if (mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
@ -7339,12 +7348,15 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 3072) {
err = MP_READ_E;
}
if (inLen > 384) {
else if (inLen > 384) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 3072) {
else if (mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -7393,12 +7405,15 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 3072) {
err = MP_READ_E;
}
if (inLen > 384U) {
else if (inLen > 384U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 3072) {
else if (mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -7441,9 +7456,12 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
if (inLen > 384) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 3072) {
else if (mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -7515,9 +7533,12 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
if (inLen > 384U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 3072) {
else if (mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -7655,18 +7676,16 @@ int sp_ModExp_3072(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 3072) {
err = MP_READ_E;
}
else if (expBits > 3072) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
}
if (err == MP_OKAY) {
d = (sp_digit*)XMALLOC(sizeof(*d) * 134 * 4, NULL, DYNAMIC_TYPE_DH);
@ -7713,17 +7732,14 @@ int sp_ModExp_3072(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 3072) {
err = MP_READ_E;
}
else if (expBits > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
#ifdef WOLFSSL_SMALL_STACK
@ -8192,17 +8208,14 @@ int sp_DhExp_3072(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 384) {
err = MP_READ_E;
}
else if (expLen > 384) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -8262,18 +8275,16 @@ int sp_DhExp_3072(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 384U) {
err = MP_READ_E;
}
else if (expLen > 384U) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
}
#ifdef WOLFSSL_SMALL_STACK
if (err == MP_OKAY) {
d = (sp_digit*)XMALLOC(sizeof(*d) * 134 * 4, NULL, DYNAMIC_TYPE_DH);
@ -8357,18 +8368,16 @@ int sp_ModExp_1536(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 1536) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 1536) {
err = MP_READ_E;
}
else if (expBits > 1536) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 1536) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 1536) {
err = MP_READ_E;
}
}
if (err == MP_OKAY) {
d = (sp_digit*)XMALLOC(sizeof(*d) * 67 * 4, NULL, DYNAMIC_TYPE_DH);
@ -8416,17 +8425,14 @@ int sp_ModExp_1536(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 1536) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 1536) {
err = MP_READ_E;
}
else if (expBits > 1536) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 1536) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 1536) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
#ifdef WOLFSSL_SMALL_STACK
@ -11151,12 +11157,15 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
if (mp_count_bits(em) > 21) {
err = MP_READ_E;
}
if (inLen > 512U) {
else if (inLen > 512U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 4096) {
else if (mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -11244,12 +11253,15 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
if (mp_count_bits(em) > 21) {
err = MP_READ_E;
}
if (inLen > 512U) {
else if (inLen > 512U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 4096) {
else if (mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
@ -11391,12 +11403,15 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 4096) {
err = MP_READ_E;
}
if (inLen > 512) {
else if (inLen > 512) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 4096) {
else if (mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -11445,12 +11460,15 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 4096) {
err = MP_READ_E;
}
if (inLen > 512U) {
else if (inLen > 512U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 4096) {
else if (mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -11493,9 +11511,12 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
if (inLen > 512) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 4096) {
else if (mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -11567,9 +11588,12 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
if (inLen > 512U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 4096) {
else if (mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -11707,18 +11731,16 @@ int sp_ModExp_4096(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 4096) {
err = MP_READ_E;
}
else if (expBits > 4096) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
}
if (err == MP_OKAY) {
d = (sp_digit*)XMALLOC(sizeof(*d) * 196 * 4, NULL, DYNAMIC_TYPE_DH);
@ -11765,17 +11787,14 @@ int sp_ModExp_4096(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 4096) {
err = MP_READ_E;
}
else if (expBits > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
#ifdef WOLFSSL_SMALL_STACK
@ -12368,17 +12387,14 @@ int sp_DhExp_4096(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 512) {
err = MP_READ_E;
}
else if (expLen > 512) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -12438,18 +12454,16 @@ int sp_DhExp_4096(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 512U) {
err = MP_READ_E;
}
else if (expLen > 512U) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
}
#ifdef WOLFSSL_SMALL_STACK
if (err == MP_OKAY) {
d = (sp_digit*)XMALLOC(sizeof(*d) * 196 * 4, NULL, DYNAMIC_TYPE_DH);

View File

@ -2858,12 +2858,15 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
if (mp_count_bits(em) > 57) {
err = MP_READ_E;
}
if (inLen > 256U) {
else if (inLen > 256U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 2048) {
else if (mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -2951,12 +2954,15 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
if (mp_count_bits(em) > 57) {
err = MP_READ_E;
}
if (inLen > 256U) {
else if (inLen > 256U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 2048) {
else if (mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
@ -3098,12 +3104,15 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 2048) {
err = MP_READ_E;
}
if (inLen > 256) {
else if (inLen > 256) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 2048) {
else if (mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -3152,12 +3161,15 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 2048) {
err = MP_READ_E;
}
if (inLen > 256U) {
else if (inLen > 256U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 2048) {
else if (mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -3200,9 +3212,12 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
if (inLen > 256) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 2048) {
else if (mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -3274,9 +3289,12 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
if (inLen > 256U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 2048) {
else if (mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -3414,18 +3432,16 @@ int sp_ModExp_2048(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 2048) {
err = MP_READ_E;
}
else if (expBits > 2048) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
}
if (err == MP_OKAY) {
d = (sp_digit*)XMALLOC(sizeof(*d) * 36 * 4, NULL, DYNAMIC_TYPE_DH);
@ -3472,17 +3488,14 @@ int sp_ModExp_2048(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 2048) {
err = MP_READ_E;
}
else if (expBits > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
#ifdef WOLFSSL_SMALL_STACK
@ -3756,17 +3769,14 @@ int sp_DhExp_2048(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 256) {
err = MP_READ_E;
}
else if (expLen > 256) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -3826,18 +3836,16 @@ int sp_DhExp_2048(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 256U) {
err = MP_READ_E;
}
else if (expLen > 256U) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
}
#ifdef WOLFSSL_SMALL_STACK
if (err == MP_OKAY) {
d = (sp_digit*)XMALLOC(sizeof(*d) * 36 * 4, NULL, DYNAMIC_TYPE_DH);
@ -3921,18 +3929,16 @@ int sp_ModExp_1024(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 1024) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 1024) {
err = MP_READ_E;
}
else if (expBits > 1024) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 1024) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 1024) {
err = MP_READ_E;
}
}
if (err == MP_OKAY) {
d = (sp_digit*)XMALLOC(sizeof(*d) * 18 * 4, NULL, DYNAMIC_TYPE_DH);
@ -3980,17 +3986,14 @@ int sp_ModExp_1024(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 1024) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 1024) {
err = MP_READ_E;
}
else if (expBits > 1024) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 1024) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 1024) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
#ifdef WOLFSSL_SMALL_STACK
@ -7015,12 +7018,15 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
if (mp_count_bits(em) > 57) {
err = MP_READ_E;
}
if (inLen > 384U) {
else if (inLen > 384U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 3072) {
else if (mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -7108,12 +7114,15 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
if (mp_count_bits(em) > 57) {
err = MP_READ_E;
}
if (inLen > 384U) {
else if (inLen > 384U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 3072) {
else if (mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
@ -7255,12 +7264,15 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 3072) {
err = MP_READ_E;
}
if (inLen > 384) {
else if (inLen > 384) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 3072) {
else if (mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -7309,12 +7321,15 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 3072) {
err = MP_READ_E;
}
if (inLen > 384U) {
else if (inLen > 384U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 3072) {
else if (mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -7357,9 +7372,12 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
if (inLen > 384) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 3072) {
else if (mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -7431,9 +7449,12 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
if (inLen > 384U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 3072) {
else if (mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -7571,18 +7592,16 @@ int sp_ModExp_3072(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 3072) {
err = MP_READ_E;
}
else if (expBits > 3072) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
}
if (err == MP_OKAY) {
d = (sp_digit*)XMALLOC(sizeof(*d) * 54 * 4, NULL, DYNAMIC_TYPE_DH);
@ -7629,17 +7648,14 @@ int sp_ModExp_3072(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 3072) {
err = MP_READ_E;
}
else if (expBits > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
#ifdef WOLFSSL_SMALL_STACK
@ -7949,17 +7965,14 @@ int sp_DhExp_3072(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 384) {
err = MP_READ_E;
}
else if (expLen > 384) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -8019,18 +8032,16 @@ int sp_DhExp_3072(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 384U) {
err = MP_READ_E;
}
else if (expLen > 384U) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
}
#ifdef WOLFSSL_SMALL_STACK
if (err == MP_OKAY) {
d = (sp_digit*)XMALLOC(sizeof(*d) * 54 * 4, NULL, DYNAMIC_TYPE_DH);
@ -8114,18 +8125,16 @@ int sp_ModExp_1536(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 1536) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 1536) {
err = MP_READ_E;
}
else if (expBits > 1536) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 1536) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 1536) {
err = MP_READ_E;
}
}
if (err == MP_OKAY) {
d = (sp_digit*)XMALLOC(sizeof(*d) * 27 * 4, NULL, DYNAMIC_TYPE_DH);
@ -8173,17 +8182,14 @@ int sp_ModExp_1536(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 1536) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 1536) {
err = MP_READ_E;
}
else if (expBits > 1536) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 1536) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 1536) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
#ifdef WOLFSSL_SMALL_STACK
@ -11404,12 +11410,15 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
if (mp_count_bits(em) > 53) {
err = MP_READ_E;
}
if (inLen > 512U) {
else if (inLen > 512U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 4096) {
else if (mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -11497,12 +11506,15 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
if (mp_count_bits(em) > 53) {
err = MP_READ_E;
}
if (inLen > 512U) {
else if (inLen > 512U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 4096) {
else if (mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
@ -11644,12 +11656,15 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 4096) {
err = MP_READ_E;
}
if (inLen > 512) {
else if (inLen > 512) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 4096) {
else if (mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -11698,12 +11713,15 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 4096) {
err = MP_READ_E;
}
if (inLen > 512U) {
else if (inLen > 512U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 4096) {
else if (mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -11746,9 +11764,12 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
if (inLen > 512) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 4096) {
else if (mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -11820,9 +11841,12 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
if (inLen > 512U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 4096) {
else if (mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -11960,18 +11984,16 @@ int sp_ModExp_4096(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 4096) {
err = MP_READ_E;
}
else if (expBits > 4096) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
}
if (err == MP_OKAY) {
d = (sp_digit*)XMALLOC(sizeof(*d) * 78 * 4, NULL, DYNAMIC_TYPE_DH);
@ -12018,17 +12040,14 @@ int sp_ModExp_4096(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 4096) {
err = MP_READ_E;
}
else if (expBits > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
#ifdef WOLFSSL_SMALL_STACK
@ -12386,17 +12405,14 @@ int sp_DhExp_4096(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 512) {
err = MP_READ_E;
}
else if (expLen > 512) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -12456,18 +12472,16 @@ int sp_DhExp_4096(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 512U) {
err = MP_READ_E;
}
else if (expLen > 512U) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
}
#ifdef WOLFSSL_SMALL_STACK
if (err == MP_OKAY) {
d = (sp_digit*)XMALLOC(sizeof(*d) * 78 * 4, NULL, DYNAMIC_TYPE_DH);

View File

@ -4208,11 +4208,16 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
sp_digit e[1];
int err = MP_OKAY;
if (*outLen < 256)
if (*outLen < 256) {
err = MP_TO_E;
if (err == MP_OKAY && (mp_count_bits(em) > 32 || inLen > 256 ||
mp_count_bits(mm) != 2048))
}
else if (mp_count_bits(em) > 32 || inLen > 256 ||
mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -4394,12 +4399,15 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 2048) {
err = MP_READ_E;
}
if (inLen > 256) {
else if (inLen > 256) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 2048) {
else if (mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -4453,10 +4461,15 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
(void)dm;
(void)mm;
if (*outLen < 256)
if (*outLen < 256) {
err = MP_TO_E;
if (err == MP_OKAY && (inLen > 256 || mp_count_bits(mm) != 2048))
}
else if (inLen > 256 || mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -4616,17 +4629,14 @@ int sp_ModExp_2048(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 2048) {
err = MP_READ_E;
}
else if (expBits > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -5194,17 +5204,14 @@ int sp_DhExp_2048(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 2048) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 256) {
err = MP_READ_E;
}
else if (expLen > 256) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -5256,17 +5263,14 @@ int sp_ModExp_1024(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 1024) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 1024) {
err = MP_READ_E;
}
else if (expBits > 1024) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 1024) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 1024) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -9104,11 +9108,16 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
sp_digit e[1];
int err = MP_OKAY;
if (*outLen < 384)
if (*outLen < 384) {
err = MP_TO_E;
if (err == MP_OKAY && (mp_count_bits(em) > 32 || inLen > 384 ||
mp_count_bits(mm) != 3072))
}
else if (mp_count_bits(em) > 32 || inLen > 384 ||
mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -9290,12 +9299,15 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 3072) {
err = MP_READ_E;
}
if (inLen > 384) {
else if (inLen > 384) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 3072) {
else if (mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -9349,10 +9361,15 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
(void)dm;
(void)mm;
if (*outLen < 384)
if (*outLen < 384) {
err = MP_TO_E;
if (err == MP_OKAY && (inLen > 384 || mp_count_bits(mm) != 3072))
}
else if (inLen > 384 || mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -9512,17 +9529,14 @@ int sp_ModExp_3072(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 3072) {
err = MP_READ_E;
}
else if (expBits > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -10286,17 +10300,14 @@ int sp_DhExp_3072(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 3072) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 384) {
err = MP_READ_E;
}
else if (expLen > 384) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -10348,17 +10359,14 @@ int sp_ModExp_1536(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 1536) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 1536) {
err = MP_READ_E;
}
else if (expBits > 1536) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 1536) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 1536) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -12419,11 +12427,16 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
sp_digit e[1];
int err = MP_OKAY;
if (*outLen < 512)
if (*outLen < 512) {
err = MP_TO_E;
if (err == MP_OKAY && (mp_count_bits(em) > 32 || inLen > 512 ||
mp_count_bits(mm) != 4096))
}
else if (mp_count_bits(em) > 32 || inLen > 512 ||
mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -12606,12 +12619,15 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 4096) {
err = MP_READ_E;
}
if (inLen > 512) {
else if (inLen > 512) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 4096) {
else if (mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
if (err == MP_OKAY) {
@ -12665,10 +12681,15 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
(void)dm;
(void)mm;
if (*outLen < 512)
if (*outLen < 512) {
err = MP_TO_E;
if (err == MP_OKAY && (inLen > 512 || mp_count_bits(mm) != 4096))
}
else if (inLen > 512 || mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -12828,17 +12849,14 @@ int sp_ModExp_4096(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
if (mp_count_bits(base) > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expBits > 4096) {
err = MP_READ_E;
}
else if (expBits > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
@ -13798,17 +13816,14 @@ int sp_DhExp_4096(mp_int* base, const byte* exp, word32 expLen,
if (mp_count_bits(base) > 4096) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (expLen > 512) {
err = MP_READ_E;
}
else if (expLen > 512) {
err = MP_READ_E;
}
if (err == MP_OKAY) {
if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {

View File

@ -1440,11 +1440,16 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
word32 cpuid_flags = cpuid_get_flags();
#endif
if (*outLen < 256)
if (*outLen < 256) {
err = MP_TO_E;
if (err == MP_OKAY && (mp_count_bits(em) > 64 || inLen > 256 ||
mp_count_bits(mm) != 2048))
}
else if (mp_count_bits(em) > 64 || inLen > 256 ||
mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -1617,12 +1622,15 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 2048) {
err = MP_READ_E;
}
if (inLen > 256U) {
else if (inLen > 256U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 2048) {
else if (mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
#if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
@ -1714,10 +1722,15 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
(void)dm;
(void)mm;
if (*outLen < 256)
if (*outLen < 256) {
err = MP_TO_E;
if (err == MP_OKAY && (inLen > 256 || mp_count_bits(mm) != 2048))
}
else if (inLen > 256 || mp_count_bits(mm) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -1918,6 +1931,9 @@ int sp_ModExp_2048(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
sp_2048_from_mp(b, 32, base);
@ -2219,6 +2235,9 @@ int sp_DhExp_2048(mp_int* base, const byte* exp, word32 expLen,
mp_count_bits(mod) != 2048) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
sp_2048_from_mp(b, 32, base);
@ -2283,6 +2302,9 @@ int sp_ModExp_1024(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
mp_count_bits(mod) != 1024) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
sp_2048_from_mp(b, 16, base);
@ -3717,11 +3739,16 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
word32 cpuid_flags = cpuid_get_flags();
#endif
if (*outLen < 384)
if (*outLen < 384) {
err = MP_TO_E;
if (err == MP_OKAY && (mp_count_bits(em) > 64 || inLen > 384 ||
mp_count_bits(mm) != 3072))
}
else if (mp_count_bits(em) > 64 || inLen > 384 ||
mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -3894,12 +3921,15 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 3072) {
err = MP_READ_E;
}
if (inLen > 384U) {
else if (inLen > 384U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 3072) {
else if (mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
#if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
@ -3991,10 +4021,15 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
(void)dm;
(void)mm;
if (*outLen < 384)
if (*outLen < 384) {
err = MP_TO_E;
if (err == MP_OKAY && (inLen > 384 || mp_count_bits(mm) != 3072))
}
else if (inLen > 384 || mp_count_bits(mm) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -4195,6 +4230,9 @@ int sp_ModExp_3072(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
sp_3072_from_mp(b, 48, base);
@ -4496,6 +4534,9 @@ int sp_DhExp_3072(mp_int* base, const byte* exp, word32 expLen,
mp_count_bits(mod) != 3072) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
sp_3072_from_mp(b, 48, base);
@ -4560,6 +4601,9 @@ int sp_ModExp_1536(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
mp_count_bits(mod) != 1536) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
sp_3072_from_mp(b, 24, base);
@ -5415,11 +5459,16 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
word32 cpuid_flags = cpuid_get_flags();
#endif
if (*outLen < 512)
if (*outLen < 512) {
err = MP_TO_E;
if (err == MP_OKAY && (mp_count_bits(em) > 64 || inLen > 512 ||
mp_count_bits(mm) != 4096))
}
else if (mp_count_bits(em) > 64 || inLen > 512 ||
mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -5592,12 +5641,15 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
if (mp_count_bits(dm) > 4096) {
err = MP_READ_E;
}
if (inLen > 512U) {
else if (inLen > 512U) {
err = MP_READ_E;
}
if (mp_count_bits(mm) != 4096) {
else if (mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
}
#if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
@ -5689,10 +5741,15 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, mp_int* dm,
(void)dm;
(void)mm;
if (*outLen < 512)
if (*outLen < 512) {
err = MP_TO_E;
if (err == MP_OKAY && (inLen > 512 || mp_count_bits(mm) != 4096))
}
else if (inLen > 512 || mp_count_bits(mm) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mm)) {
err = MP_VAL;
}
#if (defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)) && !defined(WOLFSSL_SP_NO_MALLOC)
if (err == MP_OKAY) {
@ -5893,6 +5950,9 @@ int sp_ModExp_4096(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
sp_4096_from_mp(b, 64, base);
@ -6194,6 +6254,9 @@ int sp_DhExp_4096(mp_int* base, const byte* exp, word32 expLen,
mp_count_bits(mod) != 4096) {
err = MP_READ_E;
}
else if (mp_iseven(mod)) {
err = MP_VAL;
}
if (err == MP_OKAY) {
sp_4096_from_mp(b, 64, base);

View File

@ -13163,6 +13163,127 @@ exit_rsa_nopadding:
}
#endif /* WC_RSA_NO_PADDING */
#ifdef WOLFSSL_HAVE_SP_RSA
static int rsa_even_mod_test(WC_RNG* rng, RsaKey* key)
{
byte* tmp = NULL;
size_t bytes;
int ret;
word32 inLen = 0;
word32 idx = 0;
word32 outSz = RSA_TEST_BYTES;
word32 plainSz = RSA_TEST_BYTES;
#if !defined(USE_CERT_BUFFERS_2048) && !defined(USE_CERT_BUFFERS_3072) && \
!defined(USE_CERT_BUFFERS_4096) && !defined(NO_FILESYSTEM)
XFILE file;
#endif
DECLARE_VAR(out, byte, RSA_TEST_BYTES, HEAP_HINT);
DECLARE_VAR(plain, byte, RSA_TEST_BYTES, HEAP_HINT);
#ifdef DECLARE_VAR_IS_HEAP_ALLOC
if ((out == NULL) || (plain == NULL))
ERROR_OUT(MEMORY_E, exit_rsa_even_mod);
#endif
#if defined(USE_CERT_BUFFERS_2048)
bytes = (size_t)sizeof_client_key_der_2048;
if (bytes < (size_t)sizeof_client_cert_der_2048)
bytes = (size_t)sizeof_client_cert_der_2048;
#else
bytes = FOURK_BUF;
#endif
tmp = (byte*)XMALLOC(bytes, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
if (tmp == NULL
#ifdef WOLFSSL_ASYNC_CRYPT
|| out == NULL || plain == NULL
#endif
) {
ERROR_OUT(-7800, exit_rsa_even_mod);
}
#if defined(USE_CERT_BUFFERS_2048)
XMEMCPY(tmp, client_key_der_2048, (size_t)sizeof_client_key_der_2048);
#elif defined(USE_CERT_BUFFERS_3072)
XMEMCPY(tmp, client_key_der_3072, (size_t)sizeof_client_key_der_3072);
#elif defined(USE_CERT_BUFFERS_4096)
XMEMCPY(tmp, client_key_der_4096, (size_t)sizeof_client_key_der_4096);
#elif !defined(NO_FILESYSTEM)
file = XFOPEN(clientKey, "rb");
if (!file) {
err_sys("can't open ./certs/client-key.der, "
"Please run from wolfSSL home dir", -40);
ERROR_OUT(-7801, exit_rsa_even_mod);
}
bytes = XFREAD(tmp, 1, FOURK_BUF, file);
XFCLOSE(file);
#else
/* No key to use. */
ERROR_OUT(-7802, exit_rsa_even_mod);
#endif /* USE_CERT_BUFFERS */
ret = wc_RsaPrivateKeyDecode(tmp, &idx, key, (word32)bytes);
if (ret != 0) {
ERROR_OUT(-7804, exit_rsa_even_mod);
}
key->n.dp[0] &= (mp_digit)-2;
if (ret != 0) {
ERROR_OUT(-7804, exit_rsa_even_mod);
}
/* after loading in key use tmp as the test buffer */
#ifndef WOLFSSL_RSA_VERIFY_ONLY
inLen = 32;
outSz = wc_RsaEncryptSize(key);
XMEMSET(tmp, 7, plainSz);
ret = wc_RsaSSL_Sign(tmp, inLen, out, outSz, key, rng);
if (ret != MP_VAL) {
ERROR_OUT(-7806, exit_rsa_even_mod);
}
ret = wc_RsaSSL_Verify(out, outSz, tmp, inLen, key);
if (ret != MP_VAL) {
ERROR_OUT(-7808, exit_rsa_even_mod);
}
#endif
#ifdef WC_RSA_BLINDING
ret = wc_RsaSetRNG(key, rng);
if (ret < 0) {
ERROR_OUT(-7811, exit_rsa_even_mod);
}
#endif
/* test encrypt and decrypt using WC_RSA_NO_PAD */
#ifndef WOLFSSL_RSA_VERIFY_ONLY
ret = wc_RsaPublicEncrypt(tmp, inLen, out, (int)outSz, key, rng);
if (ret != MP_VAL) {
ERROR_OUT(-7812, exit_rsa_even_mod);
}
#endif /* WOLFSSL_RSA_VERIFY_ONLY */
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
ret = wc_RsaPrivateDecrypt(out, outSz, plain, (int)plainSz, key);
if (ret != MP_VAL) {
ERROR_OUT(-7813, exit_rsa_even_mod);
}
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
/* if making it to this point of code without hitting an ERROR_OUT then
* all tests have passed */
ret = 0;
exit_rsa_even_mod:
XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
FREE_VAR(out, HEAP_HINT);
FREE_VAR(plain, HEAP_HINT);
return ret;
}
#endif /* WOLFSSL_HAVE_SP_RSA */
#ifdef WOLFSSL_CERT_GEN
static int rsa_certgen_test(RsaKey* key, RsaKey* keypub, WC_RNG* rng, byte* tmp)
{
@ -14888,9 +15009,18 @@ static int rsa_test(void)
/* Need to create known good signatures to test with this. */
#ifndef WOLFSSL_RSA_VERIFY_ONLY
ret = rsa_pss_test(&rng, key);
if (ret != 0)
goto exit_rsa;
#endif
#endif
#ifdef WOLFSSL_HAVE_SP_RSA
/* New key to be loaded in rsa_even_mod_test(). */
if (key != NULL)
wc_FreeRsaKey(key);
ret = rsa_even_mod_test(&rng, key);
#endif
exit_rsa:
#ifdef WOLFSSL_SMALL_STACK
@ -15319,7 +15449,7 @@ static int dh_test_check_pubvalue(void)
#define FFDHE_KEY_SIZE (2048/8)
#endif
static int dh_test_ffdhe(WC_RNG *rng, const DhParams* params)
static int dh_ffdhe_test(WC_RNG *rng, const DhParams* params)
{
int ret;
word32 privSz, pubSz, privSz2, pubSz2;
@ -15421,6 +15551,31 @@ static int dh_test_ffdhe(WC_RNG *rng, const DhParams* params)
ERROR_OUT(-8059, done);
}
#ifdef WOLFSSL_HAVE_SP_DH
key->p.dp[0] &= (mp_digit)-2;
if (ret != 0) {
ERROR_OUT(-8058, done);
}
ret = wc_DhGenerateKeyPair(key, rng, priv, &privSz, pub, &pubSz);
if (ret != MP_VAL) {
ERROR_OUT(-8058, done);
}
ret = wc_DhAgree(key, agree, &agreeSz, priv, privSz, pub2, pubSz2);
if (ret != MP_VAL) {
ERROR_OUT(-8057, done);
}
ret = wc_DhCheckKeyPair(key, pub, pubSz, priv, privSz);
if (ret != MP_EXPTMOD_E) {
ERROR_OUT(-8057, done);
}
/* Getting here means success - set ret to 0. */
ret = 0;
#endif
done:
#ifdef WOLFSSL_SMALL_STACK
@ -15697,12 +15852,12 @@ static int dh_test(void)
/* Specialized code for key gen when using FFDHE-2048 and FFDHE-3072. */
#ifdef HAVE_FFDHE_2048
ret = dh_test_ffdhe(&rng, wc_Dh_ffdhe2048_Get());
ret = dh_ffdhe_test(&rng, wc_Dh_ffdhe2048_Get());
if (ret != 0)
ERROR_OUT(-8129, done);
#endif
#ifdef HAVE_FFDHE_3072
ret = dh_test_ffdhe(&rng, wc_Dh_ffdhe3072_Get());
ret = dh_ffdhe_test(&rng, wc_Dh_ffdhe3072_Get());
if (ret != 0)
ERROR_OUT(-8130, done);
#endif