diff --git a/wolfcrypt/src/sp_arm32.c b/wolfcrypt/src/sp_arm32.c index cd0568ddc..635c59031 100644 --- a/wolfcrypt/src/sp_arm32.c +++ b/wolfcrypt/src/sp_arm32.c @@ -17700,6 +17700,9 @@ int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 2048) { err = MP_READ_E; } + else if (*outLen < 256U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -44897,6 +44900,9 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 3072) { err = MP_READ_E; } + else if (*outLen < 384U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -60469,6 +60475,9 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 4096) { err = MP_READ_E; } + else if (*outLen < 512U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } diff --git a/wolfcrypt/src/sp_arm64.c b/wolfcrypt/src/sp_arm64.c index 598f0dd47..30f902790 100644 --- a/wolfcrypt/src/sp_arm64.c +++ b/wolfcrypt/src/sp_arm64.c @@ -6866,6 +6866,9 @@ int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 2048) { err = MP_READ_E; } + else if (*outLen < 256U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -16469,6 +16472,9 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 3072) { err = MP_READ_E; } + else if (*outLen < 384U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -21676,6 +21682,9 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 4096) { err = MP_READ_E; } + else if (*outLen < 512U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } diff --git a/wolfcrypt/src/sp_armthumb.c b/wolfcrypt/src/sp_armthumb.c index 6b648e019..7f47c7b02 100644 --- a/wolfcrypt/src/sp_armthumb.c +++ b/wolfcrypt/src/sp_armthumb.c @@ -30159,6 +30159,9 @@ int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 2048) { err = MP_READ_E; } + else if (*outLen < 256U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -83248,6 +83251,9 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 3072) { err = MP_READ_E; } + else if (*outLen < 384U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -96589,6 +96595,9 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 4096) { err = MP_READ_E; } + else if (*outLen < 512U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } diff --git a/wolfcrypt/src/sp_c32.c b/wolfcrypt/src/sp_c32.c index 49838d855..4f7462efc 100644 --- a/wolfcrypt/src/sp_c32.c +++ b/wolfcrypt/src/sp_c32.c @@ -4640,6 +4640,9 @@ int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 2048) { err = MP_READ_E; } + else if (*outLen < 256U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -7948,6 +7951,9 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 3072) { err = MP_READ_E; } + else if (*outLen < 384U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -12287,6 +12293,9 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 3072) { err = MP_READ_E; } + else if (*outLen < 384U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -15606,6 +15615,9 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 4096) { err = MP_READ_E; } + else if (*outLen < 512U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -19912,6 +19924,9 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 4096) { err = MP_READ_E; } + else if (*outLen < 512U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } diff --git a/wolfcrypt/src/sp_c64.c b/wolfcrypt/src/sp_c64.c index 318ff17c4..40b846b2e 100644 --- a/wolfcrypt/src/sp_c64.c +++ b/wolfcrypt/src/sp_c64.c @@ -3162,6 +3162,9 @@ int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 2048) { err = MP_READ_E; } + else if (*outLen < 256U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -6831,6 +6834,9 @@ int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 2048) { err = MP_READ_E; } + else if (*outLen < 256U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -10045,6 +10051,9 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 3072) { err = MP_READ_E; } + else if (*outLen < 384U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -13899,6 +13908,9 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 3072) { err = MP_READ_E; } + else if (*outLen < 384U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -17114,6 +17126,9 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 4096) { err = MP_READ_E; } + else if (*outLen < 512U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -21072,6 +21087,9 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 4096) { err = MP_READ_E; } + else if (*outLen < 512U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } diff --git a/wolfcrypt/src/sp_cortexm.c b/wolfcrypt/src/sp_cortexm.c index 98dc28183..42ecefbbf 100644 --- a/wolfcrypt/src/sp_cortexm.c +++ b/wolfcrypt/src/sp_cortexm.c @@ -5785,6 +5785,9 @@ int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 2048) { err = MP_READ_E; } + else if (*outLen < 256U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -11595,6 +11598,9 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 3072) { err = MP_READ_E; } + else if (*outLen < 384U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -15583,6 +15589,9 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen, else if (mp_count_bits(mod) != 4096) { err = MP_READ_E; } + else if (*outLen < 512U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } diff --git a/wolfcrypt/src/sp_x86_64.c b/wolfcrypt/src/sp_x86_64.c index fa80289a0..6c61fbba4 100644 --- a/wolfcrypt/src/sp_x86_64.c +++ b/wolfcrypt/src/sp_x86_64.c @@ -2472,8 +2472,13 @@ int sp_ModExp_2048(const mp_int* base, const mp_int* exp, const mp_int* mod, ASSERT_SAVED_VECTOR_REGISTERS(); - if (mp_count_bits(base) > 2048 || expBits > 2048 || - mp_count_bits(mod) != 2048) { + if (mp_count_bits(base) > 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)) { @@ -2849,10 +2854,18 @@ int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen, ASSERT_SAVED_VECTOR_REGISTERS(); - if (mp_count_bits(base) > 2048 || expLen > 256 || - mp_count_bits(mod) != 2048) { + if (mp_count_bits(base) > 2048) { 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 (*outLen < 256U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -2953,8 +2966,13 @@ int sp_ModExp_1024(const mp_int* base, const mp_int* exp, const mp_int* mod, ASSERT_SAVED_VECTOR_REGISTERS(); - if (mp_count_bits(base) > 1024 || expBits > 1024 || - mp_count_bits(mod) != 1024) { + if (mp_count_bits(base) > 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)) { @@ -5355,8 +5373,13 @@ int sp_ModExp_3072(const mp_int* base, const mp_int* exp, const mp_int* mod, ASSERT_SAVED_VECTOR_REGISTERS(); - if (mp_count_bits(base) > 3072 || expBits > 3072 || - mp_count_bits(mod) != 3072) { + if (mp_count_bits(base) > 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)) { @@ -5732,10 +5755,18 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen, ASSERT_SAVED_VECTOR_REGISTERS(); - if (mp_count_bits(base) > 3072 || expLen > 384 || - mp_count_bits(mod) != 3072) { + if (mp_count_bits(base) > 3072) { 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 (*outLen < 384U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; } @@ -5836,8 +5867,13 @@ int sp_ModExp_1536(const mp_int* base, const mp_int* exp, const mp_int* mod, ASSERT_SAVED_VECTOR_REGISTERS(); - if (mp_count_bits(base) > 1536 || expBits > 1536 || - mp_count_bits(mod) != 1536) { + if (mp_count_bits(base) > 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)) { @@ -7464,8 +7500,13 @@ int sp_ModExp_4096(const mp_int* base, const mp_int* exp, const mp_int* mod, ASSERT_SAVED_VECTOR_REGISTERS(); - if (mp_count_bits(base) > 4096 || expBits > 4096 || - mp_count_bits(mod) != 4096) { + if (mp_count_bits(base) > 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)) { @@ -7841,10 +7882,18 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen, ASSERT_SAVED_VECTOR_REGISTERS(); - if (mp_count_bits(base) > 4096 || expLen > 512 || - mp_count_bits(mod) != 4096) { + if (mp_count_bits(base) > 4096) { 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 (*outLen < 512U) { + err = BUFFER_E; + } else if (mp_iseven(mod)) { err = MP_VAL; }