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> + 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 19 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 pair_from_x_coordinate(x: Self::BaseField) -> Option<(Self, 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>
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
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 prime_subgroup_generator() -> Self
fn prime_subgroup_generator() -> Self
Returns a fixed generator of unknown exponent.
fn from_x_coordinate(x: Self::BaseField, greatest: bool) -> Option<Self>
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 pair_from_x_coordinate(x: Self::BaseField) -> Option<(Self, Self)>
fn pair_from_x_coordinate(x: Self::BaseField) -> Option<(Self, Self)>
Attempts to construct both possible affine points given an x-coordinate. Points are not guaranteed to be in the prime order subgroup.
The affine points returned should be in lexicographically growing order.
Calling this should be equivalent (but likely more performant) to
(AffineCurve::from_x_coordinate(x, false), AffineCurve::from_x_coordinate(x, true))
.
fn from_y_coordinate(y: Self::BaseField, greatest: bool) -> Option<Self>
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
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
fn to_projective(&self) -> Self::Projective
Converts this element into its projective representation.
fn from_random_bytes(bytes: &[u8]) -> Option<Self>
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
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
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
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
fn to_x_coordinate(&self) -> Self::BaseField
Returns the x-coordinate of the point.
fn to_y_coordinate(&self) -> Self::BaseField
fn to_y_coordinate(&self) -> Self::BaseField
Returns the y-coordinate of the point.
fn is_on_curve(&self) -> bool
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
)
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)
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
fn mul_by_cofactor(&self) -> Self
Multiply this element by the cofactor.