Struct miden_core::Felt

source ·
pub struct Felt(_);
Expand description

Represents base field element in the field using Montgomery representation.

Internal values represent x * R mod M where R = 2^64 mod M and x in [0, M). The backing type is u64 but the internal values are always in the range [0, M).

Implementations§

source§

impl BaseElement

source

pub const fn new(value: u64) -> BaseElement

Creates a new field element from the provided value; the value is converted into Montgomery representation.

source

pub const fn from_mont(value: u64) -> BaseElement

Returns a new field element from the provided ‘value’. Assumes that ‘value’ is already in canonical Montgomery form.

source

pub const fn inner(&self) -> u64

Returns the non-canonical u64 inner value.

source

pub fn exp7(self) -> BaseElement

Computes an exponentiation to the power 7. This is useful for computing Rescue-Prime S-Box over this field.

source

pub fn mul_small(self, rhs: u32) -> BaseElement

Multiplies an element that is less than 2^32 by a field element. This implementation is faster as it avoids the use of Montgomery reduction.

Trait Implementations§

source§

impl Add<BaseElement> for BaseElement

§

type Output = BaseElement

The resulting type after applying the + operator.
source§

fn add(self, rhs: BaseElement) -> BaseElement

Performs the + operation. Read more
source§

impl AddAssign<BaseElement> for BaseElement

source§

fn add_assign(&mut self, rhs: BaseElement)

Performs the += operation. Read more
source§

impl AsBytes for BaseElement

source§

fn as_bytes(&self) -> &[u8]

Returns a byte representation of self. Read more
source§

impl Clone for BaseElement

source§

fn clone(&self) -> BaseElement

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 Debug for BaseElement

source§

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

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

impl Default for BaseElement

source§

fn default() -> BaseElement

Returns the “default value” for a type. Read more
source§

impl Deserializable for BaseElement

source§

fn read_from<R>(source: &mut R) -> Result<BaseElement, DeserializationError>where R: ByteReader,

Reads a sequence of bytes from the provided source, attempts to deserialize these bytes into Self, and returns the result. Read more
source§

fn read_from_bytes(bytes: &[u8]) -> Result<Self, DeserializationError>

Attempts to deserialize the provided bytes into Self and returns the result. Read more
source§

fn read_batch_from<R>( source: &mut R, num_elements: usize ) -> Result<Vec<Self, Global>, DeserializationError>where R: ByteReader,

Reads a sequence of bytes from the provided source, attempts to deserialize these bytes into a vector with the specified number of Self elements, and returns the result. Read more
source§

impl Display for BaseElement

source§

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

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

impl Div<BaseElement> for BaseElement

§

type Output = BaseElement

The resulting type after applying the / operator.
source§

fn div(self, rhs: BaseElement) -> BaseElement

Performs the / operation. Read more
source§

impl DivAssign<BaseElement> for BaseElement

source§

fn div_assign(&mut self, rhs: BaseElement)

Performs the /= operation. Read more
source§

impl ExtensibleField<2> for BaseElement

Defines a quadratic extension of the base field over an irreducible polynomial x2 - x + 2. Thus, an extension element is defined as α + β * φ, where φ is a root of this polynomial, and α and β are base field elements.

source§

fn mul(a: [BaseElement; 2], b: [BaseElement; 2]) -> [BaseElement; 2]

Returns a product of a and b in the field defined by this extension.
source§

fn square(a: [BaseElement; 2]) -> [BaseElement; 2]

Returns the square of a in the field defined by this extension.
source§

fn mul_base(a: [BaseElement; 2], b: BaseElement) -> [BaseElement; 2]

Returns a product of a and b in the field defined by this extension. b represents an element in the base field.
source§

fn frobenius(x: [BaseElement; 2]) -> [BaseElement; 2]

Returns Frobenius automorphisms for x in the field defined by this extension.
source§

fn is_supported() -> bool

Returns true if this extension is supported for the underlying base field.
source§

impl ExtensibleField<3> for BaseElement

