@@ -198,37 +198,29 @@ static void secp256k1_ge_set_gej_var(secp256k1_ge *r, secp256k1_gej *a) {
198
198
static void secp256k1_ge_set_all_gej (secp256k1_ge * r , const secp256k1_gej * a , size_t len ) {
199
199
secp256k1_fe u ;
200
200
size_t i ;
201
- size_t last_i = SIZE_MAX ;
202
201
#ifdef VERIFY
203
202
for (i = 0 ; i < len ; i ++ ) {
204
203
SECP256K1_GEJ_VERIFY (& a [i ]);
205
204
VERIFY_CHECK (!secp256k1_gej_is_infinity (& a [i ]));
206
205
}
207
206
#endif
208
207
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 ) {
219
209
return ;
220
210
}
221
- secp256k1_fe_inv (& u , & r [last_i ].x );
222
211
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 );
229
216
}
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 ;
232
224
233
225
for (i = 0 ; i < len ; i ++ ) {
234
226
secp256k1_ge_set_gej_zinv (& r [i ], & a [i ], & r [i ].x );
0 commit comments