Struct curve25519_dalek::edwards::EdwardsPoint
source · pub struct EdwardsPoint { /* private fields */ }
Expand description
An EdwardsPoint
represents a point on the Edwards form of Curve25519.
Implementations§
source§impl 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 hash_from_bytes<D>(bytes: &[u8]) -> EdwardsPointwhere
D: Digest<OutputSize = U64> + Default,
pub fn hash_from_bytes<D>(bytes: &[u8]) -> EdwardsPointwhere
D: Digest<OutputSize = U64> + Default,
Perform hashing to the group using the Elligator2 map
See https://tools.ietf.org/html/draft-irtf-cfrg-hash-to-curve-10#section-6.7.1
source§impl 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.
source§impl 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§
source§impl<'a, 'b> Add<&'b EdwardsPoint> for &'a EdwardsPoint
impl<'a, 'b> Add<&'b EdwardsPoint> for &'a EdwardsPoint
§type Output = EdwardsPoint
type Output = EdwardsPoint
+
operator.source§fn add(self, other: &'b EdwardsPoint) -> EdwardsPoint
fn add(self, other: &'b EdwardsPoint) -> EdwardsPoint
+
operation. Read moresource§impl<'b> Add<&'b EdwardsPoint> for EdwardsPoint
impl<'b> Add<&'b EdwardsPoint> for EdwardsPoint
§type Output = EdwardsPoint
type Output = EdwardsPoint
+
operator.source§fn add(self, rhs: &'b EdwardsPoint) -> EdwardsPoint
fn add(self, rhs: &'b EdwardsPoint) -> EdwardsPoint
+
operation. Read moresource§impl<'a> Add<EdwardsPoint> for &'a EdwardsPoint
impl<'a> Add<EdwardsPoint> for &'a EdwardsPoint
§type Output = EdwardsPoint
type Output = EdwardsPoint
+
operator.source§fn add(self, rhs: EdwardsPoint) -> EdwardsPoint
fn add(self, rhs: EdwardsPoint) -> EdwardsPoint
+
operation. Read moresource§impl Add<EdwardsPoint> for EdwardsPoint
impl Add<EdwardsPoint> for EdwardsPoint
§type Output = EdwardsPoint
type Output = EdwardsPoint
+
operator.source§fn add(self, rhs: EdwardsPoint) -> EdwardsPoint
fn add(self, rhs: EdwardsPoint) -> EdwardsPoint
+
operation. Read moresource§impl<'b> AddAssign<&'b EdwardsPoint> for EdwardsPoint
impl<'b> AddAssign<&'b EdwardsPoint> for EdwardsPoint
source§fn add_assign(&mut self, _rhs: &'b EdwardsPoint)
fn add_assign(&mut self, _rhs: &'b EdwardsPoint)
+=
operation. Read moresource§impl AddAssign<EdwardsPoint> for EdwardsPoint
impl AddAssign<EdwardsPoint> for EdwardsPoint
source§fn add_assign(&mut self, rhs: EdwardsPoint)
fn add_assign(&mut self, rhs: EdwardsPoint)
+=
operation. Read moresource§impl Clone for EdwardsPoint
impl Clone for EdwardsPoint
source§fn clone(&self) -> EdwardsPoint
fn clone(&self) -> EdwardsPoint
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl ConditionallySelectable for EdwardsPoint
impl ConditionallySelectable for EdwardsPoint
source§fn conditional_select(
a: &EdwardsPoint,
b: &EdwardsPoint,
choice: Choice
) -> EdwardsPoint
fn conditional_select(
a: &EdwardsPoint,
b: &EdwardsPoint,
choice: Choice
) -> EdwardsPoint
source§fn conditional_assign(&mut self, other: &Self, choice: Choice)
fn conditional_assign(&mut self, other: &Self, choice: Choice)
source§impl ConstantTimeEq for EdwardsPoint
impl ConstantTimeEq for EdwardsPoint
source§impl Debug for EdwardsPoint
impl Debug for EdwardsPoint
source§impl Default for EdwardsPoint
impl Default for EdwardsPoint
source§fn default() -> EdwardsPoint
fn default() -> EdwardsPoint
source§impl Identity for EdwardsPoint
impl Identity for EdwardsPoint
source§fn identity() -> EdwardsPoint
fn identity() -> EdwardsPoint
source§impl<'a, 'b> Mul<&'b EdwardsPoint> for &'a Scalar
impl<'a, 'b> Mul<&'b EdwardsPoint> for &'a Scalar
source§fn 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.source§impl<'b> Mul<&'b EdwardsPoint> for Scalar
impl<'b> Mul<&'b EdwardsPoint> for Scalar
§type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.source§fn mul(self, rhs: &'b EdwardsPoint) -> EdwardsPoint
fn mul(self, rhs: &'b EdwardsPoint) -> EdwardsPoint
*
operation. Read moresource§impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsPoint
impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsPoint
source§fn 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.source§impl<'b> Mul<&'b Scalar> for EdwardsPoint
impl<'b> Mul<&'b Scalar> for EdwardsPoint
§type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.source§impl<'a> Mul<EdwardsPoint> for &'a Scalar
impl<'a> Mul<EdwardsPoint> for &'a Scalar
§type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.source§fn mul(self, rhs: EdwardsPoint) -> EdwardsPoint
fn mul(self, rhs: EdwardsPoint) -> EdwardsPoint
*
operation. Read moresource§impl Mul<EdwardsPoint> for Scalar
impl Mul<EdwardsPoint> for Scalar
§type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.source§fn mul(self, rhs: EdwardsPoint) -> EdwardsPoint
fn mul(self, rhs: EdwardsPoint) -> EdwardsPoint
*
operation. Read moresource§impl<'a> Mul<Scalar> for &'a EdwardsPoint
impl<'a> Mul<Scalar> for &'a EdwardsPoint
§type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.source§impl Mul<Scalar> for EdwardsPoint
impl Mul<Scalar> for EdwardsPoint
§type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.source§impl<'b> MulAssign<&'b Scalar> for EdwardsPoint
impl<'b> MulAssign<&'b Scalar> for EdwardsPoint
source§fn mul_assign(&mut self, scalar: &'b Scalar)
fn mul_assign(&mut self, scalar: &'b Scalar)
*=
operation. Read moresource§impl MulAssign<Scalar> for EdwardsPoint
impl MulAssign<Scalar> for EdwardsPoint
source§fn mul_assign(&mut self, rhs: Scalar)
fn mul_assign(&mut self, rhs: Scalar)
*=
operation. Read moresource§impl MultiscalarMul for EdwardsPoint
impl MultiscalarMul for EdwardsPoint
§type Point = EdwardsPoint
type Point = EdwardsPoint
RistrettoPoint
.source§fn 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>,
source§impl<'a> Neg for &'a EdwardsPoint
impl<'a> Neg for &'a EdwardsPoint
§type Output = EdwardsPoint
type Output = EdwardsPoint
-
operator.source§fn neg(self) -> EdwardsPoint
fn neg(self) -> EdwardsPoint
-
operation. Read moresource§impl Neg for EdwardsPoint
impl Neg for EdwardsPoint
§type Output = EdwardsPoint
type Output = EdwardsPoint
-
operator.source§fn neg(self) -> EdwardsPoint
fn neg(self) -> EdwardsPoint
-
operation. Read moresource§impl PartialEq<EdwardsPoint> for EdwardsPoint
impl PartialEq<EdwardsPoint> for EdwardsPoint
source§fn eq(&self, other: &EdwardsPoint) -> bool
fn eq(&self, other: &EdwardsPoint) -> bool
source§impl<'a, 'b> Sub<&'b EdwardsPoint> for &'a EdwardsPoint
impl<'a, 'b> Sub<&'b EdwardsPoint> for &'a EdwardsPoint
§type Output = EdwardsPoint
type Output = EdwardsPoint
-
operator.source§fn sub(self, other: &'b EdwardsPoint) -> EdwardsPoint
fn sub(self, other: &'b EdwardsPoint) -> EdwardsPoint
-
operation. Read moresource§impl<'b> Sub<&'b EdwardsPoint> for EdwardsPoint
impl<'b> Sub<&'b EdwardsPoint> for EdwardsPoint
§type Output = EdwardsPoint
type Output = EdwardsPoint
-
operator.source§fn sub(self, rhs: &'b EdwardsPoint) -> EdwardsPoint
fn sub(self, rhs: &'b EdwardsPoint) -> EdwardsPoint
-
operation. Read moresource§impl<'a> Sub<EdwardsPoint> for &'a EdwardsPoint
impl<'a> Sub<EdwardsPoint> for &'a EdwardsPoint
§type Output = EdwardsPoint
type Output = EdwardsPoint
-
operator.source§fn sub(self, rhs: EdwardsPoint) -> EdwardsPoint
fn sub(self, rhs: EdwardsPoint) -> EdwardsPoint
-
operation. Read moresource§impl Sub<EdwardsPoint> for EdwardsPoint
impl Sub<EdwardsPoint> for EdwardsPoint
§type Output = EdwardsPoint
type Output = EdwardsPoint
-
operator.source§fn sub(self, rhs: EdwardsPoint) -> EdwardsPoint
fn sub(self, rhs: EdwardsPoint) -> EdwardsPoint
-
operation. Read moresource§impl<'b> SubAssign<&'b EdwardsPoint> for EdwardsPoint
impl<'b> SubAssign<&'b EdwardsPoint> for EdwardsPoint
source§fn sub_assign(&mut self, _rhs: &'b EdwardsPoint)
fn sub_assign(&mut self, _rhs: &'b EdwardsPoint)
-=
operation. Read moresource§impl SubAssign<EdwardsPoint> for EdwardsPoint
impl SubAssign<EdwardsPoint> for EdwardsPoint
source§fn sub_assign(&mut self, rhs: EdwardsPoint)
fn sub_assign(&mut self, rhs: EdwardsPoint)
-=
operation. Read moresource§impl<T> Sum<T> for EdwardsPointwhere
T: Borrow<EdwardsPoint>,
impl<T> Sum<T> for EdwardsPointwhere
T: Borrow<EdwardsPoint>,
source§impl VartimeMultiscalarMul for EdwardsPoint
impl VartimeMultiscalarMul for EdwardsPoint
§type Point = EdwardsPoint
type Point = EdwardsPoint
RistrettoPoint
.source§fn 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