@@ -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 > } ,
@@ -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