FieldElement

Struct FieldElement 

Source
pub struct FieldElement(/* private fields */);
Expand description

P-521 field element representing values in Fₚ (p = 2^521 − 1). Internally stored as 17 little-endian 32-bit limbs; only the low 9 bits of limb 16 are significant.

Implementations§

Source§

impl FieldElement

Source

pub fn zero() -> Self

The additive identity element: 0

Source

pub fn one() -> Self

The multiplicative identity element: 1

Source§

impl FieldElement

Source

pub fn from_bytes(bytes: &[u8; 66]) -> Result<Self>

Create a field element from big-endian byte representation.

Validates that the input represents a value less than the field modulus p. Returns an error if the value is >= p.

Source

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

Convert field element to big-endian byte representation

Source

pub fn is_zero(&self) -> bool

Check if the field element represents zero

Source

pub fn is_odd(&self) -> bool

Return true if the field element is odd (least-significant bit set)

Source

pub fn is_valid(&self) -> bool

self < p ? (constant-time)

Source§

impl FieldElement

Source

pub fn conditional_swap(a: &mut Self, b: &mut Self, choice: Choice)

Constant-time conditional swap

Swaps the two field elements if choice is 1, leaves them unchanged if choice is 0. This operation is performed in constant time to prevent timing attacks.

Source§

impl FieldElement

Source

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

Constant-time addition modulo p

Source

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

Constant-time subtraction modulo p

Source

pub fn mul(&self, other: &Self) -> Self

Field multiplication using school-book multiply + Mersenne reduction.

Source

pub fn square(&self) -> Self

Field squaring – just a specialised multiplication.

Source

pub fn invert(&self) -> Result<Self>

Fermat-inversion a^(p−2) via left-to-right square-and-multiply.

Source

pub fn sqrt(&self) -> Option<Self>

Square-root via a^{(p+1)/4} (because p ≡ 3 mod 4). (p+1)/4 = 2^519.

Trait Implementations§

Source§

impl Clone for FieldElement

Source§

fn clone(&self) -> FieldElement

Returns a duplicate 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 Debug for FieldElement

Source§

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

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

impl PartialEq for FieldElement

Source§

fn eq(&self, other: &FieldElement) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Zeroize for FieldElement

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 Eq for FieldElement

Source§

impl StructuralPartialEq for FieldElement

Auto Trait Implementations§

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, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> 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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V