#include #include #include #include #include #include /* Convert from pubkey to compressed pubkey. */ void node_id_from_pubkey(struct node_id *id, const struct pubkey *key) { size_t outlen = ARRAY_SIZE(id->k); if (!secp256k1_ec_pubkey_serialize(secp256k1_ctx, id->k, &outlen, &key->pubkey, SECP256K1_EC_COMPRESSED)) abort(); } WARN_UNUSED_RESULT bool pubkey_from_node_id(struct pubkey *key, const struct node_id *id) { return secp256k1_ec_pubkey_parse(secp256k1_ctx, &key->pubkey, memcheck(id->k, sizeof(id->k)), sizeof(id->k)); } /* It's valid if we can convert to a real pubkey. */ bool node_id_valid(const struct node_id *id) { struct pubkey key; return pubkey_from_node_id(&key, id); } /* Convert to hex string of SEC1 encoding */ char *node_id_to_hexstr(const tal_t *ctx, const struct node_id *id) { return tal_hexstr(ctx, id->k, sizeof(id->k)); } REGISTER_TYPE_TO_STRING(node_id, node_id_to_hexstr); /* Convert from hex string of SEC1 encoding */ bool node_id_from_hexstr(const char *str, size_t slen, struct node_id *id) { return hex_decode(str, slen, id->k, sizeof(id->k)) && node_id_valid(id); } int node_id_cmp(const struct node_id *a, const struct node_id *b) { return memcmp(a->k, b->k, sizeof(a->k)); }