Files
simple-rust-tests/__crypto/curve25519/src/main.rs
2020-11-08 20:14:19 +08:00

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()));
}