mirror of
https://github.com/aljazceru/lightning.git
synced 2026-01-07 16:14:26 +01:00
hsmd: Add PSBT keypath utility functions
This commit is contained in:
committed by
Rusty Russell
parent
1e1948bfd2
commit
8876c03791
@@ -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
33
common/psbt_keypath.c
Normal 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
32
common/psbt_keypath.h
Normal 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 */
|
||||
Reference in New Issue
Block a user