Deduplicate the message signing code

The logic of signing a message was duplicated in 3 places:

src/qt/signverifymessagedialog.cpp
  SignVerifyMessageDialog::on_signMessageButton_SM_clicked()

src/rpc/misc.cpp
  signmessagewithprivkey()

src/wallet/rpcwallet.cpp
  signmessage()

Move the logic into

src/util/message.cpp
  MessageSign()

and call it from all the 3 places.
This commit is contained in:
Vasil Dimov
2019-11-22 17:17:29 +01:00
parent 2ce3447eb1
commit f8f0d9893d
6 changed files with 87 additions and 23 deletions

View File

@@ -4,6 +4,7 @@
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include <hash.h> // For CHashWriter
#include <key.h> // For CKey
#include <key_io.h> // For DecodeDestination()
#include <pubkey.h> // For CPubKey
#include <script/standard.h> // For CTxDestination, IsValidDestination(), PKHash
@@ -51,3 +52,23 @@ MessageVerificationResult MessageVerify(
return MessageVerificationResult::OK;
}
bool MessageSign(
const CKey& privkey,
const std::string& message,
std::string& signature)
{
CHashWriter ss(SER_GETHASH, 0);
ss << strMessageMagic;
ss << message;
std::vector<unsigned char> signature_bytes;
if (!privkey.SignCompact(ss.GetHash(), signature_bytes)) {
return false;
}
signature = EncodeBase64(signature_bytes.data(), signature_bytes.size());
return true;
}

View File

@@ -6,6 +6,8 @@
#ifndef BITCOIN_UTIL_MESSAGE_H
#define BITCOIN_UTIL_MESSAGE_H
#include <key.h> // For CKey
#include <string>
extern const std::string strMessageMagic;
@@ -46,4 +48,14 @@ MessageVerificationResult MessageVerify(
const std::string& signature,
const std::string& message);
/** Sign a message.
* @param[in] privkey Private key to sign with.
* @param[in] message The message to sign.
* @param[out] signature Signature, base64 encoded, only set if true is returned.
* @return true if signing was successful. */
bool MessageSign(
const CKey& privkey,
const std::string& message,
std::string& signature);
#endif // BITCOIN_UTIL_MESSAGE_H