From 7bc1cb3677ba18b83fa094799de4a4e8589a4eac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com> Date: Mon, 27 May 2019 17:27:18 +0300 Subject: [PATCH] accounts/scwallet: fix public key confirmation regression --- accounts/scwallet/wallet.go | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/accounts/scwallet/wallet.go b/accounts/scwallet/wallet.go index c48028281..57b597706 100644 --- a/accounts/scwallet/wallet.go +++ b/accounts/scwallet/wallet.go @@ -982,12 +982,10 @@ func (s *Session) derive(path accounts.DerivationPath) (accounts.Account, error) copy(sig[32-len(rbytes):32], rbytes) copy(sig[64-len(sbytes):64], sbytes) - pubkey, err := determinePublicKey(sig, sigdata.PublicKey) - if err != nil { + if err := confirmPublicKey(sig, sigdata.PublicKey); err != nil { return accounts.Account{}, err } - - pub, err := crypto.UnmarshalPubkey(pubkey) + pub, err := crypto.UnmarshalPubkey(sigdata.PublicKey) if err != nil { return accounts.Account{}, err } @@ -1057,10 +1055,10 @@ func (s *Session) sign(path accounts.DerivationPath, hash []byte) ([]byte, error return sig, nil } -// 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) { - return makeRecoverableSignature(DerivationSignatureHash[:], sig, pubkeyX) +// confirmPublicKey confirms that the given signature belongs to the specified key. +func confirmPublicKey(sig, pubkey []byte) error { + _, err := makeRecoverableSignature(DerivationSignatureHash[:], sig, pubkey) + return err } // makeRecoverableSignature uses a signature and an expected public key to -- GitLab