pub trait AffineCurve:
Sized
+ 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>
+ 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§
Sourcefn 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.
Sourcefn 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.
Sourcefn prime_subgroup_generator() -> Self
fn prime_subgroup_generator() -> Self
Returns a fixed generator of unknown exponent.
Sourcefn 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.
Sourcefn 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))
.
Sourcefn 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.
Sourcefn 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.
Sourcefn to_projective(&self) -> Self::Projective
fn to_projective(&self) -> Self::Projective
Converts this element into its projective representation.
Sourcefn 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.
Sourcefn 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.
Sourcefn 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
.
Sourcefn 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.
Sourcefn to_x_coordinate(&self) -> Self::BaseField
fn to_x_coordinate(&self) -> Self::BaseField
Returns the x-coordinate of the point.
Sourcefn to_y_coordinate(&self) -> Self::BaseField
fn to_y_coordinate(&self) -> Self::BaseField
Returns the y-coordinate of the point.
Sourcefn is_on_curve(&self) -> bool
fn is_on_curve(&self) -> bool
Checks that the current point is on the elliptic curve.
Sourcefn 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.
Sourcefn 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§
Sourcefn mul_by_cofactor(&self) -> Self
fn mul_by_cofactor(&self) -> Self
Multiply this element by the cofactor.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.