5#include <fuzzer/FuzzedDataProvider.h>
64 fuzz_info(
"Should throw: leaf index is too large, leaf index: ",
79 if (expected_root != input.
root) {
80 fuzz_info(
"Should throw: root does not match expected root");
94 msgpack::unpack((
reinterpret_cast<const char*
>(
data)), size).get().convert(input);
95 }
catch (
const std::exception& e) {
105 int choice = dist(rng);
107 auto random_field = [&rng]() ->
FF {
109 return FF(dist(rng), dist(rng), dist(rng), dist(rng));
150 size_t index = dist(rng);
159 if (mutated_data_size > max_size) {
160 delete[] mutated_data;
164 memcpy(
data, mutated_data, mutated_data_size);
165 delete[] mutated_data;
167 return mutated_data_size;
174 msgpack::unpack((
reinterpret_cast<const char*
>(
data)), size).get().convert(input);
175 }
catch (
const std::exception& e) {
194 bool will_throw = predict_if_will_throw(input);
205 }
catch (std::exception& e) {
215 throw std::runtime_error(
"Expected exception was not thrown");
218 if (new_root.has_value()) {
219 FF expected_new_root =
221 if (new_root.value() != expected_new_root) {
222 throw std::runtime_error(
"New root does not match expected root");
226 if (poseidon2_perm_mem_emitter.
get_events().size() > 0) {
227 throw std::runtime_error(
"Poseidon2 permutation memory events were emitted");
236 poseidon2_trace_builder.process_hash(poseidon2_hash_emitter.
dump_events(),
trace);
241 if (getenv(
"AVM_DEBUG") !=
nullptr) {
242 info(
"Debugging trace:");
247 check_relation<merkle_check_rel>(
trace);
248 check_all_interactions<MerkleCheckTraceBuilder>(
trace);
void run(uint32_t starting_row=0)
const Container & get_events() const
void process(const simulation::EventEmitterInterface< simulation::MerkleCheckEvent >::Container &events, TraceContainer &trace)
Trace generation for the MerkleCheck gadget. It handles both READ and WRITE MerkleCheck events....
void process_permutation(const simulation::EventEmitterInterface< simulation::Poseidon2PermutationEvent >::Container &perm_events, TraceContainer &trace)
ExecutionIdManager execution_id_manager
const std::vector< MemoryValue > data
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
size_t LLVMFuzzerCustomMutator(uint8_t *data, size_t size, size_t max_size, unsigned int seed)
std::pair< uint8_t *, size_t > msgpack_encode_buffer(auto &&obj, uint8_t *scratch_buf=nullptr, size_t scratch_size=0)
crypto::Poseidon2< crypto::Poseidon2Bn254ScalarFieldParams > poseidon2
FF unconstrained_root_from_path(const FF &leaf_value, const uint64_t leaf_index, std::span< const FF > path)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
unsigned __int128 uint128_t