Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
biggroup.fuzzer.hpp File Reference

Differential fuzzer for biggroup elliptic curve operations. More...

Go to the source code of this file.

Classes

class  BigGroupBase< Builder, BigGroupType, _use_bigfield, BigfieldScalar >
 The class parametrizing BigGroup fuzzing instructions, execution, etc. More...
 
class  BigGroupBase< Builder, BigGroupType, _use_bigfield, BigfieldScalar >::Instruction
 
struct  BigGroupBase< Builder, BigGroupType, _use_bigfield, BigfieldScalar >::Instruction::Element
 
struct  BigGroupBase< Builder, BigGroupType, _use_bigfield, BigfieldScalar >::Instruction::OneArg
 
struct  BigGroupBase< Builder, BigGroupType, _use_bigfield, BigfieldScalar >::Instruction::TwoArgs
 
struct  BigGroupBase< Builder, BigGroupType, _use_bigfield, BigfieldScalar >::Instruction::MulArgs
 
struct  BigGroupBase< Builder, BigGroupType, _use_bigfield, BigfieldScalar >::Instruction::ThreeArgs
 
struct  BigGroupBase< Builder, BigGroupType, _use_bigfield, BigfieldScalar >::Instruction::FourArgs
 
struct  BigGroupBase< Builder, BigGroupType, _use_bigfield, BigfieldScalar >::Instruction::BatchMulArgs
 
struct  BigGroupBase< Builder, BigGroupType, _use_bigfield, BigfieldScalar >::Instruction::ArgumentContents
 
class  BigGroupBase< Builder, BigGroupType, _use_bigfield, BigfieldScalar >::ArgSizes
 
class  BigGroupBase< Builder, BigGroupType, _use_bigfield, BigfieldScalar >::InstructionWeights
 Optional subclass that governs limits on the use of certain instructions, since some of them can be too slow. More...
 
class  BigGroupBase< Builder, BigGroupType, _use_bigfield, BigfieldScalar >::Parser
 Parser class handles the parsing and writing the instructions back to data buffer. More...
 
class  BigGroupBase< Builder, BigGroupType, _use_bigfield, BigfieldScalar >::ExecutionHandler
 This class implements the execution of biggroup with an oracle to detect discrepancies. More...
 

Macros

#define HAVOC_TESTING
 
#define PUT_RANDOM_BYTE_IF_LUCKY(variable)
 

Typedefs

template<typename Builder >
using BigGroupBN254Base = BigGroupBase< Builder, bb::stdlib::bn254< Builder >, false >
 
template<typename Builder >
using BigGroupBN254BFBase = BigGroupBase< Builder, bb::stdlib::bn254< Builder >, true, bb::stdlib::bigfield< Builder, bb::Bn254FrParams > >
 
template<typename Builder >
using BigGroupSecp256k1Base = BigGroupBase< Builder, bb::stdlib::secp256k1< Builder >, true >
 
template<typename Builder >
using BigGroupSecp256r1Base = BigGroupBase< Builder, bb::stdlib::secp256r1< Builder >, true >
 

Enumerations

enum class  SpecialScalarValue : uint8_t {
  One = 0 , MinusOne , SquareRootOfOne , InverseSquareRootOfOne ,
  RootOfUnity13 , Two , HalfModulus , Zero ,
  COUNT , One = 0 , MinusOne , SquareRootOfOne ,
  InverseSquareRootOfOne , RootOfUnity13 , Two , HalfModulus ,
  Zero , COUNT
}
 Special scalar field values used for mutation testing. More...
 

Functions

size_t LLVMFuzzerMutate (uint8_t *Data, size_t Size, size_t MaxSize)
 
template<typename FF >
FF get_special_scalar_value (SpecialScalarValue type)
 Generate a special scalar field value for testing.
 
int LLVMFuzzerInitialize (int *argc, char ***argv)
 
size_t LLVMFuzzerTestOneInput (const uint8_t *Data, size_t Size)
 Fuzzer entry function.
 

Variables

bool circuit_should_fail = false
 
FastRandom VarianceRNG (0)
 
constexpr size_t MINIMUM_MUL_ELEMENTS = 0
 
constexpr size_t MAXIMUM_MUL_ELEMENTS = 8
 
constexpr uint8_t SPECIAL_VALUE_COUNT_NO_ZERO = static_cast<uint8_t>(SpecialScalarValue::Zero)
 
constexpr uint8_t SPECIAL_VALUE_COUNT = static_cast<uint8_t>(SpecialScalarValue::COUNT)
 

Detailed Description

Differential fuzzer for biggroup elliptic curve operations.

Implements an instruction-based differential fuzzer that validates the biggroup implementation by executing random sequences of operations both in-circuit (using biggroup) and natively, then comparing the results. The architecture is as follows:

