Módulos crypto y hash — Criptografía y Hashing

Archivos: stdlib/std/crypto.fa, stdlib/std/hash.fa

¿Por qué existen?

Exponen al usuario de Forja las operaciones criptográficas y de hashing implementadas en Rust en src/crypto.rs, src/crypto_pq.rs y src/hash.rs. Permiten cifrar datos, generar hashes, y usar criptografía post-cuántica desde código Forja.

Módulo crypto — Cifrado y Criptografía

FunciónDescripción
cifrar_aes_gcm(clave, iv, datos, aad)Cifra datos con AES-256-GCM (autenticado)
descifrar_aes_gcm(clave, iv, cifrado, aad, tag)Descifra datos cifrados con AES-256-GCM
cifrar_chacha20(clave, nonce, datos, aad)Cifra datos con ChaCha20-Poly1305
descifrar_chacha20(clave, nonce, cifrado, aad, tag)Descifra datos cifrados con ChaCha20-Poly1305
generar_bytes_aleatorios(n)Genera n bytes criptográficamente aleatorios
generar_clave_aleatoria()Genera una clave AES-256 aleatoria (32 bytes)
generar_iv_aleatorio()Genera un IV aleatorio (12 bytes para GCM)
derivar_clave(contraseña, salt, iteraciones)Deriva una clave usando PBKDF2-SHA256
generar_salt(longitud)Genera un salt aleatorio para derivación
comparar_constante(a, b)Comparación en tiempo constante (previene timing attacks)
generar_claves_pq()Genera par de claves post-cuánticas (Kyber/ML-KEM)
encapsular_pk(clave_publica)Encapsula un secreto compartido con cripto post-cuántica
desencapsular_pk(clave_secreta, ciphertext)Recupera el secreto compartido

Módulo hash — Funciones Hash

FunciónDescripción
hash_sha256(datos)Calcula hash SHA-256 (32 bytes)
hash_sha384(datos)Calcula hash SHA-384 (48 bytes)
hash_sha512(datos)Calcula hash SHA-512 (64 bytes)
hash_sha3_256(datos)Calcula hash SHA-3-256 (Keccak)
hash_blake3(datos)Calcula hash BLAKE3 (rápido, moderno)
hmac_sha256(clave, datos)Calcula HMAC con SHA-256
hash_archivo_sha256(ruta)Calcula SHA-256 de un archivo completo
hash_archivo_blake3(ruta)Calcula BLAKE3 de un archivo completo

Casos de uso

🔐 Seguridad: Forja implementa criptografía manualmente en Rust puro. Esto permite auditar el código y elimina dependencias externas. Siempre usá comparar_constante para comparar secrets.