AES block cipher implementation using AES-NI instruction set.
This crate does not implement any software fallback and does not
automatically check CPUID, so if you are using this crate make sure to run
software on appropriate hardware or to use software fallback
(e.g. from aes-soft crate) with
runtime detection of AES-NI availability (e.g. by using
cupid crate).
To build this crate do not forget to enable aes target feature, otherwise
you will get an empty crate. You can do it either by using RUSTFLAGS="-C target-feature=+aes" or by editing your .cargo/config.
Additionally this crate currently requires nigthly Rust compiler due to the
usage of unstable cfg_target_feature and stdsimd features.
Ciphers functionality is accessed using BlockCipher trait from
block-cipher-trait crate.
Usage example
# use GenericArray;
use ;
let key = from_slice;
let mut block = clone_from_slice;
let mut block8 = clone_from_slice;
// Initialize cipher
let cipher = new;
let block_copy = block.clone;
// Encrypt block in-place
cipher.encrypt_block;
// And decrypt it back
cipher.decrypt_block;
assert_eq!;
// We can encrypt 8 blocks simultaneously using
// instruction-level parallelism
let block8_copy = block8.clone;
cipher.encrypt_blocks;
cipher.decrypt_blocks;
assert_eq!;