Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
bb::stdlib::recursion::PairingPoints< Curve > Struct Template Reference

An object storing two EC points that represent the inputs to a pairing check. More...

#include <pairing_points.hpp>

Public Types

using Builder = typename Curve::Builder
 
using Group = Curve::Group
 
using Fq = Curve::BaseField
 
using Fr = Curve::ScalarField
 

Public Member Functions

GroupP0 ()
 
GroupP1 ()
 
const GroupP0 () const
 
const GroupP1 () const
 
bool is_populated () const
 
bool is_default () const
 
 PairingPoints ()=default
 
 PairingPoints (const Group &p0, const Group &p1)
 
auto begin ()
 
auto end ()
 
auto begin () const
 
auto end () const
 
void aggregate (PairingPoints const &other)
 Aggregate another PairingPoints into this one via random linear combination.
 
uint32_t set_public (Builder *ctx=nullptr)
 Set the witness indices for the pairing points to public.
 
void fix_witness ()
 Record the witness values of pairing points' coordinates in the selectors.
 
bool check () const
 Perform native pairing check on the witness values.
 

Static Public Member Functions

static PairingPoints reconstruct_from_public (const std::span< const stdlib::field_t< Builder >, PUBLIC_INPUTS_SIZE > &limbs)
 Reconstruct PairingPoints from public input limbs.
 
static PairingPoints aggregate_multiple (std::vector< PairingPoints > &pairing_points, bool handle_edge_cases=true)
 Aggregate multiple PairingPoints using random linear combination.
 
static uint32_t set_default_to_public (Builder *builder)
 Set the witness indices for the default (infinity) pairing points to public.
 
static PairingPoints construct_default ()
 Construct default pairing points (both at infinity).
 

Public Attributes

uint32_t tag_index = 0
 

Static Public Attributes

static constexpr size_t PUBLIC_INPUTS_SIZE = PAIRING_POINTS_SIZE
 

Private Attributes

std::array< Group, 2 > _points
 
bool has_data_ = false
 
bool is_default_ = false
 

Detailed Description

template<typename Curve>
struct bb::stdlib::recursion::PairingPoints< Curve >

An object storing two EC points that represent the inputs to a pairing check.

The points may represent the output of a single partial recursive verification or the linear combination of multiple sets of pairing points.

Template Parameters
Builder_

Definition at line 26 of file pairing_points.hpp.

Member Typedef Documentation

◆ Builder

template<typename Curve >
using bb::stdlib::recursion::PairingPoints< Curve >::Builder = typename Curve::Builder

Definition at line 27 of file pairing_points.hpp.

◆ Fq

Definition at line 29 of file pairing_points.hpp.

◆ Fr

Definition at line 30 of file pairing_points.hpp.

◆ Group

template<typename Curve >
using bb::stdlib::recursion::PairingPoints< Curve >::Group = Curve::Group

Definition at line 28 of file pairing_points.hpp.

Constructor & Destructor Documentation

◆ PairingPoints() [1/2]

template<typename Curve >
bb::stdlib::recursion::PairingPoints< Curve >::PairingPoints ( )
default

◆ PairingPoints() [2/2]

template<typename Curve >
bb::stdlib::recursion::PairingPoints< Curve >::PairingPoints ( const Group p0,
const Group p1 
)
inline

Definition at line 47 of file pairing_points.hpp.

Member Function Documentation

◆ aggregate()

template<typename Curve >
void bb::stdlib::recursion::PairingPoints< Curve >::aggregate ( PairingPoints< Curve > const &  other)
inline

Aggregate another PairingPoints into this one via random linear combination.

Computes: this = this + r · other, where r is a 128-bit Fiat-Shamir challenge depending on both sets of points. If this is unpopulated (default-constructed), simply copies other.

Parameters
otherThe PairingPoints to aggregate (must be populated).

Definition at line 174 of file pairing_points.hpp.

◆ aggregate_multiple()

template<typename Curve >
static PairingPoints bb::stdlib::recursion::PairingPoints< Curve >::aggregate_multiple ( std::vector< PairingPoints< Curve > > &  pairing_points,
bool  handle_edge_cases = true 
)
inlinestatic

Aggregate multiple PairingPoints using random linear combination.

Computes: P_agg = P₀ + r₁·P₁ + r₂·P₂ + ... + rₙ₋₁·Pₙ₋₁ where r₁,...,rₙ₋₁ are 128-bit challenges depending on all input points.

Parameters
pairing_pointsVector of pairing points to aggregate (requires size > 1)
handle_edge_casesIf true, batch_mul handles edge cases where points might be zero or challenges might cause numerical issues. If false, assumes all points are non-zero and non-colliding (saves circuit gates).

