Skip to main content

crypto_bigint/modular/boxed_monty_form/
pow.rs

1//! Modular exponentiation support for [`BoxedMontyForm`].
2
3use super::BoxedMontyForm;
4use crate::{BoxedUint, PowBoundedExp, modular::pow::pow_montgomery_form_amm};
5
6impl BoxedMontyForm {
7    /// Raises to the `exponent` power.
8    #[must_use]
9    pub fn pow(&self, exponent: &BoxedUint) -> Self {
10        self.pow_bounded_exp(exponent, exponent.bits_precision())
11    }
12
13    /// Raises to the `exponent` power,
14    /// with `exponent_bits` representing the number of (least significant) bits
15    /// to take into account for the exponent.
16    ///
17    /// NOTE: `exponent_bits` may be leaked in the time pattern.
18    #[must_use]
19    pub fn pow_bounded_exp(&self, exponent: &BoxedUint, exponent_bits: u32) -> Self {
20        Self {
21            montgomery_form: pow_montgomery_form_amm(
22                &self.montgomery_form,
23                exponent,
24                exponent_bits,
25                &self.params,
26            ),
27            params: self.params.clone(),
28        }
29    }
30}
31
32impl PowBoundedExp<BoxedUint> for BoxedMontyForm {
33    fn pow_bounded_exp(&self, exponent: &BoxedUint, exponent_bits: u32) -> Self {
34        self.pow_bounded_exp(exponent, exponent_bits)
35    }
36}