pub struct DynResidue<const LIMBS: usize> { /* private fields */ }
Expand description

A residue represented using LIMBS limbs. The odd modulus of this residue is set at runtime.

Implementations§

source§

impl<const LIMBS: usize> DynResidue<LIMBS>

source

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

Adds rhs.

source§

impl<const LIMBS: usize> DynResidue<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<const LIMBS: usize> DynResidue<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<const LIMBS: usize> DynResidue<LIMBS>

source

pub const fn neg(&self) -> Self

Negates the number.

source§

impl<const LIMBS: usize> DynResidue<LIMBS>

source

pub const fn pow<const RHS_LIMBS: usize>( &self, exponent: &Uint<RHS_LIMBS> ) -> DynResidue<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 ) -> Self

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<const LIMBS: usize> DynResidue<LIMBS>

source

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

Subtracts rhs.

source§

impl<const LIMBS: usize> DynResidue<LIMBS>

source

pub const fn new( integer: &Uint<LIMBS>, residue_params: DynResidueParams<LIMBS> ) -> Self

Instantiates a new Residue that represents this integer mod MOD.

source

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

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

source

pub const fn zero(residue_params: DynResidueParams<LIMBS>) -> Self

Instantiates a new Residue that represents zero.

source

pub const fn one(residue_params: DynResidueParams<LIMBS>) -> Self

Instantiates a new Residue that represents 1.

source

pub const fn params(&self) -> &DynResidueParams<LIMBS>

Returns the parameter struct used to initialize this residue.

source

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

Access the DynResidue value in Montgomery form.

source

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

Mutably access the DynResidue value in Montgomery form.

source

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

Create a DynResidue from a value in Montgomery form.

source

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

Extract the value from the DynResidue 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<const LIMBS: usize> Add<&DynResidue<LIMBS>> for &DynResidue<LIMBS>

§

type Output = DynResidue<LIMBS>

The resulting type after applying the + operator.
source§

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

Performs the + operation. Read more
source§

impl<const LIMBS: usize> Add<&DynResidue<LIMBS>> for DynResidue<LIMBS>

§

type Output = DynResidue<LIMBS>

The resulting type after applying the + operator.
source§

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

Performs the + operation. Read more
source§

impl<const LIMBS: usize> Add<DynResidue<LIMBS>> for &DynResidue<LIMBS>

§

type Output = DynResidue<LIMBS>

The resulting type after applying the + operator.
source§

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

Performs the + operation. Read more
source§

impl<const LIMBS: usize> Add for DynResidue<LIMBS>

§

type Output = DynResidue<LIMBS>

The resulting type after applying the + operator.
source§

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

Performs the + operation. Read more
source§

impl<const LIMBS: usize> AddAssign<&DynResidue<LIMBS>> for DynResidue<LIMBS>

source§

fn add_assign(&mut self, rhs: &DynResidue<LIMBS>)

Performs the += operation. Read more
source§

impl<const LIMBS: usize> AddAssign for DynResidue<LIMBS>

source§

fn add_assign(&mut self, rhs: DynResidue<LIMBS>)

Performs the += operation. Read more
source§

impl<const LIMBS: usize> Clone for DynResidue<LIMBS>

source§

fn clone(&self) -> DynResidue<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<const LIMBS: usize> ConditionallySelectable for DynResidue<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<const LIMBS: usize> ConstantTimeEq for DynResidue<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<const LIMBS: usize> Debug for DynResidue<LIMBS>

source§

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

Formats the value using the given formatter. 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<const LIMBS: usize> Invert for DynResidue<LIMBS>

§

type Output = CtOption<DynResidue<LIMBS>>

Output of the inversion.
source§

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

Computes the inverse.
source§

impl<const LIMBS: usize> Mul<&DynResidue<LIMBS>> for &DynResidue<LIMBS>

§

type Output = DynResidue<LIMBS>

The resulting type after applying the * operator.
source§

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

Performs the * operation. Read more
source§

impl<const LIMBS: usize> Mul<&DynResidue<LIMBS>> for DynResidue<LIMBS>

§

type Output = DynResidue<LIMBS>

The resulting type after applying the * operator.
source§

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

Performs the * operation. Read more
source§

impl<const LIMBS: usize> Mul<DynResidue<LIMBS>> for &DynResidue<LIMBS>

§

type Output = DynResidue<LIMBS>

The resulting type after applying the * operator.
source§

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

Performs the * operation. Read more
source§

impl<const LIMBS: usize> Mul for DynResidue<LIMBS>

§

