mirror of
https://github.com/saymrwulf/curve25519-dalek-source.git
synced 2026-09-04 20:24:10 +00:00
Remove std feature (#459)
All of the existing usages of `std` can be replaced with `alloc`. They are legacy usages from before when liballoc was stabilized.
This commit is contained in:
parent
6b56edf776
commit
1013560fe4
17 changed files with 35 additions and 79 deletions
7
.github/workflows/rust.yml
vendored
7
.github/workflows/rust.yml
vendored
|
|
@ -114,10 +114,9 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
- uses: dtolnay/rust-toolchain@stable
|
||||||
# This filter selects no benchmarks, so we don't run any, only build them.
|
|
||||||
- name: Build u32 bench
|
- name: Build u32 bench
|
||||||
run: env RUSTFLAGS="--cfg curve25519_dalek_bits=\"32\"" cargo bench "nonexistentbenchmark"
|
run: env RUSTFLAGS="--cfg curve25519_dalek_bits=\"32\"" cargo build --benches
|
||||||
- name: Build u64 bench
|
- name: Build u64 bench
|
||||||
run: env RUSTFLAGS="--cfg curve25519_dalek_bits=\"64\"" cargo bench "nonexistentbenchmark"
|
run: env RUSTFLAGS="--cfg curve25519_dalek_bits=\"64\"" cargo build --benches
|
||||||
- name: Build default (host native) bench
|
- name: Build default (host native) bench
|
||||||
run: cargo bench "nonexistentbenchmark"
|
run: cargo build --benches
|
||||||
|
|
|
||||||
|
|
@ -36,11 +36,12 @@ bincode = "1"
|
||||||
criterion = { version = "0.4.0", features = ["html_reports"] }
|
criterion = { version = "0.4.0", features = ["html_reports"] }
|
||||||
hex = "0.4.2"
|
hex = "0.4.2"
|
||||||
rand = "0.8"
|
rand = "0.8"
|
||||||
rand_core = { version = "0.6", default-features = false }
|
rand_core = { version = "0.6", default-features = false, features = ["getrandom"] }
|
||||||
|
|
||||||
[[bench]]
|
[[bench]]
|
||||||
name = "dalek_benchmarks"
|
name = "dalek_benchmarks"
|
||||||
harness = false
|
harness = false
|
||||||
|
required-features = ["rand_core"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
cfg-if = "1"
|
cfg-if = "1"
|
||||||
|
|
@ -56,8 +57,7 @@ fiat-crypto = { version = "0.1.6", optional = true}
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
nightly = ["subtle/nightly"]
|
nightly = ["subtle/nightly"]
|
||||||
default = ["std"]
|
default = ["alloc"]
|
||||||
std = ["alloc", "subtle/std", "rand_core/std"]
|
|
||||||
alloc = ["zeroize/alloc"]
|
alloc = ["zeroize/alloc"]
|
||||||
|
|
||||||
# fiat-crypto backend with formally-verified field arithmetic
|
# fiat-crypto backend with formally-verified field arithmetic
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@
|
||||||
|
|
||||||
#![allow(non_snake_case)]
|
#![allow(non_snake_case)]
|
||||||
|
|
||||||
|
use alloc::vec::Vec;
|
||||||
|
|
||||||
use core::borrow::Borrow;
|
use core::borrow::Borrow;
|
||||||
use core::cmp::Ordering;
|
use core::cmp::Ordering;
|
||||||
|
|
||||||
|
|
@ -18,9 +20,6 @@ use crate::edwards::EdwardsPoint;
|
||||||
use crate::scalar::Scalar;
|
use crate::scalar::Scalar;
|
||||||
use crate::traits::VartimeMultiscalarMul;
|
use crate::traits::VartimeMultiscalarMul;
|
||||||
|
|
||||||
#[allow(unused_imports)]
|
|
||||||
use crate::prelude::*;
|
|
||||||
|
|
||||||
/// Implements a version of Pippenger's algorithm.
|
/// Implements a version of Pippenger's algorithm.
|
||||||
///
|
///
|
||||||
/// The algorithm works as follows:
|
/// The algorithm works as follows:
|
||||||
|
|
@ -62,8 +61,6 @@ use crate::prelude::*;
|
||||||
/// This algorithm is adapted from section 4 of <https://eprint.iacr.org/2012/549.pdf>.
|
/// This algorithm is adapted from section 4 of <https://eprint.iacr.org/2012/549.pdf>.
|
||||||
pub struct Pippenger;
|
pub struct Pippenger;
|
||||||
|
|
||||||
#[cfg(feature = "alloc")]
|
|
||||||
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
|
|
||||||
impl VartimeMultiscalarMul for Pippenger {
|
impl VartimeMultiscalarMul for Pippenger {
|
||||||
type Point = EdwardsPoint;
|
type Point = EdwardsPoint;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@
|
||||||
|
|
||||||
#![allow(non_snake_case)]
|
#![allow(non_snake_case)]
|
||||||
|
|
||||||
|
use alloc::vec::Vec;
|
||||||
|
|
||||||
use core::borrow::Borrow;
|
use core::borrow::Borrow;
|
||||||
use core::cmp::Ordering;
|
use core::cmp::Ordering;
|
||||||
|
|
||||||
|
|
@ -23,9 +25,6 @@ use crate::traits::Identity;
|
||||||
use crate::traits::VartimePrecomputedMultiscalarMul;
|
use crate::traits::VartimePrecomputedMultiscalarMul;
|
||||||
use crate::window::{NafLookupTable5, NafLookupTable8};
|
use crate::window::{NafLookupTable5, NafLookupTable8};
|
||||||
|
|
||||||
#[allow(unused_imports)]
|
|
||||||
use crate::prelude::*;
|
|
||||||
|
|
||||||
#[allow(missing_docs)]
|
#[allow(missing_docs)]
|
||||||
pub struct VartimePrecomputedStraus {
|
pub struct VartimePrecomputedStraus {
|
||||||
static_lookup_tables: Vec<NafLookupTable8<AffineNielsPoint>>,
|
static_lookup_tables: Vec<NafLookupTable8<AffineNielsPoint>>,
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,8 @@
|
||||||
|
|
||||||
#![allow(non_snake_case)]
|
#![allow(non_snake_case)]
|
||||||
|
|
||||||
|
use alloc::vec::Vec;
|
||||||
|
|
||||||
use core::borrow::Borrow;
|
use core::borrow::Borrow;
|
||||||
use core::cmp::Ordering;
|
use core::cmp::Ordering;
|
||||||
|
|
||||||
|
|
@ -21,9 +23,6 @@ use crate::scalar::Scalar;
|
||||||
use crate::traits::MultiscalarMul;
|
use crate::traits::MultiscalarMul;
|
||||||
use crate::traits::VartimeMultiscalarMul;
|
use crate::traits::VartimeMultiscalarMul;
|
||||||
|
|
||||||
#[allow(unused_imports)]
|
|
||||||
use crate::prelude::*;
|
|
||||||
|
|
||||||
/// Perform multiscalar multiplication by the interleaved window
|
/// Perform multiscalar multiplication by the interleaved window
|
||||||
/// method, also known as Straus' method (since it was apparently
|
/// method, also known as Straus' method (since it was apparently
|
||||||
/// [first published][solution] by Straus in 1964, as a solution to [a
|
/// [first published][solution] by Straus in 1964, as a solution to [a
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
use crate::traits::Identity;
|
use crate::traits::Identity;
|
||||||
|
|
||||||
use std::ops::{Add, Neg, Sub};
|
use core::ops::{Add, Neg, Sub};
|
||||||
|
|
||||||
use subtle::Choice;
|
use subtle::Choice;
|
||||||
use subtle::ConditionallySelectable;
|
use subtle::ConditionallySelectable;
|
||||||
|
|
|
||||||
|
|
@ -14,13 +14,10 @@ pub mod variable_base;
|
||||||
pub mod vartime_double_base;
|
pub mod vartime_double_base;
|
||||||
|
|
||||||
#[cfg(feature = "alloc")]
|
#[cfg(feature = "alloc")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
|
|
||||||
pub mod straus;
|
pub mod straus;
|
||||||
|
|
||||||
#[cfg(feature = "alloc")]
|
#[cfg(feature = "alloc")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
|
|
||||||
pub mod precomputed_straus;
|
pub mod precomputed_straus;
|
||||||
|
|
||||||
#[cfg(feature = "alloc")]
|
#[cfg(feature = "alloc")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
|
|
||||||
pub mod pippenger;
|
pub mod pippenger;
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,8 @@
|
||||||
|
|
||||||
#![allow(non_snake_case)]
|
#![allow(non_snake_case)]
|
||||||
|
|
||||||
|
use alloc::vec::Vec;
|
||||||
|
|
||||||
use core::borrow::Borrow;
|
use core::borrow::Borrow;
|
||||||
use core::cmp::Ordering;
|
use core::cmp::Ordering;
|
||||||
|
|
||||||
|
|
@ -17,16 +19,11 @@ use crate::edwards::EdwardsPoint;
|
||||||
use crate::scalar::Scalar;
|
use crate::scalar::Scalar;
|
||||||
use crate::traits::{Identity, VartimeMultiscalarMul};
|
use crate::traits::{Identity, VartimeMultiscalarMul};
|
||||||
|
|
||||||
#[allow(unused_imports)]
|
|
||||||
use crate::prelude::*;
|
|
||||||
|
|
||||||
/// Implements a version of Pippenger's algorithm.
|
/// Implements a version of Pippenger's algorithm.
|
||||||
///
|
///
|
||||||
/// See the documentation in the serial `scalar_mul::pippenger` module for details.
|
/// See the documentation in the serial `scalar_mul::pippenger` module for details.
|
||||||
pub struct Pippenger;
|
pub struct Pippenger;
|
||||||
|
|
||||||
#[cfg(feature = "alloc")]
|
|
||||||
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
|
|
||||||
impl VartimeMultiscalarMul for Pippenger {
|
impl VartimeMultiscalarMul for Pippenger {
|
||||||
type Point = EdwardsPoint;
|
type Point = EdwardsPoint;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@
|
||||||
|
|
||||||
#![allow(non_snake_case)]
|
#![allow(non_snake_case)]
|
||||||
|
|
||||||
|
use alloc::vec::Vec;
|
||||||
|
|
||||||
use core::borrow::Borrow;
|
use core::borrow::Borrow;
|
||||||
use core::cmp::Ordering;
|
use core::cmp::Ordering;
|
||||||
|
|
||||||
|
|
@ -21,9 +23,6 @@ use crate::traits::Identity;
|
||||||
use crate::traits::VartimePrecomputedMultiscalarMul;
|
use crate::traits::VartimePrecomputedMultiscalarMul;
|
||||||
use crate::window::{NafLookupTable5, NafLookupTable8};
|
use crate::window::{NafLookupTable5, NafLookupTable8};
|
||||||
|
|
||||||
#[allow(unused_imports)]
|
|
||||||
use crate::prelude::*;
|
|
||||||
|
|
||||||
pub struct VartimePrecomputedStraus {
|
pub struct VartimePrecomputedStraus {
|
||||||
static_lookup_tables: Vec<NafLookupTable8<CachedPoint>>,
|
static_lookup_tables: Vec<NafLookupTable8<CachedPoint>>,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@
|
||||||
|
|
||||||
#![allow(non_snake_case)]
|
#![allow(non_snake_case)]
|
||||||
|
|
||||||
|
use alloc::vec::Vec;
|
||||||
|
|
||||||
use core::borrow::Borrow;
|
use core::borrow::Borrow;
|
||||||
use core::cmp::Ordering;
|
use core::cmp::Ordering;
|
||||||
|
|
||||||
|
|
@ -22,9 +24,6 @@ use crate::scalar::Scalar;
|
||||||
use crate::traits::{Identity, MultiscalarMul, VartimeMultiscalarMul};
|
use crate::traits::{Identity, MultiscalarMul, VartimeMultiscalarMul};
|
||||||
use crate::window::{LookupTable, NafLookupTable5};
|
use crate::window::{LookupTable, NafLookupTable5};
|
||||||
|
|
||||||
#[allow(unused_imports)]
|
|
||||||
use crate::prelude::*;
|
|
||||||
|
|
||||||
/// Multiscalar multiplication using interleaved window / Straus'
|
/// Multiscalar multiplication using interleaved window / Straus'
|
||||||
/// method. See the `Straus` struct in the serial backend for more
|
/// method. See the `Straus` struct in the serial backend for more
|
||||||
/// details.
|
/// details.
|
||||||
|
|
|
||||||
|
|
@ -129,9 +129,6 @@ use crate::window::LookupTableRadix256;
|
||||||
use crate::window::LookupTableRadix32;
|
use crate::window::LookupTableRadix32;
|
||||||
use crate::window::LookupTableRadix64;
|
use crate::window::LookupTableRadix64;
|
||||||
|
|
||||||
#[allow(unused_imports)]
|
|
||||||
use crate::prelude::*;
|
|
||||||
|
|
||||||
use crate::traits::BasepointTable;
|
use crate::traits::BasepointTable;
|
||||||
use crate::traits::ValidityCheck;
|
use crate::traits::ValidityCheck;
|
||||||
use crate::traits::{Identity, IsIdentity};
|
use crate::traits::{Identity, IsIdentity};
|
||||||
|
|
@ -710,7 +707,6 @@ impl<'a, 'b> Mul<&'b EdwardsPoint> for &'a Scalar {
|
||||||
// forward to a specific backend implementation.
|
// forward to a specific backend implementation.
|
||||||
|
|
||||||
#[cfg(feature = "alloc")]
|
#[cfg(feature = "alloc")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
|
|
||||||
impl MultiscalarMul for EdwardsPoint {
|
impl MultiscalarMul for EdwardsPoint {
|
||||||
type Point = EdwardsPoint;
|
type Point = EdwardsPoint;
|
||||||
|
|
||||||
|
|
@ -743,7 +739,6 @@ impl MultiscalarMul for EdwardsPoint {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "alloc")]
|
#[cfg(feature = "alloc")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
|
|
||||||
impl VartimeMultiscalarMul for EdwardsPoint {
|
impl VartimeMultiscalarMul for EdwardsPoint {
|
||||||
type Point = EdwardsPoint;
|
type Point = EdwardsPoint;
|
||||||
|
|
||||||
|
|
@ -783,11 +778,9 @@ impl VartimeMultiscalarMul for EdwardsPoint {
|
||||||
// decouple stability of the inner type from the stability of the
|
// decouple stability of the inner type from the stability of the
|
||||||
// outer type.
|
// outer type.
|
||||||
#[cfg(feature = "alloc")]
|
#[cfg(feature = "alloc")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
|
|
||||||
pub struct VartimeEdwardsPrecomputation(scalar_mul::precomputed_straus::VartimePrecomputedStraus);
|
pub struct VartimeEdwardsPrecomputation(scalar_mul::precomputed_straus::VartimePrecomputedStraus);
|
||||||
|
|
||||||
#[cfg(feature = "alloc")]
|
#[cfg(feature = "alloc")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
|
|
||||||
impl VartimePrecomputedMultiscalarMul for VartimeEdwardsPrecomputation {
|
impl VartimePrecomputedMultiscalarMul for VartimeEdwardsPrecomputation {
|
||||||
type Point = EdwardsPoint;
|
type Point = EdwardsPoint;
|
||||||
|
|
||||||
|
|
@ -1126,6 +1119,9 @@ mod test {
|
||||||
use crate::scalar::Scalar;
|
use crate::scalar::Scalar;
|
||||||
use subtle::ConditionallySelectable;
|
use subtle::ConditionallySelectable;
|
||||||
|
|
||||||
|
#[cfg(feature = "alloc")]
|
||||||
|
use alloc::vec::Vec;
|
||||||
|
|
||||||
/// X coordinate of the basepoint.
|
/// X coordinate of the basepoint.
|
||||||
/// = 15112221349535400772501151409588531511454012693041857206046113283949847762202
|
/// = 15112221349535400772501151409588531511454012693041857206046113283949847762202
|
||||||
static BASE_X_COORD_BYTES: [u8; 32] = [
|
static BASE_X_COORD_BYTES: [u8; 32] = [
|
||||||
|
|
|
||||||
|
|
@ -167,7 +167,6 @@ impl FieldElement {
|
||||||
///
|
///
|
||||||
/// When an input `FieldElement` is zero, its value is unchanged.
|
/// When an input `FieldElement` is zero, its value is unchanged.
|
||||||
#[cfg(feature = "alloc")]
|
#[cfg(feature = "alloc")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
|
|
||||||
pub fn batch_invert(inputs: &mut [FieldElement]) {
|
pub fn batch_invert(inputs: &mut [FieldElement]) {
|
||||||
// Montgomery’s Trick and Fast Implementation of Masked AES
|
// Montgomery’s Trick and Fast Implementation of Masked AES
|
||||||
// Genelle, Prouff and Quisquater
|
// Genelle, Prouff and Quisquater
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,8 @@
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate alloc;
|
extern crate alloc;
|
||||||
|
|
||||||
#[cfg(feature = "std")]
|
// TODO: move std-dependent tests to `tests/`
|
||||||
|
#[cfg(test)]
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate std;
|
extern crate std;
|
||||||
|
|
||||||
|
|
@ -78,10 +79,6 @@ pub mod backend;
|
||||||
#[cfg(not(docsrs))]
|
#[cfg(not(docsrs))]
|
||||||
pub(crate) mod backend;
|
pub(crate) mod backend;
|
||||||
|
|
||||||
// Crate-local prelude (for alloc-dependent features like `Vec`)
|
|
||||||
|
|
||||||
pub(crate) mod prelude;
|
|
||||||
|
|
||||||
// Generic code for window lookups
|
// Generic code for window lookups
|
||||||
pub(crate) mod window;
|
pub(crate) mod window;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -374,6 +374,9 @@ mod test {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::constants;
|
use crate::constants;
|
||||||
|
|
||||||
|
#[cfg(feature = "alloc")]
|
||||||
|
use alloc::vec::Vec;
|
||||||
|
|
||||||
#[cfg(feature = "rand_core")]
|
#[cfg(feature = "rand_core")]
|
||||||
use rand_core::OsRng;
|
use rand_core::OsRng;
|
||||||
|
|
||||||
|
|
@ -480,9 +483,9 @@ mod test {
|
||||||
];
|
];
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[cfg(feature = "alloc")] // Vec
|
#[cfg(feature = "alloc")]
|
||||||
fn montgomery_elligator_correct() {
|
fn montgomery_elligator_correct() {
|
||||||
let bytes: alloc::vec::Vec<u8> = (0u8..32u8).collect();
|
let bytes: Vec<u8> = (0u8..32u8).collect();
|
||||||
let bits_in: [u8; 32] = (&bytes[..]).try_into().expect("Range invariant broken");
|
let bits_in: [u8; 32] = (&bytes[..]).try_into().expect("Range invariant broken");
|
||||||
|
|
||||||
let fe = FieldElement::from_bytes(&bits_in);
|
let fe = FieldElement::from_bytes(&bits_in);
|
||||||
|
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
||||||
// -*- 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>
|
|
||||||
|
|
||||||
//! Crate-local prelude (for alloc-dependent features like `Vec`)
|
|
||||||
|
|
||||||
// TODO: switch to alloc::prelude
|
|
||||||
#[cfg(all(feature = "alloc", not(feature = "std")))]
|
|
||||||
pub use alloc::vec::Vec;
|
|
||||||
|
|
||||||
#[cfg(feature = "std")]
|
|
||||||
pub use std::vec::Vec;
|
|
||||||
|
|
@ -158,6 +158,9 @@
|
||||||
//! [ristretto_main]:
|
//! [ristretto_main]:
|
||||||
//! https://ristretto.group/
|
//! https://ristretto.group/
|
||||||
|
|
||||||
|
#[cfg(feature = "alloc")]
|
||||||
|
use alloc::vec::Vec;
|
||||||
|
|
||||||
use core::borrow::Borrow;
|
use core::borrow::Borrow;
|
||||||
use core::fmt::Debug;
|
use core::fmt::Debug;
|
||||||
use core::iter::Sum;
|
use core::iter::Sum;
|
||||||
|
|
@ -186,9 +189,6 @@ use zeroize::Zeroize;
|
||||||
use crate::edwards::EdwardsBasepointTable;
|
use crate::edwards::EdwardsBasepointTable;
|
||||||
use crate::edwards::EdwardsPoint;
|
use crate::edwards::EdwardsPoint;
|
||||||
|
|
||||||
#[allow(unused_imports)]
|
|
||||||
use crate::prelude::*;
|
|
||||||
|
|
||||||
use crate::scalar::Scalar;
|
use crate::scalar::Scalar;
|
||||||
|
|
||||||
use crate::traits::BasepointTable;
|
use crate::traits::BasepointTable;
|
||||||
|
|
@ -525,7 +525,6 @@ impl RistrettoPoint {
|
||||||
/// # }
|
/// # }
|
||||||
/// ```
|
/// ```
|
||||||
#[cfg(feature = "alloc")]
|
#[cfg(feature = "alloc")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
|
|
||||||
pub fn double_and_compress_batch<'a, I>(points: I) -> Vec<CompressedRistretto>
|
pub fn double_and_compress_batch<'a, I>(points: I) -> Vec<CompressedRistretto>
|
||||||
where
|
where
|
||||||
I: IntoIterator<Item = &'a RistrettoPoint>,
|
I: IntoIterator<Item = &'a RistrettoPoint>,
|
||||||
|
|
@ -932,7 +931,6 @@ define_mul_variants!(LHS = Scalar, RHS = RistrettoPoint, Output = RistrettoPoint
|
||||||
// forward to the EdwardsPoint implementations.
|
// forward to the EdwardsPoint implementations.
|
||||||
|
|
||||||
#[cfg(feature = "alloc")]
|
#[cfg(feature = "alloc")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
|
|
||||||
impl MultiscalarMul for RistrettoPoint {
|
impl MultiscalarMul for RistrettoPoint {
|
||||||
type Point = RistrettoPoint;
|
type Point = RistrettoPoint;
|
||||||
|
|
||||||
|
|
@ -949,7 +947,6 @@ impl MultiscalarMul for RistrettoPoint {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "alloc")]
|
#[cfg(feature = "alloc")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
|
|
||||||
impl VartimeMultiscalarMul for RistrettoPoint {
|
impl VartimeMultiscalarMul for RistrettoPoint {
|
||||||
type Point = RistrettoPoint;
|
type Point = RistrettoPoint;
|
||||||
|
|
||||||
|
|
@ -970,11 +967,9 @@ impl VartimeMultiscalarMul for RistrettoPoint {
|
||||||
// decouple stability of the inner type from the stability of the
|
// decouple stability of the inner type from the stability of the
|
||||||
// outer type.
|
// outer type.
|
||||||
#[cfg(feature = "alloc")]
|
#[cfg(feature = "alloc")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
|
|
||||||
pub struct VartimeRistrettoPrecomputation(scalar_mul::precomputed_straus::VartimePrecomputedStraus);
|
pub struct VartimeRistrettoPrecomputation(scalar_mul::precomputed_straus::VartimePrecomputedStraus);
|
||||||
|
|
||||||
#[cfg(feature = "alloc")]
|
#[cfg(feature = "alloc")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
|
|
||||||
impl VartimePrecomputedMultiscalarMul for VartimeRistrettoPrecomputation {
|
impl VartimePrecomputedMultiscalarMul for VartimeRistrettoPrecomputation {
|
||||||
type Point = RistrettoPoint;
|
type Point = RistrettoPoint;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -150,9 +150,6 @@ use core::ops::{Add, AddAssign};
|
||||||
use core::ops::{Mul, MulAssign};
|
use core::ops::{Mul, MulAssign};
|
||||||
use core::ops::{Sub, SubAssign};
|
use core::ops::{Sub, SubAssign};
|
||||||
|
|
||||||
#[allow(unused_imports)]
|
|
||||||
use crate::prelude::*;
|
|
||||||
|
|
||||||
use cfg_if::cfg_if;
|
use cfg_if::cfg_if;
|
||||||
|
|
||||||
#[cfg(feature = "rand_core")]
|
#[cfg(feature = "rand_core")]
|
||||||
|
|
@ -797,7 +794,6 @@ impl Scalar {
|
||||||
/// # }
|
/// # }
|
||||||
/// ```
|
/// ```
|
||||||
#[cfg(feature = "alloc")]
|
#[cfg(feature = "alloc")]
|
||||||
#[cfg_attr(docsrs, doc(cfg(any(feature = "alloc", feature = "std"))))]
|
|
||||||
pub fn batch_invert(inputs: &mut [Scalar]) -> Scalar {
|
pub fn batch_invert(inputs: &mut [Scalar]) -> Scalar {
|
||||||
// This code is essentially identical to the FieldElement
|
// This code is essentially identical to the FieldElement
|
||||||
// implementation, and is documented there. Unfortunately,
|
// implementation, and is documented there. Unfortunately,
|
||||||
|
|
@ -1257,6 +1253,9 @@ mod test {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::constants;
|
use crate::constants;
|
||||||
|
|
||||||
|
#[cfg(feature = "alloc")]
|
||||||
|
use alloc::vec::Vec;
|
||||||
|
|
||||||
/// x = 2238329342913194256032495932344128051776374960164957527413114840482143558222
|
/// x = 2238329342913194256032495932344128051776374960164957527413114840482143558222
|
||||||
pub static X: Scalar = Scalar {
|
pub static X: Scalar = Scalar {
|
||||||
bytes: [
|
bytes: [
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue