pub trait QuadExtConfig: 'static + Send + Sync + Sized {
    type BasePrimeField: PrimeField;
    type BaseField: Field<BasePrimeField = Self::BasePrimeField>;
    type FrobCoeff: Field;

    const DEGREE_OVER_BASE_PRIME_FIELD: usize;
    const NONRESIDUE: Self::BaseField;
    const FROBENIUS_COEFF_C1: &'static [Self::FrobCoeff];

    // Required method
    fn mul_base_field_by_frob_coeff(fe: &mut Self::BaseField, power: usize);

    // Provided methods
    fn mul_base_field_by_nonresidue_in_place(
        fe: &mut Self::BaseField
    ) -> &mut Self::BaseField { ... }
    fn mul_base_field_by_nonresidue_and_add(
        y: &mut Self::BaseField,
        x: &Self::BaseField
    ) { ... }
    fn mul_base_field_by_nonresidue_plus_one_and_add(
        y: &mut Self::BaseField,
        x: &Self::BaseField
    ) { ... }
    fn sub_and_mul_base_field_by_nonresidue(
        y: &mut Self::BaseField,
        x: &Self::BaseField
    ) { ... }
}
Expand description

Defines a Quadratic extension field from a quadratic non-residue.

Required Associated Types§

source

type BasePrimeField: PrimeField

The prime field that this quadratic extension is eventually an extension of.

source

type BaseField: Field<BasePrimeField = Self::BasePrimeField>

The base field that this field is a quadratic extension of.

Note: while for simple instances of quadratic extensions such as Fp2 we might see BaseField == BasePrimeField, it won’t always hold true. E.g. for an extension tower: BasePrimeField == Fp, but BaseField == Fp3.

source

type FrobCoeff: Field

The type of the coefficients for an efficient implemntation of the Frobenius endomorphism.

Required Associated Constants§

source

const DEGREE_OVER_BASE_PRIME_FIELD: usize

The degree of the extension over the base prime field.

source

const NONRESIDUE: Self::BaseField

The quadratic non-residue used to construct the extension.

source

const FROBENIUS_COEFF_C1: &'static [Self::FrobCoeff]

Coefficients for the Frobenius automorphism.

Required Methods§

source

fn mul_base_field_by_frob_coeff(fe: &mut Self::BaseField, power: usize)

A specializable method for multiplying an element of the base field by the appropriate Frobenius coefficient.

Provided Methods§

source

fn mul_base_field_by_nonresidue_in_place( fe: &mut Self::BaseField ) -> &mut Self::BaseField

A specializable method for multiplying an element of the base field by the quadratic non-residue. This is used in Karatsuba multiplication and in complex squaring.

source

fn mul_base_field_by_nonresidue_and_add( y: &mut Self::BaseField, x: &Self::BaseField )

A specializable method for setting y = x + NONRESIDUE * y. This allows for optimizations when the non-residue is canonically negative in the field.

source

fn mul_base_field_by_nonresidue_plus_one_and_add( y: &mut Self::BaseField, x: &Self::BaseField )

A specializable method for computing x + mul_base_field_by_nonresidue(y) + y This allows for optimizations when the non-residue is not -1.

source

fn sub_and_mul_base_field_by_nonresidue( y: &mut Self::BaseField, x: &Self::BaseField )

A specializable method for computing x - mul_base_field_by_nonresidue(y) This allows for optimizations when the non-residue is canonically negative in the field.

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<P: Fp2Config> QuadExtConfig for Fp2ConfigWrapper<P>

§

type BasePrimeField = <P as Fp2Config>::Fp

§

type BaseField = <P as Fp2Config>::Fp

§

type FrobCoeff = <P as Fp2Config>::Fp

source§

const DEGREE_OVER_BASE_PRIME_FIELD: usize = 2usize

source§

const NONRESIDUE: Self::BaseField = P::NONRESIDUE

source§

const FROBENIUS_COEFF_C1: &'static [Self::FrobCoeff] = P::FROBENIUS_COEFF_FP2_C1

source§

impl<P: Fp4Config> QuadExtConfig for Fp4ConfigWrapper<P>

source§

impl<P: Fp6Config> QuadExtConfig for Fp6ConfigWrapper<P>

source§

impl<P: Fp12Config> QuadExtConfig for Fp12ConfigWrapper<P>