discv5_cli/server/
keys.rs

1use discv5::{enr::k256, enr::CombinedKey};
2
3/// Generates a [discv5] [CombinedKey](discv5::enr::CombinedKey) from the server config.
4/// If the static_key flag is set, a fixed key is used for testing.
5pub fn generate(server: &super::command::Server) -> eyre::Result<CombinedKey> {
6    if server.static_key {
7        let raw_key = vec![
8            183, 28, 113, 166, 126, 17, 119, 173, 78, 144, 22, 149, 225, 180, 185, 238, 23, 174,
9            22, 198, 102, 141, 49, 62, 172, 47, 150, 219, 205, 163, 242, 145,
10        ];
11        let secret_key = k256::ecdsa::SigningKey::from_slice(&raw_key)?;
12        Ok(CombinedKey::from(secret_key))
13    } else if let Some(string_key) = &server.secp256k1_key {
14        let raw_key = hex::decode(string_key)
15            .map_err(|_| eyre::eyre!("Invalid hex bytes for secp256k1 key"))?;
16        let secret_key = k256::ecdsa::SigningKey::from_slice(&raw_key)
17            .map_err(|_| eyre::eyre!("Invalid secp256k1 key"))?;
18        Ok(CombinedKey::from(secret_key))
19    } else {
20        Ok(CombinedKey::generate_secp256k1())
21    }
22}