Trait ExtensionField

Source
pub trait ExtensionField<F: Field>:
    Field
    + From<F>
    + TryInto<F>
    + Add<F, Output = Self>
    + Sub<F, Output = Self>
    + Mul<F, Output = Self>
    + AddAssign<F>
    + SubAssign<F>
    + MulAssign<F> {
    const LOG_DEGREE: usize;
    const DEGREE: usize = _;

    // Required methods
    fn basis(i: usize) -> Result<Self, Error>;
    fn from_bases_sparse(
        base_elems: &[F],
        log_stride: usize,
    ) -> Result<Self, Error>;
    fn iter_bases(&self) -> impl Iterator<Item = F>;
    fn into_iter_bases(self) -> impl Iterator<Item = F>;
    unsafe fn get_base_unchecked(&self, i: usize) -> F;

    // Provided methods
    fn from_bases(base_elems: &[F]) -> Result<Self, Error> { ... }
    fn get_base(&self, i: usize) -> F { ... }
}

Required Associated Constants§

Source

const LOG_DEGREE: usize

Base-2 logarithm of the extension degree.

Provided Associated Constants§

Source

const DEGREE: usize = _

Extension degree.

DEGREE is guaranteed to equal 2^LOG_DEGREE.

Required Methods§

Source

fn basis(i: usize) -> Result<Self, Error>

For 0 <= i < DEGREE, returns i-th basis field element.

Source

fn from_bases_sparse(base_elems: &[F], log_stride: usize) -> Result<Self, Error>

A specialized version of from_bases which assumes that only base field elements with indices dividing 2^log_stride can be nonzero.

base_elems should have length at most ceil(DEGREE / 2^LOG_STRIDE). Note that ExtensionField::from_bases is a special case of from_bases_sparse with log_stride = 0.

Source

fn iter_bases(&self) -> impl Iterator<Item = F>

Iterator over base field elements.

Source

fn into_iter_bases(self) -> impl Iterator<Item = F>

Convert into an iterator over base field elements.

Source

unsafe fn get_base_unchecked(&self, i: usize) -> F

Returns the i-th base field element without bounds checking.

§Safety

i must be less than DEGREE.

Provided Methods§

Source

fn from_bases(base_elems: &[F]) -> Result<Self, Error>

Create an extension field element from a slice of base field elements in order consistent with basis(i) return values. Potentially faster than taking an inner product with a vector of basis elements.

Source

fn get_base(&self, i: usize) -> F

Returns the i-th base field element.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl ExtensionField<AESTowerField8b> for AESTowerField16b

Source§

const LOG_DEGREE: usize = 1usize

Source§

impl ExtensionField<AESTowerField8b> for AESTowerField32b

Source§

const LOG_DEGREE: usize = 2usize

Source§

impl ExtensionField<AESTowerField8b> for AESTowerField64b

Source§

const LOG_DEGREE: usize = 3usize

Source§

impl ExtensionField<AESTowerField8b> for AESTowerField128b

Source§

const LOG_DEGREE: usize = 4usize

Source§

impl ExtensionField<AESTowerField16b> for AESTowerField32b

Source§

const LOG_DEGREE: usize = 1usize

Source§

impl ExtensionField<AESTowerField16b> for AESTowerField64b

Source§

const LOG_DEGREE: usize = 2usize

Source§

impl ExtensionField<AESTowerField16b> for AESTowerField128b

Source§

const LOG_DEGREE: usize = 3usize

Source§

impl ExtensionField<AESTowerField32b> for AESTowerField64b

Source§

const LOG_DEGREE: usize = 1usize

Source§

impl ExtensionField<AESTowerField32b> for AESTowerField128b

Source§

const LOG_DEGREE: usize = 2usize

Source§

impl ExtensionField<AESTowerField64b> for AESTowerField128b

Source§

const LOG_DEGREE: usize = 1usize

Source§

impl ExtensionField<BinaryField1b> for AESTowerField8b

Source§

const LOG_DEGREE: usize = 3usize

Source§

impl ExtensionField<BinaryField1b> for AESTowerField16b

Source§

const LOG_DEGREE: usize = 4usize

Source§

impl ExtensionField<BinaryField1b> for AESTowerField32b

Source§

const LOG_DEGREE: usize = 5usize

