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 Constants§
Sourceconst DEGREE_OVER_BASE_PRIME_FIELD: usize
const DEGREE_OVER_BASE_PRIME_FIELD: usize
The degree of the extension over the base prime field.
Sourceconst NONRESIDUE: Self::BaseField
const NONRESIDUE: Self::BaseField
The quadratic non-residue used to construct the extension.
Sourceconst FROBENIUS_COEFF_C1: &'static [Self::FrobCoeff]
const FROBENIUS_COEFF_C1: &'static [Self::FrobCoeff]
Coefficients for the Frobenius automorphism.
Required Associated Types§
Sourcetype BasePrimeField: PrimeField
type BasePrimeField: PrimeField
The prime field that this quadratic extension is eventually an extension of.
Sourcetype BaseField: Field<BasePrimeField = Self::BasePrimeField>
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
.
Required Methods§
Sourcefn mul_base_field_by_frob_coeff(fe: &mut Self::BaseField, power: usize)
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§
Sourcefn mul_base_field_by_nonresidue_in_place(
fe: &mut Self::BaseField,
) -> &mut Self::BaseField
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.
Sourcefn mul_base_field_by_nonresidue_and_add(
y: &mut Self::BaseField,
x: &Self::BaseField,
)
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.
Sourcefn mul_base_field_by_nonresidue_plus_one_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, )
A specializable method for computing x + mul_base_field_by_nonresidue(y) + y This allows for optimizations when the non-residue is not -1.
Sourcefn sub_and_mul_base_field_by_nonresidue(
y: &mut Self::BaseField,
x: &Self::BaseField,
)
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.
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.