1
1
mirror of https://github.com/bitcoin/bitcoin.git synced 2024-05-17 23:56:39 +00:00

Generalize PublicOnlySigningProvider into HidingSigningProvider

This commit is contained in:
Pieter Wuille 2018-07-20 00:04:02 -07:00
parent 84f1f1bfdf
commit 81e1dd5ce1
3 changed files with 19 additions and 13 deletions

View File

@ -640,18 +640,25 @@ void PSBTOutput::Merge(const PSBTOutput& output)
if (witness_script.empty() && !output.witness_script.empty()) witness_script = output.witness_script; if (witness_script.empty() && !output.witness_script.empty()) witness_script = output.witness_script;
} }
bool PublicOnlySigningProvider::GetCScript(const CScriptID &scriptid, CScript& script) const bool HidingSigningProvider::GetCScript(const CScriptID& scriptid, CScript& script) const
{ {
return m_provider->GetCScript(scriptid, script); 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); 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); return m_provider->GetKeyOrigin(keyid, info);
} }

View File

@ -39,16 +39,19 @@ public:
extern const SigningProvider& DUMMY_SIGNING_PROVIDER; extern const SigningProvider& DUMMY_SIGNING_PROVIDER;
class PublicOnlySigningProvider : public SigningProvider class HidingSigningProvider : public SigningProvider
{ {
private: private:
const bool m_hide_secret;
const bool m_hide_origin;
const SigningProvider* m_provider; const SigningProvider* m_provider;
public: public:
PublicOnlySigningProvider(const SigningProvider* provider) : m_provider(provider) {} 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; bool GetCScript(const CScriptID& scriptid, CScript& script) const override;
bool GetPubKey(const CKeyID &address, CPubKey& pubkey) const; bool GetPubKey(const CKeyID& keyid, CPubKey& pubkey) const override;
bool GetKeyOrigin(const CKeyID& keyid, KeyOriginInfo& info) const; bool GetKey(const CKeyID& keyid, CKey& key) const override;
bool GetKeyOrigin(const CKeyID& keyid, KeyOriginInfo& info) const override;
}; };
struct FlatSigningProvider final : public SigningProvider struct FlatSigningProvider final : public SigningProvider

View File

@ -4520,11 +4520,7 @@ bool FillPSBT(const CWallet* pwallet, PartiallySignedTransaction& psbtx, const C
} }
SignatureData sigdata; SignatureData sigdata;
if (sign) { complete &= SignPSBTInput(HidingSigningProvider(pwallet, !sign, false), *psbtx.tx, input, sigdata, i, sighash_type);
complete &= SignPSBTInput(*pwallet, *psbtx.tx, input, sigdata, i, sighash_type);
} else {
complete &= SignPSBTInput(PublicOnlySigningProvider(pwallet), *psbtx.tx, input, sigdata, i, sighash_type);
}
if (it != pwallet->mapWallet.end()) { if (it != pwallet->mapWallet.end()) {
// Drop the unnecessary UTXO if we added both from the wallet. // Drop the unnecessary UTXO if we added both from the wallet.