Merge pull request #6016 from SparkiDev/sp_dh_agree_uinit

DH and SP: sp_DhExp_* called with uninitialized outLen
This commit is contained in:
David Garske
2023-01-30 15:56:46 -08:00
committed by GitHub
8 changed files with 5 additions and 87 deletions

View File

@ -1291,7 +1291,6 @@ static int GeneratePublicDh(DhKey* key, byte* priv, word32 privSz,
{ {
int ret = 0; int ret = 0;
#ifndef WOLFSSL_SP_MATH #ifndef WOLFSSL_SP_MATH
word32 binSz = 0;
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
mp_int* x; mp_int* x;
mp_int* y; mp_int* y;
@ -1301,6 +1300,10 @@ static int GeneratePublicDh(DhKey* key, byte* priv, word32 privSz,
#endif #endif
#endif #endif
if (*pubSz < (word32)mp_unsigned_bin_size(&key->p)) {
return WC_KEY_SIZE_E;
}
#ifdef WOLFSSL_HAVE_SP_DH #ifdef WOLFSSL_HAVE_SP_DH
#ifndef WOLFSSL_SP_NO_2048 #ifndef WOLFSSL_SP_NO_2048
if (mp_count_bits(&key->p) == 2048) if (mp_count_bits(&key->p) == 2048)
@ -1341,18 +1344,11 @@ static int GeneratePublicDh(DhKey* key, byte* priv, word32 privSz,
if (ret == 0 && mp_exptmod(&key->g, x, &key->p, y) != MP_OKAY) if (ret == 0 && mp_exptmod(&key->g, x, &key->p, y) != MP_OKAY)
ret = MP_EXPTMOD_E; ret = MP_EXPTMOD_E;
if (ret == 0) {
binSz = mp_unsigned_bin_size(y);
if (binSz > *pubSz) {
ret = WC_KEY_SIZE_E;
}
}
if (ret == 0 && mp_to_unsigned_bin(y, pub) != MP_OKAY) if (ret == 0 && mp_to_unsigned_bin(y, pub) != MP_OKAY)
ret = MP_TO_E; ret = MP_TO_E;
if (ret == 0) if (ret == 0)
*pubSz = binSz; *pubSz = mp_unsigned_bin_size(y);
mp_clear(y); mp_clear(y);
mp_clear(x); mp_clear(x);

View File

@ -17700,9 +17700,6 @@ int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 2048) { else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 256U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -44900,9 +44897,6 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 3072) { else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 384U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -60475,9 +60469,6 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 4096) { else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 512U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }

View File

@ -6866,9 +6866,6 @@ int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 2048) { else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 256U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -16472,9 +16469,6 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 3072) { else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 384U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -21682,9 +21676,6 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 4096) { else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 512U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }

View File

@ -30159,9 +30159,6 @@ int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 2048) { else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 256U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -83251,9 +83248,6 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 3072) { else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 384U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -96595,9 +96589,6 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 4096) { else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 512U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }

View File

@ -4640,9 +4640,6 @@ int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 2048) { else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 256U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -7951,9 +7948,6 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 3072) { else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 384U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -12293,9 +12287,6 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 3072) { else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 384U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -15615,9 +15606,6 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 4096) { else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 512U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -19924,9 +19912,6 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 4096) { else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 512U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }

View File

@ -3162,9 +3162,6 @@ int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 2048) { else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 256U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -6834,9 +6831,6 @@ int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 2048) { else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 256U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -10051,9 +10045,6 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 3072) { else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 384U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -13908,9 +13899,6 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 3072) { else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 384U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -17126,9 +17114,6 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 4096) { else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 512U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -21087,9 +21072,6 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 4096) { else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 512U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }

View File

@ -5785,9 +5785,6 @@ int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 2048) { else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 256U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -11598,9 +11595,6 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 3072) { else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 384U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -15589,9 +15583,6 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 4096) { else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 512U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }

View File

@ -2863,9 +2863,6 @@ int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 2048) { else if (mp_count_bits(mod) != 2048) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 256U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -5764,9 +5761,6 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 3072) { else if (mp_count_bits(mod) != 3072) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 384U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }
@ -7891,9 +7885,6 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen,
else if (mp_count_bits(mod) != 4096) { else if (mp_count_bits(mod) != 4096) {
err = MP_READ_E; err = MP_READ_E;
} }
else if (*outLen < 512U) {
err = BUFFER_E;
}
else if (mp_iseven(mod)) { else if (mp_iseven(mod)) {
err = MP_VAL; err = MP_VAL;
} }