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