# [−][src]Struct curve25519_dalek::edwards::EdwardsPoint

pub struct EdwardsPoint {
pub(crate) X: FieldElement51,
pub(crate) Y: FieldElement51,
pub(crate) Z: FieldElement51,
pub(crate) T: FieldElement51,
}

An EdwardsPoint represents a point on the Edwards form of Curve25519.

## Fields

X: FieldElement51Y: FieldElement51Z: FieldElement51T: FieldElement51

## Methods

### impl EdwardsPoint[src]

#### pub(crate) fn to_projective_niels(&self) -> ProjectiveNielsPoint[src]

Convert to a ProjectiveNielsPoint

#### pub(crate) fn to_projective(&self) -> ProjectivePoint[src]

Convert the representation of this point from extended coordinates to projective coordinates.

Free.

#### pub(crate) fn to_affine_niels(&self) -> AffineNielsPoint[src]

Dehomogenize to a AffineNielsPoint. Mainly for testing.

#### pub fn to_montgomery(&self) -> MontgomeryPoint[src]

Convert this EdwardsPoint on the Edwards model to the corresponding MontgomeryPoint on the Montgomery model.

This function has one exceptional case; the identity point of the Edwards curve is sent to the 2-torsion point $$(0,0)$$ on the Montgomery curve.

Note that this is a one-way conversion, since the Montgomery model does not retain sign information.

#### pub fn compress(&self) -> CompressedEdwardsY[src]

Compress this point to CompressedEdwardsY format.

### impl EdwardsPoint[src]

#### pub fn vartime_double_scalar_mul_basepoint(    a: &Scalar,     A: &EdwardsPoint,     b: &Scalar) -> EdwardsPoint[src]

Compute $$aA + bB$$ in variable time, where $$B$$ is the Ed25519 basepoint.

### impl EdwardsPoint[src]

#### pub fn mul_by_cofactor(&self) -> EdwardsPoint[src]

Multiply by the cofactor: return $$[8]P$$.

#### pub(crate) fn mul_by_pow_2(&self, k: u32) -> EdwardsPoint[src]

Compute $$[2^k] P$$ by successive doublings. Requires $$k > 0$$.

#### pub fn is_small_order(&self) -> bool[src]

Determine if this point is of small order.

# Return

• true if self is in the torsion subgroup $$\mathcal E[8]$$;
• false if self is not in the torsion subgroup $$\mathcal E[8]$$.

# Example

use curve25519_dalek::constants;

// Generator of the prime-order subgroup
let P = constants::ED25519_BASEPOINT_POINT;
// Generator of the torsion subgroup
let Q = constants::EIGHT_TORSION[1];

// P has large order
assert_eq!(P.is_small_order(), false);

// Q has small order
assert_eq!(Q.is_small_order(), true);

#### pub fn is_torsion_free(&self) -> bool[src]

Determine if this point is “torsion-free”, i.e., is contained in the prime-order subgroup.

# Return

• true if self has zero torsion component and is in the prime-order subgroup;
• false if self has a nonzero torsion component and is not in the prime-order subgroup.

# Example

use curve25519_dalek::constants;

// Generator of the prime-order subgroup
let P = constants::ED25519_BASEPOINT_POINT;
// Generator of the torsion subgroup
let Q = constants::EIGHT_TORSION[1];

// P is torsion-free
assert_eq!(P.is_torsion_free(), true);

// P + Q is not torsion-free
assert_eq!((P+Q).is_torsion_free(), false);

## Trait Implementations

### impl<'a, 'b> Add<&'b AffineNielsPoint> for &'a EdwardsPoint[src]

#### type Output = CompletedPoint

The resulting type after applying the + operator.

### impl<'a, 'b> Add<&'b EdwardsPoint> for &'a EdwardsPoint[src]

#### type Output = EdwardsPoint

The resulting type after applying the + operator.

### impl<'b> Add<&'b EdwardsPoint> for EdwardsPoint[src]

#### type Output = EdwardsPoint

The resulting type after applying the + operator.

### impl<'a, 'b> Add<&'b ProjectiveNielsPoint> for &'a EdwardsPoint[src]

