passforge 0.1.1

A robust and flexible CLI password generator.
Documentation
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use passforge::{
    Generator, Length, PassphraseConfig, PassphraseGenerator, PasswordConfig, PasswordGenerator,
    StrengthEvaluator, WordList, ZxcvbnAnalysis,
};

fn generate_passwords(c: &mut Criterion) {
    let config = PasswordConfig::new(Length::Single(16), true, true, true);
    c.bench_function("generate 1000 16-char passwords", |b| {
        b.iter(|| {
            black_box(PasswordGenerator::generate_multiple(&config, 1000).unwrap());
        })
    });
}

fn generate_passphrases(c: &mut Criterion) {
    let config = PassphraseConfig::new(5, "-".to_string(), WordList::Default);
    c.bench_function("generate 100 5-word passphrases", |b| {
        b.iter(|| {
            black_box(PassphraseGenerator::generate_multiple(&config, 100).unwrap());
        })
    });
}

fn evaluate_password_strength(c: &mut Criterion) {
    let config = PasswordConfig::new(Length::Single(16), true, true, true);
    let passwords = PasswordGenerator::generate_multiple(&config, 100).unwrap();
    c.bench_function("evaluate strength of 100 passwords", |b| {
        b.iter(|| {
            for password in &passwords {
                black_box(ZxcvbnAnalysis::evaluate(password).unwrap());
            }
        })
    });
}

criterion_group!(
    benches,
    generate_passwords,
    generate_passphrases,
    evaluate_password_strength
);
criterion_main!(benches);