@@ -66,76 +66,70 @@ static void secp256k1_scalar_inverse(secp256k1_scalar *r, const secp256k1_scalar
66
66
#else
67
67
secp256k1_scalar * t ;
68
68
int i ;
69
- /* First compute x ^ (2^N - 1) for some values of N. */
70
- secp256k1_scalar x2 , x3 , x4 , x6 , x7 , x8 , x15 , x30 , x60 , x120 , x127 ;
69
+ /* First compute xN as x ^ (2^N - 1) for some values of N,
70
+ * and uM as x ^ M for some values of M. */
71
+ secp256k1_scalar x2 , x3 , x6 , x8 , x14 , x28 , x56 , x112 , x126 ;
72
+ secp256k1_scalar u2 , u5 ;
71
73
72
- secp256k1_scalar_sqr (& x2 , x );
73
- secp256k1_scalar_mul (& x2 , & x2 , x );
74
+ secp256k1_scalar_sqr (& u2 , x );
75
+ secp256k1_scalar_mul (& x2 , & u2 , x );
76
+ secp256k1_scalar_mul (& u5 , & u2 , & x2 );
77
+ secp256k1_scalar_mul (& x3 , & u5 , & u2 );
74
78
75
- secp256k1_scalar_sqr (& x3 , & x2 );
76
- secp256k1_scalar_mul (& x3 , & x3 , x );
77
-
78
- secp256k1_scalar_sqr (& x4 , & x3 );
79
- secp256k1_scalar_mul (& x4 , & x4 , x );
80
-
81
- secp256k1_scalar_sqr (& x6 , & x4 );
82
- secp256k1_scalar_sqr (& x6 , & x6 );
83
- secp256k1_scalar_mul (& x6 , & x6 , & x2 );
84
-
85
- secp256k1_scalar_sqr (& x7 , & x6 );
86
- secp256k1_scalar_mul (& x7 , & x7 , x );
79
+ secp256k1_scalar_sqr (& x6 , & x3 );
80
+ for (i = 0 ; i < 2 ; i ++ ) {
81
+ secp256k1_scalar_sqr (& x6 , & x6 );
82
+ }
83
+ secp256k1_scalar_mul (& x6 , & x6 , & x3 );
87
84
88
- secp256k1_scalar_sqr (& x8 , & x7 );
89
- secp256k1_scalar_mul (& x8 , & x8 , x );
85
+ secp256k1_scalar_sqr (& x8 , & x6 );
86
+ secp256k1_scalar_sqr (& x8 , & x8 );
87
+ secp256k1_scalar_mul (& x8 , & x8 , & x2 );
90
88
91
- secp256k1_scalar_sqr (& x15 , & x8 );
92
- for (i = 0 ; i < 6 ; i ++ ) {
93
- secp256k1_scalar_sqr (& x15 , & x15 );
89
+ secp256k1_scalar_sqr (& x14 , & x8 );
90
+ for (i = 0 ; i < 5 ; i ++ ) {
91
+ secp256k1_scalar_sqr (& x14 , & x14 );
94
92
}
95
- secp256k1_scalar_mul (& x15 , & x15 , & x7 );
93
+ secp256k1_scalar_mul (& x14 , & x14 , & x6 );
96
94
97
- secp256k1_scalar_sqr (& x30 , & x15 );
98
- for (i = 0 ; i < 14 ; i ++ ) {
99
- secp256k1_scalar_sqr (& x30 , & x30 );
95
+ secp256k1_scalar_sqr (& x28 , & x14 );
96
+ for (i = 0 ; i < 13 ; i ++ ) {
97
+ secp256k1_scalar_sqr (& x28 , & x28 );
100
98
}
101
- secp256k1_scalar_mul (& x30 , & x30 , & x15 );
99
+ secp256k1_scalar_mul (& x28 , & x28 , & x14 );
102
100
103
- secp256k1_scalar_sqr (& x60 , & x30 );
104
- for (i = 0 ; i < 29 ; i ++ ) {
105
- secp256k1_scalar_sqr (& x60 , & x60 );
101
+ secp256k1_scalar_sqr (& x56 , & x28 );
102
+ for (i = 0 ; i < 27 ; i ++ ) {
103
+ secp256k1_scalar_sqr (& x56 , & x56 );
106
104
}
107
- secp256k1_scalar_mul (& x60 , & x60 , & x30 );
105
+ secp256k1_scalar_mul (& x56 , & x56 , & x28 );
108
106
109
- secp256k1_scalar_sqr (& x120 , & x60 );
110
- for (i = 0 ; i < 59 ; i ++ ) {
111
- secp256k1_scalar_sqr (& x120 , & x120 );
107
+ secp256k1_scalar_sqr (& x112 , & x56 );
108
+ for (i = 0 ; i < 55 ; i ++ ) {
109
+ secp256k1_scalar_sqr (& x112 , & x112 );
112
110
}
113
- secp256k1_scalar_mul (& x120 , & x120 , & x60 );
111
+ secp256k1_scalar_mul (& x112 , & x112 , & x56 );
114
112
115
- secp256k1_scalar_sqr (& x127 , & x120 );
116
- for (i = 0 ; i < 6 ; i ++ ) {
117
- secp256k1_scalar_sqr (& x127 , & x127 );
113
+ secp256k1_scalar_sqr (& x126 , & x112 );
114
+ for (i = 0 ; i < 13 ; i ++ ) {
115
+ secp256k1_scalar_sqr (& x126 , & x126 );
118
116
}
119
- secp256k1_scalar_mul (& x127 , & x127 , & x7 );
117
+ secp256k1_scalar_mul (& x126 , & x126 , & x14 );
120
118
121
- /* Then accumulate the final result (t starts at x127 ). */
122
- t = & x127 ;
123
- for (i = 0 ; i < 2 ; i ++ ) { /* 0 */
119
+ /* Then accumulate the final result (t starts at x126 ). */
120
+ t = & x126 ;
121
+ for (i = 0 ; i < 3 ; i ++ ) {
124
122
secp256k1_scalar_sqr (t , t );
125
123
}
126
- secp256k1_scalar_mul (t , t , x ); /* 1 */
124
+ secp256k1_scalar_mul (t , t , & u5 ); /* 101 */
127
125
for (i = 0 ; i < 4 ; i ++ ) { /* 0 */
128
126
secp256k1_scalar_sqr (t , t );
129
127
}
130
128
secp256k1_scalar_mul (t , t , & x3 ); /* 111 */
131
- for (i = 0 ; i < 2 ; i ++ ) { /* 0 */
132
- secp256k1_scalar_sqr (t , t );
133
- }
134
- secp256k1_scalar_mul (t , t , x ); /* 1 */
135
- for (i = 0 ; i < 2 ; i ++ ) { /* 0 */
129
+ for (i = 0 ; i < 4 ; i ++ ) { /* 0 */
136
130
secp256k1_scalar_sqr (t , t );
137
131
}
138
- secp256k1_scalar_mul (t , t , x ); /* 1 */
132
+ secp256k1_scalar_mul (t , t , & u5 ); /* 101 */
139
133
for (i = 0 ; i < 2 ; i ++ ) { /* 0 */
140
134
secp256k1_scalar_sqr (t , t );
141
135
}
@@ -160,34 +154,26 @@ static void secp256k1_scalar_inverse(secp256k1_scalar *r, const secp256k1_scalar
160
154
secp256k1_scalar_sqr (t , t );
161
155
}
162
156
secp256k1_scalar_mul (t , t , & x2 ); /* 11 */
163
- for (i = 0 ; i < 2 ; i ++ ) { /* 0 */
164
- secp256k1_scalar_sqr (t , t );
165
- }
166
- secp256k1_scalar_mul (t , t , x ); /* 1 */
167
- for (i = 0 ; i < 2 ; i ++ ) { /* 0 */
157
+ for (i = 0 ; i < 4 ; i ++ ) { /* 0 */
168
158
secp256k1_scalar_sqr (t , t );
169
159
}
170
- secp256k1_scalar_mul (t , t , x ); /* 1 */
171
- for (i = 0 ; i < 5 ; i ++ ) { /* 0 */
160
+ secp256k1_scalar_mul (t , t , & u5 ); /* 101 */
161
+ for (i = 0 ; i < 4 ; i ++ ) { /* 0 */
172
162
secp256k1_scalar_sqr (t , t );
173
163
}
174
- secp256k1_scalar_mul (t , t , & x4 ); /* 1111 */
175
- for (i = 0 ; i < 2 ; i ++ ) { /* 0 */
164
+ secp256k1_scalar_mul (t , t , & x3 ); /* 111 */
165
+ for (i = 0 ; i < 3 ; i ++ ) {
176
166
secp256k1_scalar_sqr (t , t );
177
167
}
178
- secp256k1_scalar_mul (t , t , x ); /* 1 */
168
+ secp256k1_scalar_mul (t , t , & u5 ); /* 101 */
179
169
for (i = 0 ; i < 3 ; i ++ ) { /* 00 */
180
170
secp256k1_scalar_sqr (t , t );
181
171
}
182
172
secp256k1_scalar_mul (t , t , x ); /* 1 */
183
- for (i = 0 ; i < 4 ; i ++ ) { /* 000 */
184
- secp256k1_scalar_sqr (t , t );
185
- }
186
- secp256k1_scalar_mul (t , t , x ); /* 1 */
187
- for (i = 0 ; i < 2 ; i ++ ) { /* 0 */
173
+ for (i = 0 ; i < 6 ; i ++ ) { /* 000 */
188
174
secp256k1_scalar_sqr (t , t );
189
175
}
190
- secp256k1_scalar_mul (t , t , x ); /* 1 */
176
+ secp256k1_scalar_mul (t , t , & u5 ); /* 101 */
191
177
for (i = 0 ; i < 10 ; i ++ ) { /* 0000000 */
192
178
secp256k1_scalar_sqr (t , t );
193
179
}
@@ -212,14 +198,14 @@ static void secp256k1_scalar_inverse(secp256k1_scalar *r, const secp256k1_scalar
212
198
secp256k1_scalar_sqr (t , t );
213
199
}
214
200
secp256k1_scalar_mul (t , t , x ); /* 1 */
215
- for (i = 0 ; i < 5 ; i ++ ) { /* 0 */
201
+ for (i = 0 ; i < 4 ; i ++ ) { /* 0 */
216
202
secp256k1_scalar_sqr (t , t );
217
203
}
218
- secp256k1_scalar_mul (t , t , & x4 ); /* 1111 */
219
- for (i = 0 ; i < 2 ; i ++ ) { /* 0 */
204
+ secp256k1_scalar_mul (t , t , & x3 ); /* 111 */
205
+ for (i = 0 ; i < 3 ; i ++ ) {
220
206
secp256k1_scalar_sqr (t , t );
221
207
}
222
- secp256k1_scalar_mul (t , t , x ); /* 1 */
208
+ secp256k1_scalar_mul (t , t , & u5 ); /* 101 */
223
209
for (i = 0 ; i < 5 ; i ++ ) { /* 000 */
224
210
secp256k1_scalar_sqr (t , t );
225
211
}
0 commit comments