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 // determinePublicKey uses a signature and the X component of a public key to
// recover the entire public key. // recover the entire public key.
func determinePublicKey(sig, pubkeyX []byte) ([]byte, error) { func determinePublicKey(sig, pubkeyX []byte) ([]byte, error) {
for v := 0; v < 2; v++ { return makeRecoverableSignature(DerivationSignatureHash[:], sig, pubkeyX)
sig[64] = byte(v)
if pubkey, err := crypto.Ecrecover(DerivationSignatureHash[:], sig); err == nil {
if bytes.Equal(pubkey, pubkeyX) {
return pubkey, nil
}
}
}
return nil, ErrPubkeyMismatch
} }
// makeRecoverableSignature uses a signature and an expected public key to // makeRecoverableSignature uses a signature and an expected public key to
// recover the v value and produce a recoverable signature. // recover the v value and produce a recoverable signature.
func makeRecoverableSignature(hash, sig, expectedPubkey []byte) ([]byte, error) { func makeRecoverableSignature(hash, sig, expectedPubkey []byte) ([]byte, error) {
var libraryError error
for v := 0; v < 2; v++ { for v := 0; v < 2; v++ {
sig[64] = byte(v) sig[64] = byte(v)
if pubkey, err := crypto.Ecrecover(hash, sig); err == nil { if pubkey, err := crypto.Ecrecover(hash, sig); err == nil {
if bytes.Equal(pubkey, expectedPubkey) { if bytes.Equal(pubkey, expectedPubkey) {
return sig, nil return sig, nil
} }
} else {
libraryError = err
} }
} }
if libraryError != nil {
return nil, libraryError
}
return nil, ErrPubkeyMismatch return nil, ErrPubkeyMismatch
} }