message: fuzz: Cleanup muhash fuzz target
  Can be reviewed with -W --ignore-all-space
  Fixes:
  * Calling ConsumeRandomLengthByteVector 4 times, when 2 is enough.
  * Slow execution speed: Finalize is expensive because it invokes
  division. Speed up the target by calling Finalize() at most twice per
  fuzz input.
diff: 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;
  + uint256 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);
  -
  - uint256 out2;
  muhash.Finalize(out2);
  -
  - assert(out == out2);
  + },
  + [&] {
  + // Test that multiplication with the initial state never changes the finalized result
  + muhash.Finalize(out);
  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
  + muhash3.Finalize(out2);
  + },
  + [&] {
  + // Test that dividing a MuHash by itself brings it back to it's initial state
  muhash /= muhash;
  muhash.Finalize(out);
  -
  - MuHash3072 muhash2;
  - muhash2.Finalize(out2);
  -
  + 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);
  -
  - muhash3.Remove(data);
  - muhash3.Remove(data2);
  - muhash3.Finalize(out3);
  - assert(out == out3);
  }
  