#blake3 #encryption #primitive #stream #stream-cipher #along #xchacha20


Quantum-safe stream encryption using XChaCha20 and BLAKE3 along with various other cryptographic primitives

8 releases

0.3.0 Jan 31, 2023
0.2.1 Nov 18, 2022
0.1.4 Sep 30, 2022

#1783 in Cryptography

28 downloads per month






RUST_LOG=trace cargo run --release --example basic

For the losers who use Windows

cargo run --release --example basic

Use it in your own code

cargo add xc220b3

Look at basic.rs in examples for usage.

Note: This has not been audited. Use at your own risk. This is a work in progress for internal use at Valera. It is likely to change and need optimisations to achieve its goals.

xc220b3 is a (planned-to-be-quantum-safe) cryptographic library based around a XChaCha20-BLAKE3 authenticated cipher. It (will) include various other things too, for example, wrappers for key exchange protocols and JWT-like certificates that are needed.

The API design is opinionated - instead of returning structs, it returns bytes which are intended for direct out-of-bound transmission. You provide the transport and in/out (including serialization) and the library secures whatever you're sending.


This is a custom authenticated cipher used for symmetrical encryption. It is based on the XChaCha20 stream cipher and the BLAKE3 hash function. It has some notable functional differences against ChaCha20-Poly1305, the most popular alternative using the ChaCha cipher (apart from using different ciphers, of course):

  • The nonce is not a counter, or a random number. Instead, it uses the 24-byte BLAKE3 MAC for the nonce.
  • This ensures nonces are never reused on the same key for two different messages, while not suffering from slowdowns experienced with random nonces.
  • There is less state for a session to store (it only needs the symmetric key).
  • It also saves space in messages, as additional data is not appended to the cipher during encryption apart from the MAC.
  • BLAKE3 can be significantly faster than Poly1305, dropping down to 0.49 cycles per byte on modern hardware vs ~2.5 cycles per byte for Poly1305 for 16KB+ messages (5x improvement).

Key Exchange

Not ready yet. Aiming to be quantum-safe.


CPU Encrypt (MB/s) Decrypt (MB/s)
Intel i5-12600k 533.9 583.5
Apple M1 Max 443.9 432.0
AMD EPYC 7542 371.5 368.5


~95K SLoC