crypto_bigint/modular/
mul.rs

1use super::reduction::montgomery_reduction;
2use crate::{Limb, Odd, Uint};
3
4pub(crate) const fn mul_montgomery_form<const LIMBS: usize>(
5    a: &Uint<LIMBS>,
6    b: &Uint<LIMBS>,
7    modulus: &Odd<Uint<LIMBS>>,
8    mod_neg_inv: Limb,
9) -> Uint<LIMBS> {
10    let product = a.split_mul(b);
11    montgomery_reduction::<LIMBS>(&product, modulus, mod_neg_inv)
12}
13
14pub(crate) const fn square_montgomery_form<const LIMBS: usize>(
15    a: &Uint<LIMBS>,
16    modulus: &Odd<Uint<LIMBS>>,
17    mod_neg_inv: Limb,
18) -> Uint<LIMBS> {
19    let product = a.square_wide();
20    montgomery_reduction::<LIMBS>(&product, modulus, mod_neg_inv)
21}