utils.go 488 B

123456789101112131415161718
  1. package istanbulcommon
  2. import (
  3. "github.com/ethereum/go-ethereum/common"
  4. "github.com/ethereum/go-ethereum/crypto"
  5. )
  6. // GetSignatureAddress gets the signer address from the signature
  7. func GetSignatureAddress(data []byte, sig []byte) (common.Address, error) {
  8. // 1. Keccak data
  9. hashData := crypto.Keccak256(data)
  10. // 2. Recover public key
  11. pubkey, err := crypto.SigToPub(hashData, sig)
  12. if err != nil {
  13. return common.Address{}, err
  14. }
  15. return crypto.PubkeyToAddress(*pubkey), nil
  16. }