From 358dbd5090a6010bd4e53d33f39734a1173ff5c5 Mon Sep 17 00:00:00 2001 From: Guido Vranken Date: Sat, 6 Feb 2021 10:00:31 +0100 Subject: [PATCH] _sp_exptmod_base_2: Break out of loops on error --- wolfcrypt/src/sp_int.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/wolfcrypt/src/sp_int.c b/wolfcrypt/src/sp_int.c index 33fedd807..81e4c09b6 100644 --- a/wolfcrypt/src/sp_int.c +++ b/wolfcrypt/src/sp_int.c @@ -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; + } } }