
Chiffrement en Rust avec zéro dépendance par défaut : BLAKE3, Ed25519/X25519, hachages, MAC, KDF, AEAD, et sommes de contrôle avec accélération SIMD/ASM complète.
rscrypto regroupe les primitives cryptographiques, les hachages cryptographiques et rapides, le hachage de mots de passe et les sommes de contrôle derrière un seul modèle de fonctionnalités.
Le SIMD et l'assembleur conditionnés par la cible accélèrent les backends Rust portables sans dépendance de production à C/FFI, OpenSSL ou à une bibliothèque système.
rscrypto est une crate de primitives, pas une pile TLS, une boîte à outils PKI, un magasin de clés ou une implémentation de protocole.
Les affirmations de performance sont limitées aux campagnes conservées exactes et aux charges de travail équivalentes. La campagne corrigée de septembre 2026 contient 19 614 cas complétés, y compris les comparaisons ML-KEM et Argon2 corrigées, mais aucune fiche de score agrégée de remplacement n'a été établie. Les agrégats plus anciens qui mélangeaient l'entropie, la préparation des clés, la représentation de sortie ou les longueurs de sel restent des enregistrements historiques et ne constituent pas des affirmations de performance actuelles.
La vue d'ensemble des benchmarks consigne les campagnes, les résultats spécifiques aux cibles et les limites restantes.
Les contrats de comparaison définissent les charges de travail ML-KEM et Argon2 équivalentes.
Les affirmations de sécurité échouent en mode fermé : une preuve manquante ou obsolète supprime l'affirmation plutôt que d'affaiblir le seuil.
ct.toml
et combine l'inspection optimisée des binaires liés, les preuves BINSEC pour les noyaux déclarés
à forme fixe, et les tests de timing DudeCT pour les cas déclarés de bout en bout.Debug et effacent le stockage initialisé lors du drop.
Les règles de duplication varient selon le type : l'état BLAKE2/BLAKE3 à clé supporte Clone.
L'inventaire de propriété liste ces frontières.
Les échecs de vérification sont opaques ; les ouvertures AEAD échouées effacent le texte en clair non authentifié.Une affirmation de temps constant n'existe que lorsque les preuves pour la cible, la fonctionnalité, le compilateur, le profil et l'opération requis passent. Un code qui semble sans branchement n'est pas traité comme une preuve.
Consultez les preuves de test, le modèle à temps constant, le cycle de vie des secrets et le modèle de menace.
La lacune restante de revue indépendante est un audit de sécurité par un tiers.
Le projet ne peut actuellement pas en financer un.
Les preuves automatisées ne remplacent pas cette revue, donc rscrypto ne prétend pas être audité,
validé FIPS 140-3, formellement vérifié ou à temps constant en tant que crate entière.
Signalez les vulnérabilités suspectées via GitHub Private Vulnerability Reporting selon le
processus SECURITY.md, et non via une issue publique.
Build no_std SHA-2 minimal :
[dependencies]
rscrypto = { version = "0.10", default-features = false, features = ["sha2"] }
Pile complète de primitives avec le hasard de l'OS activé :
[dependencies]
rscrypto = { version = "0.10", features = ["full", "getrandom"] }
La fonctionnalité par défaut est std ; default-features = false la retire.
Activez getrandom uniquement pour les API qui obtiennent des sels, des clés, des nonces
ou de l'entropie de génération de clés RSA depuis le système d'exploitation.
Le guide des fonctionnalités explique la sélection du build ; Cargo.toml détient le graphe exact des fonctionnalités.
use rscrypto::Sha256;
let one_shot = Sha256::digest(b"hello world");
let mut hasher = Sha256::new();
hasher.update(b"hello ");
hasher.update(b"world");
assert_eq!(hasher.finalize(), one_shot);
Les API de hachage supportent l'usage en un coup et en flux.
Des workflows exécutables pour AEAD, les signatures, RSA, ECDH P-256 et P-384, X25519, ML-KEM, le hachage de mots de passe
et l'introspection des backends se trouvent dans examples/README.md.
| Famille | Inclus | Activer |
|---|---|---|
| Sommes de contrôle | CRC-16, CRC-24, CRC-32, CRC-32C, CRC-64/XZ, CRC-64/NVMe | checksums ou fonctionnalités feuilles |
| Hachages cryptographiques | SHA-2, SHA-3, SHAKE, cSHAKE, BLAKE2, BLAKE3, Ascon-Hash/XOF/CXOF | crypto-hashes ou fonctionnalités feuilles |
| Hachages rapides | XXH3-64/128, RapidHash V3-64 | fast-hashes ou fonctionnalités feuilles |
| MACs et KDFs | HMAC-SHA-2/SHA-3, KMAC128/256, Poly1305, HKDF-SHA-2, PBKDF2-HMAC-SHA-2 | macs, kdfs ou fonctionnalités feuilles |
| Hachage de mots de passe | Argon2d/i/id, scrypt, enregistrements de mots de passe PHC bornés | password-hashing ou fonctionnalités feuilles |
| Signatures et RSA | ECDSA P-256/P-384, Ed25519, ML-DSA-44/65/87, signature RSA, vérification, chiffrement et génération de clés | signatures ou fonctionnalités feuilles |
| Échange de clés et KEMs | ECDH P-256, ECDH P-384, X25519, ML-KEM-512/768/1024 | key-exchange ou fonctionnalités feuilles |
| AEADs | AES-GCM, AES-GCM-SIV, AES-SIV-CMAC, ChaCha20-Poly1305, XChaCha20-Poly1305, AEGIS-256, Ascon-AEAD128 | aead ou fonctionnalités feuilles |
Le digest d'acceptation WebSocket, uniquement pour la compatibilité, nécessite websocket-sha1,
qui est exclu de full et de toute autre fonctionnalité parapluie.
Utilisez docs.rs pour les types et méthodes exacts.
L'implémentation Rust portable est l'autorité octet pour octet.
Le support de cible à la compilation et, avec std,
les capacités CPU détectées à l'exécution sélectionnent les noyaux SIMD ou assembleur éligibles.
L'accélération non supportée revient au Rust portable.