aboutsummaryrefslogtreecommitdiffhomepage
path: root/tdutils
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2025-06-09 18:33:12 +0300
committerlevlam <levlam@telegram.org>2025-06-09 18:33:12 +0300
commit5a3387382d64d5dd72eaf5ec0702fbf52190c4b4 (patch)
treee109bdf8ab41998344636a28c39037bf0ec1cd1d /tdutils
parenta9f3e2f0a7301a74f72eb57a39af938c9d17d53e (diff)
Return Result from BigNum::mod_inverse.
Diffstat (limited to 'tdutils')
-rw-r--r--tdutils/td/utils/BigNum.cpp11
-rw-r--r--tdutils/td/utils/BigNum.h2
-rw-r--r--tdutils/td/utils/Ed25519.cpp3
3 files changed, 10 insertions, 6 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,
diff --git a/tdutils/td/utils/BigNum.h b/tdutils/td/utils/BigNum.h
index 6967d87ec..0219d145d 100644
--- a/tdutils/td/utils/BigNum.h
+++ b/tdutils/td/utils/BigNum.h
@@ -97,7 +97,7 @@ class BigNum {
static void mod_mul(BigNum &r, BigNum &a, BigNum &b, const BigNum &m, BigNumContext &context);
- static void mod_inverse(BigNum &r, BigNum &a, const BigNum &m, BigNumContext &context);
+ 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);
diff --git a/tdutils/td/utils/Ed25519.cpp b/tdutils/td/utils/Ed25519.cpp
index f0c497d2d..e498a09a1 100644
--- a/tdutils/td/utils/Ed25519.cpp
+++ b/tdutils/td/utils/Ed25519.cpp
@@ -288,8 +288,7 @@ Result<SecureString> Ed25519::compute_shared_secret(const PublicKey &public_key,
BigNum::mod_sub(y2, p, y2, p, context);
- BigNum inverse_y_plus_1;
- BigNum::mod_inverse(inverse_y_plus_1, y2, p, context);
+ TRY_RESULT(inverse_y_plus_1, BigNum::mod_inverse(y2, p, context));
BigNum u;
BigNum::mod_mul(u, y, inverse_y_plus_1, p, context);