Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
gt.fuzzer.cpp
Go to the documentation of this file.
1#include <cassert>
2#include <cstdint>
3#include <fuzzer/FuzzedDataProvider.h>
4
25
26using namespace bb::avm2::simulation;
27using namespace bb::avm2::tracegen;
28using namespace bb::avm2::constraining;
29using namespace bb::avm2::fuzzing;
30
31using bb::avm2::FF;
34
37
38extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
39{
41
42 // two uint256 for memory values
43 size_t minimum_size = 64;
44
45 if (size < minimum_size) {
46 return 0;
47 }
48
49 // Fuzzed Data Provider helps with extracting typed data from the raw byte stream.
50 FuzzedDataProvider fuzzed_data(data, size);
51
52 MemoryValue a = read_mem_value(fuzzed_data);
53 MemoryValue b = read_mem_value(fuzzed_data);
54
55 if (a.get_tag() != b.get_tag()) {
56 // For internal use of greater than, tags should match.
57 b = MemoryValue::from_tag_truncating(a.get_tag(), b.as_ff());
58 }
59
60 // Set up gadgets and event emitters
64
67 GreaterThan greater_than(field_gt, range_check, greater_than_emitter);
68
69 // Execute the greater than operation
70 bool result = false;
71 try {
72 result = greater_than.gt(a, b);
73 // info("A: ", a.to_string(), ", B: ", b.to_string(), ", A > B: ", result);
74 assert(result == (uint256_t(a.as_ff()) > uint256_t(b.as_ff())));
75 } catch (const std::exception& e) {
76 // If any exception occurs, we cannot proceed further.
77 return 0;
78 }
79
80 // Initialize trace container
82
83 // Process the events to build the trace
87
90 gt_builder.process(greater_than_emitter.dump_events(), trace);
91
92 if (getenv("AVM_DEBUG") != nullptr) {
93 info("Debugging trace:");
95 debugger.run();
96 }
97
98 // Check the relation
99 check_relation<gt_rel>(trace);
100 check_relation<ff_gt_rel>(trace);
101 check_all_interactions<GreaterThanTraceBuilder>(trace);
102 check_all_interactions<FieldGreaterThanTraceBuilder>(trace);
103
104 return 0;
105}
DeduplicatingEventEmitter< FieldGreaterThanEvent > field_gt_emitter
GreaterThan greater_than
FieldGreaterThan field_gt
DeduplicatingEventEmitter< RangeCheckEvent > range_check_emitter
void run(uint32_t starting_row=0)
Definition debugger.cpp:76
static TaggedValue from_tag_truncating(ValueTag tag, FF value)
EventEmitter< Event >::Container dump_events()
bool gt(const FF &a, const FF &b) override
Definition gt.cpp:11
void process(const simulation::EventEmitterInterface< simulation::FieldGreaterThanEvent >::Container &events, TraceContainer &trace)
void process(const simulation::EventEmitterInterface< simulation::GreaterThanEvent >::Container &events, TraceContainer &trace)
Definition gt_trace.cpp:11
void process(const simulation::EventEmitterInterface< simulation::RangeCheckEvent >::Container &events, TraceContainer &trace)
void info(Args... args)
Definition log.hpp:75
RangeCheckTraceBuilder range_check_builder
Definition alu.test.cpp:121
FieldGreaterThanTraceBuilder field_gt_builder
Definition alu.test.cpp:122
GreaterThanTraceBuilder gt_builder
Definition alu.test.cpp:123
const std::vector< MemoryValue > data
TestTraceContainer trace
FF a
FF b
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
Definition gt.fuzzer.cpp:38
MemoryValue read_mem_value(FuzzedDataProvider &fdp)
Read a MemoryValue from the fuzzed data provider.
AvmFlavorSettings::FF FF
Definition field.hpp:10