Trait winter_math::StarkField[][src]

pub trait StarkField: FieldElement<BaseField = Self> {
    type QuadExtension: FieldElement<BaseField = Self>;

    const MODULUS: Self::PositiveInteger;
    const MODULUS_BITS: u32;
    const GENERATOR: Self;
    const TWO_ADICITY: u32;
    const TWO_ADIC_ROOT_OF_UNITY: Self;

    fn get_modulus_le_bytes() -> Vec<u8>;
fn as_int(&self) -> Self::PositiveInteger; 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 larger (e.g., greater than 32).

Associated Types

Type describing quadratic extension of this StarkField.

Associated Constants

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.

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

A multiplicative generator of the field.

Let Self::MODULUS = k * 2^n + 1; then, TWO_ADICITY is n.

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

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

Returns a canonical integer representation of the field element.

Provided methods

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.

Implementors