diff options
| author | levlam <levlam@telegram.org> | 2025-06-09 18:33:12 +0300 |
|---|---|---|
| committer | levlam <levlam@telegram.org> | 2025-06-09 18:33:12 +0300 |
| commit | 5a3387382d64d5dd72eaf5ec0702fbf52190c4b4 (patch) | |
| tree | e109bdf8ab41998344636a28c39037bf0ec1cd1d | |
| parent | a9f3e2f0a7301a74f72eb57a39af938c9d17d53e (diff) | |
Return Result from BigNum::mod_inverse.
| -rw-r--r-- | td/mtproto/TlsInit.cpp | 7 | ||||
| -rw-r--r-- | tdutils/td/utils/BigNum.cpp | 11 | ||||
| -rw-r--r-- | tdutils/td/utils/BigNum.h | 2 | ||||
| -rw-r--r-- | tdutils/td/utils/Ed25519.cpp | 3 |
4 files changed, 16 insertions, 7 deletions
diff --git a/td/mtproto/TlsInit.cpp b/td/mtproto/TlsInit.cpp index 38fdf0720..f1418f356 100644 --- a/td/mtproto/TlsInit.cpp +++ b/td/mtproto/TlsInit.cpp @@ -452,7 +452,12 @@ class TlsHelloStore { BigNum::mod_sub(numerator, numerator, one, mod, big_num_context); BigNum::mod_mul(numerator, numerator, numerator, mod, big_num_context); - BigNum::mod_inverse(denominator, denominator, mod, big_num_context); + auto r_inverse = BigNum::mod_inverse(denominator, mod, big_num_context); + if (r_inverse.is_error()) { + LOG(ERROR) << r_inverse.error(); + } else { + denominator = r_inverse.move_as_ok(); + } BigNum::mod_mul(numerator, numerator, denominator, mod, big_num_context); return numerator; } 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, 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 ÷nd, 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); |
