mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-03 09:56:38 -05:00
Add group element storage type
This commit is contained in:
parent
ff889f7d90
commit
e68d7208ec
2 changed files with 28 additions and 0 deletions
11
src/group.h
11
src/group.h
|
@ -25,6 +25,11 @@ typedef struct {
|
||||||
int infinity; /* whether this represents the point at infinity */
|
int infinity; /* whether this represents the point at infinity */
|
||||||
} secp256k1_gej_t;
|
} secp256k1_gej_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
secp256k1_fe_storage_t x;
|
||||||
|
secp256k1_fe_storage_t y;
|
||||||
|
} secp256k1_ge_storage_t;
|
||||||
|
|
||||||
/** Set a group element equal to the point at infinity */
|
/** Set a group element equal to the point at infinity */
|
||||||
static void secp256k1_ge_set_infinity(secp256k1_ge_t *r);
|
static void secp256k1_ge_set_infinity(secp256k1_ge_t *r);
|
||||||
|
|
||||||
|
@ -99,4 +104,10 @@ static void secp256k1_gej_clear(secp256k1_gej_t *r);
|
||||||
/** Clear a secp256k1_ge_t to prevent leaking sensitive information. */
|
/** Clear a secp256k1_ge_t to prevent leaking sensitive information. */
|
||||||
static void secp256k1_ge_clear(secp256k1_ge_t *r);
|
static void secp256k1_ge_clear(secp256k1_ge_t *r);
|
||||||
|
|
||||||
|
/** Convert a group element to the storage type. */
|
||||||
|
static void secp256k1_ge_to_storage(secp256k1_ge_storage_t *r, const secp256k1_ge_t*);
|
||||||
|
|
||||||
|
/** Convert a group element back from the storage type. */
|
||||||
|
static void secp256k1_ge_from_storage(secp256k1_ge_t *r, const secp256k1_ge_storage_t*);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -392,6 +392,23 @@ static void secp256k1_gej_get_hex(char *r131, const secp256k1_gej_t *a) {
|
||||||
secp256k1_ge_get_hex(r131, &t);
|
secp256k1_ge_get_hex(r131, &t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void secp256k1_ge_to_storage(secp256k1_ge_storage_t *r, const secp256k1_ge_t *a) {
|
||||||
|
secp256k1_fe_t x, y;
|
||||||
|
VERIFY_CHECK(!a->infinity);
|
||||||
|
x = a->x;
|
||||||
|
secp256k1_fe_normalize(&x);
|
||||||
|
y = a->y;
|
||||||
|
secp256k1_fe_normalize(&y);
|
||||||
|
secp256k1_fe_to_storage(&r->x, &x);
|
||||||
|
secp256k1_fe_to_storage(&r->y, &y);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void secp256k1_ge_from_storage(secp256k1_ge_t *r, const secp256k1_ge_storage_t *a) {
|
||||||
|
secp256k1_fe_from_storage(&r->x, &a->x);
|
||||||
|
secp256k1_fe_from_storage(&r->y, &a->y);
|
||||||
|
r->infinity = 0;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef USE_ENDOMORPHISM
|
#ifdef USE_ENDOMORPHISM
|
||||||
static void secp256k1_gej_mul_lambda(secp256k1_gej_t *r, const secp256k1_gej_t *a) {
|
static void secp256k1_gej_mul_lambda(secp256k1_gej_t *r, const secp256k1_gej_t *a) {
|
||||||
static const secp256k1_fe_t beta = SECP256K1_FE_CONST(
|
static const secp256k1_fe_t beta = SECP256K1_FE_CONST(
|
||||||
|
|
Loading…
Add table
Reference in a new issue