7 #ifndef SECP256K1_GROUP_IMPL_H 8 #define SECP256K1_GROUP_IMPL_H 39 #if defined(EXHAUSTIVE_TEST_ORDER) 40 # if EXHAUSTIVE_TEST_ORDER == 199 42 0xFA7CC9A7, 0x0737F2DB, 0xA749DD39, 0x2B4FB069,
43 0x3B017A7D, 0xA808C2F1, 0xFB12940C, 0x9EA66C18,
44 0x78AC123A, 0x5ED8AEF3, 0x8732BC91, 0x1F3A2868,
45 0x48DF246C, 0x808DAE72, 0xCFE52572, 0x7F0501ED
49 # elif EXHAUSTIVE_TEST_ORDER == 13 51 0xedc60018, 0xa51a786b, 0x2ea91f4d, 0x4c9416c0,
52 0x9de54c3b, 0xa1316554, 0x6cf4345c, 0x7277ef15,
53 0x54cb1b6b, 0xdc8c1273, 0x087844ea, 0x43f4603e,
54 0x0eaf9a43, 0xf6effe55, 0x939f806d, 0x37adf8ac
58 # error No known generator for the specified exhaustive test group order. 65 0x79BE667EUL, 0xF9DCBBACUL, 0x55A06295UL, 0xCE870B07UL,
66 0x029BFCDBUL, 0x2DCE28D9UL, 0x59F2815BUL, 0x16F81798UL,
67 0x483ADA77UL, 0x26A3C465UL, 0x5DA4FBFCUL, 0x0E1108A8UL,
68 0xFD17B448UL, 0xA6855419UL, 0x9C47D08FUL, 0xFB10D4B8UL
132 size_t last_i = SIZE_MAX;
134 for (i = 0; i < len; i++) {
135 if (!a[i].infinity) {
137 if (last_i == SIZE_MAX) {
145 if (last_i == SIZE_MAX) {
153 if (!a[i].infinity) {
162 for (i = 0; i < len; i++) {
164 if (!a[i].infinity) {
368 secp256k1_fe z22, z12, u1, u2, s1, s2, h, i, i2, h2, h3, t;
421 secp256k1_fe z12, u1, u2, s1, s2, h, i, i2, h2, h3, t;
470 secp256k1_fe az, z12, u1, u2, s1, s2, h, i, i2, h2, h3, t;
528 secp256k1_fe zz, u1, u2, s1, s2, t, tt,
m, n, q, rr;
530 int infinity, degenerate;
680 #ifdef USE_ENDOMORPHISM 683 0x7ae96a2bul, 0x657c0710ul, 0x6e64479eul, 0xac3434e9ul,
684 0x9cf04975ul, 0x12f58995ul, 0xc1396c28ul, 0x719501eeul
#define VERIFY_CHECK(cond)
Definition: util.h:67
Definition: field_10x26.h:12
static int secp256k1_fe_is_zero(const secp256k1_fe *a)
static void secp256k1_fe_mul(secp256k1_fe *r, const secp256k1_fe *a, const secp256k1_fe *SECP256K1_RESTRICT b)
static void secp256k1_fe_normalize_var(secp256k1_fe *r)
secp256k1_fe x
Definition: group.h:25
static void secp256k1_gej_rescale(secp256k1_gej *r, const secp256k1_fe *s)
Definition: group_impl.h:647
static void secp256k1_ge_set_gej_var(secp256k1_ge *r, secp256k1_gej *a)
Definition: group_impl.h:113
static void secp256k1_ge_neg(secp256k1_ge *r, const secp256k1_ge *a)
Definition: group_impl.h:94
static void secp256k1_gej_double_var(secp256k1_gej *r, const secp256k1_gej *a, secp256k1_fe *rzr)
Definition: group_impl.h:306
static void secp256k1_fe_negate(secp256k1_fe *r, const secp256k1_fe *a, int m)
static void secp256k1_fe_from_storage(secp256k1_fe *r, const secp256k1_fe_storage *a)
static SECP256K1_INLINE void secp256k1_gej_double_nonzero(secp256k1_gej *r, const secp256k1_gej *a, secp256k1_fe *rzr)
Definition: group_impl.h:361
static void secp256k1_gej_add_ge_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, secp256k1_fe *rzr)
Definition: group_impl.h:419
static void secp256k1_gej_clear(secp256k1_gej *r)
Definition: group_impl.h:208
static void secp256k1_fe_storage_cmov(secp256k1_fe_storage *r, const secp256k1_fe_storage *a, int flag)
static void secp256k1_fe_cmov(secp256k1_fe *r, const secp256k1_fe *a, int flag)
secp256k1_fe_storage y
Definition: group.h:36
static void secp256k1_ge_set_gej(secp256k1_ge *r, secp256k1_gej *a)
Definition: group_impl.h:100
static void secp256k1_fe_set_int(secp256k1_fe *r, int a)
static void secp256k1_fe_to_storage(secp256k1_fe_storage *r, const secp256k1_fe *a)
static int secp256k1_gej_has_quad_y_var(const secp256k1_gej *a)
Definition: group_impl.h:691
#define SECP256K1_FE_CONST(d7, d6, d5, d4, d3, d2, d1, d0)
Definition: field_10x26.h:40
static void secp256k1_fe_clear(secp256k1_fe *a)
static int secp256k1_gej_is_valid_var(const secp256k1_gej *a)
Definition: group_impl.h:272
static void secp256k1_fe_add(secp256k1_fe *r, const secp256k1_fe *a)
static void secp256k1_fe_mul_int(secp256k1_fe *r, int a)
static void secp256k1_gej_add_ge(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b)
Definition: group_impl.h:525
static int secp256k1_ge_is_infinity(const secp256k1_ge *a)
Definition: group_impl.h:90
static int secp256k1_fe_is_odd(const secp256k1_fe *a)
m
Definition: linearize-data.py:266
static void secp256k1_gej_set_ge(secp256k1_gej *r, const secp256k1_ge *a)
Definition: group_impl.h:244
static int secp256k1_gej_eq_x_var(const secp256k1_fe *x, const secp256k1_gej *a)
Definition: group_impl.h:251
static const secp256k1_ge secp256k1_ge_const_g
Definition: group_impl.h:64
static void secp256k1_ge_from_storage(secp256k1_ge *r, const secp256k1_ge_storage *a)
Definition: group_impl.h:669
static void secp256k1_ge_set_xy(secp256k1_ge *r, const secp256k1_fe *x, const secp256k1_fe *y)
Definition: group_impl.h:84
static void secp256k1_gej_set_infinity(secp256k1_gej *r)
Definition: group_impl.h:195
static void secp256k1_gej_neg(secp256k1_gej *r, const secp256k1_gej *a)
Definition: group_impl.h:259
#define SECP256K1_INLINE
Definition: secp256k1.h:123
static const int CURVE_B
Definition: group_impl.h:71
int infinity
Definition: group.h:28
static int secp256k1_ge_set_xquad(secp256k1_ge *r, const secp256k1_fe *x)
Definition: group_impl.h:221
secp256k1_fe_storage x
Definition: group.h:35
static int secp256k1_fe_is_quad_var(const secp256k1_fe *a)
static void secp256k1_ge_set_all_gej_var(secp256k1_ge *r, const secp256k1_gej *a, size_t len)
Definition: group_impl.h:129
static int secp256k1_ge_set_xo_var(secp256k1_ge *r, const secp256k1_fe *x, int odd)
Definition: group_impl.h:232
secp256k1_fe x
Definition: group.h:15
static void secp256k1_fe_normalize_weak(secp256k1_fe *r)
static int secp256k1_fe_normalizes_to_zero(secp256k1_fe *r)
int infinity
Definition: group.h:17
static void secp256k1_ge_set_infinity(secp256k1_ge *r)
Definition: group_impl.h:202
static void secp256k1_fe_sqr(secp256k1_fe *r, const secp256k1_fe *a)
#define SECP256K1_GE_CONST(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)
Definition: group.h:20
static SECP256K1_INLINE void secp256k1_ge_storage_cmov(secp256k1_ge_storage *r, const secp256k1_ge_storage *a, int flag)
Definition: group_impl.h:675
static void secp256k1_gej_add_zinv_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, const secp256k1_fe *bzinv)
Definition: group_impl.h:468
static int secp256k1_fe_equal_var(const secp256k1_fe *a, const secp256k1_fe *b)
static void secp256k1_ge_to_storage(secp256k1_ge_storage *r, const secp256k1_ge *a)
Definition: group_impl.h:658
static int secp256k1_gej_is_infinity(const secp256k1_gej *a)
Definition: group_impl.h:268
static void secp256k1_ge_set_gej_zinv(secp256k1_ge *r, const secp256k1_gej *a, const secp256k1_fe *zi)
Definition: group_impl.h:74
secp256k1_fe z
Definition: group.h:27
static void secp256k1_fe_normalize(secp256k1_fe *r)
static int secp256k1_ge_is_valid_var(const secp256k1_ge *a)
Definition: group_impl.h:292
static void secp256k1_ge_globalz_set_table_gej(size_t len, secp256k1_ge *r, secp256k1_fe *globalz, const secp256k1_gej *a, const secp256k1_fe *zr)
Definition: group_impl.h:170
secp256k1_fe y
Definition: group.h:26
static int secp256k1_fe_sqrt(secp256k1_fe *r, const secp256k1_fe *a)
secp256k1_fe y
Definition: group.h:16
static void secp256k1_fe_inv_var(secp256k1_fe *r, const secp256k1_fe *a)
static void secp256k1_fe_inv(secp256k1_fe *r, const secp256k1_fe *a)
static void secp256k1_gej_add_var(secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_gej *b, secp256k1_fe *rzr)
Definition: group_impl.h:366
static void secp256k1_ge_clear(secp256k1_ge *r)
Definition: group_impl.h:215
static int secp256k1_fe_normalizes_to_zero_var(secp256k1_fe *r)