@@ -28,7 +28,7 @@ static void secp256k1_ecmult_gen_context_init(secp256k1_ecmult_gen_context *ctx)
28
28
29
29
static void secp256k1_ecmult_gen_context_build (secp256k1_ecmult_gen_context * ctx , void * * prealloc ) {
30
30
#ifndef USE_ECMULT_STATIC_PRECOMPUTATION
31
- secp256k1_ge prec [1024 ];
31
+ secp256k1_ge prec [ECMULT_GEN_PREC_N * ECMULT_GEN_PREC_G ];
32
32
secp256k1_gej gj ;
33
33
secp256k1_gej nums_gej ;
34
34
int i , j ;
@@ -40,7 +40,7 @@ static void secp256k1_ecmult_gen_context_build(secp256k1_ecmult_gen_context *ctx
40
40
return ;
41
41
}
42
42
#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 );
44
44
45
45
/* get the generator */
46
46
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
64
64
65
65
/* compute prec. */
66
66
{
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. */
68
68
secp256k1_gej gbase ;
69
69
secp256k1_gej numsbase ;
70
- gbase = gj ; /* 16 ^j * G */
70
+ gbase = gj ; /* PREC_G ^j * G */
71
71
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 );
77
77
}
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 ++ ) {
80
80
secp256k1_gej_double_var (& gbase , & gbase , NULL );
81
81
}
82
82
/* Multiply numbase by 2. */
83
83
secp256k1_gej_double_var (& numsbase , & numsbase , NULL );
84
- if (j == 62 ) {
84
+ if (j == ECMULT_GEN_PREC_N - 2 ) {
85
85
/* In the last iteration, numsbase is (1 - 2^j) * nums instead. */
86
86
secp256k1_gej_neg (& numsbase , & numsbase );
87
87
secp256k1_gej_add_var (& numsbase , & numsbase , & nums_gej , NULL );
88
88
}
89
89
}
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 );
91
91
}
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 ]);
95
95
}
96
96
}
97
97
#else
98
98
(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 ;
100
100
#endif
101
101
secp256k1_ecmult_gen_blind (ctx , NULL );
102
102
}
@@ -109,7 +109,7 @@ static void secp256k1_ecmult_gen_context_finalize_memcpy(secp256k1_ecmult_gen_co
109
109
#ifndef USE_ECMULT_STATIC_PRECOMPUTATION
110
110
if (src -> prec != NULL ) {
111
111
/* 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 ));
113
113
}
114
114
#else
115
115
(void )dst , (void )src ;
@@ -133,9 +133,9 @@ static void secp256k1_ecmult_gen(const secp256k1_ecmult_gen_context *ctx, secp25
133
133
/* Blind scalar/point multiplication by computing (n-b)G + bG instead of nG. */
134
134
secp256k1_scalar_add (& gnb , gn , & ctx -> blind );
135
135
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 ++ ) {
139
139
/** This uses a conditional move to avoid any secret data in array indexes.
140
140
* _Any_ use of secret indexes has been demonstrated to result in timing
141
141
* sidechannels, even when the cache-line access patterns are uniform.
0 commit comments