diff --git a/src/script/sign.h b/src/script/sign.h --- a/src/script/sign.h +++ b/src/script/sign.h @@ -46,16 +46,21 @@ extern const SigningProvider &DUMMY_SIGNING_PROVIDER; -class PublicOnlySigningProvider : public SigningProvider { +class HidingSigningProvider : public SigningProvider { private: + const bool m_hide_secret; + const bool m_hide_origin; const SigningProvider *m_provider; public: - PublicOnlySigningProvider(const SigningProvider *provider) - : m_provider(provider) {} - bool GetCScript(const CScriptID &scriptid, CScript &script) const; - bool GetPubKey(const CKeyID &address, CPubKey &pubkey) const; - bool GetKeyOrigin(const CKeyID &keyid, KeyOriginInfo &info) const; + HidingSigningProvider(const SigningProvider *provider, bool hide_secret, + bool hide_origin) + : m_hide_secret(hide_secret), m_hide_origin(hide_origin), + m_provider(provider) {} + bool GetCScript(const CScriptID &scriptid, CScript &script) const override; + bool GetPubKey(const CKeyID &keyid, CPubKey &pubkey) const override; + bool GetKey(const CKeyID &keyid, CKey &key) const override; + bool GetKeyOrigin(const CKeyID &keyid, KeyOriginInfo &info) const override; }; struct FlatSigningProvider final : public SigningProvider { diff --git a/src/script/sign.cpp b/src/script/sign.cpp --- a/src/script/sign.cpp +++ b/src/script/sign.cpp @@ -565,18 +565,28 @@ } } -bool PublicOnlySigningProvider::GetCScript(const CScriptID &scriptid, - CScript &script) const { +bool HidingSigningProvider::GetCScript(const CScriptID &scriptid, + CScript &script) const { return m_provider->GetCScript(scriptid, script); } -bool PublicOnlySigningProvider::GetPubKey(const CKeyID &keyid, - CPubKey &pubkey) const { +bool HidingSigningProvider::GetPubKey(const CKeyID &keyid, + CPubKey &pubkey) const { return m_provider->GetPubKey(keyid, pubkey); } -bool PublicOnlySigningProvider::GetKeyOrigin(const CKeyID &keyid, - KeyOriginInfo &info) const { +bool HidingSigningProvider::GetKey(const CKeyID &keyid, CKey &key) const { + if (m_hide_secret) { + return false; + } + return m_provider->GetKey(keyid, key); +} + +bool HidingSigningProvider::GetKeyOrigin(const CKeyID &keyid, + KeyOriginInfo &info) const { + if (m_hide_origin) { + return false; + } return m_provider->GetKeyOrigin(keyid, info); } diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -5146,14 +5146,8 @@ } SignatureData sigdata; - if (sign) { - complete &= SignPSBTInput(*pwallet, *psbtx.tx, input, sigdata, i, - sighash_type); - } else { - complete &= - SignPSBTInput(PublicOnlySigningProvider(pwallet), *psbtx.tx, - input, sigdata, i, sighash_type); - } + complete &= SignPSBTInput(HidingSigningProvider(pwallet, !sign, false), + *psbtx.tx, input, sigdata, i, sighash_type); // Get public key paths if (bip32derivs) {