diff options
Diffstat (limited to 'src/lib/math/bigint/bigint.cpp')
-rw-r--r-- | src/lib/math/bigint/bigint.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/lib/math/bigint/bigint.cpp b/src/lib/math/bigint/bigint.cpp index a4545e4a1..1a09a92f1 100644 --- a/src/lib/math/bigint/bigint.cpp +++ b/src/lib/math/bigint/bigint.cpp @@ -317,7 +317,7 @@ BigInt BigInt::operator-() const return x; } -void BigInt::reduce_below(const BigInt& p, secure_vector<word>& ws) +size_t BigInt::reduce_below(const BigInt& p, secure_vector<word>& ws) { if(p.is_negative()) throw Invalid_Argument("BigInt::reduce_below mod must be positive"); @@ -332,14 +332,19 @@ void BigInt::reduce_below(const BigInt& p, secure_vector<word>& ws) clear_mem(ws.data(), ws.size()); + size_t reductions = 0; + for(;;) { word borrow = bigint_sub3(ws.data(), data(), p_words + 1, p.data(), p_words); if(borrow) break; + ++reductions; swap_reg(ws); } + + return reductions; } /* |