Skip to content

Commit 55e124a

Browse files
committed
Refactor derive_xprv to make it reusble
.. and while we're at it we move the VSS child key indexes to constants.
1 parent fa5fb30 commit 55e124a

File tree

1 file changed

+23
-9
lines changed

1 file changed

+23
-9
lines changed

src/builder.rs

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ use std::sync::{Arc, Mutex, RwLock};
7272
use std::time::SystemTime;
7373
use vss_client::headers::{FixedHeaders, LnurlAuthToJwtProvider, VssHeaderProvider};
7474

75+
const VSS_HARDENED_CHILD_INDEX: u32 = 877;
76+
const VSS_LNURL_AUTH_HARDENED_CHILD_INDEX: u32 = 138;
77+
7578
#[derive(Debug, Clone)]
7679
enum ChainDataSourceConfig {
7780
Esplora { server_url: String, sync_config: Option<EsploraSyncConfig> },
@@ -429,10 +432,14 @@ impl NodeBuilder {
429432

430433
let config = Arc::new(self.config.clone());
431434

432-
let vss_xprv = derive_vss_xprv(config, &seed_bytes, Arc::clone(&logger))?;
435+
let vss_xprv =
436+
derive_xprv(config, &seed_bytes, VSS_HARDENED_CHILD_INDEX, Arc::clone(&logger))?;
433437

434438
let lnurl_auth_xprv = vss_xprv
435-
.derive_priv(&Secp256k1::new(), &[ChildNumber::Hardened { index: 138 }])
439+
.derive_priv(
440+
&Secp256k1::new(),
441+
&[ChildNumber::Hardened { index: VSS_LNURL_AUTH_HARDENED_CHILD_INDEX }],
442+
)
436443
.map_err(|e| {
437444
log_error!(logger, "Failed to derive VSS secret: {}", e);
438445
BuildError::KVStoreSetupFailed
@@ -494,7 +501,12 @@ impl NodeBuilder {
494501

495502
let config = Arc::new(self.config.clone());
496503

497-
let vss_xprv = derive_vss_xprv(config.clone(), &seed_bytes, Arc::clone(&logger))?;
504+
let vss_xprv = derive_xprv(
505+
config.clone(),
506+
&seed_bytes,
507+
VSS_HARDENED_CHILD_INDEX,
508+
Arc::clone(&logger),
509+
)?;
498510

499511
let vss_seed_bytes: [u8; 32] = vss_xprv.private_key.secret_bytes();
500512

@@ -1312,8 +1324,9 @@ fn seed_bytes_from_config(
13121324
}
13131325
}
13141326

1315-
fn derive_vss_xprv(
1316-
config: Arc<Config>, seed_bytes: &[u8; 64], logger: Arc<FilesystemLogger>,
1327+
fn derive_xprv(
1328+
config: Arc<Config>, seed_bytes: &[u8; 64], hardened_child_index: u32,
1329+
logger: Arc<FilesystemLogger>,
13171330
) -> Result<Xpriv, BuildError> {
13181331
use bitcoin::key::Secp256k1;
13191332

@@ -1322,10 +1335,11 @@ fn derive_vss_xprv(
13221335
BuildError::InvalidSeedBytes
13231336
})?;
13241337

1325-
xprv.derive_priv(&Secp256k1::new(), &[ChildNumber::Hardened { index: 877 }]).map_err(|e| {
1326-
log_error!(logger, "Failed to derive VSS secret: {}", e);
1327-
BuildError::KVStoreSetupFailed
1328-
})
1338+
xprv.derive_priv(&Secp256k1::new(), &[ChildNumber::Hardened { index: hardened_child_index }])
1339+
.map_err(|e| {
1340+
log_error!(logger, "Failed to derive hardened child secret: {}", e);
1341+
BuildError::InvalidSeedBytes
1342+
})
13291343
}
13301344

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

0 commit comments

Comments
 (0)