This is a Rust implementation of the AEGIS authenticated cipher, ported from the Zig standard library.
AEGIS is extremely fast on CPUs with AES acceleration, has a large nonce size, and is key committing.
std
: allow dynamic allocations
std
is the default.
pure-rust
: don't use thecc
crate to take advantage of the optimized implementation ported from libsodium. Setting this flag will substantially degrade performance. Only required if you need to support old x86_64 or ARM CPUs without AES acceleration.
A benchmark can be run that way:
export RUSTFLAGS="-C target-cpu=native"
cargo bench
For benchmarking, RUSTFLAGS
is set so that the AES-GCM implementations can take advantage of hardware acceleration.
Benchmarks take a 16384 bytes input block. Results are in bytes per second.
Crates:
aes-gcm
chacha20poly1305
aegis128l
rustc
version 1.65.0
, wasmtime
version 4.0.0
.
cipher | speed |
---|---|
aes256-gcm | 934.41 M/s |
aes128-gcm | 973.18 M/s |
chacha20-poly1305 | 1.35 G/s |
aegis128l | 13.70 G/s |
cipher | speed |
---|---|
aes256-gcm | 139.66 M/s |
aes128-gcm | 173.09 M/s |
chacha20-poly1305 | 265.48 M/s |
aegis128l | 13.88 G/s |
cipher | speed |
---|---|
aes256-gcm | 26.07 M/s |
aes128-gcm | 30.10 M/s |
chacha20-poly1305 | 43.40 M/s |
aegis128l | 33.68 M/s |
cipher | speed |
---|---|
aes256-gcm | 2.75 M/s |
aes128-gcm | 3.33 M/s |
chacha20-poly1305 | 4.10 M/s |
aegis128l | 3.64 M/s |
cipher (implementation) | speed |
---|---|
aes256-gcm (OpenSSL) | 4.97 G/s |
aes128-gcm (OpenSSL) | 6.89 G/s |
chacha20-poly1305 (OpenSSL) | 2.67 G/s |
aes128-ocb (OpenSSL) | 7.10 G/s |
aegis128l (Zig) | 14.08 G/s |
rocca (Zig) | 16.28 G/s |