Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
87be8e5
Introduce network backend agnostic `Multiaddr` & `Multihash` types
dmitry-markin Apr 16, 2024
584038e
Extend substrate's `Multihash`, make substrate's `PeerId` use it
dmitry-markin Apr 19, 2024
8100f7f
Allow constructing `Multiaddr` from iterator of protocols
dmitry-markin Apr 19, 2024
ea85860
Convert network config to use substrate's `Multiaddr`
dmitry-markin Apr 19, 2024
94af781
Add `ed25519` types to `sc-network-types`
dmitry-markin Apr 23, 2024
aa4d28d
cargo update litep2p
dmitry-markin Apr 23, 2024
da59b29
Make `Check licenses` check happy
dmitry-markin Apr 24, 2024
f614106
Make network config use substrate-specific types
dmitry-markin Apr 24, 2024
ce321a9
Convert substrate-specific types for libp2p backend
dmitry-markin Apr 24, 2024
a0373ae
Convert substrate-specific types for litep2p backend
dmitry-markin Apr 24, 2024
2bb5448
Cleaner separation between backend-specific types
dmitry-markin Apr 24, 2024
bd7df2e
Make authority-discovery use substrate-specific types
dmitry-markin Apr 24, 2024
7c29f74
Make telemetry use libp2p-only `Multiaddr`
dmitry-markin May 16, 2024
2162dac
Make `cli` use `sc_network::config::ed25519`
dmitry-markin May 16, 2024
bb6f58f
Make authority-discovery tests use proper types
dmitry-markin May 16, 2024
9fc3f80
Fix tests
dmitry-markin May 16, 2024
04a4096
Merge remote-tracking branch 'origin/master' into dm-network-types-mu…
dmitry-markin May 16, 2024
036aac7
Make clippy happy
dmitry-markin May 17, 2024
685de87
Add tests for ed25519 types conversion between libs
dmitry-markin May 17, 2024
dabbd96
Make clippy happy again
dmitry-markin May 17, 2024
a66016c
Add PRDoc
dmitry-markin May 17, 2024
41ffe22
Fix doctest
dmitry-markin May 17, 2024
086f389
Apply review suggestions
dmitry-markin May 20, 2024
7547c49
Update semver in PRDoc
dmitry-markin May 20, 2024
b1bea17
Fix CI
dmitry-markin May 20, 2024
a87a92d
Merge remote-tracking branch 'origin/master' into dm-network-types-mu…
dmitry-markin May 20, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add tests for ed25519 types conversion between libs
  • Loading branch information
dmitry-markin committed May 17, 2024
commit 685de87a1c5f7a186d243dd30195cfaad8907ff6
199 changes: 199 additions & 0 deletions substrate/client/network/types/src/ed25519.rs
Original file line number Diff line number Diff line change
Expand Up @@ -349,4 +349,203 @@ mod tests {
let invalid_msg = "h3ll0 w0rld".as_bytes();
assert!(!pk.verify(invalid_msg, &sig));
}

#[test]
fn substrate_kp_to_libs() {
let kp = Keypair::generate();
let kp_bytes = kp.to_bytes();
let kp1: libp2p_ed25519::Keypair = kp.clone().into();
let kp2: litep2p_ed25519::Keypair = kp.clone().into();
let kp3 = libp2p_ed25519::Keypair::try_from_bytes(&mut kp_bytes.clone()).unwrap();
let kp4 = litep2p_ed25519::Keypair::decode(&mut kp_bytes.clone()).unwrap();

assert_eq!(kp_bytes, kp1.to_bytes());
assert_eq!(kp_bytes, kp2.encode());

let msg = "hello world".as_bytes();
let sig = kp.sign(msg);
let sig1 = kp1.sign(msg);
let sig2 = kp2.sign(msg);
let sig3 = kp3.sign(msg);
let sig4 = kp4.sign(msg);

assert_eq!(sig, sig1);
assert_eq!(sig, sig2);
assert_eq!(sig, sig3);
assert_eq!(sig, sig4);

let pk1 = kp1.public();
let pk2 = kp2.public();
let pk3 = kp3.public();
let pk4 = kp4.public();

assert!(pk1.verify(msg, &sig));
assert!(pk2.verify(msg, &sig));
assert!(pk3.verify(msg, &sig));
assert!(pk4.verify(msg, &sig));
}

#[test]
fn litep2p_kp_to_substrate_kp() {
let kp = litep2p_ed25519::Keypair::generate();
let kp1: Keypair = kp.clone().into();
let kp2 = Keypair::try_from_bytes(&mut kp.encode()).unwrap();

assert_eq!(kp.encode(), kp1.to_bytes());

let msg = "hello world".as_bytes();
let sig = kp.sign(msg);
let sig1 = kp1.sign(msg);
let sig2 = kp2.sign(msg);

assert_eq!(sig, sig1);
assert_eq!(sig, sig2);

let pk1 = kp1.public();
let pk2 = kp2.public();

assert!(pk1.verify(msg, &sig));
assert!(pk2.verify(msg, &sig));
}

