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

pub struct EdwardsPoint { /* fields omitted */ }

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

## Methods

### impl EdwardsPoint[src]

#### 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 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 MultiscalarMul for EdwardsPoint[src]

#### type Point = EdwardsPoint

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

### impl VartimeMultiscalarMul for EdwardsPoint[src]

#### type Point = EdwardsPoint

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

#### fn vartime_multiscalar_mul<I, J>(scalars: I, points: J) -> Self::Point where    I: IntoIterator,    I::Item: Borrow<Scalar>,    J: IntoIterator,    J::Item: Borrow<Self::Point>,    Self::Point: Clone, [src]

Given an iterator of public scalars and an iterator of public points, compute $$Q = c_1 P_1 + \cdots + c_n P_n,$$ using variable-time operations. Read more

### impl Clone for EdwardsPoint[src]

#### fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

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

#### #[must_use] fn ne(&self, other: &Rhs) -> bool1.0.0[src]

This method tests for !=.

### 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> 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<'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> 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<'b> Mul<&'b Scalar> for EdwardsPoint[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<'b> Mul<&'b EdwardsPoint> for Scalar[src]

#### type Output = EdwardsPoint

The resulting type after applying the * operator.

### 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, '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, '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<'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 ConditionallySelectable for EdwardsPoint[src]

#### fn conditional_assign(&mut self, other: &Self, choice: Choice)[src]

Conditionally assign other to self, according to choice. Read more

#### fn conditional_swap(a: &mut Self, b: &mut Self, choice: Choice)[src]

Conditionally swap self and other if choice == 1; otherwise, reassign both unto themselves. Read more

## Blanket Implementations

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

#### type Error = !

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

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

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

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

### impl<T> Same for T

#### type Output = T

Should always be Self