cleanup, refactor

This commit is contained in:
Janis 2024-07-30 15:50:37 +02:00
parent fe5245fc31
commit a73e2cd8d8
5 changed files with 29 additions and 15 deletions

View file

@ -25,13 +25,12 @@ required-features = ["ed25519", "clap", "rpassword", "base64"]
[dependencies]
rand = "0.8"
rand_chacha = "0.3"
clap = {version = "3.0.0-beta.5", optional = true, features = ["derive"]}
base64 = {version = "0.13", optional = true}
bytes = {version = "1.1", optional = true}
sha2 = {version = "0.9", optional = true}
rpassword = {version = "5.0", optional = true}
zeroize = {version = "1.5"}
rpassword = {version = "7.0", optional = true}
zeroize = {version = "1.8"}
argon2 = "0.5.3"
thiserror = "1.0"
anyhow = "1.0"

View file

@ -4,12 +4,12 @@ use clap::Parser;
#[derive(Parser)]
#[clap(
name = "duralumin-keygen",
version = "0.2.0",
version = "0.3.0",
author = "No One <noonebtw@nirgendwo.xyz>"
)]
struct Opts {
#[clap(short, long, default_value = "duralumin")]
file: String,
#[clap(short, long)]
file: Option<String>,
}
fn main() -> anyhow::Result<()> {
@ -17,6 +17,15 @@ fn main() -> anyhow::Result<()> {
println!("Generating ed25519 ssh keypair:");
let desc = libduralumin::key_gen::cli::keygen_desc_from_stdin()?;
let base_path = opts.file.unwrap_or_else(|| {
if let Some(tag) = desc.tag.as_ref() {
format!("duralumin_{}", tag.as_str())
} else {
"duralumin".to_owned()
}
});
let keypair = libduralumin::key_gen::generate_key(desc)?;
println!(
@ -29,8 +38,8 @@ fn main() -> anyhow::Result<()> {
keypair.randomart().render("ED25519 256", "SHA256")?
);
let private_path = opts.file.clone();
let public_path = opts.file.clone() + ".pub";
let private_path = base_path.clone();
let public_path = base_path.clone() + ".pub";
let (private_key, public_key) = keypair.encode_keys()?;
std::fs::write(&private_path, private_key)?;

View file

@ -5,6 +5,8 @@ use zeroize::Zeroizing;
use crate::randomart;
pub mod cli {
use std::io::Write;
use zeroize::Zeroizing;
use crate::key_gen::{HashDesc, KeygenDesc};
@ -26,6 +28,7 @@ pub mod cli {
line
}
pub fn read_line() -> std::io::Result<String> {
std::io::stdout().flush()?;
let mut line = String::new();
std::io::stdin().read_line(&mut line)?;
fix_newline_ref(&mut line);
@ -54,9 +57,9 @@ pub mod cli {
pub type Result<T> = std::result::Result<T, Error>;
fn read_passphrase() -> Result<Zeroizing<String>> {
let passphrase = Zeroizing::new(rpassword::prompt_password_stdout("Enter a passphrase: ")?);
let passphrase2 =
Zeroizing::new(rpassword::prompt_password_stdout("Enter a passphrase: ")?);
let passphrase = Zeroizing::new(rpassword::prompt_password("Enter a passphrase: ")?);
let passphrase2 = Zeroizing::new(rpassword::prompt_password("Re-enter your passphrase: ")?);
std::io::stdout().flush().expect("flush stdout");
if passphrase == passphrase2 {
println!(
@ -71,6 +74,7 @@ pub mod cli {
pub fn read_argon_desc() -> Result<HashDesc> {
print!("Use argon2 variant (argon2i, argon2d, argon2id) [argon2id]: ");
let variant = match read_non_empty_line()?.as_ref().map(|s| s.as_str()) {
Some("argon2i") => argon2::Algorithm::Argon2i,
Some("argon2d") => argon2::Algorithm::Argon2d,
@ -80,7 +84,7 @@ pub mod cli {
}
};
print!("Use argon2 version (16,19) [argon2id]: ");
print!("Use argon2 version (16,19) [19]: ");
let version = match read_non_empty_line()?.as_ref().map(|s| s.as_str()) {
Some("16") | Some("10") => argon2::Version::V0x10,
Some("19") | Some("13") | None => argon2::Version::V0x13,
@ -143,7 +147,10 @@ pub mod cli {
let tag = read_non_empty_line()?.map(|s| Zeroizing::new(s));
print!("Encrypt keypair with passphrase? [Y/n]: ");
let encrypt = read_line()? == "Y";
let encrypt = read_line()? != "n";
if encrypt {
print!("Will encrypt keypair.");
}
print!("Use hash algorithm (sha256, argon2) [argon2]: ");
let hash = match read_non_empty_line()?.as_ref().map(|s| s.as_str()) {
@ -225,7 +232,7 @@ impl KeyPair {
}
let private_key = Zeroizing::new(core::str::from_utf8(&private_key).unwrap().to_string());
let public_key = public_key.public_key_base64();
let public_key = format!("{} {}", public_key.name(), public_key.public_key_base64());
Ok((private_key, public_key))
}
}

View file

@ -6,7 +6,6 @@ pub mod passphrase_gen;
#[cfg(feature = "password-gen")]
pub mod password_gen;
#[path = "ed25519.rs"]
pub mod randomart;
#[cfg(feature = "ed25519")]