diff --git a/multisig/src/lib.rs b/multisig/src/lib.rs index 3f8d52f4f..8f3668d4f 100644 --- a/multisig/src/lib.rs +++ b/multisig/src/lib.rs @@ -139,16 +139,13 @@ impl Keypair { } /// Generate keypair from a seed. - pub fn from_seed(seed: [u8; 32]) -> Self { - loop { - if let Ok(sk) = secp256k1::SecretKey::from_byte_array(seed) { - let pk = sk.public_key(secp256k1::SECP256K1); - return Self { - sk: SecretKey { key: sk }, - pk: PublicKey { key: pk }, - }; - } - } + pub fn from_seed(seed: [u8; 32]) -> Result { + let sk = secp256k1::SecretKey::from_byte_array(seed).map_err(|_| InvalidSecretKey(()))?; + let pk = sk.public_key(secp256k1::SECP256K1); + Ok(Self { + sk: SecretKey { key: sk }, + pk: PublicKey { key: pk }, + }) } /// Returns ed25519 Public key. diff --git a/tests/src/tests/consensus/helpers/shaping.rs b/tests/src/tests/consensus/helpers/shaping.rs index 8dbae4924..f07d09816 100644 --- a/tests/src/tests/consensus/helpers/shaping.rs +++ b/tests/src/tests/consensus/helpers/shaping.rs @@ -308,7 +308,7 @@ impl Simulator { for (b, s) in name.as_bytes().iter().zip(seed.iter_mut()) { *s = *b } - (name, Keypair::from_seed(seed)) + (name, Keypair::from_seed(seed).expect("name-based seed should produce valid keypair")) }) .collect(); diff --git a/timeboost-utils/src/lib.rs b/timeboost-utils/src/lib.rs index 92b37afa7..223cf30d1 100644 --- a/timeboost-utils/src/lib.rs +++ b/timeboost-utils/src/lib.rs @@ -22,7 +22,7 @@ pub fn sig_keypair_from_seed_indexed(seed: [u8; 32], index: u64) -> multisig::Ke hasher.update(&seed); hasher.update(&index.to_le_bytes()); let new_seed = *hasher.finalize().as_bytes(); - multisig::Keypair::from_seed(new_seed) + multisig::Keypair::from_seed(new_seed).expect("blake3 hash should always produce valid secp256k1 key") } pub fn dh_keypair_from_seed_indexed(seed: [u8; 32], index: u64) -> x25519::Keypair {