@@ -162,6 +162,26 @@ static void secp256k1_scalar_cadd_bit(secp256k1_scalar *r, unsigned int bit, int
162
162
#endif
163
163
}
164
164
165
+ static void secp256k1_scalar_sub (secp256k1_scalar * r , const secp256k1_scalar * a , const secp256k1_scalar * b ) {
166
+ uint64_t t = (uint64_t )a -> d [0 ] - b -> d [0 ];
167
+ r -> d [0 ] = t & 0xFFFFFFFFULL ; t >>= 32 ; t |= t << 32 ;
168
+ t += (uint64_t )a -> d [1 ] - b -> d [1 ];
169
+ r -> d [1 ] = t & 0xFFFFFFFFULL ; t >>= 32 ; t |= t << 32 ;
170
+ t += (uint64_t )a -> d [2 ] - b -> d [2 ];
171
+ r -> d [2 ] = t & 0xFFFFFFFFULL ; t >>= 32 ; t |= t << 32 ;
172
+ t += (uint64_t )a -> d [3 ] - b -> d [3 ];
173
+ r -> d [3 ] = t & 0xFFFFFFFFULL ; t >>= 32 ; t |= t << 32 ;
174
+ t += (uint64_t )a -> d [4 ] - b -> d [4 ];
175
+ r -> d [4 ] = t & 0xFFFFFFFFULL ; t >>= 32 ; t |= t << 32 ;
176
+ t += (uint64_t )a -> d [5 ] - b -> d [5 ];
177
+ r -> d [5 ] = t & 0xFFFFFFFFULL ; t >>= 32 ; t |= t << 32 ;
178
+ t += (uint64_t )a -> d [6 ] - b -> d [6 ];
179
+ r -> d [6 ] = t & 0xFFFFFFFFULL ; t >>= 32 ; t |= t << 32 ;
180
+ t += (uint64_t )a -> d [7 ] - b -> d [7 ];
181
+ r -> d [7 ] = t & 0xFFFFFFFFULL ;
182
+ VERIFY_CHECK ((t >> 32 ) == 0 );
183
+ }
184
+
165
185
static void secp256k1_scalar_set_b32 (secp256k1_scalar * r , const unsigned char * b32 , int * overflow ) {
166
186
int over ;
167
187
r -> d [0 ] = (uint32_t )b32 [31 ] | (uint32_t )b32 [30 ] << 8 | (uint32_t )b32 [29 ] << 16 | (uint32_t )b32 [28 ] << 24 ;
@@ -259,47 +279,6 @@ static int secp256k1_scalar_cond_negate(secp256k1_scalar *r, int flag) {
259
279
return 2 * (mask == 0 ) - 1 ;
260
280
}
261
281
262
- static int secp256k1_scalar_complement (secp256k1_scalar * r , const secp256k1_scalar * a ) {
263
- uint64_t t = 1 ;
264
- t += ~a -> d [0 ];
265
- r -> d [0 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
266
- t += ~a -> d [1 ];
267
- r -> d [1 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
268
- t += ~a -> d [2 ];
269
- r -> d [2 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
270
- t += ~a -> d [3 ];
271
- r -> d [3 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
272
- t += ~a -> d [4 ];
273
- r -> d [4 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
274
- t += ~a -> d [5 ];
275
- r -> d [5 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
276
- t += ~a -> d [6 ];
277
- r -> d [6 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
278
- t += ~a -> d [7 ];
279
- r -> d [7 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
280
- return t ;
281
- }
282
-
283
- static int secp256k1_scalar_binadd (secp256k1_scalar * r , const secp256k1_scalar * a , const secp256k1_scalar * b ) {
284
- uint64_t t = (uint64_t )a -> d [0 ] + b -> d [0 ];
285
- r -> d [0 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
286
- t += (uint64_t )a -> d [1 ] + b -> d [1 ];
287
- r -> d [1 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
288
- t += (uint64_t )a -> d [2 ] + b -> d [2 ];
289
- r -> d [2 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
290
- t += (uint64_t )a -> d [3 ] + b -> d [3 ];
291
- r -> d [3 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
292
- t += (uint64_t )a -> d [4 ] + b -> d [4 ];
293
- r -> d [4 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
294
- t += (uint64_t )a -> d [5 ] + b -> d [5 ];
295
- r -> d [5 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
296
- t += (uint64_t )a -> d [6 ] + b -> d [6 ];
297
- r -> d [6 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
298
- t += (uint64_t )a -> d [7 ] + b -> d [7 ];
299
- r -> d [7 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
300
- return t ;
301
- }
302
-
303
282
/* Inspired by the macros in OpenSSL's crypto/bn/asm/x86_64-gcc.c. */
304
283
305
284
/** Add a*b to the number defined by (c0,c1,c2). c2 must never overflow. */
0 commit comments