diff options
author | Antoine Poinsot <darosior@protonmail.com> | 2023-02-14 10:31:32 +0100 |
---|---|---|
committer | Antoine Poinsot <darosior@protonmail.com> | 2023-10-08 02:43:19 +0200 |
commit | fcb6f13f442d6a3f27689a87e3ed2bb9b431a332 (patch) | |
tree | 643b4e10ed9108d579fcae63cde68b851d9cb8b2 | |
parent | ce8845f5dda403461178c08e7363978fda423999 (diff) |
pubkey: introduce a GetEvenCorrespondingCPubKey helper
We'll need to get a compressed key out of an x-only one in other places.
Avoid duplicating the code.
-rw-r--r-- | src/pubkey.cpp | 7 | ||||
-rw-r--r-- | src/pubkey.h | 2 | ||||
-rw-r--r-- | src/script/descriptor.cpp | 4 |
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)) { |