---
name: sign_ed25519
kind: function
lang: go
domain: cybersecurity
version: "1.0.0"
purity: pure
signature: "func SignEd25519(priv, msg []byte) []byte"
description: "Firma un mensaje con una clave privada Ed25519 y devuelve la firma de 64 bytes. Determinista: mismas entradas producen siempre la misma firma. 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: priv
    desc: "Clave privada Ed25519 de 64 bytes. Viene del campo SignPriv de Identity."
  - name: msg
    desc: "Bytes a firmar. Puede ser cualquier dato: ciphertext, evento, room key distribuida, etc."
output: "Firma Ed25519 de exactamente 64 bytes. Siempre determinista para la misma (priv, msg)."
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/sign_ed25519.go"
---

## Ejemplo

```go
// Firmar el ciphertext de un mensaje antes de transmitirlo
sig := cybersecurity.SignEd25519(id.SignPriv, ciphertext)
// Transmitir ciphertext + sig; el receptor verifica con VerifyEd25519
```

## Cuando usarla

Después de cifrar un mensaje con SealAEAD: firma el ciphertext (no el plaintext) con tu SignPriv para que el receptor pueda verificar la autoría con VerifyEd25519. También útil para firmar eventos de control del bus (rotación de clave, join/leave de sala).
