
Cripto Rust con zero dipendenze predefinite: BLAKE3, Ed25519/X25519, hash, MAC, KDF, AEAD e checksum con piena accelerazione SIMD/ASM
rscrypto fornisce primitive crittografiche pure in Rust, hash crittografici e veloci, hashing delle password e checksum dietro un unico modello di feature.
Non ha dipendenze da C/FFI di produzione, OpenSSL o librerie di sistema. Le feature foglia supportano build ristrette; le feature ombrello compongono superfici più ampie.
Usa una feature foglia per una primitiva, un gruppo per un sottoinsieme di primitive, o full per l'intera superficie del crate. Il backend Rust portatile è sempre presente. SIMD e ASM sono solo acceleratori.
Istantanea dei benchmark pubblicati: media geometrica di 1.59x su runner Linux rispetto ai competitor esterni più veloci, con 4,052 / 6,750 vittorie e 6,101 / 6,750 vittorie o pareggi.
Evidenza locale su macOS Apple Silicon: media geometrica di 1.37x rispetto ai competitor esterni più veloci, con 382 / 774 vittorie e 708 / 774 vittorie o pareggi.
Esecuzioni grezze, metodologia e perdite note si trovano in
benchmark_results/OVERVIEW.md.
Grafico: scheda dei benchmark. I valori superiori a 1.00x significano che rscrypto è più veloce dell'implementazione esterna più rapida abbinata.
no_std, WASM, server, CLI, embedded e vincolati da audit usano lo stesso modello di feature foglia.rscrypto è un crate di primitive. Non è uno stack TLS, un toolkit PKI, un key store o un'implementazione di protocollo. Non rivendica la validazione FIPS 140-3, un audit di terze parti, la verifica formale o un comportamento a tempo costante dell'intero crate.
Build minima no_std SHA-2:
[dependencies]
rscrypto = { version = "0.7.8", default-features = false, features = ["sha2"] }
Stack completo di primitive con randomicità del sistema operativo abilitata:
[dependencies]
rscrypto = { version = "0.7.8", features = ["full", "getrandom"] }
Usa default-features = false per build no_std. Abilita getrandom solo quando hai bisogno di API che generano sale, chiavi, nonce o entropia per la generazione di chiavi RSA dal sistema operativo.
use rscrypto::Sha256;
let one_shot = Sha256::digest(b"hello world");
let mut h = Sha256::new();
h.update(b"hello ");
h.update(b"world");
assert_eq!(h.finalize(), one_shot);
La forma comune dell'API è one-shot quando conveniente e streaming quando necessario.
Usa docs/types.md quando hai bisogno della mappa completa dei tipi e docs/features.md quando hai bisogno del set di feature più piccolo.
I flag sono suddivisi per uso:
sha2, blake3, aes-gcm, ed25519, x25519, ml-kem, crc32, ecc.hashes, checksums, macs, kdfs, password-hashing, aead, signatures, key-exchange.Inventario completo delle feature: docs/features.md.
Inventario pubblico dei tipi: docs/types.md.
rscrypto fa solo rivendicazioni di tempo costante limitate al rilascio e con ambito per le operazioni che gestiscono segreti, non per ogni funzione nel crate. ct.toml registra l'insieme candidato di primitive/configurazioni; non crea di per sé una rivendicazione pubblica. Una rivendicazione esiste solo quando il corrispondente rilascio firmato su GitHub include un bundle rscrypto-X.Y.Z-ct-evidence.tar.gz attestato che supera tutti i gate richiesti per quella esatta versione, commit, target, profilo e set di feature.
I possessori a dimensione fissa che contengono segreti non implementano PartialEq o Eq. I loro metodi ct_eq restituiscono un CtDecision opaco; i chiamanti devono esplicitamente consumarlo con declassify() per ottenere un bit ramificabile. Le API di verifica mantengono quel confine interno e restituiscono un singolo Result opaco. Questa è resistenza all'uso improprio al confine dell'API Rust, non una prova riguardante il codice macchina a valle.
Le principali superfici candidate che contengono segreti in ct.toml sono: verifica MAC/tag, forma del fallimento di autenticazione AEAD, moltiplicazione scalare X25519, firma Ed25519 e derivazione della chiave pubblica segreta, firma cieca ECDSA P-256/P-384, generazione di chiavi ML-KEM-512/768/1024, encapsulazione, superfici segrete di decapsulazione, foglie di firma/decifratura privata RSA e confronti selezionati di verifica delle password.
Il parsing pubblico, la generazione di chiavi non elencata, la randomicità del sistema operativo, gli hash grezzi, i checksum, gli hash non crittografici, i percorsi di benchmark e la matematica di verifica a chiave pubblica non sono rivendicazioni generali di tempo costante. Vedi docs/constant-time.md per la rivendicazione esatta e il modello di verifica e docs/compliance.md per i confini di revisione. I rilasci fino alla v0.6.4 non contengono questo bundle e pertanto non portano alcuna rivendicazione di tempo costante legata al rilascio.
rscrypto mantiene il percorso Rust portatile come autorità byte per byte. I kernel ISA vengono selezionati solo quando il target e la CPU in esecuzione li supportano.
Matrice completa delle piattaforme: docs/platforms.md.
rscrypto fa rivendicazioni di tempo costante con ambito solo quando un rilascio corrispondente pubblica il bundle di evidenze richiesto, mai per ogni API o build. I possessori a dimensione fissa di segreti nominati in docs/secret-ownership.md sovrascrivono i propri byte in drop e mascherano Debug; la rivendicazione non si estende alle copie del chiamante. I fallimenti di verifica usano errori opachi e le aperture AEAD fallite cancellano i buffer di output del chiamante. Gli artefatti di rilascio sono controllati da tag firmati, pubblicati tramite crates.io Trusted Publishing e coperti da attestazioni di provenienza delle build di GitHub.
Non vengono rivendicati audit di terze parti, certificato FIPS 140-3 o prova formale dell'intero crate. Segnala le vulnerabilità tramite GitHub Private Vulnerability Reporting o SECURITY.md, non tramite issue pubbliche.
examples/, docs/features.md, docs/types.mdSECURITY.md, THREAT_MODEL.md, docs/constant-time.md, docs/compliance.mddocs/test-vector-coverage.md, docs/platforms.md, Rust 1.91.0.
Il nightly bloccato in rust-toolchain.toml viene usato per Miri, fuzzing e controlli su architetture esotiche.
Doppia licenza: Apache-2.0 o MIT, a tua scelta.
| Compito | Feature | Inizia da qui |
|---|
| AEAD sigilla/apri | chacha20poly1305,getrandom | examples/aead_seal_open.rs |
| Firme Ed25519 e ECDSA | ed25519,ecdsa-p256,getrandom | examples/signatures.rs |
| Verifica RSA-PSS | rsa | examples/rsa_pss_verify.rs |
| Segreto condiviso ML-KEM | ml-kem,getrandom | examples/mlkem_encapsulation.rs |
| Hashing delle password Argon2id e scrypt | password-hashing,getrandom | examples/password_hashing.rs |
| Necessità | Incluso | Percorso Feature |
|---|
| Hash crittografici | SHA-2, SHA-3, SHAKE, cSHAKE128/256, BLAKE2, BLAKE3, Ascon-Hash/XOF/CXOF | hashes o feature foglia |
| MAC e KDF | HMAC-SHA-2/SHA-3, KMAC128/256, Poly1305 standalone, HKDF-SHA-2, PBKDF2-HMAC-SHA-2 | auth o feature foglia |
| Hashing delle password | KDF Argon2d/i/id e scrypt grezzi; record password PHC generati e limitati | auth, argon2, scrypt, phc-strings |
| Primitive a chiave pubblica | Firma/verifica ECDSA P-256/P-384, firme Ed25519, firma/verifica RSA/OAEP/RSAES-PKCS1-v1_5/generazione chiavi, scambio chiavi X25519, KEM ML-KEM-512/768/1024 | auth, signatures, key-exchange, ecdsa, ecdsa-p256, ecdsa-p384, ed25519, rsa, x25519, ml-kem |
| Cifratura AEAD | AES-128/256-GCM, AES-128/256-GCM-SIV, ChaCha20-Poly1305, XChaCha20-Poly1305, AEGIS-256, Ascon-AEAD128 | aead o feature foglia |
| Checksum | CRC-16, CRC-24, CRC-32, CRC-32C, CRC-64/XZ, CRC-64/NVMe | checksums o feature foglia |
| Hash veloci | XXH3-64/128, RapidHash V3-64 | xxh3, rapidhash |
std, alloc, getrandom, parallel, serde, portable-only; serde-secrets esplicitamente include i materiali segreti in serde.| Famiglia target | Esempi di accelerazione |
|---|
| x86 / x86_64 | SSE4.2, AVX2, AVX-512, AES-NI, SHA-NI, VAES, VPCLMULQDQ |
| Arm / AArch64 / Apple Silicon | NEON, AES, PMULL, SHA2, SHA3, SVE2-PMULL |
| IBM Z | CPACF, MSA, VGFM, z/Vector ML-KEM arithmetic |
| POWER / ppc64le | POWER8/9/10 vector and crypto extensions |
| RISC-V | RVV, Zbc, Zvkned, Zvbc |
| WASM | SIMD128 dove disponibile, fallback portatile ovunque |
docs/migration/CONTRIBUTING.mdCHANGELOG.md, docs/release.md