From 104c0d44921fcedc84e504708035fc69522582dd Mon Sep 17 00:00:00 2001 From: Luke Parker Date: Mon, 18 Aug 2025 05:26:41 -0400 Subject: [PATCH] Rename `ThresholdKeys::secret_share` to `ThresholdKeys::original_secret_share` --- Cargo.lock | 40 +++++++++++++++---------------- crypto/dkg/Cargo.toml | 2 +- crypto/dkg/musig/src/tests.rs | 2 +- crypto/dkg/promote/Cargo.toml | 4 ++-- crypto/dkg/promote/src/lib.rs | 6 ++--- crypto/dkg/promote/src/tests.rs | 7 ++++-- crypto/dkg/src/lib.rs | 6 ++--- crypto/frost/Cargo.toml | 4 ++-- crypto/frost/src/sign.rs | 7 ++++-- crypto/frost/src/tests/vectors.rs | 15 ++++++++---- 10 files changed, 53 insertions(+), 40 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9104cb8b..e1681e15 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1068,7 +1068,7 @@ dependencies = [ "bitcoin", "hex", "k256", - "modular-frost 0.10.0", + "modular-frost 0.10.1", "rand_core", "secp256k1", "serde", @@ -2247,7 +2247,7 @@ dependencies = [ [[package]] name = "dkg" -version = "0.6.0" +version = "0.6.1" dependencies = [ "borsh", "ciphersuite 0.4.1", @@ -2261,7 +2261,7 @@ name = "dkg-dealer" version = "0.6.0" dependencies = [ "ciphersuite 0.4.1", - "dkg 0.6.0", + "dkg 0.6.1", "rand_core", "std-shims", "zeroize", @@ -2272,7 +2272,7 @@ name = "dkg-musig" version = "0.6.0" dependencies = [ "ciphersuite 0.4.1", - "dkg 0.6.0", + "dkg 0.6.1", "dkg-recovery", "multiexp 0.4.0", "rand_core", @@ -2287,7 +2287,7 @@ version = "0.6.0" dependencies = [ "chacha20", "ciphersuite 0.4.1", - "dkg 0.6.0", + "dkg 0.6.1", "dleq 0.4.1", "flexible-transcript", "multiexp 0.4.0", @@ -2299,10 +2299,10 @@ dependencies = [ [[package]] name = "dkg-promote" -version = "0.6.0" +version = "0.6.1" dependencies = [ "ciphersuite 0.4.1", - "dkg 0.6.0", + "dkg 0.6.1", "dkg-recovery", "dleq 0.4.1", "flexible-transcript", @@ -2316,7 +2316,7 @@ name = "dkg-recovery" version = "0.6.0" dependencies = [ "ciphersuite 0.4.1", - "dkg 0.6.0", + "dkg 0.6.1", "thiserror 2.0.14", "zeroize", ] @@ -2584,7 +2584,7 @@ dependencies = [ "flexible-transcript", "group", "k256", - "modular-frost 0.10.0", + "modular-frost 0.10.1", "rand_core", "thiserror 1.0.64", "tokio", @@ -2748,7 +2748,7 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flexible-transcript" -version = "0.3.2" +version = "0.3.3" dependencies = [ "blake2", "digest 0.10.7", @@ -2971,7 +2971,7 @@ dependencies = [ "ciphersuite 0.4.1", "flexible-transcript", "group", - "modular-frost 0.10.0", + "modular-frost 0.10.1", "rand_core", "schnorr-signatures 0.5.1", "schnorrkel", @@ -4953,12 +4953,12 @@ dependencies = [ [[package]] name = "modular-frost" -version = "0.10.0" +version = "0.10.1" dependencies = [ "ciphersuite 0.4.1", "dalek-ff-group", "digest 0.10.7", - "dkg 0.6.0", + "dkg 0.6.1", "dkg-dealer", "dkg-recovery", "flexible-transcript", @@ -8152,7 +8152,7 @@ dependencies = [ "frame-system", "frost-schnorrkel", "hex", - "modular-frost 0.10.0", + "modular-frost 0.10.1", "monero-wallet", "multiaddr", "parity-scale-codec", @@ -8214,7 +8214,7 @@ dependencies = [ "hex", "libp2p", "log", - "modular-frost 0.10.0", + "modular-frost 0.10.1", "parity-scale-codec", "rand_core", "schnorr-signatures 0.5.1", @@ -8239,7 +8239,7 @@ dependencies = [ "blake2", "borsh", "ciphersuite 0.4.1", - "dkg 0.6.0", + "dkg 0.6.1", "dockertest", "hex", "parity-scale-codec", @@ -8483,7 +8483,7 @@ dependencies = [ "bitcoin-serai", "ciphersuite 0.4.1", "dalek-ff-group", - "dkg 0.6.0", + "dkg 0.6.1", "dkg-dealer", "dkg-musig", "dkg-recovery", @@ -8591,7 +8591,7 @@ dependencies = [ "hex", "k256", "log", - "modular-frost 0.10.0", + "modular-frost 0.10.1", "monero-simple-request-rpc", "monero-wallet", "parity-scale-codec", @@ -8617,7 +8617,7 @@ name = "serai-processor-messages" version = "0.1.0" dependencies = [ "borsh", - "dkg 0.6.0", + "dkg 0.6.1", "parity-scale-codec", "serai-coins-primitives", "serai-in-instructions-primitives", @@ -8633,7 +8633,7 @@ dependencies = [ "borsh", "ciphersuite 0.4.1", "curve25519-dalek", - "dkg 0.6.0", + "dkg 0.6.1", "dockertest", "ethereum-serai", "hex", diff --git a/crypto/dkg/Cargo.toml b/crypto/dkg/Cargo.toml index 51dc9162..1ac689b8 100644 --- a/crypto/dkg/Cargo.toml +++ b/crypto/dkg/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dkg" -version = "0.6.0" +version = "0.6.1" description = "Distributed key generation over ff/group" license = "MIT" repository = "https://github.com/serai-dex/serai/tree/develop/crypto/dkg" diff --git a/crypto/dkg/musig/src/tests.rs b/crypto/dkg/musig/src/tests.rs index a48dda68..a89404a1 100644 --- a/crypto/dkg/musig/src/tests.rs +++ b/crypto/dkg/musig/src/tests.rs @@ -47,7 +47,7 @@ pub fn test_musig() { verification_shares.insert( these_keys.params().i(), - ::generator() * **these_keys.secret_share(), + ::generator() * **these_keys.original_secret_share(), ); assert_eq!(these_keys.group_key(), group_key); diff --git a/crypto/dkg/promote/Cargo.toml b/crypto/dkg/promote/Cargo.toml index 9bd4f452..5f2ff181 100644 --- a/crypto/dkg/promote/Cargo.toml +++ b/crypto/dkg/promote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dkg-promote" -version = "0.6.0" +version = "0.6.1" description = "Promotions for keys from the dkg crate" license = "MIT" repository = "https://github.com/serai-dex/serai/tree/develop/crypto/dkg/promote" @@ -25,7 +25,7 @@ transcript = { package = "flexible-transcript", path = "../../transcript", versi ciphersuite = { path = "../../ciphersuite", version = "^0.4.1", default-features = false, features = ["std"] } dleq = { path = "../../dleq", version = "^0.4.1", default-features = false, features = ["std", "serialize"] } -dkg = { path = "../", version = "0.6", default-features = false, features = ["std"] } +dkg = { path = "../", version = "0.6.1", default-features = false, features = ["std"] } [dev-dependencies] zeroize = { version = "^1.5", default-features = false, features = ["std", "zeroize_derive"] } diff --git a/crypto/dkg/promote/src/lib.rs b/crypto/dkg/promote/src/lib.rs index 6fb08807..d379ea0f 100644 --- a/crypto/dkg/promote/src/lib.rs +++ b/crypto/dkg/promote/src/lib.rs @@ -104,12 +104,12 @@ impl> GeneratorPromotion< ) -> (GeneratorPromotion, GeneratorProof) { // Do a DLEqProof for the new generator let proof = GeneratorProof { - share: C2::generator() * base.secret_share().deref(), + share: C2::generator() * base.original_secret_share().deref(), proof: DLEqProof::prove( rng, &mut transcript(&base.original_group_key(), base.params().i()), &[C1::generator(), C2::generator()], - base.secret_share(), + base.original_secret_share(), ), }; @@ -159,7 +159,7 @@ impl> GeneratorPromotion< ThresholdKeys::new( params, self.base.interpolation().clone(), - self.base.secret_share().clone(), + self.base.original_secret_share().clone(), verification_shares, ) .unwrap(), diff --git a/crypto/dkg/promote/src/tests.rs b/crypto/dkg/promote/src/tests.rs index 1cae60d9..b46dfbbf 100644 --- a/crypto/dkg/promote/src/tests.rs +++ b/crypto/dkg/promote/src/tests.rs @@ -99,13 +99,16 @@ fn test_generator_promotion() { for (i, promoting) in promotions.drain() { let promoted = promoting.complete(&clone_without(&proofs, &i)).unwrap(); assert_eq!(keys[usize::from(u16::from(i) - 1)].params(), promoted.params()); - assert_eq!(keys[usize::from(u16::from(i) - 1)].secret_share(), promoted.secret_share()); + assert_eq!( + keys[usize::from(u16::from(i) - 1)].original_secret_share(), + promoted.original_secret_share() + ); assert_eq!(new_group_key, promoted.group_key()); for l in 0 .. PARTICIPANTS { let verification_share = promoted.original_verification_share(Participant::new(l + 1).unwrap()); assert_eq!( - AltGenerator::::generator() * **keys[usize::from(l)].secret_share(), + AltGenerator::::generator() * **keys[usize::from(l)].original_secret_share(), verification_share ); } diff --git a/crypto/dkg/src/lib.rs b/crypto/dkg/src/lib.rs index b98236a8..064a6a10 100644 --- a/crypto/dkg/src/lib.rs +++ b/crypto/dkg/src/lib.rs @@ -444,8 +444,8 @@ impl ThresholdKeys { (self.core.group_key * self.scalar) + (C::generator() * self.offset) } - /// Return the secret share for these keys. - pub fn secret_share(&self) -> &Zeroizing { + /// Return the underlying secret share for these keys, without any tweaks applied. + pub fn original_secret_share(&self) -> &Zeroizing { &self.core.secret_share } @@ -489,7 +489,7 @@ impl ThresholdKeys { } // The interpolation occurs multiplicatively, letting us scale by the scalar now - let secret_share_scaled = Zeroizing::new(self.scalar * self.secret_share().deref()); + let secret_share_scaled = Zeroizing::new(self.scalar * self.original_secret_share().deref()); let mut secret_share = Zeroizing::new( self.core.interpolation.interpolation_factor(self.params().i(), &included) * secret_share_scaled.deref(), diff --git a/crypto/frost/Cargo.toml b/crypto/frost/Cargo.toml index 0174fb8e..a0d52366 100644 --- a/crypto/frost/Cargo.toml +++ b/crypto/frost/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "modular-frost" -version = "0.10.0" +version = "0.10.1" description = "Modular implementation of FROST over ff/group" license = "MIT" repository = "https://github.com/serai-dex/serai/tree/develop/crypto/frost" @@ -39,7 +39,7 @@ multiexp = { path = "../multiexp", version = "0.4", default-features = false, fe schnorr = { package = "schnorr-signatures", path = "../schnorr", version = "^0.5.1", default-features = false, features = ["std"] } -dkg = { path = "../dkg", version = "0.6", default-features = false, features = ["std"] } +dkg = { path = "../dkg", version = "0.6.1", default-features = false, features = ["std"] } dkg-recovery = { path = "../dkg/recovery", version = "0.6", default-features = false, features = ["std"], optional = true } dkg-dealer = { path = "../dkg/dealer", version = "0.6", default-features = false, features = ["std"], optional = true } diff --git a/crypto/frost/src/sign.rs b/crypto/frost/src/sign.rs index 4f5f59bd..b3be81fd 100644 --- a/crypto/frost/src/sign.rs +++ b/crypto/frost/src/sign.rs @@ -125,8 +125,11 @@ impl> AlgorithmMachine { let mut params = self.params; let mut rng = ChaCha20Rng::from_seed(*seed.0); - let (nonces, commitments) = - Commitments::new::<_>(&mut rng, params.keys.secret_share(), ¶ms.algorithm.nonces()); + let (nonces, commitments) = Commitments::new::<_>( + &mut rng, + params.keys.original_secret_share(), + ¶ms.algorithm.nonces(), + ); let addendum = params.algorithm.preprocess_addendum(&mut rng, ¶ms.keys); let preprocess = Preprocess { commitments, addendum }; diff --git a/crypto/frost/src/tests/vectors.rs b/crypto/frost/src/tests/vectors.rs index a5369a02..d5cda345 100644 --- a/crypto/frost/src/tests/vectors.rs +++ b/crypto/frost/src/tests/vectors.rs @@ -133,7 +133,7 @@ fn vectors_to_multisig_keys(vectors: &Vectors) -> HashMap>( // Calculate the expected nonces let mut expected = (C::generator() * - C::random_nonce(keys[i].secret_share(), &mut TransparentRng(vec![randomness.0])).deref()) + C::random_nonce( + keys[i].original_secret_share(), + &mut TransparentRng(vec![randomness.0]), + ) + .deref()) .to_bytes() .as_ref() .to_vec(); expected.extend( (C::generator() * - C::random_nonce(keys[i].secret_share(), &mut TransparentRng(vec![randomness.1])) - .deref()) + C::random_nonce( + keys[i].original_secret_share(), + &mut TransparentRng(vec![randomness.1]), + ) + .deref()) .to_bytes() .as_ref(), );