parent
dd454dd22b
commit
a00d1f3178
|
@ -16,7 +16,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "division_of_one"
|
name = "division_of_one"
|
||||||
version = "0.1.0"
|
version = "0.1.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"rand",
|
"rand",
|
||||||
]
|
]
|
||||||
|
|
|
@ -7,7 +7,7 @@ keywords = ["passphrase", "password"]
|
||||||
license = "AGPL-3.0"
|
license = "AGPL-3.0"
|
||||||
name = "division_of_one"
|
name = "division_of_one"
|
||||||
repository = "https://six-five-six-four.com/git/reactor/division_of_one"
|
repository = "https://six-five-six-four.com/git/reactor/division_of_one"
|
||||||
version = "0.1.1"
|
version = "0.1.2"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
rand = "0.8.5"
|
rand = "0.8.5"
|
||||||
|
|
|
@ -2,11 +2,13 @@
|
||||||
|
|
||||||
A diceware passphrase generator, e.g. `correct horse battery staple`
|
A diceware passphrase generator, e.g. `correct horse battery staple`
|
||||||
|
|
||||||
|
Also generates PINs.
|
||||||
|
|
||||||
Install with `cargo install division_of_one` or download the Windows exe from my Git forge: https://six-five-six-four.com/git/reactor/division_of_one
|
Install with `cargo install division_of_one` or download the Windows exe from my Git forge: https://six-five-six-four.com/git/reactor/division_of_one
|
||||||
|
|
||||||
# Why this and not another generator?
|
# Why this and not another generator?
|
||||||
|
|
||||||
It's easier to write 40 lines of Rust than to audit it.
|
It's easier to write 50 lines of Rust than to audit it.
|
||||||
|
|
||||||
I want to just point my friends and family at this without having to check if it's been compromised since the last time I saw it.
|
I want to just point my friends and family at this without having to check if it's been compromised since the last time I saw it.
|
||||||
|
|
||||||
|
|
14
src/lib.rs
14
src/lib.rs
|
@ -1,8 +1,10 @@
|
||||||
use rand::seq::SliceRandom as _;
|
use rand::{seq::SliceRandom as _, Rng as _};
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
let passphrase = create_passphrase(" ", 8);
|
let passphrase = create_passphrase(" ", 8);
|
||||||
println!("{passphrase}");
|
println!("{passphrase}");
|
||||||
|
let pin = create_pin(8);
|
||||||
|
println!("{pin}");
|
||||||
println!("Press Enter");
|
println!("Press Enter");
|
||||||
let mut input = String::new();
|
let mut input = String::new();
|
||||||
std::io::stdin().read_line(&mut input).ok();
|
std::io::stdin().read_line(&mut input).ok();
|
||||||
|
@ -14,6 +16,16 @@ pub fn create_passphrase(separator: &str, len: usize) -> String {
|
||||||
words.join(separator)
|
words.join(separator)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Generates a decimal PIN
|
||||||
|
///
|
||||||
|
/// PINs are returned as a String because you do not do math with PINs, therefore they are not numbers.
|
||||||
|
pub fn create_pin(len: usize) -> String {
|
||||||
|
let digits: Vec<_> = (0..len)
|
||||||
|
.map(|_| format!("{}", rand::thread_rng().gen_range(0..=9)))
|
||||||
|
.collect();
|
||||||
|
digits.join("")
|
||||||
|
}
|
||||||
|
|
||||||
pub struct Dice {
|
pub struct Dice {
|
||||||
words: Vec<String>,
|
words: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue