pub trait AffineCurve: CanonicalSerialize + CanonicalDeserialize + Copy + Clone + Debug + Display + Default + FromBytes + Send + Sync + 'static + Eq + Hash + Neg<Output = Self> + Uniform + PartialEq<Self::Projective> + Mul<Self::ScalarField, Output = Self::Projective> + Sized + Serialize + DeserializeOwned + ToBytes + From<Self::Projective> + ToMinimalBits + Zero {
    type Projective: ProjectiveCurve<Affine = Self, ScalarField = Self::ScalarField> + From<Self> + Into<Self>;
    type BaseField: Field + SquareRootField;
    type ScalarField: PrimeField + SquareRootField + Into<<Self::ScalarField as PrimeField>::BigInteger>;
    type Coordinates;

Show 18 methods // Required methods fn from_coordinates(coordinates: Self::Coordinates) -> Option<Self>; fn from_coordinates_unchecked(coordinates: Self::Coordinates) -> Self; fn cofactor() -> &'static [u64]; fn prime_subgroup_generator() -> Self; fn from_x_coordinate(x: Self::BaseField, greatest: bool) -> Option<Self>; fn from_y_coordinate(y: Self::BaseField, greatest: bool) -> Option<Self>; fn mul_by_cofactor_to_projective(&self) -> Self::Projective; fn to_projective(&self) -> Self::Projective; fn from_random_bytes(bytes: &[u8]) -> Option<Self>; fn mul_bits(&self, bits: impl Iterator<Item = bool>) -> Self::Projective; fn mul_by_cofactor_inv(&self) -> Self; fn is_in_correct_subgroup_assuming_on_curve(&self) -> bool; fn to_x_coordinate(&self) -> Self::BaseField; fn to_y_coordinate(&self) -> Self::BaseField; fn is_on_curve(&self) -> bool; fn batch_add_loop_1( a: &mut Self, b: &mut Self, half: &Self::BaseField, inversion_tmp: &mut Self::BaseField ); fn batch_add_loop_2( a: &mut Self, b: Self, inversion_tmp: &mut Self::BaseField ); // Provided method fn mul_by_cofactor(&self) -> Self { ... }
}
Expand description

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

Required Associated Types§

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

type BaseField: Field + SquareRootField

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

type Coordinates

Required Methods§

fn from_coordinates(coordinates: Self::Coordinates) -> Option<Self>

Initializes a new affine group element from the given coordinates.

fn from_coordinates_unchecked(coordinates: Self::Coordinates) -> Self

Initializes a new affine group element from the given coordinates. Note: The resulting point is not enforced to be on the curve or in the correct subgroup.

fn cofactor() -> &'static [u64]

Returns the cofactor of the curve.

fn prime_subgroup_generator() -> Self

Returns a fixed generator of unknown exponent.

fn from_x_coordinate(x: Self::BaseField, greatest: bool) -> Option<Self>

Attempts to construct an affine point given an x-coordinate. The point is not guaranteed to be in the prime order subgroup.

If and only if greatest is set will the lexicographically largest y-coordinate be selected.

fn from_y_coordinate(y: Self::BaseField, greatest: bool) -> Option<Self>

Attempts to construct an affine point given a y-coordinate. The point is not guaranteed to be in the prime order subgroup.

If and only if greatest is set will the lexicographically largest y-coordinate be selected.

fn mul_by_cofactor_to_projective(&self) -> Self::Projective

Multiply this element by the cofactor and output the resulting projective element.

fn to_projective(&self) -> Self::Projective

Converts this element into its projective representation.

fn from_random_bytes(bytes: &[u8]) -> Option<Self>

Returns a group element if the set of bytes forms a valid group element, otherwise returns None. This function is primarily intended for sampling random group elements from a hash-function or RNG output.

fn mul_bits(&self, bits: impl Iterator<Item = bool>) -> Self::Projective

Multiply this element by a big-endian boolean representation of an integer.

fn mul_by_cofactor_inv(&self) -> Self

Multiply this element by the inverse of the cofactor modulo the size of Self::ScalarField.

fn is_in_correct_subgroup_assuming_on_curve(&self) -> bool

Checks that the point is in the prime order subgroup given the point on the curve.

fn to_x_coordinate(&self) -> Self::BaseField

Returns the x-coordinate of the point.

fn to_y_coordinate(&self) -> Self::BaseField

Returns the y-coordinate of the point.

fn is_on_curve(&self) -> bool

Checks that the current point is on the elliptic curve.

fn batch_add_loop_1( a: &mut Self, b: &mut Self, half: &Self::BaseField, inversion_tmp: &mut Self::BaseField )

Performs the first half of batch addition in-place.

fn batch_add_loop_2(a: &mut Self, b: Self, inversion_tmp: &mut Self::BaseField)

Performs the second half of batch addition in-place.

Provided Methods§

fn mul_by_cofactor(&self) -> Self

Multiply this element by the cofactor.

Implementors§

§

impl<P> AffineCurve for Affine<P>where P: TwistedEdwardsParameters,

§

type BaseField = <P as ModelParameters>::BaseField

§

type Coordinates = (<Affine<P> as AffineCurve>::BaseField, <Affine<P> as AffineCurve>::BaseField)

§

type Projective = Projective<P>

§

type ScalarField = <P as ModelParameters>::ScalarField

§

impl<P> AffineCurve for Affine<P>where P: ShortWeierstrassParameters,

§

type BaseField = <P as ModelParameters>::BaseField

§

type Coordinates = (<Affine<P> as AffineCurve>::BaseField, <Affine<P> as AffineCurve>::BaseField, bool)

§

type Projective = Projective<P>

§

type ScalarField = <P as ModelParameters>::ScalarField