┌─────────────┐ │ Fuzzer Input│ │ (raw bytes) │ └──────┬──────┘ │ ├──> Parser ──> Instruction Sequence │ v ExecutionHandler (maintains parallel state): ┌─────────────────────────────────────────┐ │ Native: GroupElement + ScalarField │ (ground truth) │ Circuit: biggroup + big_scalar │ └─────────────────────────────────────────┘ │ ├──> Execute each instruction in both representations │ v Verify: biggroup.get_value() == native_result CircuitChecker::check(circuit)

Definition in file biggroup.fuzzer.hpp.

Macro Definition Documentation

◆ HAVOC_TESTING

#define HAVOC_TESTING

Definition at line 118 of file biggroup.fuzzer.hpp.

◆ PUT_RANDOM_BYTE_IF_LUCKY

#define PUT_RANDOM_BYTE_IF_LUCKY (   variable)
Value:
if (rng.next() & 1) { \
variable = rng.next() & 0xff; \
}

Typedef Documentation

◆ BigGroupBN254Base

template<typename Builder >
using BigGroupBN254Base = BigGroupBase<Builder, bb::stdlib::bn254<Builder>, false>

Definition at line 1754 of file biggroup.fuzzer.hpp.

◆ BigGroupBN254BFBase

◆ BigGroupSecp256k1Base

Definition at line 1765 of file biggroup.fuzzer.hpp.

◆ BigGroupSecp256r1Base

Definition at line 1768 of file biggroup.fuzzer.hpp.

Enumeration Type Documentation

◆ SpecialScalarValue

enum class SpecialScalarValue : uint8_t
strong

Special scalar field values used for mutation testing.

Note
: Zero is placed LAST to allow easy exclusion:
  • Use rng.next() % SPECIAL_VALUE_COUNT for all values
  • Use rng.next() % SPECIAL_VALUE_COUNT_NO_ZERO for values excluding Zero (One through HalfModulus)
Enumerator
One 
MinusOne 
SquareRootOfOne 
InverseSquareRootOfOne 
RootOfUnity13 
Two 
HalfModulus 
Zero 
COUNT 
One 
MinusOne 
SquareRootOfOne 
InverseSquareRootOfOne 
RootOfUnity13 
Two 
HalfModulus 
Zero 
COUNT 

Definition at line 146 of file biggroup.fuzzer.hpp.

Function Documentation

◆ get_special_scalar_value()

template<typename FF >
FF get_special_scalar_value ( SpecialScalarValue  type)
inline

Generate a special scalar field value for testing.

Template Parameters
FFField type (e.g., ScalarField)
Parameters
typeWhich special value to generate
Returns
The special field element

Definition at line 170 of file biggroup.fuzzer.hpp.

◆ LLVMFuzzerInitialize()

int LLVMFuzzerInitialize ( int *  argc,
char ***  argv 
)

This is used, when we need to determine the probabilities of various mutations. Left here for posterity

Write mutation settings to log

Definition at line 1772 of file biggroup.fuzzer.hpp.

◆ LLVMFuzzerMutate()

size_t LLVMFuzzerMutate ( uint8_t *  Data,
size_t  Size,
size_t  MaxSize 
)

◆ LLVMFuzzerTestOneInput()

size_t LLVMFuzzerTestOneInput ( const uint8_t *  Data,
size_t  Size 
)

Fuzzer entry function.

Definition at line 1895 of file biggroup.fuzzer.hpp.

Variable Documentation

◆ circuit_should_fail

bool circuit_should_fail = false

Definition at line 122 of file biggroup.fuzzer.hpp.

◆ MAXIMUM_MUL_ELEMENTS

constexpr size_t MAXIMUM_MUL_ELEMENTS = 8
constexpr

Definition at line 134 of file biggroup.fuzzer.hpp.

◆ MINIMUM_MUL_ELEMENTS

constexpr size_t MINIMUM_MUL_ELEMENTS = 0
constexpr

Definition at line 133 of file biggroup.fuzzer.hpp.

◆ SPECIAL_VALUE_COUNT

constexpr uint8_t SPECIAL_VALUE_COUNT = static_cast<uint8_t>(SpecialScalarValue::COUNT)
constexpr

Definition at line 162 of file biggroup.fuzzer.hpp.

◆ SPECIAL_VALUE_COUNT_NO_ZERO

constexpr uint8_t SPECIAL_VALUE_COUNT_NO_ZERO = static_cast<uint8_t>(SpecialScalarValue::Zero)
constexpr

Definition at line 159 of file biggroup.fuzzer.hpp.

◆ VarianceRNG

FastRandom VarianceRNG(0) ( )