48 lines
1 KiB
Rust
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(())
|
|
}
|