Crate aesni[−][src]
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 an 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).
When using 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
.
Alternatively you can enable ignore_target_feature_check
crate feature
which will bypass target feature check, but it will have a negative implact
on performance.
Ciphers functionality is accessed using BlockCipher
trait from
block-cipher-trait
crate.
Usage example
use aesni::{Aes128, BlockCipher}; let key = GenericArray::from_slice(&[0u8; 16]); let mut block = GenericArray::clone_from_slice(&[0u8; 16]); let mut block8 = GenericArray::clone_from_slice(&[block; 8]); // Initialize cipher let cipher = aesni::Aes128::new(&key); let block_copy = block.clone(); // Encrypt block in-place cipher.encrypt_block(&mut block); // And decrypt it back cipher.decrypt_block(&mut block); assert_eq!(block, block_copy); // We can encrypt 8 blocks simultaneously using // instruction-level parallelism let block8_copy = block8.clone(); cipher.encrypt_blocks(&mut block8); cipher.decrypt_blocks(&mut block8); assert_eq!(block8, block8_copy);
Related documents
Re-exports
pub extern crate block_cipher_trait; |
Structs
Aes128 |
AES-128 block cipher |
Aes192 |
AES-192 block cipher |
Aes256 |
AES-256 block cipher |
Traits
BlockCipher |
The trait which defines in-place encryption and decryption over single block or several blocks in parallel. |