type Output = DynResidue<LIMBS>

The resulting type after applying the * operator.
source§

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

Performs the * operation. Read more
source§

impl<const LIMBS: usize> MulAssign<&DynResidue<LIMBS>> for DynResidue<LIMBS>

source§

fn mul_assign(&mut self, rhs: &DynResidue<LIMBS>)

Performs the *= operation. Read more
source§

impl<const LIMBS: usize> MulAssign for DynResidue<LIMBS>

source§

fn mul_assign(&mut self, rhs: DynResidue<LIMBS>)

Performs the *= operation. Read more
source§

impl<const LIMBS: usize, const RHS_LIMBS: usize> MultiExponentiateBoundedExp<Uint<RHS_LIMBS>, [(DynResidue<LIMBS>, Uint<RHS_LIMBS>)]> for DynResidue<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, const LIMBS: usize, const RHS_LIMBS: usize> MultiExponentiateBoundedExp<Uint<RHS_LIMBS>, [(DynResidue<LIMBS>, Uint<RHS_LIMBS>); N]> for DynResidue<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<const LIMBS: usize> Neg for &DynResidue<LIMBS>

§

type Output = DynResidue<LIMBS>

The resulting type after applying the - operator.
source§

fn neg(self) -> DynResidue<LIMBS>

Performs the unary - operation. Read more
source§

impl<const LIMBS: usize> Neg for DynResidue<LIMBS>

§

type Output = DynResidue<LIMBS>

The resulting type after applying the - operator.
source§

fn neg(self) -> Self

Performs the unary - operation. Read more
source§

impl<const LIMBS: usize> PartialEq for DynResidue<LIMBS>

source§

fn eq(&self, other: &DynResidue<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<const LIMBS: usize, const RHS_LIMBS: usize> PowBoundedExp<Uint<RHS_LIMBS>> for DynResidue<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<const LIMBS: usize> Retrieve for DynResidue<LIMBS>

§

type Output = Uint<LIMBS>

The original type.
source§

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

Convert the number back from the optimized representation.
source§

impl<const LIMBS: usize> Square for DynResidue<LIMBS>

source§

fn square(&self) -> Self

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

impl<const LIMBS: usize> Sub<&DynResidue<LIMBS>> for &DynResidue<LIMBS>

§

type Output = DynResidue<LIMBS>

The resulting type after applying the - operator.
source§

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

Performs the - operation. Read more
source§

impl<const LIMBS: usize> Sub<&DynResidue<LIMBS>> for DynResidue<LIMBS>

§

type Output = DynResidue<LIMBS>

The resulting type after applying the - operator.
source§

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

Performs the - operation. Read more
source§

impl<const LIMBS: usize> Sub<DynResidue<LIMBS>> for &DynResidue<LIMBS>

§

type Output = DynResidue<LIMBS>

The resulting type after applying the - operator.
source§

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

Performs the - operation. Read more
source§

impl<const LIMBS: usize> Sub for DynResidue<LIMBS>

§

type Output = DynResidue<LIMBS>

The resulting type after applying the - operator.
source§

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

Performs the - operation. Read more
source§

impl<const LIMBS: usize> SubAssign<&DynResidue<LIMBS>> for DynResidue<LIMBS>

source§

fn sub_assign(&mut self, rhs: &DynResidue<LIMBS>)

Performs the -= operation. Read more
source§

impl<const LIMBS: usize> SubAssign for DynResidue<LIMBS>

source§

fn sub_assign(&mut self, rhs: DynResidue<LIMBS>)

Performs the -= operation. Read more
source§

impl<const LIMBS: usize> Zeroize for DynResidue<LIMBS>

Available on crate feature zeroize only.

NOTE: this does not zeroize the parameters, in order to maintain some form of type consistency

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<const LIMBS: usize> Copy for DynResidue<LIMBS>

source§

impl<const LIMBS: usize> Eq for DynResidue<LIMBS>

source§

impl<const LIMBS: usize> StructuralEq for DynResidue<LIMBS>

source§

impl<const LIMBS: usize> StructuralPartialEq for DynResidue<LIMBS>

Auto Trait Implementations§

§

impl<const LIMBS: usize> RefUnwindSafe for DynResidue<LIMBS>

§

impl<const LIMBS: usize> Send for DynResidue<LIMBS>

§

impl<const LIMBS: usize> Sync for DynResidue<LIMBS>

§

impl<const LIMBS: usize> Unpin for DynResidue<LIMBS>

§

impl<const LIMBS: usize> UnwindSafe for DynResidue<LIMBS>

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.