4#include <fuzzer/FuzzedDataProvider.h>
57 for (
size_t i = 0; i < 4; ++i) {
61 return avm2::Fq(limbs[0], limbs[1], limbs[2], limbs[3]);
68 switch (choose_mutation) {
72 uint32_t
offset =
static_cast<uint32_t
>(offset_dist(rng));
140 int choice = dist(rng);
145 avm2::Fq rand_scalar = random_fq_scalar(rng);
168 std::swap(input.
p, input.
q);
175 size_t addr_index = addr_dist(rng);
176 input.
addresses[addr_index] = mutate_memory_address(input.
addresses[addr_index], rng);
198 info(
"Input size too small");
241 }
catch (std::exception& e) {
258 "Result infinity flag mismatch");
263 { avm2::Column::execution_context_id, 0 },
265 { avm2::Column::execution_register_0_, point_p.
x() },
266 { avm2::Column::execution_register_1_, point_p.
y() },
267 { avm2::Column::execution_register_2_, point_p.
is_infinity() ?
FF(1) :
FF(0) },
269 { avm2::Column::execution_register_3_, point_q.
x() },
270 { avm2::Column::execution_register_4_, point_q.
y() },
271 { avm2::Column::execution_register_5_, point_q.
is_infinity() ?
FF(1) :
FF(0) },
273 { avm2::Column::execution_rop_6_, input.
addresses[6] },
274 { avm2::Column::execution_sel_exec_dispatch_ecc_add, 1 },
275 { avm2::Column::execution_sel_opcode_error, error ? 1 : 0 },
293 if (getenv(
"AVM_DEBUG") !=
nullptr) {
294 info(
"Debugging trace:");
299 check_relation<ecc_rel>(
trace);
300 check_all_interactions<EccTraceBuilder>(
trace);
301 check_interaction<ExecutionTraceBuilder, bb::avm2::perm_execution_dispatch_to_ecc_add_settings>(
trace);
DeduplicatingEventEmitter< FieldGreaterThanEvent > field_gt_emitter
FieldGreaterThan field_gt
DeduplicatingEventEmitter< RangeCheckEvent > range_check_emitter
#define BB_ASSERT(expression,...)
void run(uint32_t starting_row=0)
static const StandardAffinePoint & infinity()
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 process(const simulation::EventEmitterInterface< simulation::FieldGreaterThanEvent >::Container &events, TraceContainer &trace)
void process(const simulation::EventEmitterInterface< simulation::GreaterThanEvent >::Container &events, TraceContainer &trace)
void process_misc(TraceContainer &trace, const uint32_t num_rows=MAX_AVM_TRACE_SIZE)
void process(const simulation::EventEmitterInterface< simulation::RangeCheckEvent >::Container &events, TraceContainer &trace)
void process(const simulation::EventEmitterInterface< simulation::ToRadixEvent >::Container &events, TraceContainer &trace)
bool get(std::vector< uint8_t > const &key, std::vector< uint8_t > &value)
constexpr bool is_point_at_infinity() const noexcept
static affine_element serialize_from_buffer(const uint8_t *buffer, bool write_x_first=false)
Restore point from a buffer.
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.
constexpr affine_element set_infinity() const noexcept
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)
uint8_t buffer[RANDOM_BUFFER_SIZE]
StandardAffinePoint< AvmFlavorSettings::EmbeddedCurve::AffineElement > EmbeddedCurvePoint
AvmFlavorSettings::G1::Fq Fq
grumpkin::g1::affine_element AffinePoint
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept