7#ifndef SECP256K1_ECKEY_IMPL_H
8#define SECP256K1_ECKEY_IMPL_H
17static 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);
37static 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_EVEN
#define SECP256K1_TAG_PUBKEY_HYBRID_ODD
#define SECP256K1_TAG_PUBKEY_HYBRID_EVEN
#define SECP256K1_TAG_PUBKEY_UNCOMPRESSED
#define SECP256K1_TAG_PUBKEY_ODD