Trait snarkvm_curves::traits::group::AffineCurve
source · 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
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
);
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 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.