eme2 0.1.2

EME2 (ECB-Mask-ECB) wide-block cipher mode of operation
Documentation
// use cipher::KeyIvInit;
// use eme2::Eme2;
// use threefish::{Threefish256, Threefish512, Threefish1024};
// 
// // If we uncomment the line below, the compiler will safely REJECT the code!
// // type ThreefishEme2 = Eme2<Threefish256>;
// 
// #[test]
// fn test_threefish_compilation_fails_safely() {
//     // Threefish is an interesting edge-case because it has block sizes of 256, 512, and 1024 bits (32, 64, and 128 bytes).
//     //
//     // EME2 (as defined by IEEE P1619.2) ONLY supports 128-bit block ciphers.
//     // This is because the internal padding and Galois Field arithmetic (`mult_by_two`)
//     // operates explicitly over the GF(2^128) polynomial (x^128 + x^7 + x^2 + x + 1).
//     //
//     // If you were to pass a 256-bit block cipher like Threefish256 into this mode,
//     // it would cause severe cryptographic and memory corruption bugs.
//     //
//     // Luckily, because we architected `Eme2<C>` using RustCrypto's strict typing system
//     // and enforced the bound: `C: BlockCipherEncrypt + BlockCipherDecrypt + BlockSizeUser<BlockSize = U16>`
//     //
//     // The Rust compiler GUARANTEES at compile-time that no one can accidentally plug
//     // a non-128-bit cipher into EME2. It will throw a trait bound error!
// }