From 0012a3cbbf64bf8f8b92817eca6c4698c518c43f Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Fri, 24 Oct 2025 16:48:02 -0300 Subject: [PATCH] ensure nostr.Generate() yields a valid secret. --- keys.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/keys.go b/keys.go index ab7c9b2..81ed7cb 100644 --- a/keys.go +++ b/keys.go @@ -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