Browse Source

Improve testing and API of CSHA256 compression.

pull/145/head
Sean Bowe 8 years ago
parent
commit
27a109af01
  1. 15
      src/crypto/sha256.h
  2. 22
      src/test/sha256compress_tests.cpp

15
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

22
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()

Loading…
Cancel
Save