[][src]Struct curve25519_dalek::edwards::EdwardsBasepointTable

pub struct EdwardsBasepointTable(pub(crate) [LookupTable<AffineNielsPoint>; 32]);
[]

A precomputed table of multiples of a basepoint, for accelerating fixed-base scalar multiplication. One table, for the Ed25519 basepoint, is provided in the constants module.

The basepoint tables are reasonably large (30KB), so they should probably be boxed.

Methods

impl EdwardsBasepointTable[src][]

fn basepoint_mul(&self, scalar: &Scalar) -> EdwardsPoint[src][]

The computation uses Pippeneger's algorithm, as described on page 13 of the Ed25519 paper. Write the scalar aa in radix 1616 with coefficients in [8,8)[-8,8), i.e., a=a0+a1161++a631663, a = a_0 + a_1 16^1 + \cdots + a_{63} 16^{63}, with 8ai<8-8 \leq a_i < 8, 8a638-8 \leq a_{63} \leq 8. Then aB=a0B+a1161B++a631663B. a B = a_0 B + a_1 16^1 B + \cdots + a_{63} 16^{63} B. Grouping even and odd coefficients gives aB=a0160B+a2162B++a621662B+a1161B+a3163B++a631663B=(a0160B+a2162B++a621662B)+16(a1160B+a3162B++a631662B). \begin{aligned} a B = \quad a_0 16^0 B +& a_2 16^2 B + \cdots + a_{62} 16^{62} B \\ + a_1 16^1 B +& a_3 16^3 B + \cdots + a_{63} 16^{63} B \\ = \quad(a_0 16^0 B +& a_2 16^2 B + \cdots + a_{62} 16^{62} B) \\ + 16(a_1 16^0 B +& a_3 16^2 B + \cdots + a_{63} 16^{62} B). \\ \end{aligned} For each i=031i = 0 \ldots 31, we create a lookup table of [162iB,,8162iB], [16^{2i} B, \ldots, 8\cdot16^{2i} B], and use it to select x162iB x \cdot 16^{2i} \cdot B in constant time.

The radix-1616 representation requires that the scalar is bounded by 22552^{255}, which is always the case.

impl EdwardsBasepointTable[src][]

pub fn create(basepoint: &EdwardsPoint) -> EdwardsBasepointTable[src][]

Create a table of precomputed multiples of basepoint.

pub fn basepoint(&self) -> EdwardsPoint[src][]

Get the basepoint for this table as an EdwardsPoint.

Trait Implementations

impl Clone for EdwardsBasepointTable[src][+]

impl Debug for EdwardsBasepointTable[src][+]

impl<'a, 'b> Mul<&'a EdwardsBasepointTable> for &'b Scalar[src][+]

type Output = EdwardsPoint

The resulting type after applying the * operator.

fn mul(self, basepoint_table: &'a EdwardsBasepointTable) -> EdwardsPoint[src][]

Construct an EdwardsPoint from a Scalar aa by computing the multiple aBaB of this basepoint BB.

impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsBasepointTable[src][+]

type Output = EdwardsPoint

The resulting type after applying the * operator.

fn mul(self, scalar: &'b Scalar) -> EdwardsPoint[src][]

Construct an EdwardsPoint from a Scalar aa by computing the multiple aBaB of this basepoint BB.

Auto Trait Implementations

impl RefUnwindSafe for EdwardsBasepointTable

impl Send for EdwardsBasepointTable

impl Sync for EdwardsBasepointTable

impl Unpin for EdwardsBasepointTable

impl UnwindSafe for EdwardsBasepointTable

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>, 
[+]

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

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

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

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

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

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

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.