Trait pasta_curves::arithmetic::CurveExt[][src]

pub trait CurveExt: PrimeCurve<Affine = Self::AffineExt> + Group<Scalar = Self::ScalarExt> + Default + PartialEq + Eq + ConditionallySelectable + ConstantTimeEq + From<<Self as PrimeCurve>::Affine> + Group<Scalar = <Self as Group>::Scalar> {
    type ScalarExt: FieldExt;
    type Base: FieldExt;
    type AffineExt: CurveAffine<CurveExt = Self, ScalarExt = <Self as CurveExt>::ScalarExt> + Mul<Self::ScalarExt, Output = Self> + for<'r> Mul<Self::ScalarExt, Output = Self>;

    const CURVE_ID: &'static str;

    fn endo(&self) -> Self;
fn jacobian_coordinates(&self) -> (Self::Base, Self::Base, Self::Base);
fn hash_to_curve<'a>(
        domain_prefix: &'a str
    ) -> Box<dyn Fn(&[u8]) -> Self + 'a>;
fn is_on_curve(&self) -> Choice;
fn a() -> Self::Base;
fn b() -> Self::Base;
fn new_jacobian(
        x: Self::Base,
        y: Self::Base,
        z: Self::Base
    ) -> CtOption<Self>; }
Expand description

This trait is a common interface for dealing with elements of an elliptic curve group in a “projective” form, where that arithmetic is usually more efficient.

Associated Types

The scalar field of this elliptic curve.

The base field over which this elliptic curve is constructed.

The affine version of the curve

Associated Constants

CURVE_ID used for hash-to-curve.

Required methods

Apply the curve endomorphism by multiplying the x-coordinate by an element of multiplicative order 3.

Return the Jacobian coordinates of this point.

Requests a hasher that accepts messages and returns near-uniformly distributed elements in the group, given domain prefix domain_prefix.

This method is suitable for use as a random oracle.

Example

use pasta_curves::arithmetic::CurveExt;
fn pedersen_commitment<C: CurveExt>(
    x: C::ScalarExt,
    r: C::ScalarExt,
) -> C::Affine {
    let hasher = C::hash_to_curve("z.cash:example_pedersen_commitment");
    let g = hasher(b"g");
    let h = hasher(b"h");
    (g * x + &(h * r)).to_affine()
}

Returns whether or not this element is on the curve; should always be true unless an “unchecked” API was used.

Returns the curve constant a.

Returns the curve constant b.

Obtains a point given Jacobian coordinates $X : Y : Z$, failing if the coordinates are not on the curve.

Implementors