From 9fbf3ea16599149ec626a03efdb3acc69b7ffea7 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Fri, 24 Oct 2025 16:48:23 -0300 Subject: [PATCH] implement json marshaler and unmarshaler for SecretKey. --- keys.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/keys.go b/keys.go index 81ed7cb..46d0734 100644 --- a/keys.go +++ b/keys.go @@ -38,6 +38,23 @@ type SecretKey [32]byte func (sk SecretKey) String() string { return "sk::" + sk.Hex() } func (sk SecretKey) Hex() string { return hex.EncodeToString(sk[:]) } func (sk SecretKey) Public() PubKey { return GetPublicKey(sk) } +func (pk SecretKey) MarshalJSON() ([]byte, error) { + res := make([]byte, 66) + hex.Encode(res[1:], pk[:]) + res[0] = '"' + res[65] = '"' + return res, nil +} + +func (pk *SecretKey) UnmarshalJSON(buf []byte) error { + if len(buf) != 66 { + return fmt.Errorf("must be a hex string of 64 characters") + } + if _, err := hex.Decode(pk[:], buf[1:65]); err != nil { + return err + } + return nil +} func SecretKeyFromHex(skh string) (SecretKey, error) { sk := SecretKey{} @@ -79,6 +96,8 @@ type PubKey [32]byte var ( _ stdjson.Marshaler = PubKey{} _ stdjson.Unmarshaler = (*PubKey)(nil) + _ stdjson.Marshaler = SecretKey{} + _ stdjson.Unmarshaler = (*SecretKey)(nil) ) func (pk PubKey) String() string { return "pk::" + pk.Hex() }