zachery.lol/crates/message-tools/src/gen_keys.rs
2025-11-17 21:22:05 -05:00

48 lines
1 KiB
Rust

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<u8>,
pk: Vec<u8>,
}
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<Path>,
sks_path: impl AsRef<Path>,
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(())
}