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>

source

pub const fn add(&self, rhs: &Residue<MOD, LIMBS>) -> Self

Adds rhs.

source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Residue<MOD, LIMBS>

source

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>

source

pub const fn mul(&self, rhs: &Self) -> Self

Multiplies by rhs.

source

pub const fn square(&self) -> Self

Computes the (reduced) square of a residue.

source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Residue<MOD, LIMBS>

source

pub const fn neg(&self) -> Self

Negates the number.

source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Residue<MOD, LIMBS>

source

pub const fn pow<const RHS_LIMBS: usize>( &self, exponent: &Uint<RHS_LIMBS> ) -> Residue<MOD, LIMBS>

Raises to the exponent power.

source

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>

source

pub const fn sub(&self, rhs: &Self) -> Self

Subtracts rhs.

source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Residue<MOD, LIMBS>

source

pub const ZERO: Self = _

The representation of 0 mod MOD.

source

pub const ONE: Self = _

The representation of 1 mod MOD.

source

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.

source

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.

source

pub const fn retrieve(&self) -> Uint<LIMBS>

Retrieves the integer currently encoded in this Residue, guaranteed to be reduced.

source

pub const fn as_montgomery(&self) -> &Uint<LIMBS>

Access the Residue value in Montgomery form.

source

pub fn as_montgomery_mut(&mut self) -> &mut Uint<LIMBS>

Mutably access the Residue value in Montgomery form.

source

pub const fn from_montgomery(integer: Uint<LIMBS>) -> Self

Create a Residue from a value in Montgomery form.

source

pub const fn to_montgomery(&self) -> Uint<LIMBS>

Extract the value from the Residue in Montgomery form.

source

pub fn div_by_2(&self) -> Self

Performs the modular division by 2, that is for given x returns y such that y * 2 = x mod p. This means:

  • if x is even, returns x / 2,
  • if x is odd, returns (x + p) / 2 (since the modulus p in Montgomery form is always odd, this divides entirely).

Trait Implementations§

source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Add<&Residue<MOD, LIMBS>> for &Residue<MOD, LIMBS>

§

type Output = Residue<MOD, LIMBS>

The resulting type after applying the + operator.
source§

fn add(self, rhs: &Residue<MOD, LIMBS>) -> Residue<MOD, LIMBS>

Performs the + operation. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Add<&Residue<MOD, LIMBS>> for Residue<MOD, LIMBS>

§

type Output = Residue<MOD, LIMBS>

The resulting type after applying the + operator.
source§

fn add(self, rhs: &Residue<MOD, LIMBS>) -> Residue<MOD, LIMBS>

Performs the + operation. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Add<Residue<MOD, LIMBS>> for &Residue<MOD, LIMBS>

§

type Output = Residue<MOD, LIMBS>

The resulting type after applying the + operator.
source§

fn add(self, rhs: Residue<MOD, LIMBS>) -> Residue<MOD, LIMBS>

Performs the + operation. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Add for Residue<MOD, LIMBS>

§

type Output = Residue<MOD, LIMBS>

The resulting type after applying the + operator.
source§

fn add(self, rhs: Residue<MOD, LIMBS>) -> Residue<MOD, LIMBS>

Performs the + operation. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> AddAssign<&Residue<MOD, LIMBS>> for Residue<MOD, LIMBS>

source§

fn add_assign(&mut self, rhs: &Self)

Performs the += operation. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> AddAssign for Residue<MOD, LIMBS>

source§

fn add_assign(&mut self, rhs: Self)

Performs the += operation. Read more
source§

impl<MOD, const LIMBS: usize> Clone for Residue<MOD, LIMBS>where MOD: ResidueParams<LIMBS> + Clone,

source§

fn clone(&self) -> Residue<MOD, LIMBS>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<MOD: ResidueParams<LIMBS> + Copy, const LIMBS: usize> ConditionallySelectable for Residue<MOD, LIMBS>

source§

fn conditional_select(a: &Self, b: &Self, choice: Choice) -> Self

Select a or b according to choice. Read more
source§

fn conditional_assign(&mut self, other: &Self, choice: Choice)

Conditionally assign other to self, according to choice. Read more
source§

