42 lines
802 B
Rust
42 lines
802 B
Rust
use rand::Rng;
|
|
|
|
pub fn main () {
|
|
let diceware = Diceware::default ();
|
|
|
|
let random_words: Vec <&str> = (0..8)
|
|
.map (|_| diceware.random_word ())
|
|
.collect ();
|
|
|
|
let passphrase = random_words.join (" ");
|
|
|
|
println! ("{}", passphrase);
|
|
}
|
|
|
|
pub struct Diceware {
|
|
words: Vec <String>,
|
|
}
|
|
|
|
impl Default for Diceware {
|
|
fn default () -> Self
|
|
{
|
|
let wordlist = include_str! ("eff_short_wordlist_1.txt");
|
|
let words: Vec <_> = wordlist.split ('\n').take (1253).map (str::to_string).collect ();
|
|
|
|
assert_eq! (words.len (), 1253);
|
|
assert_eq! (words [0], "acid");
|
|
assert_eq! (words [600], "large");
|
|
assert_eq! (words [1252], "zoom");
|
|
|
|
Self {
|
|
words,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Diceware {
|
|
pub fn random_word (&self) -> &str
|
|
{
|
|
&self.words [rand::thread_rng ().gen_range (0..self.words.len ())]
|
|
}
|
|
}
|