aboutsummaryrefslogtreecommitdiffstats
path: root/accounts
diff options
context:
space:
mode:
authorMartin Holst Swende <martin@swende.se>2019-05-26 06:07:10 +0800
committerPéter Szilágyi <peterke@gmail.com>2019-05-26 06:07:10 +0800
commitfec3b56f7f440b635787f740b527f15b818c0e1b (patch)
tree034c22ce8ce77ce32c77169b44e5e3bf1fa0e036 /accounts
parent9efc1a847e53b63847f6f95e0857b1a6300786eb (diff)
downloadgo-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.go25
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
}