Merge pull request #6002 from SparkiDev/sp_dh_exp_check_outlen

SP DH Exp: check output length for minimum
This commit is contained in:
David Garske
2023-01-23 08:32:12 -08:00
committed by GitHub
7 changed files with 134 additions and 16 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}