SP int: fix error checks when modulus even

This commit is contained in:
Sean Parkinson
2022-11-30 12:11:59 +10:00
parent 24cc8e7145
commit faf848a915
2 changed files with 23 additions and 12 deletions

View File

@ -11651,21 +11651,22 @@ int sp_invmod(sp_int* a, sp_int* m, sp_int* r)
sp_mod(m, a, v);
/* v == 0 when a divides m evenly - no inverse. */
if (sp_iszero(v)) {
/* Force u to be the no inverse answer. */
sp_set(u, 0);
err = MP_VAL;
}
evenMod = 1;
}
/* Calculate inverse. */
#if !defined(WOLFSSL_SP_SMALL) && (!defined(NO_RSA) || !defined(NO_DH))
if (sp_count_bits(mm) >= 1024) {
err = _sp_invmod_div(ma, mm, u, v, b, c, c);
}
else
#endif
{
err = _sp_invmod(ma, mm, u, v, b, c);
if (err == MP_OKAY) {
/* Calculate inverse. */
#if !defined(WOLFSSL_SP_SMALL) && (!defined(NO_RSA) || !defined(NO_DH))
if (sp_count_bits(mm) >= 1024) {
err = _sp_invmod_div(ma, mm, u, v, b, c, c);
}
else
#endif
{
err = _sp_invmod(ma, mm, u, v, b, c);
}
}
/* Fixup for even modulus. */
@ -11683,7 +11684,7 @@ int sp_invmod(sp_int* a, sp_int* m, sp_int* r)
sp_sub(m, c, r);
}
}
else {
else if (err == MP_OKAY) {
err = sp_copy(c, r);
}
}

View File

@ -43206,6 +43206,16 @@ static int mp_test_invmod(mp_int* a, mp_int* m, mp_int* r)
ret = mp_invmod(a, m, r);
if (ret != MP_VAL)
return -13172;
mp_set(a, 3);
mp_set(m, 6);
ret = mp_invmod(a, m, r);
if (ret != MP_VAL)
return -13181;
mp_set(a, 5*9);
mp_set(m, 6*9);
ret = mp_invmod(a, m, r);
if (ret != MP_VAL)
return -13182;
mp_set(a, 1);
mp_set(m, 4);
ret = mp_invmod(a, m, r);