#### type Output = CompletedPoint

The resulting type after applying the + operator.

### impl<'a> Add<EdwardsPoint> for &'a EdwardsPoint[src]

#### type Output = EdwardsPoint

The resulting type after applying the + operator.

### impl Add<EdwardsPoint> for EdwardsPoint[src]

#### type Output = EdwardsPoint

The resulting type after applying the + operator.

### impl<'b> Mul<&'b EdwardsPoint> for Scalar[src]

#### type Output = EdwardsPoint

The resulting type after applying the * operator.

### impl<'a, 'b> Mul<&'b EdwardsPoint> for &'a Scalar[src]

#### type Output = EdwardsPoint

The resulting type after applying the * operator.

#### fn mul(self, point: &'b EdwardsPoint) -> EdwardsPoint[src]

Scalar multiplication: compute scalar * self.

For scalar multiplication of a basepoint, EdwardsBasepointTable is approximately 4x faster.

### impl<'b> Mul<&'b Scalar> for EdwardsPoint[src]

#### type Output = EdwardsPoint

The resulting type after applying the * operator.

### impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsPoint[src]

#### type Output = EdwardsPoint

The resulting type after applying the * operator.

#### fn mul(self, scalar: &'b Scalar) -> EdwardsPoint[src]

Scalar multiplication: compute scalar * self.

For scalar multiplication of a basepoint, EdwardsBasepointTable is approximately 4x faster.

### impl<'a> Mul<EdwardsPoint> for &'a Scalar[src]

#### type Output = EdwardsPoint

The resulting type after applying the * operator.

### impl Mul<EdwardsPoint> for Scalar[src]

#### type Output = EdwardsPoint

The resulting type after applying the * operator.

### impl<'a> Mul<Scalar> for &'a EdwardsPoint[src]

#### type Output = EdwardsPoint

The resulting type after applying the * operator.

### impl Mul<Scalar> for EdwardsPoint[src]

#### type Output = EdwardsPoint

The resulting type after applying the * operator.

### impl MultiscalarMul for EdwardsPoint[src]

#### type Point = EdwardsPoint

The type of point being multiplied, e.g., RistrettoPoint.

### impl<'a> Neg for &'a EdwardsPoint[src]

#### type Output = EdwardsPoint

The resulting type after applying the - operator.

### impl Neg for EdwardsPoint[src]

#### type Output = EdwardsPoint

The resulting type after applying the - operator.

### impl<'a, 'b> Sub<&'b AffineNielsPoint> for &'a EdwardsPoint[src]

#### type Output = CompletedPoint

The resulting type after applying the - operator.

### impl<'a, 'b> Sub<&'b EdwardsPoint> for &'a EdwardsPoint[src]

#### type Output = EdwardsPoint

The resulting type after applying the - operator.

### impl<'b> Sub<&'b EdwardsPoint> for EdwardsPoint[src]

#### type Output = EdwardsPoint

The resulting type after applying the - operator.

### impl<'a, 'b> Sub<&'b ProjectiveNielsPoint> for &'a EdwardsPoint[src]

#### type Output = CompletedPoint

The resulting type after applying the - operator.

### impl<'a> Sub<EdwardsPoint> for &'a EdwardsPoint[src]

#### type Output = EdwardsPoint

The resulting type after applying the - operator.

### impl Sub<EdwardsPoint> for EdwardsPoint[src]

#### type Output = EdwardsPoint

The resulting type after applying the - operator.

### impl VartimeMultiscalarMul for EdwardsPoint[src]

#### type Point = EdwardsPoint

The type of point being multiplied, e.g., RistrettoPoint.

## Blanket Implementations

### impl<T> Same<T> for T

#### type Output = T

Should always be Self

### impl<T> ToOwned for T where    T: Clone, [src]

#### type Owned = T

The resulting type after obtaining ownership.

### impl<T, U> TryFrom<U> for T where    U: Into<T>, [src]

#### type Error = !

The type returned in the event of a conversion error.

### impl<T, U> TryInto<U> for T where    U: TryFrom<T>, [src]

#### type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.