Expand description
INTERNALS: Pluggable implementations for different architectures.
The backend code is split into two parts: a serial backend, and a vector backend.
The serial
backend contains 32- and 64-bit implementations of
field arithmetic and scalar arithmetic, as well as implementations
of point operations using the mixed-model strategy (passing
between different curve models depending on the operation).
The vector
backend contains implementations of vectorized
field arithmetic, used to implement point operations using a novel
implementation strategy derived from parallel formulas of Hisil,
Wong, Carter, and Dawson.
Because the two strategies give rise to different curve models,
it’s not possible to reuse exactly the same scalar multiplication
code (or to write it generically), so both serial and vector
backends contain matching implementations of scalar multiplication
algorithms. These are intended to be selected by a #[cfg]
-based
type alias.
The vector
backend is selected by the simd_backend
cargo
feature; it uses the serial
backend for non-vectorized operations.
Modules§
- Serial implementations of field, scalar, point arithmetic.
- vector
curve25519_dalek_backend="simd"
Vectorized implementations of field and point operations, using a modification of the 4-way parallel formulas of Hisil, Wong, Carter, and Dawson.
Functions§
- Perform constant-time, variable-base scalar multiplication.
- Compute \(aA + bB\) in variable time, where \(B\) is the Ed25519 basepoint.