ensure nostr.Generate() yields a valid secret.

This commit is contained in:
fiatjaf
2025-10-24 16:48:02 -03:00
parent e4bbebdd8f
commit 0012a3cbbf

16
keys.go
View File

@@ -17,10 +17,20 @@ var KeyOne = SecretKey{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
func Generate() SecretKey {
var sk SecretKey
if _, err := io.ReadFull(rand.Reader, sk[:]); err != nil {
panic(fmt.Errorf("failed to read random bytes when generating private key"))
for {
if _, err := io.ReadFull(rand.Reader, sk[:]); err != nil {
panic(fmt.Errorf("failed to read random bytes when generating private key"))
}
// there is a ridiculously small probabily of the secret key not yield a valid public key, so iterate here
pk := sk.Public()
if _, err := schnorr.ParsePubKey(pk[:]); err != nil {
continue
}
return sk
}
return sk
}
type SecretKey [32]byte