29 lines
1.0 KiB
Rust
29 lines
1.0 KiB
Rust
use rand::rngs::OsRng;
|
|
use ed25519_dalek::{ Keypair, Signer, Verifier };
|
|
use x25519_dalek::{ EphemeralSecret, PublicKey };
|
|
|
|
fn main() {
|
|
let mut csprng = OsRng{};
|
|
let keypair = Keypair::generate(&mut csprng);
|
|
println!("Key pair: {:#?}", keypair);
|
|
|
|
let message = b"This is sign test message.";
|
|
let signature = keypair.sign(message);
|
|
println!("Signature: {}", hex::encode(signature));
|
|
|
|
let public_key = keypair.public;
|
|
println!("Verify result: {:?}", public_key.verify(message, &signature));
|
|
|
|
// key exchange
|
|
let alice_secret = EphemeralSecret::new(OsRng);
|
|
let alice_public = PublicKey::from(&alice_secret);
|
|
let bob_secret = EphemeralSecret::new(OsRng);
|
|
let bob_public = PublicKey::from(&bob_secret);
|
|
|
|
let alice_shared_secret = alice_secret.diffie_hellman(&bob_public);
|
|
let bob_shared_secret = bob_secret.diffie_hellman(&alice_public);
|
|
|
|
println!("Alice shared secret: {}", hex::encode(alice_shared_secret.as_bytes()));
|
|
println!("Bob shared secret: {}", hex::encode(bob_shared_secret.as_bytes()));
|
|
}
|