@@ -22,35 +22,10 @@ static void secp256k1_num_sanity(const secp256k1_num_t *a) {
2222#define secp256k1_num_sanity (a ) do { } while(0)
2323#endif
2424
25- static void secp256k1_num_init (secp256k1_num_t * r ) {
26- r -> neg = 0 ;
27- r -> limbs = 1 ;
28- r -> data [0 ] = 0 ;
29- }
30-
31- static void secp256k1_num_clear (secp256k1_num_t * r ) {
32- memset (r , 0 , sizeof (* r ));
33- }
34-
35- static void secp256k1_num_free (secp256k1_num_t * r ) {
36- (void )r ;
37- }
38-
3925static void secp256k1_num_copy (secp256k1_num_t * r , const secp256k1_num_t * a ) {
4026 * r = * a ;
4127}
4228
43- static int secp256k1_num_bits (const secp256k1_num_t * a ) {
44- int ret = (a -> limbs - 1 )* GMP_NUMB_BITS ;
45- mp_limb_t x = a -> data [a -> limbs - 1 ];
46- while (x ) {
47- x >>= 1 ;
48- ret ++ ;
49- }
50- return ret ;
51- }
52-
53-
5429static void secp256k1_num_get_bin (unsigned char * r , unsigned int rlen , const secp256k1_num_t * a ) {
5530 unsigned char tmp [65 ];
5631 int len = 0 ;
@@ -81,12 +56,6 @@ static void secp256k1_num_set_bin(secp256k1_num_t *r, const unsigned char *a, un
8156 while (r -> limbs > 1 && r -> data [r -> limbs - 1 ]== 0 ) r -> limbs -- ;
8257}
8358
84- static void secp256k1_num_set_int (secp256k1_num_t * r , int a ) {
85- r -> limbs = 1 ;
86- r -> neg = (a < 0 );
87- r -> data [0 ] = (a < 0 ) ? - a : a ;
88- }
89-
9059static void secp256k1_num_add_abs (secp256k1_num_t * r , const secp256k1_num_t * a , const secp256k1_num_t * b ) {
9160 mp_limb_t c = mpn_add (r -> data , a -> data , a -> limbs , b -> data , b -> limbs );
9261 r -> limbs = a -> limbs ;
@@ -165,10 +134,6 @@ static int secp256k1_num_is_zero(const secp256k1_num_t *a) {
165134 return (a -> limbs == 1 && a -> data [0 ] == 0 );
166135}
167136
168- static int secp256k1_num_is_odd (const secp256k1_num_t * a ) {
169- return a -> data [0 ] & 1 ;
170- }
171-
172137static int secp256k1_num_is_neg (const secp256k1_num_t * a ) {
173138 return (a -> limbs > 1 || a -> data [0 ] != 0 ) && a -> neg ;
174139}
@@ -260,12 +225,6 @@ static void secp256k1_num_div(secp256k1_num_t *r, const secp256k1_num_t *a, cons
260225 r -> neg = a -> neg ^ b -> neg ;
261226}
262227
263- static void secp256k1_num_mod_mul (secp256k1_num_t * r , const secp256k1_num_t * a , const secp256k1_num_t * b , const secp256k1_num_t * m ) {
264- secp256k1_num_mul (r , a , b );
265- secp256k1_num_mod (r , m );
266- }
267-
268-
269228static int secp256k1_num_shift (secp256k1_num_t * r , int bits ) {
270229 VERIFY_CHECK (bits <= GMP_NUMB_BITS );
271230 mp_limb_t ret = mpn_rshift (r -> data , r -> data , r -> limbs , bits );
@@ -274,107 +233,8 @@ static int secp256k1_num_shift(secp256k1_num_t *r, int bits) {
274233 return ret ;
275234}
276235
277- static int secp256k1_num_get_bit (const secp256k1_num_t * a , int pos ) {
278- return (a -> limbs * GMP_NUMB_BITS > pos ) && ((a -> data [pos /GMP_NUMB_BITS ] >> (pos % GMP_NUMB_BITS )) & 1 );
279- }
280-
281- static void secp256k1_num_inc (secp256k1_num_t * r ) {
282- mp_limb_t ret = mpn_add_1 (r -> data , r -> data , r -> limbs , (mp_limb_t )1 );
283- if (ret ) {
284- VERIFY_CHECK (r -> limbs < 2 * NUM_LIMBS );
285- r -> data [r -> limbs ++ ] = ret ;
286- }
287- }
288-
289- static void secp256k1_num_set_hex (secp256k1_num_t * r , const char * a , int alen ) {
290- static const unsigned char cvt [256 ] = {
291- 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,
292- 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,
293- 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,
294- 0 , 1 , 2 , 3 , 4 , 5 , 6 ,7 ,8 ,9 ,0 ,0 ,0 ,0 ,0 ,0 ,
295- 0 ,10 ,11 ,12 ,13 ,14 ,15 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,
296- 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,
297- 0 ,10 ,11 ,12 ,13 ,14 ,15 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,
298- 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,
299- 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,
300- 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,
301- 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,
302- 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,
303- 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,
304- 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,
305- 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,
306- 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
307- };
308- unsigned char num [257 ] = {};
309- for (int i = 0 ; i < alen ; i ++ ) {
310- num [i ] = cvt [(unsigned char )a [i ]];
311- }
312- r -> limbs = mpn_set_str (r -> data , num , alen , 16 );
313- r -> neg = 0 ;
314- while (r -> limbs > 1 && r -> data [r -> limbs - 1 ] == 0 ) r -> limbs -- ;
315- }
316-
317- static void secp256k1_num_get_hex (char * r , int rlen , const secp256k1_num_t * a ) {
318- static const unsigned char cvt [16 ] = {'0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , 'A' , 'B' , 'C' , 'D' , 'E' , 'F' };
319- unsigned char * tmp = malloc (257 );
320- mp_size_t len = mpn_get_str (tmp , 16 , (mp_limb_t * )a -> data , a -> limbs );
321- VERIFY_CHECK (len <= rlen );
322- for (int i = 0 ; i < len ; i ++ ) {
323- VERIFY_CHECK (rlen - len + i >= 0 );
324- VERIFY_CHECK (rlen - len + i < rlen );
325- VERIFY_CHECK (tmp [i ] < 16 );
326- r [rlen - len + i ] = cvt [tmp [i ]];
327- }
328- for (int i = 0 ; i < rlen - len ; i ++ ) {
329- VERIFY_CHECK (i >= 0 );
330- VERIFY_CHECK (i < rlen );
331- r [i ] = cvt [0 ];
332- }
333- free (tmp );
334- }
335-
336- static void secp256k1_num_split (secp256k1_num_t * rl , secp256k1_num_t * rh , const secp256k1_num_t * a , int bits ) {
337- VERIFY_CHECK (bits > 0 );
338- rh -> neg = a -> neg ;
339- if (bits >= a -> limbs * GMP_NUMB_BITS ) {
340- * rl = * a ;
341- rh -> limbs = 1 ;
342- rh -> data [0 ] = 0 ;
343- return ;
344- }
345- rl -> limbs = 0 ;
346- rl -> neg = a -> neg ;
347- int left = bits ;
348- while (left >= GMP_NUMB_BITS ) {
349- rl -> data [rl -> limbs ] = a -> data [rl -> limbs ];
350- rl -> limbs ++ ;
351- left -= GMP_NUMB_BITS ;
352- }
353- if (left == 0 ) {
354- mpn_copyi (rh -> data , a -> data + rl -> limbs , a -> limbs - rl -> limbs );
355- rh -> limbs = a -> limbs - rl -> limbs ;
356- } else {
357- mpn_rshift (rh -> data , a -> data + rl -> limbs , a -> limbs - rl -> limbs , left );
358- rh -> limbs = a -> limbs - rl -> limbs ;
359- while (rh -> limbs > 1 && rh -> data [rh -> limbs - 1 ]== 0 ) rh -> limbs -- ;
360- }
361- if (left > 0 ) {
362- rl -> data [rl -> limbs ] = a -> data [rl -> limbs ] & ((((mp_limb_t )1 ) << left ) - 1 );
363- rl -> limbs ++ ;
364- }
365- while (rl -> limbs > 1 && rl -> data [rl -> limbs - 1 ]== 0 ) rl -> limbs -- ;
366- }
367-
368236static void secp256k1_num_negate (secp256k1_num_t * r ) {
369237 r -> neg ^= 1 ;
370238}
371239
372- static int secp256k1_num_get_bits (const secp256k1_num_t * a , int offset , int count ) {
373- int ret = 0 ;
374- for (int i = 0 ; i < count ; i ++ ) {
375- ret |= ((a -> data [(offset + i ) / GMP_NUMB_BITS ] >> ((offset + i ) % GMP_NUMB_BITS )) & 1 ) << i ;
376- }
377- return ret ;
378- }
379-
380240#endif
0 commit comments