[][src]Struct curve25519_dalek::backend::serial::u64::field::FieldElement51

pub struct FieldElement51(pub(crate) [u64; 5]);

A FieldElement51 represents an element of the field \( \mathbb Z / (2^{255} - 19)\).

In the 64-bit implementation, a FieldElement is represented in radix \(2^{51}\) as five u64s; the coefficients are allowed to grow up to \(2^{54}\) between reductions modulo \(p\).

Note

The curve25519_dalek::field module provides a type alias curve25519_dalek::field::FieldElement to either FieldElement51 or FieldElement2625.

The backend-specific type FieldElement51 should not be used outside of the curve25519_dalek::field module.

Methods

impl FieldElement51[src]

pub fn is_negative(&self) -> Choice[src]

Determine if this FieldElement is negative, in the sense used in the ed25519 paper: x is negative if the low bit is set.

Return

If negative, return Choice(1). Otherwise, return Choice(0).

pub fn is_zero(&self) -> Choice[src]

Determine if this FieldElement is zero.

Return

If zero, return Choice(1). Otherwise, return Choice(0).

fn pow22501(&self) -> (FieldElement51, FieldElement51)[src]

Compute (self^(2^250-1), self^11), used as a helper function within invert() and pow22523().

pub fn batch_invert(inputs: &mut [FieldElement51])[src]

Given a slice of public FieldElements, replace each with its inverse.

All input FieldElements MUST be nonzero.

pub fn invert(&self) -> FieldElement51[src]

Given a nonzero field element, compute its inverse.

The inverse is computed as self^(p-2), since x^(p-2)x = x^(p-1) = 1 (mod p).

This function returns zero on input zero.

fn pow_p58(&self) -> FieldElement51[src]

Raise this field element to the power (p-5)/8 = 2^252 -3.

pub fn sqrt_ratio_i(
    u: &FieldElement51,
    v: &FieldElement51
) -> (Choice, FieldElement51)
[src]

Given FieldElements u and v, compute either sqrt(u/v) or sqrt(i*u/v) in constant time.

This function always returns the nonnegative square root.

Return

  • (Choice(1), +sqrt(u/v)) if v is nonzero and u/v is square;
  • (Choice(1), zero) if u is zero;
  • (Choice(0), zero) if v is zero and u is nonzero;
  • (Choice(0), +sqrt(i*u/v)) if u/v is nonsquare (so i*u/v is square).

pub fn invsqrt(&self) -> (Choice, FieldElement51)[src]

Attempt to compute sqrt(1/self) in constant time.

Convenience wrapper around sqrt_ratio_i.

This function always returns the nonnegative square root.

Return

  • (Choice(1), +sqrt(1/self)) if self is a nonzero square;
  • (Choice(0), zero) if self is zero;
  • (Choice(0), +sqrt(i/self)) if self is a nonzero nonsquare;

impl FieldElement51[src]

pub fn negate(&mut self)[src]

Invert the sign of this field element

pub fn zero() -> FieldElement51[src]

Construct zero.

pub fn one() -> FieldElement51[src]

Construct one.

pub fn minus_one() -> FieldElement51[src]

Construct -1.

fn reduce(limbs: [u64; 5]) -> FieldElement51[src]

Given 64-bit input limbs, reduce to enforce the bound 2^(51 + epsilon).

pub fn from_bytes(bytes: &[u8; 32]) -> FieldElement51[src]

Load a FieldElement51 from the low 255 bits of a 256-bit input.

Warning

This function does not check that the input used the canonical representative. It masks the high bit, but it will happily decode 2^255 - 18 to 1. Applications that require a canonical encoding of every field element should decode, re-encode to the canonical encoding, and check that the input was canonical.

pub fn to_bytes(&self) -> [u8; 32][src]

Serialize this FieldElement51 to a 32-byte array. The encoding is canonical.

pub fn pow2k(&self, k: u32) -> FieldElement51[src]

Given k > 0, return self^(2^k).

pub fn square(&self) -> FieldElement51[src]

Returns the square of this field element.

pub fn square2(&self) -> FieldElement51[src]

Returns 2 times the square of this field element.

Trait Implementations

impl Clone for FieldElement51[src]

fn clone_from(&mut self, source: &Self)
1.0.0
[src]

Performs copy-assignment from source. Read more

impl Debug for FieldElement51[src]

impl PartialEq<FieldElement51> for FieldElement51[src]

#[must_use]
fn ne(&self, other: &Rhs) -> bool
1.0.0
[src]

This method tests for !=.

impl Eq for FieldElement51[src]

impl Copy for FieldElement51[src]

impl<'a, 'b> Add<&'b FieldElement51> for &'a FieldElement51[src]

type Output = FieldElement51

The resulting type after applying the + operator.

impl<'a, 'b> Sub<&'b FieldElement51> for &'a FieldElement51[src]

type Output = FieldElement51

The resulting type after applying the - operator.

impl<'a, 'b> Mul<&'b FieldElement51> for &'a FieldElement51[src]

type Output = FieldElement51

The resulting type after applying the * operator.

impl<'a> Neg for &'a FieldElement51[src]

type Output = FieldElement51

The resulting type after applying the - operator.

impl<'b> AddAssign<&'b FieldElement51> for FieldElement51[src]

impl<'b> SubAssign<&'b FieldElement51> for FieldElement51[src]

impl<'b> MulAssign<&'b FieldElement51> for FieldElement51[src]

impl ConstantTimeEq for FieldElement51[src]

fn ct_eq(&self, other: &FieldElement51) -> Choice[src]

Test equality between two FieldElements. Since the internal representation is not canonical, the field elements are normalized to wire format before comparison.

impl ConditionallySelectable for FieldElement51[src]

Auto Trait Implementations

impl Send for FieldElement51

impl Sync for FieldElement51

Blanket Implementations

impl<T> From for T[src]

impl<T, U> TryFrom for T where
    U: Into<T>, 
[src]

type Error = !

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

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

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

impl<T, U> Into for T where
    U: From<T>, 
[src]

impl<T> Borrow for T where
    T: ?Sized
[src]

impl<T> BorrowMut for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

impl<T> FromCast for T

impl<T, U> Cast for T where
    U: FromCast<T>, 

impl<T, U> IntoBits for T where
    U: FromBits<T>, 

impl<T> FromBits for T

impl<T> Same for T

type Output = T

Should always be Self

impl<T> ConditionallyNegatable for T where
    T: ConditionallySelectable,
    &'a T: Neg,
    <&'a T as Neg>::Output == T, 
[src]