#[test]
fn libp2p_kp_to_substrate_kp() {
let kp = libp2p_ed25519::Keypair::generate();
let kp1: Keypair = kp.clone().into();
let kp2 = Keypair::try_from_bytes(&mut kp.to_bytes()).unwrap();

assert_eq!(kp.to_bytes(), kp1.to_bytes());

let msg = "hello world".as_bytes();
let sig = kp.sign(msg);
let sig1 = kp1.sign(msg);
let sig2 = kp2.sign(msg);

assert_eq!(sig, sig1);
assert_eq!(sig, sig2);

let pk1 = kp1.public();
let pk2 = kp2.public();

assert!(pk1.verify(msg, &sig));
assert!(pk2.verify(msg, &sig));
}

#[test]
fn substrate_pk_to_libs() {
let kp = Keypair::generate();
let pk = kp.public();
let pk_bytes = pk.to_bytes();
let pk1: libp2p_ed25519::PublicKey = pk.clone().into();
let pk2: litep2p_ed25519::PublicKey = pk.clone().into();
let pk3 = libp2p_ed25519::PublicKey::try_from_bytes(&mut pk_bytes.clone()).unwrap();
let pk4 = litep2p_ed25519::PublicKey::decode(&mut pk_bytes.clone()).unwrap();

assert_eq!(pk_bytes, pk1.to_bytes());
assert_eq!(pk_bytes, pk2.encode());

let msg = "hello world".as_bytes();
let sig = kp.sign(msg);

assert!(pk.verify(msg, &sig));
assert!(pk1.verify(msg, &sig));
assert!(pk2.verify(msg, &sig));
assert!(pk3.verify(msg, &sig));
assert!(pk4.verify(msg, &sig));
}

#[test]
fn litep2p_pk_to_substrate_pk() {
let kp = litep2p_ed25519::Keypair::generate();
let pk = kp.public();
let pk_bytes = pk.clone().encode();
let pk1: PublicKey = pk.clone().into();
let pk2 = PublicKey::try_from_bytes(&pk_bytes).unwrap();

assert_eq!(pk_bytes, pk1.to_bytes());

let msg = "hello world".as_bytes();
let sig = kp.sign(msg);

assert!(pk.verify(msg, &sig));
assert!(pk1.verify(msg, &sig));
assert!(pk2.verify(msg, &sig));
}

#[test]
fn libp2p_pk_to_substrate_pk() {
let kp = libp2p_ed25519::Keypair::generate();
let pk = kp.public();
let pk_bytes = pk.clone().to_bytes();
let pk1: PublicKey = pk.clone().into();
let pk2 = PublicKey::try_from_bytes(&pk_bytes).unwrap();

assert_eq!(pk_bytes, pk1.to_bytes());

let msg = "hello world".as_bytes();
let sig = kp.sign(msg);

assert!(pk.verify(msg, &sig));
assert!(pk1.verify(msg, &sig));
assert!(pk2.verify(msg, &sig));
}

#[test]
fn substrate_sk_to_libs() {
let sk = SecretKey::generate();
let sk_bytes = sk.to_bytes();
let sk1: libp2p_ed25519::SecretKey = sk.clone().into();
let sk2: litep2p_ed25519::SecretKey = sk.clone().into();
let sk3 = libp2p_ed25519::SecretKey::try_from_bytes(&mut sk_bytes.clone()).unwrap();
let sk4 = litep2p_ed25519::SecretKey::from_bytes(&mut sk_bytes.clone()).unwrap();

let kp: Keypair = sk.into();
let kp1: libp2p_ed25519::Keypair = sk1.into();
let kp2: litep2p_ed25519::Keypair = sk2.into();
let kp3: libp2p_ed25519::Keypair = sk3.into();
let kp4: litep2p_ed25519::Keypair = sk4.into();

let msg = "hello world".as_bytes();
let sig = kp.sign(msg);

assert_eq!(sig, kp1.sign(msg));
assert_eq!(sig, kp2.sign(msg));
assert_eq!(sig, kp3.sign(msg));
assert_eq!(sig, kp4.sign(msg));
}

#[test]
fn litep2p_sk_to_substrate_sk() {
let sk = litep2p_ed25519::SecretKey::generate();
let sk1: SecretKey = sk.clone().into();
let sk2 = SecretKey::try_from_bytes(&mut sk.to_bytes()).unwrap();

let kp: litep2p_ed25519::Keypair = sk.into();
let kp1: Keypair = sk1.into();
let kp2: Keypair = sk2.into();

let msg = "hello world".as_bytes();
let sig = kp.sign(msg);

assert_eq!(sig, kp1.sign(msg));
assert_eq!(sig, kp2.sign(msg));
}

#[test]
fn libp2p_sk_to_substrate_sk() {
let sk = libp2p_ed25519::SecretKey::generate();
let sk_bytes = sk.as_ref().to_owned();
let sk1: SecretKey = sk.clone().into();
let sk2 = SecretKey::try_from_bytes(sk_bytes).unwrap();

let kp: libp2p_ed25519::Keypair = sk.into();
let kp1: Keypair = sk1.into();
let kp2: Keypair = sk2.into();

let msg = "hello world".as_bytes();
let sig = kp.sign(msg);

assert_eq!(sig, kp1.sign(msg));
assert_eq!(sig, kp2.sign(msg));
}
}