pub struct Affine<P: SWCurveConfig> { /* private fields */ }Expand description
Affine coordinates for a point on an elliptic curve in short Weierstrass
form, over the base field P::BaseField.
Implementations§
Source§impl<P: SWCurveConfig> Affine<P>
impl<P: SWCurveConfig> Affine<P>
Sourcepub fn new(x: P::BaseField, y: P::BaseField) -> Self
pub fn new(x: P::BaseField, y: P::BaseField) -> Self
Constructs a group element from x and y coordinates. Performs checks to ensure that the point is on the curve and is in the right subgroup.
Sourcepub const fn new_unchecked(x: P::BaseField, y: P::BaseField) -> Self
pub const fn new_unchecked(x: P::BaseField, y: P::BaseField) -> Self
Constructs a group element from x and y coordinates.
§Warning
Does not perform any checks to ensure the point is in the curve or is in the right subgroup.
pub const fn identity() -> Self
Sourcepub fn get_point_from_x_unchecked(
x: P::BaseField,
greatest: bool,
) -> Option<Self>
pub fn get_point_from_x_unchecked( x: P::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.
Sourcepub fn get_ys_from_x_unchecked(
x: P::BaseField,
) -> Option<(P::BaseField, P::BaseField)>
pub fn get_ys_from_x_unchecked( x: P::BaseField, ) -> Option<(P::BaseField, P::BaseField)>
Returns the two possible y-coordinates corresponding to the given x-coordinate.
The corresponding points are not guaranteed to be in the prime-order subgroup,
but are guaranteed to be on the curve. That is, this method returns None
if the x-coordinate corresponds to a non-curve point.
The results are sorted by lexicographical order.
This means that, if P::BaseField: PrimeField, the results are sorted as integers.
Sourcepub fn is_on_curve(&self) -> bool
pub fn is_on_curve(&self) -> bool
Checks if self is a valid point on the curve.
pub fn to_flags(&self) -> SWFlags
pub fn double_to_bucket(&self) -> Bucket<P>
Source§impl<P: SWCurveConfig> Affine<P>
impl<P: SWCurveConfig> Affine<P>
Sourcepub fn is_in_correct_subgroup_assuming_on_curve(&self) -> bool
pub fn is_in_correct_subgroup_assuming_on_curve(&self) -> bool
Checks if self is in the subgroup having order that equaling that of
P::ScalarField.
Trait Implementations§
Source§impl<'a, P: SWCurveConfig> Add<&'a Projective<P>> for Affine<P>
impl<'a, P: SWCurveConfig> Add<&'a Projective<P>> for Affine<P>
Source§type Output = Projective<P>
type Output = Projective<P>
+ operator.Source§fn add(self, other: &'a Projective<P>) -> Projective<P>
fn add(self, other: &'a Projective<P>) -> Projective<P>
+ operation. Read moreSource§impl<P: SWCurveConfig> Add<Projective<P>> for Affine<P>
impl<P: SWCurveConfig> Add<Projective<P>> for Affine<P>
Source§type Output = Projective<P>
type Output = Projective<P>
+ operator.Source§fn add(self, other: Projective<P>) -> Projective<P>
fn add(self, other: Projective<P>) -> Projective<P>
+ operation. Read moreSource§impl<P: SWCurveConfig, T: Borrow<Self>> Add<T> for Affine<P>
impl<P: SWCurveConfig, T: Borrow<Self>> Add<T> for Affine<P>
Source§type Output = Projective<P>
type Output = Projective<P>
+ operator.Source§fn add(self, other: T) -> Projective<P>
fn add(self, other: T) -> Projective<P>
+ operation. Read moreSource§impl<P: SWCurveConfig> AffineRepr for Affine<P>
impl<P: SWCurveConfig> AffineRepr for Affine<P>
Source§fn mul_by_cofactor_to_group(&self) -> Self::Group
fn mul_by_cofactor_to_group(&self) -> Self::Group
Multiplies this element by the cofactor and output the resulting projective element.
Source§fn clear_cofactor(&self) -> Self
fn clear_cofactor(&self) -> Self
Performs cofactor clearing. The default method is simply to multiply by the cofactor. Some curves can implement a more efficient algorithm.
const GENERATOR: Self = P::GENERATOR
const ZERO: Self
type Config = P
Source§type BaseField = <P as CurveConfig>::BaseField
type BaseField = <P as CurveConfig>::BaseField
type ScalarField = <P as CurveConfig>::ScalarField
Source§type Group = Projective<P>
type Group = Projective<P>
Source§fn xy(&self) -> Option<(Self::BaseField, Self::BaseField)>
fn xy(&self) -> Option<(Self::BaseField, Self::BaseField)>
Source§fn from_random_bytes(bytes: &[u8]) -> Option<Self>
fn from_random_bytes(bytes: &[u8]) -> Option<Self>
Source§fn mul_bigint(&self, by: impl AsRef<[u64]>) -> Self::Group
fn mul_bigint(&self, by: impl AsRef<[u64]>) -> Self::Group
Source§fn into_group(self) -> Self::Group
fn into_group(self) -> Self::Group
Source§fn mul_by_cofactor(&self) -> Self
fn mul_by_cofactor(&self) -> Self
Source§fn mul_by_cofactor_inv(&self) -> Self
fn mul_by_cofactor_inv(&self) -> Self
Self::ScalarField.Source§impl<P: SWCurveConfig> CanonicalDeserialize for Affine<P>
impl<P: SWCurveConfig> CanonicalDeserialize for Affine<P>
Source§fn deserialize_with_mode<R: Read>(
reader: R,
compress: Compress,
validate: Validate,
) -> Result<Self, SerializationError>
fn deserialize_with_mode<R: Read>( reader: R, compress: Compress, validate: Validate, ) -> Result<Self, SerializationError>
Source§fn deserialize_compressed<R>(reader: R) -> Result<Self, SerializationError>where
R: Read,
fn deserialize_compressed<R>(reader: R) -> Result<Self, SerializationError>where
R: Read,
Self from reader using the compressed form if applicable.
Performs validation if applicable.Source§fn deserialize_compressed_unchecked<R>(
reader: R,
) -> Result<Self, SerializationError>where
R: Read,
fn deserialize_compressed_unchecked<R>(
reader: R,
) -> Result<Self, SerializationError>where
R: Read,
Self from reader using the compressed form if applicable, without validating the
deserialized value. Read moreSource§fn deserialize_uncompressed<R>(reader: R) -> Result<Self, SerializationError>where
R: Read,
fn deserialize_uncompressed<R>(reader: R) -> Result<Self, SerializationError>where
R: Read,
Self from reader using the uncompressed form. Performs validation if applicable.Source§fn deserialize_uncompressed_unchecked<R>(
reader: R,
) -> Result<Self, SerializationError>where
R: Read,
fn deserialize_uncompressed_unchecked<R>(
reader: R,
) -> Result<Self, SerializationError>where
R: Read,
Self from reader using the uncompressed form, without validating the deserialized
value. Read moreSource§impl<P: SWCurveConfig> CanonicalSerialize for Affine<P>
impl<P: SWCurveConfig> CanonicalSerialize for Affine<P>
Source§fn serialize_with_mode<W: Write>(
&self,
writer: W,
compress: Compress,
) -> Result<(), SerializationError>
fn serialize_with_mode<W: Write>( &self, writer: W, compress: Compress, ) -> Result<(), SerializationError>
Source§fn serialized_size(&self, compress: Compress) -> usize
fn serialized_size(&self, compress: Compress) -> usize
self with the given compression mode.Source§fn serialize_compressed<W>(&self, writer: W) -> Result<(), SerializationError>where
W: Write,
fn serialize_compressed<W>(&self, writer: W) -> Result<(), SerializationError>where
W: Write,
self into writer using the compressed form if applicable.Source§fn compressed_size(&self) -> usize
fn compressed_size(&self) -> usize
self.Source§fn serialize_uncompressed<W>(&self, writer: W) -> Result<(), SerializationError>where
W: Write,
fn serialize_uncompressed<W>(&self, writer: W) -> Result<(), SerializationError>where
W: Write,
self into writer using the uncompressed form.Source§fn uncompressed_size(&self) -> usize
fn uncompressed_size(&self) -> usize
self.Source§impl<P: SWCurveConfig> Clone for Affine<P>
impl<P: SWCurveConfig> Clone for Affine<P>
Source§impl<P: SWCurveConfig> Debug for Affine<P>
impl<P: SWCurveConfig> Debug for Affine<P>
Source§impl<P: SWCurveConfig> Default for Affine<P>
impl<P: SWCurveConfig> Default for Affine<P>
Source§impl<P: SWCurveConfig> Display for Affine<P>
impl<P: SWCurveConfig> Display for Affine<P>
Source§impl<P: SWCurveConfig> Distribution<Affine<P>> for Standard
impl<P: SWCurveConfig> Distribution<Affine<P>> for Standard
Source§impl<'a, P: Bls12Config> From<&'a Affine<<P as Bls12Config>::G1Config>> for G1Prepared<P>
impl<'a, P: Bls12Config> From<&'a Affine<<P as Bls12Config>::G1Config>> for G1Prepared<P>
Source§impl<'a, P: Bls12Config> From<&'a Affine<<P as Bls12Config>::G2Config>> for G2Prepared<P>
impl<'a, P: Bls12Config> From<&'a Affine<<P as Bls12Config>::G2Config>> for G2Prepared<P>
Source§impl<'a, P: MNT4Config> From<&'a Affine<<P as MNT4Config>::G1Config>> for G1Prepared<P>
impl<'a, P: MNT4Config> From<&'a Affine<<P as MNT4Config>::G1Config>> for G1Prepared<P>
Source§impl<'a, P: MNT4Config> From<&'a Affine<<P as MNT4Config>::G2Config>> for G2Prepared<P>
impl<'a, P: MNT4Config> From<&'a Affine<<P as MNT4Config>::G2Config>> for G2Prepared<P>
Source§impl<'a, P: MNT6Config> From<&'a Affine<<P as MNT6Config>::G1Config>> for G1Prepared<P>
impl<'a, P: MNT6Config> From<&'a Affine<<P as MNT6Config>::G1Config>> for G1Prepared<P>
Source§impl<'a, P: MNT6Config> From<&'a Affine<<P as MNT6Config>::G2Config>> for G2Prepared<P>
impl<'a, P: MNT6Config> From<&'a Affine<<P as MNT6Config>::G2Config>> for G2Prepared<P>
Source§impl<P: Bls12Config> From<Affine<<P as Bls12Config>::G1Config>> for G1Prepared<P>
impl<P: Bls12Config> From<Affine<<P as Bls12Config>::G1Config>> for G1Prepared<P>
Source§impl<P: Bls12Config> From<Affine<<P as Bls12Config>::G2Config>> for G2Prepared<P>
impl<P: Bls12Config> From<Affine<<P as Bls12Config>::G2Config>> for G2Prepared<P>
Source§impl<P: MNT4Config> From<Affine<<P as MNT4Config>::G1Config>> for G1Prepared<P>
impl<P: MNT4Config> From<Affine<<P as MNT4Config>::G1Config>> for G1Prepared<P>
Source§impl<P: MNT4Config> From<Affine<<P as MNT4Config>::G2Config>> for G2Prepared<P>
impl<P: MNT4Config> From<Affine<<P as MNT4Config>::G2Config>> for G2Prepared<P>
Source§impl<P: MNT6Config> From<Affine<<P as MNT6Config>::G1Config>> for G1Prepared<P>
impl<P: MNT6Config> From<Affine<<P as MNT6Config>::G1Config>> for G1Prepared<P>
Source§impl<P: MNT6Config> From<Affine<<P as MNT6Config>::G2Config>> for G2Prepared<P>
impl<P: MNT6Config> From<Affine<<P as MNT6Config>::G2Config>> for G2Prepared<P>
Source§impl<P: SWCurveConfig> From<Affine<P>> for Projective<P>
impl<P: SWCurveConfig> From<Affine<P>> for Projective<P>
Source§impl<P: SWCurveConfig> From<Projective<P>> for Affine<P>
impl<P: SWCurveConfig> From<Projective<P>> for Affine<P>
Source§fn from(p: Projective<P>) -> Self
fn from(p: Projective<P>) -> Self
Source§impl<P: SWCurveConfig> Hash for Affine<P>
impl<P: SWCurveConfig> Hash for Affine<P>
Source§impl<P: SWCurveConfig, T: Borrow<P::ScalarField>> Mul<T> for Affine<P>
impl<P: SWCurveConfig, T: Borrow<P::ScalarField>> Mul<T> for Affine<P>
Source§impl<P: SWCurveConfig> Neg for Affine<P>
impl<P: SWCurveConfig> Neg for Affine<P>
Source§impl<P: SWCurveConfig> PartialEq<Affine<P>> for Projective<P>
impl<P: SWCurveConfig> PartialEq<Affine<P>> for Projective<P>
Source§impl<P: SWCurveConfig> PartialEq<Projective<P>> for Affine<P>
impl<P: SWCurveConfig> PartialEq<Projective<P>> for Affine<P>
Source§fn eq(&self, other: &Projective<P>) -> bool
fn eq(&self, other: &Projective<P>) -> bool
self and other values to be equal, and is used by ==.Source§impl<P: SWCurveConfig> PartialEq for Affine<P>
impl<P: SWCurveConfig> PartialEq for Affine<P>
Source§impl<'a, P: SWCurveConfig> Sub<&'a Projective<P>> for Affine<P>
impl<'a, P: SWCurveConfig> Sub<&'a Projective<P>> for Affine<P>
Source§type Output = Projective<P>
type Output = Projective<P>
- operator.Source§fn sub(self, other: &'a Projective<P>) -> Projective<P>
fn sub(self, other: &'a Projective<P>) -> Projective<P>
- operation. Read moreSource§impl<P: SWCurveConfig> Sub<Projective<P>> for Affine<P>
impl<P: SWCurveConfig> Sub<Projective<P>> for Affine<P>
Source§type Output = Projective<P>
type Output = Projective<P>
- operator.Source§fn sub(self, other: Projective<P>) -> Projective<P>
fn sub(self, other: Projective<P>) -> Projective<P>
- operation. Read moreSource§impl<P: SWCurveConfig, T: Borrow<Self>> Sub<T> for Affine<P>
impl<P: SWCurveConfig, T: Borrow<Self>> Sub<T> for Affine<P>
Source§type Output = Projective<P>
type Output = Projective<P>
- operator.Source§fn sub(self, other: T) -> Projective<P>
fn sub(self, other: T) -> Projective<P>
- operation. Read moreSource§impl<M: SWCurveConfig, ConstraintF: Field> ToConstraintField<ConstraintF> for Affine<M>where
M::BaseField: ToConstraintField<ConstraintF>,
impl<M: SWCurveConfig, ConstraintF: Field> ToConstraintField<ConstraintF> for Affine<M>where
M::BaseField: ToConstraintField<ConstraintF>,
fn to_field_elements(&self) -> Option<Vec<ConstraintF>>
Source§impl<P: SWCurveConfig> Valid for Affine<P>
impl<P: SWCurveConfig> Valid for Affine<P>
Source§fn check(&self) -> Result<(), SerializationError>
fn check(&self) -> Result<(), SerializationError>
self is valid. If self is valid, returns Ok(()). Otherwise, returns
an error describing the failure.
This method is called by deserialize_with_mode if validate is Validate::Yes.Source§const TRIVIAL_CHECK: bool = false
const TRIVIAL_CHECK: bool = false
check method is trivial (i.e. always returns Ok(())). If this is true,
the batch_check method will skip all checks and return Ok(()).
This should be set to true for types where check is trivial, e.g.
integers, field elements, etc.
This is false by default.
This is primarily an optimization to skip unnecessary checks in batch_check.Source§fn batch_check<'a>(
batch: impl Iterator<Item = &'a Self> + Send,
) -> Result<(), SerializationError>where
Self: 'a,
fn batch_check<'a>(
batch: impl Iterator<Item = &'a Self> + Send,
) -> Result<(), SerializationError>where
Self: 'a,
batch are valid. If all items are valid, returns Ok(()).
Otherwise, returns an error describing the first failure.Source§impl<P: SWCurveConfig> Zeroize for Affine<P>
impl<P: SWCurveConfig> Zeroize for Affine<P>
impl<P: SWCurveConfig> Copy for Affine<P>
impl<P: SWCurveConfig> Eq for Affine<P>
Auto Trait Implementations§
impl<P> Freeze for Affine<P>
impl<P> RefUnwindSafe for Affine<P>
impl<P> Send for Affine<P>
impl<P> Sync for Affine<P>
impl<P> Unpin for Affine<P>
impl<P> UnsafeUnpin for Affine<P>
impl<P> UnwindSafe for Affine<P>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CanonicalSerializeHashExt for Twhere
T: CanonicalSerialize,
impl<T> CanonicalSerializeHashExt for Twhere
T: CanonicalSerialize,
fn hash<H>(&self) -> GenericArray<u8, <H as OutputSizeUser>::OutputSize>where
H: Digest,
fn hash_uncompressed<H>(
&self,
) -> GenericArray<u8, <H as OutputSizeUser>::OutputSize>where
H: Digest,
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more