aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pubkey.cpp7
-rw-r--r--src/pubkey.h2
-rw-r--r--src/script/descriptor.cpp4
3 files changed, 10 insertions, 3 deletions
diff --git a/src/pubkey.cpp b/src/pubkey.cpp
index 05808e4c22..11e1b4abb5 100644
--- a/src/pubkey.cpp
+++ b/src/pubkey.cpp
@@ -204,6 +204,13 @@ std::vector<CKeyID> XOnlyPubKey::GetKeyIDs() const
return out;
}
+CPubKey XOnlyPubKey::GetEvenCorrespondingCPubKey() const
+{
+ unsigned char full_key[CPubKey::COMPRESSED_SIZE] = {0x02};
+ std::copy(begin(), end(), full_key + 1);
+ return CPubKey{full_key};
+}
+
bool XOnlyPubKey::IsFullyValid() const
{
secp256k1_xonly_pubkey pubkey;
diff --git a/src/pubkey.h b/src/pubkey.h
index 4b34fd829b..2b655c3f73 100644
--- a/src/pubkey.h
+++ b/src/pubkey.h
@@ -282,6 +282,8 @@ public:
*/
std::vector<CKeyID> GetKeyIDs() const;
+ CPubKey GetEvenCorrespondingCPubKey() const;
+
const unsigned char& operator[](int pos) const { return *(m_keydata.begin() + pos); }
const unsigned char* data() const { return m_keydata.begin(); }
static constexpr size_t size() { return decltype(m_keydata)::size(); }
diff --git a/src/script/descriptor.cpp b/src/script/descriptor.cpp
index eaef481c51..22177504fc 100644
--- a/src/script/descriptor.cpp
+++ b/src/script/descriptor.cpp
@@ -1401,9 +1401,7 @@ std::unique_ptr<PubkeyProvider> InferPubkey(const CPubKey& pubkey, ParseScriptCo
std::unique_ptr<PubkeyProvider> InferXOnlyPubkey(const XOnlyPubKey& xkey, ParseScriptContext ctx, const SigningProvider& provider)
{
- unsigned char full_key[CPubKey::COMPRESSED_SIZE] = {0x02};
- std::copy(xkey.begin(), xkey.end(), full_key + 1);
- CPubKey pubkey(full_key);
+ CPubKey pubkey{xkey.GetEvenCorrespondingCPubKey()};
std::unique_ptr<PubkeyProvider> key_provider = std::make_unique<ConstPubkeyProvider>(0, pubkey, true);
KeyOriginInfo info;
if (provider.GetKeyOriginByXOnly(xkey, info)) {