ensure nostr.Generate() yields a valid secret.
This commit is contained in:
16
keys.go
16
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
|
||||
|
||||
Reference in New Issue
Block a user