4#include <fuzzer/FuzzedDataProvider.h>
59 for (
size_t i = 0; i < 4; ++i) {
63 return avm2::Fq(limbs[0], limbs[1], limbs[2], limbs[3]);
70 switch (choose_mutation) {
74 uint32_t
offset =
static_cast<uint32_t
>(offset_dist(rng));
147 int choice = dist(rng);
152 avm2::Fq rand_scalar = random_fq_scalar(rng);
176 std::swap(input.
p, input.
q);
186 input.
scalar = random_fq_scalar(rng);
191 input.
scalar = avm2::Fq::one();
198 size_t addr_index = addr_dist(rng);
199 input.
addresses[addr_index] = mutate_memory_address(input.
addresses[addr_index], rng);
221 info(
"Input size too small");
265 }
catch (std::exception& e) {
289 "Mul result infinity flag mismatch");
294 { avm2::Column::execution_context_id, 0 },
296 { avm2::Column::execution_register_0_, point_p.
x() },
297 { avm2::Column::execution_register_1_, point_p.
y() },
298 { avm2::Column::execution_register_2_, point_p.
is_infinity() ?
FF(1) :
FF(0) },
300 { avm2::Column::execution_register_3_, point_q.
x() },
301 { avm2::Column::execution_register_4_, point_q.
y() },
302 { avm2::Column::execution_register_5_, point_q.
is_infinity() ?
FF(1) :
FF(0) },
304 { avm2::Column::execution_rop_6_, input.
addresses[6] },
305 { avm2::Column::execution_sel_exec_dispatch_ecc_add, 1 },
306 { avm2::Column::execution_sel_opcode_error, error ? 1 : 0 },
325 if (getenv(
"AVM_DEBUG") !=
nullptr) {
326 info(
"Debugging trace:");
331 check_relation<ecc_rel>(
trace);
332 check_relation<scalar_mul_rel>(
trace);
333 check_all_interactions<EccTraceBuilder>(
trace);
334 check_interaction<ExecutionTraceBuilder, bb::avm2::perm_execution_dispatch_to_ecc_add_settings>(
trace);
#define BB_ASSERT(expression,...)
FieldGreaterThan field_gt
EventEmitter< simulation::FieldGreaterThanEvent > field_gt_emitter
EventEmitter< simulation::RangeCheckEvent > range_check_emitter
void run(uint32_t starting_row=0)
constexpr bool is_infinity() const noexcept
constexpr const BaseField & x() const noexcept
constexpr const BaseField & y() const noexcept
static TaggedValue from_tag(ValueTag tag, FF value)
EventEmitter< Event >::Container dump_events()
std::unique_ptr< MemoryInterface > make_memory(uint16_t space_id) override
void set(MemoryAddress index, MemoryValue value) override
const MemoryValue & get(MemoryAddress index) const override
void process(const simulation::EventEmitterInterface< simulation::FieldGreaterThanEvent >::Container &events, TraceContainer &trace)
Processes FieldGreaterThanEvent events and generates trace rows for the ff_gt gadget.
void process(const simulation::EventEmitterInterface< simulation::GreaterThanEvent >::Container &events, TraceContainer &trace)
Process the greater-than events and populate the relevant columns in the trace.
void process_misc(TraceContainer &trace, const uint32_t num_rows=PRECOMPUTED_TRACE_SIZE)
void process(const simulation::EventEmitterInterface< simulation::RangeCheckEvent >::Container &events, TraceContainer &trace)
Processes range check events and populates the trace with decomposed value columns.
void process(const simulation::EventEmitterInterface< simulation::ToRadixEvent >::Container &events, TraceContainer &trace)
Processes the non-memory aware to_radix subtrace ingesting ToRadixEvent events. The populated number ...
static affine_element serialize_from_buffer(const uint8_t *buffer, bool write_x_first=false)
Restore point from a buffer.
static constexpr affine_element infinity()
constexpr bool on_curve() const noexcept
static constexpr affine_element one() noexcept
static void serialize_to_buffer(const affine_element &value, uint8_t *buffer, bool write_x_first=false)
Serialize the point to the given buffer.
RangeCheckTraceBuilder range_check_builder
PrecomputedTraceBuilder precomputed_builder
FieldGreaterThanTraceBuilder field_gt_builder
GreaterThanTraceBuilder gt_builder
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::unique_ptr< uint8_t[]> buffer
AVM range check gadget for witness generation.
StandardAffinePoint< AvmFlavorSettings::EmbeddedCurve::AffineElement > EmbeddedCurvePoint
AvmFlavorSettings::G1::Fq Fq
grumpkin::g1::affine_element AffinePoint
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept