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