chacha20 0.3.2

The ChaCha20 stream cipher (RFC 8439) implemented in pure Rust using traits from the RustCrypto stream-cipher crate, with optional architecture-specific hardware acceleration (AVX2, SSE2). Additionally provides the ChaCha8, ChaCha12, and XChaCha20 stream ciphers, and also optional rand_core-compatible RNGs based on those ciphers.
Documentation

ChaCha20

crate Docs Apache2/MIT licensed Rust Version Build Status

ChaCha20 is a stream cipher which is designed to support high-performance software implementations.

It improves upon the previous Salsa20 stream cipher with increased per-round diffusion at no cost to performance.

This crate also contains an implementation of XChaCha20: a variant of ChaCha20 with an extended 192-bit (24-byte) nonce, gated under the xchacha20 Cargo feature (on-by-default).

Documentation

Implementations

This crate contains the following implementations of ChaCha20, all of which work on stable Rust with the following RUSTFLAGS:

  • x86 / x86_64
    • avx2: (~1.4cpb) -Ctarget-cpu=haswell -Ctarget-feature=+avx2
    • sse2: (~2.5cpb) -Ctarget-feature=+sse2 (on by default on x86 CPUs)
  • Portable
    • soft: (~5 cpb on x86/x86_64)

NOTE: cpb = cycles per byte (smaller is better)

Security Warning

This crate does not ensure ciphertexts are authentic! Thus ciphertext integrity is not verified, which can lead to serious vulnerabilities! To avoid this, use the ChaCha20Poly1305 Authenticated Encryption with Associated Data (AEAD) algorithm instead.

No security audits of this crate have ever been performed, and it has not been thoroughly assessed to ensure its operation is constant-time on common CPU architectures.

USE AT YOUR OWN RISK!

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 Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.