[][src]Struct curve25519_dalek_ng::edwards::EdwardsPoint

pub struct EdwardsPoint { /* fields omitted */ }

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

Implementations

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

impl AddAssign<EdwardsPoint> for EdwardsPoint[src]

impl Clone for EdwardsPoint[src]

impl ConditionallySelectable for EdwardsPoint[src]

impl ConstantTimeEq for EdwardsPoint[src]

impl Copy for EdwardsPoint[src]

impl Debug for EdwardsPoint[src]

impl Default for EdwardsPoint[src]

impl Eq for EdwardsPoint[src]

impl Identity for EdwardsPoint[src]

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

impl MulAssign<Scalar> for EdwardsPoint[src]

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

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

impl SubAssign<EdwardsPoint> for EdwardsPoint[src]

impl<T> Sum<T> for EdwardsPoint where
    T: Borrow<EdwardsPoint>, 
[src]

impl VartimeMultiscalarMul for EdwardsPoint[src]

type Point = EdwardsPoint

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

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T, U> Cast<U> for T where
    U: FromCast<T>, 
[src]

impl<T> ConditionallyNegatable for T where
    T: ConditionallySelectable,
    &'a T: for<'a> Neg,
    <&'a T as Neg>::Output == T, 
[src]

impl<T> From<T> for T[src]

impl<T> FromBits<T> for T[src]

impl<T> FromCast<T> for T[src]

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

impl<T, U> IntoBits<U> for T where
    U: FromBits<T>, 
[src]

impl<T> IsIdentity for T where
    T: ConstantTimeEq + Identity
[src]

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 = Infallible

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.