Repository: The-DevX-Initiative/RCIG_Coordination_Repo Branch: main Commit: f4e1c8aa4cbe Files: 10 Total size: 35.9 KB Directory structure: gitextract_mfs6cg0a/ ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── add_crate.md │ │ └── bug.md │ └── workflows/ │ └── ci.yml ├── .gitignore ├── Awesome_Rust_Cryptography.md ├── CNAME ├── README.md ├── _config.yml ├── index.html └── markdownlint.rb ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/ISSUE_TEMPLATE/add_crate.md ================================================ --- name: Add Crate about: Add a crate to the list --- ================================================ FILE: .github/ISSUE_TEMPLATE/bug.md ================================================ --- name: Bug report about: Report a bug in the docs --- ================================================ FILE: .github/workflows/ci.yml ================================================ name: Rust Crypto CI on: [pull_request, push] jobs: check_docs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: markdown nits run: | sudo gem install mdl mdl -s markdownlint.rb README.md ================================================ FILE: .gitignore ================================================ .jekyll-cache/ _site ================================================ FILE: Awesome_Rust_Cryptography.md ================================================ # Short URL for this page: [cryptography.rs](https://cryptography.rs) Below is a list of actively maintained, high-quality cryptography libraries independently developed by members of the Rust Community. The list is compiled and curated by the [Rust Cryptography Interest Group (RCIG)](https://github.com/The-DevX-Initiative/RCIG_Coordination_Repo). If you have any suggestions, questions, or other concerns with this list, please [open an issue](https://github.com/The-DevX-Initiative/RCIG_Coordination_Repo/issues/new?title=Awesome+Rust+Cryptography:+[issue+here]) and we'll get back to you. The following badges are used to provide more information about libraries that meet certain criteria: | Badge | Description | |---------------------|-------------| | ![][audited-badge] | crate has at least one security audit (click to view) | | ![][verified-badge] | crate has been formally verified | Note: libraries in each section are listed in alphabetical order, *not* order of preference. [audited-badge]: https://img.shields.io/badge/audited-success.svg [verified-badge]: https://img.shields.io/badge/verified-informational.svg ## Table of Contents - [High-level Libraries](#high-level-libraries) - [Transport Encryption Libraries](#transport-encryption-libraries) - [Secure Messaging Protocols](#secure-messaging-protocols) - [Collections of Cryptographic Primitives](#collections-of-cryptographic-primitives) - [Traits for Cryptographic Primitives](#traits-for-cryptographic-primitives) - [Symmetric Cryptography](#symmetric-cryptography) - [Asymmetric Cryptography](#asymmetric-cryptography) - [Platform / Framework Bindings](#platform--framework-bindings) - [Cryptographic Hardware](#cryptographic-hardware) - [Post-Quantum Cryptography](#post-quantum-cryptography) - [Random Number Generators](#random-number-generators) - [Zero-knowledge Proofs](#zero-knowledge-proofs) - [Secure Multiparty Computation](#secure-multiparty-computation) - [Fully Homomorphic Encryption](#fully-homomorphic-encryption) - [Format Decoders/Encoders](#format-decodersencoders) - [Defensive Measures](#defensive-measures) - [Arithmetic](#arithmetic) - [Miscellany](#miscellany) ## High-level Libraries [up](#table-of-contents) These libraries function at a very high level and are designed for simplicity and ease-of-use. They provide integrated key management in addition to providing high-level APIs for algorithms. - [rage](https://github.com/str4d/rage) Implementation of [age](https://age-encryption.org/) -- a simple, secure and modern encryption tool with small explicit keys, no config options, and UNIX-style composability. - [signatory](https://github.com/iqlusioninc/crates/tree/main/signatory) High-level digital signature library with support for ECDSA and Ed25519. - [tink-rust](https://github.com/project-oak/tink-rust) Rust port of Google's high-level Tink cryptography library. ## Transport Encryption Libraries [up](#table-of-contents) These libraries implement protocols that are designed to protect data-in-transit; i.e., network communications. - [rustls](https://github.com/ctz/rustls) [![][audited-badge]](https://cure53.de/pentest-report_rustls.pdf) Modern SSL/TLS library in Rust. - [snow](https://github.com/mcginty/snow) Pure Rust implementation of Trevor Perrin's [Noise Protocol](https://noiseprotocol.org). - [strobe-rs](https://github.com/rozbb/strobe-rs) Relatively barebones, `no_std` implementation of the [Strobe protocol framework](https://strobe.sourceforge.io/) in pure Rust. - [OpenMLS](https://github.com/openmls/openmls/) [MLS](https://datatracker.ietf.org/doc/draft-ietf-mls-protocol/) implementation in Rust. - [webpki](https://github.com/briansmith/webpki) validates Web PKI (TLS/SSL) certificates ## Secure Messaging Protocols [up](#table-of-contents) This section is for secure messaging protocols that transfer messages with end-to-end encryption (E2EE) and may use perfect forward secrecy and post-compromise security. - [OpenMLS](https://github.com/openmls/openmls/) IETF Messaging Layer Security (MLS) protocol designed for secure group messaging with forward secrecy, post-compromise security, and deniable authentication [RFC 9420](https://datatracker.ietf.org/doc/html/rfc9420). - [mls-rs](https://github.com/awslabs/mls-rs.git) IETF MLS protocol library that has been validated for conformance to the RFC 9420 specification but has not yet received a full security audit by a 3rd party. - [Matter protocol](https://github.com/project-chip/rs-matter) A secure application layer message protocol for devices, particularly home automation devices, that supports encryption, authentication, and privacy. - [vodozemac](https://github.com/matrix-org/vodozemac) An implementation of Olm (Double Ratchet) and Megolm cryptographic ratchets used in message based protocols. This crate has received one security [audit](https://matrix.org/media/Least%20Authority%20-%20Matrix%20vodozemac%20Final%20Audit%20Report.pdf) by [Least Authority](https://leastauthority.com/), with no significant findings. ## Collections of Cryptographic Primitives [up](#table-of-contents) These libraries provide omnibus collections of different cryptographic primitives contained within a single library. - [evercrypt-rust](https://github.com/franziskuskiefer/evercrypt-rust) ![][verified-badge] Rust bindings for [evercrypt](https://github.com/project-everest/hacl-star/tree/master/providers/evercrypt), a set of high-performance HACL\*-verified implementations of cryptographic primitives. bindings crate, bringing HACL-verified cryptographic primitives. - [libsm](https://github.com/citahub/libsm) China's Standards of Encryption Algorithms (SM2/3/4). - [orion](https://github.com/brycx/orion) Collection of usable, easy and safe pure-Rust cryptographic primitives. - [\*ring\*](https://github.com/briansmith/ring) [![][audited-badge]](https://cure53.de/pentest-report_rustls.pdf) focused on the implementation, testing, and optimization of a core set of cryptographic operations exposed via an easy-to-use (and hard-to-misuse) API. \*ring\* exposes a Rust API and is written in a hybrid of Rust, C, and assembly language. - [themis](https://github.com/cossacklabs/themis) Cross-platform general purpose crypto library for securing data during authentication, storage, messaging, network exchange, etc. - [dryoc](https://github.com/brndnmtthws/dryoc) A pure-Rust, general purpose crypto library that implements libsodium primitives. ## Traits for Cryptographic Primitives [up](#table-of-contents) The crates in this section provide trait-based abstractions for different types of cryptographic primitives, allowing implementations of higher-level cryptographic algorithms and protocols which are generic over specific primitives and implementations. - [aead](https://github.com/RustCrypto/traits/tree/master/aead) Authenticated Encryption with Additional Data (AEAD) cipher traits. - [ark-ec](https://github.com/arkworks-rs/algebra/tree/master/ec) Elliptic curve traits as used by the [`arkworks` ecosystem](arkworks.rs). - [ark-ff](https://github.com/arkworks-rs/algebra/tree/master/ff) Finite field traits as used by the [`arkworks` ecosystem](arkworks.rs). - [cipher](https://github.com/RustCrypto/traits/tree/master/cipher) Block cipher and stream cipher traits. - [crypto](https://github.com/RustCrypto/traits/tree/master/crypto) Facade for all [RustCrypto](https://github.com/RustCrypto) traits. - [crypto-mac](https://github.com/RustCrypto/traits/tree/master/crypto-mac) Message Authentication Code (MAC) traits. - [digest](https://github.com/RustCrypto/traits/tree/master/digest) Digest/hash algorithm traits. - [elliptic-curve](https://github.com/RustCrypto/traits/tree/master/elliptic-curve) Elliptic curve traits as used by the RustCrypto ecosystem. - [ff](https://github.com/zkcrypto/ff) Finite field traits as used by the RustCrypto and ZKCrypto ecosystems. - [group](https://github.com/zkcrypto/group) Elliptic curve group traits as used by the RustCrypto and ZKCrypto ecosystems. - [pairing](https://github.com/zkcrypto/pairing) Pairing-friendly curve traits as used by the ZKCrypto ecosystem. - [password-hash](https://github.com/RustCrypto/traits/tree/master/password-hash) Password hashing traits and support for the PHC string format. - [signature](https://github.com/RustCrypto/traits/tree/master/signature) Digital signature traits. - [universal-hash](https://github.com/RustCrypto/traits/tree/master/universal-hash) Universal Hash Function (UHF) traits. ## Symmetric Cryptography [up](#table-of-contents) These crates implement individual symmetric cryptography algorithms. ### Authenticated Encryption with Associated Data (AEAD) Algorithms These are high-level symmetric encryption libraries which ensure both the confidentiality and integrity of data. - [aes-gcm](https://github.com/RustCrypto/AEADs/tree/master/aes-gcm) [![][audited-badge]](https://research.nccgroup.com/2020/02/26/public-report-rustcrypto-aes-gcm-and-chacha20poly1305-implementation-review/) Pure Rust implementation of the AES-GCM Authenticated Encryption with Associated Data (AEAD) cipher. - [aes-gcm-siv](https://github.com/RustCrypto/AEADs/tree/master/aes-gcm-siv) AES-GCM-SIV (RFC 8452) is a state-of-the-art high-performance Authenticated Encryption with Associated Data (AEAD) cipher which also provides nonce reuse misuse resistance. - [aes-siv](https://github.com/RustCrypto/AEADs/tree/master/aes-siv) AES-SIV Misuse-Resistant Authenticated Encryption Cipher. - [ascon-aead](https://github.com/RustCrypto/AEADs/tree/master/ascon-aead) Pure Rust implementation of the Ascon Authenticated Encryption with Associated Data (AEAD) cipher, including implementations of the Ascon-128 and Ascon-128a variants. - [ccm](https://github.com/RustCrypto/AEADs/tree/master/ccm) Pure Rust implementation of the Counter with CBC-MAC (CCM) mode (RFC 3610): an Authenticated Encryption with Associated Data (AEAD) algorithm generic over block ciphers with block size equal to 128 bits. - [chacha20poly1305](https://github.com/RustCrypto/AEADs/tree/master/chacha20poly1305) [![][audited-badge]](https://web.archive.org/web/20240108154854/https://research.nccgroup.com/wp-content/uploads/2020/02/NCC_Group_MobileCoin_RustCrypto_AESGCM_ChaCha20Poly1305_Implementation_Review_2020-02-12_v1.0.pdf) Pure Rust implementation of ChaCha20Poly1305 (RFC 8439): an Authenticated Encryption with Associated Data (AEAD) cipher amenable to fast, constant-time implementations in software. - [deoxys](https://github.com/RustCrypto/AEADs/tree/master/deoxys) Pure Rust implementation of the Deoxys Authenticated Encryption with Associated Data (AEAD) cipher, including the Deoxys-II variant which was selected by the CAESAR competition as the best choice for in-depth security. - [eax](https://github.com/RustCrypto/AEADs/tree/master/eax) Pure Rust implementation of the EAX Authenticated Encryption with Associated Data (AEAD) cipher. ### Ciphers (low-level block ciphers and stream ciphers) Note: most users should use higher-level AEAD encryption algorithms enumerated above. Crates in this section are low-level "unauthenticated" ciphers which should be wrapped up in a higher-level construction prior to use. - [aes](https://github.com/RustCrypto/block-ciphers/tree/master/aes) [![][audited-badge]](https://research.nccgroup.com/2020/02/26/public-report-rustcrypto-aes-gcm-and-chacha20poly1305-implementation-review/) Pure Rust implementation of the Advanced Encryption Standard (AES) permutation with optional AES-NI and ARMv8 hardware acceleration. - [block-modes](https://github.com/RustCrypto/block-modes) Generic implementation of block cipher modes of operation, including CBC and ECB modes. - [chacha20](https://github.com/RustCrypto/stream-ciphers/tree/master/chacha20) [![][audited-badge]](https://research.nccgroup.com/2020/02/26/public-report-rustcrypto-aes-gcm-and-chacha20poly1305-implementation-review/) Pure Rust implementation of the ChaCha20 Stream Cipher including XChaCha20. - [ctr](https://github.com/RustCrypto/block-modes/tree/master/ctr) Generic implementations of the Counter Mode (CTR) of operation for block ciphers. - [des](https://github.com/RustCrypto/block-ciphers/tree/master/des) Data Encryption Standard (DES) and 3DES. - [salsa20](https://github.com/RustCrypto/stream-ciphers/tree/master/salsa20) Pure Rust implementation of the Salsa20 Stream Cipher. ### Hash Functions and Friends - [ascon-hash](https://github.com/RustCrypto/hashes/tree/master/ascon-hash) Pure Rust implementation of the Ascon hash and extendable output function (XOF) including the Ascon-128 and Ascon-128a variants. - [BLAKE2](https://github.com/RustCrypto/hashes/tree/master/blake2) Pure Rust implementation of the BLAKE2 hash function family. - [BLAKE3](https://github.com/BLAKE3-team/BLAKE3) Official implementation of the BLAKE3 cryptographic hash function. - [HKDF](https://github.com/RustCrypto/KDFs/tree/master/hkdf) HMAC-based Extract-and-Expand Key Derivation Function (HKDF) for Rust. - [MACs](https://github.com/RustCrypto/MACs) Collection of Message Authentication Code algorithms written in pure Rust including CMAC, HMAC, and PMAC. - [Poseidon252](https://github.com/dusk-network/poseidon252) Reference implementation for the Poseidon Hashing algorithm. - [RIPEMD160](https://github.com/RustCrypto/hashes/tree/master/ripemd160) Pure Rust implementation of the RIPEMD160 hash function. - [SHA-2](https://github.com/RustCrypto/hashes/tree/master/sha2) Pure Rust implementation of the SHA-2 hash function family including SHA-224, SHA-256, SHA-384, and SHA-512. - [SHA-3](https://github.com/RustCrypto/hashes/tree/master/sha3) Pure Rust implementation of the SHA-3 (Keccak) hash function. - [universal-hashes](https://github.com/RustCrypto/universal-hashes) [![][audited-badge]](https://research.nccgroup.com/2020/02/26/public-report-rustcrypto-aes-gcm-and-chacha20poly1305-implementation-review/) Collection of Universal Hash Functions written in pure Rust including GHASH, POLYVAL, and Poly1305. ### Password Hashing Functions - [argon2](https://github.com/RustCrypto/password-hashes/tree/master/argon2) Pure Rust implementation of the Argon2 password hashing function. - [bcrypt](https://github.com/Keats/rust-bcrypt) Pure Rust implementation of the bcrypt password hashing function. - [pbkdf2](https://github.com/RustCrypto/password-hashes/tree/master/pbkdf2) Pure Rust implementation of the Password-Based Key Derivation Function v2 (PBKDF2). - [phpass](https://github.com/clausehound/phpass) Pure Rust implementation of the PhPass algorithm used by WordPress. - [pkcs5](https://github.com/RustCrypto/formats/tree/master/pkcs5) Pure Rust implementation of Public-Key Cryptography Standards #5: Password-Based Cryptography Specification Version 2.1 (RFC 8018) with support for the scrypt and PBKDF2 password-based key derivation functions. - [rust-argon2](https://github.com/sru-systems/rust-argon2) Rust library for hashing passwords using Argon2, the password-hashing function that won the Password Hashing Competition (PHC). - [scrypt](https://github.com/RustCrypto/password-hashes/tree/master/scrypt) Pure Rust implementation of the scrypt key derivation function. ## Asymmetric Cryptography [up](#table-of-contents) These crates implement individual asymmetric (a.k.a. public key) cryptography algorithms. ### Asymmetric Primitives - [ark-curves](https://github.com/arkworks-rs/curves) Implementation of a number of popular elliptic curves. - [curve25519-dalek](https://github.com/dalek-cryptography/curve25519-dalek) [![][audited-badge]](https://blog.quarkslab.com/security-audit-of-dalek-libraries.html) A pure-Rust implementation of group operations on the [Ristretto](https://ristretto.group) and Curve25519 elliptic curves. - [bls12_381](https://github.com/zkcrypto/bls12_381) Implementation of the BLS12-381 pairing-friendly elliptic curve group. - [bn](https://github.com/paritytech/bn) Pairing cryptography library written in pure Rust, making use of the Barreto-Naehrig (BN) curve construction. - [bp256](https://github.com/RustCrypto/elliptic-curves/tree/master/bp256) Brainpool P-256 elliptic curves. - [fiat-rust](https://github.com/mit-plv/fiat-crypto/tree/master/fiat-rust) ![][verified-badge] Formally verified arithmetic implementations for several elliptic curves and word sizes, extracted to Rust from specifications written using in the Coq theorem prover. - [h2c-rust-ref](https://github.com/armfazh/h2c-rust-ref) Pure Rust reference implementation of the hash to curve specification from IETF/CFRG Hash to Curve [document](https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve). Contains hashing methods for elliptic curves in Weierstrass, Montgomery, and Twisted Edwards form. - [jubjub](https://github.com/zkcrypto/jubjub) Pure Rust implementation of the Jubjub elliptic curve group and its associated fields. - [k256](https://github.com/RustCrypto/elliptic-curves/tree/master/k256) [![][audited-badge]](https://research.nccgroup.com/2023/08/30/public-report-entropy-rust-cryptography-review/) Pure Rust implementation of the secp256k1 (K-256) elliptic curve using complete formulas based on projective coordinates. - [libsecp256k1-rs](https://github.com/sorpaas/libsecp256k1-rs) Pure Rust implementation of secp256k1. - [p256](https://github.com/RustCrypto/elliptic-curves/tree/master/p256) Pure Rust implementation of the NIST P-256 elliptic curve (a.k.a. prime256v1, secp256r1). - [pasta_curves](https://github.com/zcash/pasta_curves/) Rust implementation of the Pallas-Vesta curve cycle for recursive zero-knowledge proofs. - [RSA](https://github.com/RustCrypto/RSA) [![][audited-badge]](https://delta.chat/assets/1907-otf-deltachat-rpgp-rustrsa-gb-reportv1.pdf) Pure Rust implementation of the RSA algorithm. - [redox-ecc](https://github.com/armfazh/redox-ecc) Pure Rust reference implementation of the elliptic curve operations for Weierstrass, Montgomery, and Twisted Edwards curves. - [rust-secp256k1](https://github.com/rust-bitcoin/rust-secp256k1) Rust FFI bindings for Bitcoin Core's secp256k1 library written in C. ### Digital Signatures - [bls_like](https://github.com/w3f/bls) Aggregate BLS signatures with extensive tuning options. - [bls-signatures](https://github.com/filecoin-project/bls-signatures) Implementation of BLS Signatures in pure Rust. - [ecdsa](https://github.com/RustCrypto/signatures/tree/master/ecdsa) Pure Rust implementation of the Elliptic Curve Digital Signature Algorithm (ECDSA) as specified in FIPS 186-4 (Digital Signature Standard). - [ed25519](https://github.com/RustCrypto/signatures/tree/master/ed25519) Cross-library compatibility crate for Edwards Digital Signature Algorithm (EdDSA) over Curve25519 as specified in RFC 8032. - [ed25519-compact](https://github.com/jedisct1/rust-ed25519-compact) [![][verified-badge]](https://github.com/jedisct1/rust-ed25519-compact/issues/13) A compact Ed25519 implementation for Rust, no_std / WebAssembly friendly - [ed25519-dalek](https://github.com/dalek-cryptography/curve25519-dalek/tree/main/ed25519-dalek) [![][audited-badge]](https://blog.quarkslab.com/security-audit-of-dalek-libraries.html) Fast and efficient ed25519 key generation, signing, and verification in Rust. - [ed25519-zebra](https://github.com/ZcashFoundation/ed25519-zebra) Zcash-flavored Ed25519 signatures for consensus-critical applications. - [milagro_bls](https://github.com/sigp/milagro_bls) BLS signatures using the [Apache Milagro](https://github.com/apache/incubator-milagro-crypto-rust) Cryptographic Library. - [nisty](https://github.com/nickray/nisty) NIST P-256 signatures for Cortex-M4 microcontrollers. - [rust-minisign](https://github.com/jedisct1/rust-minisign/) Pure Rust implementation of the [Minisign](https://jedisct1.github.io/minisign/) signature system. - [schnorrkel](https://github.com/w3f/schnorrkel) Implements Schnorr signature on Ristretto compressed Ed25519 points, as well as related protocols like HDKD, MuSig, and a verifiable random function (VRF). ### Encryption (Hybrid Encryption) - [hpke-rs](https://github.com/franziskuskiefer/hpke-rs) - Implementation of [HPKE](https://cfrg.github.io/draft-irtf-cfrg-hpke/draft-irtf-cfrg-hpke.html) using [Evercrypt](https://github.com/franziskuskiefer/evercrypt-rust/tree/master/evercrypt-rs). - [rust-hpke](https://github.com/rozbb/rust-hpke) Early implementation of the [HPKE](https://datatracker.ietf.org/doc/draft-irtf-cfrg-hpke/) hybrid encryption standard, written in pure Rust. ### Key Exchange - [opaque-ke](https://github.com/novifinancial/opaque-ke) A Rust implementation of the [OPAQUE](https://eprint.iacr.org/2018/163.pdf) Password-Authenticated Key Exchange protocol. - [PAKEs](https://github.com/RustCrypto/PAKEs) Collection of Password-Authenticated Key Agreement protocols. - [x25519-dalek](https://github.com/dalek-cryptography/curve25519-dalek/tree/main/x25519-dalek) [![][audited-badge]](https://blog.quarkslab.com/security-audit-of-dalek-libraries.html) Pure-Rust implementation of x25519 elliptic curve Diffie-Hellman key exchange, with curve operations provided by [curve25519-dalek](https://github.com/dalek-cryptography/curve25519-dalek). ### Threshold & Multiparty Signatures - [multi-party-ecdsa](https://github.com/KZen-networks/multi-party-ecdsa) Rust implementation of {t,n}-threshold ECDSA (elliptic curve digital signature algorithm). - [multi-party-schnorr](https://github.com/KZen-networks/multi-party-schnorr) Multiparty and threshold Schnorr signatures - [threshold_crypto](https://github.com/poanetwork/threshold_crypto) A pairing-based threshold cryptosystem for collaborative decryption and signatures. - [FROST (on redjubjub)](https://github.com/ZcashFoundation/redjubjub) [![][audited-badge]](https://github.com/ZcashFoundation/redjubjub/blob/main/zcash-frost-audit-report-20210323.pdf) An implementation of FROST (Flexible Round-Optimized Schnorr Threshold) RedJubjub signatures. ### Verifiable Delay Functions (VDFs) - [vdf](https://github.com/poanetwork/vdf) An implementation of Verifiable Delay Functions in Rust. ### Verifiable Random Functions (VRFs) - [schnorrkel](https://github.com/w3f/schnorrkel) Implements Schnorr signature on Ristretto compressed Ed25519 points, as well as related protocols like HDKD, MuSig, and a verifiable random function (VRF). ## Platform / Framework Bindings [up](#table-of-contents) These libraries are FFI bindings to OS platforms and commonly used cryptography frameworks. - [mesalink](https://mesalink.io/) OpenSSL-compatible C library implemented in Rust - [native-tls](https://github.com/sfackler/rust-native-tls) An abstraction over platform-specific TLS implementations. - [openssl](https://github.com/sfackler/rust-openssl) OpenSSL FFI bindings for the Rust programming language. - [schannel](https://github.com/steffengy/schannel-rs) Rust bindings to the Windows SChannel APIs providing TLS client and server functionality. - [security-framework](https://github.com/kornelski/rust-security-framework) Bindings to the Apple's Security.framework. Allows use of TLS and Keychain from Rust. ## Cryptographic Hardware [up](#table-of-contents) These libraries provide host-side drivers for cryptographic hardware devices (e.g. authentication tokens, HSMs). - [cryptoki](https://github.com/parallaxsecond/rust-cryptoki) Rust-native PKCS#11 library. - [rust-cryptoauthlib](https://github.com/PelionIoT/rust-cryptoauthlib/) Rust library for interfacing with ATECCx08a devices. - [solo](https://github.com/solokeys/solo) Solo is an open source security key. - [tss-esapi](https://github.com/parallaxsecond/rust-tss-esapi) Rust-native library for interfacing with TPM 2.0 devices via the TCG Enhanced System API (ESAPI). - [yubihsm](https://github.com/iqlusioninc/yubihsm.rs) Pure-Rust client library for YubiHSM 2 devices which implements most the functionality of the libyubihsm C library from Yubico's YubiHSM SDK. - [yubikey](https://github.com/iqlusioninc/yubikey.rs) Pure Rust cross-platform host-side driver for YubiKey devices from Yubico with support for public-key encryption and digital signatures using the Personal Identity Verification (PIV) application. ## Post-Quantum Cryptography [up](#table-of-contents) These libraries are designed to be secure against hypothetical future attacks by large quantum computers. - [ml-kem](https://github.com/RustCrypto/KEMs/tree/master/ml-kem) Pure Rust implementation of the Module-Lattice-Based Key-Encapsulation Mechanism standard (formerly known as Kyber) as described in FIPS 203 (final). - [oqs](https://github.com/open-quantum-safe/liboqs-rust) Wrapper around Open-Quantum-Safe's liboqs cryptographic library. - [pqcrypto](https://github.com/rustpq/pqcrypto) FFI bindings to quantum-safe cryptographic libraries. - [picnic-bindings](https://github.com/ait-crypto/picnic-bindings-rs) FFI bindings to Picnic library implementating the traits from [signature](https://github.com/RustCrypto/traits/tree/master/signature). - [pqcrypto-picnic](https://github.com/ait-crypto/pqcrypto-picnic) FFI bindings to Picnic library implementating the traits from [pqcrypto](https://github.com/rustpq/pqcrypto). ## Random Number Generators [up](#table-of-contents) - [rand](https://github.com/rust-random/rand) Rust library for random number generation. - [getrandom](https://docs.rs/getrandom/0.2.3/getrandom/) Interface to the operating system's random number generator. ## Zero-knowledge Proofs [up](#table-of-contents) - [arkworks](https://github.com/arkworks-rs) An ecosystem for developing and programming with zkSNARKs. - [bellman](https://github.com/zkcrypto/bellman) [![](https://img.shields.io/badge/1-audited-success.svg)](https://cybermashup.files.wordpress.com/2018/08/zcash-audit.pdf) [![](https://img.shields.io/badge/2-audited-success.svg)](https://raw.githubusercontent.com/QED-it/sapling-audit/master/sapling-audit-report.pdf) A crate for building zk-SNARK circuits. - [bellman-ce](https://github.com/matter-labs/bellman) Bellman fork with support for Ethereum's BN256. - [bellperson](https://github.com/filecoin-project/bellperson) Bellman fork with GPU parallel acceleration for FFT and Multiexponentation subroutines in the Groth16 prover. - [bulletproofs](https://github.com/dalek-cryptography/bulletproofs) [![][audited-badge]](https://blog.quarkslab.com/security-audit-of-dalek-libraries.html) Pure-Rust implementation of [Bulletproofs](https://crypto.stanford.edu/bulletproofs/) using [Ristretto](https://ristretto.group). - [bulletproof](https://github.com/KZen-networks/bulletproofs) Implements [Bulletproofs+](https://eprint.iacr.org/2020/735.pdf) and [Bulletproofs](https://eprint.iacr.org/2017/1066.pdf) aggregated range proofs with multi-exponent verification. - [Dusk-Zerocaf](https://github.com/dusk-network/dusk-zerocaf) Pure-Rust cryptographic library constructed to define operations for an elliptic curve embedded into the [Ristretto](https://ristretto.group) scalar field. - [merlin](https://github.com/dalek-cryptography/merlin) Composable proof transcripts for public-coin arguments of knowledge. - [OpenZKP](https://github.com/0xProject/OpenZKP) Pure-Rust implementations of Zero-Knowledge Proof systems. - [snarkVM](https://github.com/AleoHQ/snarkVM) A Rust implementation of [Zexe](https://eprint.iacr.org/2018/962.pdf), a model for decentralized private computation using zero-knowledge proofs - [Spartan](https://github.com/microsoft/Spartan) High-speed zkSNARKs without trusted setup. - [winterfell](https://github.com/novifinancial/winterfell/) A distributed STARK prover. - [ZoKrates](https://github.com/Zokrates/ZoKrates) A toolbox for zkSNARKs on Ethereum. - [zkp](https://github.com/zkcrypto/zkp) Macro-based zero-knowledge proof compiler for Schnorr proofs. ## Secure Multiparty Computation [up](#table-of-contents) These libraries allow several participants to collectively perform a computation without revealing what is being computed to the participants. - [libpaillier](https://github.com/mikelodder7/paillier-rs) Rust implementation of the Paillier cryptosystem with additive homomorphism - [swanky](https://github.com/GaloisInc/swanky) A suite of Rust libraries for secure multi-party computation. - [white-city](https://github.com/KZen-networks/white-city) API to integrate distributed network for secure computation protocols. ## Fully Homomorphic Encryption [up](#table-of-contents) These libraries allow to perform secure computation, e.g. computations over encrypted data. - [concrete](https://github.com/zama-ai/concrete) Rust implementation of various FHE operations based on the TFHE scheme. - [TFHE-rs](https://github.com/zama-ai/tfhe-rs) Pure Rust implementation of the TFHE scheme for boolean and integers FHE arithmetics. ## Format Decoders/Encoders [up](#table-of-contents) These libraries implement parsers and serializers for various cryptography-related formats. - [base64ct](https://github.com/RustCrypto/formats/tree/master/base64ct) Constant-time Base64 decoder/encoder with `no_std` support. - [der](https://github.com/RustCrypto/formats/tree/master/der) Cryptography-oriented ASN.1 DER decoder/encoder with `no_std` support. - [pem-rfc7468](https://github.com/RustCrypto/formats/tree/master/pem-rfc7468) Constant-time implementation of the strict PEM encoding rules for PKIX, PKCS, and CMS Structures. - [pkcs1](https://github.com/RustCrypto/formats/tree/master/pkcs1) Pure Rust implementation of Public-Key Cryptography Standards #1: RSA Cryptography Specifications Version 2.2 (RFC 8017). - [pkcs8](https://github.com/RustCrypto/formats/tree/master/pkcs8) Pure Rust implementation of Public-Key Cryptography Standards #8: Private-Key Information Syntax Specification (RFC 5208). - [rasn](https://github.com/XAMPPRocky/rasn) A `no_std` ASN.1 codec framework (like serde but for ASN.1). Supports the following formats: BER, CER, DER. - [x509-parser](https://github.com/rusticata/x509-parser) X.509 v3 (RFC5280) parser, implemented with the nom parser combinator framework. ## Defensive Measures [up](#table-of-contents) These libraries can be used to harden cryptographic algorithms against attacks. ### Constant-Time Code - [subtle](https://github.com/dalek-cryptography/subtle) [![][audited-badge]](https://blog.quarkslab.com/security-audit-of-dalek-libraries.html) Pure-Rust traits and utilities for constant-time cryptographic implementations. ### Protecting Secrets in Memory - [secrecy](https://github.com/iqlusioninc/crates/tree/main/secrecy) A simple secret-keeping library for Rust. ### Zeroing Memory - [zeroize](https://github.com/RustCrypto/utils/tree/master/zeroize) Securely zero memory while avoiding compiler optimizations. ## Arithmetic [up](#table-of-contents) These libraries implement mathematical algorithms potentially interesting for cryptography-related applications. - [crypto-bigint](https://github.com/RustCrypto/crypto-bigint) [![][audited-badge]](https://research.nccgroup.com/2023/08/30/public-report-entropy-rust-cryptography-review/) Cryptography-oriented "bignum" library with constant-time algorithms including modular arithmetic, stack-allocated big integers, and `no_std` support - [crypto-primes](https://github.com/entropyxyz/crypto-primes) [![][audited-badge]](https://research.nccgroup.com/2023/08/30/public-report-entropy-rust-cryptography-review/) A crate for generating random primes and primality testing based on `crypto-bigint` integers. - [nalgebra](https://github.com/rustsim/nalgebra) Linear algebra library for Rust. - [num](https://github.com/rust-num/num) Collection of numeric types and traits for Rust. (Bigint). - [rust-decimal](https://github.com/paupino/rust-decimal) Decimal implementation written in pure Rust suitable for financial calculations that require significant integral and fractional digits with no round-off errors. - [secret-integers](https://github.com/hacspec/rust-secret-integers) Integer wrapper types that guarantee constant-time operations only. ## Miscellany [up](#table-of-contents) Other libraries which don't fall into the categories listed above. - [librustzcash](https://github.com/zcash/librustzcash) A (work-in-progress) set of Rust crates for working with Zcash. - [sequoia](https://gitlab.com/sequoia-pgp/sequoia) Implements OpenPGP in Rust. ================================================ FILE: CNAME ================================================ cryptography.rs ================================================ FILE: README.md ================================================ # Rust Cryptography Interest Group (RCIG) [![Zulip Chat][chat-img]][Zulip Chat] This repository is the central [issue tracker] used by the RCIG in order to coordinate efforts towards promoting cryptography in Rust. ## Join in! Come talk with us via [Zulip Chat] or by [opening an issue]. ## Projects - [Awesome Rust Cryptography][cryptography.rs] (a.k.a. [cryptography.rs]): curated list of actively maintained, high-quality Rust cryptography libraries. ## About This repository is where the Rust Cryptography Interest Group stores the following: - meeting minutes from Sync-Up calls - open issues based on ongoing discussions - suggest follow up topics of discussion for future sync-up calls - be a place where the community coordinates. The aim will be for this repo to evolve an archive and a place where actionable items can be picked up easily by members of the RCIG community. ## Mission Our mission is to foster a robust Rust cryptography ecosystem: - Create a focal point for discussion and work on Rust cryptography in general - Provide overall direction for cryptography in Rust by fostering collaboration on an interoperable cryptographic ecosystem - Act as a resource for answering questions about the use of cryptography in Rust projects Note that this is a new group and figuring out its exact purpose is a work-in-progress. As we figure out a governance process we will be revising our mission statement and hopefully publishing a [vision document]. [issue tracker]: https://github.com/The-DevX-Initiative/RCIG_Coordination_Repo/issues [opening an issue]: https://github.com/The-DevX-Initiative/RCIG_Coordination_Repo/issues/new/choose [vision document]: https://github.com/The-DevX-Initiative/RCIG_Coordination_Repo/issues/4 [Zulip Chat]: https://rcig.zulipchat.com/ [chat-img]: https://img.shields.io/badge/zulip-join_chat-blue.svg?logo=zulip [cryptography.rs]: https://cryptography.rs ================================================ FILE: _config.yml ================================================ title: Awesome Rust Cryptography description: Showcase of notable cryptography libraries developed in Rust theme: jekyll-theme-hacker include: - index.html - Awesome_Rust_Cryptography.md ================================================ FILE: index.html ================================================ --- title: Awesome Rust Cryptography description: Showcase of notable cryptography libraries developed in Rust layout: default --- {% capture my_include %}{% include_relative Awesome_Rust_Cryptography.md %}{% endcapture %} {{ my_include | markdownify }} ================================================ FILE: markdownlint.rb ================================================ # markdownlint style rules # See https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md # To install, all #exclude_rule 'MD013' # Line length exclude_rule 'MD026' # Trailing punctuation in header exclude_rule 'MD033' # Inline HTML