From 27a109af019e94595c68568f85dd635eb260fd69 Mon Sep 17 00:00:00 2001 From: Sean Bowe Date: Thu, 31 Mar 2016 16:15:07 -0600 Subject: [PATCH] Improve testing and API of CSHA256 compression. --- src/crypto/sha256.h | 15 +++++++++------ src/test/sha256compress_tests.cpp | 22 ++++++++++++++++++++++ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/crypto/sha256.h b/src/crypto/sha256.h index 1c449b834..8ecb7348d 100644 --- a/src/crypto/sha256.h +++ b/src/crypto/sha256.h @@ -11,19 +11,22 @@ /** A hasher class for SHA-256. */ class CSHA256 { -private: - uint32_t s[8]; - unsigned char buf[64]; - size_t bytes; - public: static const size_t OUTPUT_SIZE = 32; CSHA256(); CSHA256& Write(const unsigned char* data, size_t len); void Finalize(unsigned char hash[OUTPUT_SIZE]); - void FinalizeNoPadding(unsigned char hash[OUTPUT_SIZE], bool enforce_compression = true); + void FinalizeNoPadding(unsigned char hash[OUTPUT_SIZE]) { + FinalizeNoPadding(hash, true); + }; CSHA256& Reset(); + +private: + uint32_t s[8]; + unsigned char buf[64]; + size_t bytes; + void FinalizeNoPadding(unsigned char hash[OUTPUT_SIZE], bool enforce_compression); }; #endif // BITCOIN_CRYPTO_SHA256_H diff --git a/src/test/sha256compress_tests.cpp b/src/test/sha256compress_tests.cpp index aec36f073..f0b7ed435 100644 --- a/src/test/sha256compress_tests.cpp +++ b/src/test/sha256compress_tests.cpp @@ -30,6 +30,28 @@ BOOST_AUTO_TEST_CASE(compression) uint256 digest; BOOST_CHECK_THROW(hasher.FinalizeNoPadding(digest.begin()), std::length_error); } + + { + unsigned char preimage[65] = {}; + CSHA256 hasher; + hasher.Write(&preimage[0], 65); + uint256 digest; + BOOST_CHECK_THROW(hasher.FinalizeNoPadding(digest.begin()), std::length_error); + } + + { + unsigned char n = 0x00; + CSHA256 hasher; + for (size_t i = 0; i < 64; i++) { + hasher.Write(&n, 1); + } + uint256 digest; + + hasher.FinalizeNoPadding(digest.begin()); + + BOOST_CHECK_MESSAGE(digest == uint256S("d8a93718eaf9feba4362d2c091d4e58ccabe9f779957336269b4b917be9856da"), + digest.GetHex()); + } } BOOST_AUTO_TEST_SUITE_END()