pub struct Residue<MOD, const LIMBS: usize>where
MOD: ResidueParams<LIMBS>,{ /* private fields */ }Expand description
A residue mod MOD, represented using LIMBS limbs. The modulus of this residue is constant, so it cannot be set at runtime.
Internally, the value is stored in Montgomery form (multiplied by MOD::R) until it is retrieved.
Implementations§
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Residue<MOD, LIMBS>
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Residue<MOD, LIMBS>
Sourcepub const fn invert(&self) -> (Self, CtChoice)
pub const fn invert(&self) -> (Self, CtChoice)
Computes the residue self^-1 representing the multiplicative inverse of self.
I.e. self * self^-1 = 1.
If the number was invertible, the second element of the tuple is the truthy value,
otherwise it is the falsy value (in which case the first element’s value is unspecified).
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Residue<MOD, LIMBS>
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Residue<MOD, LIMBS>
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Residue<MOD, LIMBS>
Sourcepub const fn pow<const RHS_LIMBS: usize>(
&self,
exponent: &Uint<RHS_LIMBS>,
) -> Residue<MOD, LIMBS>
pub const fn pow<const RHS_LIMBS: usize>( &self, exponent: &Uint<RHS_LIMBS>, ) -> Residue<MOD, LIMBS>
Raises to the exponent power.
Sourcepub const fn pow_bounded_exp<const RHS_LIMBS: usize>(
&self,
exponent: &Uint<RHS_LIMBS>,
exponent_bits: usize,
) -> Residue<MOD, LIMBS>
pub const fn pow_bounded_exp<const RHS_LIMBS: usize>( &self, exponent: &Uint<RHS_LIMBS>, exponent_bits: usize, ) -> Residue<MOD, LIMBS>
Raises to the exponent power,
with exponent_bits representing the number of (least significant) bits
to take into account for the exponent.
NOTE: exponent_bits may be leaked in the time pattern.
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Residue<MOD, LIMBS>
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Residue<MOD, LIMBS>
Sourcepub const fn new(integer: &Uint<LIMBS>) -> Self
pub const fn new(integer: &Uint<LIMBS>) -> Self
Instantiates a new Residue that represents this integer mod MOD.
If the modulus represented by MOD is not odd, this function will panic; use new_checked if you want to be able to detect an invalid modulus.
Sourcepub fn new_checked(integer: &Uint<LIMBS>) -> CtOption<Self>
pub fn new_checked(integer: &Uint<LIMBS>) -> CtOption<Self>
Instantiates a new Residue that represents this integer mod MOD if the modulus is odd.
Returns a CtOption that is None if the provided modulus is not odd; this is a safer version of new, which can panic.
Sourcepub const fn retrieve(&self) -> Uint<LIMBS>
pub const fn retrieve(&self) -> Uint<LIMBS>
Retrieves the integer currently encoded in this Residue, guaranteed to be reduced.
Sourcepub const fn as_montgomery(&self) -> &Uint<LIMBS>
pub const fn as_montgomery(&self) -> &Uint<LIMBS>
Access the Residue value in Montgomery form.
Sourcepub fn as_montgomery_mut(&mut self) -> &mut Uint<LIMBS>
pub fn as_montgomery_mut(&mut self) -> &mut Uint<LIMBS>
Mutably access the Residue value in Montgomery form.
Sourcepub const fn from_montgomery(integer: Uint<LIMBS>) -> Self
pub const fn from_montgomery(integer: Uint<LIMBS>) -> Self
Create a Residue from a value in Montgomery form.
Sourcepub const fn to_montgomery(&self) -> Uint<LIMBS>
pub const fn to_montgomery(&self) -> Uint<LIMBS>
Extract the value from the Residue in Montgomery form.
Trait Implementations§
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Add<&Residue<MOD, LIMBS>> for &Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Add<&Residue<MOD, LIMBS>> for &Residue<MOD, LIMBS>
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Add<&Residue<MOD, LIMBS>> for Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Add<&Residue<MOD, LIMBS>> for Residue<MOD, LIMBS>
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Add<Residue<MOD, LIMBS>> for &Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Add<Residue<MOD, LIMBS>> for &Residue<MOD, LIMBS>
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> AddAssign<&Residue<MOD, LIMBS>> for Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> AddAssign<&Residue<MOD, LIMBS>> for Residue<MOD, LIMBS>
Source§fn add_assign(&mut self, rhs: &Self)
fn add_assign(&mut self, rhs: &Self)
+= operation. Read moreSource§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> AddAssign for Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> AddAssign for Residue<MOD, LIMBS>
Source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
+= operation. Read moreSource§impl<MOD, const LIMBS: usize> Clone for Residue<MOD, LIMBS>where
MOD: ResidueParams<LIMBS> + Clone,
impl<MOD, const LIMBS: usize> Clone for Residue<MOD, LIMBS>where
MOD: ResidueParams<LIMBS> + Clone,
Source§impl<MOD: ResidueParams<LIMBS> + Copy, const LIMBS: usize> ConditionallySelectable for Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS> + Copy, const LIMBS: usize> ConditionallySelectable for Residue<MOD, LIMBS>
Source§fn conditional_select(a: &Self, b: &Self, choice: Choice) -> Self
fn conditional_select(a: &Self, b: &Self, choice: Choice) -> Self
Source§fn conditional_assign(&mut self, other: &Self, choice: Choice)
fn conditional_assign(&mut self, other: &Self, choice: Choice)
Source§fn conditional_swap(a: &mut Self, b: &mut Self, choice: Choice)
fn conditional_swap(a: &mut Self, b: &mut Self, choice: Choice)
self and other if choice == 1; otherwise,
reassign both unto themselves. Read moreSource§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> ConstantTimeEq for Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> ConstantTimeEq for Residue<MOD, LIMBS>
Source§impl<MOD, const LIMBS: usize> Debug for Residue<MOD, LIMBS>where
MOD: ResidueParams<LIMBS> + Debug,
impl<MOD, const LIMBS: usize> Debug for Residue<MOD, LIMBS>where
MOD: ResidueParams<LIMBS> + Debug,
Source§impl<const LIMBS: usize, P: ResidueParams<LIMBS>> From<&Residue<P, LIMBS>> for DynResidue<LIMBS>
impl<const LIMBS: usize, P: ResidueParams<LIMBS>> From<&Residue<P, LIMBS>> for DynResidue<LIMBS>
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Mul<&Residue<MOD, LIMBS>> for &Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Mul<&Residue<MOD, LIMBS>> for &Residue<MOD, LIMBS>
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Mul<&Residue<MOD, LIMBS>> for Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Mul<&Residue<MOD, LIMBS>> for Residue<MOD, LIMBS>
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Mul<Residue<MOD, LIMBS>> for &Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Mul<Residue<MOD, LIMBS>> for &Residue<MOD, LIMBS>
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> MulAssign<&Residue<MOD, LIMBS>> for Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> MulAssign<&Residue<MOD, LIMBS>> for Residue<MOD, LIMBS>
Source§fn mul_assign(&mut self, rhs: &Residue<MOD, LIMBS>)
fn mul_assign(&mut self, rhs: &Residue<MOD, LIMBS>)
*= operation. Read moreSource§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> MulAssign for Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> MulAssign for Residue<MOD, LIMBS>
Source§fn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
*= operation. Read moreSource§impl<const N: usize, MOD: ResidueParams<LIMBS>, const LIMBS: usize, const RHS_LIMBS: usize> MultiExponentiateBoundedExp<Uint<RHS_LIMBS>, [(Residue<MOD, LIMBS>, Uint<RHS_LIMBS>); N]> for Residue<MOD, LIMBS>
impl<const N: usize, MOD: ResidueParams<LIMBS>, const LIMBS: usize, const RHS_LIMBS: usize> MultiExponentiateBoundedExp<Uint<RHS_LIMBS>, [(Residue<MOD, LIMBS>, Uint<RHS_LIMBS>); N]> for Residue<MOD, LIMBS>
Source§impl<MOD, const LIMBS: usize> PartialEq for Residue<MOD, LIMBS>where
MOD: ResidueParams<LIMBS> + PartialEq,
impl<MOD, const LIMBS: usize> PartialEq for Residue<MOD, LIMBS>where
MOD: ResidueParams<LIMBS> + PartialEq,
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize, const RHS_LIMBS: usize> PowBoundedExp<Uint<RHS_LIMBS>> for Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize, const RHS_LIMBS: usize> PowBoundedExp<Uint<RHS_LIMBS>> for Residue<MOD, LIMBS>
Source§impl<MOD, const LIMBS: usize> Random for Residue<MOD, LIMBS>where
MOD: ResidueParams<LIMBS>,
impl<MOD, const LIMBS: usize> Random for Residue<MOD, LIMBS>where
MOD: ResidueParams<LIMBS>,
Source§fn random(rng: &mut impl CryptoRngCore) -> Self
fn random(rng: &mut impl CryptoRngCore) -> Self
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Sub<&Residue<MOD, LIMBS>> for &Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Sub<&Residue<MOD, LIMBS>> for &Residue<MOD, LIMBS>
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Sub<&Residue<MOD, LIMBS>> for Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Sub<&Residue<MOD, LIMBS>> for Residue<MOD, LIMBS>
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Sub<Residue<MOD, LIMBS>> for &Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Sub<Residue<MOD, LIMBS>> for &Residue<MOD, LIMBS>
Source§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> SubAssign<&Residue<MOD, LIMBS>> for Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> SubAssign<&Residue<MOD, LIMBS>> for Residue<MOD, LIMBS>
Source§fn sub_assign(&mut self, rhs: &Self)
fn sub_assign(&mut self, rhs: &Self)
-= operation. Read moreSource§impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> SubAssign for Residue<MOD, LIMBS>
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> SubAssign for Residue<MOD, LIMBS>
Source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
-= operation. Read moreimpl<MOD, const LIMBS: usize> Copy for Residue<MOD, LIMBS>where
MOD: ResidueParams<LIMBS> + Copy,
impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> DefaultIsZeroes for Residue<MOD, LIMBS>
impl<MOD, const LIMBS: usize> Eq for Residue<MOD, LIMBS>where
MOD: ResidueParams<LIMBS> + Eq,
impl<MOD, const LIMBS: usize> StructuralPartialEq for Residue<MOD, LIMBS>where
MOD: ResidueParams<LIMBS>,
Auto Trait Implementations§
impl<MOD, const LIMBS: usize> Freeze for Residue<MOD, LIMBS>
impl<MOD, const LIMBS: usize> RefUnwindSafe for Residue<MOD, LIMBS>where
MOD: RefUnwindSafe,
impl<MOD, const LIMBS: usize> Send for Residue<MOD, LIMBS>
impl<MOD, const LIMBS: usize> Sync for Residue<MOD, LIMBS>
impl<MOD, const LIMBS: usize> Unpin for Residue<MOD, LIMBS>where
MOD: Unpin,
impl<MOD, const LIMBS: usize> UnwindSafe for Residue<MOD, LIMBS>where
MOD: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> ConditionallyNegatable for T
impl<T> ConditionallyNegatable for T
Source§fn conditional_negate(&mut self, choice: Choice)
fn conditional_negate(&mut self, choice: Choice)
Source§impl<T, Exponent, BasesAndExponents> MultiExponentiate<Exponent, BasesAndExponents> for Twhere
T: MultiExponentiateBoundedExp<Exponent, BasesAndExponents>,
Exponent: Bounded,
BasesAndExponents: AsRef<[(T, Exponent)]> + ?Sized,
impl<T, Exponent, BasesAndExponents> MultiExponentiate<Exponent, BasesAndExponents> for Twhere
T: MultiExponentiateBoundedExp<Exponent, BasesAndExponents>,
Exponent: Bounded,
BasesAndExponents: AsRef<[(T, Exponent)]> + ?Sized,
Source§fn multi_exponentiate(bases_and_exponents: &BasesAndExponents) -> T
fn multi_exponentiate(bases_and_exponents: &BasesAndExponents) -> T
x1 ^ k1 * ... * xn ^ kn.