47static constexpr size_t SINGLE_CHUNK_SIZE = 129;
57 std::vector<Fr> elements;
60 if (size < SINGLE_CHUNK_SIZE) {
65 size_t num_elements = size / SINGLE_CHUNK_SIZE;
79 size_t fieldvm_data_size = size - num_elements;
80 if (fieldvm_data_size > 0) {
81 field_vm.
run(
data, fieldvm_data_size);
85 elements.reserve(num_elements);
86 for (
size_t i = 0; i < num_elements; ++i) {
87 uint8_t index_byte =
data[fieldvm_data_size + i];
89 size_t field_index = index_byte % 32;
93 elements.emplace_back(element);
113 circuit_inputs.reserve(inputs.size());
116 for (
const auto& input : inputs) {
127 if (circuit_result.get_value() != native_result) {
137 if (!circuit_check) {
145 }
catch (
const std::exception& e) {
165 circuit_inputs.reserve(inputs.size());
168 for (
const auto& input : inputs) {
179 if (circuit_result.get_value() != native_result) {
189 if (!circuit_check) {
197 }
catch (
const std::exception& e) {
216 bool is_poseidon2 = Data[0] & 0x01;
222 if (field_elements.empty()) {
227 bool test_result = is_poseidon2 ? test_poseidon2_circuit<UltraCircuitBuilder>(field_elements)
228 : test_pedersen_circuit<UltraCircuitBuilder>(field_elements);
static bool check(const Builder &circuit)
Check the witness satisifies the circuit.
static FF hash(const std::vector< FF > &input)
Hashes a vector of field elements.
Performs pedersen hashes!
static Fq hash(const std::vector< Fq > &inputs, GeneratorContext context={})
Given a vector of fields, generate a pedersen hash using generators from context.
static field_ct hash(const std::vector< field_ct > &in, GeneratorContext context={})
const std::vector< FF > data
Field arithmetic fuzzer for testing cryptographic field operations.
bn254::witness_ct witness_ct
stdlib::field_t< Builder > field_ct
pedersen_hash_base< curve::Grumpkin > pedersen_hash
Entry point for Barretenberg command-line interface.
field< Bn254FrParams > fr
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size)
Main fuzzer entry point.
bool test_poseidon2_circuit(const std::vector< Fr > &inputs)
Test Poseidon2 circuit with specified builder type.
std::vector< Fr > parse_input_and_generate_elements(const uint8_t *data, size_t size)
Parse input structure and generate field elements using FieldVM.
bool test_pedersen_circuit(const std::vector< Fr > &inputs)
Test Pedersen circuit with specified builder type.
Virtual machine for field arithmetic operations.
size_t run(const unsigned char *Data, size_t Size, bool reset_steps=true)
Run the VM on input data.
std::array< Field, INTERNAL_STATE_SIZE > field_internal_state
Internal state array of field elements.
VMSettings settings
VM settings controlling which operations are enabled.
bool enable_inv
Enable INV operations.
bool enable_batch_invert
Enable BATCH_INVERT operations.
bool enable_div
Enable DIV operations.
bool enable_div_assign
Enable DIV_ASSIGN operations.
bool enable_sqrt
Enable SQRT operations.
bool enable_pow
Enable POW operations.