|
Barretenberg
The ZK-SNARK library at the core of Aztec
|
Class responsible for computation of the batched multilinear polynomials required by the Gemini protocol. More...
#include <gemini.hpp>
Public Member Functions | |
| PolynomialBatcher (const size_t full_batched_size) | |
| bool | has_unshifted () const |
| bool | has_to_be_shifted_by_one () const |
| bool | has_interleaved () const |
| void | set_unshifted (RefVector< Polynomial > polynomials) |
| void | set_to_be_shifted_by_one (RefVector< Polynomial > polynomials) |
| void | set_interleaved (RefVector< Polynomial > results, std::vector< RefVector< Polynomial > > groups) |
| Polynomial | compute_batched (const Fr &challenge) |
| Compute batched polynomial A₀ = F + G/X as the linear combination of all polynomials to be opened. | |
| std::pair< Polynomial, Polynomial > | compute_partially_evaluated_batch_polynomials (const Fr &r_challenge) |
| Compute partially evaluated batched polynomials A₀(X, r) = A₀₊ = F + G/r, A₀(X, -r) = A₀₋ = F - G/r. | |
| std::pair< Polynomial, Polynomial > | compute_partially_evaluated_interleaved_polynomial (const Fr &r_challenge) |
| Compute the partially evaluated polynomials P₊(X, r) and P₋(X, -r) | |
| size_t | get_group_size () |
Public Attributes | |
| RefVector< Polynomial > | unshifted |
| RefVector< Polynomial > | to_be_shifted_by_one |
| RefVector< Polynomial > | interleaved |
| std::vector< RefVector< Polynomial > > | groups_to_be_interleaved |
Private Attributes | |
| size_t | full_batched_size = 0 |
| Polynomial | batched_unshifted |
| Polynomial | batched_to_be_shifted_by_one |
| Polynomial | batched_interleaved |
| std::vector< Polynomial > | batched_group |
Class responsible for computation of the batched multilinear polynomials required by the Gemini protocol.
Opening multivariate polynomials using Gemini requires the computation of batched polynomials. The first, here denoted A₀, is a linear combination of all polynomials to be opened. If we denote the linear combinations (based on challenge rho) of the unshifted and to-be-shifted-by-1 polynomials by F and G respectively, then A₀ = F + G/X. This polynomial is "folded" in Gemini to produce d-1 univariate polynomials Fold_i, i = 1, ..., d-1. The second and third are the partially evaluated batched polynomials A₀₊ = F + G/r, and A₀₋ = F - G/r. These are required in order to prove the opening of shifted polynomials G_i/X from the commitments to their unshifted counterparts G_i.
Definition at line 126 of file gemini.hpp.
|
inline |
Definition at line 143 of file gemini.hpp.
|
inline |
Compute batched polynomial A₀ = F + G/X as the linear combination of all polynomials to be opened.
| challenge | batching challenge |
Definition at line 173 of file gemini.hpp.
|
inline |
Compute partially evaluated batched polynomials A₀(X, r) = A₀₊ = F + G/r, A₀(X, -r) = A₀₋ = F - G/r.
| r_challenge | partial evaluation challenge |
Definition at line 229 of file gemini.hpp.
|
inline |
Compute the partially evaluated polynomials P₊(X, r) and P₋(X, -r)
If the interleaved polynomials are set, the full partially evaluated identites A₀(r) and A₀(-r) contain the contributions of P₊(r^s) and P₋(r^s) respectively where s is the size of the interleaved group assumed even. This function computes P₊(X) = ∑ r^i Pᵢ(X) and P₋(X) = ∑ (-r)^i Pᵢ(X) where Pᵢ(X) is the i-th polynomial in the batched group.
| r_challenge | partial evaluation challenge |
Definition at line 261 of file gemini.hpp.
|
inline |
Definition at line 278 of file gemini.hpp.
|
inline |
Definition at line 151 of file gemini.hpp.
|
inline |
Definition at line 150 of file gemini.hpp.
|
inline |
Definition at line 149 of file gemini.hpp.
|
inline |
Definition at line 157 of file gemini.hpp.
|
inline |
Definition at line 155 of file gemini.hpp.
|
inline |
Definition at line 154 of file gemini.hpp.
|
private |
Definition at line 135 of file gemini.hpp.
|
private |
Definition at line 132 of file gemini.hpp.
|
private |
Definition at line 131 of file gemini.hpp.
|
private |
Definition at line 130 of file gemini.hpp.
|
private |
Definition at line 128 of file gemini.hpp.
| std::vector<RefVector<Polynomial> > bb::GeminiProver_< Curve >::PolynomialBatcher::groups_to_be_interleaved |
Definition at line 141 of file gemini.hpp.
| RefVector<Polynomial> bb::GeminiProver_< Curve >::PolynomialBatcher::interleaved |
Definition at line 140 of file gemini.hpp.
| RefVector<Polynomial> bb::GeminiProver_< Curve >::PolynomialBatcher::to_be_shifted_by_one |
Definition at line 139 of file gemini.hpp.
| RefVector<Polynomial> bb::GeminiProver_< Curve >::PolynomialBatcher::unshifted |
Definition at line 138 of file gemini.hpp.