Skip to content

Collection of block cipher algorithms written in pure Rust

Notifications You must be signed in to change notification settings


Repository files navigation

RustCrypto: block ciphers

Project Chat dependency status Apache2/MIT licensed HAZMAT

Collection of block ciphers written in pure Rust.

Higher level constructions

Crates in this repository implement ONLY raw block cipher functionality defined by traits in the cipher crate. In practice block ciphers are rarely used in isolation. Instead, they usually play role of a building block for higher level constructions. In RustCrypto such constructions are implemented generically over block ciphers in separate repositories:

Most users should use constructions defined in these repositories without directly relying on raw block cipher functionality.


Currently only the aes crate provides constant-time implementation and has received a third-party security audit.

Other crates in this repository are not implemented in a constant-time manner and have not yet received any formal cryptographic and security reviews.

It's generally recommended not to use other cipher implementations in this repository besides the aes crate.


Supported algorithms

Name Crate name Docs MSRV
AES (Rijndael) aes Documentation MSRV 1.65
ARIA aria Documentation MSRV 1.65
BelT block cipher belt-block Documentation MSRV 1.65
Blowfish blowfish Documentation MSRV 1.65
Camellia camellia Documentation MSRV 1.65
CAST5 (CAST-128) cast5 Documentation MSRV 1.65
CAST6 (CAST-256) cast6 Documentation MSRV 1.65
DES + 3DES (DEA, 3DEA) des Documentation MSRV 1.65
IDEA idea Documentation MSRV 1.65
Kuznyechik (GOST R 34.12-2015) kuznyechik Documentation MSRV 1.65
Magma (GOST R 34.12-2015) magma Documentation MSRV 1.65
RC2 (ARC2) rc2 Documentation MSRV 1.65
RC5 rc5 Documentation MSRV 1.65
Serpent serpent Documentation MSRV 1.65
SM4 sm4 Documentation MSRV 1.65
Speck speck-cipher Documentation MSRV 1.65
Threefish threefish Documentation MSRV 1.65
Twofish twofish Documentation MSRV 1.65

Minimum Supported Rust Version (MSRV) Policy

MSRV bump is considered a breaking change and will be performed only with a minor version bump.


All crates licensed under either of

at your option.


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.