pub struct Projective<P: SWCurveConfig> {
pub x: P::BaseField,
pub y: P::BaseField,
pub z: P::BaseField,
}Expand description
Jacobian coordinates for a point on an elliptic curve in short Weierstrass
form, over the base field P::BaseField. This struct implements arithmetic
via the Jacobian formulae.
Fields§
§x: P::BaseFieldX / Z^2 projection of the affine X
y: P::BaseFieldY / Z^3 projection of the affine Y
z: P::BaseFieldProjective multiplicative inverse. Will be 0 only at infinity.
Implementations§
Source§impl<P: SWCurveConfig> Projective<P>
impl<P: SWCurveConfig> Projective<P>
Sourcepub const fn new_unchecked(
x: P::BaseField,
y: P::BaseField,
z: P::BaseField,
) -> Self
pub const fn new_unchecked( x: P::BaseField, y: P::BaseField, z: P::BaseField, ) -> Self
Constructs a new group element without checking whether the coordinates specify a point in the subgroup.
Trait Implementations§
Source§impl<'a, 'b, P: SWCurveConfig> Add<&'a Projective<P>> for &'b Projective<P>
impl<'a, 'b, P: SWCurveConfig> Add<&'a Projective<P>> for &'b Projective<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<'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<'a, P: SWCurveConfig> Add<&'a Projective<P>> for Projective<P>
impl<'a, P: SWCurveConfig> Add<&'a Projective<P>> for Projective<P>
Source§impl<'a, 'b, P: SWCurveConfig> Add<&'a mut Projective<P>> for &'b Projective<P>
impl<'a, 'b, P: SWCurveConfig> Add<&'a mut Projective<P>> for &'b Projective<P>
Source§type Output = Projective<P>
type Output = Projective<P>
+ operator.Source§fn add(self, other: &'a mut Projective<P>) -> Projective<P>
fn add(self, other: &'a mut Projective<P>) -> Projective<P>
+ operation. Read moreSource§impl<'a, P: SWCurveConfig> Add<&'a mut Projective<P>> for Projective<P>
impl<'a, P: SWCurveConfig> Add<&'a mut Projective<P>> for Projective<P>
Source§impl<'b, P: SWCurveConfig> Add<Projective<P>> for &'b Projective<P>
impl<'b, P: SWCurveConfig> Add<Projective<P>> for &'b Projective<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> 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<Affine<P>>> Add<T> for Projective<P>
impl<P: SWCurveConfig, T: Borrow<Affine<P>>> Add<T> for Projective<P>
Source§impl<P: SWCurveConfig> Add for Projective<P>
impl<P: SWCurveConfig> Add for Projective<P>
Source§impl<'a, P: SWCurveConfig> AddAssign<&'a Bucket<P>> for Projective<P>
impl<'a, P: SWCurveConfig> AddAssign<&'a Bucket<P>> for Projective<P>
Source§fn add_assign(&mut self, other: &'a Bucket<P>)
fn add_assign(&mut self, other: &'a Bucket<P>)
+= operation. Read moreSource§impl<'a, P: SWCurveConfig> AddAssign<&'a Projective<P>> for Projective<P>
impl<'a, P: SWCurveConfig> AddAssign<&'a Projective<P>> for Projective<P>
Source§fn add_assign(&mut self, other: &'a Self)
fn add_assign(&mut self, other: &'a Self)
+= operation. Read moreSource§impl<'a, P: SWCurveConfig> AddAssign<&'a mut Projective<P>> for Projective<P>
impl<'a, P: SWCurveConfig> AddAssign<&'a mut Projective<P>> for Projective<P>
Source§fn add_assign(&mut self, other: &'a mut Self)
fn add_assign(&mut self, other: &'a mut Self)
+= operation. Read moreSource§impl<P: SWCurveConfig, T: Borrow<Affine<P>>> AddAssign<T> for Projective<P>
impl<P: SWCurveConfig, T: Borrow<Affine<P>>> AddAssign<T> for Projective<P>
Source§fn add_assign(&mut self, other: T)
fn add_assign(&mut self, other: T)
Source§impl<P: SWCurveConfig> AddAssign for Projective<P>
impl<P: SWCurveConfig> AddAssign for Projective<P>
Source§fn add_assign(&mut self, other: Self)
fn add_assign(&mut self, other: Self)
+= operation. Read moreSource§impl<P: SWCurveConfig> AdditiveGroup for Projective<P>
impl<P: SWCurveConfig> AdditiveGroup for Projective<P>
Source§fn double_in_place(&mut self) -> &mut Self
fn double_in_place(&mut self) -> &mut Self
Sets self = 2 * self. Note that Jacobian formulae are incomplete, and
so doubling cannot be computed as self + self. Instead, this
implementation uses the following specialized doubling formulae:
type Scalar = <P as CurveConfig>::ScalarField
Source§fn neg_in_place(&mut self) -> &mut Self
fn neg_in_place(&mut self) -> &mut Self
self in place.Source§impl<P: SWCurveConfig> CanonicalDeserialize for Projective<P>
impl<P: SWCurveConfig> CanonicalDeserialize for Projective<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 Projective<P>
impl<P: SWCurveConfig> CanonicalSerialize for Projective<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 Projective<P>
impl<P: SWCurveConfig> Clone for Projective<P>
Source§impl<P: SWCurveConfig> CurveGroup for Projective<P>
impl<P: SWCurveConfig> CurveGroup for Projective<P>
Source§fn normalize_batch(v: &[Self]) -> Vec<Self::Affine>
fn normalize_batch(v: &[Self]) -> Vec<Self::Affine>
Normalizes a slice of projective elements so that conversion to affine is cheap.
In more detail, this method converts a curve point in Jacobian coordinates (x, y, z) into an equivalent representation (x/z^2, y/z^3, 1).
For N = v.len(), this costs 1 inversion + 6N field multiplications + N
field squarings.
(Where batch inversion comprises 3N field multiplications + 1 inversion of these operations)
type Config = P
Source§type BaseField = <P as CurveConfig>::BaseField
type BaseField = <P as CurveConfig>::BaseField
Source§type FullGroup = Affine<P>
type FullGroup = Affine<P>
Source§fn into_affine(self) -> Self::Affine
fn into_affine(self) -> Self::Affine
self into the affine representation.Source§impl<P: SWCurveConfig> Debug for Projective<P>
impl<P: SWCurveConfig> Debug for Projective<P>
Source§impl<P: SWCurveConfig> Default for Projective<P>
impl<P: SWCurveConfig> Default for Projective<P>
Source§impl<P: SWCurveConfig> Display for Projective<P>
impl<P: SWCurveConfig> Display for Projective<P>
Source§impl<P: SWCurveConfig> Distribution<Projective<P>> for Standard
impl<P: SWCurveConfig> Distribution<Projective<P>> for Standard
Source§impl<'a, P: BW6Config> From<&'a Projective<<P as BW6Config>::G1Config>> for G1Prepared<P>
impl<'a, P: BW6Config> From<&'a Projective<<P as BW6Config>::G1Config>> for G1Prepared<P>
Source§fn from(q: &'a G1Projective<P>) -> Self
fn from(q: &'a G1Projective<P>) -> Self
Source§impl<'a, P: BW6Config> From<&'a Projective<<P as BW6Config>::G2Config>> for G2Prepared<P>
impl<'a, P: BW6Config> From<&'a Projective<<P as BW6Config>::G2Config>> for G2Prepared<P>
Source§fn from(q: &'a G2Projective<P>) -> Self
fn from(q: &'a G2Projective<P>) -> Self
Source§impl<'a, P: Bls12Config> From<&'a Projective<<P as Bls12Config>::G1Config>> for G1Prepared<P>
impl<'a, P: Bls12Config> From<&'a Projective<<P as Bls12Config>::G1Config>> for G1Prepared<P>
Source§fn from(q: &'a G1Projective<P>) -> Self
fn from(q: &'a G1Projective<P>) -> Self
Source§impl<'a, P: Bls12Config> From<&'a Projective<<P as Bls12Config>::G2Config>> for G2Prepared<P>
impl<'a, P: Bls12Config> From<&'a Projective<<P as Bls12Config>::G2Config>> for G2Prepared<P>
Source§fn from(q: &'a G2Projective<P>) -> Self
fn from(q: &'a G2Projective<P>) -> Self
Source§impl<'a, P: BnConfig> From<&'a Projective<<P as BnConfig>::G1Config>> for G1Prepared<P>
impl<'a, P: BnConfig> From<&'a Projective<<P as BnConfig>::G1Config>> for G1Prepared<P>
Source§fn from(q: &'a G1Projective<P>) -> Self
fn from(q: &'a G1Projective<P>) -> Self
Source§impl<'a, P: BnConfig> From<&'a Projective<<P as BnConfig>::G2Config>> for G2Prepared<P>
impl<'a, P: BnConfig> From<&'a Projective<<P as BnConfig>::G2Config>> for G2Prepared<P>
Source§fn from(q: &'a G2Projective<P>) -> Self
fn from(q: &'a G2Projective<P>) -> Self
Source§impl<'a, P: MNT4Config> From<&'a Projective<<P as MNT4Config>::G1Config>> for G1Prepared<P>
impl<'a, P: MNT4Config> From<&'a Projective<<P as MNT4Config>::G1Config>> for G1Prepared<P>
Source§fn from(g1: &'a G1Projective<P>) -> Self
fn from(g1: &'a G1Projective<P>) -> Self
Source§impl<'a, P: MNT4Config> From<&'a Projective<<P as MNT4Config>::G2Config>> for G2Prepared<P>
impl<'a, P: MNT4Config> From<&'a Projective<<P as MNT4Config>::G2Config>> for G2Prepared<P>
Source§fn from(g2: &'a G2Projective<P>) -> Self
fn from(g2: &'a G2Projective<P>) -> Self
Source§impl<'a, P: MNT6Config> From<&'a Projective<<P as MNT6Config>::G1Config>> for G1Prepared<P>
impl<'a, P: MNT6Config> From<&'a Projective<<P as MNT6Config>::G1Config>> for G1Prepared<P>
Source§fn from(g1: &'a G1Projective<P>) -> Self
fn from(g1: &'a G1Projective<P>) -> Self
Source§impl<'a, P: MNT6Config> From<&'a Projective<<P as MNT6Config>::G2Config>> for G2Prepared<P>
impl<'a, P: MNT6Config> From<&'a Projective<<P as MNT6Config>::G2Config>> for G2Prepared<P>
Source§fn from(g2: &'a G2Projective<P>) -> Self
fn from(g2: &'a G2Projective<P>) -> Self
Source§impl<P: SWCurveConfig> From<Affine<P>> for Projective<P>
impl<P: SWCurveConfig> From<Affine<P>> for Projective<P>
Source§impl<P: SWCurveConfig> From<Bucket<P>> for Projective<P>
impl<P: SWCurveConfig> From<Bucket<P>> for Projective<P>
Source§impl<P: BW6Config> From<Projective<<P as BW6Config>::G1Config>> for G1Prepared<P>
impl<P: BW6Config> From<Projective<<P as BW6Config>::G1Config>> for G1Prepared<P>
Source§fn from(q: G1Projective<P>) -> Self
fn from(q: G1Projective<P>) -> Self
Source§impl<P: BW6Config> From<Projective<<P as BW6Config>::G2Config>> for G2Prepared<P>
impl<P: BW6Config> From<Projective<<P as BW6Config>::G2Config>> for G2Prepared<P>
Source§fn from(q: G2Projective<P>) -> Self
fn from(q: G2Projective<P>) -> Self
Source§impl<P: Bls12Config> From<Projective<<P as Bls12Config>::G1Config>> for G1Prepared<P>
impl<P: Bls12Config> From<Projective<<P as Bls12Config>::G1Config>> for G1Prepared<P>
Source§fn from(q: G1Projective<P>) -> Self
fn from(q: G1Projective<P>) -> Self
Source§impl<P: Bls12Config> From<Projective<<P as Bls12Config>::G2Config>> for G2Prepared<P>
impl<P: Bls12Config> From<Projective<<P as Bls12Config>::G2Config>> for G2Prepared<P>
Source§fn from(q: G2Projective<P>) -> Self
fn from(q: G2Projective<P>) -> Self
Source§impl<P: BnConfig> From<Projective<<P as BnConfig>::G1Config>> for G1Prepared<P>
impl<P: BnConfig> From<Projective<<P as BnConfig>::G1Config>> for G1Prepared<P>
Source§fn from(q: G1Projective<P>) -> Self
fn from(q: G1Projective<P>) -> Self
Source§impl<P: BnConfig> From<Projective<<P as BnConfig>::G2Config>> for G2Prepared<P>
impl<P: BnConfig> From<Projective<<P as BnConfig>::G2Config>> for G2Prepared<P>
Source§fn from(q: G2Projective<P>) -> Self
fn from(q: G2Projective<P>) -> Self
Source§impl<P: MNT4Config> From<Projective<<P as MNT4Config>::G1Config>> for G1Prepared<P>
impl<P: MNT4Config> From<Projective<<P as MNT4Config>::G1Config>> for G1Prepared<P>
Source§fn from(g1: G1Projective<P>) -> Self
fn from(g1: G1Projective<P>) -> Self
Source§impl<P: MNT4Config> From<Projective<<P as MNT4Config>::G2Config>> for G2Prepared<P>
impl<P: MNT4Config> From<Projective<<P as MNT4Config>::G2Config>> for G2Prepared<P>
Source§fn from(g2: G2Projective<P>) -> Self
fn from(g2: G2Projective<P>) -> Self
Source§impl<P: MNT6Config> From<Projective<<P as MNT6Config>::G1Config>> for G1Prepared<P>
impl<P: MNT6Config> From<Projective<<P as MNT6Config>::G1Config>> for G1Prepared<P>
Source§fn from(g1: G1Projective<P>) -> Self
fn from(g1: G1Projective<P>) -> Self
Source§impl<P: MNT6Config> From<Projective<<P as MNT6Config>::G2Config>> for G2Prepared<P>
impl<P: MNT6Config> From<Projective<<P as MNT6Config>::G2Config>> for G2Prepared<P>
Source§fn from(g2: G2Projective<P>) -> Self
fn from(g2: G2Projective<P>) -> Self
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 Projective<P>
impl<P: SWCurveConfig> Hash for Projective<P>
Source§impl<P: SWUConfig> MapToCurve<Projective<P>> for SWUMap<P>
impl<P: SWUConfig> MapToCurve<Projective<P>> for SWUMap<P>
Source§fn check_parameters() -> Result<(), HashToCurveError>
fn check_parameters() -> Result<(), HashToCurveError>
Checks if P represents a valid map.
Source§fn map_to_curve(element: P::BaseField) -> Result<Affine<P>, HashToCurveError>
fn map_to_curve(element: P::BaseField) -> Result<Affine<P>, HashToCurveError>
Map an arbitrary base field element to a curve point. Based on https://github.com/zcash/pasta_curves/blob/main/src/hashtocurve.rs.
Source§impl<P: WBConfig> MapToCurve<Projective<P>> for WBMap<P>
impl<P: WBConfig> MapToCurve<Projective<P>> for WBMap<P>
Source§fn check_parameters() -> Result<(), HashToCurveError>
fn check_parameters() -> Result<(), HashToCurveError>
Checks if P represents a valid map.
Source§fn map_to_curve(
element: <Affine<P> as AffineRepr>::BaseField,
) -> Result<Affine<P>, HashToCurveError>
fn map_to_curve( element: <Affine<P> as AffineRepr>::BaseField, ) -> Result<Affine<P>, HashToCurveError>
Map random field point to a random curve point inspired from https://github.com/zcash/pasta_curves/blob/main/src/hashtocurve.rs
Source§impl<P: SWCurveConfig, T: Borrow<P::ScalarField>> Mul<T> for Projective<P>
impl<P: SWCurveConfig, T: Borrow<P::ScalarField>> Mul<T> for Projective<P>
Source§impl<P: SWCurveConfig, T: Borrow<P::ScalarField>> MulAssign<T> for Projective<P>
impl<P: SWCurveConfig, T: Borrow<P::ScalarField>> MulAssign<T> for Projective<P>
Source§fn mul_assign(&mut self, other: T)
fn mul_assign(&mut self, other: T)
*= operation. Read moreSource§impl<P: SWCurveConfig> Neg for Projective<P>
impl<P: SWCurveConfig> Neg for Projective<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 Projective<P>
impl<P: SWCurveConfig> PartialEq for Projective<P>
Source§impl<P: SWCurveConfig> PrimeGroup for Projective<P>
impl<P: SWCurveConfig> PrimeGroup for Projective<P>
Source§type ScalarField = <P as CurveConfig>::ScalarField
type ScalarField = <P as CurveConfig>::ScalarField
F_r, where r is the order of this group.Source§fn mul_bigint(&self, other: impl AsRef<[u64]>) -> Self
fn mul_bigint(&self, other: impl AsRef<[u64]>) -> Self
Source§fn mul_bits_be(&self, other: impl Iterator<Item = bool>) -> Self
fn mul_bits_be(&self, other: impl Iterator<Item = bool>) -> Self
other * self, where other is a big-endian
bit representation of some integer.Source§impl<P: SWCurveConfig> ScalarMul for Projective<P>
impl<P: SWCurveConfig> ScalarMul for Projective<P>
const NEGATION_IS_CHEAP: bool = true
type MulBase = Affine<P>
fn batch_convert_to_mul_base(bases: &[Self]) -> Vec<Self::MulBase>
Source§fn batch_mul(self, v: &[Self::ScalarField]) -> Vec<Self::MulBase>
fn batch_mul(self, v: &[Self::ScalarField]) -> Vec<Self::MulBase>
Source§fn batch_mul_with_preprocessing(
table: &BatchMulPreprocessing<Self>,
v: &[Self::ScalarField],
) -> Vec<Self::MulBase>
fn batch_mul_with_preprocessing( table: &BatchMulPreprocessing<Self>, v: &[Self::ScalarField], ) -> Vec<Self::MulBase>
Source§impl<'a, 'b, P: SWCurveConfig> Sub<&'a Projective<P>> for &'b Projective<P>
impl<'a, 'b, P: SWCurveConfig> Sub<&'a Projective<P>> for &'b Projective<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<'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<'a, P: SWCurveConfig> Sub<&'a Projective<P>> for Projective<P>
impl<'a, P: SWCurveConfig> Sub<&'a Projective<P>> for Projective<P>
Source§impl<'a, 'b, P: SWCurveConfig> Sub<&'a mut Projective<P>> for &'b Projective<P>
impl<'a, 'b, P: SWCurveConfig> Sub<&'a mut Projective<P>> for &'b Projective<P>
Source§type Output = Projective<P>
type Output = Projective<P>
- operator.Source§fn sub(self, other: &'a mut Projective<P>) -> Projective<P>
fn sub(self, other: &'a mut Projective<P>) -> Projective<P>
- operation. Read moreSource§impl<'a, P: SWCurveConfig> Sub<&'a mut Projective<P>> for Projective<P>
impl<'a, P: SWCurveConfig> Sub<&'a mut Projective<P>> for Projective<P>
Source§impl<'b, P: SWCurveConfig> Sub<Projective<P>> for &'b Projective<P>
impl<'b, P: SWCurveConfig> Sub<Projective<P>> for &'b Projective<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> 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<Affine<P>>> Sub<T> for Projective<P>
impl<P: SWCurveConfig, T: Borrow<Affine<P>>> Sub<T> for Projective<P>
Source§impl<P: SWCurveConfig> Sub for Projective<P>
impl<P: SWCurveConfig> Sub for Projective<P>
Source§impl<'a, P: SWCurveConfig> SubAssign<&'a Projective<P>> for Projective<P>
impl<'a, P: SWCurveConfig> SubAssign<&'a Projective<P>> for Projective<P>
Source§fn sub_assign(&mut self, other: &'a Self)
fn sub_assign(&mut self, other: &'a Self)
-= operation. Read moreSource§impl<'a, P: SWCurveConfig> SubAssign<&'a mut Projective<P>> for Projective<P>
impl<'a, P: SWCurveConfig> SubAssign<&'a mut Projective<P>> for Projective<P>
Source§fn sub_assign(&mut self, other: &'a mut Self)
fn sub_assign(&mut self, other: &'a mut Self)
-= operation. Read moreSource§impl<P: SWCurveConfig, T: Borrow<Affine<P>>> SubAssign<T> for Projective<P>
impl<P: SWCurveConfig, T: Borrow<Affine<P>>> SubAssign<T> for Projective<P>
Source§fn sub_assign(&mut self, other: T)
fn sub_assign(&mut self, other: T)
-= operation. Read moreSource§impl<P: SWCurveConfig> SubAssign for Projective<P>
impl<P: SWCurveConfig> SubAssign for Projective<P>
Source§fn sub_assign(&mut self, other: Self)
fn sub_assign(&mut self, other: Self)
-= operation. Read moreSource§impl<'a, P: SWCurveConfig> Sum<&'a Projective<P>> for Projective<P>
impl<'a, P: SWCurveConfig> Sum<&'a Projective<P>> for Projective<P>
Source§impl<P: SWCurveConfig, T: Borrow<Affine<P>>> Sum<T> for Projective<P>
impl<P: SWCurveConfig, T: Borrow<Affine<P>>> Sum<T> for Projective<P>
Source§impl<P: SWCurveConfig> Sum for Projective<P>
impl<P: SWCurveConfig> Sum for Projective<P>
Source§impl<M: SWCurveConfig, ConstraintF: Field> ToConstraintField<ConstraintF> for Projective<M>
impl<M: SWCurveConfig, ConstraintF: Field> ToConstraintField<ConstraintF> for Projective<M>
fn to_field_elements(&self) -> Option<Vec<ConstraintF>>
Source§impl<P: SWCurveConfig> Valid for Projective<P>
impl<P: SWCurveConfig> Valid for Projective<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§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§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§impl<P: SWCurveConfig> VariableBaseMSM for Projective<P>
impl<P: SWCurveConfig> VariableBaseMSM for Projective<P>
const ZERO_BUCKET: Self::Bucket = Bucket::ZERO
type Bucket = Bucket<P>
Source§fn msm(
bases: &[Self::MulBase],
bigints: &[Self::ScalarField],
) -> Result<Self, usize>
fn msm( bases: &[Self::MulBase], bigints: &[Self::ScalarField], ) -> Result<Self, usize>
Source§fn msm_unchecked(bases: &[Self::MulBase], scalars: &[Self::ScalarField]) -> Self
fn msm_unchecked(bases: &[Self::MulBase], scalars: &[Self::ScalarField]) -> Self
PrimeField elements in scalars
and the corresponding group elements in bases. Read moreSource§fn msm_bigint(
bases: &[Self::MulBase],
bigints: &[<Self::ScalarField as PrimeField>::BigInt],
) -> Self
fn msm_bigint( bases: &[Self::MulBase], bigints: &[<Self::ScalarField as PrimeField>::BigInt], ) -> Self
Source§fn msm_u1(bases: &[Self::MulBase], scalars: &[bool]) -> Self
fn msm_u1(bases: &[Self::MulBase], scalars: &[bool]) -> Self
Self::msm_bigint.Source§fn msm_u8(bases: &[Self::MulBase], scalars: &[u8]) -> Self
fn msm_u8(bases: &[Self::MulBase], scalars: &[u8]) -> Self
u8-sized.
The default implementation is faster than Self::msm_bigint.Source§fn msm_u16(bases: &[Self::MulBase], scalars: &[u16]) -> Self
fn msm_u16(bases: &[Self::MulBase], scalars: &[u16]) -> Self
u16-sized.
The default implementation is faster than Self::msm_bigint.Source§fn msm_u32(bases: &[Self::MulBase], scalars: &[u32]) -> Self
fn msm_u32(bases: &[Self::MulBase], scalars: &[u32]) -> Self
u32-sized.
The default implementation is faster than Self::msm_bigint.Source§impl<P: SWCurveConfig> Zero for Projective<P>
impl<P: SWCurveConfig> Zero for Projective<P>
Source§impl<P: SWCurveConfig> Zeroize for Projective<P>
impl<P: SWCurveConfig> Zeroize for Projective<P>
impl<P: SWCurveConfig> Copy for Projective<P>
impl<P: SWCurveConfig> Eq for Projective<P>
Auto Trait Implementations§
impl<P> Freeze for Projective<P>
impl<P> RefUnwindSafe for Projective<P>
impl<P> Send for Projective<P>
impl<P> Sync for Projective<P>
impl<P> Unpin for Projective<P>
impl<P> UnsafeUnpin for Projective<P>
impl<P> UnwindSafe for Projective<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