Trait miden_core::StarkField
source · 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 method
fn get_root_of_unity(n: u32) -> 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.