fn conditional_swap(a: &mut Self, b: &mut Self, choice: Choice)

Conditionally swap self and other if choice == 1; otherwise, reassign both unto themselves. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> ConstantTimeEq for Residue<MOD, LIMBS>

source§

fn ct_eq(&self, other: &Self) -> Choice

Determine if two items are equal. Read more
source§

fn ct_ne(&self, other: &Self) -> Choice

Determine if two items are NOT equal. Read more
source§

impl<MOD, const LIMBS: usize> Debug for Residue<MOD, LIMBS>where MOD: ResidueParams<LIMBS> + Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Default for Residue<MOD, LIMBS>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<'de, MOD, const LIMBS: usize> Deserialize<'de> for Residue<MOD, LIMBS>where MOD: ResidueParams<LIMBS>, Uint<LIMBS>: Encoding,

Available on crate feature serde only.
source§

fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<const LIMBS: usize, P: ResidueParams<LIMBS>> From<&Residue<P, LIMBS>> for DynResidue<LIMBS>

source§

fn from(residue: &Residue<P, LIMBS>) -> Self

Converts to this type from the input type.
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Invert for Residue<MOD, LIMBS>

§

type Output = CtOption<Residue<MOD, LIMBS>>

Output of the inversion.
source§

fn invert(&self) -> Self::Output

Computes the inverse.
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Mul<&Residue<MOD, LIMBS>> for &Residue<MOD, LIMBS>

§

type Output = Residue<MOD, LIMBS>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: &Residue<MOD, LIMBS>) -> Residue<MOD, LIMBS>

Performs the * operation. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Mul<&Residue<MOD, LIMBS>> for Residue<MOD, LIMBS>

§

type Output = Residue<MOD, LIMBS>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: &Residue<MOD, LIMBS>) -> Residue<MOD, LIMBS>

Performs the * operation. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Mul<Residue<MOD, LIMBS>> for &Residue<MOD, LIMBS>

§

type Output = Residue<MOD, LIMBS>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Residue<MOD, LIMBS>) -> Residue<MOD, LIMBS>

Performs the * operation. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Mul for Residue<MOD, LIMBS>

§

type Output = Residue<MOD, LIMBS>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Residue<MOD, LIMBS>) -> Residue<MOD, LIMBS>

Performs the * operation. Read more
source§

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>)

Performs the *= operation. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> MulAssign for Residue<MOD, LIMBS>

source§

fn mul_assign(&mut self, rhs: Self)

Performs the *= operation. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize, const RHS_LIMBS: usize> MultiExponentiateBoundedExp<Uint<RHS_LIMBS>, [(Residue<MOD, LIMBS>, Uint<RHS_LIMBS>)]> for Residue<MOD, LIMBS>

Available on crate feature alloc only.
source§

fn multi_exponentiate_bounded_exp( bases_and_exponents: &[(Self, Uint<RHS_LIMBS>)], exponent_bits: usize ) -> Self

Calculates x1 ^ k1 * ... * xn ^ kn.
source§

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§

fn multi_exponentiate_bounded_exp( bases_and_exponents: &[(Self, Uint<RHS_LIMBS>); N], exponent_bits: usize ) -> Self

Calculates x1 ^ k1 * ... * xn ^ kn.
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Neg for &Residue<MOD, LIMBS>

§

type Output = Residue<MOD, LIMBS>

The resulting type after applying the - operator.
source§

fn neg(self) -> Residue<MOD, LIMBS>

Performs the unary - operation. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Neg for Residue<MOD, LIMBS>

§

type Output = Residue<MOD, LIMBS>

The resulting type after applying the - operator.
source§

fn neg(self) -> Self

Performs the unary - operation. Read more
source§

impl<MOD, const LIMBS: usize> PartialEq for Residue<MOD, LIMBS>where MOD: ResidueParams<LIMBS> + PartialEq,

source§

