Skip to content

Commit ebc27ae

Browse files
committed
Add rust-ecdh-sample
1 parent 0f4661d commit ebc27ae

File tree

3 files changed

+268
-0
lines changed

3 files changed

+268
-0
lines changed

rust-ecdh-sample/Cargo.lock

+211
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust-ecdh-sample/Cargo.toml

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[package]
2+
name = "rust-ecdh-sample"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]
7+
anyhow = "1.0.95"
8+
base64 = "0.22.1"
9+
x25519-dalek = { version = "2.0.1", features = ["getrandom", "static_secrets"] }

rust-ecdh-sample/src/main.rs

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
use base64::prelude::{BASE64_STANDARD_NO_PAD, Engine};
2+
use x25519_dalek::{PublicKey, SharedSecret, StaticSecret};
3+
4+
struct State {
5+
private_key: StaticSecret,
6+
public_key: PublicKey,
7+
}
8+
9+
fn generate_key() -> anyhow::Result<State> {
10+
let private_key = StaticSecret::random();
11+
let public_key = PublicKey::from(&private_key);
12+
Ok(State {
13+
private_key,
14+
public_key,
15+
})
16+
}
17+
18+
fn key_exchange(state: &State, peer_public_key: &PublicKey) -> SharedSecret {
19+
state.private_key.diffie_hellman(peer_public_key)
20+
}
21+
22+
fn main() -> anyhow::Result<()> {
23+
let alice = generate_key()?;
24+
let bob = generate_key()?;
25+
26+
println!(
27+
"alice/public_key = {}",
28+
BASE64_STANDARD_NO_PAD.encode(alice.public_key.to_bytes())
29+
);
30+
println!(
31+
" bob/public_key = {}",
32+
BASE64_STANDARD_NO_PAD.encode(bob.public_key.to_bytes())
33+
);
34+
35+
let alice_secret = key_exchange(&alice, &bob.public_key);
36+
let bob_secret = key_exchange(&bob, &alice.public_key);
37+
38+
println!(
39+
"alice/shared_secret = {}",
40+
BASE64_STANDARD_NO_PAD.encode(alice_secret.as_bytes())
41+
);
42+
println!(
43+
" bob/shared_secret = {}",
44+
BASE64_STANDARD_NO_PAD.encode(bob_secret.as_bytes())
45+
);
46+
47+
Ok(())
48+
}

0 commit comments

Comments
 (0)