crypto_bigint/uint/modular/inv.rs
1use crate::{modular::reduction::montgomery_reduction, CtChoice, Limb, Uint};
2
3pub const fn inv_montgomery_form<const LIMBS: usize>(
4 x: &Uint<LIMBS>,
5 modulus: &Uint<LIMBS>,
6 r3: &Uint<LIMBS>,
7 mod_neg_inv: Limb,
8) -> (Uint<LIMBS>, CtChoice) {
9 let (inverse, is_some) = x.inv_odd_mod(modulus);
10 (
11 montgomery_reduction(&inverse.mul_wide(r3), modulus, mod_neg_inv),
12 is_some,
13 )
14}