
Cripto en Rust con cero dependencias por defecto: BLAKE3, Ed25519/X25519, hashes, MACs, KDFs, AEADs y sumas de verificación con aceleración completa SIMD/ASM.
rscrypto proporciona primitivas criptográficas en Rust puro, hashes criptográficos y rápidos, hash de contraseñas y sumas de verificación bajo un único modelo de características.
No tiene dependencia de C/FFI de producción, OpenSSL ni bibliotecas del sistema. Las características hoja admiten compilaciones reducidas; las características generales componen superficies más amplias.
Usa una característica hoja para una primitiva, un grupo para un subconjunto de primitivas, o full para toda la superficie de la crate. El backend portátil de Rust está siempre presente. SIMD y ASM son solo aceleradores.
Instantánea de benchmark publicada: 1.59x geomean en los runners de Linux frente a los competidores externos más rápidos, con 4,052 / 6,750 victorias y 6,101 / 6,750 victorias o empates.
Evidencia local en macOS Apple Silicon: 1.37x geomean frente a los competidores externos más rápidos, con 382 / 774 victorias y 708 / 774 victorias o empates.
Las ejecuciones en bruto, la metodología y las pérdidas conocidas están en
benchmark_results/OVERVIEW.md.
Gráfico: tarjeta de puntuación del benchmark. Los valores por encima de 1.00x significan que rscrypto es más rápido que la implementación externa más rápida equivalente.
no_std, WASM, servidor, CLI, embebidas y con restricciones de
auditoría usan el mismo modelo de características hoja.rscrypto es una crate de primitivas. No es una pila TLS, un kit de herramientas PKI, un
almacén de claves ni una implementación de protocolo. No reivindica validación FIPS 140-3,
auditoría de terceros, verificación formal ni comportamiento de tiempo constante para toda
la crate.
Compilación mínima no_std de SHA-2:
[dependencies]
rscrypto = { version = "0.7.8", default-features = false, features = ["sha2"] }
Pila completa de primitivas con aleatoriedad del sistema operativo habilitada:
[dependencies]
rscrypto = { version = "0.7.8", features = ["full", "getrandom"] }
Usa default-features = false para compilaciones no_std. Habilita getrandom solo cuando necesites APIs que generen sales, claves, nonces o entropía para generación de claves RSA desde el 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 común de la API es de un solo disparo (one-shot) cuando resulta conveniente y de streaming cuando se necesita.
Usa docs/types.md cuando necesites el mapa completo de tipos, y
docs/features.md cuando necesites el conjunto de características más pequeño.
Las banderas se organizan por capas según su uso:
sha2, blake3, aes-gcm, ed25519, x25519, ml-kem, crc32, etc.hashes, checksums, macs, kdfs, password-hashing, aead, signatures, key-exchange.Inventario completo de características: docs/features.md.
Inventario público de tipos: docs/types.md.
rscrypto hace afirmaciones de tiempo constante solo acotadas y vinculadas a releases para operaciones que manejan secretos, no para cada función de la crate. ct.toml registra el conjunto candidato de primitivas/configuración; no crea una afirmación pública por sí mismo. Una afirmación existe únicamente cuando la release firmada correspondiente de GitHub incluye un paquete atestiguado rscrypto-X.Y.Z-ct-evidence.tar.gz que supera todas las compuertas requeridas para esa versión, commit, objetivo, perfil y conjunto de características exactos.
Los propietarios de tamaño fijo que contienen secretos no implementan PartialEq ni Eq. Sus métodos ct_eq devuelven un CtDecision opaco; los llamadores deben consumirlo explícitamente con declassify() para obtener un bit ramificable. Las APIs de verificación mantienen ese límite interno y devuelven un único Result opaco. Esto es resistencia al mal uso en el límite de la API de Rust, no una prueba sobre el código máquina resultante.
Las principales superficies candidatas que contienen secretos en ct.toml son verificación de MAC/etiquetas, forma de fallo de autenticación AEAD, multiplicación escalar X25519, firma Ed25519 y derivación de clave pública secreta, firma a ciegas ECDSA P-256/P-384, superficies secretas de generación de claves, encapsulación y desencapsulación ML-KEM-512/768/1024, hojas de firma/descifrado privadas RSA y comparaciones seleccionadas de verificación de contraseñas.
El análisis sintáctico público, la generación de claves no listada, la aleatoriedad del SO, los hashes en bruto, las sumas de verificación, los hashes no criptográficos, las rutas de benchmark y las matemáticas de verificación de clave pública no son afirmaciones generales de tiempo constante. Consulta docs/constant-time.md para conocer el modelo exacto de afirmación y verificación, y docs/compliance.md para los límites de revisión. Las releases hasta v0.6.4 no contienen este paquete y, por lo tanto, no conllevan ninguna afirmación de tiempo constante vinculada a release.
rscrypto mantiene la ruta portátil de Rust como autoridad byte a byte. Los núcleos ISA se seleccionan solo cuando el objetivo y la CPU en tiempo de ejecución los admiten.
Matriz completa de plataformas: docs/platforms.md.
rscrypto hace afirmaciones de tiempo constante acotadas solo cuando una release correspondiente publica el paquete de evidencia requerido, nunca para cada API o compilación. Los propietarios de tamaño fijo de secretos mencionados en docs/secret-ownership.md sobrescriben sus bytes al liberarlos y enmascaran Debug; la afirmación no se extiende a las copias del llamador. Los fallos de verificación usan errores opacos, y las aperturas AEAD fallidas limpian los búferes de salida del llamador. Los artefactos de release están controlados por etiquetas firmadas, se publican mediante Trusted Publishing de crates.io y están cubiertos por atestaciones de procedencia de compilación de GitHub.
No se reivindica ninguna auditoría de terceros, certificado FIPS 140-3 ni prueba formal de toda la crate. Reporta vulnerabilidades a través de GitHub Private Vulnerability Reporting o de SECURITY.md, no mediante issues públicos.
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.
El nightly fijado en rust-toolchain.toml se usa para comprobaciones con Miri, fuzzing y arquitecturas exóticas.
Doble licencia bajo Apache-2.0 o MIT, a tu elección.
| Tarea | Característica | Comenzar aquí |
|---|
| Sellado/apertura AEAD | chacha20poly1305,getrandom | examples/aead_seal_open.rs |
| Firmas Ed25519 y ECDSA | ed25519,ecdsa-p256,getrandom | examples/signatures.rs |
| Verificación RSA-PSS | rsa | examples/rsa_pss_verify.rs |
| Secreto compartido ML-KEM | ml-kem,getrandom | examples/mlkem_encapsulation.rs |
| Hash de contraseñas Argon2id y scrypt | password-hashing,getrandom | examples/password_hashing.rs |
| Necesidad | Incluido | Ruta de características |
|---|
| Hashes criptográficos | SHA-2, SHA-3, SHAKE, cSHAKE128/256, BLAKE2, BLAKE3, Ascon-Hash/XOF/CXOF | hashes o características hoja |
| MACs y KDFs | HMAC-SHA-2/SHA-3, KMAC128/256, Poly1305 independiente, HKDF-SHA-2, PBKDF2-HMAC-SHA-2 | auth o características hoja |
| Hash de contraseñas | KDFs Argon2d/i/id y scrypt en bruto; registros de contraseña PHC generados y acotados | auth, argon2, scrypt, phc-strings |
| Primitivas de clave pública | Firma/verificación ECDSA P-256/P-384, firmas Ed25519, firma/verificación RSA/OAEP/RSAES-PKCS1-v1_5/generación de claves, intercambio de claves X25519, KEMs ML-KEM-512/768/1024 | auth, signatures, key-exchange, ecdsa, ecdsa-p256, ecdsa-p384, ed25519, rsa, x25519, ml-kem |
| Cifrado AEAD | AES-128/256-GCM, AES-128/256-GCM-SIV, ChaCha20-Poly1305, XChaCha20-Poly1305, AEGIS-256, Ascon-AEAD128 | aead o características hoja |
| Sumas de verificación | CRC-16, CRC-24, CRC-32, CRC-32C, CRC-64/XZ, CRC-64/NVMe | checksums o características hoja |
| Hashes rápidos | XXH3-64/128, RapidHash V3-64 | xxh3, rapidhash |
std, alloc, getrandom, parallel, serde, portable-only; serde-secrets incluye explícitamente el material secreto en serde.| Familia de objetivos | Ejemplos de aceleración |
|---|
| 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, aritmética ML-KEM z/Vector |
| POWER / ppc64le | Extensiones vectoriales y criptográficas POWER8/9/10 |
| RISC-V | RVV, Zbc, Zvkned, Zvbc |
| WASM | SIMD128 donde esté disponible, respaldo portátil en todas partes |
docs/migration/CONTRIBUTING.mdCHANGELOG.md, docs/release.md