7 #ifndef SECP256K1_ECKEY_IMPL_H 8 #define SECP256K1_ECKEY_IMPL_H 17 static int secp256k1_eckey_pubkey_parse(
secp256k1_ge *elem,
const unsigned char *pub,
size_t size) {
23 if (!secp256k1_fe_set_b32(&x, pub+1) || !secp256k1_fe_set_b32(&y, pub+33)) {
26 secp256k1_ge_set_xy(elem, &x, &y);
31 return secp256k1_ge_is_valid_var(elem);
37 static int secp256k1_eckey_pubkey_serialize(
secp256k1_ge *elem,
unsigned char *pub,
size_t *size,
int compressed) {
38 if (secp256k1_ge_is_infinity(elem)) {
41 secp256k1_fe_normalize_var(&elem->
x);
42 secp256k1_fe_normalize_var(&elem->
y);
43 secp256k1_fe_get_b32(&pub[1], &elem->
x);
50 secp256k1_fe_get_b32(&pub[33], &elem->
y);
56 secp256k1_scalar_add(
key,
key, tweak);
57 return !secp256k1_scalar_is_zero(
key);
63 secp256k1_gej_set_ge(&pt,
key);
64 secp256k1_scalar_set_int(&one, 1);
65 secp256k1_ecmult(&pt, &pt, &one, tweak);
67 if (secp256k1_gej_is_infinity(&pt)) {
70 secp256k1_ge_set_gej(
key, &pt);
76 ret = !secp256k1_scalar_is_zero(tweak);
78 secp256k1_scalar_mul(
key,
key, tweak);
85 if (secp256k1_scalar_is_zero(tweak)) {
89 secp256k1_scalar_set_int(&
zero, 0);
90 secp256k1_gej_set_ge(&pt,
key);
91 secp256k1_ecmult(&pt, &pt, tweak, &
zero);
92 secp256k1_ge_set_gej(
key, &pt);
#define SECP256K1_TAG_PUBKEY_HYBRID_EVEN
#define SECP256K1_TAG_PUBKEY_UNCOMPRESSED
#define SECP256K1_TAG_PUBKEY_ODD
#define SECP256K1_TAG_PUBKEY_HYBRID_ODD
#define SECP256K1_TAG_PUBKEY_EVEN