check for validity of secret key when parsing from hex.

This commit is contained in:
fiatjaf
2025-07-01 10:57:50 -03:00
parent ca03dc60f7
commit 98f95fca15

14
keys.go
View File

@@ -29,19 +29,23 @@ func (sk SecretKey) Hex() string { return hex.EncodeToString(sk[:]) }
func (sk SecretKey) Public() PubKey { return GetPublicKey(sk) } func (sk SecretKey) Public() PubKey { return GetPublicKey(sk) }
func SecretKeyFromHex(skh string) (SecretKey, error) { func SecretKeyFromHex(skh string) (SecretKey, error) {
id := SecretKey{} sk := SecretKey{}
if len(skh) < 64 { if len(skh) < 64 {
skh = strings.Repeat("0", 64-len(skh)) + skh skh = strings.Repeat("0", 64-len(skh)) + skh
} else if len(skh) > 64 { } else if len(skh) > 64 {
return id, fmt.Errorf("secret key should be at most 64-char hex, got '%s'", skh) return sk, fmt.Errorf("secret key should be at most 64-char hex, got '%s'", skh)
} }
if _, err := hex.Decode(id[:], unsafe.Slice(unsafe.StringData(skh), 64)); err != nil { if _, err := hex.Decode(sk[:], unsafe.Slice(unsafe.StringData(skh), 64)); err != nil {
return id, fmt.Errorf("'%s' is not valid hex: %w", skh, err) return sk, fmt.Errorf("'%s' is not valid hex: %w", skh, err)
} }
return id, nil if sk.Public() != ZeroPK {
return sk, nil
}
return sk, fmt.Errorf("invalid secret key")
} }
func MustSecretKeyFromHex(idh string) SecretKey { func MustSecretKeyFromHex(idh string) SecretKey {