diff --git a/core/vm/address.go b/core/vm/address.go index df801863fc..70497ea4eb 100644 --- a/core/vm/address.go +++ b/core/vm/address.go @@ -80,9 +80,9 @@ func ecrecoverFunc(in []byte) []byte { // v needs to be moved to the end rsv := append(in[64:128], byte(v.Uint64())) - pubKey := crypto.Ecrecover(in[:32], rsv) - // make sure the public key is a valid one - if pubKey == nil || len(pubKey) != 65 { + pubKey, err := crypto.Ecrecover(in[:32], rsv) + if err != nil { + vmlogger.Errorf("EC RECOVER FAIL: ", err) return nil } diff --git a/crypto/crypto.go b/crypto/crypto.go index 9a1559fbfb..4d3c8740d3 100644 --- a/crypto/crypto.go +++ b/crypto/crypto.go @@ -68,10 +68,8 @@ func Ripemd160(data []byte) []byte { return ripemd.Sum(nil) } -func Ecrecover(hash, sig []byte) []byte { - r, _ := secp256k1.RecoverPubkey(hash, sig) - - return r +func Ecrecover(hash, sig []byte) ([]byte, error) { + return secp256k1.RecoverPubkey(hash, sig) } // New methods using proper ecdsa keys from the stdlib @@ -146,8 +144,9 @@ func GenerateKey() (*ecdsa.PrivateKey, error) { } func SigToPub(hash, sig []byte) *ecdsa.PublicKey { - s := Ecrecover(hash, sig) - if s == nil || len(s) != 65 { + s, err := Ecrecover(hash, sig) + // TODO: add logging of error + if err != nil { return nil }