pub trait TECurveConfig: CurveConfig {
    type MontCurveConfig: MontCurveConfig<BaseField = Self::BaseField>;
    const COEFF_A: Self::BaseField;
    const COEFF_D: Self::BaseField;
    const GENERATOR: Affine<Self>;
    // Provided methods
    fn mul_by_a(elem: Self::BaseField) -> Self::BaseField { ... }
    fn is_in_correct_subgroup_assuming_on_curve(item: &Affine<Self>) -> bool { ... }
    fn clear_cofactor(item: &Affine<Self>) -> Affine<Self> { ... }
    fn mul_projective(
        base: &Projective<Self>,
        scalar: &[u64],
    ) -> Projective<Self> { ... }
    fn mul_affine(base: &Affine<Self>, scalar: &[u64]) -> Projective<Self> { ... }
    fn msm(
        bases: &[Affine<Self>],
        scalars: &[Self::ScalarField],
    ) -> Result<Projective<Self>, usize> { ... }
    fn serialize_with_mode<W: Write>(
        item: &Affine<Self>,
        writer: W,
        compress: Compress,
    ) -> Result<(), SerializationError> { ... }
    fn deserialize_with_mode<R: Read>(
        reader: R,
        compress: Compress,
        validate: Validate,
    ) -> Result<Affine<Self>, SerializationError> { ... }
    fn serialized_size(compress: Compress) -> usize { ... }
}Expand description
Constants and convenience functions that collectively define the Twisted Edwards model
of the curve. In this model, the curve equation is
a * x² + y² = 1 + d * x² * y², for constants a and d.
Required Associated Constants§
Required Associated Types§
Sourcetype MontCurveConfig: MontCurveConfig<BaseField = Self::BaseField>
 
type MontCurveConfig: MontCurveConfig<BaseField = Self::BaseField>
Model parameters for the Montgomery curve that is birationally equivalent to this curve.
Provided Methods§
Sourcefn mul_by_a(elem: Self::BaseField) -> Self::BaseField
 
fn mul_by_a(elem: Self::BaseField) -> Self::BaseField
Helper method for computing elem * Self::COEFF_A.
The default implementation should be overridden only if
the product can be computed faster than standard field multiplication
(eg: via doubling if COEFF_A == 2, or if COEFF_A.is_zero()).
Sourcefn is_in_correct_subgroup_assuming_on_curve(item: &Affine<Self>) -> bool
 
fn is_in_correct_subgroup_assuming_on_curve(item: &Affine<Self>) -> bool
Checks that the current point is in the prime order subgroup given the point on the curve.
Sourcefn clear_cofactor(item: &Affine<Self>) -> Affine<Self>
 
fn clear_cofactor(item: &Affine<Self>) -> Affine<Self>
Performs cofactor clearing. The default method is simply to multiply by the cofactor. For some curve families though, it is sufficient to multiply by a smaller scalar.
Sourcefn mul_projective(base: &Projective<Self>, scalar: &[u64]) -> Projective<Self>
 
fn mul_projective(base: &Projective<Self>, scalar: &[u64]) -> Projective<Self>
Default implementation of group multiplication for projective coordinates
Sourcefn mul_affine(base: &Affine<Self>, scalar: &[u64]) -> Projective<Self>
 
fn mul_affine(base: &Affine<Self>, scalar: &[u64]) -> Projective<Self>
Default implementation of group multiplication for affine coordinates
Sourcefn msm(
    bases: &[Affine<Self>],
    scalars: &[Self::ScalarField],
) -> Result<Projective<Self>, usize>
 
fn msm( bases: &[Affine<Self>], scalars: &[Self::ScalarField], ) -> Result<Projective<Self>, usize>
Default implementation for multi scalar multiplication
Sourcefn serialize_with_mode<W: Write>(
    item: &Affine<Self>,
    writer: W,
    compress: Compress,
) -> Result<(), SerializationError>
 
fn serialize_with_mode<W: Write>( item: &Affine<Self>, writer: W, compress: Compress, ) -> Result<(), SerializationError>
If uncompressed, serializes both x and y coordinates. If compressed, serializes y coordinate with a bit to encode whether x is positive.
Sourcefn deserialize_with_mode<R: Read>(
    reader: R,
    compress: Compress,
    validate: Validate,
) -> Result<Affine<Self>, SerializationError>
 
fn deserialize_with_mode<R: Read>( reader: R, compress: Compress, validate: Validate, ) -> Result<Affine<Self>, SerializationError>
If validate is Yes, calls check() to make sure the element is valid.
Uses Affine::get_xs_from_y_unchecked() for the compressed version.
fn serialized_size(compress: Compress) -> usize
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.