Struct curve25519_dalek::montgomery::MontgomeryPoint

source ·
pub struct MontgomeryPoint(pub [u8; 32]);
Expand description

Holds the \(u\)-coordinate of a point on the Montgomery form of Curve25519 or its twist.

Tuple Fields§

§0: [u8; 32]

Implementations§

source§

impl MontgomeryPoint

source

pub fn mul_base(scalar: &Scalar) -> Self

Fixed-base scalar multiplication (i.e. multiplication by the base point).

source

pub fn mul_clamped(self, bytes: [u8; 32]) -> Self

Multiply this point by clamp_integer(bytes). For a description of clamping, see clamp_integer.

source

pub fn mul_base_clamped(bytes: [u8; 32]) -> Self

Multiply the basepoint by clamp_integer(bytes). For a description of clamping, see clamp_integer.

source

pub fn mul_bits_be(&self, bits: impl Iterator<Item = bool>) -> MontgomeryPoint

Given self \( = u_0(P) \), and a big-endian bit representation of an integer \(n\), return \( u_0([n]P) \). This is constant time in the length of bits.

NOTE: You probably do not want to use this function. Almost every protocol built on Curve25519 uses clamped multiplication, explained here. When in doubt, use Self::mul_clamped.

source

pub const fn as_bytes(&self) -> &[u8; 32]

View this MontgomeryPoint as an array of bytes.

source

pub const fn to_bytes(&self) -> [u8; 32]

Convert this MontgomeryPoint to an array of bytes.

source

pub fn to_edwards(&self, sign: u8) -> Option<EdwardsPoint>

Attempt to convert to an EdwardsPoint, using the supplied choice of sign for the EdwardsPoint.

§Inputs
  • sign: a u8 donating the desired sign of the resulting EdwardsPoint. 0 denotes positive and 1 negative.
§Return
  • Some(EdwardsPoint) if self is the \(u\)-coordinate of a point on (the Montgomery form of) Curve25519;

  • None if self is the \(u\)-coordinate of a point on the twist of (the Montgomery form of) Curve25519;

Trait Implementations§

source§

impl Clone for MontgomeryPoint

source§

fn clone(&self) -> MontgomeryPoint

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl ConstantTimeEq for MontgomeryPoint

Equality of MontgomeryPoints is defined mod p.

source§

fn ct_eq(&self, other: &MontgomeryPoint) -> Choice

Determine if two items are equal. Read more
source§

fn ct_ne(&self, other: &Self) -> Choice

Determine if two items are NOT equal. Read more
source§

impl Debug for MontgomeryPoint

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for MontgomeryPoint

source§

fn default() -> MontgomeryPoint

Returns the “default value” for a type. Read more
source§

impl Hash for MontgomeryPoint

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Identity for MontgomeryPoint

source§

fn identity() -> MontgomeryPoint

Return the group identity element, which has order 4.

source§

impl Mul<&MontgomeryPoint> for &Scalar

source§

type Output = MontgomeryPoint

The resulting type after applying the * operator.
source§

fn mul(self, point: &MontgomeryPoint) -> MontgomeryPoint

Performs the * operation. Read more
source§

impl<'b> Mul<&'b MontgomeryPoint> for Scalar

source§

type Output = MontgomeryPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: &'b MontgomeryPoint) -> MontgomeryPoint

Performs the * operation. Read more
source§

impl Mul<&Scalar> for &MontgomeryPoint

Multiply this MontgomeryPoint by a Scalar.

source§

fn mul(self, scalar: &Scalar) -> MontgomeryPoint

Given self \( = u_0(P) \), and a Scalar \(n\), return \( u_0([n]P) \)

source§

type Output = MontgomeryPoint

The resulting type after applying the * operator.
source§

impl<'b> Mul<&'b Scalar> for MontgomeryPoint

source§

type Output = MontgomeryPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: &'b Scalar) -> MontgomeryPoint

Performs the * operation. Read more
source§

impl<'a> Mul<MontgomeryPoint> for &'a Scalar

source§

type Output = MontgomeryPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: MontgomeryPoint) -> MontgomeryPoint

Performs the * operation. Read more
source§

impl Mul<MontgomeryPoint> for Scalar

source§

type Output = MontgomeryPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: MontgomeryPoint) -> MontgomeryPoint

Performs the * operation. Read more
source§

impl<'a> Mul<Scalar> for &'a MontgomeryPoint

source§

type Output = MontgomeryPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Scalar) -> MontgomeryPoint

Performs the * operation. Read more
source§

impl Mul<Scalar> for MontgomeryPoint

source§

type Output = MontgomeryPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Scalar) -> MontgomeryPoint

Performs the * operation. Read more
source§

impl MulAssign<&Scalar> for MontgomeryPoint

source§

fn mul_assign(&mut self, scalar: &Scalar)

Performs the *= operation. Read more
source§

impl MulAssign<Scalar> for MontgomeryPoint

source§

fn mul_assign(&mut self, rhs: Scalar)

Performs the *= operation. Read more
source§

impl PartialEq for MontgomeryPoint

source§

fn eq(&self, other: &MontgomeryPoint) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Zeroize for MontgomeryPoint

source§

fn zeroize(&mut self)

Zero out this object from memory using Rust intrinsics which ensure the zeroization operation is not “optimized away” by the compiler.
source§

impl Copy for MontgomeryPoint

source§

impl Eq for MontgomeryPoint

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IsIdentity for T

source§

fn is_identity(&self) -> bool

Return true if this element is the identity element of the curve.
source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.