@@ -194,39 +194,38 @@ impl<E: PairingEngine> MultilinearPC<E> {
194194 value : E :: Fr ,
195195 proof : & Proof < E > ,
196196 ) -> bool {
197- let left = E :: pairing (
198- commitment. g_product . into_projective ( ) - & vk. g . mul ( value) ,
199- vk. h ,
200- ) ;
201-
202197 let scalar_size = E :: Fr :: size_in_bits ( ) ;
203- let window_size = FixedBase :: get_mul_window_size ( vk . nv ) ;
198+ let window_size = FixedBaseMSM :: get_mul_window_size ( verifier_param . num_vars ) ;
204199
205- let g_table = FixedBase :: get_window_table ( scalar_size, window_size, vk. g . into_projective ( ) ) ;
206- let g_mul: Vec < E :: G1Projective > = FixedBase :: msm ( scalar_size, window_size, & g_table, point) ;
200+ let g_table = FixedBaseMSM :: get_window_table (
201+ scalar_size,
202+ window_size,
203+ verifier_param. g . into_projective ( ) ,
204+ ) ;
205+ let g_mul: Vec < E :: G1Projective > =
206+ FixedBaseMSM :: multi_scalar_mul ( scalar_size, window_size, & g_table, point) ;
207207
208- let pairing_lefts: Vec < _ > = ( 0 ..vk. nv )
209- . map ( |i| vk. g_mask_random [ i] . into_projective ( ) - & g_mul[ i] )
210- . collect ( ) ;
211- let pairing_lefts: Vec < E :: G1Affine > =
212- E :: G1Projective :: batch_normalization_into_affine ( & pairing_lefts) ;
213- let pairing_lefts: Vec < E :: G1Prepared > = pairing_lefts
214- . into_iter ( )
215- . map ( |x| E :: G1Prepared :: from ( x) )
208+ let mut g1_vec: Vec < _ > = ( 0 ..verifier_param. num_vars )
209+ . map ( |i| verifier_param. g_mask [ i] . into_projective ( ) - g_mul[ i] )
216210 . collect ( ) ;
211+ g1_vec. push ( verifier_param. g . mul ( value) - commitment. g_product . into_projective ( ) ) ;
217212
218- let pairing_rights: Vec < E :: G2Prepared > = proof
219- . proofs
220- . iter ( )
221- . map ( |x| E :: G2Prepared :: from ( * x) )
222- . collect ( ) ;
213+ let g1_vec: Vec < E :: G1Affine > = E :: G1Projective :: batch_normalization_into_affine ( & g1_vec) ;
214+ let tmp = g1_vec[ verifier_param. num_vars ] ;
223215
224- let pairings: Vec < _ > = pairing_lefts
216+ let mut pairings: Vec < _ > = g1_vec
225217 . into_iter ( )
226- . zip ( pairing_rights. into_iter ( ) )
218+ . take ( verifier_param. num_vars )
219+ . map ( E :: G1Prepared :: from)
220+ . zip ( proof. proofs . iter ( ) . map ( |& x| E :: G2Prepared :: from ( x) ) )
227221 . collect ( ) ;
228- let right = E :: product_of_pairings ( pairings. iter ( ) ) ;
229- left == right
222+
223+ pairings. push ( (
224+ E :: G1Prepared :: from ( tmp) ,
225+ E :: G2Prepared :: from ( verifier_param. h ) ,
226+ ) ) ;
227+
228+ E :: product_of_pairings ( pairings. iter ( ) ) == E :: Fqk :: one ( )
230229 }
231230}
232231
0 commit comments