pub trait ProjectiveCurve: CanonicalSerialize + CanonicalDeserialize + Copy + Clone + Debug + Display + Default + FromBytes + Send + Sync + 'static + Eq + Hash + Neg<Output = Self> + Uniform + Zero + Add<Output = Self, Output = Self> + Sub<Output = Self, Output = Self> + Mul<Self::ScalarField, Output = Self> + AddAssign + SubAssign + MulAssign<Self::ScalarField> + for<'a> Add<&'a Self> + for<'a> Sub<&'a Self> + for<'a> AddAssign<&'a Self> + for<'a> SubAssign<&'a Self> + PartialEq<Self::Affine> + Sized + ToBytes + Sum + From<Self::Affine> {
    type Affine: AffineCurve<Projective = Self, ScalarField = Self::ScalarField> + From<Self> + Into<Self>;
    type BaseField: Field;
    type ScalarField: PrimeField + SquareRootField + Into<<Self::ScalarField as PrimeField>::BigInteger>;

    // Required methods
    fn prime_subgroup_generator() -> Self;
    fn batch_normalization(v: &mut [Self]);
    fn is_normalized(&self) -> bool;
    fn add_assign_mixed(&mut self, other: &Self::Affine);
    fn double(&self) -> Self;
    fn double_in_place(&mut self);
    fn to_affine(&self) -> Self::Affine;

    // Provided methods
    fn batch_normalization_into_affine(v: Vec<Self>) -> Vec<Self::Affine> { ... }
    fn add_mixed(&self, other: &Self::Affine) -> Self { ... }
    fn sub_assign_mixed(&mut self, other: &Self::Affine) { ... }
}
Expand description

Projective representation of an elliptic curve point guaranteed to be in the prime order subgroup.

Required Associated Types§

type Affine: AffineCurve<Projective = Self, ScalarField = Self::ScalarField> + From<Self> + Into<Self>

type BaseField: Field

type ScalarField: PrimeField + SquareRootField + Into<<Self::ScalarField as PrimeField>::BigInteger>

Required Methods§

fn prime_subgroup_generator() -> Self

Returns a fixed generator of unknown exponent.

fn batch_normalization(v: &mut [Self])

Normalizes a slice of projective elements so that conversion to affine is cheap.

fn is_normalized(&self) -> bool

Checks if the point is already “normalized” so that cheap affine conversion is possible.

fn add_assign_mixed(&mut self, other: &Self::Affine)

Adds an affine element to this element.

fn double(&self) -> Self

Returns self + self.

fn double_in_place(&mut self)

Sets self := self + self.

fn to_affine(&self) -> Self::Affine

Converts this element into its affine representation.

Provided Methods§

fn batch_normalization_into_affine(v: Vec<Self>) -> Vec<Self::Affine>

Normalizes a slice of projective elements and outputs a vector containing the affine equivalents.

fn add_mixed(&self, other: &Self::Affine) -> Self

Adds an affine element to this element.

fn sub_assign_mixed(&mut self, other: &Self::Affine)

Adds an affine element to this element.

Object Safety§

This trait is not object safe.

Implementors§

§

impl<P> ProjectiveCurve for Projective<P>

§

type Affine = Affine<P>

§

type BaseField = <P as ModelParameters>::BaseField

§

type ScalarField = <P as ModelParameters>::ScalarField

§

impl<P> ProjectiveCurve for Projective<P>
where P: ShortWeierstrassParameters,

§

type Affine = Affine<P>

§

type BaseField = <P as ModelParameters>::BaseField

§

type ScalarField = <P as ModelParameters>::ScalarField