aboutsummaryrefslogtreecommitdiffhomepage
path: root/tdutils
diff options
context:
space:
mode:
Diffstat (limited to 'tdutils')
-rw-r--r--tdutils/td/utils/BigNum.cpp11
-rw-r--r--tdutils/td/utils/BigNum.h4
-rw-r--r--tdutils/td/utils/crypto.cpp3
3 files changed, 11 insertions, 7 deletions
diff --git a/tdutils/td/utils/BigNum.cpp b/tdutils/td/utils/BigNum.cpp
index 3bfd10204..2dd9a11f2 100644
--- a/tdutils/td/utils/BigNum.cpp
+++ b/tdutils/td/utils/BigNum.cpp
@@ -291,16 +291,19 @@ Result<BigNum> BigNum::mod_inverse(BigNum &a, const BigNum &m, BigNumContext &co
return std::move(r);
}
-void BigNum::div(BigNum *quotient, BigNum *remainder, const BigNum &dividend, const BigNum &divisor,
- BigNumContext &context) {
+Status BigNum::div(BigNum *quotient, BigNum *remainder, const BigNum &dividend, const BigNum &divisor,
+ BigNumContext &context) {
auto q = quotient == nullptr ? nullptr : quotient->impl_->big_num;
auto r = remainder == nullptr ? nullptr : remainder->impl_->big_num;
if (q == nullptr && r == nullptr) {
- return;
+ return Status::OK();
}
auto result = BN_div(q, r, dividend.impl_->big_num, divisor.impl_->big_num, context.impl_->big_num_context);
- LOG_IF(FATAL, result != 1);
+ if (result != 1) {
+ return Status::Error("Failed to compute quotient");
+ }
+ return Status::OK();
}
void BigNum::mod_exp(BigNum &r, const BigNum &a, const BigNum &p, const BigNum &m, BigNumContext &context) {
diff --git a/tdutils/td/utils/BigNum.h b/tdutils/td/utils/BigNum.h
index 0219d145d..b889f0556 100644
--- a/tdutils/td/utils/BigNum.h
+++ b/tdutils/td/utils/BigNum.h
@@ -99,8 +99,8 @@ class BigNum {
static Result<BigNum> mod_inverse(BigNum &a, const BigNum &m, BigNumContext &context);
- static void div(BigNum *quotient, BigNum *remainder, const BigNum &dividend, const BigNum &divisor,
- BigNumContext &context);
+ static Status div(BigNum *quotient, BigNum *remainder, const BigNum &dividend, const BigNum &divisor,
+ BigNumContext &context) TD_WARN_UNUSED_RESULT;
static void mod_exp(BigNum &r, const BigNum &a, const BigNum &p, const BigNum &m, BigNumContext &context);
diff --git a/tdutils/td/utils/crypto.cpp b/tdutils/td/utils/crypto.cpp
index bbaef2466..35eb0443c 100644
--- a/tdutils/td/utils/crypto.cpp
+++ b/tdutils/td/utils/crypto.cpp
@@ -214,7 +214,8 @@ static int pq_factorize_big(Slice pq_str, string *p_str, string *q_str) {
}
if (found) {
- BigNum::div(&q, nullptr, pq, p, context);
+ auto status = BigNum::div(&q, nullptr, pq, p, context);
+ CHECK(status.is_ok());
if (BigNum::compare(p, q) > 0) {
std::swap(p, q);
}