fn eq(&self, other: &Residue<MOD, LIMBS>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize, const RHS_LIMBS: usize> PowBoundedExp<Uint<RHS_LIMBS>> for Residue<MOD, LIMBS>

source§

fn pow_bounded_exp( &self, exponent: &Uint<RHS_LIMBS>, exponent_bits: usize ) -> Self

Raises to the exponent power, with exponent_bits representing the number of (least significant) bits to take into account for the exponent. Read more
source§

impl<MOD, const LIMBS: usize> Random for Residue<MOD, LIMBS>where MOD: ResidueParams<LIMBS>,

Available on crate feature rand_core only.
source§

fn random(rng: &mut impl CryptoRngCore) -> Self

Generate a cryptographically secure random value.
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Retrieve for Residue<MOD, LIMBS>

§

type Output = Uint<LIMBS>

The original type.
source§

fn retrieve(&self) -> Self::Output

Convert the number back from the optimized representation.
source§

impl<MOD, const LIMBS: usize> Serialize for Residue<MOD, LIMBS>where MOD: ResidueParams<LIMBS>, Uint<LIMBS>: Encoding,

Available on crate feature serde only.
source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>where S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Square for Residue<MOD, LIMBS>

source§

fn square(&self) -> Self

Computes the same as self.mul(self), but may be more efficient.
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Sub<&Residue<MOD, LIMBS>> for &Residue<MOD, LIMBS>

§

type Output = Residue<MOD, LIMBS>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: &Residue<MOD, LIMBS>) -> Residue<MOD, LIMBS>

Performs the - operation. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Sub<&Residue<MOD, LIMBS>> for Residue<MOD, LIMBS>

§

type Output = Residue<MOD, LIMBS>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: &Residue<MOD, LIMBS>) -> Residue<MOD, LIMBS>

Performs the - operation. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Sub<Residue<MOD, LIMBS>> for &Residue<MOD, LIMBS>

§

type Output = Residue<MOD, LIMBS>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Residue<MOD, LIMBS>) -> Residue<MOD, LIMBS>

Performs the - operation. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Sub for Residue<MOD, LIMBS>

§

type Output = Residue<MOD, LIMBS>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Residue<MOD, LIMBS>) -> Residue<MOD, LIMBS>

Performs the - operation. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> SubAssign<&Residue<MOD, LIMBS>> for Residue<MOD, LIMBS>

source§

fn sub_assign(&mut self, rhs: &Self)

Performs the -= operation. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> SubAssign for Residue<MOD, LIMBS>

source§

fn sub_assign(&mut self, rhs: Self)

Performs the -= operation. Read more
source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> Zero for Residue<MOD, LIMBS>

source§

const ZERO: Self = Self::ZERO

The value 0.
source§

fn is_zero(&self) -> Choice

Determine if this value is equal to zero. Read more
source§

impl<MOD, const LIMBS: usize> Copy for Residue<MOD, LIMBS>where MOD: ResidueParams<LIMBS> + Copy,

source§

impl<MOD: ResidueParams<LIMBS>, const LIMBS: usize> DefaultIsZeroes for Residue<MOD, LIMBS>

Available on crate feature zeroize only.
source§

impl<MOD, const LIMBS: usize> Eq for Residue<MOD, LIMBS>where MOD: ResidueParams<LIMBS> + Eq,

source§

impl<MOD, const LIMBS: usize> StructuralEq for Residue<MOD, LIMBS>where MOD: ResidueParams<LIMBS>,

source§

impl<MOD, const LIMBS: usize> StructuralPartialEq for Residue<MOD, LIMBS>where MOD: ResidueParams<LIMBS>,

Auto Trait Implementations§

§

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> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> ConditionallyNegatable for Twhere T: ConditionallySelectable, &'a T: for<'a> Neg<Output = T>,

source§

fn conditional_negate(&mut self, choice: Choice)

Negate self if choice == Choice(1); otherwise, leave it unchanged. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

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

Calculates x1 ^ k1 * ... * xn ^ kn.
source§

impl<T, Exponent> Pow<Exponent> for Twhere T: PowBoundedExp<Exponent>, Exponent: Bounded,

source§

fn pow(&self, exponent: &Exponent) -> T

Raises to the exponent power.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<Z> Zeroize for Zwhere Z: DefaultIsZeroes,

source§

fn zeroize(&mut self)

Zero out this object from memory using Rust intrinsics which ensure the zeroization operation is not “optimized away” by the compiler.
source§

impl<T> DeserializeOwned for Twhere T: for<'de> Deserialize<'de>,