accounts/scwallet: address review concerns, remove copy-pasta

This commit is contained in:
Martin Holst Swende 2019-05-21 14:27:35 +02:00
parent afe95fd7ae
commit e820c7caf5
No known key found for this signature in database
GPG key ID: 683B438C05A5DDF0

View file

@ -1049,27 +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)
if pubkey, err := crypto.Ecrecover(DerivationSignatureHash[:], sig); err == nil {
if bytes.Equal(pubkey, pubkeyX) {
return pubkey, nil
}
}
}
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)
if pubkey, err := crypto.Ecrecover(hash, sig); err == nil {
if bytes.Equal(pubkey, expectedPubkey) {
return sig, nil
}
} else {
libraryError = err
}
}
if libraryError != nil {
return nil, libraryError
}
return nil, ErrPubkeyMismatch
}