backend:: avx2:: edwards
Parallel Edwards Arithmetic for Curve25519.
This module currently has two point types:
ExtendedPoint: a point stored in vector-friendly format, with vectorized doubling and addition;
CachedPoint: used for readdition.
Details on the formulas can be found in the documentation for the
This API is designed to be safe: vectorized points can only be created from serial points (which do validation on decompression), and operations on valid points return valid points, so invalid point states should be unrepresentable.
This design goal is met, with one exception: the
implementation for the
CachedPoint performs a lazy negation, so
that subtraction can be efficiently implemented as a negation and
an addition. Repeatedly negating a
CachedPoint will cause its
coefficients to grow and eventually overflow. Repeatedly negating
a point should not be necessary anyways.
A cached point with some precomputed variables used for readdition.
A point on Curve25519, using parallel Edwards formulas for curve operations.