crypto_bigint/modular/
mul.rs1use 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}