2017-11-17 00:07:55 +00:00
|
|
|
// -*- mode: rust; -*-
|
|
|
|
|
//
|
|
|
|
|
// This file is part of curve25519-dalek.
|
2021-03-25 04:10:55 +00:00
|
|
|
// Copyright (c) 2016-2021 isis lovecruft
|
|
|
|
|
// Copyright (c) 2016-2019 Henry de Valence
|
2017-11-17 00:07:55 +00:00
|
|
|
// See LICENSE for licensing information.
|
|
|
|
|
//
|
|
|
|
|
// Authors:
|
2021-03-25 04:10:55 +00:00
|
|
|
// - isis agora lovecruft <isis@patternsinthevoid.net>
|
2017-11-17 00:07:55 +00:00
|
|
|
// - Henry de Valence <hdevalence@hdevalence.ca>
|
|
|
|
|
|
2022-11-26 11:34:48 +00:00
|
|
|
//! **INTERNALS:** Pluggable implementations for different architectures.
|
2017-11-17 00:07:55 +00:00
|
|
|
//!
|
2018-11-30 21:18:55 +00:00
|
|
|
//! The backend code is split into two parts: a serial backend,
|
|
|
|
|
//! and a vector backend.
|
2017-11-17 00:07:55 +00:00
|
|
|
//!
|
2018-11-30 21:18:55 +00:00
|
|
|
//! 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.
|
2017-11-17 00:07:55 +00:00
|
|
|
|
2018-11-09 06:37:35 +00:00
|
|
|
pub mod serial;
|
2017-11-17 00:07:55 +00:00
|
|
|
|
2022-12-09 08:42:52 +00:00
|
|
|
#[cfg(any(curve25519_dalek_backend = "simd", docsrs))]
|
2018-11-09 06:37:35 +00:00
|
|
|
pub mod vector;
|