mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 20:42:59 +01:00
Merge bitcoin/bitcoin#22942: fuzz: Cleanup muhash fuzz target
0000dca6f0e4dda212bf8adf555b68f2c7464ff8 fuzz: Cleanup muhash fuzz target (MarcoFalke) Pull request description: ACKs for top commit: fjahr: ACK 0000dca6f0e4dda212bf8adf555b68f2c7464ff8 Tree-SHA512: 9893ad5cea0faf94a18a778ae9d62d4a37850b445b6f22fdbe57c882c956c8bca6d03dd040aa4512ce3fba350b186c3d5ed80295b6310bea60197783b50b01b6
This commit is contained in:
parent
f9b22b61e6
commit
30c458cc04
@ -12,52 +12,47 @@
|
|||||||
FUZZ_TARGET(muhash)
|
FUZZ_TARGET(muhash)
|
||||||
{
|
{
|
||||||
FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
|
FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
|
||||||
std::vector<uint8_t> data = ConsumeRandomLengthByteVector(fuzzed_data_provider);
|
std::vector<uint8_t> data{ConsumeRandomLengthByteVector(fuzzed_data_provider)};
|
||||||
std::vector<uint8_t> data2 = ConsumeRandomLengthByteVector(fuzzed_data_provider);
|
std::vector<uint8_t> data2{ConsumeRandomLengthByteVector(fuzzed_data_provider)};
|
||||||
if (data.empty()) {
|
|
||||||
data.resize(fuzzed_data_provider.ConsumeIntegralInRange<size_t>(1, 4096), fuzzed_data_provider.ConsumeIntegral<uint8_t>());
|
|
||||||
}
|
|
||||||
if (data2.empty()) {
|
|
||||||
data2.resize(fuzzed_data_provider.ConsumeIntegralInRange<size_t>(1, 4096), fuzzed_data_provider.ConsumeIntegral<uint8_t>());
|
|
||||||
}
|
|
||||||
|
|
||||||
data = ConsumeRandomLengthByteVector(fuzzed_data_provider);
|
|
||||||
data2 = ConsumeRandomLengthByteVector(fuzzed_data_provider);
|
|
||||||
|
|
||||||
MuHash3072 muhash;
|
MuHash3072 muhash;
|
||||||
|
|
||||||
// Test that MuHash result is consistent independent of order of operations
|
|
||||||
muhash.Insert(data);
|
muhash.Insert(data);
|
||||||
muhash.Insert(data2);
|
muhash.Insert(data2);
|
||||||
|
|
||||||
|
const std::string initial_state_hash{"dd5ad2a105c2d29495f577245c357409002329b9f4d6182c0af3dc2f462555c8"};
|
||||||
uint256 out;
|
uint256 out;
|
||||||
muhash.Finalize(out);
|
|
||||||
|
|
||||||
muhash = MuHash3072();
|
|
||||||
muhash.Insert(data2);
|
|
||||||
muhash.Insert(data);
|
|
||||||
|
|
||||||
uint256 out2;
|
uint256 out2;
|
||||||
muhash.Finalize(out2);
|
CallOneOf(
|
||||||
|
fuzzed_data_provider,
|
||||||
|
[&] {
|
||||||
|
// Test that MuHash result is consistent independent of order of operations
|
||||||
|
muhash.Finalize(out);
|
||||||
|
|
||||||
|
muhash = MuHash3072();
|
||||||
|
muhash.Insert(data2);
|
||||||
|
muhash.Insert(data);
|
||||||
|
muhash.Finalize(out2);
|
||||||
|
},
|
||||||
|
[&] {
|
||||||
|
// Test that multiplication with the initial state never changes the finalized result
|
||||||
|
muhash.Finalize(out);
|
||||||
|
MuHash3072 muhash3;
|
||||||
|
muhash3 *= muhash;
|
||||||
|
muhash3.Finalize(out2);
|
||||||
|
},
|
||||||
|
[&] {
|
||||||
|
// Test that dividing a MuHash by itself brings it back to it's initial state
|
||||||
|
muhash /= muhash;
|
||||||
|
muhash.Finalize(out);
|
||||||
|
out2 = uint256S(initial_state_hash);
|
||||||
|
},
|
||||||
|
[&] {
|
||||||
|
// Test that removing all added elements brings the object back to it's initial state
|
||||||
|
muhash.Remove(data);
|
||||||
|
muhash.Remove(data2);
|
||||||
|
muhash.Finalize(out);
|
||||||
|
out2 = uint256S(initial_state_hash);
|
||||||
|
});
|
||||||
assert(out == out2);
|
assert(out == out2);
|
||||||
MuHash3072 muhash3;
|
|
||||||
muhash3 *= muhash;
|
|
||||||
uint256 out3;
|
|
||||||
muhash3.Finalize(out3);
|
|
||||||
assert(out == out3);
|
|
||||||
|
|
||||||
// Test that removing all added elements brings the object back to it's initial state
|
|
||||||
muhash /= muhash;
|
|
||||||
muhash.Finalize(out);
|
|
||||||
|
|
||||||
MuHash3072 muhash2;
|
|
||||||
muhash2.Finalize(out2);
|
|
||||||
|
|
||||||
assert(out == out2);
|
|
||||||
|
|
||||||
muhash3.Remove(data);
|
|
||||||
muhash3.Remove(data2);
|
|
||||||
muhash3.Finalize(out3);
|
|
||||||
assert(out == out3);
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user