use std::sync::OnceLock;
use ring::rand::SystemRandom;
use ring::signature::{Ed25519KeyPair, KeyPair};
pub fn get_shared_keypair() -> &'static [u8] {
static KEYPAIR: OnceLock<Vec<u8>> = OnceLock::new();
KEYPAIR.get_or_init(|| {
let rng = SystemRandom::new();
let pkcs8 = Ed25519KeyPair::generate_pkcs8(&rng).unwrap();
pkcs8.as_ref().to_vec()
})
}
pub fn create_test_keypair(seed: &[u8; 32]) -> (Ed25519KeyPair, [u8; 32]) {
let keypair = Ed25519KeyPair::from_seed_unchecked(seed).unwrap();
let public_key: [u8; 32] = keypair.public_key().as_ref().try_into().unwrap();
(keypair, public_key)
}
pub fn gen_keypair() -> Ed25519KeyPair {
let rng = SystemRandom::new();
let pkcs8 = Ed25519KeyPair::generate_pkcs8(&rng).unwrap();
Ed25519KeyPair::from_pkcs8(pkcs8.as_ref()).unwrap()
}