Improve testing and API of CSHA256 compression.
This commit is contained in:
parent
d3612b1c94
commit
27a109af01
|
@ -11,19 +11,22 @@
|
||||||
/** A hasher class for SHA-256. */
|
/** A hasher class for SHA-256. */
|
||||||
class CSHA256
|
class CSHA256
|
||||||
{
|
{
|
||||||
private:
|
|
||||||
uint32_t s[8];
|
|
||||||
unsigned char buf[64];
|
|
||||||
size_t bytes;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static const size_t OUTPUT_SIZE = 32;
|
static const size_t OUTPUT_SIZE = 32;
|
||||||
|
|
||||||
CSHA256();
|
CSHA256();
|
||||||
CSHA256& Write(const unsigned char* data, size_t len);
|
CSHA256& Write(const unsigned char* data, size_t len);
|
||||||
void Finalize(unsigned char hash[OUTPUT_SIZE]);
|
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();
|
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
|
#endif // BITCOIN_CRYPTO_SHA256_H
|
||||||
|
|
|
@ -30,6 +30,28 @@ BOOST_AUTO_TEST_CASE(compression)
|
||||||
uint256 digest;
|
uint256 digest;
|
||||||
BOOST_CHECK_THROW(hasher.FinalizeNoPadding(digest.begin()), std::length_error);
|
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()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
Loading…
Reference in New Issue