use std::path::Path;
use russh::keys::ssh_key::LineEnding;
use russh::keys::{Algorithm, PrivateKey};
use crate::ServerError;
pub const HOST_KEY_FILE: &str = "ssh_host_ed25519_key";
pub fn load_or_generate(data_dir: &Path) -> Result<PrivateKey, ServerError> {
let path = data_dir.join(HOST_KEY_FILE);
if path.exists() {
return Ok(PrivateKey::read_openssh_file(&path)?);
}
std::fs::create_dir_all(data_dir)?;
let key = PrivateKey::random(&mut rand::rng(), Algorithm::Ed25519)?;
key.write_openssh_file(&path, LineEnding::LF)?; Ok(key)
}