pub trait ProjectiveCurve:
Sized
+ CanonicalSerialize
+ CanonicalDeserialize
+ Copy
+ Clone
+ Debug
+ Display
+ Default
+ FromBytes
+ Send
+ Sync
+ 'static
+ Eq
+ Hash
+ Neg<Output = Self>
+ Uniform
+ Zero
+ Add<Output = Self, Output = Self>
+ Sub<Output = Self, Output = Self>
+ Mul<Self::ScalarField, Output = Self>
+ AddAssign
+ SubAssign
+ MulAssign<Self::ScalarField>
+ for<'a> Add<&'a Self>
+ for<'a> Sub<&'a Self>
+ for<'a> AddAssign<&'a Self>
+ for<'a> SubAssign<&'a Self>
+ PartialEq<Self::Affine>
+ ToBytes
+ Sum
+ From<Self::Affine> {
type Affine: AffineCurve<Projective = Self, ScalarField = Self::ScalarField> + From<Self> + Into<Self>;
type BaseField: Field;
type ScalarField: PrimeField + SquareRootField + Into<<Self::ScalarField as PrimeField>::BigInteger>;
// Required methods
fn prime_subgroup_generator() -> Self;
fn batch_normalization(v: &mut [Self]);
fn is_normalized(&self) -> bool;
fn add_assign_mixed(&mut self, other: &Self::Affine);
fn double(&self) -> Self;
fn double_in_place(&mut self);
fn to_affine(&self) -> Self::Affine;
// Provided methods
fn batch_normalization_into_affine(v: Vec<Self>) -> Vec<Self::Affine> { ... }
fn add_mixed(&self, other: &Self::Affine) -> Self { ... }
fn sub_assign_mixed(&mut self, other: &Self::Affine) { ... }
}
Expand description
Projective representation of an elliptic curve point guaranteed to be in the prime order subgroup.
Required Associated Types§
type Affine: AffineCurve<Projective = Self, ScalarField = Self::ScalarField> + From<Self> + Into<Self>
type BaseField: Field
type ScalarField: PrimeField + SquareRootField + Into<<Self::ScalarField as PrimeField>::BigInteger>
Required Methods§
Sourcefn prime_subgroup_generator() -> Self
fn prime_subgroup_generator() -> Self
Returns a fixed generator of unknown exponent.
Sourcefn batch_normalization(v: &mut [Self])
fn batch_normalization(v: &mut [Self])
Normalizes a slice of projective elements so that conversion to affine is cheap.
Sourcefn is_normalized(&self) -> bool
fn is_normalized(&self) -> bool
Checks if the point is already “normalized” so that cheap affine conversion is possible.
Sourcefn add_assign_mixed(&mut self, other: &Self::Affine)
fn add_assign_mixed(&mut self, other: &Self::Affine)
Adds an affine element to this element.
Sourcefn double_in_place(&mut self)
fn double_in_place(&mut self)
Sets self := self + self
.
Provided Methods§
Sourcefn batch_normalization_into_affine(v: Vec<Self>) -> Vec<Self::Affine>
fn batch_normalization_into_affine(v: Vec<Self>) -> Vec<Self::Affine>
Normalizes a slice of projective elements and outputs a vector containing the affine equivalents.
Sourcefn sub_assign_mixed(&mut self, other: &Self::Affine)
fn sub_assign_mixed(&mut self, other: &Self::Affine)
Adds an affine element to this element.
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.