Defines a cubic extension of the base field over an irreducible polynomial x3 - x - 1. Thus, an extension element is defined as α + β * φ + γ * φ^2, where φ is a root of this polynomial, and α, β and γ are base field elements.

source§

fn mul(a: [BaseElement; 3], b: [BaseElement; 3]) -> [BaseElement; 3]

Returns a product of a and b in the field defined by this extension.
source§

fn square(a: [BaseElement; 3]) -> [BaseElement; 3]

Returns the square of a in the field defined by this extension.
source§

fn mul_base(a: [BaseElement; 3], b: BaseElement) -> [BaseElement; 3]

Returns a product of a and b in the field defined by this extension. b represents an element in the base field.
source§

fn frobenius(x: [BaseElement; 3]) -> [BaseElement; 3]

Returns Frobenius automorphisms for x in the field defined by this extension.
source§

fn is_supported() -> bool

Returns true if this extension is supported for the underlying base field.
source§

impl FieldElement for BaseElement

§

type PositiveInteger = u64

A type defining positive integers big enough to describe a field modulus for Self::BaseField with no loss of precision.
§

type BaseField = BaseElement

Base field type for this finite field. For prime fields, BaseField should be set to Self.
source§

const ZERO: BaseElement = Self::new(0)

The additive identity.
source§

const ONE: BaseElement = Self::new(1)

The multiplicative identity.
source§

const ELEMENT_BYTES: usize = 8usize

Number of bytes needed to encode an element
source§

const IS_CANONICAL: bool = false

True if internal representation of the element is the same as its canonical representation.
source§

fn double(self) -> BaseElement

Returns this field element added to itself.
source§

fn exp( self, power: <BaseElement as FieldElement>::PositiveInteger ) -> BaseElement

Exponentiates this field element by power parameter.
source§

fn inv(self) -> BaseElement

Returns a multiplicative inverse of this field element. If this element is ZERO, ZERO is returned.
source§

fn conjugate(&self) -> BaseElement

Returns a conjugate of this field element.
source§

fn elements_as_bytes(elements: &[BaseElement]) -> &[u8]

Converts a list of elements into a list of bytes. Read more
source§

unsafe fn bytes_as_elements( bytes: &[u8] ) -> Result<&[BaseElement], DeserializationError>

Converts a list of bytes into a list of field elements. Read more
source§

fn zeroed_vector(n: usize) -> Vec<BaseElement, Global>

Returns a vector of length n initialized with all ZERO elements. Read more
source§

fn as_base_elements( elements: &[BaseElement] ) -> &[<BaseElement as FieldElement>::BaseField]

Converts a list of field elements into a list of elements in the underlying base field. Read more
source§

fn square(self) -> Self

Returns this field element raised to power 2.
source§

fn cube(self) -> Self

Returns this field element raised to power 3.
source§

fn exp_vartime(self, power: Self::PositiveInteger) -> Self

Exponentiates this field element by power parameter. This function is expressly variable time, to speed-up verifier computations.
source§

impl From<[u8; 8]> for BaseElement

source§

fn from(bytes: [u8; 8]) -> BaseElement

Converts the value encoded in an array of 8 bytes into a field element. The bytes are assumed to encode the element in the canonical representation in little-endian byte order. If the value is greater than or equal to the field modulus, modular reduction is silently performed.

source§

impl From<u128> for BaseElement

source§

fn from(x: u128) -> BaseElement

Converts a 128-bit value into a field element.

source§

impl From<u16> for BaseElement

source§

fn from(value: u16) -> BaseElement

Converts a 16-bit value into a field element.

source§

impl From<u32> for BaseElement

source§

fn from(value: u32) -> BaseElement

Converts a 32-bit value into a field element.

source§

impl From<u64> for BaseElement

source§

fn from(value: u64) -> BaseElement

Converts a 64-bit value into a field element. If the value is greater than or equal to the field modulus, modular reduction is silently performed.

source§

impl From<u8> for BaseElement

source§

fn from(value: u8) -> BaseElement

Converts an 8-bit value into a field element.

source§

impl Mul<BaseElement> for BaseElement

