Skip to content

Commit 7305628

Browse files
committed
Use variable-time inversion in blind()
1 parent 19c0da0 commit 7305628

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

src/algorithms/rsa.rs

+8-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
use core::cmp::Ordering;
44

55
use crypto_bigint::modular::{BoxedMontyForm, BoxedMontyParams};
6-
use crypto_bigint::{BoxedUint, Gcd, NonZero, Odd, RandomMod};
6+
use crypto_bigint::{BoxedUint, Gcd, Inverter, NonZero, Odd, PrecomputeInverter, RandomMod};
77
use rand_core::TryCryptoRng;
88
use zeroize::Zeroize;
99

@@ -200,14 +200,20 @@ fn blind<R: TryCryptoRng + ?Sized, K: PublicKeyParts>(
200200

201201
let mut r: BoxedUint = BoxedUint::one_with_precision(bits);
202202
let mut ir: Option<BoxedUint> = None;
203+
204+
// TODO: may be included into the precomputed values.
205+
let inverter = Odd::new(key.n().as_ref().clone())
206+
.unwrap()
207+
.precompute_inverter();
208+
203209
while ir.is_none() {
204210
r = BoxedUint::try_random_mod(rng, key.n()).map_err(|_| Error::Rng)?;
205211
if r.is_zero().into() {
206212
r = BoxedUint::one_with_precision(bits);
207213
}
208214

209215
// r^-1 (mod n)
210-
ir = r.inv_mod(key.n()).into();
216+
ir = inverter.invert_vartime(&r).into();
211217
}
212218

213219
let blinded = {

0 commit comments

Comments
 (0)