dcrypt: A Cryptographic Library in Rust
[!WARNING]
v1.2.3is confirmed to contain serious security defects. Earlier releases have not been cleared.v2.0.0is the first remediated release, but has not completed an independent post-remediation audit or FIPS validation. See SECURITY.md before evaluating or migrating this project.
dcrypt (Decentralized Cryptography) is a Rust workspace for classical, post-quantum, and hybrid cryptographic APIs. Security-sensitive standard algorithms are being moved to reviewed ecosystem implementations and checked against independent known-answer tests. Rust and the absence of FFI in most paths reduce some implementation risks, but do not by themselves establish memory safety, side-channel resistance, or suitability for production.
🚀 Novel Capabilities
dcrypt introduces capabilities critical for the transition to quantum-safe and decentralized computing:
- Pure-Rust FIPS 204 (ML-DSA): Final-standard
ML-DSA-44,ML-DSA-65, andML-DSA-87use libcrux's portable backend, with exact encodings and formally verified arithmetic/NTT/serialization components. The public wrapper exposes randomized pure ML-DSA with empty context; backend-level tests cover the broader official ACVP interfaces and expected results, using a separate test-only implementation for suppliedmu. This is not a claim that dcrypt as a whole is formally verified, audited, or FIPS validated. - FIPS 203 / ML-KEM API: ML-KEM parameter sets are available for testing and integration; this project is not a FIPS-validated cryptographic module.
- Native Hybrid Cryptography: First-class support for hybrid Key Encapsulation Mechanisms (e.g.,
ECDH P-256 + Kyber-768) and hybrid Digital Signatures, designed to combine independent primitive families. - BLS12-381 Pairing Engine: A fully featured implementation of the pairing-friendly curve, including optimal Ate pairings and IETF-compliant Hash-to-Curve, essential for Zero-Knowledge Proofs and Signature Aggregation.
🛡️ Key Design Principles
- Rust-first implementation: Most implementation code avoids FFI. This narrows the attack surface; it is not a memory-safety or security proof.
- Post-Quantum APIs: Exposes ML-DSA and ML-KEM parameter sets for interoperability testing and evaluation.
- Defense-in-Depth: Hybrid schemes combine battle-tested classical algorithms (ECDH/ECDSA) with modern PQC primitives.
- Timing Analysis: Security-sensitive paths are tested with a built-in statistical Constant-Time Verification Suite where applicable; passing statistical tests is not presented as a proof of constant-time execution.
- Type Safety: High-level APIs prevent misuse through strong typing (e.g., distinct types for
Nonce,Key, andTagprevents byte-array confusion). no_std& Cross-Platform: Selected crates and feature combinations supportno_stdwithalloc; validate the exact algorithm and target combination before deployment.
📦 Quick Start
Do not select v1.2.3; it is confirmed affected, and earlier
introduced-version ranges remain under investigation. Use 2.0.0 or later and
pin the exact version you have reviewed. The examples below describe the
breaking v2.0.0 API and are not a substitute for application-specific security
review.
Example 1: Hybrid Post-Quantum Key Exchange
Securely exchange keys using a hybrid scheme (EcdhP256 + Kyber768). This ensures security remains intact even if quantum computers break elliptic curve cryptography.
use EcdhP256Kyber768;
use Kem;
use OsRng;
Example 2: Authenticated Encryption (AES-256-GCM)
Standard symmetric encryption remains a core part of the library, featuring ergonomic key management.
use ;
use ;
Example 3: BLS12-381 Bilinear Pairings
Perform bilinear pairings and hash-to-curve operations standard in decentralized identity and ZK systems.
use ;
📚 Supported Algorithms
dcrypt provides a unified API for classical, post-quantum, and hybrid operations:
| Category | Algorithms |
|---|---|
| Symmetric Encryption (AEAD) | AES-128/256-GCM, ChaCha20-Poly1305, XChaCha20-Poly1305 |
| Public Key Encryption (PKE) | ECIES (P-192, P-224, P-256, P-384, P-521) |
| Hash Functions | SHA-2 (224, 256, 384, 512), SHA-3, BLAKE2b/s |
| XOFs | SHAKE-128/256, BLAKE3 |
| Password Hashing | Argon2id (default), Argon2i, Argon2d, PBKDF2 |
| Key Derivation | HKDF, PBKDF2 |
| Digital Signatures | ECDSA (P-192 to P-521), Ed25519 |
| Post-Quantum Signatures | ML-DSA-44, ML-DSA-65, ML-DSA-87 (final FIPS 204) |
| Key Exchange / KEM | ECDH (P-Curves, K-256, B-283) |
| Pairing-Friendly Curves | BLS12-381 (G1, G2, Gt, Pairings, Hash-to-Curve) |
| Post-Quantum KEMs | Kyber / ML-KEM (Levels 512, 768, 1024) |
| Hybrid Schemes | EcdhP256Kyber768, EcdhP384Kyber1024, EcdsaMlDsa65Hybrid |
🏗️ Architecture
The library is organized as a workspace of specialized crates to align type-safety boundaries with security boundaries:
dcrypt-api: Defines core traits (SymmetricCipher,Kem,Signature), error types, and fundamental data structures.dcrypt-algorithms: Low-level cryptographic kernels. Constant-time behavior is primitive- and backend-specific; no blanket guarantee is made for this crate.dcrypt-common: Shared security primitives, includingSecretBuffer(automatic zeroization) andSecureCompare.dcrypt-symmetric: High-level AEADs, stream ciphers, and secure key management wrappers.dcrypt-pke: Public Key Encryption schemes, specifically ECIES (Elliptic Curve Integrated Encryption Scheme) over standard NIST curves.dcrypt-kem: Implementations of Key Encapsulation Mechanisms (Kyber, ECDH, McEliece placeholders).dcrypt-sign: Implementations of Digital Signatures (Dilithium, ECDSA, Ed25519, SPHINCS+ placeholders).dcrypt-hybrid: Ready-to-use combiners for KEMs and Signatures ensuring crypto-agility.dcrypt-tests: Contains the ACVP test harness and Constant-Time Verification Suite.
🔒 Security & Verification
Security is the primary driver for dcrypt. The library employs a rigorous testing methodology:
Constant-Time Verification
The repository contains a custom statistical regression engine (dcrypt-tests/src/suites/constant_time). The security-validation workflow runs it serially as a regression gate and labels its scope explicitly. It is not dudect or ctgrind, and those stronger target-specific checks remain required before any production constant-time claim.
- Methodology: Uses interleaved A/B timing measurements, bootstrap confidence intervals, Kolmogorov-Smirnov tests, Welch-style mean-shift checks, and Holm-Bonferroni correction across the combined signals.
- Noise Gating: Maintains a persistent noise profile and aborts inconclusive runs when the host environment is materially noisier than the historical baseline.
- Coverage: Exercises critical paths in Kyber, ML-DSA verification, hybrid constructions, ECDH, and AEAD implementations for timing regressions.
Standards testing
- ACVP Test Harness: Includes an ACVP JSON test harness for supported parameter sets. Passing vectors is a correctness gate, not NIST validation or certification.
- ML-DSA Interoperability: Runtime key generation, signing, verification, and paired expanded-key validation use libcrux's portable backend. Wrapper-level tests cross-import keys and signatures with the independent
fips204API and pin official NIST ACVP key-generation outputs; that implementation is a development dependency only. Because libcrux does not expose public-key derivation from a bare expanded key, callers that need the associated public key must import the pair withfrom_bytes_with_public_key. - No certification claim: dcrypt is not a FIPS-validated cryptographic module. Each algorithm and encoding must be assessed independently.
📄 License
This project is licensed under the Apache License, Version 2.0.