|
|
@@ -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
|