@@ -164,14 +164,12 @@ impl RangeProof {
164164 V : AsRef < [ RistrettoPoint ] >
165165 {
166166 let mut nm: usize = 0 ;
167- let mut dyn_bases_count: usize = 0 ;
168167 let batch = proofs. into_iter ( ) . map ( |( p, vcs, n) | {
169168 let m = vcs. as_ref ( ) . len ( ) ;
170169 let v = p. borrow ( ) . prepare_verification ( n, vcs, & mut transcript. clone ( ) , rng) ;
171- dyn_bases_count += m /*V*/ + 4 /*A,S,T1,T2*/ + 2 * p. borrow ( ) . ipp_proof . L_vec . len ( ) /*{L,R}*/ ;
172170 nm = nm. max ( n* m) ;
173171 v
174- } ) . collect :: < Vec < _ > > ( ) ; // we need to collect here so that nm and dyn_bases_count are computed.
172+ } ) . collect :: < Vec < _ > > ( ) ;
175173
176174 if gens. G . len ( ) < nm {
177175 return Err (
@@ -184,12 +182,16 @@ impl RangeProof {
184182 let mut g_scalars: Vec < Scalar > = iter:: repeat ( Scalar :: zero ( ) ) . take ( nm) . collect ( ) ;
185183 let mut h_scalars: Vec < Scalar > = iter:: repeat ( Scalar :: zero ( ) ) . take ( nm) . collect ( ) ;
186184
187- let mut dynamic_base_scalars: Vec < Scalar > = Vec :: with_capacity ( dyn_bases_count) ;
188- let mut dynamic_bases: Vec < RistrettoPoint > = Vec :: with_capacity ( dyn_bases_count) ;
185+ let dynamic_base_scalars = batch. iter ( ) . flat_map ( |v| {
186+ v. dynamic_base_scalars . iter ( )
187+ } ) ;
188+ let dynamic_bases = batch. iter ( ) . flat_map ( |v| {
189+ v. dynamic_bases . iter ( )
190+ } ) ;
189191
190192 // All statements are added up. Each scalar in each statement
191193 // already has a challenge pre-multiplied in `prepare_verification`.
192- for verification in batch {
194+ for verification in & batch {
193195
194196 pedersen_base_scalars. 0 += verification. pedersen_base_scalars . 0 ;
195197 pedersen_base_scalars. 1 += verification. pedersen_base_scalars . 1 ;
@@ -201,22 +203,19 @@ impl RangeProof {
201203 for ( i, s) in verification. h_scalars . iter ( ) . enumerate ( ) {
202204 h_scalars[ i] += s;
203205 }
204-
205- dynamic_base_scalars. extend ( verification. dynamic_base_scalars ) ;
206- dynamic_bases. extend ( verification. dynamic_bases ) ;
207206 }
208207
209208 let mega_check = ristretto:: vartime:: multiscalar_mul (
210209 iter:: once ( & pedersen_base_scalars. 0 )
211210 . chain ( iter:: once ( & pedersen_base_scalars. 1 ) )
212211 . chain ( g_scalars. iter ( ) )
213212 . chain ( h_scalars. iter ( ) )
214- . chain ( dynamic_base_scalars. iter ( ) ) ,
213+ . chain ( dynamic_base_scalars) ,
215214 iter:: once ( & gens. pedersen_generators . B )
216215 . chain ( iter:: once ( & gens. pedersen_generators . B_blinding ) )
217216 . chain ( gens. G . iter ( ) . take ( nm) )
218217 . chain ( gens. H . iter ( ) . take ( nm) )
219- . chain ( dynamic_bases. iter ( ) ) ,
218+ . chain ( dynamic_bases) ,
220219 ) ;
221220
222221 if mega_check. is_identity ( ) {
0 commit comments