Skip to content

Commit 6248915

Browse files
authored
Merge pull request #525 from EspressoSystems/tw/streamlin-keypair-gen
Removes `unsafe_zero_keypair` and others.
2 parents 0d4c8a9 + f19bef2 commit 6248915

File tree

12 files changed

+44
-75
lines changed

12 files changed

+44
-75
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

multisig/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ constant_time_eq = { workspace = true }
1818
ed25519-compact = { workspace = true }
1919
either = { workspace = true }
2020
minicbor = { workspace = true }
21+
rand = { workspace = true }
2122
rayon = { workspace = true }
2223
secp256k1 = { workspace = true }
2324
serde = { workspace = true }

multisig/src/lib.rs

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ use std::fmt;
1111

1212
use committable::{Commitment, Committable, RawCommitmentBuilder};
1313
use minicbor::{CborLen, Decode, Encode};
14-
use secp256k1::rand::Rng;
14+
use rand::Rng;
1515
use serde::{Deserialize, Serialize};
1616

17+
pub use rand;
18+
1719
pub use cert::Certificate;
1820
pub use committee::{Committee, CommitteeId};
1921
pub use envelope::{Envelope, Unchecked, Validated};
@@ -138,19 +140,6 @@ impl Keypair {
138140
}
139141
}
140142

