pub trait MontyForm:
'static
+ Sealed
+ Clone
+ CtEq
+ CtSelect
+ Debug
+ Eq
+ Invert<Output = CtOption<Self>>
+ Sized
+ Send
+ Sync
+ Add<Output = Self>
+ for<'a> Add<&'a Self, Output = Self>
+ AddAssign
+ for<'a> AddAssign<&'a Self>
+ Sub<Output = Self>
+ for<'a> Sub<&'a Self, Output = Self>
+ SubAssign
+ for<'a> SubAssign<&'a Self>
+ Mul<Output = Self>
+ for<'a> Mul<&'a Self, Output = Self>
+ MulAssign
+ for<'a> MulAssign<&'a Self>
+ Neg<Output = Self>
+ PowBoundedExp<Self::Integer>
+ Retrieve<Output = Self::Integer>
+ Square
+ SquareAssign {
type Integer: UnsignedWithMontyForm<MontyForm = Self>;
type Multiplier<'a>: Debug + Clone + MontyMultiplier<'a, Monty = Self>;
type Params: 'static + AsRef<MontyParams<Self::Integer>> + From<MontyParams<Self::Integer>> + Clone + Debug + Eq + Sized + Send + Sync;
Show 15 methods
// Required methods
fn new_params_vartime(modulus: Odd<Self::Integer>) -> Self::Params;
fn new(value: Self::Integer, params: &Self::Params) -> Self;
fn zero(params: &Self::Params) -> Self;
fn one(params: &Self::Params) -> Self;
fn params(&self) -> &Self::Params;
fn as_montgomery(&self) -> &Self::Integer;
fn copy_montgomery_from(&mut self, other: &Self);
fn from_montgomery(integer: Self::Integer, params: &Self::Params) -> Self;
fn into_montgomery(self) -> Self::Integer;
fn double(&self) -> Self;
fn div_by_2(&self) -> Self;
fn lincomb_vartime(products: &[(&Self, &Self)]) -> Self;
// Provided methods
fn is_zero(&self) -> Choice { ... }
fn is_one(&self) -> Choice { ... }
fn div_by_2_assign(&mut self) { ... }
}Expand description
A representation of an integer optimized for the performance of modular operations.
Required Associated Types§
Sourcetype Integer: UnsignedWithMontyForm<MontyForm = Self>
type Integer: UnsignedWithMontyForm<MontyForm = Self>
The original integer type.
Sourcetype Multiplier<'a>: Debug + Clone + MontyMultiplier<'a, Monty = Self>
type Multiplier<'a>: Debug + Clone + MontyMultiplier<'a, Monty = Self>
Prepared Montgomery multiplier for tight loops.
Required Methods§
Sourcefn new_params_vartime(modulus: Odd<Self::Integer>) -> Self::Params
fn new_params_vartime(modulus: Odd<Self::Integer>) -> Self::Params
Create the precomputed data for Montgomery representation of integers modulo modulus,
variable time in modulus.
Sourcefn new(value: Self::Integer, params: &Self::Params) -> Self
fn new(value: Self::Integer, params: &Self::Params) -> Self
Convert the value into the representation using precomputed data.
Sourcefn as_montgomery(&self) -> &Self::Integer
fn as_montgomery(&self) -> &Self::Integer
Access the value in Montgomery form.
Sourcefn copy_montgomery_from(&mut self, other: &Self)
fn copy_montgomery_from(&mut self, other: &Self)
Copy the Montgomery representation from other into self.
NOTE: the parameters remain unchanged.
Sourcefn from_montgomery(integer: Self::Integer, params: &Self::Params) -> Self
fn from_montgomery(integer: Self::Integer, params: &Self::Params) -> Self
Create a new Montgomery representation from an integer in Montgomery form.
Sourcefn into_montgomery(self) -> Self::Integer
fn into_montgomery(self) -> Self::Integer
Move the Montgomery form result out of self and return it.
Sourcefn lincomb_vartime(products: &[(&Self, &Self)]) -> Self
fn lincomb_vartime(products: &[(&Self, &Self)]) -> Self
Calculate the sum of products of pairs (a, b) in products.
This method is variable time only with the value of the modulus. For a modulus with leading zeros, this method is more efficient than a naive sum of products.
This method will panic if products is empty. All terms must be associated with equivalent
Montgomery parameters.
Provided Methods§
Sourcefn is_zero(&self) -> Choice
fn is_zero(&self) -> Choice
Determine if this value is equal to zero.
§Returns
If zero, returns Choice(1). Otherwise, returns Choice(0).
Sourcefn is_one(&self) -> Choice
fn is_one(&self) -> Choice
Determine if this value is equal to one.
§Returns
If one, returns Choice(1). Otherwise, returns Choice(0).
Sourcefn div_by_2_assign(&mut self)
fn div_by_2_assign(&mut self)
Performs division by 2 inplace, that is finds x such that x + x = self
and writes it into self.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".