libaes

Build Cargo

This is a re-implementation of OpenSSL 1.1.1 AES core algorithms in safe Rust, with zero dependencies.

My original motivation is to find a correct, fast and minimal AES library in Rust, so that I can easily use it to interact with an existing data system that uses AES. But I was not able to find such a library so I decided to write one by porting AES core from OpenSSL 1.1.1 stable. This library strives to be:

In this version, this library supports 128-bit and 256-bit keys with CBC mode only. Automatic padding is included.

Examples

```rust use libaes::Cipher;

let my_key = b"This is the key!"; // key is 16 bytes let plaintext = b"A plaintext"; let iv = b"This is 16 bytes";

// Create a new cipher let cipher = Cipher::new128(mykey);

// Encryption let encrypted = cipher.cbc_encrypt(iv, plaintext);

// Decryption let decrypted = cipher.cbc_decrypt(iv, &encrypted[..]);

```

Correctness

We use a NIST test data to verify the cipher, see the test code.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the above license(s), shall be dual licensed as above, without any additional terms or conditions.