Differentiate no-std from alloc within tests/no-std

Fixes `no-std` builds for packages which intended to be `no-std` (without
`alloc`).

Updates a variety of MSRVs to 1.73 due to `flexible-transcript` no longer using
`std-shims` to achieve 1.66 (as `std-shims` requires `alloc`). A future
improvement would be for `std-shims` to have an `alloc` feature and only
provide MSRV shims without it.
This commit is contained in:
Luke Parker
2025-08-29 01:07:11 -04:00
parent 0c71b6fc4d
commit 12cfa6b2a5
17 changed files with 71 additions and 43 deletions

View File

@@ -7,7 +7,7 @@ repository = "https://github.com/serai-dex/serai/tree/develop/crypto/ciphersuite
authors = ["Luke Parker <lukeparker5132@gmail.com>"]
keywords = ["ciphersuite", "ff", "group"]
edition = "2021"
rust-version = "1.66"
rust-version = "1.73"
[package.metadata.docs.rs]
all-features = true

View File

@@ -7,7 +7,7 @@ repository = "https://github.com/serai-dex/serai/tree/develop/crypto/dalek-ff-gr
authors = ["Luke Parker <lukeparker5132@gmail.com>"]
keywords = ["curve25519", "ed25519", "ristretto", "dalek", "group"]
edition = "2021"
rust-version = "1.66"
rust-version = "1.73"
[package.metadata.docs.rs]
all-features = true
@@ -33,7 +33,7 @@ ciphersuite = { path = "../ciphersuite", default-features = false }
crypto-bigint = { version = "0.5", default-features = false, features = ["zeroize"] }
curve25519-dalek = { version = ">= 4.0, < 4.2", default-features = false, features = ["alloc", "zeroize", "digest", "group", "precomputed-tables"] }
curve25519-dalek = { version = ">= 4.0, < 4.2", default-features = false, features = ["zeroize", "digest", "group", "precomputed-tables"] }
[dev-dependencies]
hex = "0.4"
@@ -41,6 +41,6 @@ rand_core = { version = "0.6", default-features = false, features = ["std"] }
ff-group-tests = { path = "../ff-group-tests" }
[features]
alloc = ["zeroize/alloc", "ciphersuite/alloc"]
alloc = ["zeroize/alloc", "ciphersuite/alloc", "curve25519-dalek/alloc"]
std = ["alloc", "zeroize/std", "subtle/std", "rand_core/std", "digest/std", "sha2/std", "ciphersuite/std"]
default = ["std"]

View File

@@ -29,7 +29,10 @@ macro_rules! dalek_curve {
}
fn hash_to_F(dst: &[u8], data: &[u8]) -> Self::F {
Scalar::from_hash(Sha512::new_with_prefix(&[dst, data].concat()))
let mut digest = Sha512::new();
digest.update(dst);
digest.update(data);
Scalar::from_hash(digest)
}
}
};

View File

@@ -7,7 +7,7 @@ repository = "https://github.com/serai-dex/serai/tree/develop/crypto/dkg"
authors = ["Luke Parker <lukeparker5132@gmail.com>"]
keywords = ["dkg", "multisig", "threshold", "ff", "group"]
edition = "2021"
rust-version = "1.66"
rust-version = "1.73"
[package.metadata.docs.rs]
all-features = true

View File

@@ -7,7 +7,7 @@ repository = "https://github.com/serai-dex/serai/tree/develop/crypto/dkg/dealer"
authors = ["Luke Parker <lukeparker5132@gmail.com>"]
keywords = ["dkg", "multisig", "threshold", "ff", "group"]
edition = "2021"
rust-version = "1.66"
rust-version = "1.73"
[package.metadata.docs.rs]
all-features = true

View File

@@ -7,7 +7,7 @@ repository = "https://github.com/serai-dex/serai/tree/develop/crypto/dkg/recover
authors = ["Luke Parker <lukeparker5132@gmail.com>"]
keywords = ["dkg", "multisig", "threshold", "ff", "group"]
edition = "2021"
rust-version = "1.66"
rust-version = "1.73"
[package.metadata.docs.rs]
all-features = true

View File

@@ -71,7 +71,11 @@ impl Ciphersuite for Ed448 {
}
fn hash_to_F(dst: &[u8], data: &[u8]) -> Self::F {
let digest = Self::H::digest([dst, data].concat());
let mut digest = Self::H::new();
Update::update(&mut digest, dst);
Update::update(&mut digest, data);
let digest = digest.finalize();
let mut wide_scalar = [0; 114];
wide_scalar.copy_from_slice(digest.as_ref());
Scalar::from_uniform_bytes(&wide_scalar)

View File

@@ -94,9 +94,10 @@ impl ciphersuite::Ciphersuite for Embedwards25519 {
/// substrings of each other.
fn hash_to_F(dst: &[u8], data: &[u8]) -> Self::F {
use blake2::Digest;
<Scalar as FromUniformBytes<64>>::from_uniform_bytes(
&Self::H::digest([dst, data].concat()).into(),
)
let mut digest = Self::H::new();
digest.update(dst);
digest.update(data);
<Scalar as FromUniformBytes<64>>::from_uniform_bytes(&digest.finalize().into())
}
// We override the provided impl, which compares against the reserialization, because

View File

@@ -127,9 +127,10 @@ impl ciphersuite::Ciphersuite for Secq256k1 {
/// substrings of each other.
fn hash_to_F(dst: &[u8], data: &[u8]) -> Self::F {
use blake2::Digest;
<Scalar as FromUniformBytes<64>>::from_uniform_bytes(
&Self::H::digest([dst, data].concat()).into(),
)
let mut digest = Self::H::new();
digest.update(dst);
digest.update(data);
<Scalar as FromUniformBytes<64>>::from_uniform_bytes(&digest.finalize().into())
}
// We override the provided impl, which compares against the reserialization, because

View File

@@ -7,7 +7,7 @@ repository = "https://github.com/serai-dex/serai/tree/develop/crypto/transcript"
authors = ["Luke Parker <lukeparker5132@gmail.com>"]
keywords = ["transcript"]
edition = "2021"
rust-version = "1.66"
rust-version = "1.73"
[package.metadata.docs.rs]
all-features = true
@@ -17,8 +17,6 @@ rustdoc-args = ["--cfg", "docsrs"]
workspace = true
[dependencies]
std-shims = { path = "../../common/std-shims", version = "0.1.4", default-features = false }
zeroize = { version = "^1.5", default-features = false }
digest = { version = "0.10", default-features = false, features = ["core-api"] }
@@ -31,7 +29,7 @@ sha2 = { version = "0.10", default-features = false }
blake2 = { version = "0.10", default-features = false }
[features]
std = ["std-shims/std", "zeroize/std", "digest/std", "blake2?/std", "merlin?/std"]
std = ["zeroize/std", "digest/std", "blake2?/std", "merlin?/std"]
recommended = ["blake2"]
tests = []
default = ["std"]

View File

@@ -2,9 +2,6 @@
#![doc = include_str!("../README.md")]
#![no_std]
#[allow(unused_imports)]
use std_shims::prelude::*;
use zeroize::Zeroize;
use digest::{