shuttle_core/crypto/
ecdh.rs1use sodiumoxide::crypto::scalarmult::curve25519;
3use crypto;
4
5#[derive(Debug, Clone, PartialEq, Eq)]
7pub struct Curve25519Secret(pub [u8; 32]);
8
9impl Curve25519Secret {
10 pub fn random() -> Curve25519Secret {
12 let seed = crypto::random_bytes(32);
13 let mut data = [0; 32];
14 data.copy_from_slice(&seed[..32]);
15 Curve25519Secret(data)
16 }
17}
18
19#[derive(Debug, Clone, PartialEq, Eq)]
21pub struct Curve25519Public(pub [u8; 32]);
22
23impl Curve25519Public {
24 pub fn derive_from_secret(secret: &Curve25519Secret) -> Curve25519Public {
26 let scalar = curve25519::Scalar(secret.0);
27 let group_element = curve25519::scalarmult_base(&scalar);
28 Curve25519Public(group_element.0)
29 }
30}