Skip to content

Commit cbc5789

Browse files
committed
Use variable-time inversion in blind()
1 parent f4165fe commit cbc5789

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

src/algorithms/rsa.rs

Lines changed: 8 additions & 2 deletions
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

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

178178
let mut r: BoxedUint = BoxedUint::one_with_precision(bits);
179179
let mut ir: Option<BoxedUint> = None;
180+
181+
// TODO: may be included into the precomputed values.
182+
let inverter = Odd::new(key.n().as_ref().clone())
183+
.unwrap()
184+
.precompute_inverter();
185+
180186
while ir.is_none() {
181187
r = BoxedUint::try_random_mod(rng, key.n()).map_err(|_| Error::Rng)?;
182188
if r.is_zero().into() {
183189
r = BoxedUint::one_with_precision(bits);
184190
}
185191

186192
// r^-1 (mod n)
187-
ir = r.inv_mod(key.n()).into();
193+
ir = inverter.invert_vartime(&r).into();
188194
}
189195

190196
let blinded = {

0 commit comments

Comments
 (0)