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.
vectorcurve25519_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.