mini-enigma 0.3.0

#[no-std] (and no alloc) zero dependency implementation of the M3 Enigma
Documentation
use std::path::Path;

use mini_enigma::state_machine::Enigma;

use super::load_enigma_settings;

pub fn kat<const TYPE: usize, P>(path: P)
where
    P: AsRef<Path> + std::fmt::Display + Copy,
{
    let settings = load_enigma_settings(path);
    println!("Testing {} [{}]", settings.name, settings.date.unwrap_or(0));
    let mut enigma = Enigma::new::<TYPE>(&settings.clone().into());
    print!("input:  ");
    let mut ct = String::new();
    for (i, ch) in settings.plaintext.chars().enumerate() {
        let bit = enigma.encrypt_char(ch);
        ct.push(bit);
        print!("{ch}");
        if settings.ciphertext.as_bytes()[i] as char != bit {
            println!("\noutput: {ct}");
            println!("pos: {:?}", enigma.get_grundstellung());
        }
        assert_eq!(settings.ciphertext.as_bytes()[i] as char, bit)
    }
}