@@ -75,6 +75,9 @@ use std::sync::{Arc, Mutex, RwLock};
7575use std:: time:: SystemTime ;
7676use 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 ) ]
7982enum 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