diff --git a/src/bdk.udl b/src/bdk.udl index e9950801..d6232500 100644 --- a/src/bdk.udl +++ b/src/bdk.udl @@ -283,6 +283,8 @@ interface DescriptorSecretKey { DescriptorPublicKey as_public(); + sequence secret_bytes(); + string as_string(); }; diff --git a/src/lib.rs b/src/lib.rs index 8f772ca4..7f77ab76 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -907,6 +907,21 @@ impl DescriptorSecretKey { }) } + /// Get the private key as bytes. + fn secret_bytes(&self) -> Vec { + let descriptor_secret_key = self.descriptor_secret_key_mutex.lock().unwrap(); + let secret_bytes: Vec = match descriptor_secret_key.deref() { + BdkDescriptorSecretKey::XPrv(descriptor_x_key) => { + descriptor_x_key.xkey.private_key.secret_bytes().to_vec() + } + BdkDescriptorSecretKey::SinglePriv(_) => { + unreachable!() + } + }; + + secret_bytes + } + fn as_string(&self) -> String { self.descriptor_secret_key_mutex.lock().unwrap().to_string() } @@ -1131,4 +1146,14 @@ mod test { let derived_dpk = &derive_dpk(&master_dpk, "m/84h/1h/0h"); assert!(derived_dpk.is_err()); } + + #[test] + fn test_retrieve_master_secret_key() { + let master_dpk = get_descriptor_secret_key(); + let master_private_key = master_dpk.secret_bytes().to_hex(); + assert_eq!( + master_private_key, + "e93315d6ce401eb4db803a56232f0ed3e69b053774e6047df54f1bd00e5ea936" + ) + } }