Safety of handle_edge_cases=false:

  • Safe when all points are verifier-computed (deterministic, won't collide)
  • Safe even with untrusted public input points, as the random challenges make collisions negligible
  • Provides significant circuit gate savings in recursive verification

Definition at line 96 of file pairing_points.hpp.

◆ begin() [1/2]

template<typename Curve >
auto bb::stdlib::recursion::PairingPoints< Curve >::begin ( )
inline

Definition at line 76 of file pairing_points.hpp.

◆ begin() [2/2]

template<typename Curve >
auto bb::stdlib::recursion::PairingPoints< Curve >::begin ( ) const
inline

Definition at line 78 of file pairing_points.hpp.

◆ check()

template<typename Curve >
bool bb::stdlib::recursion::PairingPoints< Curve >::check ( ) const
inline

Perform native pairing check on the witness values.

Extracts native values from P0 and P1 and performs the pairing verification.

Definition at line 254 of file pairing_points.hpp.

◆ construct_default()

template<typename Curve >
static PairingPoints bb::stdlib::recursion::PairingPoints< Curve >::construct_default ( )
inlinestatic

Construct default pairing points (both at infinity).

The point at infinity trivially satisfies the pairing equation: e(∞, Q) = 1.

Definition at line 285 of file pairing_points.hpp.

◆ end() [1/2]

template<typename Curve >
auto bb::stdlib::recursion::PairingPoints< Curve >::end ( )
inline

Definition at line 77 of file pairing_points.hpp.

◆ end() [2/2]

template<typename Curve >
auto bb::stdlib::recursion::PairingPoints< Curve >::end ( ) const
inline

Definition at line 79 of file pairing_points.hpp.

◆ fix_witness()

template<typename Curve >
void bb::stdlib::recursion::PairingPoints< Curve >::fix_witness ( )
inline

Record the witness values of pairing points' coordinates in the selectors.

Definition at line 243 of file pairing_points.hpp.

◆ is_default()

template<typename Curve >
bool bb::stdlib::recursion::PairingPoints< Curve >::is_default ( ) const
inline

Definition at line 43 of file pairing_points.hpp.

◆ is_populated()

template<typename Curve >
bool bb::stdlib::recursion::PairingPoints< Curve >::is_populated ( ) const
inline

Definition at line 42 of file pairing_points.hpp.

◆ P0() [1/2]

template<typename Curve >
Group & bb::stdlib::recursion::PairingPoints< Curve >::P0 ( )
inline

Definition at line 37 of file pairing_points.hpp.

◆ P0() [2/2]

template<typename Curve >
const Group & bb::stdlib::recursion::PairingPoints< Curve >::P0 ( ) const
inline

Definition at line 39 of file pairing_points.hpp.

◆ P1() [1/2]

template<typename Curve >
Group & bb::stdlib::recursion::PairingPoints< Curve >::P1 ( )
inline

Definition at line 38 of file pairing_points.hpp.

◆ P1() [2/2]

template<typename Curve >
const Group & bb::stdlib::recursion::PairingPoints< Curve >::P1 ( ) const
inline

Definition at line 40 of file pairing_points.hpp.

◆ reconstruct_from_public()

template<typename Curve >
static PairingPoints bb::stdlib::recursion::PairingPoints< Curve >::reconstruct_from_public ( const std::span< const stdlib::field_t< Builder >, PUBLIC_INPUTS_SIZE > &  limbs)
inlinestatic

Reconstruct PairingPoints from public input limbs.

Definition at line 65 of file pairing_points.hpp.

◆ set_default_to_public()

template<typename Curve >
static uint32_t bb::stdlib::recursion::PairingPoints< Curve >::set_default_to_public ( Builder builder)
inlinestatic

Set the witness indices for the default (infinity) pairing points to public.

Optimized version that directly sets zero Fr limb values as public inputs, avoiding expensive bigfield operations. The default pairing points are at infinity, which trivially satisfies the pairing equation

Returns
uint32_t The index into the public inputs array at which the representation is stored

Definition at line 268 of file pairing_points.hpp.

◆ set_public()

template<typename Curve >
uint32_t bb::stdlib::recursion::PairingPoints< Curve >::set_public ( Builder ctx = nullptr)
inline

Set the witness indices for the pairing points to public.

For default (infinity) pairing points, uses set_default_to_public which directly adds zero limbs as public inputs, bypassing bigfield::set_public() which cannot handle constant-coordinate infinity points.

Parameters
ctxOptional builder context; required for default pairing points which have no circuit context.
Returns
uint32_t The index into the public inputs array at which the representation is stored

Definition at line 225 of file pairing_points.hpp.

Member Data Documentation

◆ _points

template<typename Curve >
std::array<Group, 2> bb::stdlib::recursion::PairingPoints< Curve >::_points
private

Definition at line 295 of file pairing_points.hpp.

◆ has_data_

template<typename Curve >
bool bb::stdlib::recursion::PairingPoints< Curve >::has_data_ = false
private

Definition at line 296 of file pairing_points.hpp.

◆ is_default_

template<typename Curve >
bool bb::stdlib::recursion::PairingPoints< Curve >::is_default_ = false
private

Definition at line 297 of file pairing_points.hpp.

◆ PUBLIC_INPUTS_SIZE

template<typename Curve >
constexpr size_t bb::stdlib::recursion::PairingPoints< Curve >::PUBLIC_INPUTS_SIZE = PAIRING_POINTS_SIZE
staticconstexpr

Definition at line 33 of file pairing_points.hpp.

◆ tag_index

template<typename Curve >
uint32_t bb::stdlib::recursion::PairingPoints< Curve >::tag_index = 0

Definition at line 35 of file pairing_points.hpp.


The documentation for this struct was generated from the following file: