@@ -72,6 +72,9 @@ use std::sync::{Arc, Mutex, RwLock};
7272use std:: time:: SystemTime ;
7373use 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 ) ]
7679enum 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