diff --git a/wolfcrypt/src/tfm.c b/wolfcrypt/src/tfm.c index 56fb5993e..4098ebfd9 100644 --- a/wolfcrypt/src/tfm.c +++ b/wolfcrypt/src/tfm.c @@ -1027,7 +1027,13 @@ void fp_mod_2d(fp_int *a, int b, fp_int *c) c->dp[x] = 0; } /* clear the digit that is not completely outside/inside the modulus */ - c->dp[b / DIGIT_BIT] &= ~((fp_digit)0) >> (DIGIT_BIT - b); + x = DIGIT_BIT - b; + if (x > 0) { + c->dp[b / DIGIT_BIT] &= ~((fp_digit)0) >> x; + } + else + c->dp[b / DIGIT_BIT] &= ~((fp_digit)0) << -x; + fp_clamp (c); }