Skip to content

Commit 5955f37

Browse files
committed
Clean up derive_node_secret_from_mnemonic
1 parent 18ed800 commit 5955f37

1 file changed

Lines changed: 11 additions & 15 deletions

File tree

src/io/utils.rs

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ use bdk_chain::tx_graph::ChangeSet as BdkTxGraphChangeSet;
1818
use bdk_chain::ConfirmationBlockTime;
1919
use bdk_wallet::ChangeSet as BdkWalletChangeSet;
2020
use bip39::Mnemonic;
21-
use bitcoin::bip32::Xpriv;
21+
use bitcoin::bip32::{ChildNumber, Xpriv};
22+
use bitcoin::secp256k1::Secp256k1;
2223
use bitcoin::Network;
2324
use lightning::io::Cursor;
2425
use lightning::ln::msgs::DecodeError;
@@ -83,24 +84,19 @@ pub fn generate_entropy_mnemonic(word_count: Option<WordCount>) -> Mnemonic {
8384
pub fn derive_node_secret_from_mnemonic(
8485
mnemonic: String, passphrase: Option<String>,
8586
) -> Result<Vec<u8>, Error> {
86-
use bitcoin::bip32::ChildNumber;
87-
use bitcoin::secp256k1::Secp256k1;
88-
8987
let parsed_mnemonic = Mnemonic::parse(&mnemonic).map_err(|_| Error::InvalidMnemonic)?;
9088
let seed = parsed_mnemonic.to_seed(passphrase.as_deref().unwrap_or(""));
9189

92-
// First BIP32 derivation: 64-byte BIP39 seed → 32-byte master private key
93-
let xpriv =
90+
let master_xpriv =
9491
Xpriv::new_master(Network::Bitcoin, &seed).map_err(|_| Error::InvalidMnemonic)?;
95-
let ldk_seed: [u8; 32] = xpriv.private_key.secret_bytes();
96-
97-
// Second BIP32 derivation: KeysManager treats the 32-byte key as a new seed
98-
// and derives node_secret at path m/0'
99-
let secp = Secp256k1::new();
100-
let keys_master =
101-
Xpriv::new_master(Network::Bitcoin, &ldk_seed).map_err(|_| Error::InvalidMnemonic)?;
102-
let node_secret_xpriv = keys_master
103-
.derive_priv(&secp, &[ChildNumber::from_hardened_idx(0).unwrap()])
92+
93+
let ldk_seed_bytes: [u8; 32] = master_xpriv.private_key.secret_bytes();
94+
95+
let keys_manager_master = Xpriv::new_master(Network::Bitcoin, &ldk_seed_bytes)
96+
.map_err(|_| Error::InvalidMnemonic)?;
97+
98+
let node_secret_xpriv = keys_manager_master
99+
.derive_priv(&Secp256k1::new(), &[ChildNumber::from_hardened_idx(0).unwrap()])
104100
.map_err(|_| Error::InvalidMnemonic)?;
105101

106102
Ok(node_secret_xpriv.private_key.secret_bytes().to_vec())

0 commit comments

Comments
 (0)