mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-10 22:18:54 +01:00
Refactor message hashing into a utility function
And add unit test for it. The purpose of using a preamble or "magic" text as part of signing and verifying a message was not given when the code was repeated in a few locations. Make a test showing how it is used to prevent inadvertently signing a transaction.
This commit is contained in:
committed by
Vasil Dimov
parent
f8f0d9893d
commit
e193a84fb2
@@ -5,12 +5,14 @@
|
||||
#include <util/system.h>
|
||||
|
||||
#include <clientversion.h>
|
||||
#include <hash.h> // For Hash()
|
||||
#include <key.h> // For CKey
|
||||
#include <optional.h>
|
||||
#include <sync.h>
|
||||
#include <test/util/setup_common.h>
|
||||
#include <test/util/str.h>
|
||||
#include <util/message.h> // For MessageSign(), MessageVerify()
|
||||
#include <uint256.h>
|
||||
#include <util/message.h> // For MessageSign(), MessageVerify(), MESSAGE_MAGIC
|
||||
#include <util/moneystr.h>
|
||||
#include <util/strencodings.h>
|
||||
#include <util/string.h>
|
||||
@@ -2116,4 +2118,21 @@ BOOST_AUTO_TEST_CASE(message_verify)
|
||||
MessageVerificationResult::OK);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(message_hash)
|
||||
{
|
||||
const std::string unsigned_tx = "...";
|
||||
const std::string prefixed_message =
|
||||
std::string(1, (char)MESSAGE_MAGIC.length()) +
|
||||
MESSAGE_MAGIC +
|
||||
std::string(1, (char)unsigned_tx.length()) +
|
||||
unsigned_tx;
|
||||
|
||||
const uint256 signature_hash = Hash(unsigned_tx.begin(), unsigned_tx.end());
|
||||
const uint256 message_hash1 = Hash(prefixed_message.begin(), prefixed_message.end());
|
||||
const uint256 message_hash2 = MessageHash(unsigned_tx);
|
||||
|
||||
BOOST_CHECK_EQUAL(message_hash1, message_hash2);
|
||||
BOOST_CHECK_NE(message_hash1, signature_hash);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
Reference in New Issue
Block a user