Struct test_dalek_docs::edwards::EdwardsPoint
source · pub struct EdwardsPoint { /* private fields */ }
Expand description
An EdwardsPoint
represents a point on the Edwards form of Curve25519.
Implementations
sourceimpl EdwardsPoint
impl EdwardsPoint
sourcepub fn to_montgomery(&self) -> MontgomeryPoint
pub fn to_montgomery(&self) -> MontgomeryPoint
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.
sourcepub fn compress(&self) -> CompressedEdwardsY
pub fn compress(&self) -> CompressedEdwardsY
Compress this point to CompressedEdwardsY
format.
sourcepub fn nonspec_map_to_curve<D>(bytes: &[u8]) -> EdwardsPointwhere
D: Digest<OutputSize = U64> + Default,
👎Deprecated since 4.0.0: previously named hash_from_bytes
, this is not a secure hash function
pub fn nonspec_map_to_curve<D>(bytes: &[u8]) -> EdwardsPointwhere
D: Digest<OutputSize = U64> + Default,
hash_from_bytes
, this is not a secure hash functionMaps the digest of the input bytes to the curve. This is NOT a hash-to-curve function, as
it produces points with a non-uniform distribution. Rather, it performs something that
resembles (but is not) half of the
hash_to_curve
function from the Elligator2 spec.
sourceimpl EdwardsPoint
impl EdwardsPoint
sourcepub fn vartime_double_scalar_mul_basepoint(
a: &Scalar,
A: &EdwardsPoint,
b: &Scalar
) -> EdwardsPoint
pub fn vartime_double_scalar_mul_basepoint(
a: &Scalar,
A: &EdwardsPoint,
b: &Scalar
) -> EdwardsPoint
Compute \(aA + bB\) in variable time, where \(B\) is the Ed25519 basepoint.
sourceimpl EdwardsPoint
impl EdwardsPoint
sourcepub fn mul_by_cofactor(&self) -> EdwardsPoint
pub fn mul_by_cofactor(&self) -> EdwardsPoint
Multiply by the cofactor: return \([8]P\).
sourcepub fn is_small_order(&self) -> bool
pub fn is_small_order(&self) -> bool
Determine if this point is of small order.
Return
true
ifself
is in the torsion subgroup \( \mathcal E[8] \);false
ifself
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);
sourcepub fn is_torsion_free(&self) -> bool
pub fn is_torsion_free(&self) -> bool
Determine if this point is “torsion-free”, i.e., is contained in the prime-order subgroup.
Return
true
ifself
has zero torsion component and is in the prime-order subgroup;false
ifself
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
sourceimpl<'a, 'b> Add<&'b AffineNielsPoint> for &'a EdwardsPoint
impl<'a, 'b> Add<&'b AffineNielsPoint> for &'a EdwardsPoint
type Output = CompletedPoint
type Output = CompletedPoint
+
operator.sourcefn add(self, other: &'b AffineNielsPoint) -> CompletedPoint
fn add(self, other: &'b AffineNielsPoint) -> CompletedPoint
+
operation. Read moresourceimpl<'a, 'b> Add<&'b EdwardsPoint> for &'a EdwardsPoint
impl<'a, 'b> Add<&'b EdwardsPoint> for &'a EdwardsPoint
type Output = EdwardsPoint
type Output = EdwardsPoint
+
operator.sourcefn add(self, other: &'b EdwardsPoint) -> EdwardsPoint
fn add(self, other: &'b EdwardsPoint) -> EdwardsPoint
+
operation. Read moresourceimpl<'b> Add<&'b EdwardsPoint> for EdwardsPoint
impl<'b> Add<&'b EdwardsPoint> for EdwardsPoint
type Output = EdwardsPoint
type Output = EdwardsPoint
+
operator.sourcefn add(self, rhs: &'b EdwardsPoint) -> EdwardsPoint
fn add(self, rhs: &'b EdwardsPoint) -> EdwardsPoint
+
operation. Read moresourceimpl<'a, 'b> Add<&'b ProjectiveNielsPoint> for &'a EdwardsPoint
impl<'a, 'b> Add<&'b ProjectiveNielsPoint> for &'a EdwardsPoint
type Output = CompletedPoint
type Output = CompletedPoint
+
operator.sourcefn add(self, other: &'b ProjectiveNielsPoint) -> CompletedPoint
fn add(self, other: &'b ProjectiveNielsPoint) -> CompletedPoint
+
operation. Read moresourceimpl<'a> Add<EdwardsPoint> for &'a EdwardsPoint
impl<'a> Add<EdwardsPoint> for &'a EdwardsPoint
type Output = EdwardsPoint
type Output = EdwardsPoint
+
operator.sourcefn add(self, rhs: EdwardsPoint) -> EdwardsPoint
fn add(self, rhs: EdwardsPoint) -> EdwardsPoint
+
operation. Read moresourceimpl Add<EdwardsPoint> for EdwardsPoint
impl Add<EdwardsPoint> for EdwardsPoint
type Output = EdwardsPoint
type Output = EdwardsPoint
+
operator.sourcefn add(self, rhs: EdwardsPoint) -> EdwardsPoint
fn add(self, rhs: EdwardsPoint) -> EdwardsPoint
+
operation. Read moresourceimpl<'b> AddAssign<&'b EdwardsPoint> for EdwardsPoint
impl<'b> AddAssign<&'b EdwardsPoint> for EdwardsPoint
sourcefn add_assign(&mut self, _rhs: &'b EdwardsPoint)
fn add_assign(&mut self, _rhs: &'b EdwardsPoint)
+=
operation. Read moresourceimpl AddAssign<EdwardsPoint> for EdwardsPoint
impl AddAssign<EdwardsPoint> for EdwardsPoint
sourcefn add_assign(&mut self, rhs: EdwardsPoint)
fn add_assign(&mut self, rhs: EdwardsPoint)
+=
operation. Read moresourceimpl Clone for EdwardsPoint
impl Clone for EdwardsPoint
sourcefn clone(&self) -> EdwardsPoint
fn clone(&self) -> EdwardsPoint
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresourceimpl ConditionallySelectable for EdwardsPoint
impl ConditionallySelectable for EdwardsPoint
sourcefn conditional_select(
a: &EdwardsPoint,
b: &EdwardsPoint,
choice: Choice
) -> EdwardsPoint
fn conditional_select(
a: &EdwardsPoint,
b: &EdwardsPoint,
choice: Choice
) -> EdwardsPoint
sourcefn conditional_assign(&mut self, other: &Self, choice: Choice)
fn conditional_assign(&mut self, other: &Self, choice: Choice)
sourceimpl ConstantTimeEq for EdwardsPoint
impl ConstantTimeEq for EdwardsPoint
sourcefn ct_eq(&self, other: &EdwardsPoint) -> Choice
fn ct_eq(&self, other: &EdwardsPoint) -> Choice
sourceimpl Debug for EdwardsPoint
impl Debug for EdwardsPoint
sourceimpl Default for EdwardsPoint
impl Default for EdwardsPoint
sourcefn default() -> EdwardsPoint
fn default() -> EdwardsPoint
sourceimpl From<EdwardsPoint> for ExtendedPoint
impl From<EdwardsPoint> for ExtendedPoint
sourcefn from(P: EdwardsPoint) -> ExtendedPoint
fn from(P: EdwardsPoint) -> ExtendedPoint
sourceimpl From<ExtendedPoint> for EdwardsPoint
impl From<ExtendedPoint> for EdwardsPoint
sourcefn from(P: ExtendedPoint) -> EdwardsPoint
fn from(P: ExtendedPoint) -> EdwardsPoint
sourceimpl Identity for EdwardsPoint
impl Identity for EdwardsPoint
sourcefn identity() -> EdwardsPoint
fn identity() -> EdwardsPoint
sourceimpl<'a, 'b> Mul<&'b EdwardsPoint> for &'a Scalar
impl<'a, 'b> Mul<&'b EdwardsPoint> for &'a Scalar
sourcefn mul(self, point: &'b EdwardsPoint) -> EdwardsPoint
fn mul(self, point: &'b EdwardsPoint) -> EdwardsPoint
Scalar multiplication: compute scalar * self
.
For scalar multiplication of a basepoint,
EdwardsBasepointTable
is approximately 4x faster.
type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.sourceimpl<'b> Mul<&'b EdwardsPoint> for Scalar
impl<'b> Mul<&'b EdwardsPoint> for Scalar
type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.sourcefn mul(self, rhs: &'b EdwardsPoint) -> EdwardsPoint
fn mul(self, rhs: &'b EdwardsPoint) -> EdwardsPoint
*
operation. Read moresourceimpl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsPoint
impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsPoint
sourcefn mul(self, scalar: &'b Scalar) -> EdwardsPoint
fn mul(self, scalar: &'b Scalar) -> EdwardsPoint
Scalar multiplication: compute scalar * self
.
For scalar multiplication of a basepoint,
EdwardsBasepointTable
is approximately 4x faster.
type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.sourceimpl<'b> Mul<&'b Scalar> for EdwardsPoint
impl<'b> Mul<&'b Scalar> for EdwardsPoint
type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.sourcefn mul(self, rhs: &'b Scalar) -> EdwardsPoint
fn mul(self, rhs: &'b Scalar) -> EdwardsPoint
*
operation. Read moresourceimpl<'a> Mul<EdwardsPoint> for &'a Scalar
impl<'a> Mul<EdwardsPoint> for &'a Scalar
type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.sourcefn mul(self, rhs: EdwardsPoint) -> EdwardsPoint
fn mul(self, rhs: EdwardsPoint) -> EdwardsPoint
*
operation. Read moresourceimpl Mul<EdwardsPoint> for Scalar
impl Mul<EdwardsPoint> for Scalar
type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.sourcefn mul(self, rhs: EdwardsPoint) -> EdwardsPoint
fn mul(self, rhs: EdwardsPoint) -> EdwardsPoint
*
operation. Read moresourceimpl<'a> Mul<Scalar> for &'a EdwardsPoint
impl<'a> Mul<Scalar> for &'a EdwardsPoint
type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.sourcefn mul(self, rhs: Scalar) -> EdwardsPoint
fn mul(self, rhs: Scalar) -> EdwardsPoint
*
operation. Read moresourceimpl Mul<Scalar> for EdwardsPoint
impl Mul<Scalar> for EdwardsPoint
type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.sourcefn mul(self, rhs: Scalar) -> EdwardsPoint
fn mul(self, rhs: Scalar) -> EdwardsPoint
*
operation. Read moresourceimpl<'b> MulAssign<&'b Scalar> for EdwardsPoint
impl<'b> MulAssign<&'b Scalar> for EdwardsPoint
sourcefn mul_assign(&mut self, scalar: &'b Scalar)
fn mul_assign(&mut self, scalar: &'b Scalar)
*=
operation. Read moresourceimpl MulAssign<Scalar> for EdwardsPoint
impl MulAssign<Scalar> for EdwardsPoint
sourcefn mul_assign(&mut self, rhs: Scalar)
fn mul_assign(&mut self, rhs: Scalar)
*=
operation. Read moresourceimpl MultiscalarMul for EdwardsPoint
impl MultiscalarMul for EdwardsPoint
type Point = EdwardsPoint
type Point = EdwardsPoint
RistrettoPoint
.sourcefn multiscalar_mul<I, J>(scalars: I, points: J) -> EdwardsPointwhere
I: IntoIterator,
I::Item: Borrow<Scalar>,
J: IntoIterator,
J::Item: Borrow<EdwardsPoint>,
fn multiscalar_mul<I, J>(scalars: I, points: J) -> EdwardsPointwhere
I: IntoIterator,
I::Item: Borrow<Scalar>,
J: IntoIterator,
J::Item: Borrow<EdwardsPoint>,
sourceimpl<'a> Neg for &'a EdwardsPoint
impl<'a> Neg for &'a EdwardsPoint
type Output = EdwardsPoint
type Output = EdwardsPoint
-
operator.sourcefn neg(self) -> EdwardsPoint
fn neg(self) -> EdwardsPoint
-
operation. Read moresourceimpl Neg for EdwardsPoint
impl Neg for EdwardsPoint
type Output = EdwardsPoint
type Output = EdwardsPoint
-
operator.sourcefn neg(self) -> EdwardsPoint
fn neg(self) -> EdwardsPoint
-
operation. Read moresourceimpl PartialEq<EdwardsPoint> for EdwardsPoint
impl PartialEq<EdwardsPoint> for EdwardsPoint
sourcefn eq(&self, other: &EdwardsPoint) -> bool
fn eq(&self, other: &EdwardsPoint) -> bool
sourceimpl<'a, 'b> Sub<&'b AffineNielsPoint> for &'a EdwardsPoint
impl<'a, 'b> Sub<&'b AffineNielsPoint> for &'a EdwardsPoint
type Output = CompletedPoint
type Output = CompletedPoint
-
operator.sourcefn sub(self, other: &'b AffineNielsPoint) -> CompletedPoint
fn sub(self, other: &'b AffineNielsPoint) -> CompletedPoint
-
operation. Read moresourceimpl<'a, 'b> Sub<&'b EdwardsPoint> for &'a EdwardsPoint
impl<'a, 'b> Sub<&'b EdwardsPoint> for &'a EdwardsPoint
type Output = EdwardsPoint
type Output = EdwardsPoint
-
operator.sourcefn sub(self, other: &'b EdwardsPoint) -> EdwardsPoint
fn sub(self, other: &'b EdwardsPoint) -> EdwardsPoint
-
operation. Read moresourceimpl<'b> Sub<&'b EdwardsPoint> for EdwardsPoint
impl<'b> Sub<&'b EdwardsPoint> for EdwardsPoint
type Output = EdwardsPoint
type Output = EdwardsPoint
-
operator.sourcefn sub(self, rhs: &'b EdwardsPoint) -> EdwardsPoint
fn sub(self, rhs: &'b EdwardsPoint) -> EdwardsPoint
-
operation. Read moresourceimpl<'a, 'b> Sub<&'b ProjectiveNielsPoint> for &'a EdwardsPoint
impl<'a, 'b> Sub<&'b ProjectiveNielsPoint> for &'a EdwardsPoint
type Output = CompletedPoint
type Output = CompletedPoint
-
operator.sourcefn sub(self, other: &'b ProjectiveNielsPoint) -> CompletedPoint
fn sub(self, other: &'b ProjectiveNielsPoint) -> CompletedPoint
-
operation. Read moresourceimpl<'a> Sub<EdwardsPoint> for &'a EdwardsPoint
impl<'a> Sub<EdwardsPoint> for &'a EdwardsPoint
type Output = EdwardsPoint
type Output = EdwardsPoint
-
operator.sourcefn sub(self, rhs: EdwardsPoint) -> EdwardsPoint
fn sub(self, rhs: EdwardsPoint) -> EdwardsPoint
-
operation. Read moresourceimpl Sub<EdwardsPoint> for EdwardsPoint
impl Sub<EdwardsPoint> for EdwardsPoint
type Output = EdwardsPoint
type Output = EdwardsPoint
-
operator.sourcefn sub(self, rhs: EdwardsPoint) -> EdwardsPoint
fn sub(self, rhs: EdwardsPoint) -> EdwardsPoint
-
operation. Read moresourceimpl<'b> SubAssign<&'b EdwardsPoint> for EdwardsPoint
impl<'b> SubAssign<&'b EdwardsPoint> for EdwardsPoint
sourcefn sub_assign(&mut self, _rhs: &'b EdwardsPoint)
fn sub_assign(&mut self, _rhs: &'b EdwardsPoint)
-=
operation. Read moresourceimpl SubAssign<EdwardsPoint> for EdwardsPoint
impl SubAssign<EdwardsPoint> for EdwardsPoint
sourcefn sub_assign(&mut self, rhs: EdwardsPoint)
fn sub_assign(&mut self, rhs: EdwardsPoint)
-=
operation. Read moresourceimpl<T> Sum<T> for EdwardsPointwhere
T: Borrow<EdwardsPoint>,
impl<T> Sum<T> for EdwardsPointwhere
T: Borrow<EdwardsPoint>,
sourceimpl VartimeMultiscalarMul for EdwardsPoint
impl VartimeMultiscalarMul for EdwardsPoint
type Point = EdwardsPoint
type Point = EdwardsPoint
RistrettoPoint
.sourcefn optional_multiscalar_mul<I, J>(scalars: I, points: J) -> Option<EdwardsPoint>where
I: IntoIterator,
I::Item: Borrow<Scalar>,
J: IntoIterator<Item = Option<EdwardsPoint>>,
fn optional_multiscalar_mul<I, J>(scalars: I, points: J) -> Option<EdwardsPoint>where
I: IntoIterator,
I::Item: Borrow<Scalar>,
J: IntoIterator<Item = Option<EdwardsPoint>>,
Option
s of points, compute either Some(Q)
, where
$$
Q = c_1 P_1 + \cdots + c_n P_n,
$$
if all points were Some(P_i)
, or else return None
. Read more