---
name: verify_ed25519
kind: function
lang: go
domain: cybersecurity
version: "1.0.0"
purity: pure
signature: "func VerifyEd25519(pub, msg, sig []byte) bool"
description: "Verifica una firma Ed25519 sobre un mensaje usando la clave pública del firmante. Devuelve true solo si la firma es auténtica. Sin efectos secundarios ni I/O."
tags: [messaging, e2e-crypto, crypto, ed25519, signing, pure, e2e-messaging]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports:
  - crypto/ed25519
params:
  - name: pub
    desc: "Clave pública Ed25519 de 32 bytes del firmante. Viene del campo SignPub de su Identity."
  - name: msg
    desc: "Mensaje original que fue firmado. Debe ser idéntico al pasado a SignEd25519."
  - name: sig
    desc: "Firma de 64 bytes producida por SignEd25519."
output: "true si la firma es válida para (pub, msg). false en cualquier otro caso: firma incorrecta, pub equivocada, msg alterado, o sig corrupta."
tested: true
tests:
  - "firma y verificacion exitosa"
  - "firma es determinista (misma entrada, misma firma)"
  - "falla con mensaje modificado"
  - "falla con clave publica incorrecta"
  - "falla con firma corrupta"
test_file_path: "functions/cybersecurity/e2e_messaging_crypto_test.go"
file_path: "functions/cybersecurity/verify_ed25519.go"
---

## Ejemplo

```go
// Receptor verifica autoría antes de descifrar
if !cybersecurity.VerifyEd25519(sender.SignPub, ciphertext, sig) {
    log.Println("firma inválida: mensaje descartado")
    return
}
// Solo si la firma es válida, descifrar con OpenAEAD
plaintext, err := cybersecurity.OpenAEAD(roomKey, nonce, ciphertext, aad)
```

## Cuando usarla

Al recibir un mensaje del bus: verifica la firma del remitente sobre el ciphertext antes de intentar descifrar. Devuelve false para cualquier fallo de autenticación — nunca procesar un mensaje con firma inválida.
