|
#define | SECP256K1_GE_CONST(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {SECP256K1_FE_CONST((a),(b),(c),(d),(e),(f),(g),(h)), SECP256K1_FE_CONST((i),(j),(k),(l),(m),(n),(o),(p)), 0} |
|
#define | SECP256K1_GE_CONST_INFINITY {SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), 1} |
|
#define | SECP256K1_GEJ_CONST(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {SECP256K1_FE_CONST((a),(b),(c),(d),(e),(f),(g),(h)), SECP256K1_FE_CONST((i),(j),(k),(l),(m),(n),(o),(p)), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 1), 0} |
|
#define | SECP256K1_GEJ_CONST_INFINITY {SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), SECP256K1_FE_CONST(0, 0, 0, 0, 0, 0, 0, 0), 1} |
|
#define | SECP256K1_GE_STORAGE_CONST(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {SECP256K1_FE_STORAGE_CONST((a),(b),(c),(d),(e),(f),(g),(h)), SECP256K1_FE_STORAGE_CONST((i),(j),(k),(l),(m),(n),(o),(p))} |
|
#define | SECP256K1_GE_STORAGE_CONST_GET(t) SECP256K1_FE_STORAGE_CONST_GET(t.x), SECP256K1_FE_STORAGE_CONST_GET(t.y) |
|
|
static void | secp256k1_ge_set_xy (secp256k1_ge *r, const secp256k1_fe *x, const secp256k1_fe *y) |
| Set a group element equal to the point with given X and Y coordinates. More...
|
|
static int | secp256k1_ge_set_xquad (secp256k1_ge *r, const secp256k1_fe *x) |
| Set a group element (affine) equal to the point with the given X coordinate and a Y coordinate that is a quadratic residue modulo p. More...
|
|
static int | secp256k1_ge_set_xo_var (secp256k1_ge *r, const secp256k1_fe *x, int odd) |
| Set a group element (affine) equal to the point with the given X coordinate, and given oddness for Y. More...
|
|
static int | secp256k1_ge_is_infinity (const secp256k1_ge *a) |
| Check whether a group element is the point at infinity. More...
|
|
static int | secp256k1_ge_is_valid_var (const secp256k1_ge *a) |
| Check whether a group element is valid (i.e., on the curve). More...
|
|
static void | secp256k1_ge_neg (secp256k1_ge *r, const secp256k1_ge *a) |
| Set r equal to the inverse of a (i.e., mirrored around the X axis) More...
|
|
static void | secp256k1_ge_set_gej (secp256k1_ge *r, secp256k1_gej *a) |
| Set a group element equal to another which is given in jacobian coordinates. More...
|
|
static void | secp256k1_ge_set_gej_var (secp256k1_ge *r, secp256k1_gej *a) |
| Set a group element equal to another which is given in jacobian coordinates. More...
|
|
static void | secp256k1_ge_set_all_gej_var (secp256k1_ge *r, const secp256k1_gej *a, size_t len) |
| Set a batch of group elements equal to the inputs given in jacobian coordinates. More...
|
|
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) |
| Bring a batch inputs given in jacobian coordinates (with known z-ratios) to the same global z "denominator". More...
|
|
static void | secp256k1_ge_set_infinity (secp256k1_ge *r) |
| Set a group element (affine) equal to the point at infinity. More...
|
|
static void | secp256k1_gej_set_infinity (secp256k1_gej *r) |
| Set a group element (jacobian) equal to the point at infinity. More...
|
|
static void | secp256k1_gej_set_ge (secp256k1_gej *r, const secp256k1_ge *a) |
| Set a group element (jacobian) equal to another which is given in affine coordinates. More...
|
|
static int | secp256k1_gej_eq_x_var (const secp256k1_fe *x, const secp256k1_gej *a) |
| Compare the X coordinate of a group element (jacobian). More...
|
|
static void | secp256k1_gej_neg (secp256k1_gej *r, const secp256k1_gej *a) |
| Set r equal to the inverse of a (i.e., mirrored around the X axis) More...
|
|
static int | secp256k1_gej_is_infinity (const secp256k1_gej *a) |
| Check whether a group element is the point at infinity. More...
|
|
static int | secp256k1_gej_has_quad_y_var (const secp256k1_gej *a) |
| Check whether a group element's y coordinate is a quadratic residue. More...
|
|
static void | secp256k1_gej_double (secp256k1_gej *r, const secp256k1_gej *a) |
| Set r equal to the double of a. More...
|
|
static void | secp256k1_gej_double_var (secp256k1_gej *r, const secp256k1_gej *a, secp256k1_fe *rzr) |
| Set r equal to the double of a. More...
|
|
static void | secp256k1_gej_add_var (secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_gej *b, secp256k1_fe *rzr) |
| Set r equal to the sum of a and b. More...
|
|
static void | secp256k1_gej_add_ge (secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b) |
| Set r equal to the sum of a and b (with b given in affine coordinates, and not infinity). More...
|
|
static void | secp256k1_gej_add_ge_var (secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, secp256k1_fe *rzr) |
| Set r equal to the sum of a and b (with b given in affine coordinates). More...
|
|
static void | secp256k1_gej_add_zinv_var (secp256k1_gej *r, const secp256k1_gej *a, const secp256k1_ge *b, const secp256k1_fe *bzinv) |
| Set r equal to the sum of a and b (with the inverse of b's Z coordinate passed as bzinv). More...
|
|
static void | secp256k1_ge_mul_lambda (secp256k1_ge *r, const secp256k1_ge *a) |
| Set r to be equal to lambda times a, where lambda is chosen in a way such that this is very fast. More...
|
|
static void | secp256k1_gej_clear (secp256k1_gej *r) |
| Clear a secp256k1_gej to prevent leaking sensitive information. More...
|
|
static void | secp256k1_ge_clear (secp256k1_ge *r) |
| Clear a secp256k1_ge to prevent leaking sensitive information. More...
|
|
static void | secp256k1_ge_to_storage (secp256k1_ge_storage *r, const secp256k1_ge *a) |
| Convert a group element to the storage type. More...
|
|
static void | secp256k1_ge_from_storage (secp256k1_ge *r, const secp256k1_ge_storage *a) |
| Convert a group element back from the storage type. More...
|
|
static void | secp256k1_ge_storage_cmov (secp256k1_ge_storage *r, const secp256k1_ge_storage *a, int flag) |
| If flag is true, set *r equal to *a; otherwise leave it. More...
|
|
static void | secp256k1_gej_rescale (secp256k1_gej *r, const secp256k1_fe *b) |
| Rescale a jacobian point by b which must be non-zero. More...
|
|
static int | secp256k1_ge_is_in_correct_subgroup (const secp256k1_ge *ge) |
| Determine if a point (which is assumed to be on the curve) is in the correct (sub)group of the curve. More...
|
|
static int secp256k1_ge_is_in_correct_subgroup |
( |
const secp256k1_ge * |
ge | ) |
|
|
static |
Determine if a point (which is assumed to be on the curve) is in the correct (sub)group of the curve.
In normal mode, the used group is secp256k1, which has cofactor=1 meaning that every point on the curve is in the group, and this function returns always true.
When compiling in exhaustive test mode, a slightly different curve equation is used, leading to a group with a (very) small subgroup, and that subgroup is what is used for all cryptographic operations. In that mode, this function checks whether a point that is on the curve is in fact also in that subgroup.