
rscrypto v0.9.0
Criptografia em Rust sem dependências obrigatórias: hashes, checksums, MACs, KDFs, hashing de senhas, AEADs, assinaturas, RSA, troca de chaves, ML-KEM e ML-DSA. Referência portátil em Rust com backends SIMD e ASM.
rscrypto
rscrypto é uma biblioteca Rust de primitivas criptográficas, hashes, hashing de senhas e checksums.
Um único modelo de features controla todas elas.
O Rust portátil é a implementação de referência.
Backends SIMD e assembly tornam-na mais rápida em alvos suportados.
Builds de produção não dependem de C, FFI, OpenSSL ou bibliotecas do sistema.
rscrypto fornece apenas primitivas.
Não é uma stack TLS, um toolkit de PKI, um armazenamento de chaves ou uma implementação de protocolo.
Instalação
rscrypto requer Rust 1.100.
Enquanto o Rust 1.100 não for estável, use o beta 1.100 ou um nightly mais recente.
Builds acelerados para POWER, IBM Z e RISC-V requerem um compilador nightly;
builds portable-only suportam a MSRV declarada.
Consulte Toolchain.
Build no_std mínimo apenas com SHA-2:
[dependencies]
rscrypto = { version = "0.11", default-features = false, features = ["sha2"] }
Todas as primitivas, com aleatoriedade do sistema operacional:
[dependencies]
rscrypto = { version = "0.11", features = ["full", "getrandom"] }
A feature padrão é std.
Defina default-features = false para removê-la.
Ative getrandom apenas para as APIs que obtêm salts, chaves, nonces
ou entropia de geração de chaves RSA do sistema operacional.
O guia de features explica como selecionar features.
O Cargo.toml define o grafo exato de features.
Início rápido
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);
Os tipos de hash suportam uso one-shot e streaming.
O examples/README.md tem exemplos executáveis para AEAD, assinaturas, RSA, ECDH P-256 e P-384,
X25519, ML-KEM, hashing de senhas e introspeção de backend.
Primitivas e features
| Família | Primitivas | Feature |
|---|---|---|
| Checksums | CRC-16, CRC-24, CRC-32, CRC-32C, CRC-64/XZ, CRC-64/NVMe | checksums ou uma feature folha |
| Hashes criptográficos | SHA-2, SHA-3, SHAKE, cSHAKE, BLAKE2, BLAKE3, Ascon-Hash/XOF/CXOF | crypto-hashes ou uma feature folha |
| Hashes rápidos | XXH3-64/128, RapidHash V3-64 | fast-hashes ou uma feature folha |
| MACs e KDFs | HMAC-SHA-2/SHA-3, KMAC128/256, Poly1305, HKDF-SHA-2, PBKDF2-HMAC-SHA-2 | macs, kdfs ou uma feature folha |
| Hashing de senhas | Argon2d/i/id, scrypt, registos de senha PHC limitados | password-hashing ou uma feature folha |
| Assinaturas e RSA | ECDSA P-256/P-384, Ed25519, ML-DSA-44/65/87, SLH-DSA (todos os 12 conjuntos FIPS 205, pure e HashSLH-DSA), assinatura, verificação, encriptação e geração de chaves RSA | signatures ou uma feature folha |
| Troca de chaves e KEMs | P-256 ECDH, P-384 ECDH, X25519, ML-KEM-512/768/1024 | key-exchange ou uma feature folha |
| AEADs | AES-GCM, AES-GCM-SIV, AES-SIV-CMAC, ChaCha20-Poly1305, XChaCha20-Poly1305, AEGIS-256, Ascon-AEAD128 | aead ou uma feature folha |
As chaves de assinatura e KEM importam e exportam DER padrão (PKCS #8 e SubjectPublicKeyInfo) para ECDSA, Ed25519, RSA, ML-DSA, ML-KEM e SLH-DSA.
O digest de aceitação WebSocket existe apenas para compatibilidade de protocolo.
Requer a feature websocket-sha1.
Nenhuma feature guarda-chuva, incluindo full, a ativa.
Consulte docs.rs para tipos e métodos exatos. As notas de compatibilidade da API explicam tipos de saída, seeds de coleções e nomes de métodos retidos. O guia de resiliência criptográfica explica pressupostos de segurança, fronteiras de migração e as evidências a rever ao escolher criptografia mais forte.
Plataformas e dispatch
A implementação Rust portátil define a saída correta, byte a byte.
Todos os backends acelerados devem produzir a mesma saída.
Em tempo de compilação, o alvo define quais backends estão disponíveis.
Com std, rscrypto também deteta features da CPU em tempo de execução e seleciona um backend.
Se nenhum backend acelerado estiver disponível, a implementação portátil é executada.
O guia de plataformas lista os alvos suportados.
Também explica o dispatch, o suporte no_std e os limites de portable-only.
Garantia
Uma afirmação de segurança existe apenas enquanto as suas evidências passarem. Evidência ausente ou desatualizada remove a afirmação; nunca enfraquece um gate.
- Correção: vetores NIST, RFC, upstream e Wycheproof, implementações independentes, testes de propriedades, testes negativos e Miri.
- Fuzzing: os alvos de fuzz executam o código de produção em primitivas, parsers, máquinas de estado e fronteiras de traits. As entradas minimizadas são reproduzidas como testes. Uma lane separada executa-os com sanitizers.
- Backends: testes diferenciais comparam cada backend acelerado com o Rust portátil. Cobrem comprimentos, alinhamentos, caudas, transições de estado, dispatch e fallback em alvos nativos.
- Tempo constante:
ct.tomllista as operações exatas em teste. A evidência combina inspeção de binários ligados otimizados, provas BINSEC para kernels de forma fixa e testes de temporização DudeCT para operações end-to-end. - Segredos: os tipos que possuem segredos ocultam o seu conteúdo na saída de
Debuge limpam o seu armazenamento inicializado ao serem descartados. As regras de cópia variam por tipo; por exemplo, o estado de BLAKE2 e BLAKE3 com chave suportaClone. O inventário de propriedade de segredos lista cada tipo. - Falhas: as falhas de verificação não indicam por que falharam. Uma abertura AEAD falhada limpa o texto simples não autenticado.
Uma afirmação de tempo constante aplica-se apenas ao alvo, features, compilador, perfil e operação que as suas evidências cobrem. Código-fonte que parece sem ramificações não é prova.
Para detalhes, consulte a evidência de testes, o modelo de tempo constante, o ciclo de vida dos segredos e o modelo de ameaças.
rscrypto não teve uma auditoria de segurança por terceiros.
O projeto não pode pagar por uma agora, e a evidência automatizada não a substitui.
rscrypto não afirma ser auditado, validado FIPS 140-3, formalmente verificado
ou de tempo constante como crate completo.
Reporte uma vulnerabilidade suspeita através do GitHub Private Vulnerability Reporting.
Siga o processo do SECURITY.md.
Não abra um issue público.