35 lines
868 B
Rust
35 lines
868 B
Rust
use clap::Parser;
|
|
use totp_rfc6238::{HashAlgorithm, TotpGenerator};
|
|
|
|
/// TOTP - One Time Password generator
|
|
#[derive(Parser, Debug)]
|
|
#[clap(author, version, about, long_about = None)]
|
|
struct Args {
|
|
/// The secret to use
|
|
#[clap(short, long)]
|
|
secret: String,
|
|
|
|
/// Interval between two numbers generation
|
|
#[clap(short, long, default_value_t = 30)]
|
|
topt_step: u64,
|
|
|
|
/// Size of generated secret
|
|
#[clap(short, long, default_value_t = 6)]
|
|
len: usize,
|
|
}
|
|
|
|
fn main() {
|
|
let args: Args = Args::parse();
|
|
|
|
let totp_generator = TotpGenerator::new()
|
|
.set_digit(args.len).unwrap()
|
|
.set_step(args.topt_step).unwrap()
|
|
.set_hash_algorithm(HashAlgorithm::SHA1)
|
|
.build();
|
|
|
|
let key = base64::decode(args.secret).unwrap();
|
|
let code = totp_generator.get_code(&key);
|
|
|
|
println!("Secret len = {}", code);
|
|
}
|