Skip to content

Commit 5680fcd

Browse files
committed
Refactor derive_xprv to make it reusable
.. and while we're at it we move the VSS child key indexes to constants.
1 parent f40a007 commit 5680fcd

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

src/builder.rs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ use std::sync::{Arc, Mutex, RwLock};
7575
use std::time::SystemTime;
7676
use vss_client::headers::{FixedHeaders, LnurlAuthToJwtProvider, VssHeaderProvider};
7777

78+
const VSS_HARDENED_CHILD_INDEX: u32 = 877;
79+
const VSS_LNURL_AUTH_HARDENED_CHILD_INDEX: u32 = 138;
80+
7881
#[derive(Debug, Clone)]
7982
enum ChainDataSourceConfig {
8083
Esplora { server_url: String, sync_config: Option<EsploraSyncConfig> },
@@ -481,10 +484,14 @@ impl NodeBuilder {
481484

482485
let config = Arc::new(self.config.clone());
483486

484-
let vss_xprv = derive_vss_xprv(config, &seed_bytes, Arc::clone(&logger))?;
487+
let vss_xprv =
488+
derive_xprv(config, &seed_bytes, VSS_HARDENED_CHILD_INDEX, Arc::clone(&logger))?;
485489

486490
let lnurl_auth_xprv = vss_xprv
487-
.derive_priv(&Secp256k1::new(), &[ChildNumber::Hardened { index: 138 }])
491+
.derive_priv(
492+
&Secp256k1::new(),
493+
&[ChildNumber::Hardened { index: VSS_LNURL_AUTH_HARDENED_CHILD_INDEX }],
494+
)
488495
.map_err(|e| {
489496
log_error!(logger, "Failed to derive VSS secret: {}", e);
490497
BuildError::KVStoreSetupFailed
@@ -546,7 +553,12 @@ impl NodeBuilder {
546553

547554
let config = Arc::new(self.config.clone());
548555

549-
let vss_xprv = derive_vss_xprv(config.clone(), &seed_bytes, Arc::clone(&logger))?;
556+
let vss_xprv = derive_xprv(
557+
config.clone(),
558+
&seed_bytes,
559+
VSS_HARDENED_CHILD_INDEX,
560+
Arc::clone(&logger),
561+
)?;
550562

551563
let vss_seed_bytes: [u8; 32] = vss_xprv.private_key.secret_bytes();
552564

@@ -1415,8 +1427,8 @@ fn seed_bytes_from_config(
14151427
}
14161428
}
14171429

1418-
fn derive_vss_xprv(
1419-
config: Arc<Config>, seed_bytes: &[u8; 64], logger: Arc<Logger>,
1430+
fn derive_xprv(
1431+
config: Arc<Config>, seed_bytes: &[u8; 64], hardened_child_index: u32, logger: Arc<Logger>,
14201432
) -> Result<Xpriv, BuildError> {
14211433
use bitcoin::key::Secp256k1;
14221434

@@ -1425,10 +1437,11 @@ fn derive_vss_xprv(
14251437
BuildError::InvalidSeedBytes
14261438
})?;
14271439

1428-
xprv.derive_priv(&Secp256k1::new(), &[ChildNumber::Hardened { index: 877 }]).map_err(|e| {
1429-
log_error!(logger, "Failed to derive VSS secret: {}", e);
1430-
BuildError::KVStoreSetupFailed
1431-
})
1440+
xprv.derive_priv(&Secp256k1::new(), &[ChildNumber::Hardened { index: hardened_child_index }])
1441+
.map_err(|e| {
1442+
log_error!(logger, "Failed to derive hardened child secret: {}", e);
1443+
BuildError::InvalidSeedBytes
1444+
})
14321445
}
14331446

14341447
/// Sanitize the user-provided node alias to ensure that it is a valid protocol-specified UTF-8 string.

0 commit comments

Comments
 (0)