@@ -109,6 +109,30 @@ static void secp256k1_scalar_add(secp256k1_scalar_t *r, const secp256k1_scalar_t
109109 secp256k1_scalar_reduce (r , t + secp256k1_scalar_check_overflow (r ));
110110}
111111
112+ static void secp256k1_scalar_add_bit (secp256k1_scalar_t * r , unsigned int bit ) {
113+ VERIFY_CHECK (bit < 256 );
114+ uint64_t t = (uint64_t )r -> d [0 ] + (((uint32_t )((bit >> 5 ) == 0 )) << bit );
115+ r -> d [0 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
116+ t += (uint64_t )r -> d [1 ] + (((uint32_t )((bit >> 5 ) == 1 )) << (bit & 0x1F ));
117+ r -> d [1 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
118+ t += (uint64_t )r -> d [2 ] + (((uint32_t )((bit >> 5 ) == 2 )) << (bit & 0x1F ));
119+ r -> d [2 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
120+ t += (uint64_t )r -> d [3 ] + (((uint32_t )((bit >> 5 ) == 3 )) << (bit & 0x1F ));
121+ r -> d [3 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
122+ t += (uint64_t )r -> d [4 ] + (((uint32_t )((bit >> 5 ) == 4 )) << (bit & 0x1F ));
123+ r -> d [4 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
124+ t += (uint64_t )r -> d [5 ] + (((uint32_t )((bit >> 5 ) == 5 )) << (bit & 0x1F ));
125+ r -> d [5 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
126+ t += (uint64_t )r -> d [6 ] + (((uint32_t )((bit >> 5 ) == 6 )) << (bit & 0x1F ));
127+ r -> d [6 ] = t & 0xFFFFFFFFULL ; t >>= 32 ;
128+ t += (uint64_t )r -> d [7 ] + (((uint32_t )((bit >> 5 ) == 7 )) << (bit & 0x1F ));
129+ r -> d [7 ] = t & 0xFFFFFFFFULL ;
130+ #ifdef VERIFY
131+ VERIFY_CHECK ((t >> 32 ) == 0 );
132+ VERIFY_CHECK (secp256k1_scalar_check_overflow (r ) == 0 );
133+ #endif
134+ }
135+
112136static void secp256k1_scalar_set_b32 (secp256k1_scalar_t * r , const unsigned char * b32 , int * overflow ) {
113137 r -> d [0 ] = (uint32_t )b32 [31 ] | (uint32_t )b32 [30 ] << 8 | (uint32_t )b32 [29 ] << 16 | (uint32_t )b32 [28 ] << 24 ;
114138 r -> d [1 ] = (uint32_t )b32 [27 ] | (uint32_t )b32 [26 ] << 8 | (uint32_t )b32 [25 ] << 16 | (uint32_t )b32 [24 ] << 24 ;
0 commit comments