Files
orly/pkg/utils/keys/keys.go
mleku c62d685fa4 implement cluster replication
todo: need to add chain of senders in a header to a header to prevent unnecessary sends
2025-07-31 15:55:07 +01:00

66 lines
1.3 KiB
Go

package keys
import (
"bytes"
"orly.dev/pkg/crypto/ec/bech32"
"orly.dev/pkg/encoders/bech32encoding"
"orly.dev/pkg/encoders/hex"
"orly.dev/pkg/utils/chk"
"orly.dev/pkg/utils/log"
)
func DecodeNpubOrHex(v string) (pk []byte, err error) {
var prf []byte
var bits5 []byte
if prf, bits5, err = bech32.DecodeNoLimit([]byte(v)); chk.D(err) {
// try hex then
if _, err = hex.DecBytes(pk, []byte(v)); chk.E(err) {
log.W.F(
"owner key %s is neither bech32 npub nor hex",
v,
)
return
}
// it was hex, return
return
}
if !bytes.Equal(prf, bech32encoding.NpubHRP) {
log.W.F(
"owner key %s is neither bech32 npub nor hex",
v,
)
return
}
if pk, err = bech32.ConvertBits(bits5, 5, 8, false); chk.E(err) {
return
}
return
}
func DecodeNsecOrHex(v string) (sk []byte, err error) {
var prf []byte
var bits5 []byte
if prf, bits5, err = bech32.DecodeNoLimit([]byte(v)); chk.D(err) {
// try hex then
if _, err = hex.DecBytes(sk, []byte(v)); chk.E(err) {
log.W.F(
"owner key %s is neither bech32 nsec nor hex",
v,
)
return
}
return
}
if !bytes.Equal(prf, bech32encoding.NsecHRP) {
log.W.F(
"owner key %s is neither bech32 nsec nor hex",
v,
)
return
}
if sk, err = bech32.ConvertBits(bits5, 5, 8, false); chk.E(err) {
return
}
return
}