_sp_exptmod_base_2: Break out of loops on error

This commit is contained in:
Guido Vranken 2021-02-06 10:00:31 +01:00
parent bc707d67c3
commit 358dbd5090

View File

@ -7855,7 +7855,7 @@ int sp_invmod(sp_int* a, sp_int* m, sp_int* r)
if (err == MP_OKAY) {
_sp_sub_d(r, 1, r);
err = sp_div(r, a, r, NULL);
if ( err == MP_OKAY ) {
if (err == MP_OKAY) {
sp_sub(m, r, r);
}
}
@ -8593,7 +8593,10 @@ static int _sp_exptmod_base_2(sp_int* e, int digits, sp_int* m, sp_int* r)
/* Square for number of bits in window. */
for (j = 0; (j < EXP2_WINSIZE) && (err == MP_OKAY); j++) {
err = sp_sqr(tr, tr);
if ((err == MP_OKAY) && (m->used > 1)) {
if (err != MP_OKAY) {
break;
}
if (m->used > 1) {
err = _sp_mont_red(tr, m, mp);
}
else {
@ -8612,6 +8615,9 @@ static int _sp_exptmod_base_2(sp_int* e, int digits, sp_int* m, sp_int* r)
if (err == MP_OKAY) {
err = sp_mod(tr, m, tr);
}
if (err != MP_OKAY) {
break;
}
}
}