mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-10 05:09:22 +00:00
Smash the singular Ciphersuite trait into multiple
This helps identify where the various functionalities are used, or rather, not used. The `Ciphersuite` trait present in `patches/ciphersuite`, facilitating the entire FCMP++ tree, only requires the markers _and_ canonical point decoding. I've opened a PR to upstream such a trait into `group` (https://github.com/zkcrypto/group/pull/68). `WrappedGroup` is still justified for as long as `Group::generator` exists. Moving `::generator()` to its own trait, on an independent structure (upstream) would be massively appreciated. @tarcieri also wanted to update from `fn generator()` to `const GENERATOR`, which would encourage further discussion on https://github.com/zkcrypto/group/issues/32 and https://github.com/zkcrypto/group/issues/45, which have been stagnant. The `Id` trait is occasionally used yet really should be first off the chopping block. Finally, `WithPreferredHash` is only actually used around a third of the time, which more than justifies it being a separate trait. --- Updates `dalek_ff_group::Scalar` to directly re-export `curve25519_dalek::Scalar`, as without issue. `dalek_ff_group::RistrettoPoint` also could be replaced with an export of `curve25519_dalek::RistrettoPoint`, yet the coordinator relies on how we implemented `Hash` on it for the hell of it so it isn't worth it at this time. `dalek_ff_group::EdwardsPoint` can't be replaced for an re-export of `curve25519_dalek::SubgroupPoint` as it doesn't implement `zeroize`, `subtle` traits within a released, non-yanked version. Relevance to https://github.com/serai-dex/serai/issues/201 and https://github.com/dalek-cryptography/curve25519-dalek/issues/811#issuecomment-3247732746. Also updates the `Ristretto` ciphersuite to prefer `Blake2b-512` over `SHA2-512`. In order to maintain compliance with FROST's IETF standard, `modular-frost` defines its own ciphersuite for Ristretto which still uses `SHA2-512`.
This commit is contained in:
@@ -6,21 +6,16 @@ use rand_core::{RngCore, CryptoRng};
|
||||
use zeroize::{Zeroize, Zeroizing};
|
||||
use subtle::ConstantTimeEq;
|
||||
|
||||
pub use ciphersuite::{
|
||||
digest::Digest,
|
||||
group::{
|
||||
ff::{Field, PrimeField},
|
||||
Group,
|
||||
},
|
||||
Ciphersuite,
|
||||
use ciphersuite::group::{
|
||||
ff::{Field, PrimeField},
|
||||
Group,
|
||||
};
|
||||
pub use ciphersuite::{digest::Digest, WrappedGroup, GroupIo, Ciphersuite};
|
||||
|
||||
#[cfg(any(feature = "ristretto", feature = "ed25519"))]
|
||||
mod dalek;
|
||||
#[cfg(feature = "ristretto")]
|
||||
pub use dalek::{Ristretto, IetfRistrettoHram};
|
||||
#[cfg(feature = "ed25519")]
|
||||
pub use dalek::{Ed25519, IetfEd25519Hram};
|
||||
#[cfg(any(feature = "ristretto", feature = "ed25519"))]
|
||||
pub use dalek::*;
|
||||
|
||||
#[cfg(any(feature = "secp256k1", feature = "p256"))]
|
||||
mod kp256;
|
||||
@@ -38,11 +33,11 @@ pub(crate) use ed448::Ietf8032Ed448Hram;
|
||||
|
||||
/// FROST Ciphersuite.
|
||||
///
|
||||
/// This exclude the signing algorithm specific H2, making this solely the curve, its associated
|
||||
/// This excludes the signing algorithm specific H2, making this solely the curve, its associated
|
||||
/// hash function, and the functions derived from it.
|
||||
pub trait Curve: Ciphersuite {
|
||||
pub trait Curve: GroupIo + Ciphersuite {
|
||||
/// Context string for this curve.
|
||||
const CONTEXT: &'static [u8];
|
||||
const CONTEXT: &[u8];
|
||||
|
||||
/// Hash the given dst and data to a byte vector. Used to instantiate H4 and H5.
|
||||
fn hash(dst: &[u8], data: &[u8]) -> impl AsRef<[u8]> {
|
||||
@@ -121,7 +116,7 @@ pub trait Curve: Ciphersuite {
|
||||
/// Read a point from a reader, rejecting identity.
|
||||
#[allow(non_snake_case)]
|
||||
fn read_G<R: Read>(reader: &mut R) -> io::Result<Self::G> {
|
||||
let res = <Self as Ciphersuite>::read_G(reader)?;
|
||||
let res = <Self as GroupIo>::read_G(reader)?;
|
||||
if res.is_identity().into() {
|
||||
Err(io::Error::other("identity point"))?;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user