Struct SafeGcdInverter

Source
pub struct SafeGcdInverter<const SAT_LIMBS: usize, const UNSAT_LIMBS: usize> { /* private fields */ }
Expand description

Modular multiplicative inverter based on the Bernstein-Yang method.

The inverter can be created for a specified modulus M and adjusting parameter A to compute the adjusted multiplicative inverses of positive integers, i.e. for computing (1 / x) * A (mod M) for a positive integer x.

The adjusting parameter allows computing the multiplicative inverses in the case of using the Montgomery representation for the input or the expected output. If R is the Montgomery factor, the multiplicative inverses in the appropriate representation can be computed provided that the value of A is chosen as follows:

  • A = 1, if both the input and the expected output are in the standard form
  • A = R^2 mod M, if both the input and the expected output are in the Montgomery form
  • A = R mod M, if either the input or the expected output is in the Montgomery form, but not both of them

The public methods of this type receive and return unsigned big integers as arrays of 64-bit chunks, the ordering of which is little-endian. Both the modulus and the integer to be inverted should not exceed 2 ^ (62 * L - 64).

For better understanding the implementation, the following resources are recommended:

Implementations§

Source§

impl<const SAT_LIMBS: usize, const UNSAT_LIMBS: usize> SafeGcdInverter<SAT_LIMBS, UNSAT_LIMBS>

Source

pub const fn new( modulus: &Odd<Uint<SAT_LIMBS>>, adjuster: &Uint<SAT_LIMBS>, ) -> Self

Creates the inverter for specified modulus and adjusting parameter.

Modulus must be odd. Returns None if it is not.

Source

pub const fn inv( &self, value: &Uint<SAT_LIMBS>, ) -> ConstCtOption<Uint<SAT_LIMBS>>

Returns either the adjusted modular multiplicative inverse for the argument or None depending on invertibility of the argument, i.e. its coprimality with the modulus.

Source

pub const fn inv_vartime( &self, value: &Uint<SAT_LIMBS>, ) -> ConstCtOption<Uint<SAT_LIMBS>>

Returns either the adjusted modular multiplicative inverse for the argument or None depending on invertibility of the argument, i.e. its coprimality with the modulus.

This version is variable-time with respect to value.

Trait Implementations§

Source§

impl<const SAT_LIMBS: usize, const UNSAT_LIMBS: usize> Clone for SafeGcdInverter<SAT_LIMBS, UNSAT_LIMBS>

Source§

fn clone(&self) -> SafeGcdInverter<SAT_LIMBS, UNSAT_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 SAT_LIMBS: usize, const UNSAT_LIMBS: usize> Debug for SafeGcdInverter<SAT_LIMBS, UNSAT_LIMBS>

Source§

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

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

impl<const SAT_LIMBS: usize, const UNSAT_LIMBS: usize> Inverter for SafeGcdInverter<SAT_LIMBS, UNSAT_LIMBS>

Source§

type Output = Uint<SAT_LIMBS>

Output of an inversion.
Source§

fn invert(&self, value: &Uint<SAT_LIMBS>) -> CtOption<Self::Output>

Compute a modular inversion, returning None if the result is undefined (i.e. if value is zero or isn’t prime relative to the modulus).
Source§

fn invert_vartime(&self, value: &Uint<SAT_LIMBS>) -> CtOption<Self::Output>

Compute a modular inversion, returning None if the result is undefined (i.e. if value is zero or isn’t prime relative to the modulus). Read more

Auto Trait Implementations§

§

impl<const SAT_LIMBS: usize, const UNSAT_LIMBS: usize> Freeze for SafeGcdInverter<SAT_LIMBS, UNSAT_LIMBS>

§

impl<const SAT_LIMBS: usize, const UNSAT_LIMBS: usize> RefUnwindSafe for SafeGcdInverter<SAT_LIMBS, UNSAT_LIMBS>

§

impl<const SAT_LIMBS: usize, const UNSAT_LIMBS: usize> Send for SafeGcdInverter<SAT_LIMBS, UNSAT_LIMBS>

§

impl<const SAT_LIMBS: usize, const UNSAT_LIMBS: usize> Sync for SafeGcdInverter<SAT_LIMBS, UNSAT_LIMBS>

§

impl<const SAT_LIMBS: usize, const UNSAT_LIMBS: usize> Unpin for SafeGcdInverter<SAT_LIMBS, UNSAT_LIMBS>

§

impl<const SAT_LIMBS: usize, const UNSAT_LIMBS: usize> UnwindSafe for SafeGcdInverter<SAT_LIMBS, UNSAT_LIMBS>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. 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 T
where 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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

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 T
where U: Into<T>,

Source§

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 T
where U: TryFrom<T>,

Source§

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.