crypto.go raw
1 package crypto
2
3 import (
4 "crypto/sha256"
5
6 "git.mleku.dev/mleku/nostr/crypto/ec/schnorr"
7 "git.mleku.dev/mleku/nostr/crypto/ec/secp256k1"
8 "git.mleku.dev/mleku/nostr/encoders/bech32encoding"
9 )
10
11 func NsecToBytes(nsec string) ([]byte, error) {
12 return bech32encoding.NsecToBytes(nsec)
13 }
14
15 func PubKeyFromPrivKey(privKeyBytes []byte) ([]byte, error) {
16 sk := secp256k1.SecKeyFromBytes(privKeyBytes)
17 pub := sk.PubKey()
18 return schnorr.SerializePubKey(pub), nil
19 }
20
21 func SignSchnorr(privKeyBytes, message []byte) ([]byte, error) {
22 sk := secp256k1.SecKeyFromBytes(privKeyBytes)
23 sig, err := schnorr.Sign(sk, message)
24 if err != nil {
25 return nil, err
26 }
27 return sig.Serialize(), nil
28 }
29
30 func Sha256(data []byte) []byte {
31 h := sha256.Sum256(data)
32 return h[:]
33 }
34