diff options
author | Martin Holst Swende <martin@swende.se> | 2019-05-26 06:07:10 +0800 |
---|---|---|
committer | Péter Szilágyi <peterke@gmail.com> | 2019-05-26 06:07:10 +0800 |
commit | fec3b56f7f440b635787f740b527f15b818c0e1b (patch) | |
tree | 034c22ce8ce77ce32c77169b44e5e3bf1fa0e036 /accounts | |
parent | 9efc1a847e53b63847f6f95e0857b1a6300786eb (diff) | |
download | go-tangerine-fec3b56f7f440b635787f740b527f15b818c0e1b.tar go-tangerine-fec3b56f7f440b635787f740b527f15b818c0e1b.tar.gz go-tangerine-fec3b56f7f440b635787f740b527f15b818c0e1b.tar.bz2 go-tangerine-fec3b56f7f440b635787f740b527f15b818c0e1b.tar.lz go-tangerine-fec3b56f7f440b635787f740b527f15b818c0e1b.tar.xz go-tangerine-fec3b56f7f440b635787f740b527f15b818c0e1b.tar.zst go-tangerine-fec3b56f7f440b635787f740b527f15b818c0e1b.zip |
accounts, p2p, rpc: make CGO_ENABLED=0 build again (#19593)
* p2p: remove direct import of cgo-library
* accounts, rpc: more nocgo alternatives
* rpc: move unix path constant into separate file
* accounts/scwallet: address review concerns, remove copy-pasta
Diffstat (limited to 'accounts')
-rw-r--r-- | accounts/scwallet/wallet.go | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/accounts/scwallet/wallet.go b/accounts/scwallet/wallet.go index 4c0824eb9..71b2c68af 100644 --- a/accounts/scwallet/wallet.go +++ b/accounts/scwallet/wallet.go @@ -37,7 +37,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/crypto/secp256k1" "github.com/ethereum/go-ethereum/log" pcsc "github.com/gballet/go-libpcsclite" "github.com/status-im/keycard-go/derivationpath" @@ -1050,33 +1049,25 @@ func (s *Session) sign(path accounts.DerivationPath, hash []byte) ([]byte, error // determinePublicKey uses a signature and the X component of a public key to // recover the entire public key. func determinePublicKey(sig, pubkeyX []byte) ([]byte, error) { - for v := 0; v < 2; v++ { - sig[64] = byte(v) - pubkey, err := crypto.Ecrecover(DerivationSignatureHash[:], sig) - if err == nil { - if bytes.Equal(pubkey, pubkeyX) { - return pubkey, nil - } - } else if v == 1 || err != secp256k1.ErrRecoverFailed { - return nil, err - } - } - return nil, ErrPubkeyMismatch + return makeRecoverableSignature(DerivationSignatureHash[:], sig, pubkeyX) } // makeRecoverableSignature uses a signature and an expected public key to // recover the v value and produce a recoverable signature. func makeRecoverableSignature(hash, sig, expectedPubkey []byte) ([]byte, error) { + var libraryError error for v := 0; v < 2; v++ { sig[64] = byte(v) - pubkey, err := crypto.Ecrecover(hash, sig) - if err == nil { + if pubkey, err := crypto.Ecrecover(hash, sig); err == nil { if bytes.Equal(pubkey, expectedPubkey) { return sig, nil } - } else if v == 1 || err != secp256k1.ErrRecoverFailed { - return nil, err + } else { + libraryError = err } } + if libraryError != nil { + return nil, libraryError + } return nil, ErrPubkeyMismatch } |