pub trait StarkField: FieldElement<BaseField = Self> {
const MODULUS: <Self as FieldElement>::PositiveInteger;
const MODULUS_BITS: u32;
const GENERATOR: Self;
const TWO_ADICITY: u32;
const TWO_ADIC_ROOT_OF_UNITY: Self;
// Required methods
fn get_modulus_le_bytes() -> Vec<u8> ⓘ;
fn as_int(&self) -> Self::PositiveInteger;
// Provided methods
fn get_root_of_unity(n: u32) -> Self { ... }
fn from_bytes_with_padding(bytes: &[u8]) -> Self { ... }
}
Expand description
Defines an element in a STARK-friendly finite field.
A STARK-friendly field is defined as a prime field with high two-addicity. That is, the
the modulus of the field should be a prime number of the form k
* 2^n
+ 1 (a Proth prime),
where n
is relatively large (e.g., greater than 32).
Required Associated Constants§
sourceconst MODULUS: <Self as FieldElement>::PositiveInteger
const MODULUS: <Self as FieldElement>::PositiveInteger
Prime modulus of the field. Must be of the form k
* 2^n
+ 1 (a Proth prime).
This ensures that the field has high 2-adicity.
sourceconst MODULUS_BITS: u32
const MODULUS_BITS: u32
The number of bits needed to represents Self::MODULUS
.
sourceconst TWO_ADICITY: u32
const TWO_ADICITY: u32
Let Self::MODULUS = k
* 2^n
+ 1; then, TWO_ADICITY is n
.
sourceconst TWO_ADIC_ROOT_OF_UNITY: Self
const TWO_ADIC_ROOT_OF_UNITY: Self
Let Self::MODULUS = k
* 2^n
+ 1; then, TWO_ADIC_ROOT_OF_UNITY is 2^n
root of unity
computed as Self::GENERATOR^k
.
Required Methods§
sourcefn get_modulus_le_bytes() -> Vec<u8> ⓘ
fn get_modulus_le_bytes() -> Vec<u8> ⓘ
Returns byte representation of the field modulus in little-endian byte order.
sourcefn as_int(&self) -> Self::PositiveInteger
fn as_int(&self) -> Self::PositiveInteger
Returns a canonical integer representation of this field element.
Provided Methods§
sourcefn get_root_of_unity(n: u32) -> Self
fn get_root_of_unity(n: u32) -> Self
Returns the root of unity of order 2^n
.
§Panics
Panics if the root of unity for the specified order does not exist in this field.
sourcefn from_bytes_with_padding(bytes: &[u8]) -> Self
fn from_bytes_with_padding(bytes: &[u8]) -> Self
Converts a slice of bytes into a field element. Pads the slice if it is smaller than the number of bytes needed to represent an element.
§Panics
Panics if
- the length of
bytes
is greater than the number of bytes needed to encode an element. - the value of the bytes is not a valid field element after padding