Files
fn_registry/functions/cybersecurity/open_aead.md
T
2026-06-04 23:44:39 +02:00

2.6 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
open_aead function go cybersecurity 1.0.0 impure func OpenAEAD(key, nonce, ciphertext, aad []byte) ([]byte, error) Descifra y autentica un ciphertext producido por SealAEAD usando ChaCha20-Poly1305. Devuelve error explícito si la autenticación falla (ciphertext alterado, clave incorrecta o AAD distinto).
messaging
e2e-crypto
crypto
aead
chacha20poly1305
symmetric
e2e-messaging
false error_go_core
golang.org/x/crypto/chacha20poly1305
name desc
key Clave simétrica de exactamente 32 bytes. Debe ser la misma usada en SealAEAD.
name desc
nonce Nonce de 12 bytes devuelto por SealAEAD. Debe transmitirse junto al ciphertext.
name desc
ciphertext Ciphertext producido por SealAEAD (incluye los 16 bytes del tag Poly1305).
name desc
aad Datos autenticados adicionales. Debe ser idéntico al aad usado en SealAEAD, o nil si se pasó nil.
Plaintext descifrado, o error si la autenticación falla o la clave tiene longitud incorrecta. true
round-trip con aad
round-trip sin aad (nil)
error con clave de longitud incorrecta
error de autenticacion con ciphertext modificado
error de autenticacion con aad distinto
nonces distintos en llamadas sucesivas
functions/cybersecurity/e2e_messaging_crypto_test.go functions/cybersecurity/open_aead.go

Ejemplo

// nonce y ct vienen de SealAEAD; aad debe reconstruirse igual
aad := []byte("room:sala-general:seq:42")
plaintext, err := cybersecurity.OpenAEAD(key, nonce, ct, aad)
if err != nil {
    // mensaje alterado, clave incorrecta o aad distinto — descartar
    log.Printf("autenticación fallida: %v", err)
    return
}
fmt.Printf("mensaje: %s\n", plaintext)

Cuando usarla

Al recibir un mensaje del bus: después de resolver la room key con OpenKeyBox, llama OpenAEAD para descifrar y verificar integridad. Si devuelve error, el mensaje llegó corrupto o fue alterado en tránsito — descartar siempre, nunca procesar plaintext parcial.

Gotchas

  • El error no distingue entre "clave incorrecta", "nonce incorrecto" y "ciphertext alterado": todos devuelven el mismo error de autenticación por diseño (evita oráculos de padding).
  • Si el ciphertext tiene menos de 16 bytes, la función devuelve error antes de intentar descifrar.
  • El aad debe ser reconstructible por el receptor de forma independiente (no viaja en el mensaje cifrado).