mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 20:12:57 +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)
|
||||
{
|
||||
FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
|
||||
std::vector<uint8_t> data = 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);
|
||||
std::vector<uint8_t> data{ConsumeRandomLengthByteVector(fuzzed_data_provider)};
|
||||
std::vector<uint8_t> data2{ConsumeRandomLengthByteVector(fuzzed_data_provider)};
|
||||
|
||||
MuHash3072 muhash;
|
||||
|
||||
// Test that MuHash result is consistent independent of order of operations
|
||||
muhash.Insert(data);
|
||||
muhash.Insert(data2);
|
||||
|
||||
const std::string initial_state_hash{"dd5ad2a105c2d29495f577245c357409002329b9f4d6182c0af3dc2f462555c8"};
|
||||
uint256 out;
|
||||
muhash.Finalize(out);
|
||||
|
||||
muhash = MuHash3072();
|
||||
muhash.Insert(data2);
|
||||
muhash.Insert(data);
|
||||
|
||||
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);
|
||||
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