fides 4.3.5

Fides is a library for cryptographic primitives.
Documentation
use rand::{RngCore, rngs::OsRng};
use x25519_dalek::{StaticSecret, PublicKey, SharedSecret};

pub fn secret_key() -> [u8; 32] {

    let mut key = [0_u8; 32];

    OsRng.fill_bytes(&mut key);

    let sk: StaticSecret = StaticSecret::from(key);

    sk.to_bytes()

}

pub fn public_key(secret_key: &[u8; 32]) -> [u8; 32] {

    let sk: StaticSecret = StaticSecret::from(*secret_key);

    let pk: PublicKey = PublicKey::from(&sk);

    pk.to_bytes()

}

pub fn shared_key(public_key: &[u8; 32], secret_key: &[u8; 32]) -> [u8; 32] {

    let sk: StaticSecret = StaticSecret::from(*secret_key);

    let pk: PublicKey = PublicKey::from(*public_key);

    let shared_secret: SharedSecret = StaticSecret::diffie_hellman(&sk, &pk);
    
    shared_secret.to_bytes()

}