aes-ctr 0.3.0

AES-CTR stream ciphers

AES-CTR ciphers implementation.

Cipher functionality is accessed using traits from re-exported stream-cipher crate.

This crate will select appropriate implementation at compile time depending on target architecture and enabled target features. For the best performance on x86-64 CPUs enable aes, sse2 and ssse3 target features. You can do it either by using RUSTFLAGS="-C target-feature=+aes,+ssse3" or by editing your .cargo/config. (sse2 target feature is usually enabled by default)


This crate does not provide any authentification! Thus ciphertext integrity is not verified, which can lead to serious vulnerabilities!

Usage example

use aes_ctr::Aes128Ctr;
use aes_ctr::stream_cipher::generic_array::GenericArray;
use aes_ctr::stream_cipher::{
    NewStreamCipher, SyncStreamCipher, SyncStreamCipherSeek

let mut data = [1, 2, 3, 4, 5, 6, 7];

let key = GenericArray::from_slice(b"very secret key.");
let nonce = GenericArray::from_slice(b"and secret nonce");
// create cipher instance
let mut cipher = Aes128Ctr::new(&key, &nonce);
// apply keystream (encrypt)
cipher.apply_keystream(&mut data);
assert_eq!(data, [6, 245, 126, 124, 180, 146, 37]);

// seek to the keystream beginning and apply it again to the `data` (decrypt);
cipher.apply_keystream(&mut data);
assert_eq!(data, [1, 2, 3, 4, 5, 6, 7]);