@@ -23,8 +23,8 @@ typedef struct {
2323 * precomputed (call it prec(i, n_i)). The formula now becomes sum(prec(i, n_i), i=0..63).
2424 * None of the resulting prec group elements have a known scalar, and neither do any of
2525 * the intermediate sums while computing a*G.
26- * To make memory access uniform, the bytes of prec(i, n_i) are sliced per value of n_i. * /
27- unsigned char prec [64 ][sizeof ( secp256k1_ge_t )][ 16 ]; /* prec[j][k][ i] = k'th byte of (16^j * i * G + U_i) */
26+ */
27+ secp256k1_fe_t prec [64 ][16 ][ 2 ]; /* prec[j][i] = (16^j * i * G + U_i).{x,y} */
2828} secp256k1_ecmult_gen_consts_t ;
2929
3030static const secp256k1_ecmult_gen_consts_t * secp256k1_ecmult_gen_consts = NULL ;
@@ -81,9 +81,9 @@ static void secp256k1_ecmult_gen_start(void) {
8181 }
8282 for (int j = 0 ; j < 64 ; j ++ ) {
8383 for (int i = 0 ; i < 16 ; i ++ ) {
84- const unsigned char * raw = ( const unsigned char * ) (& prec [j * 16 + i ]);
85- for ( size_t k = 0 ; k < sizeof ( secp256k1_ge_t ); k ++ )
86- ret -> prec [j ][k ][ i ] = raw [ k ] ;
84+ VERIFY_CHECK (! secp256k1_ge_is_infinity (& prec [j * 16 + i ]) );
85+ ret -> prec [ j ][ i ][ 0 ] = prec [ j * 16 + i ]. x ;
86+ ret -> prec [j ][i ][ 1 ] = prec [ j * 16 + i ]. y ;
8787 }
8888 }
8989
@@ -104,11 +104,14 @@ static void secp256k1_ecmult_gen(secp256k1_gej_t *r, const secp256k1_scalar_t *g
104104 const secp256k1_ecmult_gen_consts_t * c = secp256k1_ecmult_gen_consts ;
105105 secp256k1_gej_set_infinity (r );
106106 secp256k1_ge_t add ;
107+ add .infinity = 0 ;
107108 int bits ;
108109 for (int j = 0 ; j < 64 ; j ++ ) {
109110 bits = secp256k1_scalar_get_bits (gn , j * 4 , 4 );
110- for (size_t k = 0 ; k < sizeof (secp256k1_ge_t ); k ++ )
111- ((unsigned char * )(& add ))[k ] = c -> prec [j ][k ][bits ];
111+ for (int i = 0 ; i < 16 ; i ++ ) {
112+ secp256k1_fe_cmov (& add .x , & c -> prec [j ][i ][0 ], i == bits );
113+ secp256k1_fe_cmov (& add .y , & c -> prec [j ][i ][1 ], i == bits );
114+ }
112115 secp256k1_gej_add_ge (r , r , & add );
113116 }
114117 bits = 0 ;
0 commit comments