aboutsummaryrefslogtreecommitdiffhomepage
path: root/tdutils/td/utils/BigNum.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tdutils/td/utils/BigNum.cpp')
-rw-r--r--tdutils/td/utils/BigNum.cpp11
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 &dividend, const BigNum &divisor,