§

type Output = BaseElement

The resulting type after applying the * operator.
source§

fn mul(self, rhs: BaseElement) -> BaseElement

Performs the * operation. Read more
source§

impl MulAssign<BaseElement> for BaseElement

source§

fn mul_assign(&mut self, rhs: BaseElement)

Performs the *= operation. Read more
source§

impl Neg for BaseElement

§

type Output = BaseElement

The resulting type after applying the - operator.
source§

fn neg(self) -> BaseElement

Performs the unary - operation. Read more
source§

impl PartialEq<BaseElement> for BaseElement

source§

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

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Randomizable for BaseElement

source§

const VALUE_SIZE: usize = 8usize

Size of Self in bytes. Read more
source§

fn from_random_bytes(bytes: &[u8]) -> Option<BaseElement>

Returns Self if the set of bytes forms a valid value, otherwise returns None.
source§

impl Serializable for BaseElement

source§

fn write_into<W>(&self, target: &mut W)where W: ByteWriter,

Serializes self into bytes and writes these bytes into the target.
source§

fn to_bytes(&self) -> Vec<u8, Global>

Serializes self into a vector of bytes.
source§

fn write_batch_into<W>(source: &[Self], target: &mut W)where W: ByteWriter,

Serializes all elements of the source and writes these bytes into the target. Read more
source§

fn get_size_hint(&self) -> usize

Returns an estimate of how many bytes are needed to represent self. Read more
source§

impl StarkField for BaseElement

source§

const MODULUS: <BaseElement as FieldElement>::PositiveInteger = {transmute(0xffffffff00000001): <miden_crypto::Felt as miden_crypto::FieldElement>::PositiveInteger}

sage: MODULUS = 2^64 - 2^32 + 1
sage: GF(MODULUS).is_prime_field()
True
sage: GF(MODULUS).order()
18446744069414584321

source§

const GENERATOR: BaseElement = Self::new(7)

sage: GF(MODULUS).primitive_element()
7

source§

const TWO_ADICITY: u32 = 32u32

sage: is_odd((MODULUS - 1) / 2^32)
True

source§

const TWO_ADIC_ROOT_OF_UNITY: BaseElement = Self::new(G)

sage: k = (MODULUS - 1) / 2^32
sage: GF(MODULUS).primitive_element()^k
1753635133440165772

source§

const MODULUS_BITS: u32 = 64u32

The number of bits needed to represents Self::MODULUS.
source§

fn get_modulus_le_bytes() -> Vec<u8, Global>

Returns byte representation of the field modulus in little-endian byte order.
source§

fn as_int(&self) -> <BaseElement as FieldElement>::PositiveInteger

Returns a canonical integer representation of this field element.
source§

fn get_root_of_unity(n: u32) -> Self

Returns the root of unity of order 2^n. Read more
source§

impl Sub<BaseElement> for BaseElement

§

type Output = BaseElement

The resulting type after applying the - operator.
source§

fn sub(self, rhs: BaseElement) -> BaseElement

Performs the - operation. Read more
source§

impl SubAssign<BaseElement> for BaseElement

source§

fn sub_assign(&mut self, rhs: BaseElement)

Performs the -= operation. Read more
source§

impl<'a> TryFrom<&'a [u8]> for BaseElement

source§

fn try_from( bytes: &[u8] ) -> Result<BaseElement, <BaseElement as TryFrom<&'a [u8]>>::Error>

Converts a slice of bytes into a field element; returns error if the value encoded in bytes is not a valid field element. The bytes are assumed to encode the element in the canonical representation in little-endian byte order.

§

type Error = DeserializationError

The type returned in the event of a conversion error.
source§

impl Copy for BaseElement

source§

impl Eq for BaseElement

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

const: unstable · source§

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

Mutably borrows from an owned value. Read more
source§

impl<E> ExtensionOf<E> for Ewhere E: FieldElement,

source§

fn mul_base(self, other: E) -> E

source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · 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<T> for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for Twhere T: Clone,

§

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> ToString for Twhere T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.