github.com/unicornultrafoundation/go-u2u@v1.0.0-rc1.0.20240205080301-e74a83d3fadc/valkeystore/signer.go (about) 1 package valkeystore 2 3 import ( 4 "crypto/ecdsa" 5 6 "github.com/unicornultrafoundation/go-u2u/crypto" 7 8 "github.com/unicornultrafoundation/go-u2u/native/validatorpk" 9 "github.com/unicornultrafoundation/go-u2u/valkeystore/encryption" 10 ) 11 12 type SignerI interface { 13 Sign(pubkey validatorpk.PubKey, digest []byte) ([]byte, error) 14 } 15 16 type Signer struct { 17 backend KeystoreI 18 } 19 20 func NewSigner(backend KeystoreI) *Signer { 21 return &Signer{ 22 backend: backend, 23 } 24 } 25 26 func (s *Signer) Sign(pubkey validatorpk.PubKey, digest []byte) ([]byte, error) { 27 if pubkey.Type != validatorpk.Types.Secp256k1 { 28 return nil, encryption.ErrNotSupportedType 29 } 30 key, err := s.backend.GetUnlocked(pubkey) 31 if err != nil { 32 return nil, err 33 } 34 35 secp256k1Key := key.Decoded.(*ecdsa.PrivateKey) 36 37 sigRSV, err := crypto.Sign(digest, secp256k1Key) 38 if err != nil { 39 return nil, err 40 } 41 sigRS := sigRSV[:64] 42 return sigRS, err 43 }