From b88874107e3b45876a63506ab67afbc710cd2a27 Mon Sep 17 00:00:00 2001 From: Antoine Poinsot Date: Fri, 20 Jan 2023 12:34:23 +0100 Subject: [PATCH] signer: add a method to get the xpub at a given path --- src/signer.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/signer.rs b/src/signer.rs index 56b76e2c..1c377a8a 100644 --- a/src/signer.rs +++ b/src/signer.rs @@ -191,6 +191,19 @@ impl HotSigner { Ok(()) } + + /// Get the extended public key at the given derivation path. + pub fn xpub_at( + &self, + der_path: &bip32::DerivationPath, + secp: &secp256k1::Secp256k1, + ) -> bip32::ExtendedPubKey { + let xpriv = self + .master_xpriv + .derive_priv(secp, der_path) + .expect("Never fails"); + bip32::ExtendedPubKey::from_priv(secp, &xpriv) + } } #[cfg(test)] @@ -220,6 +233,13 @@ mod tests { .words(), signer.words() ); + + // We can get an xpub for it. + let secp = secp256k1::Secp256k1::signing_only(); + let _ = signer.xpub_at( + &bip32::DerivationPath::from_str("m/42'/43/0987'/0/2").unwrap(), + &secp, + ); } #[test]