Skip to content

Commit

Permalink
Merge 27836f2 into merged_master (Bitcoin PR bitcoin/bitcoin#22942)
Browse files Browse the repository at this point in the history
  • Loading branch information
delta1 committed Apr 26, 2023
2 parents b08c9ff + 27836f2 commit a14301f
Showing 1 changed file with 34 additions and 39 deletions.
73 changes: 34 additions & 39 deletions src/test/fuzz/muhash.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

0 comments on commit a14301f

Please sign in to comment.