mirror of
https://github.com/saymrwulf/curve25519-dalek-source.git
synced 2026-09-04 20:24:10 +00:00
41 lines
1.6 KiB
Rust
41 lines
1.6 KiB
Rust
// -*- mode: rust; -*-
|
|
//
|
|
// This file is part of curve25519-dalek.
|
|
// Copyright (c) 2016-2021 isis lovecruft
|
|
// Copyright (c) 2016-2019 Henry de Valence
|
|
// See LICENSE for licensing information.
|
|
//
|
|
// Authors:
|
|
// - isis agora lovecruft <isis@patternsinthevoid.net>
|
|
// - Henry de Valence <hdevalence@hdevalence.ca>
|
|
|
|
//! 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.
|
|
|
|
pub mod serial;
|
|
|
|
#[cfg(any(feature = "simd_backend", docsrs))]
|
|
#[cfg_attr(docsrs, doc(cfg(feature = "simd_backend")))]
|
|
pub mod vector;
|