Skip to content

Commit 5b276d7

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 006a269 commit 5b276d7

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> },
@@ -474,10 +477,14 @@ impl NodeBuilder {
474477

475478
let config = Arc::new(self.config.clone());
476479

477-
let vss_xprv = derive_vss_xprv(config, &seed_bytes, Arc::clone(&logger))?;
480+
let vss_xprv =
481+
derive_xprv(config, &seed_bytes, VSS_HARDENED_CHILD_INDEX, Arc::clone(&logger))?;
478482

479483
let lnurl_auth_xprv = vss_xprv
480-
.derive_priv(&Secp256k1::new(), &[ChildNumber::Hardened { index: 138 }])
484+
.derive_priv(
485+
&Secp256k1::new(),
486+
&[ChildNumber::Hardened { index: VSS_LNURL_AUTH_HARDENED_CHILD_INDEX }],
487+
)
481488
.map_err(|e| {
482489
log_error!(logger, "Failed to derive VSS secret: {}", e);
483490
BuildError::KVStoreSetupFailed
@@ -539,7 +546,12 @@ impl NodeBuilder {
539546

540547
let config = Arc::new(self.config.clone());
541548

542-
let vss_xprv = derive_vss_xprv(config.clone(), &seed_bytes, Arc::clone(&logger))?;
549+
let vss_xprv = derive_xprv(
550+
config.clone(),
551+
&seed_bytes,
552+
VSS_HARDENED_CHILD_INDEX,
553+
Arc::clone(&logger),
554+
)?;
543555

544556
let vss_seed_bytes: [u8; 32] = vss_xprv.private_key.secret_bytes();
545557

@@ -1400,8 +1412,8 @@ fn seed_bytes_from_config(
14001412
}
14011413
}
14021414

1403-
fn derive_vss_xprv(
1404-
config: Arc<Config>, seed_bytes: &[u8; 64], logger: Arc<Logger>,
1415+
fn derive_xprv(
1416+
config: Arc<Config>, seed_bytes: &[u8; 64], hardened_child_index: u32, logger: Arc<Logger>,
14051417
) -> Result<Xpriv, BuildError> {
14061418
use bitcoin::key::Secp256k1;
14071419

@@ -1410,10 +1422,11 @@ fn derive_vss_xprv(
14101422
BuildError::InvalidSeedBytes
14111423
})?;
14121424

1413-
xprv.derive_priv(&Secp256k1::new(), &[ChildNumber::Hardened { index: 877 }]).map_err(|e| {
1414-
log_error!(logger, "Failed to derive VSS secret: {}", e);
1415-
BuildError::KVStoreSetupFailed
1416-
})
1425+
xprv.derive_priv(&Secp256k1::new(), &[ChildNumber::Hardened { index: hardened_child_index }])
1426+
.map_err(|e| {
1427+
log_error!(logger, "Failed to derive hardened child secret: {}", e);
1428+
BuildError::InvalidSeedBytes
1429+
})
14171430
}
14181431

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

0 commit comments

Comments
 (0)