SP: ensure modulus/prime is odd before performing RSA/DH/ModExp ops

This commit is contained in:
Sean Parkinson
2020-12-07 11:56:22 +10:00
parent 65d0cc62fd
commit 6dc06993bf
8 changed files with 1114 additions and 808 deletions
+116 -101
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) {
+116 -101
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) {
+116 -101
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) {
+204 -190
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);
+204 -190
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);
+116 -101
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) {
+84 -21
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);
+158 -3
View File
@@ -13121,6 +13121,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)
{
@@ -14846,9 +14967,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
@@ -15277,7 +15407,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;
@@ -15379,6 +15509,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
@@ -15655,12 +15810,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