29 lines
860 B
Rust
29 lines
860 B
Rust
//! `relicario rate` — score a passphrase via zxcvbn.
|
|
|
|
use anyhow::Result;
|
|
|
|
pub fn cmd_rate(passphrase: String) -> Result<()> {
|
|
let pw: String = if passphrase == "-" {
|
|
use std::io::BufRead;
|
|
let stdin = std::io::stdin();
|
|
let mut line = String::new();
|
|
stdin.lock().read_line(&mut line)?;
|
|
line.trim_end_matches(&['\r', '\n'][..]).to_string()
|
|
} else {
|
|
passphrase
|
|
};
|
|
let est = relicario_core::generators::rate_passphrase(&pw);
|
|
let label = match est.score {
|
|
0 => "very weak",
|
|
1 => "weak",
|
|
2 => "fair",
|
|
3 => "good",
|
|
4 => "strong",
|
|
_ => "?",
|
|
};
|
|
println!("score: {}/4 ({})", est.score, label);
|
|
println!("guesses: ~10^{:.1}", est.guesses_log10);
|
|
println!("note: init requires score ≥ 3 (see `relicario init`)");
|
|
Ok(())
|
|
}
|