29 lines
579 B
Go
29 lines
579 B
Go
package nostr
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"fmt"
|
|
"io"
|
|
|
|
"github.com/btcsuite/btcd/btcec/v2"
|
|
"github.com/btcsuite/btcd/btcec/v2/schnorr"
|
|
)
|
|
|
|
func GeneratePrivateKey() [32]byte {
|
|
var sk [32]byte
|
|
if _, err := io.ReadFull(rand.Reader, sk[:]); err != nil {
|
|
panic(fmt.Errorf("failed to read random bytes when generating private key"))
|
|
}
|
|
return sk
|
|
}
|
|
|
|
func GetPublicKey(sk [32]byte) PubKey {
|
|
_, pk := btcec.PrivKeyFromBytes(sk[:])
|
|
return [32]byte(pk.SerializeCompressed()[1:])
|
|
}
|
|
|
|
func IsValidPublicKey(pk [32]byte) bool {
|
|
_, err := schnorr.ParsePubKey(pk[:])
|
|
return err == nil
|
|
}
|