mirror of
https://github.com/ElementsProject/lightning.git
synced 2024-11-19 01:43:36 +01:00
bitcoin/pubkey: add pubkey32 primitive for xonly pubkey types.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
094889f50f
commit
9d656464f5
@ -125,3 +125,37 @@ void towire_pubkey(u8 **pptr, const struct pubkey *pubkey)
|
||||
|
||||
towire(pptr, output, outputlen);
|
||||
}
|
||||
|
||||
void fromwire_pubkey32(const u8 **cursor, size_t *max, struct pubkey32 *pubkey32)
|
||||
{
|
||||
u8 raw[32];
|
||||
|
||||
if (!fromwire(cursor, max, raw, sizeof(raw)))
|
||||
return;
|
||||
|
||||
if (secp256k1_xonly_pubkey_parse(secp256k1_ctx,
|
||||
&pubkey32->pubkey,
|
||||
raw) != 1) {
|
||||
SUPERVERBOSE("not a valid point");
|
||||
fromwire_fail(cursor, max);
|
||||
}
|
||||
}
|
||||
|
||||
void towire_pubkey32(u8 **pptr, const struct pubkey32 *pubkey32)
|
||||
{
|
||||
u8 output[32];
|
||||
|
||||
secp256k1_xonly_pubkey_serialize(secp256k1_ctx, output,
|
||||
&pubkey32->pubkey);
|
||||
towire(pptr, output, sizeof(output));
|
||||
}
|
||||
|
||||
char *pubkey32_to_hexstr(const tal_t *ctx, const struct pubkey32 *pubkey32)
|
||||
{
|
||||
u8 output[32];
|
||||
|
||||
secp256k1_xonly_pubkey_serialize(secp256k1_ctx, output,
|
||||
&pubkey32->pubkey);
|
||||
return tal_hexstr(ctx, output, sizeof(output));
|
||||
}
|
||||
REGISTER_TYPE_TO_STRING(pubkey32, pubkey32_to_hexstr);
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include <ccan/structeq/structeq.h>
|
||||
#include <ccan/tal/tal.h>
|
||||
#include <secp256k1.h>
|
||||
#include <secp256k1_extrakeys.h>
|
||||
|
||||
struct privkey;
|
||||
struct secret;
|
||||
@ -20,6 +21,13 @@ struct pubkey {
|
||||
/* Define pubkey_eq (no padding) */
|
||||
STRUCTEQ_DEF(pubkey, 0, pubkey.data);
|
||||
|
||||
struct pubkey32 {
|
||||
/* Unpacked pubkey (as used by libsecp256k1 internally) */
|
||||
secp256k1_xonly_pubkey pubkey;
|
||||
};
|
||||
/* Define pubkey_eq (no padding) */
|
||||
STRUCTEQ_DEF(pubkey32, 0, pubkey.data);
|
||||
|
||||
/* Convert from hex string of DER (scriptPubKey from validateaddress) */
|
||||
bool pubkey_from_hexstr(const char *derstr, size_t derlen, struct pubkey *key);
|
||||
|
||||
@ -60,4 +68,9 @@ void pubkey_to_hash160(const struct pubkey *pk, struct ripemd160 *hash);
|
||||
void towire_pubkey(u8 **pptr, const struct pubkey *pubkey);
|
||||
void fromwire_pubkey(const u8 **cursor, size_t *max, struct pubkey *pubkey);
|
||||
|
||||
/* marshal/unmarshal functions */
|
||||
void towire_pubkey32(u8 **pptr, const struct pubkey32 *pubkey);
|
||||
void fromwire_pubkey32(const u8 **cursor, size_t *max, struct pubkey32 *pubkey);
|
||||
|
||||
char *pubkey32_to_hexstr(const tal_t *ctx, const struct pubkey32 *pubkey32);
|
||||
#endif /* LIGHTNING_BITCOIN_PUBKEY_H */
|
||||
|
@ -348,3 +348,15 @@ void towire_bitcoin_signature(u8 **pptr, const struct bitcoin_signature *sig)
|
||||
towire_secp256k1_ecdsa_signature(pptr, &sig->s);
|
||||
towire_u8(pptr, sig->sighash_type);
|
||||
}
|
||||
|
||||
void towire_bip340sig(u8 **pptr, const struct bip340sig *bip340sig)
|
||||
{
|
||||
towire_u8_array(pptr, bip340sig->u8, sizeof(bip340sig->u8));
|
||||
}
|
||||
|
||||
void fromwire_bip340sig(const u8 **cursor, size_t *max,
|
||||
struct bip340sig *bip340sig)
|
||||
{
|
||||
fromwire_u8_array(cursor, max, bip340sig->u8, sizeof(bip340sig->u8));
|
||||
}
|
||||
REGISTER_TYPE_TO_HEXSTR(bip340sig);
|
||||
|
@ -131,4 +131,11 @@ void towire_bitcoin_signature(u8 **pptr, const struct bitcoin_signature *sig);
|
||||
void fromwire_bitcoin_signature(const u8 **cursor, size_t *max,
|
||||
struct bitcoin_signature *sig);
|
||||
|
||||
/* Schnorr */
|
||||
struct bip340sig {
|
||||
u8 u8[64];
|
||||
};
|
||||
void towire_bip340sig(u8 **pptr, const struct bip340sig *bip340sig);
|
||||
void fromwire_bip340sig(const u8 **cursor, size_t *max,
|
||||
struct bip340sig *bip340sig);
|
||||
#endif /* LIGHTNING_BITCOIN_SIGNATURE_H */
|
||||
|
@ -25,6 +25,16 @@ bool pubkey_from_node_id(struct pubkey *key, const struct node_id *id)
|
||||
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)
|
||||
{
|
||||
|
@ -24,6 +24,10 @@ void node_id_from_pubkey(struct node_id *id, const struct pubkey *key);
|
||||
WARN_UNUSED_RESULT
|
||||
bool pubkey_from_node_id(struct pubkey *key, const struct node_id *id);
|
||||
|
||||
/* Returns false if not a valid pubkey: relatively expensive */
|
||||
WARN_UNUSED_RESULT
|
||||
bool pubkey32_from_node_id(struct pubkey32 *key, const struct node_id *id);
|
||||
|
||||
/* Convert to hex string of SEC1 encoding. */
|
||||
char *node_id_to_hexstr(const tal_t *ctx, const struct node_id *id);
|
||||
|
||||
|
@ -42,6 +42,9 @@ u64 fromwire_u64(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
/* Generated stub for fromwire_u8 */
|
||||
u8 fromwire_u8(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8 called!\n"); abort(); }
|
||||
/* Generated stub for fromwire_u8_array */
|
||||
void fromwire_u8_array(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, u8 *arr UNNEEDED, size_t num UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8_array called!\n"); abort(); }
|
||||
/* Generated stub for pseudorand_u64 */
|
||||
uint64_t pseudorand_u64(void)
|
||||
{ fprintf(stderr, "pseudorand_u64 called!\n"); abort(); }
|
||||
|
@ -37,6 +37,9 @@ u64 fromwire_u64(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
/* Generated stub for fromwire_u8 */
|
||||
u8 fromwire_u8(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8 called!\n"); abort(); }
|
||||
/* Generated stub for fromwire_u8_array */
|
||||
void fromwire_u8_array(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, u8 *arr UNNEEDED, size_t num UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8_array called!\n"); abort(); }
|
||||
/* Generated stub for towire */
|
||||
void towire(u8 **pptr UNNEEDED, const void *data UNNEEDED, size_t len UNNEEDED)
|
||||
{ fprintf(stderr, "towire called!\n"); abort(); }
|
||||
|
@ -80,6 +80,9 @@ u64 fromwire_u64(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
/* Generated stub for fromwire_u8 */
|
||||
u8 fromwire_u8(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8 called!\n"); abort(); }
|
||||
/* Generated stub for fromwire_u8_array */
|
||||
void fromwire_u8_array(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, u8 *arr UNNEEDED, size_t num UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8_array called!\n"); abort(); }
|
||||
/* Generated stub for json_add_member */
|
||||
void json_add_member(struct json_stream *js UNNEEDED,
|
||||
const char *fieldname UNNEEDED,
|
||||
|
@ -75,6 +75,9 @@ u64 fromwire_u64(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
/* Generated stub for fromwire_u8 */
|
||||
u8 fromwire_u8(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8 called!\n"); abort(); }
|
||||
/* Generated stub for fromwire_u8_array */
|
||||
void fromwire_u8_array(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, u8 *arr UNNEEDED, size_t num UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8_array called!\n"); abort(); }
|
||||
/* Generated stub for towire */
|
||||
void towire(u8 **pptr UNNEEDED, const void *data UNNEEDED, size_t len UNNEEDED)
|
||||
{ fprintf(stderr, "towire called!\n"); abort(); }
|
||||
|
@ -76,6 +76,9 @@ u64 fromwire_u64(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
/* Generated stub for fromwire_u8 */
|
||||
u8 fromwire_u8(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8 called!\n"); abort(); }
|
||||
/* Generated stub for fromwire_u8_array */
|
||||
void fromwire_u8_array(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, u8 *arr UNNEEDED, size_t num UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8_array called!\n"); abort(); }
|
||||
/* Generated stub for towire */
|
||||
void towire(u8 **pptr UNNEEDED, const void *data UNNEEDED, size_t len UNNEEDED)
|
||||
{ fprintf(stderr, "towire called!\n"); abort(); }
|
||||
|
@ -75,6 +75,9 @@ u64 fromwire_u64(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
/* Generated stub for fromwire_u8 */
|
||||
u8 fromwire_u8(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8 called!\n"); abort(); }
|
||||
/* Generated stub for fromwire_u8_array */
|
||||
void fromwire_u8_array(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, u8 *arr UNNEEDED, size_t num UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8_array called!\n"); abort(); }
|
||||
/* Generated stub for towire */
|
||||
void towire(u8 **pptr UNNEEDED, const void *data UNNEEDED, size_t len UNNEEDED)
|
||||
{ fprintf(stderr, "towire called!\n"); abort(); }
|
||||
|
@ -68,6 +68,9 @@ u64 fromwire_u64(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
/* Generated stub for fromwire_u8 */
|
||||
u8 fromwire_u8(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8 called!\n"); abort(); }
|
||||
/* Generated stub for fromwire_u8_array */
|
||||
void fromwire_u8_array(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, u8 *arr UNNEEDED, size_t num UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8_array called!\n"); abort(); }
|
||||
/* Generated stub for siphash_seed */
|
||||
const struct siphash_seed *siphash_seed(void)
|
||||
{ fprintf(stderr, "siphash_seed called!\n"); abort(); }
|
||||
|
@ -72,6 +72,9 @@ u64 fromwire_u64(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
/* Generated stub for fromwire_u8 */
|
||||
u8 fromwire_u8(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8 called!\n"); abort(); }
|
||||
/* Generated stub for fromwire_u8_array */
|
||||
void fromwire_u8_array(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, u8 *arr UNNEEDED, size_t num UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8_array called!\n"); abort(); }
|
||||
/* Generated stub for json_add_member */
|
||||
void json_add_member(struct json_stream *js UNNEEDED,
|
||||
const char *fieldname UNNEEDED,
|
||||
|
@ -77,6 +77,9 @@ u64 fromwire_u64(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
/* Generated stub for fromwire_u8 */
|
||||
u8 fromwire_u8(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8 called!\n"); abort(); }
|
||||
/* Generated stub for fromwire_u8_array */
|
||||
void fromwire_u8_array(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, u8 *arr UNNEEDED, size_t num UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8_array called!\n"); abort(); }
|
||||
/* Generated stub for towire */
|
||||
void towire(u8 **pptr UNNEEDED, const void *data UNNEEDED, size_t len UNNEEDED)
|
||||
{ fprintf(stderr, "towire called!\n"); abort(); }
|
||||
|
@ -76,6 +76,9 @@ u64 fromwire_u64(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
/* Generated stub for fromwire_u8 */
|
||||
u8 fromwire_u8(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8 called!\n"); abort(); }
|
||||
/* Generated stub for fromwire_u8_array */
|
||||
void fromwire_u8_array(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, u8 *arr UNNEEDED, size_t num UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8_array called!\n"); abort(); }
|
||||
/* Generated stub for towire */
|
||||
void towire(u8 **pptr UNNEEDED, const void *data UNNEEDED, size_t len UNNEEDED)
|
||||
{ fprintf(stderr, "towire called!\n"); abort(); }
|
||||
|
@ -73,6 +73,9 @@ u64 fromwire_u64(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
/* Generated stub for fromwire_u8 */
|
||||
u8 fromwire_u8(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8 called!\n"); abort(); }
|
||||
/* Generated stub for fromwire_u8_array */
|
||||
void fromwire_u8_array(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, u8 *arr UNNEEDED, size_t num UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8_array called!\n"); abort(); }
|
||||
/* Generated stub for towire */
|
||||
void towire(u8 **pptr UNNEEDED, const void *data UNNEEDED, size_t len UNNEEDED)
|
||||
{ fprintf(stderr, "towire called!\n"); abort(); }
|
||||
|
@ -9,6 +9,7 @@
|
||||
/* This must match the type_to_string_ cases. */
|
||||
union printable_types {
|
||||
const struct pubkey *pubkey;
|
||||
const struct pubkey32 *pubkey32;
|
||||
const struct node_id *node_id;
|
||||
const struct bitcoin_txid *bitcoin_txid;
|
||||
const struct bitcoin_blkid *bitcoin_blkid;
|
||||
@ -31,6 +32,7 @@ union printable_types {
|
||||
const struct privkey *privkey;
|
||||
const secp256k1_ecdsa_signature *secp256k1_ecdsa_signature;
|
||||
const struct bitcoin_signature *bitcoin_signature;
|
||||
const struct bip340sig *bip340sig;
|
||||
const struct channel *channel;
|
||||
const struct amount_msat *amount_msat;
|
||||
const struct amount_sat *amount_sat;
|
||||
|
@ -79,6 +79,9 @@ u64 fromwire_u64(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
/* Generated stub for fromwire_u8 */
|
||||
u8 fromwire_u8(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8 called!\n"); abort(); }
|
||||
/* Generated stub for fromwire_u8_array */
|
||||
void fromwire_u8_array(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, u8 *arr UNNEEDED, size_t num UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8_array called!\n"); abort(); }
|
||||
/* Generated stub for towire */
|
||||
void towire(u8 **pptr UNNEEDED, const void *data UNNEEDED, size_t len UNNEEDED)
|
||||
{ fprintf(stderr, "towire called!\n"); abort(); }
|
||||
|
@ -79,6 +79,9 @@ u64 fromwire_u64(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
/* Generated stub for fromwire_u8 */
|
||||
u8 fromwire_u8(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8 called!\n"); abort(); }
|
||||
/* Generated stub for fromwire_u8_array */
|
||||
void fromwire_u8_array(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, u8 *arr UNNEEDED, size_t num UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8_array called!\n"); abort(); }
|
||||
/* Generated stub for towire */
|
||||
void towire(u8 **pptr UNNEEDED, const void *data UNNEEDED, size_t len UNNEEDED)
|
||||
{ fprintf(stderr, "towire called!\n"); abort(); }
|
||||
|
2
external/Makefile
vendored
2
external/Makefile
vendored
@ -71,7 +71,7 @@ $(TARGET_DIR)/libsecp256k1.% $(TARGET_DIR)/libwallycore.%: $(TARGET_DIR)/libwall
|
||||
$(TARGET_DIR)/libwally-core-build/src/libwallycore.% $(TARGET_DIR)/libwally-core-build/src/secp256k1/libsecp256k1.%: $(LIBWALLY_HEADERS) $(LIBSECP_HEADERS)
|
||||
cd external/libwally-core && ./tools/autogen.sh
|
||||
mkdir -p ${TARGET_DIR}/libwally-core-build
|
||||
cd ${TARGET_DIR}/libwally-core-build && CFLAGS=-std=c99 ${TOP}/libwally-core/configure CC="$(CC)" --enable-static=yes $(CROSSCOMPILE_OPTS) --enable-module-recovery --enable-elements --enable-shared=no --prefix=/ --libdir=/ --enable-debug && $(MAKE)
|
||||
cd ${TARGET_DIR}/libwally-core-build && CFLAGS=-std=c99 ${TOP}/libwally-core/configure CC="$(CC)" --enable-static=yes $(CROSSCOMPILE_OPTS) --enable-module-recovery --enable-module-extrakeys --enable-module-schnorrsig --enable-elements --enable-shared=no --prefix=/ --libdir=/ --enable-debug && $(MAKE)
|
||||
|
||||
# If we tell Make that the above builds both, it runs it twice in
|
||||
# parallel. So we lie :(
|
||||
|
@ -84,6 +84,9 @@ u64 fromwire_u64(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
/* Generated stub for fromwire_u8 */
|
||||
u8 fromwire_u8(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8 called!\n"); abort(); }
|
||||
/* Generated stub for fromwire_u8_array */
|
||||
void fromwire_u8_array(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, u8 *arr UNNEEDED, size_t num UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8_array called!\n"); abort(); }
|
||||
/* Generated stub for htlc_offered_wscript */
|
||||
u8 *htlc_offered_wscript(const tal_t *ctx UNNEEDED,
|
||||
const struct ripemd160 *ripemd UNNEEDED,
|
||||
|
@ -85,6 +85,9 @@ u64 fromwire_u64(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
/* Generated stub for fromwire_u8 */
|
||||
u8 fromwire_u8(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8 called!\n"); abort(); }
|
||||
/* Generated stub for fromwire_u8_array */
|
||||
void fromwire_u8_array(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, u8 *arr UNNEEDED, size_t num UNNEEDED)
|
||||
{ fprintf(stderr, "fromwire_u8_array called!\n"); abort(); }
|
||||
/* Generated stub for htlc_offered_wscript */
|
||||
u8 *htlc_offered_wscript(const tal_t *ctx UNNEEDED,
|
||||
const struct ripemd160 *ripemd UNNEEDED,
|
||||
|
Loading…
Reference in New Issue
Block a user