Source§

impl ExtensionField<BinaryField1b> for AESTowerField64b

Source§

const LOG_DEGREE: usize = 6usize

Source§

impl ExtensionField<BinaryField1b> for AESTowerField128b

Source§

const LOG_DEGREE: usize = 7usize

Source§

impl ExtensionField<BinaryField1b> for BinaryField2b

Source§

const LOG_DEGREE: usize = 1usize

Source§

impl ExtensionField<BinaryField1b> for BinaryField4b

Source§

const LOG_DEGREE: usize = 2usize

Source§

impl ExtensionField<BinaryField1b> for BinaryField8b

Source§

const LOG_DEGREE: usize = 3usize

Source§

impl ExtensionField<BinaryField1b> for BinaryField16b

Source§

const LOG_DEGREE: usize = 4usize

Source§

impl ExtensionField<BinaryField1b> for BinaryField32b

Source§

const LOG_DEGREE: usize = 5usize

Source§

impl ExtensionField<BinaryField1b> for BinaryField64b

Source§

const LOG_DEGREE: usize = 6usize

Source§

impl ExtensionField<BinaryField1b> for BinaryField128b

Source§

const LOG_DEGREE: usize = 7usize

Source§

impl ExtensionField<BinaryField1b> for BinaryField128bPolyval

Source§

const LOG_DEGREE: usize = 7usize

Source§

impl ExtensionField<BinaryField2b> for BinaryField4b

Source§

const LOG_DEGREE: usize = 1usize

Source§

impl ExtensionField<BinaryField2b> for BinaryField8b

Source§

const LOG_DEGREE: usize = 2usize

Source§

impl ExtensionField<BinaryField2b> for BinaryField16b

Source§

const LOG_DEGREE: usize = 3usize

Source§

impl ExtensionField<BinaryField2b> for BinaryField32b

Source§

const LOG_DEGREE: usize = 4usize

Source§

impl ExtensionField<BinaryField2b> for BinaryField64b

Source§

const LOG_DEGREE: usize = 5usize

Source§

impl ExtensionField<BinaryField2b> for BinaryField128b

Source§

const LOG_DEGREE: usize = 6usize

Source§

impl ExtensionField<BinaryField4b> for BinaryField8b

Source§

const LOG_DEGREE: usize = 1usize

Source§

impl ExtensionField<BinaryField4b> for BinaryField16b

Source§

const LOG_DEGREE: usize = 2usize

Source§

impl ExtensionField<BinaryField4b> for BinaryField32b

Source§

const LOG_DEGREE: usize = 3usize

Source§

impl ExtensionField<BinaryField4b> for BinaryField64b

Source§

const LOG_DEGREE: usize = 4usize

Source§

impl ExtensionField<BinaryField4b> for BinaryField128b

Source§

const LOG_DEGREE: usize = 5usize

Source§

impl ExtensionField<BinaryField8b> for BinaryField16b

Source§

const LOG_DEGREE: usize = 1usize

Source§

impl ExtensionField<BinaryField8b> for BinaryField32b

Source§

const LOG_DEGREE: usize = 2usize

Source§

impl ExtensionField<BinaryField8b> for BinaryField64b

Source§

const LOG_DEGREE: usize = 3usize

Source§

impl ExtensionField<BinaryField8b> for BinaryField128b

Source§

const LOG_DEGREE: usize = 4usize

Source§

impl ExtensionField<BinaryField16b> for BinaryField32b

Source§

const LOG_DEGREE: usize = 1usize

Source§

impl ExtensionField<BinaryField16b> for BinaryField64b

Source§

const LOG_DEGREE: usize = 2usize

Source§

impl ExtensionField<BinaryField16b> for BinaryField128b

Source§

const LOG_DEGREE: usize = 3usize

Source§

impl ExtensionField<BinaryField32b> for BinaryField64b

Source§

const LOG_DEGREE: usize = 1usize

Source§

impl ExtensionField<BinaryField32b> for BinaryField128b

Source§

const LOG_DEGREE: usize = 2usize

Source§

impl ExtensionField<BinaryField64b> for BinaryField128b

Source§

const LOG_DEGREE: usize = 1usize

Source§

impl<F: Field> ExtensionField<F> for F

Source§

const LOG_DEGREE: usize = 0usize