--- 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.