@@ -198,37 +198,29 @@ static void secp256k1_ge_set_gej_var(secp256k1_ge *r, secp256k1_gej *a) {
198198static void secp256k1_ge_set_all_gej (secp256k1_ge * r , const secp256k1_gej * a , size_t len ) {
199199 secp256k1_fe u ;
200200 size_t i ;
201- size_t last_i = SIZE_MAX ;
202201#ifdef VERIFY
203202 for (i = 0 ; i < len ; i ++ ) {
204203 SECP256K1_GEJ_VERIFY (& a [i ]);
205204 VERIFY_CHECK (!secp256k1_gej_is_infinity (& a [i ]));
206205 }
207206#endif
208207
209- for (i = 0 ; i < len ; i ++ ) {
210- /* Use destination's x coordinates as scratch space */
211- if (last_i == SIZE_MAX ) {
212- r [i ].x = a [i ].z ;
213- } else {
214- secp256k1_fe_mul (& r [i ].x , & r [last_i ].x , & a [i ].z );
215- }
216- last_i = i ;
217- }
218- if (last_i == SIZE_MAX ) {
208+ if (len == 0 ) {
219209 return ;
220210 }
221- secp256k1_fe_inv (& u , & r [last_i ].x );
222211
223- i = last_i ;
224- while (i > 0 ) {
225- i -- ;
226- secp256k1_fe_mul (& r [last_i ].x , & r [i ].x , & u );
227- secp256k1_fe_mul (& u , & u , & a [last_i ].z );
228- last_i = i ;
212+ /* Use destination's x coordinates as scratch space */
213+ r [0 ].x = a [0 ].z ;
214+ for (i = 1 ; i < len ; i ++ ) {
215+ secp256k1_fe_mul (& r [i ].x , & r [i - 1 ].x , & a [i ].z );
229216 }
230- VERIFY_CHECK (!a [last_i ].infinity );
231- r [last_i ].x = u ;
217+ secp256k1_fe_inv (& u , & r [len - 1 ].x );
218+
219+ for (i = len - 1 ; i > 0 ; i -- ) {
220+ secp256k1_fe_mul (& r [i ].x , & r [i - 1 ].x , & u );
221+ secp256k1_fe_mul (& u , & u , & a [i ].z );
222+ }
223+ r [0 ].x = u ;
232224
233225 for (i = 0 ; i < len ; i ++ ) {
234226 secp256k1_ge_set_gej_zinv (& r [i ], & a [i ], & r [i ].x );
0 commit comments