feat: add curve25519

This commit is contained in:
2020-11-08 20:13:45 +08:00
parent 1b3cb499b4
commit 6f8c83fe26
3 changed files with 346 additions and 0 deletions

View File

@@ -0,0 +1,28 @@
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()));
}