5#include <fuzzer/FuzzedDataProvider.h>
67 fuzz_info(
"Should throw: leaf index is too large, leaf index: ",
82 if (expected_root != input.
root) {
83 fuzz_info(
"Should throw: root does not match expected root");
97 msgpack::unpack((
reinterpret_cast<const char*
>(
data)), size).get().convert(input);
98 }
catch (
const std::exception& e) {
108 int choice = dist(rng);
110 auto random_field = [&rng]() ->
FF {
112 return FF(dist(rng), dist(rng), dist(rng), dist(rng));
153 size_t index = dist(rng);
162 if (mutated_data_size > max_size) {
163 delete[] mutated_data;
167 memcpy(
data, mutated_data, mutated_data_size);
168 delete[] mutated_data;
170 return mutated_data_size;
177 msgpack::unpack((
reinterpret_cast<const char*
>(
data)), size).get().convert(input);
178 }
catch (
const std::exception& e) {
197 bool will_throw = predict_if_will_throw(input);
215 }
catch (std::exception& e) {
225 throw std::runtime_error(
"Expected exception was not thrown");
228 if (new_root.has_value()) {
231 if (new_root.value() != expected_new_root) {
232 throw std::runtime_error(
"New root does not match expected root");
236 if (poseidon2_perm_mem_emitter.
get_events().size() > 0) {
237 throw std::runtime_error(
"Poseidon2 permutation memory events were emitted");
246 poseidon2_trace_builder.process_hash(poseidon2_hash_emitter.
dump_events(),
trace);
251 if (getenv(
"AVM_DEBUG") !=
nullptr) {
252 info(
"Debugging trace:");
257 check_relation<merkle_check_rel>(
trace);
258 check_all_interactions<MerkleCheckTraceBuilder>(
trace);
#define DOM_SEP__MERKLE_HASH
EventEmitter< simulation::MerkleCheckEvent > merkle_check_emitter
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)
Processes the permutation events for the Poseidon2 permutation function. It populates the columns for...
Native Poseidon2 hash function implementation.
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)
AVM range check gadget for witness generation.
crypto::Poseidon2< crypto::Poseidon2Bn254ScalarFieldParams > poseidon2
FF unconstrained_root_from_path(uint64_t domain_separator, 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