7 #ifndef _SECP256K1_SCALAR_IMPL_H_ 8 #define _SECP256K1_SCALAR_IMPL_H_ 15 #if defined HAVE_CONFIG_H 19 #if defined(USE_SCALAR_4X64) 21 #elif defined(USE_SCALAR_8X32) 24 #error "Please select scalar implementation" 36 static const unsigned char order[32] = {
37 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
38 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
39 0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,
40 0xBF,0xD2,0x5E,0x8C,0xD0,0x36,0x41,0x41
50 secp256k1_scalar x2, x3, x4, x6, x7, x8, x15, x30, x60, x120, x127;
72 for (i = 0; i < 6; i++) {
78 for (i = 0; i < 14; i++) {
84 for (i = 0; i < 29; i++) {
90 for (i = 0; i < 59; i++) {
96 for (i = 0; i < 6; i++) {
103 for (i = 0; i < 2; i++) {
107 for (i = 0; i < 4; i++) {
111 for (i = 0; i < 2; i++) {
115 for (i = 0; i < 2; i++) {
119 for (i = 0; i < 2; i++) {
123 for (i = 0; i < 4; i++) {
127 for (i = 0; i < 3; i++) {
131 for (i = 0; i < 4; i++) {
135 for (i = 0; i < 5; i++) {
139 for (i = 0; i < 4; i++) {
143 for (i = 0; i < 2; i++) {
147 for (i = 0; i < 2; i++) {
151 for (i = 0; i < 5; i++) {
155 for (i = 0; i < 2; i++) {
159 for (i = 0; i < 3; i++) {
163 for (i = 0; i < 4; i++) {
167 for (i = 0; i < 2; i++) {
171 for (i = 0; i < 10; i++) {
175 for (i = 0; i < 4; i++) {
179 for (i = 0; i < 9; i++) {
183 for (i = 0; i < 2; i++) {
187 for (i = 0; i < 3; i++) {
191 for (i = 0; i < 3; i++) {
195 for (i = 0; i < 5; i++) {
199 for (i = 0; i < 2; i++) {
203 for (i = 0; i < 5; i++) {
207 for (i = 0; i < 4; i++) {
211 for (i = 0; i < 2; i++) {
215 for (i = 0; i < 8; i++) {
219 for (i = 0; i < 3; i++) {
223 for (i = 0; i < 3; i++) {
227 for (i = 0; i < 6; i++) {
231 for (i = 0; i < 8; i++) {
239 return !(a->
d[0] & 1);
243 #if defined(USE_SCALAR_INV_BUILTIN) 245 #elif defined(USE_SCALAR_INV_NUM) 259 #error "Please select scalar inverse implementation" 263 #ifdef USE_ENDOMORPHISM 305 0xAC9C52B3UL, 0x3FA3CF1FUL, 0x5AD9E3FDUL, 0x77ED9BA4UL,
306 0xA880B9FCUL, 0x8EC739C2UL, 0xE0CFC810UL, 0xB51283CFUL
309 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00000000UL,
310 0xE4437ED6UL, 0x010E8828UL, 0x6F547FA9UL, 0x0ABFE4C3UL
313 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFFUL, 0xFFFFFFFEUL,
314 0x8A280AC5UL, 0x0774346DUL, 0xD765CDA8UL, 0x3DB1562CUL
317 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x00003086UL,
318 0xD221A7D4UL, 0x6BCDE86CUL, 0x90E49284UL, 0xEB153DABUL
321 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x0000E443UL,
322 0x7ED6010EUL, 0x88286F54UL, 0x7FA90ABFUL, 0xE4C42212UL
static void secp256k1_scalar_mul(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b)
#define VERIFY_CHECK(cond)
static void secp256k1_num_set_bin(secp256k1_num *r, const unsigned char *a, unsigned int alen)
static void secp256k1_scalar_inverse(secp256k1_scalar *r, const secp256k1_scalar *x)
static void secp256k1_scalar_set_b32(secp256k1_scalar *r, const unsigned char *bin, int *overflow)
static void secp256k1_num_mod_inverse(secp256k1_num *r, const secp256k1_num *a, const secp256k1_num *m)
static void secp256k1_scalar_mul_shift_var(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b, unsigned int shift)
static void secp256k1_scalar_inverse_var(secp256k1_scalar *r, const secp256k1_scalar *x)
#define SECP256K1_SCALAR_CONST(d7, d6, d5, d4, d3, d2, d1, d0)
static void secp256k1_scalar_sqr(secp256k1_scalar *r, const secp256k1_scalar *a)
static void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar *a)
static int secp256k1_scalar_add(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b)
static void secp256k1_scalar_get_num(secp256k1_num *r, const secp256k1_scalar *a)
static void secp256k1_scalar_order_get_num(secp256k1_num *r)
static SECP256K1_INLINE int secp256k1_scalar_is_even(const secp256k1_scalar *a)
static void secp256k1_num_get_bin(unsigned char *r, unsigned int rlen, const secp256k1_num *a)
static int secp256k1_scalar_is_one(const secp256k1_scalar *a)