[][src]Trait pairing_plus::CurveProjective

pub trait CurveProjective: PartialEq + Eq + Sized + Copy + Clone + Send + Sync + Debug + Display + 'static {
    type Engine: Engine<Fr = Self::Scalar>;
    type Scalar: PrimeField + SqrtField;
    type Base: SqrtField;
    type Affine: CurveAffine<Projective = Self, Scalar = Self::Scalar>;
    fn random<R: RngCore>(rng: &mut R) -> Self;
fn zero() -> Self;
fn one() -> Self;
fn is_zero(&self) -> bool;
fn batch_normalization(v: &mut [Self]);
fn is_normalized(&self) -> bool;
fn double(&mut self);
fn add_assign(&mut self, other: &Self);
fn add_assign_mixed(&mut self, other: &Self::Affine);
fn negate(&mut self);
fn mul_assign<S: Into<<Self::Scalar as PrimeField>::Repr>>(
        &mut self,
        other: S
    );
fn into_affine(&self) -> Self::Affine;
fn recommended_wnaf_for_scalar(
        scalar: <Self::Scalar as PrimeField>::Repr
    ) -> usize;
fn recommended_wnaf_for_num_scalars(num_scalars: usize) -> usize;
fn as_tuple(&self) -> (&Self::Base, &Self::Base, &Self::Base);
unsafe fn as_tuple_mut(
        &mut self
    ) -> (&mut Self::Base, &mut Self::Base, &mut Self::Base); fn sub_assign(&mut self, other: &Self) { ... }
fn sub_assign_mixed(&mut self, other: &Self::Affine) { ... } }

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

Associated Types

type Engine: Engine<Fr = Self::Scalar>

type Scalar: PrimeField + SqrtField

type Base: SqrtField

type Affine: CurveAffine<Projective = Self, Scalar = Self::Scalar>

Loading content...

Required methods

fn random<R: RngCore>(rng: &mut R) -> Self

Generate a random curve point.

fn zero() -> Self

Returns the additive identity.

fn one() -> Self

Returns a fixed generator of unknown exponent.

fn is_zero(&self) -> bool

Determines if this point is the point at infinity.

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 double(&mut self)

Doubles this element.

fn add_assign(&mut self, other: &Self)

Adds another element to this element.

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

Adds an affine element to this element.

fn negate(&mut self)

Negates this element.

fn mul_assign<S: Into<<Self::Scalar as PrimeField>::Repr>>(&mut self, other: S)

Performs scalar multiplication of this element.

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

Converts this element into its affine representation.

fn recommended_wnaf_for_scalar(
    scalar: <Self::Scalar as PrimeField>::Repr
) -> usize

Recommends a wNAF window table size given a scalar. Always returns a number between 2 and 22, inclusive.

fn recommended_wnaf_for_num_scalars(num_scalars: usize) -> usize

Recommends a wNAF window size given the number of scalars you intend to multiply a base by. Always returns a number between 2 and 22, inclusive.

fn as_tuple(&self) -> (&Self::Base, &Self::Base, &Self::Base)

Borrow references to the X, Y, and Z coordinates of this point.

unsafe fn as_tuple_mut(
    &mut self
) -> (&mut Self::Base, &mut Self::Base, &mut Self::Base)

Borrow mutable references to the X, Y, and Z coordinates of this point. Unsafe, because incorrectly modifying the coordinates violates the guarantee that the point must be on the curve and in the correct subgroup.

Loading content...

Provided methods

fn sub_assign(&mut self, other: &Self)

Subtracts another element from this element.

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

Subtracts an affine element from this element

Loading content...

Implementors

impl CurveProjective for G1[src]

type Engine = Bls12

type Scalar = Fr

type Base = Fq

type Affine = G1Affine

impl CurveProjective for G2[src]

type Engine = Bls12

type Scalar = Fr

type Base = Fq2

type Affine = G2Affine

Loading content...