hsmd: Add PSBT keypath utility functions

This commit is contained in:
Ken Sedgwick
2021-12-23 11:57:33 -08:00
committed by Rusty Russell
parent 1e1948bfd2
commit 8876c03791
3 changed files with 66 additions and 0 deletions

View File

@@ -69,6 +69,7 @@ COMMON_SRC_NOGEN := \
common/ping.c \
common/private_channel_announcement.c \
common/psbt_internal.c \
common/psbt_keypath.c \
common/psbt_open.c \
common/pseudorand.c \
common/random_select.c \

33
common/psbt_keypath.c Normal file
View File

@@ -0,0 +1,33 @@
#include "config.h"
#include <bitcoin/tx.h>
#include <common/psbt_keypath.h>
#include <common/utils.h>
#include <wally_bip32.h>
#include <wally_psbt.h>
void psbt_set_keypath(u32 index, const struct ext_key *ext, struct wally_map *map_in) {
u8 fingerprint[BIP32_KEY_FINGERPRINT_LEN];
if (bip32_key_get_fingerprint(
(struct ext_key *) ext, fingerprint, sizeof(fingerprint)) != WALLY_OK)
abort();
u32 path[1];
path[0] = index;
if (wally_map_add_keypath_item(map_in,
ext->pub_key, sizeof(ext->pub_key),
fingerprint, sizeof(fingerprint),
path, 1) != WALLY_OK)
abort();
}
void psbt_add_keypath_to_last_output(struct bitcoin_tx *tx,
u32 key_index,
const struct ext_key *ext) {
size_t outndx = tx->psbt->num_outputs - 1;
struct wally_map *map_in = &tx->psbt->outputs[outndx].keypaths;
tal_wally_start();
psbt_set_keypath(key_index, ext, map_in);
tal_wally_end(tx->psbt);
}

32
common/psbt_keypath.h Normal file
View File

@@ -0,0 +1,32 @@
#ifndef LIGHTNING_COMMON_PSBT_KEYPATH_H
#define LIGHTNING_COMMON_PSBT_KEYPATH_H
#include "config.h"
#include <ccan/short_types/short_types.h>
struct bitcoin_tx;
struct ext_key;
struct wally_map;
/* psbt_set_keypath - Set the keypath of a PSBT output.
*
* @index - child index of the wallet key
* @ext - extended public key of the immediate parent of the wallet key
* @map_in - wally keypaths map
*/
void psbt_set_keypath(u32 index,
const struct ext_key *ext,
struct wally_map *map_in);
/* psbt_add_keypath_to_last_output - augment the last output with the
* given wallet keypath
*
* @tx - transaction to modify
* @index - child index of the wallet key
* @ext - extended public key of the immediate parent of the wallet key
*/
void psbt_add_keypath_to_last_output(struct bitcoin_tx *tx,
u32 index,
const struct ext_key *ext);
#endif /* LIGHTNING_COMMON_PSBT_KEYPATH_H */