141-
/// Generate keypair from a seed.
142-
pub fn from_seed(seed: [u8; 32]) -> Self {
143-
loop {
144-
if let Ok(sk) = secp256k1::SecretKey::from_byte_array(seed) {
145-
let pk = sk.public_key(secp256k1::SECP256K1);
146-
return Self {
147-
sk: SecretKey { key: sk },
148-
pk: PublicKey { key: pk },
149-
};
150-
}
151-
}
152-
}
153-
154143
/// Returns ed25519 Public key.
155144
pub fn public_key(&self) -> PublicKey {
156145
self.pk

multisig/src/x25519.rs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::cmp::Ordering;
22
use std::fmt;
33

44
use ed25519_compact::x25519;
5-
use secp256k1::rand::Rng;
5+
use rand::Rng;
66
use serde::{Deserialize, Serialize};
77

88
use super::{InvalidKeypair, InvalidPublicKey, InvalidSecretKey};
@@ -42,14 +42,8 @@ impl Keypair {
4242
Ok(Self { pair })
4343
}
4444

45-
// note: `ed25519_compat` crate doesn't offer or re-export anything from `rand`,
46-
// thus we use `Rng` re-exported from `secp256k1` instead for convenience
4745
pub fn generate_with_rng<R: Rng>(rng: &mut R) -> Result<Self, InvalidKeypair> {
4846
let seed: [u8; 32] = rng.random();
49-
Self::from_seed(seed)
50-
}
51-
52-
pub fn from_seed(seed: [u8; 32]) -> Result<Self, InvalidKeypair> {
5347
let sk = x25519::SecretKey::new(seed);
5448
let Ok(pk) = sk.recover_public_key() else {
5549
return Err(InvalidKeypair(()));

tests/src/lib.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use std::net::{Ipv4Addr, SocketAddr};
22

33
use multisig::{Committee, Keypair, PublicKey, x25519};
4+
use rand::{SeedableRng, rngs::StdRng};
45
use sailfish_types::UNKNOWN_COMMITTEE_ID;
56
use test_utils::ports::alloc_port;
6-
use timeboost_utils::{unsafe_zero_dh_keypair, unsafe_zero_keypair};
77

88
#[cfg(test)]
99
mod tests;
@@ -61,10 +61,16 @@ pub struct Group {
6161
impl Group {
6262
pub async fn new(size: usize) -> Self {
6363
let sign_keypairs = (0..size as u64)
64-
.map(unsafe_zero_keypair)
64+
.map(|i| {
65+
let mut g = StdRng::seed_from_u64(i);
66+
Keypair::generate_with_rng(&mut g)
67+
})
6568
.collect::<Vec<_>>();
6669
let dh_keypairs = (0..size as u64)
67-
.map(unsafe_zero_dh_keypair)
70+
.map(|i| {
71+
let mut g = StdRng::seed_from_u64(i);
72+
x25519::Keypair::generate_with_rng(&mut g).unwrap()
73+
})
6874
.collect::<Vec<_>>();
6975
let mut addrs = vec![];
7076
let mut pubks = vec![];

tests/src/tests/consensus/helpers/key_manager.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ use committable::Committable;
44
use multisig::{
55
Certificate, Committee, Envelope, Keypair, PublicKey, Signed, Validated, VoteAccumulator,
66
};
7+
use rand::SeedableRng;
8+
use rand::rngs::StdRng;
79
use sailfish::consensus::ConsensusMetrics;
810
use sailfish::types::CommitteeVec;
911
use sailfish::types::{
1012
Evidence, Round, RoundNumber, Timeout, TimeoutMessage, UNKNOWN_COMMITTEE_ID,
1113
};
12-
use timeboost_utils::unsafe_zero_keypair;
1314

1415
use super::node_instrument::TestNodeInstrument;
1516
use crate::prelude::*;
@@ -24,14 +25,21 @@ pub struct KeyManager {
2425
/// Helper for all the keys in a committeee for testing purposes.
2526
impl KeyManager {
2627
pub(crate) fn new(num_nodes: u8) -> Self {
27-
let key_pairs = (0..num_nodes).map(|i| (i, unsafe_zero_keypair(i as u64)));
28+
let key_pairs = (0..num_nodes)
29+
.map(|i| {
30+
(i, {
31+
let mut g = StdRng::seed_from_u64(i.into());
32+
Keypair::generate_with_rng(&mut g)
33+
})
34+
})
35+
.collect::<BTreeMap<_, _>>();
2836
let committee = Committee::new(
2937
UNKNOWN_COMMITTEE_ID,
30-
key_pairs.clone().map(|(i, k)| (i, k.public_key())),
38+
key_pairs.iter().map(|(i, k)| (*i, k.public_key())),
3139
);
3240
let cv = CommitteeVec::new(committee.clone());
3341
Self {
34-
keys: key_pairs.collect(),
42+
keys: key_pairs,
3543
committee,
3644
committees: cv,
3745
}

tests/src/tests/consensus/helpers/shaping.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,8 @@ impl Simulator {
308308
for (b, s) in name.as_bytes().iter().zip(seed.iter_mut()) {
309309
*s = *b
310310
}
311-
(name, Keypair::from_seed(seed))
311+
let mut g = rand::rngs::StdRng::from_seed(seed);
312+
(name, Keypair::generate_with_rng(&mut g))
312313
})
313314
.collect();
314315

tests/src/tests/consensus/test_consensus_actions.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ async fn test_single_node_timeout_cert() {
108108
let committee = node_handle.committee().clone();
109109

110110
// Setup expectations
111-
let expected_round = RoundNumber::new(4);
111+
let expected_round = RoundNumber::new(2);
112112
let timeout = node_handle.expected_timeout(expected_round);
113113
let no_vote = node_handle.expected_no_vote(expected_round);
114114

tests/src/tests/consensus/test_consensus_fake_network.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
use std::collections::{HashMap, HashSet};
22

3-
use multisig::PublicKey;
3+
use multisig::{Keypair, PublicKey};
44
use sailfish::types::{Evidence, RoundNumber};
55
use timeboost_utils::types::logging;
6-
use timeboost_utils::unsafe_zero_keypair;
76

87
use crate::prelude::*;
98
use crate::tests::consensus::helpers::node_instrument::TestNodeInstrument;
@@ -163,7 +162,6 @@ async fn test_invalid_vertex_signatures() {
163162
logging::init_logging();
164163

165164
let num_nodes = 5;
166-
let invalid_node_id = num_nodes + 1;
167165

168166
let (nodes, manager) = make_consensus_nodes(num_nodes);
169167

@@ -173,7 +171,7 @@ async fn test_invalid_vertex_signatures() {
173171
move |msg: &Message, _node_handle: &mut TestNodeInstrument| {
174172
if let Message::Vertex(_e) = msg {
175173
// generate keys for invalid node for a node one not in stake table
176-
let invalid_kpair = unsafe_zero_keypair(invalid_node_id);
174+
let invalid_kpair = Keypair::generate();
177175
// modify current network message with this invalid one
178176
return vec![manager.create_vertex_proposal_msg(msg.round().num(), &invalid_kpair)];
179177
}

tests/src/tests/consensus/test_traffic_patterns.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -139,18 +139,18 @@ fn delay_vertices_to_leader() {
139139
.with(edges("E", all)),
140140
Rule::new("trigger timeout of leader vertex")
141141
.precondition(|sim| {
142-
sim.round() == Some(1) && sim.leader(1) == Some("E") && sim.leader(2) == Some("B")
142+
sim.round() == Some(1) && sim.leader(1) == Some("B") && sim.leader(2) == Some("D")
143143
})
144144
.plus(edge("A", "A"))
145145
.plus(edge("A", "B").delay_fn(|m| if m.is_vertex() { 15 } else { 0 }))
146146
.plus(edge("A", "C"))
147147
.plus(edge("A", "D"))
148148
.plus(edge("A", "E"))
149-
.plus(edge("B", "A"))
150-
.plus(edge("B", "B").delay_fn(|m| if m.is_vertex() { 15 } else { 0 }))
151-
.plus(edge("B", "C"))
152-
.plus(edge("B", "D"))
153-
.plus(edge("B", "E"))
149+
.plus(edge("B", "A").delay(15))
150+
.plus(edge("B", "B").delay(15))
151+
.plus(edge("B", "C").delay(15))
152+
.plus(edge("B", "D").delay(15))
153+
.plus(edge("B", "E").delay(15))
154154
.plus(edge("C", "A"))
155155
.plus(edge("C", "B").delay_fn(|m| if m.is_vertex() { 15 } else { 0 }))
156156
.plus(edge("C", "C"))
@@ -161,11 +161,11 @@ fn delay_vertices_to_leader() {
161161
.plus(edge("D", "C"))
162162
.plus(edge("D", "D"))
163163
.plus(edge("D", "E"))
164-
.plus(edge("E", "A").delay(15))
165-
.plus(edge("E", "B").delay(15))
166-
.plus(edge("E", "C").delay(15))
167-
.plus(edge("E", "D").delay(15))
168-
.plus(edge("E", "E").delay(15)),
164+
.plus(edge("E", "A").delay_fn(|m| if m.is_vertex() { 15 } else { 0 }))
165+
.plus(edge("E", "B"))
166+
.plus(edge("E", "C"))
167+
.plus(edge("E", "D"))
168+
.plus(edge("E", "E")),
169169
]);
170170
sim.goto(50);
171171

0 commit comments

Comments
 (0)