@@ -45,10 +45,12 @@ pub struct FK20Verifier {
45
45
tau_pow_n : G2Prepared ,
46
46
// [-1]_2
47
47
neg_g2_gen : G2Prepared ,
48
- //
49
- pub coset_gens_pow_n : Vec < Scalar > ,
50
- //
51
- coset_fft_gens : Vec < CosetFFT > ,
48
+ // Bit reversed vector of the coset generators raised
49
+ // to the power of `n`, needed to verify a multi opening proof.
50
+ pub bit_reversed_coset_gens_pow_n : Vec < Scalar > ,
51
+ // Bit reversed vector of the coset generators that
52
+ // we will use to compute an inverse coset IFFT.
53
+ bit_reversed_coset_fft_gens : Vec < CosetFFT > ,
52
54
}
53
55
54
56
impl FK20Verifier {
@@ -86,8 +88,8 @@ impl FK20Verifier {
86
88
coset_domain,
87
89
tau_pow_n,
88
90
neg_g2_gen,
89
- coset_gens_pow_n,
90
- coset_fft_gens,
91
+ bit_reversed_coset_gens_pow_n : coset_gens_pow_n,
92
+ bit_reversed_coset_fft_gens : coset_fft_gens,
91
93
}
92
94
}
93
95
@@ -188,7 +190,7 @@ impl FK20Verifier {
188
190
// Linearly combine the interpolation polynomials using the same randomness `r`
189
191
let random_sum_interpolation_poly = compute_sum_interpolation_poly (
190
192
& self . coset_domain ,
191
- & self . coset_fft_gens ,
193
+ & self . bit_reversed_coset_fft_gens ,
192
194
& bit_reversed_coset_evals,
193
195
& bit_reversed_coset_indices,
194
196
& r_powers,
@@ -198,8 +200,9 @@ impl FK20Verifier {
198
200
. commit_g1 ( & random_sum_interpolation_poly) ;
199
201
200
202
let mut weighted_r_powers = Vec :: with_capacity ( batch_size) ;
201
- for ( coset_index, r_power) in bit_reversed_coset_indices. iter ( ) . zip ( r_powers) {
202
- let coset_gen_pow_n = self . coset_gens_pow_n [ * coset_index as usize ] ;
203
+ for ( bit_reversed_coset_index, r_power) in bit_reversed_coset_indices. iter ( ) . zip ( r_powers) {
204
+ let coset_gen_pow_n =
205
+ self . bit_reversed_coset_gens_pow_n [ * bit_reversed_coset_index as usize ] ;
203
206
weighted_r_powers. push ( r_power * coset_gen_pow_n) ;
204
207
}
205
208
@@ -313,29 +316,29 @@ fn compute_powers(value: Scalar, num_elements: usize) -> Vec<Scalar> {
313
316
314
317
fn compute_sum_interpolation_poly (
315
318
coset_domain : & Domain ,
316
- coset_fft_gens : & [ CosetFFT ] ,
319
+ bit_reversed_coset_fft_gens : & [ CosetFFT ] ,
317
320
bit_reversed_coset_evals : & [ Vec < Scalar > ] ,
318
321
bit_reversed_coset_indices : & [ CosetIndex ] ,
319
322
r_powers : & [ Scalar ] ,
320
323
) -> Vec < Scalar > {
321
324
let mut random_sum_interpolation_poly = Vec :: new ( ) ;
322
- let coset_evals = bit_reversed_coset_evals. to_vec ( ) ;
323
- for ( k, mut coset_eval) in coset_evals. into_iter ( ) . enumerate ( ) {
325
+
326
+ for ( ( mut bit_reversed_coset_eval, bit_reversed_coset_index) , scale_factor) in
327
+ bit_reversed_coset_evals
328
+ . to_vec ( )
329
+ . into_iter ( )
330
+ . zip ( bit_reversed_coset_indices)
331
+ . zip ( r_powers)
332
+ {
324
333
// Reverse the order, so it matches the fft domain
325
- reverse_bit_order ( & mut coset_eval) ;
326
-
327
- // Compute the interpolation polynomial
328
- let index = bit_reversed_coset_indices[ k] as usize ;
329
- let ifft_scalars = coset_domain. coset_ifft_scalars ( coset_eval, & coset_fft_gens[ index] ) ;
330
- // let inv_coset_gen_pow_n = &inv_coset_gens_pow_n[bit_reversed_coset_indices[k] as usize];
331
- // let ifft_scalars: Vec<_> = ifft_scalars
332
- // .into_iter()
333
- // .zip(inv_coset_gen_pow_n)
334
- // .map(|(scalar, inv_h_k_pow)| scalar * inv_h_k_pow)
335
- // .collect();
334
+ reverse_bit_order ( & mut bit_reversed_coset_eval) ;
335
+ let coset_eval = bit_reversed_coset_eval; // variable rename since we un-bit reversed the vector
336
+
337
+ // Compute the interpolation polynomial using a coset fft
338
+ let coset_gen = & bit_reversed_coset_fft_gens[ * bit_reversed_coset_index as usize ] ;
339
+ let ifft_scalars = coset_domain. coset_ifft_scalars ( coset_eval, coset_gen) ;
336
340
337
341
// Scale the interpolation polynomial by the challenge
338
- let scale_factor = r_powers[ k] ;
339
342
let scaled_interpolation_poly = ifft_scalars
340
343
. into_iter ( )
341
344
. map ( |coeff| coeff * scale_factor)
0 commit comments