@@ -28,7 +28,7 @@ static void secp256k1_ecmult_gen_context_init(secp256k1_ecmult_gen_context *ctx)
2828
2929static void secp256k1_ecmult_gen_context_build (secp256k1_ecmult_gen_context * ctx , void * * prealloc ) {
3030#ifndef USE_ECMULT_STATIC_PRECOMPUTATION
31- secp256k1_ge prec [1024 ];
31+ secp256k1_ge prec [ECMULT_GEN_PREC_N * ECMULT_GEN_PREC_G ];
3232 secp256k1_gej gj ;
3333 secp256k1_gej nums_gej ;
3434 int i , j ;
@@ -40,7 +40,7 @@ static void secp256k1_ecmult_gen_context_build(secp256k1_ecmult_gen_context *ctx
4040 return ;
4141 }
4242#ifndef USE_ECMULT_STATIC_PRECOMPUTATION
43- ctx -> prec = (secp256k1_ge_storage (* )[64 ][ 16 ])manual_alloc (prealloc , prealloc_size , base , prealloc_size );
43+ ctx -> prec = (secp256k1_ge_storage (* )[ECMULT_GEN_PREC_N ][ ECMULT_GEN_PREC_G ])manual_alloc (prealloc , prealloc_size , base , prealloc_size );
4444
4545 /* get the generator */
4646 secp256k1_gej_set_ge (& gj , & secp256k1_ge_const_g );
@@ -64,39 +64,39 @@ static void secp256k1_ecmult_gen_context_build(secp256k1_ecmult_gen_context *ctx
6464
6565 /* compute prec. */
6666 {
67- secp256k1_gej precj [1024 ]; /* Jacobian versions of prec. */
67+ secp256k1_gej precj [ECMULT_GEN_PREC_N * ECMULT_GEN_PREC_G ]; /* Jacobian versions of prec. */
6868 secp256k1_gej gbase ;
6969 secp256k1_gej numsbase ;
70- gbase = gj ; /* 16 ^j * G */
70+ gbase = gj ; /* PREC_G ^j * G */
7171 numsbase = nums_gej ; /* 2^j * nums. */
72- for (j = 0 ; j < 64 ; j ++ ) {
73- /* Set precj[j*16 .. j*16+15 ] to (numsbase, numsbase + gbase, ..., numsbase + 15 *gbase). */
74- precj [j * 16 ] = numsbase ;
75- for (i = 1 ; i < 16 ; i ++ ) {
76- secp256k1_gej_add_var (& precj [j * 16 + i ], & precj [j * 16 + i - 1 ], & gbase , NULL );
72+ for (j = 0 ; j < ECMULT_GEN_PREC_N ; j ++ ) {
73+ /* Set precj[j*PREC_G .. j*PREC_G+(PREC_G-1) ] to (numsbase, numsbase + gbase, ..., numsbase + (PREC_G-1) *gbase). */
74+ precj [j * ECMULT_GEN_PREC_G ] = numsbase ;
75+ for (i = 1 ; i < ECMULT_GEN_PREC_G ; i ++ ) {
76+ secp256k1_gej_add_var (& precj [j * ECMULT_GEN_PREC_G + i ], & precj [j * ECMULT_GEN_PREC_G + i - 1 ], & gbase , NULL );
7777 }
78- /* Multiply gbase by 16 . */
79- for (i = 0 ; i < 4 ; i ++ ) {
78+ /* Multiply gbase by PREC_G . */
79+ for (i = 0 ; i < ECMULT_GEN_PREC_B ; i ++ ) {
8080 secp256k1_gej_double_var (& gbase , & gbase , NULL );
8181 }
8282 /* Multiply numbase by 2. */
8383 secp256k1_gej_double_var (& numsbase , & numsbase , NULL );
84- if (j == 62 ) {
84+ if (j == ECMULT_GEN_PREC_N - 2 ) {
8585 /* In the last iteration, numsbase is (1 - 2^j) * nums instead. */
8686 secp256k1_gej_neg (& numsbase , & numsbase );
8787 secp256k1_gej_add_var (& numsbase , & numsbase , & nums_gej , NULL );
8888 }
8989 }
90- secp256k1_ge_set_all_gej_var (prec , precj , 1024 );
90+ secp256k1_ge_set_all_gej_var (prec , precj , ECMULT_GEN_PREC_N * ECMULT_GEN_PREC_G );
9191 }
92- for (j = 0 ; j < 64 ; j ++ ) {
93- for (i = 0 ; i < 16 ; i ++ ) {
94- secp256k1_ge_to_storage (& (* ctx -> prec )[j ][i ], & prec [j * 16 + i ]);
92+ for (j = 0 ; j < ECMULT_GEN_PREC_N ; j ++ ) {
93+ for (i = 0 ; i < ECMULT_GEN_PREC_G ; i ++ ) {
94+ secp256k1_ge_to_storage (& (* ctx -> prec )[j ][i ], & prec [j * ECMULT_GEN_PREC_G + i ]);
9595 }
9696 }
9797#else
9898 (void )prealloc ;
99- ctx -> prec = (secp256k1_ge_storage (* )[64 ][ 16 ])secp256k1_ecmult_static_context ;
99+ ctx -> prec = (secp256k1_ge_storage (* )[ECMULT_GEN_PREC_N ][ ECMULT_GEN_PREC_G ])secp256k1_ecmult_static_context ;
100100#endif
101101 secp256k1_ecmult_gen_blind (ctx , NULL );
102102}
@@ -109,7 +109,7 @@ static void secp256k1_ecmult_gen_context_finalize_memcpy(secp256k1_ecmult_gen_co
109109#ifndef USE_ECMULT_STATIC_PRECOMPUTATION
110110 if (src -> prec != NULL ) {
111111 /* We cast to void* first to suppress a -Wcast-align warning. */
112- dst -> prec = (secp256k1_ge_storage (* )[64 ][ 16 ])(void * )((unsigned char * )dst + ((unsigned char * )src -> prec - (unsigned char * )src ));
112+ dst -> prec = (secp256k1_ge_storage (* )[ECMULT_GEN_PREC_N ][ ECMULT_GEN_PREC_G ])(void * )((unsigned char * )dst + ((unsigned char * )src -> prec - (unsigned char * )src ));
113113 }
114114#else
115115 (void )dst , (void )src ;
@@ -133,9 +133,9 @@ static void secp256k1_ecmult_gen(const secp256k1_ecmult_gen_context *ctx, secp25
133133 /* Blind scalar/point multiplication by computing (n-b)G + bG instead of nG. */
134134 secp256k1_scalar_add (& gnb , gn , & ctx -> blind );
135135 add .infinity = 0 ;
136- for (j = 0 ; j < 64 ; j ++ ) {
137- bits = secp256k1_scalar_get_bits (& gnb , j * 4 , 4 );
138- for (i = 0 ; i < 16 ; i ++ ) {
136+ for (j = 0 ; j < ECMULT_GEN_PREC_N ; j ++ ) {
137+ bits = secp256k1_scalar_get_bits (& gnb , j * ECMULT_GEN_PREC_B , ECMULT_GEN_PREC_B );
138+ for (i = 0 ; i < ECMULT_GEN_PREC_G ; i ++ ) {
139139 /** This uses a conditional move to avoid any secret data in array indexes.
140140 * _Any_ use of secret indexes has been demonstrated to result in timing
141141 * sidechannels, even when the cache-line access patterns are uniform.
0 commit comments