diff options
Diffstat (limited to 'tdutils/td/utils/BigNum.cpp')
| -rw-r--r-- | tdutils/td/utils/BigNum.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/tdutils/td/utils/BigNum.cpp b/tdutils/td/utils/BigNum.cpp index b8c1290e7..3bfd10204 100644 --- a/tdutils/td/utils/BigNum.cpp +++ b/tdutils/td/utils/BigNum.cpp @@ -281,9 +281,14 @@ void BigNum::mod_mul(BigNum &r, BigNum &a, BigNum &b, const BigNum &m, BigNumCon LOG_IF(FATAL, result != 1); } -void BigNum::mod_inverse(BigNum &r, BigNum &a, const BigNum &m, BigNumContext &context) { - auto result = BN_mod_inverse(r.impl_->big_num, a.impl_->big_num, m.impl_->big_num, context.impl_->big_num_context); - LOG_IF(FATAL, result != r.impl_->big_num); +Result<BigNum> BigNum::mod_inverse(BigNum &a, const BigNum &m, BigNumContext &context) { + BigNum r; + auto *result = BN_mod_inverse(r.impl_->big_num, a.impl_->big_num, m.impl_->big_num, context.impl_->big_num_context); + if (result != r.impl_->big_num) { + CHECK(result == nullptr); + return Status::Error("Failed to compute modulo inverse"); + } + return std::move(r); } void BigNum::div(BigNum *quotient, BigNum *remainder, const BigNum ÷nd, const BigNum &divisor, |
