[−][src]Struct zerocaf::backend::u64::scalar::Scalar
The Scalar struct represents an Scalar over the modulo
2^249 + 14490550575682688738086195780655237219 as 5 52-bit limbs
represented in radix 2^52.
Methods
impl Scalar[src]
pub const fn zero() -> Scalar[src]
Return a Scalar with value = 0.
pub const fn one() -> Scalar[src]
Return a Scalar with value = 1.
pub const fn minus_one() -> Scalar[src]
Return a Scalar with value = -1 (mod l).
pub fn is_even(self) -> bool[src]
Evaluate if a Scalar is even or not.
pub fn into_bits(&self) -> [u8; 256][src]
Returns the bit representation of the given Scalar as
an array of 256 bits represented as u8.
pub fn compute_NAF(&self) -> [i8; 256][src]
Compute the Non-Adjacent Form of a given Scalar.
pub fn compute_window_NAF(&self, width: u8) -> [i8; 256][src]
Compute the Windowed-Non-Adjacent Form of a given Scalar.
Inputs
width=> Represents the window-width i.e.width = 2^width.
pub fn mod_2_pow_k(&self, k: u8) -> u8[src]
Compute the result from Scalar (mod 2^k).
Panics
If the given k is > 32 (5 bits) as the value gets greater than the limb.
pub fn mods_2_pow_k(&self, w: u8) -> i8[src]
Compute the result from Scalar (mods k).
Panics
If the given k > 32 (5 bits) || k == 0 as the value gets
greater than the limb.
pub fn from_bytes(bytes: &[u8; 32]) -> Scalar[src]
Unpack a 32 byte / 256 bit Scalar into 5 52-bit limbs.
pub fn from_bytes_wide(_bytes: &[u8; 64]) -> Scalar[src]
Reduce a 64 byte / 512 bit scalar mod l
pub fn to_bytes(&self) -> [u8; 32][src]
Pack the limbs of this Scalar into 32 bytes
pub fn two_pow_k(exp: u64) -> Scalar[src]
Given a k: u64, compute 2^k giving the resulting result
as a Scalar.
See that the input must be between the range => 0..250.
Panics
If the input is greater than the Sub-group order.
pub fn half_without_mod(self) -> Scalar[src]
Returns the half of an EVEN Scalar.
This function performs almost 4x faster than the
Half implementation but SHOULD be used carefully.
Panics
When the Scalar provided is not even.
Trait Implementations
impl<'a, 'b> Add<&'b Scalar> for &'a Scalar[src]
type Output = Scalar
The resulting type after applying the + operator.
fn add(self, b: &'b Scalar) -> Scalar[src]
Compute a + b (mod l).
impl Add<Scalar> for Scalar[src]
type Output = Scalar
The resulting type after applying the + operator.
fn add(self, b: Scalar) -> Scalar[src]
Compute a + b (mod l).
impl Clone for Scalar[src]
impl Copy for Scalar[src]
impl Debug for Scalar[src]
impl From<i8> for Scalar[src]
impl From<u128> for Scalar[src]
impl From<u16> for Scalar[src]
impl From<u32> for Scalar[src]
impl From<u64> for Scalar[src]
impl From<u8> for Scalar[src]
impl<'a> Half for &'a Scalar[src]
impl Identity for Scalar[src]
impl Index<usize> for Scalar[src]
impl IndexMut<usize> for Scalar[src]
impl<'a, 'b> Mul<&'a Scalar> for &'b Scalar[src]
type Output = Scalar
The resulting type after applying the * operator.
fn mul(self, b: &'a Scalar) -> Scalar[src]
This Mul implementation returns a double precision result.
The result of the standard mul is stored on a [u128; 9].
Then, we apply the Montgomery Reduction function to perform
the modulo and the reduction to the Scalar format: [u64; 5].
impl<'a, 'b> Mul<&'a Scalar> for &'b ProjectivePoint[src]
type Output = ProjectivePoint
The resulting type after applying the * operator.
fn mul(self, scalar: &'a Scalar) -> ProjectivePoint[src]
Scalar multiplication: compute Scalar * self.
This implementation uses the algorithm:
add_and_doubling which is the standard one for
this operations and also adds less constraints on
R1CS.
Hankerson, Darrel; Vanstone, Scott; Menezes, Alfred (2004). Guide to Elliptic Curve Cryptography. Springer Professional Computing. New York: Springer-Verlag.
impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsPoint[src]
type Output = EdwardsPoint
The resulting type after applying the * operator.
fn mul(self, scalar: &'b Scalar) -> EdwardsPoint[src]
Scalar multiplication: compute self * Scalar.
This implementation uses the algorithm:
add_and_doubling which is the standard one for
this operations and also adds less constraints on
R1CS.
Hankerson, Darrel; Vanstone, Scott; Menezes, Alfred (2004). Guide to Elliptic Curve Cryptography. Springer Professional Computing. New York: Springer-Verlag.
impl<'a, 'b> Mul<&'b Scalar> for &'a RistrettoPoint[src]
type Output = RistrettoPoint
The resulting type after applying the * operator.
fn mul(self, scalar: &'b Scalar) -> RistrettoPoint[src]
Scalar multiplication: compute self * Scalar.
This implementation uses the algorithm:
add_and_doubling which is the standard one for
this operations and also adds less constraints on
R1CS.
Hankerson, Darrel; Vanstone, Scott; Menezes, Alfred (2004). Guide to Elliptic Curve Cryptography. Springer Professional Computing. New York: Springer-Verlag.
impl Mul<Scalar> for Scalar[src]
type Output = Scalar
The resulting type after applying the * operator.
fn mul(self, b: Scalar) -> Scalar[src]
This Mul implementation returns a double precision result.
The result of the standard mul is stored on a [u128; 9].
Then, we apply the Montgomery Reduction function to perform
the modulo and the reduction to the Scalar format: [u64; 5].
impl Mul<Scalar> for EdwardsPoint[src]
type Output = EdwardsPoint
The resulting type after applying the * operator.
fn mul(self, scalar: Scalar) -> EdwardsPoint[src]
Scalar multiplication: compute Scalar * self.
This implementation uses the algorithm:
add_and_doubling which is the standard one for
this operations and also adds less constraints on
R1CS.
Hankerson, Darrel; Vanstone, Scott; Menezes, Alfred (2004). Guide to Elliptic Curve Cryptography. Springer Professional Computing. New York: Springer-Verlag.
impl Mul<Scalar> for ProjectivePoint[src]
type Output = ProjectivePoint
The resulting type after applying the * operator.
fn mul(self, scalar: Scalar) -> ProjectivePoint[src]
Scalar multiplication: compute Scalar * self.
This implementation uses the algorithm:
add_and_doubling which is the standard one for
this operations and also adds less constraints on
R1CS.
Hankerson, Darrel; Vanstone, Scott; Menezes, Alfred (2004). Guide to Elliptic Curve Cryptography. Springer Professional Computing. New York: Springer-Verlag.
impl Mul<Scalar> for RistrettoPoint[src]
type Output = RistrettoPoint
The resulting type after applying the * operator.
fn mul(self, scalar: Scalar) -> RistrettoPoint[src]
Scalar multiplication: compute self * Scalar.
This implementation uses the algorithm:
add_and_doubling which is the standard one for
this operations and also adds less constraints on
R1CS.
Hankerson, Darrel; Vanstone, Scott; Menezes, Alfred (2004). Guide to Elliptic Curve Cryptography. Springer Professional Computing. New York: Springer-Verlag.
impl<'a> Neg for &'a Scalar[src]
type Output = Scalar
The resulting type after applying the - operator.
fn neg(self) -> Scalar[src]
Performs the negate operation over the sub-group modulo l.
impl Neg for Scalar[src]
type Output = Scalar
The resulting type after applying the - operator.
fn neg(self) -> Scalar[src]
Performs the negate operation over the sub-group modulo l.
impl Ord for Scalar[src]
fn cmp(&self, other: &Self) -> Ordering[src]
fn max(self, other: Self) -> Self1.21.0[src]
fn min(self, other: Self) -> Self1.21.0[src]
fn clamp(self, min: Self, max: Self) -> Self[src]
impl PartialEq<Scalar> for Scalar[src]
impl PartialOrd<Scalar> for Scalar[src]
fn partial_cmp(&self, other: &Scalar) -> Option<Ordering>[src]
#[must_use]
fn lt(&self, other: &Rhs) -> bool1.0.0[src]
#[must_use]
fn le(&self, other: &Rhs) -> bool1.0.0[src]
#[must_use]
fn gt(&self, other: &Rhs) -> bool1.0.0[src]
#[must_use]
fn ge(&self, other: &Rhs) -> bool1.0.0[src]
impl<'a, 'b> Pow<&'b Scalar> for &'a Scalar[src]
Performs the op: a^b (mod l).
Exponentiation by squaring classical algorithm
implementation for Scalar.
Schneier, Bruce (1996). Applied Cryptography: Protocols, Algorithms, and Source Code in C, Second Edition (2nd ed.).
impl Shr<u8> for Scalar[src]
type Output = Scalar
The resulting type after applying the >> operator.
fn shr(self, _rhs: u8) -> Scalar[src]
impl<'a> Square for &'a Scalar[src]
type Output = Scalar
fn square(self) -> Scalar[src]
This Square implementation returns a double precision result.
The result of the standard mul is stored on a [u128; 9].
Then, we apply the Montgomery Reduction function to perform
the modulo and the reduction to the Scalar format: [u64; 5].
impl<'a, 'b> Sub<&'b Scalar> for &'a Scalar[src]
type Output = Scalar
The resulting type after applying the - operator.
fn sub(self, b: &'b Scalar) -> Scalar[src]
Compute a - b (mod l).
impl Sub<Scalar> for Scalar[src]
Auto Trait Implementations
impl RefUnwindSafe for Scalar
impl Send for Scalar
impl Sync for Scalar
impl Unpin for Scalar
impl UnwindSafe for Scalar
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T[src]
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T> Same<T> for T
type Output = T
Should always be Self
impl<T> ToOwned for T where
T: Clone, [src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T[src]
fn clone_into(&self, target: &mut T)[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,