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}