From 6e91142dc2c4d7ccf1389abd918882cf2b44a206 Mon Sep 17 00:00:00 2001 From: Gustav Simonsson Date: Thu, 2 Apr 2015 22:09:05 +0200 Subject: [PATCH 1/2] Add CRYPTO logger, remove duplicated pubkey len check --- core/vm/address.go | 2 +- crypto/crypto.go | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/core/vm/address.go b/core/vm/address.go index df801863fc..45c93e3119 100644 --- a/core/vm/address.go +++ b/core/vm/address.go @@ -82,7 +82,7 @@ func ecrecoverFunc(in []byte) []byte { 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 { + if pubKey == nil { return nil } diff --git a/crypto/crypto.go b/crypto/crypto.go index 9a1559fbfb..37b6a38a6d 100644 --- a/crypto/crypto.go +++ b/crypto/crypto.go @@ -21,11 +21,16 @@ import ( "github.com/ethereum/go-ethereum/crypto/ecies" "github.com/ethereum/go-ethereum/crypto/secp256k1" "github.com/ethereum/go-ethereum/crypto/sha3" + "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/rlp" "golang.org/x/crypto/pbkdf2" "golang.org/x/crypto/ripemd160" ) +var ( + cryptologger = logger.NewLogger("CRYPTO") +) + func init() { // specify the params for the s256 curve ecies.AddParamsForCurve(S256(), ecies.ECIES_AES128_SHA256) @@ -69,8 +74,10 @@ func Ripemd160(data []byte) []byte { } func Ecrecover(hash, sig []byte) []byte { - r, _ := secp256k1.RecoverPubkey(hash, sig) - + r, err := secp256k1.RecoverPubkey(hash, sig) + if err != nil { + cryptologger.Errorf("EC RECOVER FAIL: ", err) + } return r } From 66bfcb864a9dee7e106ec02337ddad2acfc15b2a Mon Sep 17 00:00:00 2001 From: Gustav Simonsson Date: Sun, 5 Apr 2015 18:08:56 +0200 Subject: [PATCH 2/2] Forward EC recover err and log it in core/vm --- core/vm/address.go | 6 +++--- crypto/crypto.go | 18 +++++------------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/core/vm/address.go b/core/vm/address.go index 45c93e3119..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 { + 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 37b6a38a6d..4d3c8740d3 100644 --- a/crypto/crypto.go +++ b/crypto/crypto.go @@ -21,16 +21,11 @@ import ( "github.com/ethereum/go-ethereum/crypto/ecies" "github.com/ethereum/go-ethereum/crypto/secp256k1" "github.com/ethereum/go-ethereum/crypto/sha3" - "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/rlp" "golang.org/x/crypto/pbkdf2" "golang.org/x/crypto/ripemd160" ) -var ( - cryptologger = logger.NewLogger("CRYPTO") -) - func init() { // specify the params for the s256 curve ecies.AddParamsForCurve(S256(), ecies.ECIES_AES128_SHA256) @@ -73,12 +68,8 @@ func Ripemd160(data []byte) []byte { return ripemd.Sum(nil) } -func Ecrecover(hash, sig []byte) []byte { - r, err := secp256k1.RecoverPubkey(hash, sig) - if err != nil { - cryptologger.Errorf("EC RECOVER FAIL: ", err) - } - return r +func Ecrecover(hash, sig []byte) ([]byte, error) { + return secp256k1.RecoverPubkey(hash, sig) } // New methods using proper ecdsa keys from the stdlib @@ -153,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 }