core-lightning/common/node_id.c
Rusty Russell 7401b26824 cleanup: remove unneeded includes in C files.
Before:
 Ten builds, laptop -j5, no ccache:

```
real	0m36.686000-38.956000(38.608+/-0.65)s
user	2m32.864000-42.253000(40.7545+/-2.7)s
sys	0m16.618000-18.316000(17.8531+/-0.48)s
```

 Ten builds, laptop -j5, ccache (warm):

```
real	0m8.212000-8.577000(8.39989+/-0.13)s
user	0m12.731000-13.212000(12.9751+/-0.17)s
sys	0m3.697000-3.902000(3.83722+/-0.064)s
```

After:
 Ten builds, laptop -j5, no ccache: 8% faster

```
real	0m33.802000-35.773000(35.468+/-0.54)s
user	2m19.073000-27.754000(26.2542+/-2.3)s
sys	0m15.784000-17.173000(16.7165+/-0.37)s
```

 Ten builds, laptop -j5, ccache (warm): 1% faster

```
real	0m8.200000-8.485000(8.30138+/-0.097)s
user	0m12.485000-13.100000(12.7344+/-0.19)s
sys	0m3.702000-3.889000(3.78787+/-0.056)s
```

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2021-09-17 09:43:22 +09:30

75 lines
2.0 KiB
C

#include "config.h"
#include <assert.h>
#include <ccan/array_size/array_size.h>
#include <ccan/mem/mem.h>
#include <ccan/str/hex/hex.h>
#include <common/node_id.h>
#include <common/type_to_string.h>
#include <wire/wire.h>
/* 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));
}
WARN_UNUSED_RESULT
bool pubkey32_from_node_id(struct pubkey32 *key, const struct node_id *id)
{
struct pubkey k;
if (!pubkey_from_node_id(&k, id))
return false;
return secp256k1_xonly_pubkey_from_pubkey(secp256k1_ctx, &key->pubkey,
NULL, &k.pubkey) == 1;
}
/* 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));
}
void fromwire_node_id(const u8 **cursor, size_t *max, struct node_id *id)
{
fromwire(cursor, max, &id->k, sizeof(id->k));
}
void towire_node_id(u8 **pptr, const struct node_id *id)
{
/* Cheap sanity check */
assert(id->k[0] == 0x2 || id->k[0] == 0x3);
towire(pptr, id->k, sizeof(id->k));
}