34 lines
680 B
Rust
34 lines
680 B
Rust
mod x25519;
|
|
|
|
use self::x25519::x25519_shared_key;
|
|
|
|
use crate::Key;
|
|
use rand::RngCore;
|
|
|
|
#[inline]
|
|
pub fn generate_psk(rng: &mut impl RngCore) -> Key {
|
|
let mut key: Key = [0; 32];
|
|
rng.fill_bytes(&mut key);
|
|
key
|
|
}
|
|
|
|
#[inline]
|
|
pub fn generate_privkey(rng: &mut impl RngCore) -> Key {
|
|
let mut k = generate_psk(rng);
|
|
|
|
// curve25519_clamp_secret
|
|
k[0] &= 0xF8;
|
|
k[31] = (k[31] & 127) | 64;
|
|
k
|
|
}
|
|
|
|
#[inline]
|
|
pub fn get_pubkey(private_key: &Key) -> Key {
|
|
let u = [
|
|
9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0,
|
|
];
|
|
|
|
x25519_shared_key(&u, private_key)
|
|
}
|