[−][src]Struct curve25519_dalek::edwards::EdwardsBasepointTable
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 \(a\) in radix \(16\) with coefficients in \([-8,8)\), i.e., $$ a = a_0 + a_1 16^1 + \cdots + a_{63} 16^{63}, $$ with \(-8 \leq a_i < 8\), \(-8 \leq a_{63} \leq 8\). Then $$ a B = a_0 B + a_1 16^1 B + \cdots + a_{63} 16^{63} B. $$ Grouping even and odd coefficients gives $$ \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 = 0 \ldots 31\), we create a lookup table of $$ [16^{2i} B, \ldots, 8\cdot16^{2i} B], $$ and use it to select \( x \cdot 16^{2i} \cdot B \) in constant time.
The radix-\(16\) representation requires that the scalar is bounded by \(2^{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]
fn clone(&self) -> EdwardsBasepointTable
[src]
fn clone_from(&mut self, source: &Self)
1.0.0[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
\(a\) by
computing the multiple \(aB\) of this basepoint \(B\).
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
\(a\) by
computing the multiple \(aB\) of this basepoint \(B\).
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]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T, U> Cast<U> for T where
U: FromCast<T>,
U: FromCast<T>,
fn cast(self) -> U
impl<T> From<T> for T
[src]
impl<T> FromBits<T> for T
fn from_bits(t: T) -> T
impl<T> FromCast<T> for T
fn from_cast(t: T) -> T
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> IntoBits<U> for T where
U: FromBits<T>,
U: FromBits<T>,
fn into_bits(self) -> U
impl<T> Same<T> for T
type Output = T
Should always be Self
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = !
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,