729921e16e
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2.2 KiB
2.2 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 | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| generate_identity | function | go | cybersecurity | 1.0.0 | impure | func GenerateIdentity() (Identity, error) | Genera una identidad criptográfica dual con un par Ed25519 (firma) y un par X25519 (intercambio de claves). Punto de entrada obligatorio para cualquier participante en el bus de mensajería cifrado. |
|
false | error_go_core |
|
|
Identity{SignPub []byte, SignPriv []byte, KexPub []byte, KexPriv []byte} o error si falla el RNG del sistema. | true |
|
functions/cybersecurity/e2e_messaging_crypto_test.go | functions/cybersecurity/generate_identity.go |
Ejemplo
id, err := cybersecurity.GenerateIdentity()
if err != nil {
log.Fatal(err)
}
// id.SignPub / id.SignPriv — par Ed25519 para firmar mensajes
// id.KexPub / id.KexPriv — par X25519 para recibir claves de sala cifradas
fmt.Printf("identity pub(sign)=%x pub(kex)=%x\n", id.SignPub, id.KexPub)
Cuando usarla
Al registrar un nuevo participante en el bus de mensajería: llama GenerateIdentity una sola vez por dispositivo/sesión, persiste los bytes de las cuatro claves de forma segura, y publica SignPub + KexPub en el directorio de participantes.
Gotchas
- La función depende de
crypto/rand; en entornos con entropía insuficiente (contenedores recién arrancados) puede bloquearse brevemente. SignPrivtiene 64 bytes (no 32): Ed25519 concatena seed (32) + clave pública (32) internamente. No truncar.KexPub/KexPrivson exactamente 32 bytes (Curve25519). Pasar exactamente esos slices aSealKeyBox/OpenKeyBox.- Nunca reutilizar una identidad entre dispositivos distintos del mismo usuario sin un protocolo de clonado seguro.