11use std:: collections:: HashMap ;
2+ use std:: fmt;
23use std:: ops:: Deref ;
34use std:: path:: PathBuf ;
45use std:: str:: FromStr ;
@@ -22,7 +23,7 @@ use crate::logging::LoggerType;
2223use crate :: trusted_wallet:: ExtraConfig as OrangeExtraConfig ;
2324use crate :: { impl_from_core_type, impl_into_core_type} ;
2425
25- #[ derive( Debug , Clone , uniffi:: Enum ) ]
26+ #[ derive( Clone , uniffi:: Enum ) ]
2627pub enum Seed {
2728 /// A BIP 39 mnemonic seed.
2829 MnemonicSeed {
@@ -35,6 +36,19 @@ pub enum Seed {
3536 Seed64 ( Vec < u8 > ) ,
3637}
3738
39+ impl fmt:: Debug for Seed {
40+ fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
41+ match self {
42+ Seed :: MnemonicSeed { .. } => f
43+ . debug_struct ( "MnemonicSeed" )
44+ . field ( "mnemonic" , & "<redacted>" )
45+ . field ( "passphrase" , & "<redacted>" )
46+ . finish ( ) ,
47+ Seed :: Seed64 ( _) => f. debug_tuple ( "Seed64" ) . field ( & "<redacted>" ) . finish ( ) ,
48+ }
49+ }
50+ }
51+
3852impl TryInto < OrangeSeed > for Seed {
3953 type Error = ConfigError ;
4054 fn try_into ( self ) -> Result < OrangeSeed , Self :: Error > {
@@ -310,3 +324,29 @@ impl TryFrom<WalletConfig> for OrangeWalletConfig {
310324 } )
311325 }
312326}
327+
328+ #[ cfg( test) ]
329+ mod tests {
330+ use super :: * ;
331+ use crate :: ffi:: ldk_node:: Mnemonic ;
332+
333+ #[ test]
334+ fn ffi_seed_debug_redacts_seed64_bytes ( ) {
335+ let seed = Seed :: Seed64 ( vec ! [ 42 ; 64 ] ) ;
336+
337+ assert_eq ! ( format!( "{seed:?}" ) , "Seed64(\" <redacted>\" )" ) ;
338+ }
339+
340+ #[ test]
341+ fn ffi_seed_debug_redacts_mnemonic_and_passphrase ( ) {
342+ let mnemonic = Arc :: new (
343+ Mnemonic :: from_entropy ( vec ! [ 0 ; 16 ] ) . expect ( "static test entropy should be valid" ) ,
344+ ) ;
345+ let seed = Seed :: MnemonicSeed { mnemonic, passphrase : Some ( "test passphrase" . to_owned ( ) ) } ;
346+ let debug = format ! ( "{seed:?}" ) ;
347+
348+ assert_eq ! ( debug, "MnemonicSeed { mnemonic: \" <redacted>\" , passphrase: \" <redacted>\" }" ) ;
349+ assert ! ( !debug. contains( "abandon" ) ) ;
350+ assert ! ( !debug. contains( "test passphrase" ) ) ;
351+ }
352+ }
0 commit comments