@@ -186,63 +186,45 @@ impl RangeProof {
186186
187187 // Construct concat_z_and_2, an iterator of the values of
188188 // z^0 * \vec(2)^n || z^1 * \vec(2)^n || ... || z^(m-1) * \vec(2)^n
189- let powers_of_2: Vec < Scalar > = util:: exp_iter ( Scalar :: from_u64 ( 2 ) ) . take ( n) . collect ( ) ;
190- let powers_of_z = util:: exp_iter ( z) . take ( m) ;
191- let concat_z_and_2 =
192- powers_of_z. flat_map ( |exp_z| powers_of_2. iter ( ) . map ( move |exp_2| exp_2 * exp_z) ) ;
189+ let powers_of_2: Vec < Scalar > = util:: exp_iter ( Scalar :: from ( 2u64 ) ) . take ( n) . collect ( ) ;
190+ let concat_z_and_2: Vec < Scalar > = util:: exp_iter ( z)
191+ . take ( m)
192+ . flat_map ( |exp_z| powers_of_2. iter ( ) . map ( move |exp_2| exp_2 * exp_z) )
193+ . collect ( ) ;
193194
194195 let g = s. iter ( ) . map ( |s_i| minus_z - a * s_i) ;
195196 let h = s_inv
196197 . zip ( util:: exp_iter ( y. invert ( ) ) )
197- . zip ( concat_z_and_2)
198+ . zip ( concat_z_and_2. iter ( ) )
198199 . map ( |( ( s_i_inv, exp_y_inv) , z_and_2) | z + exp_y_inv * ( zz * z_and_2 - b * s_i_inv) ) ;
199200
200201 let value_commitment_scalars = util:: exp_iter ( z) . take ( m) . map ( |z_exp| c * zz * z_exp) ;
201202 let basepoint_scalar = w * ( self . t_x - a * b) + c * ( delta ( n, m, & y, & z) - self . t_x ) ;
202203
203- let Ls = self
204- . ipp_proof
205- . L_vec
206- . iter ( )
207- . map ( |p| p. decompress ( ) . ok_or ( ProofError :: VerificationError ) )
208- . collect :: < Result < Vec < _ > , _ > > ( ) ?;
209-
210- let Rs = self
211- . ipp_proof
212- . R_vec
213- . iter ( )
214- . map ( |p| p. decompress ( ) . ok_or ( ProofError :: VerificationError ) )
215- . collect :: < Result < Vec < _ > , _ > > ( ) ?;
216-
217- let A = self . A . decompress ( ) . ok_or ( ProofError :: VerificationError ) ?;
218- let S = self . S . decompress ( ) . ok_or ( ProofError :: VerificationError ) ?;
219- let T_1 = self . T_1 . decompress ( ) . ok_or ( ProofError :: VerificationError ) ?;
220- let T_2 = self . T_2 . decompress ( ) . ok_or ( ProofError :: VerificationError ) ?;
221-
222- let mega_check = RistrettoPoint :: vartime_multiscalar_mul (
204+ let mega_check = RistrettoPoint :: optional_multiscalar_mul (
223205 iter:: once ( Scalar :: one ( ) )
224206 . chain ( iter:: once ( x) )
225- . chain ( value_commitment_scalars)
226207 . chain ( iter:: once ( c * x) )
227208 . chain ( iter:: once ( c * x * x) )
209+ . chain ( x_sq. iter ( ) . cloned ( ) )
210+ . chain ( x_inv_sq. iter ( ) . cloned ( ) )
228211 . chain ( iter:: once ( -self . e_blinding - c * self . t_x_blinding ) )
229212 . chain ( iter:: once ( basepoint_scalar) )
230213 . chain ( g)
231214 . chain ( h)
232- . chain ( x_sq. iter ( ) . cloned ( ) )
233- . chain ( x_inv_sq. iter ( ) . cloned ( ) ) ,
234- iter:: once ( & A )
235- . chain ( iter:: once ( & S ) )
236- . chain ( value_commitments. iter ( ) )
237- . chain ( iter:: once ( & T_1 ) )
238- . chain ( iter:: once ( & T_2 ) )
239- . chain ( iter:: once ( & gens. pedersen_generators . B_blinding ) )
240- . chain ( iter:: once ( & gens. pedersen_generators . B ) )
241- . chain ( gens. G . iter ( ) )
242- . chain ( gens. H . iter ( ) )
243- . chain ( Ls . iter ( ) )
244- . chain ( Rs . iter ( ) ) ,
245- ) ;
215+ . chain ( value_commitment_scalars) ,
216+ iter:: once ( self . A . decompress ( ) )
217+ . chain ( iter:: once ( self . S . decompress ( ) ) )
218+ . chain ( iter:: once ( self . T_1 . decompress ( ) ) )
219+ . chain ( iter:: once ( self . T_2 . decompress ( ) ) )
220+ . chain ( self . ipp_proof . L_vec . iter ( ) . map ( |L | L . decompress ( ) ) )
221+ . chain ( self . ipp_proof . R_vec . iter ( ) . map ( |R | R . decompress ( ) ) )
222+ . chain ( iter:: once ( Some ( gens. pedersen_generators . B_blinding ) ) )
223+ . chain ( iter:: once ( Some ( gens. pedersen_generators . B ) ) )
224+ . chain ( gens. G . iter ( ) . map ( |& x| Some ( x) ) )
225+ . chain ( gens. H . iter ( ) . map ( |& x| Some ( x) ) )
226+ . chain ( value_commitments. iter ( ) . map ( |& x| Some ( x) ) ) ,
227+ ) . ok_or_else ( || ProofError :: VerificationError ) ?;
246228
247229 if mega_check. is_identity ( ) {
248230 Ok ( ( ) )
@@ -358,7 +340,7 @@ impl<'de> Deserialize<'de> for RangeProof {
358340/// \\]
359341fn delta ( n : usize , m : usize , y : & Scalar , z : & Scalar ) -> Scalar {
360342 let sum_y = util:: sum_of_powers ( y, n * m) ;
361- let sum_2 = util:: sum_of_powers ( & Scalar :: from_u64 ( 2 ) , n) ;
343+ let sum_2 = util:: sum_of_powers ( & Scalar :: from ( 2u64 ) , n) ;
362344 let sum_z = util:: sum_of_powers ( z, m) ;
363345
364346 ( z - z * z) * sum_y - z * z * z * sum_2 * sum_z
@@ -446,7 +428,7 @@ mod tests {
446428 value_commitments = values
447429 . iter ( )
448430 . zip ( blindings. iter ( ) )
449- . map ( |( & v, & v_blinding) | pg. commit ( Scalar :: from_u64 ( v) , v_blinding) )
431+ . map ( |( & v, & v_blinding) | pg. commit ( Scalar :: from ( v) , v_blinding) )
450432 . collect ( ) ;
451433 }
452434
0 commit comments