Módulo de Hashing Criptográfico
Archivo: src/hash.rs (465 líneas)
¿Por qué existe?
Implementa funciones hash criptográficas en Rust puro, sin dependencias externas. Reemplaza las crates sha1, sha2, sha3 y blake3 con implementaciones manuales optimizadas. Sigue los estándares FIPS 180-4 (SHA-1/SHA-256) y FIPS 202 (SHA-3).
Algoritmos implementados
| Algoritmo | Tamaño digest | Estándar |
|---|---|---|
| SHA-1 | 160 bits (20 bytes) | FIPS 180-4 |
| SHA-256 | 256 bits (32 bytes) | FIPS 180-4 |
| SHA-384 | 384 bits (48 bytes) | FIPS 180-4 |
| SHA-512 | 512 bits (64 bytes) | FIPS 180-4 |
| SHA-3 (224/256/384/512) | Variable | FIPS 202 (Keccak) |
| BLAKE3 | 256 bits (32 bytes), extensible | BLAKE3 (2019) |
| HMAC-SHA256 | 256 bits (32 bytes) | RFC 2104 |
Estructuras principales
Sha256/Sha384/Sha512— Stateful hasher connew(),update(),finalize()Sha1— Implementación legacy para compatibilidadSha3— Implementación sobre Keccak-f[1600] con domain separationBlake3— Implementación con árbol binario de hashing (paralelizable)
API Pública
| Función | Descripción |
|---|---|
sha256(datos) -> [u8; 32] | Hash SHA-256 de un solo paso |
sha3_256(datos) -> [u8; 32] | Hash SHA-3 (Keccak) de un solo paso |
blake3(datos) -> [u8; 32] | Hash BLAKE3 de un solo paso |
hmac_sha256(clave, datos) -> [u8; 32] | HMAC usando SHA-256 |
hex_encode(bytes) -> String | Convierte bytes a representación hexadecimal |
hex_decode(s) -> Result<Vec<u8>> | Decodifica hexadecimal a bytes |
Uso desde Forja
Las funciones hash se exponen a través de los módulos hash.fa y hex.fa de la stdlib, con funciones como hash_sha256, hash_sha3, hash_blake3, hmac, hex_codificar y hex_decodificar.
⚡ Rendimiento: SHA-256 está optimizado con operaciones por bloques de 64 bytes, rotaciones inline y expansión de mensaje manual. BLAKE3 usa un árbol binario que permite hashing paralelo de archivos grandes.