TurboPlonk in Findora Introduction Findora's "triple masking" payment uses a variant of TurboPlonk with five wires, twelve selectors, high degrees, and additional polynomial identity constraints. This variant has customized gates for Rescue and boolean testing. The following equations summarize the structure.
q 1 ( X ) ⋅ w 1 ( X ) + q 2 ( X ) ⋅ w 2 ( X ) + q 3 ( X ) ⋅ w 3 ( X ) + q 4 ( X ) ⋅ w 4 ( X ) // linear combination + q m 1 ( X ) ⋅ w 1 ( X ) ⋅ w 2 ( X ) + q m 2 ( X ) ⋅ w 3 ( X ) ⋅ w 4 ( X ) // multiplication (somewhat) + q c ( X ) // constants + P I ( X ) // inputs + q h a s h 1 ( X ) ⋅ ( w 1 ( X ) ) 5 + q h a s h 2 ( X ) ⋅ ( w 2 ( X ) ) 5 + q h a s h 3 ( X ) ⋅ ( w 3 ( X ) ) 5 + q h a s h 4 ( X ) ⋅ ( w 4 ( X ) ) 5 // Rescue non-linear steps = q o ( X ) ⋅ w o ( X ) // output \begin{aligned} ~~~~&q_1(X)\cdot w_1(X) + q_2(X)\cdot w_2(X) + q_3(X)\cdot w_3(X) + q_4(X)\cdot w_4(X)~~~\text{// linear combination}\\ +&q_{m1}(X)\cdot w_1(X)\cdot w_2(X) + q_{m2}(X)\cdot w_3(X)\cdot w_4(X)~~~\text{// multiplication (somewhat)}\\ +&q_c(X)~~~\text{// constants}\\ +&\mathsf{PI}(X)~~~\text{// inputs}\\ +&q_{hash1}(X)\cdot (w_1(X))^5 + q_{hash2}(X)\cdot (w_2(X))^5\\ +&q_{hash3}(X)\cdot (w_3(X))^5 + q_{hash4}(X)\cdot (w_4(X))^5~~~\text{// Rescue non-linear steps}\\ =&q_o(X)\cdot w_o(X)~~~\text{// output} \end{aligned} + + + + + = q 1 ( X ) ⋅ w 1 ( X ) + q 2 ( X ) ⋅ w 2 ( X ) + q 3 ( X ) ⋅ w 3 ( X ) + q 4 ( X ) ⋅ w 4 ( X ) // linear combination q m 1 ( X ) ⋅ w 1 ( X ) ⋅ w 2 ( X ) + q m 2 ( X ) ⋅ w 3 ( X ) ⋅ w 4 ( X ) // multiplication (somewhat) q c ( X ) // constants PI ( X ) // inputs q ha s h 1 ( X ) ⋅ ( w 1 ( X ) ) 5 + q ha s h 2 ( X ) ⋅ ( w 2 ( X ) ) 5 q ha s h 3 ( X ) ⋅ ( w 3 ( X ) ) 5 + q ha s h 4 ( X ) ⋅ ( w 4 ( X ) ) 5 // Rescue non-linear steps q o ( X ) ⋅ w o ( X ) // output q b ( X ) ⋅ w 2 ( X ) ⋅ ( w 2 ( X ) − 1 ) = 0 // boolean testing on the second wire q b ( X ) ⋅ w 3 ( X ) ⋅ ( w 3 ( X ) − 1 ) = 0 // boolean testing on the third wire q b ( X ) ⋅ w 4 ( X ) ⋅ ( w 4 ( X ) − 1 ) = 0 // boolean testing on the fourth wire \begin{array}{l} q_b(X)\cdot w_2(X) \cdot (w_2(X) - 1) = 0~~~\text{// boolean testing on the second wire}\\ q_b(X)\cdot w_3(X) \cdot (w_3(X) - 1) = 0~~~\text{// boolean testing on the third wire}\\ q_b(X)\cdot w_4(X) \cdot (w_4(X) - 1) = 0~~~\text{// boolean testing on the fourth wire} \end{array} q b ( X ) ⋅ w 2 ( X ) ⋅ ( w 2 ( X ) − 1 ) = 0 // boolean testing on the second wire q b ( X ) ⋅ w 3 ( X ) ⋅ ( w 3 ( X ) − 1 ) = 0 // boolean testing on the third wire q b ( X ) ⋅ w 4 ( X ) ⋅ ( w 4 ( X ) − 1 ) = 0 // boolean testing on the fourth wire We now describe the indexer, the prover, and the verifier.
Indexer The indexer in TurboPlonk computes the commitments and openings for indexing polynomials, which consist of the following:
The thirteen selector polynomials: q 1 ( X ) , q 2 ( X ) , q 3 ( X ) , q 4 ( X ) , q o ( X ) , q m 1 ( X ) , q m 2 ( X ) , q c ( X ) , q h a s h 1 ( X ) , q h a s h 2 ( X ) , q h a s h 3 ( X ) , q h a s h 4 ( X ) , q b ( X ) \begin{aligned} &q_1(X), q_2(X), q_3(X), q_4(X), q_o(X), q_{m1}(X), q_{m2}(X), q_c(X),\\ &q_{hash1}(X), q_{hash2}(X), q_{hash3}(X), q_{hash4}(X), q_{b}(X) \end{aligned} q 1 ( X ) , q 2 ( X ) , q 3 ( X ) , q 4 ( X ) , q o ( X ) , q m 1 ( X ) , q m 2 ( X ) , q c ( X ) , q ha s h 1 ( X ) , q ha s h 2 ( X ) , q ha s h 3 ( X ) , q ha s h 4 ( X ) , q b ( X ) The five permutation polynomials:S σ 1 ( X ) , S σ 2 ( X ) , S σ 3 ( X ) , S σ 4 ( X ) , S σ o ( X ) S_{\sigma1}(X), S_{\sigma2}(X), S_{\sigma3}(X), S_{\sigma4}(X), S_{\sigma o}(X) S σ 1 ( X ) , S σ 2 ( X ) , S σ 3 ( X ) , S σ 4 ( X ) , S σ o ( X ) First of all, let the number of gates be n n n , the constraint system should have indicated a permutation σ : [ 5 n ] → [ 5 n ] \sigma: [5n]\rightarrow [5n] σ : [ 5 n ] → [ 5 n ] , which fulfills the following requirements.
Let w ( X ) w(X) w ( X ) be the concatenated witness polynomial of w 1 ( X ) , w 2 ( X ) , w 3 ( X ) , w 4 ( X ) , w o ( X ) w_1(X), w_2(X), w_3(X), w_4(X), w_o(X) w 1 ( X ) , w 2 ( X ) , w 3 ( X ) , w 4 ( X ) , w o ( X ) . The concatenation is over the evaluation representation, not the coefficient representation. The evaluation of w ( X ) w(X) w ( X ) remains unchanged after applying σ \sigma σ as a permutation over the evaluation of w ( X ) w(X) w ( X ) itself. Now, given four different quadratic non-residues ( k 1 , k 2 , k 3 , k 4 ) (k_1, k_2, k_3, k_4) ( k 1 , k 2 , k 3 , k 4 ) and a generator ω \omega ω with order n n n , we define a mapping as follows.
σ 0 ( i ) = { ω i − 1 i ∈ { 1 , 2 , . . . , n } k 1 ⋅ ω i − 1 − n i ∈ { n + 1 , n + 2 , . . . , 2 n } k 2 ⋅ ω i − 1 − 2 n i ∈ { 2 n + 1 , 2 n + 2 , . . . , 3 n } k 3 ⋅ ω i − 1 − 3 n i ∈ { 3 n + 1 , 3 n + 2 , . . . , 4 n } k 4 ⋅ ω i − 1 − 4 n i ∈ { 4 n + 1 , 4 n + 2 , . . . , 5 n } \sigma_0 \left(i\right) = \begin{cases} \omega^{i-1} & i\in \{1,2,...,n\}\\ k_1\cdot \omega^{i -1 - n} & i \in\{n+1, n+2, ..., 2n\}\\ k_2\cdot \omega^{i -1 - 2n} & i \in\{2n+1, 2n+2, ..., 3n\}\\ k_3\cdot \omega^{i -1- 3n} & i \in\{3n+1, 3n+2, ..., 4n\}\\ k_4\cdot \omega^{i -1- 4n} & i \in\{4n+1, 4n+2, ..., 5n\} \end{cases} σ 0 ( i ) = ⎩ ⎨ ⎧ ω i − 1 k 1 ⋅ ω i − 1 − n k 2 ⋅ ω i − 1 − 2 n k 3 ⋅ ω i − 1 − 3 n k 4 ⋅ ω i − 1 − 4 n i ∈ { 1 , 2 , ... , n } i ∈ { n + 1 , n + 2 , ... , 2 n } i ∈ { 2 n + 1 , 2 n + 2 , ... , 3 n } i ∈ { 3 n + 1 , 3 n + 2 , ... , 4 n } i ∈ { 4 n + 1 , 4 n + 2 , ... , 5 n } where i = 1 , 2 , . . . , n i = 1, 2, ..., n i = 1 , 2 , ... , n . And we apply this mapping to each element in σ \sigma σ , obtaining a map σ ∗ ( x ) : [ 5 n ] → F \sigma^*(x): [5n] \rightarrow\mathbb{F} σ ∗ ( x ) : [ 5 n ] → F . We split this map into five permutation polynomials, as follows.
S σ 1 ( X ) S_{\sigma1}(X) S σ 1 ( X ) 's evaluation on 1 , ω , . . . , ω n − 1 1,\omega, ..., \omega^{n-1} 1 , ω , ... , ω n − 1 equals σ ∗ ( x ) \sigma^*(x) σ ∗ ( x ) 's evaluation on 1 , 2 , . . . , n 1, 2, ..., n 1 , 2 , ... , n .
S σ 2 ( X ) S_{\sigma2}(X) S σ 2 ( X ) 's evaluation on 1 , ω , . . . , ω n − 1 1, \omega, ..., \omega^{n-1} 1 , ω , ... , ω n − 1 equals σ ∗ ( x ) \sigma^*(x) σ ∗ ( x ) 's evaluation on n + 1 , n + 2 , . . . , 2 n n+1, n+2, ..., 2n n + 1 , n + 2 , ... , 2 n .
S σ 3 ( X ) S_{\sigma3}(X) S σ 3 ( X ) 's evaluation on 1 , ω , . . . , ω n − 1 1, \omega, ..., \omega^{n-1} 1 , ω , ... , ω n − 1 equals σ ∗ ( x ) \sigma^*(x) σ ∗ ( x ) 's evaluation on 2 n + 1 , 2 n + 2 , . . . , 3 n 2n+1, 2n+2, ..., 3n 2 n + 1 , 2 n + 2 , ... , 3 n .
S σ 4 ( X ) S_{\sigma4}(X) S σ 4 ( X ) 's evaluation on 1 , ω , . . . , ω n − 1 1, \omega, ..., \omega^{n-1} 1 , ω , ... , ω n − 1 equals σ ∗ ( x ) \sigma^*(x) σ ∗ ( x ) 's evaluation on 3 n + 1 , 3 n + 2 , . . . , 4 n 3n+1, 3n+2, ..., 4n 3 n + 1 , 3 n + 2 , ... , 4 n .
S σ o ( X ) S_{\sigma o}(X) S σ o ( X ) 's evaluation on 1 , ω , . . . , ω n − 1 1, \omega, ..., \omega^{n-1} 1 , ω , ... , ω n − 1 equals σ ∗ ( x ) \sigma^*(x) σ ∗ ( x ) 's evaluation on 4 n + 1 , 4 n + 2 , . . . , 5 n 4n+1, 4n+2, ..., 5n 4 n + 1 , 4 n + 2 , ... , 5 n .Step 1: commit all polynomials We first commit all these indexing polynomials. The commitments are included in the verifier parameters. We then perform some precomputation: we prepare a representation of these polynomials that are easy to be use later for proving, by doing a coset FFT over them. The prepared polynomials are included in the prover parameters.
Step 2: precompute the two helper polynomials Compute the following polynomial defined on a domain H H H of size n n n :
L 1 ( X ) = X n − 1 X − 1 L_1(X) = \frac{X^n - 1}{X-1} L 1 ( X ) = X − 1 X n − 1 and store its coset FFT representation. This is done by first observing that L 1 ( X ) L_1(X) L 1 ( X ) evaluates to n n n on X = 1 X = 1 X = 1 and 0 0 0 otherwise in H H H . We can perform an inverse FFT to convert it back to the coefficient representation (which indeed looks nontrivial). Then, we perform a coset FFT, which gives us the prepared version of this polynomial.
Another polynomial we precompute is the vanishing polynomial of domain H H H of size n n n :
Z H ( X ) = X n − 1 Z_H(X) = X^n - 1 Z H ( X ) = X n − 1 and we want to store its coset FFT representation. This is done by a coset FFT over the coefficient representation above. The representations for the two helper polynomials are included in the prover parameters.
Step 3: compute the Lagrange interpolation constants Recall that the Lagrange interpolation from ( 1 , y 0 ) , ( g , y 1 ) , . . . , ( g n , y n ) (1, y_0), (g, y_1), ..., (g^n, y_n) ( 1 , y 0 ) , ( g , y 1 ) , ... , ( g n , y n ) where g g g is the generator for a domain H H H , into to a polynomial f ( X ) f(X) f ( X ) of degree n n n is as follows:
f ( X ) = ∑ j = 0 n y j ( ∏ 0 ≤ m ≤ n m ≠ j X − ω m ω j − ω m ) f(X) = \sum_{j=0}^n~~~y_j~~~\left(\prod_{{\substack{0\leq m \leq n\\ m\neq j}}}~~~\frac{X - \omega^m}{\omega^j - \omega^m}\right) f ( X ) = j = 0 ∑ n y j ⎝ ⎛ 0 ≤ m ≤ n m = j ∏ ω j − ω m X − ω m ⎠ ⎞ We can rewrite it as follows.
f ( X ) = ∑ j = 0 n y j ( ∏ 0 ≤ m ≤ n m ≠ j X − ω m ω j − ω m ) = ( ∏ 0 ≤ m ≤ n ( X − ω m ) ) ( ∑ j = 0 n y j X − ω j ( ∏ 0 ≤ m ≤ n m ≠ j 1 ω j − ω m ) ) \begin{aligned} f(X) &= \sum_{j=0}^n~~~y_j~~~\left(\prod_{{\substack{0\leq m \leq n\\ m\neq j}}}~~~\frac{X - \omega^m}{\omega^j - \omega^m}\right)\\ &= \left(\prod_{0\leq m \leq n} (X - \omega^m)\right)~~~\left(\sum_{j=0}^n~~~\frac{y_j}{X - \omega^j}~~~\left(\prod_{{\substack{0\leq m \leq n\\ m\neq j}}}~~~\frac{1}{\omega^j - \omega^m}\right)\right) \end{aligned} f ( X ) = j = 0 ∑ n y j ⎝ ⎛ 0 ≤ m ≤ n m = j ∏ ω j − ω m X − ω m ⎠ ⎞ = ( 0 ≤ m ≤ n ∏ ( X − ω m ) ) ⎝ ⎛ j = 0 ∑ n X − ω j y j ⎝ ⎛ 0 ≤ m ≤ n m = j ∏ ω j − ω m 1 ⎠ ⎞ ⎠ ⎞ Now, precompute c j c_j c j for every j ∈ { 0 , 1 , . . . , n } j\in\{0,1, ..., n\} j ∈ { 0 , 1 , ... , n } .
c j = ∏ 0 ≤ m ≤ n m ≠ j 1 ω j − ω m c_j = \prod_{{\substack{0\leq m \leq n\\ m\neq j}}}~~\frac{1}{\omega^j - \omega^m} c j = 0 ≤ m ≤ n m = j ∏ ω j − ω m 1 This allows us to simplify f ( x ) f(x) f ( x ) as follows.
f ( X ) = ( ∏ 0 ≤ m ≤ n ( X − ω m ) ) ∑ j = 0 n c j ⋅ y j X − ω j = ( X n − 1 ) ∑ j = 0 n c j ⋅ y j X − ω j \begin{aligned} f(X) &= \left(\prod_{0\leq m \leq n} (X - \omega^m)\right)~~~\sum_{j=0}^n~~~\frac{c_j\cdot y_j}{X - \omega^j}\\ &= (X^n - 1)~~~\sum_{j=0}^n~~~\frac{c_j\cdot y_j}{X - \omega^j} \end{aligned} f ( X ) = ( 0 ≤ m ≤ n ∏ ( X − ω m ) ) j = 0 ∑ n X − ω j c j ⋅ y j = ( X n − 1 ) j = 0 ∑ n X − ω j c j ⋅ y j These constants c j c_j c j ( j ∈ { 0 , 1 , . . . , n } ) (j\in\{0,1, ..., n\}) ( j ∈ { 0 , 1 , ... , n }) are included in the verifier parameters. We conclude the description of the indexer.
Prover The prover in TurboPlonk uses the prover parameters from the indexer and a complete constraint system with all the gate values and copy constraints ready. It follows the following steps.
The prover parameters have indicated which witness value indeed belongs to public inputs. The prover finds those witness values and stores them in a vector of length n i n n_{in} n in , which is the number of field elements in public inputs. This is to enable us to calculate the state of the verifier.
Step 2: instantiate the verifier For the purpose of the Fiat-Shamir transform, we create a cryptographic sponge, which will absorb the verifier's state as well as the messages that the verifier would receive from the prover in an interactive proof protocol.
After we create the sponge, we put the following two things into the sponge: (1) verifier parameters and (2) public inputs.
Step 3: commit witness polynomials with hiding Given the witness polynomials w 1 ( X ) , w 2 ( X ) , w 3 ( X ) , w 4 ( X ) , w o ( X ) w_1(X),\allowbreak w_2(X),\allowbreak w_3(X),\allowbreak w_4(X),\allowbreak w_o(X) w 1 ( X ) , w 2 ( X ) , w 3 ( X ) , w 4 ( X ) , w o ( X ) , we add a degree-one random blinding polynomial over each of them. The prover samples b 1 , b 2 , b 3 , . . . , b 10 ∈ F b_1,\allowbreak b_2,\allowbreak b_3,\allowbreak ...,\allowbreak b_{10}\in \mathbb{F} b 1 , b 2 , b 3 , ... , b 10 ∈ F and computes blinded witness polynomials.
w 1 ~ ( X ) = w 1 ( X ) + Z H ( X ) ⋅ ( b 1 ⋅ X + b 2 ) w 2 ~ ( X ) = w 2 ( X ) + Z H ( X ) ⋅ ( b 3 ⋅ X + b 4 ) w 3 ~ ( X ) = w 3 ( X ) + Z H ( X ) ⋅ ( b 5 ⋅ X + b 6 ) w 4 ~ ( X ) = w 4 ( X ) + Z H ( X ) ⋅ ( b 7 ⋅ X + b 8 ) w o ~ ( X ) = w o ( X ) + Z H ( X ) ⋅ ( b 9 ⋅ X + b 10 ) \begin{aligned} \widetilde{w_1}(X) &= w_1(X) + Z_H(X) \cdot (b_1\cdot X + b_2)\\ \widetilde{w_2}(X) &= w_2(X) + Z_H(X) \cdot (b_3\cdot X + b_4)\\ \widetilde{w_3}(X) &= w_3(X) + Z_H(X) \cdot (b_5\cdot X + b_6)\\ \widetilde{w_4}(X) &= w_4(X) + Z_H(X) \cdot (b_7\cdot X + b_8)\\ \widetilde{w_o}(X) &= w_o(X) + Z_H(X) \cdot (b_9\cdot X + b_{10}) \end{aligned} w 1 ( X ) w 2 ( X ) w 3 ( X ) w 4 ( X ) w o ( X ) = w 1 ( X ) + Z H ( X ) ⋅ ( b 1 ⋅ X + b 2 ) = w 2 ( X ) + Z H ( X ) ⋅ ( b 3 ⋅ X + b 4 ) = w 3 ( X ) + Z H ( X ) ⋅ ( b 5 ⋅ X + b 6 ) = w 4 ( X ) + Z H ( X ) ⋅ ( b 7 ⋅ X + b 8 ) = w o ( X ) + Z H ( X ) ⋅ ( b 9 ⋅ X + b 10 ) We commit each of the polynomial above and put the polynomial commitments c m w 1 , c m w 2 , c m w 3 , c m w 4 , c m w o ∈ G 1 \mathsf{cm}_{w1},\allowbreak \mathsf{cm}_{w2},\allowbreak \mathsf{cm}_{w3},\allowbreak \mathsf{cm}_{w4},\allowbreak \mathsf{cm}_{wo}\in\mathbb{G}_1 cm w 1 , cm w 2 , cm w 3 , cm w 4 , cm w o ∈ G 1 into the sponge.
Step 4: build the sigma polynomial, for wiring The prover squeezes out two challenges β , γ ∈ F \beta, \gamma\in\mathbb{F} β , γ ∈ F from the sponge. We now need to build the sigma polynomial. It helps for us to first compute:
S i : = ( w i + β ⋅ ω i − 1 + γ ) ⋅ ( w n + i + β ⋅ k 1 ⋅ ω i − 1 + γ ) ⋅ ( w 2 n + i + β ⋅ k 2 ⋅ ω i − 1 + γ ) ⋅ ( w 3 n + i + β ⋅ k 3 ⋅ ω i − 1 + γ ) ⋅ ( w 4 n + i + β ⋅ k 4 ⋅ ω i − 1 + γ ) ( w i + σ ∗ ( i ) ⋅ β + γ ) ⋅ ( w n + i + σ ∗ ( n + i ) ⋅ β + γ ) ⋅ ( w 2 n + i + σ ∗ ( 2 n + i ) ⋅ β + γ ) ⋅ ( w 3 n + i + σ ∗ ( 3 n + i ) ⋅ β + γ ) ⋅ ( w 4 n + i + σ ∗ ( 4 n + i ) ⋅ β + γ ) S_i := \frac{\begin{array}{c}(w_i+\beta\cdot\omega^{i-1} + \gamma)\cdot (w_{n+i} + \beta\cdot k_1\cdot\omega^{i-1} + \gamma)\cdot (w_{2n+i} + \beta\cdot k_2\cdot\omega^{i-1} + \gamma)\\\cdot (w_{3n+i} + \beta\cdot k_3\cdot \omega^{i-1} + \gamma)\cdot (w_{4n+i} + \beta\cdot k_4\cdot \omega^{i-1} + \gamma)\end{array}}{\begin{array}{c} (w_i + \sigma^*(i)\cdot\beta + \gamma)\cdot (w_{n+i} + \sigma^*(n+i)\cdot\beta + \gamma)\cdot (w_{2n+i} + \sigma^*(2n+i)\cdot\beta + \gamma)\\ \cdot (w_{3n+i} + \sigma^*(3n+i)\cdot \beta + \gamma)\cdot (w_{4n+i} + \sigma^*(4n+i)\cdot \beta + \gamma) \end{array}} S i := ( w i + σ ∗ ( i ) ⋅ β + γ ) ⋅ ( w n + i + σ ∗ ( n + i ) ⋅ β + γ ) ⋅ ( w 2 n + i + σ ∗ ( 2 n + i ) ⋅ β + γ ) ⋅ ( w 3 n + i + σ ∗ ( 3 n + i ) ⋅ β + γ ) ⋅ ( w 4 n + i + σ ∗ ( 4 n + i ) ⋅ β + γ ) ( w i + β ⋅ ω i − 1 + γ ) ⋅ ( w n + i + β ⋅ k 1 ⋅ ω i − 1 + γ ) ⋅ ( w 2 n + i + β ⋅ k 2 ⋅ ω i − 1 + γ ) ⋅ ( w 3 n + i + β ⋅ k 3 ⋅ ω i − 1 + γ ) ⋅ ( w 4 n + i + β ⋅ k 4 ⋅ ω i − 1 + γ ) We can then define the permutation polynomial z ( X ) z(X) z ( X ) with the following evaluations:
z ( ω i − 1 ) = { 1 i = 1 ∏ j = 1 i − 1 S i i = 2 , 3 , . . . , n z(\omega^{i-1}) = \begin{cases} 1 & i = 1\\ \prod_{j=1}^{i-1} S_i & i = 2, 3, ..., n\\ \end{cases} z ( ω i − 1 ) = { 1 ∏ j = 1 i − 1 S i i = 1 i = 2 , 3 , ... , n Step 5: commit the sigma polynomial, with hiding The prover first samples b 11 , b 12 , b 13 ∈ F b_{11},\allowbreak b_{12},\allowbreak b_{13}\in\mathbb{F} b 11 , b 12 , b 13 ∈ F and apply them as blinding factors to the polynomial z ( X ) z(X) z ( X ) .
z ~ ( X ) = z ( X ) + Z H ( X ) ⋅ ( b 11 X 2 + b 12 X + b 13 ) \widetilde{z}(X) = z(X) + Z_H(X)\cdot (b_{11} X^2 + b_{12} X + b_{13}) z ( X ) = z ( X ) + Z H ( X ) ⋅ ( b 11 X 2 + b 12 X + b 13 ) We commit this polynomial and put the polynomial commitment c m z ∈ G 1 \mathsf{cm}_{z}\in\mathbb{G}_1 cm z ∈ G 1 into the sponge.
Step 6: compute the quotient polynomial The prover squeezes out a challenge α \alpha α from the sponge. This is used to construct the following polynomial.
t ( X ) = t s a t ( X ) ⋅ 1 Z H ( X ) + t σ 1 ( X ) ⋅ α Z H ( X ) − t σ 2 ( X ) ⋅ α Z H ( X ) + t σ 3 ( X ) ⋅ α 2 Z H ( X ) + t b 1 ( X ) ⋅ α 3 Z H ( X ) + t b 2 ( X ) ⋅ α 4 Z H ( X ) + t b 3 ( X ) ⋅ α 5 Z H ( X ) \begin{aligned} t(X) &= t_\mathsf{sat}(X)\cdot \frac{1}{Z_H(X)} + t_{\sigma 1}(X)\cdot \frac{\alpha}{Z_H(X)} - t_{\sigma 2}(X)\cdot \frac{\alpha}{Z_H(X)}+ t_{\sigma 3}(X)\cdot \frac{\alpha^2}{Z_H(X)}\\ &+ t_{b1}(X) \cdot \frac{\alpha^3}{Z_H(X)} + t_{b2}(X) \cdot \frac{\alpha^4}{Z_H(X)}+ t_{b3}(X) \cdot \frac{\alpha^5}{Z_H(X)} \end{aligned} t ( X ) = t sat ( X ) ⋅ Z H ( X ) 1 + t σ 1 ( X ) ⋅ Z H ( X ) α − t σ 2 ( X ) ⋅ Z H ( X ) α + t σ 3 ( X ) ⋅ Z H ( X ) α 2 + t b 1 ( X ) ⋅ Z H ( X ) α 3 + t b 2 ( X ) ⋅ Z H ( X ) α 4 + t b 3 ( X ) ⋅ Z H ( X ) α 5 where
t s a t ( X ) = q 1 ( X ) ⋅ w 1 ~ ( X ) + q 2 ( X ) ⋅ w 2 ~ ( X ) + q 3 ( X ) ⋅ w 3 ~ ( X ) + q 4 ( X ) ⋅ w 4 ~ ( X ) + q m 1 ( X ) ⋅ w 1 ~ ( X ) ⋅ w 2 ~ ( X ) + q m 2 ( X ) ⋅ w 3 ~ ( X ) ⋅ w 4 ~ ( X ) + q c ( X ) + P I ( X ) + q h a s h 1 ( X ) ⋅ ( w 1 ~ ( X ) ) 5 + q h a s h 2 ( X ) ⋅ ( w 2 ~ ( X ) ) 5 + q h a s h 3 ( X ) ⋅ ( w 3 ~ ( X ) ) 5 + q h a s h 4 ( X ) ⋅ ( w 4 ~ ( X ) ) 5 − q o ( X ) ⋅ w o ~ ( X ) \begin{aligned} t_{sat}(X) &= q_1(X)\cdot \widetilde{w_1}(X) + q_2(X)\cdot \widetilde{w_2}(X) + q_3(X)\cdot \widetilde{w_3}(X) + q_4(X)\cdot \widetilde{w_4}(X)\\ &+ q_{m1}(X)\cdot \widetilde{w_1}(X)\cdot \widetilde{w_2}(X) + q_{m2}(X)\cdot \widetilde{w_3}(X)\cdot \widetilde{w_4}(X) + q_{c}(X) + \mathsf{PI}(X)\\ &+ q_{hash1}(X)\cdot (\widetilde{w_1}(X))^5 + q_{hash2}(X)\cdot (\widetilde{w_2}(X))^5\\ &+ q_{hash3}(X)\cdot (\widetilde{w_3}(X))^5 + q_{hash4}(X)\cdot (\widetilde{w_4}(X))^5\\ &- q_o(X)\cdot \widetilde{w_o}(X) \end{aligned} t s a t ( X ) = q 1 ( X ) ⋅ w 1 ( X ) + q 2 ( X ) ⋅ w 2 ( X ) + q 3 ( X ) ⋅ w 3 ( X ) + q 4 ( X ) ⋅ w 4 ( X ) + q m 1 ( X ) ⋅ w 1 ( X ) ⋅ w 2 ( X ) + q m 2 ( X ) ⋅ w 3 ( X ) ⋅ w 4 ( X ) + q c ( X ) + PI ( X ) + q ha s h 1 ( X ) ⋅ ( w 1 ( X ) ) 5 + q ha s h 2 ( X ) ⋅ ( w 2 ( X ) ) 5 + q ha s h 3 ( X ) ⋅ ( w 3 ( X ) ) 5 + q ha s h 4 ( X ) ⋅ ( w 4 ( X ) ) 5 − q o ( X ) ⋅ w o ( X ) and
t σ 1 ( X ) = ( w 1 ~ ( X ) + β ⋅ X + γ ) ⋅ ( w 2 ~ ( X ) + β ⋅ k 1 ⋅ X + γ ) ⋅ ( w 3 ~ ( X ) + β ⋅ k 2 ⋅ X + γ ) ⋅ ( w 4 ~ ( X ) + β ⋅ k 3 ⋅ X + γ ) ⋅ ( w o ~ ( X ) + β ⋅ k 4 ⋅ X + γ ) ⋅ z ~ ( X ) \begin{aligned} t_{\sigma 1}(X) = &(\widetilde{w_1}(X) + \beta\cdot X + \gamma)\cdot (\widetilde{w_2}(X) + \beta\cdot k_1\cdot X + \gamma)\cdot (\widetilde{w_3}(X) + \beta\cdot k_2\cdot X + \gamma)\\ &\cdot (\widetilde{w_4}(X) + \beta\cdot k_3\cdot X + \gamma)\cdot (\widetilde{w_o}(X) + \beta\cdot k_4\cdot X + \gamma)\\ &\cdot \widetilde{z}(X) \end{aligned} t σ 1 ( X ) = ( w 1 ( X ) + β ⋅ X + γ ) ⋅ ( w 2 ( X ) + β ⋅ k 1 ⋅ X + γ ) ⋅ ( w 3 ( X ) + β ⋅ k 2 ⋅ X + γ ) ⋅ ( w 4 ( X ) + β ⋅ k 3 ⋅ X + γ ) ⋅ ( w o ( X ) + β ⋅ k 4 ⋅ X + γ ) ⋅ z ( X ) and
t σ 2 ( X ) = ( w 1 ~ ( X ) + β ⋅ S σ 1 ( X ) + γ ) ⋅ ( w 2 ~ ( X ) + β ⋅ S σ 2 ( X ) + γ ) ⋅ ( w 3 ~ ( X ) + β ⋅ S σ 3 ( X ) + γ ) ⋅ ( w 4 ~ ( X ) + β ⋅ S σ 4 ( X ) + γ ) ⋅ ( w o ~ ( X ) + β ⋅ S σ o ( X ) + γ ) ⋅ z ~ ( X ω ) // the shifting trick \begin{aligned} t_{\sigma 2}(X) = &(\widetilde{w_1}(X) + \beta\cdot S_{\sigma 1}(X) + \gamma)\cdot (\widetilde{w_2}(X) + \beta\cdot S_{\sigma 2}(X) + \gamma)\cdot (\widetilde{w_3}(X) + \beta\cdot S_{\sigma 3}(X) + \gamma)\\ &\cdot (\widetilde{w_4}(X) + \beta\cdot S_{\sigma 4}(X) + \gamma)\cdot (\widetilde{w_o}(X) + \beta\cdot S_{\sigma o}(X) + \gamma)\\ &\cdot \widetilde{z}(X\omega)~~~\text{// the shifting trick} \end{aligned} t σ 2 ( X ) = ( w 1 ( X ) + β ⋅ S σ 1 ( X ) + γ ) ⋅ ( w 2 ( X ) + β ⋅ S σ 2 ( X ) + γ ) ⋅ ( w 3 ( X ) + β ⋅ S σ 3 ( X ) + γ ) ⋅ ( w 4 ( X ) + β ⋅ S σ 4 ( X ) + γ ) ⋅ ( w o ( X ) + β ⋅ S σ o ( X ) + γ ) ⋅ z ( X ω ) // the shifting trick and
t σ 3 ( X ) = ( z ~ ( X ) − 1 ) ⋅ L 1 ( X ) \begin{aligned} t_{\sigma 3}(X) = (\widetilde{z}(X) - 1)\cdot L_1(X) \end{aligned} t σ 3 ( X ) = ( z ( X ) − 1 ) ⋅ L 1 ( X ) and
t b 1 ( X ) = q b ( X ) ⋅ w 2 ~ ( X ) ⋅ ( w 2 ~ ( X ) − 1 ) t b 2 ( X ) = q b ( X ) ⋅ w 3 ~ ( X ) ⋅ ( w 3 ~ ( X ) − 1 ) t b 3 ( X ) = q b ( X ) ⋅ w 4 ~ ( X ) ⋅ ( w 4 ~ ( X ) − 1 ) \begin{aligned} t_{b1}(X) &= q_b(X)\cdot \widetilde{w_2}(X) \cdot (\widetilde{w_2}(X) - 1)\\ t_{b2}(X) &= q_b(X)\cdot \widetilde{w_3}(X) \cdot (\widetilde{w_3}(X) - 1)\\ t_{b3}(X) &= q_b(X)\cdot \widetilde{w_4}(X) \cdot (\widetilde{w_4}(X) - 1) \end{aligned} t b 1 ( X ) t b 2 ( X ) t b 3 ( X ) = q b ( X ) ⋅ w 2 ( X ) ⋅ ( w 2 ( X ) − 1 ) = q b ( X ) ⋅ w 3 ( X ) ⋅ ( w 3 ( X ) − 1 ) = q b ( X ) ⋅ w 4 ( X ) ⋅ ( w 4 ( X ) − 1 ) Then, in the coefficient representations, we split the polynomial into five parts: t 1 ( X ) t_1(X) t 1 ( X ) , t 2 ( X ) t_2(X) t 2 ( X ) , t 3 ( X ) t_3(X) t 3 ( X ) , t 4 ( X ) t_4(X) t 4 ( X ) , and t 5 ( X ) t_5(X) t 5 ( X ) , where the first four polynomials have degree n + 2 n+2 n + 2 , and the last polynomial has degree n − 1 n-1 n − 1 . This is because t ( X ) t(X) t ( X ) is expected to have degree 5 ∗ ( n + 1 ) + ( n + 2 ) − n = 5 n + 7 5*(n+1) + (n+2) - n = 5n+7 5 ∗ ( n + 1 ) + ( n + 2 ) − n = 5 n + 7 , and 5 n + 7 = 4 ∗ ( n + 2 ) + ( n − 1 ) 5n+7 = 4 *(n+2) + (n-1) 5 n + 7 = 4 ∗ ( n + 2 ) + ( n − 1 ) .
Step 7: commit the split quotient polynomials, without hiding We commit all these polynomials and put the commitments c m t 1 \mathsf{cm}_{t1} cm t 1 , c m t 2 \mathsf{cm}_{t2} cm t 2 , c m t 3 \mathsf{cm}_{t3} cm t 3 , c m t 4 \mathsf{cm}_{t4} cm t 4 , and c m t 5 \mathsf{cm}_{t5} cm t 5 into the sponge.
Step 8: open the polynomials at a random point The prover squeezes a random challenge ζ ∈ F \zeta\in\mathbb{F} ζ ∈ F and compute the following opening evaluations:
w 1 ~ ( ζ ) , w 2 ~ ( ζ ) , w 3 ~ ( ζ ) , w 4 ~ ( ζ ) , w o ~ ( ζ ) , S σ 1 ( ζ ) , S σ 2 ( ζ ) , S σ 3 ( ζ ) , S σ 4 ( ζ ) , z ~ ( ζ ω ) \widetilde{w_1}(\zeta), \widetilde{w_2}(\zeta), \widetilde{w_3}(\zeta), \widetilde{w_4}(\zeta), \widetilde{w_o}(\zeta), S_{\sigma 1}(\zeta), S_{\sigma 2}(\zeta), S_{\sigma 3}(\zeta), S_{\sigma 4}(\zeta), \widetilde{z}(\zeta \omega) w 1 ( ζ ) , w 2 ( ζ ) , w 3 ( ζ ) , w 4 ( ζ ) , w o ( ζ ) , S σ 1 ( ζ ) , S σ 2 ( ζ ) , S σ 3 ( ζ ) , S σ 4 ( ζ ) , z ( ζ ω ) And we remind the readers that the last one is evaluated over ζ ω \zeta\omega ζ ω instead of ζ \zeta ζ . This is common in entry product arguments. The prover puts these, which are elements in F \mathbb{F} F , into the sponge.
Step 9: compute the linearization polynomial The linearization polynomial is, at a high level, to replace w 1 ~ ( X ) \widetilde{w_1}(X) w 1 ( X ) , w 2 ~ ( X ) \widetilde{w_2}(X) w 2 ( X ) , w 3 ~ ( X ) \widetilde{w_3}(X) w 3 ( X ) , w 4 ~ ( X ) \widetilde{w_4}(X) w 4 ( X ) , w o ~ ( X ) \widetilde{w_o}(X) w o ( X ) , S σ 1 ~ ( X ) \widetilde{S_{\sigma1}}(X) S σ 1 ( X ) , S σ 2 ~ ( X ) \widetilde{S_{\sigma2}}(X) S σ 2 ( X ) , S σ 3 ~ ( X ) \widetilde{S_{\sigma3}}(X) S σ 3 ( X ) , S σ 4 ~ ( X ) \widetilde{S_{\sigma4}}(X) S σ 4 ( X ) , and z ~ ( X ω ) \widetilde{z}(X\omega) z ( X ω ) with the evaluations over that random point. More specifically, r ( X ) r(X) r ( X ) reads as follows. Note that the locations of Z H ( X ) Z_H(X) Z H ( X ) are different now. The constant terms of r ( X ) r(X) r ( X ) are removed here.
r ( X ) = r s a t ( X ) + r 1 ( X ) ⋅ α − r 2 ( X ) ⋅ α + r 3 ( X ) ⋅ α 2 + r 4 ( X ) ⋅ α 3 + r 5 ( X ) ⋅ α 4 + r 6 ( X ) ⋅ α 5 − Z H ( ζ ) ( t 1 ( X ) + ζ n + 2 ⋅ t 2 ( X ) + ζ 2 ( n + 2 ) ⋅ t 3 ( X ) + ζ 3 ( n + 2 ) ⋅ t 4 ( X ) + ζ 4 ( n + 2 ) ⋅ t 5 ( X ) ) \begin{aligned} r(X) &= r_\mathsf{sat}(X) + r_{1}(X)\cdot \alpha - r_{2}(X) \cdot \alpha + r_{3}(X)\cdot \alpha^2 + r_{4}(X)\cdot \alpha^3 + r_{5}(X)\cdot \alpha^4 + r_{6}(X)\cdot \alpha^5\\ &- Z_H(\zeta) (t_1(X) + \zeta^{n+2}\cdot t_2(X) + \zeta^{2(n+2)}\cdot t_3(X)+ \zeta^{3(n+2)}\cdot t_4(X)+ \zeta^{4(n+2)}\cdot t_5(X)) \end{aligned} r ( X ) = r sat ( X ) + r 1 ( X ) ⋅ α − r 2 ( X ) ⋅ α + r 3 ( X ) ⋅ α 2 + r 4 ( X ) ⋅ α 3 + r 5 ( X ) ⋅ α 4 + r 6 ( X ) ⋅ α 5 − Z H ( ζ ) ( t 1 ( X ) + ζ n + 2 ⋅ t 2 ( X ) + ζ 2 ( n + 2 ) ⋅ t 3 ( X ) + ζ 3 ( n + 2 ) ⋅ t 4 ( X ) + ζ 4 ( n + 2 ) ⋅ t 5 ( X )) where
r s a t ( X ) = w 1 ~ ( ζ ) ⋅ q 1 ( X ) + w 2 ~ ( ζ ) ⋅ q 2 ( X ) + w 3 ~ ( ζ ) ⋅ q 3 ( X ) + w 4 ~ ( ζ ) ⋅ q 4 ( X ) + w 1 ~ ( ζ ) ⋅ w 2 ~ ( ζ ) ⋅ q m 1 ( X ) + w 3 ~ ( ζ ) ⋅ w 4 ~ ( ζ ) ⋅ q m 2 ( X ) + q c ( X ) + ( w 1 ~ ( ζ ) ) 5 ⋅ q h a s h 1 ( X ) + ( w 2 ~ ( ζ ) ) 5 ⋅ q h a s h 2 ( X ) + ( w 3 ~ ( ζ ) ) 5 ⋅ q h a s h 3 ( X ) + ( w 4 ~ ( ζ ) ) 5 ⋅ q h a s h 4 ( X ) − w o ~ ( ζ ) ⋅ q o ( X ) \begin{aligned} r_\mathsf{sat}(X) &= \widetilde{w_1}(\zeta)\cdot q_1(X) + \widetilde{w_2}(\zeta)\cdot q_2(X) + \widetilde{w_3}(\zeta)\cdot q_3(X) + \widetilde{w_4}(\zeta)\cdot q_4(X)\\ &+\widetilde{w_1}(\zeta)\cdot \widetilde{w_2}(\zeta)\cdot q_{m1}(X) + \widetilde{w_3}(\zeta)\cdot \widetilde{w_4}(\zeta)\cdot q_{m2}(X)+q_c(X)\\ &+(\widetilde{w_1}(\zeta))^5 \cdot q_{hash1}(X)+(\widetilde{w_2}(\zeta))^5 \cdot q_{hash2}(X)\\ &+(\widetilde{w_3}(\zeta))^5 \cdot q_{hash3}(X)+(\widetilde{w_4}(\zeta))^5 \cdot q_{hash4}(X)\\ &-\widetilde{w_o}(\zeta)\cdot q_o(X) \end{aligned} r sat ( X ) = w 1 ( ζ ) ⋅ q 1 ( X ) + w 2 ( ζ ) ⋅ q 2 ( X ) + w 3 ( ζ ) ⋅ q 3 ( X ) + w 4 ( ζ ) ⋅ q 4 ( X ) + w 1 ( ζ ) ⋅ w 2 ( ζ ) ⋅ q m 1 ( X ) + w 3 ( ζ ) ⋅ w 4 ( ζ ) ⋅ q m 2 ( X ) + q c ( X ) + ( w 1 ( ζ ) ) 5 ⋅ q ha s h 1 ( X ) + ( w 2 ( ζ ) ) 5 ⋅ q ha s h 2 ( X ) + ( w 3 ( ζ ) ) 5 ⋅ q ha s h 3 ( X ) + ( w 4 ( ζ ) ) 5 ⋅ q ha s h 4 ( X ) − w o ( ζ ) ⋅ q o ( X ) and
r 1 ( X ) = ( w 1 ~ ( ζ ) + β ⋅ ζ + γ ) ⋅ ( w 2 ~ ( ζ ) + β ⋅ k 1 ⋅ ζ + γ ) ⋅ ( w 3 ~ ( ζ ) + β ⋅ k 2 ⋅ ζ + γ ) ⋅ ( w 4 ~ ( ζ ) + β ⋅ k 3 ⋅ ζ + γ ) ⋅ ( w o ~ ( ζ ) + β ⋅ k 4 ⋅ ζ + γ ) ⋅ z ~ ( X ) \begin{aligned} r_\mathsf{1}(X) = &(\widetilde{w_1}(\zeta) + \beta\cdot \zeta +\gamma)\cdot (\widetilde{w_2}(\zeta) + \beta\cdot k_1\cdot \zeta +\gamma)\cdot (\widetilde{w_3}(\zeta) + \beta\cdot k_2\cdot \zeta +\gamma)\\ &\cdot (\widetilde{w_4}(\zeta) + \beta\cdot k_3\cdot \zeta +\gamma)\cdot (\widetilde{w_o}(\zeta) + \beta\cdot k_4\cdot \zeta +\gamma)\cdot \widetilde{z}(X) \end{aligned} r 1 ( X ) = ( w 1 ( ζ ) + β ⋅ ζ + γ ) ⋅ ( w 2 ( ζ ) + β ⋅ k 1 ⋅ ζ + γ ) ⋅ ( w 3 ( ζ ) + β ⋅ k 2 ⋅ ζ + γ ) ⋅ ( w 4 ( ζ ) + β ⋅ k 3 ⋅ ζ + γ ) ⋅ ( w o ( ζ ) + β ⋅ k 4 ⋅ ζ + γ ) ⋅ z ( X ) and
r 2 ( X ) = ( w 1 ~ ( ζ ) + β S σ 1 ( ζ ) + γ ) ⋅ ( w 2 ~ ( ζ ) + β S σ 2 ( ζ ) + γ ) ⋅ ( w 3 ~ ( ζ ) + β S σ 3 ( ζ ) + γ ) ⋅ ( w 4 ~ ( ζ ) + β S σ 4 ( ζ ) + γ ) ⋅ β ⋅ S σ o ( X ) ⋅ z ~ ( ζ ω ) \begin{aligned} r_\mathsf{2}(X) = &(\widetilde{w_1}(\zeta) + \beta S_{\sigma 1}(\zeta) +\gamma)\cdot (\widetilde{w_2}(\zeta) + \beta S_{\sigma 2}(\zeta) +\gamma)\cdot (\widetilde{w_3}(\zeta) + \beta S_{\sigma 3}(\zeta) +\gamma)\\ &\cdot (\widetilde{w_4}(\zeta) + \beta S_{\sigma 4}(\zeta) +\gamma)\cdot \beta\cdot S_{\sigma o}(X)\cdot \widetilde{z}(\zeta \omega) \end{aligned} r 2 ( X ) = ( w 1 ( ζ ) + β S σ 1 ( ζ ) + γ ) ⋅ ( w 2 ( ζ ) + β S σ 2 ( ζ ) + γ ) ⋅ ( w 3 ( ζ ) + β S σ 3 ( ζ ) + γ ) ⋅ ( w 4 ( ζ ) + β S σ 4 ( ζ ) + γ ) ⋅ β ⋅ S σ o ( X ) ⋅ z ( ζ ω ) Note that S σ o ( X ) S_{\sigma o}(X) S σ o ( X ) is not being replaced by its evaluation, and
r 3 ( X ) = z ~ ( X ) ⋅ L 1 ( ζ ) r_{3}(X) = \widetilde{z}(X) \cdot L_1(\zeta) r 3 ( X ) = z ( X ) ⋅ L 1 ( ζ ) and
r 4 ( X ) = q b ( X ) ⋅ w 2 ~ ( ζ ) ⋅ ( w 2 ~ ( ζ ) − 1 ) r 5 ( X ) = q b ( X ) ⋅ w 3 ~ ( ζ ) ⋅ ( w 3 ~ ( ζ ) − 1 ) r 6 ( X ) = q b ( X ) ⋅ w 4 ~ ( ζ ) ⋅ ( w 4 ~ ( ζ ) − 1 ) \begin{aligned} r_{4}(X) &= q_b(X)\cdot \widetilde{w_2}(\zeta)\cdot (\widetilde{w_2}(\zeta) - 1)\\ r_{5}(X) &= q_b(X)\cdot \widetilde{w_3}(\zeta)\cdot (\widetilde{w_3}(\zeta) - 1)\\ r_{6}(X) &= q_b(X)\cdot \widetilde{w_4}(\zeta)\cdot (\widetilde{w_4}(\zeta) - 1) \end{aligned} r 4 ( X ) r 5 ( X ) r 6 ( X ) = q b ( X ) ⋅ w 2 ( ζ ) ⋅ ( w 2 ( ζ ) − 1 ) = q b ( X ) ⋅ w 3 ( ζ ) ⋅ ( w 3 ( ζ ) − 1 ) = q b ( X ) ⋅ w 4 ( ζ ) ⋅ ( w 4 ( ζ ) − 1 ) Now we have the linearization polynomial. Although this polynomial is not linear, its degree is down from ≈ 5 n \approx 5n ≈ 5 n to ≈ n \approx n ≈ n , and one can see that the polynomial collapses to a small one.
We note that the evaluation of r ( X ) r(X) r ( X ) at point ζ \zeta ζ is as follows. The prover does not need to include this number in the proof because it can be computed by the verifier.
r ( ζ ) = − P I ( ζ ) + α ⋅ ( w 1 ~ ( ζ ) + β S σ 1 ( ζ ) + γ ) ⋅ ( w 2 ~ ( ζ ) + β S σ 2 ( ζ ) + γ ) ⋅ ( w 3 ~ ( ζ ) + β S σ 3 ( ζ ) + γ ) ⋅ ( w 4 ~ ( ζ ) + β S σ 4 ( ζ ) + γ ) ⋅ ( w o ~ ( ζ ) + γ ) ⋅ z ~ ( ζ ω ) + α 2 L 1 ( ζ ) \begin{aligned} r(\zeta) &= -\mathsf{PI}(\zeta)+\alpha\cdot(\widetilde{w_1}(\zeta) + \beta S_{\sigma1}(\zeta) + \gamma) \cdot(\widetilde{w_2}(\zeta) + \beta S_{\sigma2}(\zeta) + \gamma)\cdot(\widetilde{w_3}(\zeta) + \beta S_{\sigma3}(\zeta) + \gamma)\\ &\cdot(\widetilde{w_4}(\zeta) + \beta S_{\sigma4}(\zeta) + \gamma)\cdot(\widetilde{w_o}(\zeta)+\gamma)\cdot \widetilde{z}(\zeta \omega)+\alpha^2 L_1(\zeta) \end{aligned} r ( ζ ) = − PI ( ζ ) + α ⋅ ( w 1 ( ζ ) + β S σ 1 ( ζ ) + γ ) ⋅ ( w 2 ( ζ ) + β S σ 2 ( ζ ) + γ ) ⋅ ( w 3 ( ζ ) + β S σ 3 ( ζ ) + γ ) ⋅ ( w 4 ( ζ ) + β S σ 4 ( ζ ) + γ ) ⋅ ( w o ( ζ ) + γ ) ⋅ z ( ζ ω ) + α 2 L 1 ( ζ ) Step 10: compute the opening proof polynomials Now we want to prove that the previous openings are correct, as well as r ( X ) r(X) r ( X ) is actually vanishing in H H H . We first squeeze out a challenge v ∈ F v\in\mathbb{F} v ∈ F from the sponge. This is done by showing that one can find a polynomial W ζ ( X ) W_\zeta(X) W ζ ( X ) such that:
W ζ ( X ) = 1 X − ζ ( w 1 ~ ( X ) − w 1 ~ ( ζ ) + v ( w 2 ~ ( X ) − w 2 ~ ( ζ ) ) + v 2 ( w 3 ~ ( X ) − w 3 ~ ( ζ ) ) + v 3 ( w 4 ~ ( X ) − w 4 ~ ( ζ ) ) + v 4 ( w o ~ ( X ) − w o ~ ( ζ ) ) + v 5 ( S σ 1 ( X ) − S σ 1 ( ζ ) ) + v 6 ( S σ 2 ( X ) − S σ 2 ( ζ ) ) + v 7 ( S σ 3 ( X ) − S σ 3 ( ζ ) ) + v 8 ( S σ 4 ( X ) − S σ 4 ( ζ ) ) + v 9 ( r ( X ) − r ( ζ ) ) ) W_\zeta(X) = \frac{1}{X-\zeta}\left(\begin{array}{l} \widetilde{w_1}(X) - \widetilde{w_1}(\zeta)\\ +v(\widetilde{w_2}(X) - \widetilde{w_2}(\zeta))\\ +v^2(\widetilde{w_3}(X) - \widetilde{w_3}(\zeta))\\ +v^3(\widetilde{w_4}(X) - \widetilde{w_4}(\zeta))\\ +v^4(\widetilde{w_o}(X) - \widetilde{w_o}(\zeta))\\ +v^5(S_{\sigma 1}(X) - S_{\sigma 1}(\zeta))\\ +v^6(S_{\sigma 2}(X) - S_{\sigma 2}(\zeta))\\ +v^7(S_{\sigma 3}(X) - S_{\sigma 3}(\zeta))\\ +v^8(S_{\sigma 4}(X) - S_{\sigma 4}(\zeta))\\ +v^9(r(X) - r(\zeta)) \end{array}\right) W ζ ( X ) = X − ζ 1 ⎝ ⎛ w 1 ( X ) − w 1 ( ζ ) + v ( w 2 ( X ) − w 2 ( ζ )) + v 2 ( w 3 ( X ) − w 3 ( ζ )) + v 3 ( w 4 ( X ) − w 4 ( ζ )) + v 4 ( w o ( X ) − w o ( ζ )) + v 5 ( S σ 1 ( X ) − S σ 1 ( ζ )) + v 6 ( S σ 2 ( X ) − S σ 2 ( ζ )) + v 7 ( S σ 3 ( X ) − S σ 3 ( ζ )) + v 8 ( S σ 4 ( X ) − S σ 4 ( ζ )) + v 9 ( r ( X ) − r ( ζ )) ⎠ ⎞ and similar another polynomial W ζ ω ( X ) W_{\zeta\omega}(X) W ζ ω ( X ) as follows.
W ζ ω ( X ) = z ~ ( X ) − z ~ ( ζ ω ) X − ζ ω W_{\zeta\omega}(X) = \frac{\widetilde{z}(X) - \widetilde{z}(\zeta\omega)}{X - \zeta\omega} W ζ ω ( X ) = X − ζ ω z ( X ) − z ( ζ ω ) We commit these two polynomials as c m ζ \mathsf{cm}_{\zeta} cm ζ and c m ζ ω \mathsf{cm}_{\zeta\omega} cm ζ ω .
Step 11: output the full proof After the Fiat-Shamir transform, the final proof reads as follows.
( c m w 1 , c m w 2 , c m w 3 , c m w 4 , c m w o , c m z , c m t 1 , c m t 2 , c m t 3 , c m t 4 , c m t 5 , w 1 ~ ( ζ ) , w 2 ~ ( ζ ) , w 3 ~ ( ζ ) , w 4 ~ ( ζ ) , w o ~ ( ζ ) , S σ 1 ( ζ ) , S σ 2 ( ζ ) , S σ 3 ( ζ ) , S σ 4 ( ζ ) , z ~ ( ζ ω ) , c m ζ , c m ζ ω ) \left(\begin{array}{c} \mathsf{cm}_{w1}, \mathsf{cm}_{w2}, \mathsf{cm}_{w3}, \mathsf{cm}_{w4}, \mathsf{cm}_{wo},\\ \mathsf{cm}_{z}, \\ \mathsf{cm}_{t1}, \mathsf{cm}_{t2}, \mathsf{cm}_{t3}, \mathsf{cm}_{t4}, \mathsf{cm}_{t5},\\ \widetilde{w_1}(\zeta), \widetilde{w_2}(\zeta), \widetilde{w_3}(\zeta), \widetilde{w_4}(\zeta), \widetilde{w_o}(\zeta),\\S_{\sigma 1}(\zeta), S_{\sigma 2}(\zeta), S_{\sigma 3}(\zeta), S_{\sigma 4}(\zeta),\\ \widetilde{z}(\zeta\omega),\\ \mathsf{cm}_{\zeta}, \mathsf{cm}_{\zeta\omega} \end{array}\right) ⎝ ⎛ cm w 1 , cm w 2 , cm w 3 , cm w 4 , cm w o , cm z , cm t 1 , cm t 2 , cm t 3 , cm t 4 , cm t 5 , w 1 ( ζ ) , w 2 ( ζ ) , w 3 ( ζ ) , w 4 ( ζ ) , w o ( ζ ) , S σ 1 ( ζ ) , S σ 2 ( ζ ) , S σ 3 ( ζ ) , S σ 4 ( ζ ) , z ( ζ ω ) , cm ζ , cm ζ ω ⎠ ⎞ Verifier The verifier reads the full proof above and proceed as follows.
Step 1: compute all the challenges For convenience, the verifier first computes all the random challenges in this protocol execution: β \beta β , γ \gamma γ , α \alpha α , ζ \zeta ζ , v v v , and u u u .
Initialize the same cryptographic sponge.
Put c m w 1 , c m w 2 , c m w 3 , c m w 4 , c m w o \mathsf{cm}_{w1}, \mathsf{cm}_{w2}, \mathsf{cm}_{w3}, \mathsf{cm}_{w4}, \mathsf{cm}_{wo} cm w 1 , cm w 2 , cm w 3 , cm w 4 , cm w o into the sponge and squeeze out β , γ ∈ F \beta,\gamma\in\mathbb{F} β , γ ∈ F from the sponge.
Put c m z \mathsf{cm}_{z} cm z into the sponge and squeeze out α ∈ F \alpha\in\mathbb{F} α ∈ F from the sponge.
Put c m t 1 , c m t 2 , c m t 3 , c m t 4 , c m t 5 \mathsf{cm}_{t1}, \mathsf{cm}_{t2}, \mathsf{cm}_{t3}, \mathsf{cm}_{t4}, \mathsf{cm}_{t5} cm t 1 , cm t 2 , cm t 3 , cm t 4 , cm t 5 into the sponge and squeeze out ζ ∈ F \zeta\in\mathbb{F} ζ ∈ F from the sponge.
Put w 1 ~ ( ζ ) , w 2 ~ ( ζ ) , w 3 ~ ( ζ ) , w 4 ~ ( ζ ) , w o ~ ( ζ ) , S σ 1 ( ζ ) , S σ 2 ( ζ ) , S σ 3 ( ζ ) , S σ 4 ( ζ ) , z ~ ( ζ ω ) \widetilde{w_1}(\zeta), \widetilde{w_2}(\zeta), \widetilde{w_3}(\zeta), \widetilde{w_4}(\zeta), \widetilde{w_o}(\zeta), S_{\sigma 1}(\zeta), S_{\sigma 2}(\zeta), S_{\sigma 3}(\zeta), S_{\sigma 4}(\zeta), \widetilde{z}(\zeta \omega) w 1 ( ζ ) , w 2 ( ζ ) , w 3 ( ζ ) , w 4 ( ζ ) , w o ( ζ ) , S σ 1 ( ζ ) , S σ 2 ( ζ ) , S σ 3 ( ζ ) , S σ 4 ( ζ ) , z ( ζ ω ) into the sponge and squeeze out v ∈ F v\in\mathbb{F} v ∈ F from the sponge.
Put c m ζ \mathsf{cm}_{\zeta} cm ζ and c m ζ ω \mathsf{cm}_{\zeta\omega} cm ζ ω into the sponge and squeeze out u ∈ F u\in\mathbb{F} u ∈ F from the sponge.
Step 2: compute r ( ζ ) r(\zeta) r ( ζ ) Recall from the Step 9 of the prover, r ( ζ ) r(\zeta) r ( ζ ) can indeed be computed by the verifier.
r ( ζ ) = − P I ( ζ ) + α ⋅ ( w 1 ~ ( ζ ) + β S σ 1 ( ζ ) + γ ) ⋅ ( w 2 ~ ( ζ ) + β S σ 2 ( ζ ) + γ ) ⋅ ( w 3 ~ ( ζ ) + β S σ 3 ( ζ ) + γ ) ⋅ ( w 4 ~ ( ζ ) + β S σ 4 ( ζ ) + γ ) ⋅ ( w o ~ ( ζ ) + γ ) ⋅ z ~ ( ζ ω ) + α 2 L 1 ( ζ ) \begin{aligned} r(\zeta) &= -\mathsf{PI}(\zeta)+\alpha\cdot(\widetilde{w_1}(\zeta) + \beta S_{\sigma1}(\zeta) + \gamma) \cdot(\widetilde{w_2}(\zeta) + \beta S_{\sigma2}(\zeta) + \gamma)\cdot(\widetilde{w_3}(\zeta) + \beta S_{\sigma3}(\zeta) + \gamma)\\ &\cdot(\widetilde{w_4}(\zeta) + \beta S_{\sigma4}(\zeta) + \gamma)\cdot(\widetilde{w_o}(\zeta)+\gamma)\cdot \widetilde{z}(\zeta \omega)+\alpha^2 L_1(\zeta) \end{aligned} r ( ζ ) = − PI ( ζ ) + α ⋅ ( w 1 ( ζ ) + β S σ 1 ( ζ ) + γ ) ⋅ ( w 2 ( ζ ) + β S σ 2 ( ζ ) + γ ) ⋅ ( w 3 ( ζ ) + β S σ 3 ( ζ ) + γ ) ⋅ ( w 4 ( ζ ) + β S σ 4 ( ζ ) + γ ) ⋅ ( w o ( ζ ) + γ ) ⋅ z ( ζ ω ) + α 2 L 1 ( ζ ) Step 3: assemble c m r \mathsf{cm}_r cm r The verifier can also assemble the commitment of r ( X ) r(X) r ( X ) from available commitments, as follows.
c m r = c m s a t + c m r 1 ⋅ α − c m r 2 ⋅ α + c m r 3 ⋅ α 2 − Z H ( ζ ) ⋅ ( c m t 1 + ζ n + 2 ⋅ c m t 2 + ζ 2 ( n + 2 ) ⋅ c m t 3 + ζ 3 ( n + 2 ) ⋅ c m t 4 + ζ 4 ( n + 2 ) ⋅ c m t 5 ) + c m b ⋅ ( w 2 ~ ( ζ ) ⋅ ( w 2 ~ ( ζ ) − 1 ) ⋅ α 3 + w 3 ~ ( ζ ) ⋅ ( w 3 ~ ( ζ ) − 1 ) ⋅ α 4 + w 4 ~ ( ζ ) ⋅ ( w 4 ~ ( ζ ) − 1 ) ⋅ α 5 ) \begin{aligned} \mathsf{cm}_{r} &= \mathsf{cm}_{sat} + \mathsf{cm}_{r 1}\cdot \alpha - \mathsf{cm}_{r 2}\cdot \alpha + \mathsf{cm}_{r 3}\cdot \alpha^2\\ &- Z_H(\zeta)\cdot(\mathsf{cm}_{t1} + \zeta^{n+2}\cdot \mathsf{cm}_{t2}+ \zeta^{2(n+2)}\cdot \mathsf{cm}_{t3}+ \zeta^{3(n+2)}\cdot \mathsf{cm}_{t4}+ \zeta^{4(n+2)}\cdot \mathsf{cm}_{t5})\\ &+ \mathsf{cm}_{b} \cdot (\widetilde{w_2}(\zeta)\cdot (\widetilde{w_2}(\zeta) - 1)\cdot \alpha^3 + \widetilde{w_3}(\zeta)\cdot (\widetilde{w_3}(\zeta) - 1)\cdot \alpha^4 + \widetilde{w_4}(\zeta)\cdot (\widetilde{w_4}(\zeta) - 1)\cdot \alpha^5) \end{aligned} cm r = cm s a t + cm r 1 ⋅ α − cm r 2 ⋅ α + cm r 3 ⋅ α 2 − Z H ( ζ ) ⋅ ( cm t 1 + ζ n + 2 ⋅ cm t 2 + ζ 2 ( n + 2 ) ⋅ cm t 3 + ζ 3 ( n + 2 ) ⋅ cm t 4 + ζ 4 ( n + 2 ) ⋅ cm t 5 ) + cm b ⋅ ( w 2 ( ζ ) ⋅ ( w 2 ( ζ ) − 1 ) ⋅ α 3 + w 3 ( ζ ) ⋅ ( w 3 ( ζ ) − 1 ) ⋅ α 4 + w 4 ( ζ ) ⋅ ( w 4 ( ζ ) − 1 ) ⋅ α 5 ) where
c m s a t = w 1 ~ ( ζ ) ⋅ c m q 1 + w 2 ~ ( ζ ) ⋅ c m q 2 + w 3 ~ ( ζ ) ⋅ c m q 3 + w 4 ~ ( ζ ) ⋅ c m q 4 + w 1 ~ ( ζ ) ⋅ w 2 ~ ( ζ ) ⋅ c m m 1 + w 3 ~ ( ζ ) ⋅ w 4 ~ ( ζ ) ⋅ c m m 2 + c m q c + w 1 ~ ( ζ ) ⋅ w 2 ~ ( ζ ) ⋅ w 3 ~ ( ζ ) ⋅ w 4 ~ ( ζ ) ⋅ w o ~ ( ζ ) ⋅ c m e c c + ( w 1 ~ ( ζ ) ) 5 ⋅ c m h a s h 1 + ( w 2 ~ ( ζ ) ) 5 ⋅ c m h a s h 2 + ( w 3 ~ ( ζ ) ) 5 ⋅ c m h a s h 3 + ( w 4 ~ ( ζ ) ) 5 ⋅ c m h a s h 4 − w o ~ ( ζ ) ⋅ c m o \begin{aligned} \mathsf{cm}_{sat} &= \widetilde{w_1}(\zeta)\cdot \mathsf{cm}_{q1}+\widetilde{w_2}(\zeta)\cdot \mathsf{cm}_{q2} + \widetilde{w_3}(\zeta)\cdot \mathsf{cm}_{q3}+ \widetilde{w_4}(\zeta)\cdot \mathsf{cm}_{q4}\\ &+\widetilde{w_1}(\zeta)\cdot\widetilde{w_2}(\zeta)\cdot \mathsf{cm}_{m1}+\widetilde{w_3}(\zeta)\cdot\widetilde{w_4}(\zeta)\cdot \mathsf{cm}_{m2}+\mathsf{cm}_{qc}\\ &+\widetilde{w_1}(\zeta)\cdot\widetilde{w_2}(\zeta)\cdot\widetilde{w_3}(\zeta)\cdot\widetilde{w_4}(\zeta)\cdot\widetilde{w_o}(\zeta)\cdot \mathsf{cm}_{ecc}\\ &+(\widetilde{w_1}(\zeta))^5\cdot \mathsf{cm}_{hash1}+(\widetilde{w_2}(\zeta))^5\cdot \mathsf{cm}_{hash2}\\ &+(\widetilde{w_3}(\zeta))^5\cdot \mathsf{cm}_{hash3}+(\widetilde{w_4}(\zeta))^5\cdot \mathsf{cm}_{hash4}\\ &-\widetilde{w_o}(\zeta)\cdot \mathsf{cm}_o \end{aligned} cm s a t = w 1 ( ζ ) ⋅ cm q 1 + w 2 ( ζ ) ⋅ cm q 2 + w 3 ( ζ ) ⋅ cm q 3 + w 4 ( ζ ) ⋅ cm q 4 + w 1 ( ζ ) ⋅ w 2 ( ζ ) ⋅ cm m 1 + w 3 ( ζ ) ⋅ w 4 ( ζ ) ⋅ cm m 2 + cm q c + w 1 ( ζ ) ⋅ w 2 ( ζ ) ⋅ w 3 ( ζ ) ⋅ w 4 ( ζ ) ⋅ w o ( ζ ) ⋅ cm ecc + ( w 1 ( ζ ) ) 5 ⋅ cm ha s h 1 + ( w 2 ( ζ ) ) 5 ⋅ cm ha s h 2 + ( w 3 ( ζ ) ) 5 ⋅ cm ha s h 3 + ( w 4 ( ζ ) ) 5 ⋅ cm ha s h 4 − w o ( ζ ) ⋅ cm o and
c m r 1 = ( w 1 ~ ( ζ ) + β ⋅ ζ + γ ) ⋅ ( w 2 ~ ( ζ ) + β ⋅ k 1 ⋅ ζ + γ ) ⋅ ( w 3 ~ ( ζ ) + β ⋅ k 2 ⋅ ζ + γ ) ⋅ ( w 4 ~ ( ζ ) + β ⋅ k 3 ⋅ ζ + γ ) ⋅ ( w o ~ ( ζ ) + β ⋅ k 4 ⋅ ζ + γ ) ⋅ c m z \begin{aligned} \mathsf{cm}_{r 1} = &(\widetilde{w_1}(\zeta) + \beta\cdot \zeta +\gamma)\cdot (\widetilde{w_2}(\zeta) + \beta\cdot k_1\cdot \zeta +\gamma)\cdot (\widetilde{w_3}(\zeta) + \beta\cdot k_2\cdot \zeta +\gamma)\\ &\cdot (\widetilde{w_4}(\zeta) + \beta\cdot k_3\cdot \zeta +\gamma)\cdot (\widetilde{w_o}(\zeta) + \beta\cdot k_4\cdot \zeta +\gamma)\cdot \mathsf{cm}_{z} \end{aligned} cm r 1 = ( w 1 ( ζ ) + β ⋅ ζ + γ ) ⋅ ( w 2 ( ζ ) + β ⋅ k 1 ⋅ ζ + γ ) ⋅ ( w 3 ( ζ ) + β ⋅ k 2 ⋅ ζ + γ ) ⋅ ( w 4 ( ζ ) + β ⋅ k 3 ⋅ ζ + γ ) ⋅ ( w o ( ζ ) + β ⋅ k 4 ⋅ ζ + γ ) ⋅ cm z and
c m r 2 = ( w 1 ~ ( ζ ) + β S σ 1 ( ζ ) + γ ) ⋅ ( w 2 ~ ( ζ ) + β S σ 2 ( ζ ) + γ ) ⋅ ( w 3 ~ ( ζ ) + β S σ 3 ( ζ ) + γ ) ⋅ ( w 4 ~ ( ζ ) + β S σ 4 ( ζ ) + γ ) ⋅ β ⋅ z ~ ( ζ ω ) ⋅ c m σ o \begin{aligned} \mathsf{cm}_{r 2} =&(\widetilde{w_1}(\zeta) + \beta S_{\sigma 1}(\zeta) +\gamma)\cdot (\widetilde{w_2}(\zeta) + \beta S_{\sigma 2}(\zeta) +\gamma)\cdot (\widetilde{w_3}(\zeta) + \beta S_{\sigma 3}(\zeta) +\gamma)\\ &\cdot (\widetilde{w_4}(\zeta) + \beta S_{\sigma 4}(\zeta) +\gamma)\cdot \beta\cdot \widetilde{z}(\zeta \omega)\cdot \mathsf{cm}_{\sigma o} \end{aligned} cm r 2 = ( w 1 ( ζ ) + β S σ 1 ( ζ ) + γ ) ⋅ ( w 2 ( ζ ) + β S σ 2 ( ζ ) + γ ) ⋅ ( w 3 ( ζ ) + β S σ 3 ( ζ ) + γ ) ⋅ ( w 4 ( ζ ) + β S σ 4 ( ζ ) + γ ) ⋅ β ⋅ z ( ζ ω ) ⋅ cm σ o and
c m r 3 = L 1 ( ζ ) ⋅ c m z \begin{aligned} \mathsf{cm}_{r 3} = L_1(\zeta)\cdot \mathsf{cm}_{z} \end{aligned} cm r 3 = L 1 ( ζ ) ⋅ cm z Step 4: compute linear combination of commitments Let the cumulative commitment c m \mathsf{cm} cm be as follows. Note that the last one has a coefficient u u u .
c m = c m w 1 + v ⋅ c m w 2 + v 2 ⋅ c m w 3 + v 3 ⋅ c m w 4 + v 4 ⋅ c m w o + v 5 ⋅ c m σ 1 + v 6 ⋅ c m σ 2 + v 7 ⋅ c m σ 3 + v 8 ⋅ c m σ 4 + v 9 ⋅ c m r + u ⋅ c m z \begin{aligned} \mathsf{cm} &= \mathsf{cm}_{w1} + v\cdot \mathsf{cm}_{w2} + v^2\cdot \mathsf{cm}_{w3} + v^3\cdot\mathsf{cm}_{w4} + v^4\cdot\mathsf{cm}_{wo}\\ &+v^5\cdot\mathsf{cm}_{\sigma 1}+v^6\cdot\mathsf{cm}_{\sigma 2}+v^7\cdot\mathsf{cm}_{\sigma 3}+v^8\cdot\mathsf{cm}_{\sigma 4} + v^9\cdot \mathsf{cm}_r + u\cdot \mathsf{cm}_{z} \end{aligned} cm = cm w 1 + v ⋅ cm w 2 + v 2 ⋅ cm w 3 + v 3 ⋅ cm w 4 + v 4 ⋅ cm w o + v 5 ⋅ cm σ 1 + v 6 ⋅ cm σ 2 + v 7 ⋅ cm σ 3 + v 8 ⋅ cm σ 4 + v 9 ⋅ cm r + u ⋅ cm z Step 5: compute linear combination of evaluations Let the cumulative evaluation s s s be as follows. Also, note the last one.
s = w 1 ~ ( ζ ) + v ⋅ w 2 ~ ( ζ ) + v 2 ⋅ w 3 ~ ( ζ ) + v 3 ⋅ w 4 ~ ( ζ ) + v 4 ⋅ w o ~ ( ζ ) + v 5 ⋅ S σ 1 ( ζ ) + v 6 ⋅ S σ 2 ( ζ ) + v 7 ⋅ S σ 3 ( ζ ) + v 8 ⋅ S σ 4 ( ζ ) + v 9 ⋅ r ( ζ ) + u ⋅ z ~ ( ζ ω ) \begin{aligned} s &= \widetilde{w_1}(\zeta) + v\cdot \widetilde{w_2}(\zeta) + v^2\cdot \widetilde{w_3}(\zeta) + v^3\cdot\widetilde{w_4}(\zeta)+ v^4\cdot\widetilde{w_o}(\zeta)\\ &+ v^5\cdot S_{\sigma 1}(\zeta)+v^6\cdot S_{\sigma 2}(\zeta) + v^7\cdot S_{\sigma 3}(\zeta) + v^8\cdot S_{\sigma 4}(\zeta) + v^9\cdot r(\zeta) + u\cdot \widetilde{z}(\zeta\omega) \end{aligned} s = w 1 ( ζ ) + v ⋅ w 2 ( ζ ) + v 2 ⋅ w 3 ( ζ ) + v 3 ⋅ w 4 ( ζ ) + v 4 ⋅ w o ( ζ ) + v 5 ⋅ S σ 1 ( ζ ) + v 6 ⋅ S σ 2 ( ζ ) + v 7 ⋅ S σ 3 ( ζ ) + v 8 ⋅ S σ 4 ( ζ ) + v 9 ⋅ r ( ζ ) + u ⋅ z ( ζ ω ) Step 6: pairing Compute L , R L, R L , R as follows.
L = e ( ( c m ζ + u ⋅ c m ζ ω ) , x ⋅ H ) L = e((\mathsf{cm}_{\zeta} + u\cdot \mathsf{cm}_{\zeta\omega}), x\cdot H) L = e (( cm ζ + u ⋅ cm ζ ω ) , x ⋅ H ) where H H H is the generator of G 2 \mathbb{G}_2 G 2 in the SRS and x x x is the secret in the SRS. The element x ⋅ H x\cdot H x ⋅ H here is part of the SRS.
R = e ( ( ζ ⋅ c m ζ + u ⋅ ζ ⋅ ω ⋅ c m ζ ω + c m − s ⋅ G ) , H ) R = e((\zeta\cdot\mathsf{cm}_{\zeta}+u\cdot\zeta\cdot\omega\cdot\mathsf{cm}_{\zeta\omega}+\mathsf{cm} - s\cdot G), H) R = e (( ζ ⋅ cm ζ + u ⋅ ζ ⋅ ω ⋅ cm ζ ω + cm − s ⋅ G ) , H ) where G G G is the generator of G 1 \mathbb{G}_1 G 1 in the SRS.
Step 7: decision The verifier accepts the proof if L = R L = R L = R and rejects otherwise.