use std::io::Write; use std::{fs::OpenOptions, path::Path}; use serde::Serialize; use x25519_dalek::{PublicKey, StaticSecret}; #[derive(Serialize)] pub struct Keypair { sk: Vec, pk: Vec, } fn generate_keypair() -> Keypair { let sk = StaticSecret::random(); let pk = PublicKey::from(&sk); Keypair { sk: sk.as_bytes().to_vec(), pk: pk.as_bytes().to_vec(), } } pub fn generate_keys_to_file( pks_path: impl AsRef, sks_path: impl AsRef, num: usize, ) -> std::io::Result<()> { let mut pks_file = OpenOptions::new() .write(true) .append(true) .create(true) .open(pks_path)?; let mut sks_file = OpenOptions::new() .write(true) .append(true) .create(true) .open(sks_path)?; for _ in 0..num { let kp = generate_keypair(); writeln!(pks_file, "{}", serde_json::to_string(&kp.pk)?)?; writeln!(sks_file, "{}", serde_json::to_string(&kp.sk)?)?; } Ok(()) }