zombienet_orchestrator/generators/
identity.rs1use hex::FromHex;
2use libp2p::identity::{ed25519, Keypair};
3use sha2::digest::Digest;
4
5use super::errors::GeneratorError;
6
7pub fn generate(node_name: &str) -> Result<(String, String), GeneratorError> {
10 let key = hex::encode(sha2::Sha256::digest(node_name));
11
12 let bytes = <[u8; 32]>::from_hex(key.clone()).map_err(|_| {
13 GeneratorError::IdentityGeneration("can not transform hex to [u8;32]".into())
14 })?;
15 let sk = ed25519::SecretKey::try_from_bytes(bytes)
16 .map_err(|_| GeneratorError::IdentityGeneration("can not create sk from bytes".into()))?;
17 let local_identity: Keypair = ed25519::Keypair::from(sk).into();
18 let local_public = local_identity.public();
19 let local_peer_id = local_public.to_peer_id();
20
21 Ok((key, local_peer_id.to_base58()))
22}
23
24#[cfg(test)]
25mod tests {
26
27 use super::*;
28 #[test]
29 fn generate_for_alice() {
30 let s = "alice";
31 let (key, peer_id) = generate(s).unwrap();
32 assert_eq!(
33 &key,
34 "2bd806c97f0e00af1a1fc3328fa763a9269723c8db8fac4f93af71db186d6e90"
35 );
36 assert_eq!(
37 &peer_id,
38 "12D3KooWQCkBm1BYtkHpocxCwMgR8yjitEeHGx8spzcDLGt2gkBm"
39 );
40 }
41}