logos-chat/src/chat/identity.nim

45 lines
1.0 KiB
Nim
Raw Normal View History

2025-07-05 14:54:19 -07:00
import crypto/ecdh
2025-07-16 16:17:22 -07:00
import results
import strformat
import utils
export PublicKey, PrivateKey, loadPrivateKeyFromBytes, loadPublicKeyFromBytes
2025-07-05 14:54:19 -07:00
type
Identity* = object
2025-09-15 00:42:07 -07:00
name*: string
privateKey*: PrivateKey # TODO: protect key exposure
2025-07-05 14:54:19 -07:00
#################################################
# Constructors
#################################################
proc createIdentity*(name: string): Identity =
2025-07-16 16:17:22 -07:00
let privKey = createRandomKey().get()
result = Identity(name: name, privateKey: privKey)
2025-07-05 14:54:19 -07:00
#################################################
# Parameter Access
#################################################
2025-07-16 16:17:22 -07:00
proc getPubkey*(self: Identity): PublicKey =
result = self.privateKey.getPublicKey()
2025-07-05 14:54:19 -07:00
2025-07-16 16:17:22 -07:00
proc getAddr*(self: Identity): string =
result = get_addr(self.getPubKey())
2025-07-05 14:54:19 -07:00
proc getName*(self: Identity): string =
2025-08-15 07:31:19 -07:00
result = self.name
proc toHex(key: PublicKey): string =
bytesToHex(key.bytes())
proc `$`*(key: PublicKey): string =
let byteStr = toHex(key)
fmt"{byteStr[0..3]}..{byteStr[^4 .. ^1]}"