forked from wolfSSL/wolfssl
SP int: fix error checks when modulus even
This commit is contained in:
@@ -11651,21 +11651,22 @@ int sp_invmod(sp_int* a, sp_int* m, sp_int* r)
|
|||||||
sp_mod(m, a, v);
|
sp_mod(m, a, v);
|
||||||
/* v == 0 when a divides m evenly - no inverse. */
|
/* v == 0 when a divides m evenly - no inverse. */
|
||||||
if (sp_iszero(v)) {
|
if (sp_iszero(v)) {
|
||||||
/* Force u to be the no inverse answer. */
|
err = MP_VAL;
|
||||||
sp_set(u, 0);
|
|
||||||
}
|
}
|
||||||
evenMod = 1;
|
evenMod = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Calculate inverse. */
|
if (err == MP_OKAY) {
|
||||||
#if !defined(WOLFSSL_SP_SMALL) && (!defined(NO_RSA) || !defined(NO_DH))
|
/* Calculate inverse. */
|
||||||
if (sp_count_bits(mm) >= 1024) {
|
#if !defined(WOLFSSL_SP_SMALL) && (!defined(NO_RSA) || !defined(NO_DH))
|
||||||
err = _sp_invmod_div(ma, mm, u, v, b, c, c);
|
if (sp_count_bits(mm) >= 1024) {
|
||||||
}
|
err = _sp_invmod_div(ma, mm, u, v, b, c, c);
|
||||||
else
|
}
|
||||||
#endif
|
else
|
||||||
{
|
#endif
|
||||||
err = _sp_invmod(ma, mm, u, v, b, c);
|
{
|
||||||
|
err = _sp_invmod(ma, mm, u, v, b, c);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Fixup for even modulus. */
|
/* 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);
|
sp_sub(m, c, r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else if (err == MP_OKAY) {
|
||||||
err = sp_copy(c, r);
|
err = sp_copy(c, r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -43206,6 +43206,16 @@ static int mp_test_invmod(mp_int* a, mp_int* m, mp_int* r)
|
|||||||
ret = mp_invmod(a, m, r);
|
ret = mp_invmod(a, m, r);
|
||||||
if (ret != MP_VAL)
|
if (ret != MP_VAL)
|
||||||
return -13172;
|
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(a, 1);
|
||||||
mp_set(m, 4);
|
mp_set(m, 4);
|
||||||
ret = mp_invmod(a, m, r);
|
ret = mp_invmod(a, m, r);
|
||||||
|
Reference in New Issue
Block a user