From e193a84fb28068e38d5f54fbfd6208428c5bb655 Mon Sep 17 00:00:00 2001 From: Jeffrey Czyz Date: Sat, 7 Dec 2019 20:52:38 +0100 Subject: 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. --- src/test/util_tests.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'src/test/util_tests.cpp') diff --git a/src/test/util_tests.cpp b/src/test/util_tests.cpp index 8a2553617..f86e71367 100644 --- a/src/test/util_tests.cpp +++ b/src/test/util_tests.cpp @@ -5,12 +5,14 @@ #include #include +#include // For Hash() #include // For CKey #include #include #include #include -#include // For MessageSign(), MessageVerify() +#include +#include // For MessageSign(), MessageVerify(), MESSAGE_MAGIC #include #include #include @@ -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() -- cgit v1.2.3