diff options
author | Jesse Luehrs <doy@tozt.net> | 2021-07-05 13:41:01 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2021-07-05 14:56:31 -0400 |
commit | 72f64ca23ce14f4497fb3e762672b82454ddd892 (patch) | |
tree | dd5ebc41a39bb3939289e44f1a38e054fa08a4f0 /src/pwgen.rs | |
parent | c5d54db0b13502955e973167082ada0dc2000bbf (diff) | |
download | rbw-72f64ca23ce14f4497fb3e762672b82454ddd892.tar.gz rbw-72f64ca23ce14f4497fb3e762672b82454ddd892.zip |
remove chbs dependency since it seems to be unmaintained
Diffstat (limited to 'src/pwgen.rs')
-rw-r--r-- | src/pwgen.rs | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/pwgen.rs b/src/pwgen.rs index 4d2d497..55151e6 100644 --- a/src/pwgen.rs +++ b/src/pwgen.rs @@ -1,4 +1,3 @@ -use chbs::scheme::ToScheme as _; use rand::seq::SliceRandom as _; const SYMBOLS: &[u8] = b"!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; @@ -17,6 +16,8 @@ pub enum Type { } pub fn pwgen(ty: Type, len: usize) -> String { + let mut rng = rand::thread_rng(); + let alphabet = match ty { Type::AllChars => { let mut v = vec![]; @@ -42,17 +43,10 @@ pub fn pwgen(ty: Type, len: usize) -> String { v } Type::Diceware => { - let config = chbs::config::BasicConfig { - words: len, - capitalize_first: chbs::probability::Probability::Never, - capitalize_words: chbs::probability::Probability::Never, - ..chbs::config::BasicConfig::default() - }; - return config.to_scheme().generate(); + return diceware(&mut rng, len); } }; - let mut rng = rand::thread_rng(); let mut pass = vec![]; pass.extend( std::iter::repeat_with(|| alphabet.choose(&mut rng).unwrap()) @@ -63,6 +57,15 @@ pub fn pwgen(ty: Type, len: usize) -> String { String::from_utf8(pass).unwrap() } +fn diceware(rng: &mut impl rand::RngCore, len: usize) -> String { + let mut words = vec![]; + for _ in 0..len { + // unwrap is safe because choose only returns None for an empty slice + words.push(*crate::wordlist::EFF_LONG.choose(rng).unwrap()); + } + words.join(" ") +} + #[cfg(test)] mod test { use super::*; |