eme2-extended 0.2.1

EME2-extended (ECB-Mask-ECB) wide-block cipher mode of operation for any block size ciphers
Documentation
use cipher::KeyIvInit;
use eme2_extended::Eme2;
use threefish::{Threefish256, Threefish512, Threefish1024};

#[test]
fn test_threefish_extended_block_sizes() {
    // 32-byte block
    let key256 = [0u8; 96];
    let iv256 = [0u8; 32];
    let cipher256 = Eme2::<Threefish256>::new(&key256.into(), &iv256.into());
    let mut data256 = [0x42u8; 64]; // 2 blocks
    cipher256.encrypt(&mut data256).expect("encryption succeeded");
    cipher256.decrypt(&mut data256).expect("decryption succeeded");
    assert_eq!(data256, [0x42u8; 64]);

    // 64-byte block
    let key512 = [0u8; 192];
    let iv512 = [0u8; 64];
    let cipher512 = Eme2::<Threefish512>::new(&key512.into(), &iv512.into());
    let mut data512 = [0x42u8; 128]; // 2 blocks
    cipher512.encrypt(&mut data512).expect("encryption succeeded");
    cipher512.decrypt(&mut data512).expect("decryption succeeded");
    assert_eq!(data512, [0x42u8; 128]);

    // 128-byte block
    let key1024 = [0u8; 384];
    let iv1024 = [0u8; 128];
    let cipher1024 = Eme2::<Threefish1024>::new(&key1024.into(), &iv1024.into());
    let mut data1024 = [0x42u8; 256]; // 2 blocks
    cipher1024.encrypt(&mut data1024).expect("encryption succeeded");
    cipher1024.decrypt(&mut data1024).expect("decryption succeeded");
    assert_eq!(data1024, [0x42u8; 256]);
}