mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-08-25 15:51:04 +02:00
XOnlyPubKey: Add GetCPubKeys
We need to retrieve the even and odd compressed pubkeys for xonly pubkeys, so add a function to do that. Also reuse it in GetKeyIDs.
This commit is contained in:
@@ -197,20 +197,26 @@ constexpr XOnlyPubKey XOnlyPubKey::NUMS_H{
|
|||||||
[]() consteval { return XOnlyPubKey{"50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0"_hex_u8}; }(),
|
[]() consteval { return XOnlyPubKey{"50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0"_hex_u8}; }(),
|
||||||
};
|
};
|
||||||
|
|
||||||
std::vector<CKeyID> XOnlyPubKey::GetKeyIDs() const
|
std::vector<CPubKey> XOnlyPubKey::GetCPubKeys() const
|
||||||
{
|
{
|
||||||
std::vector<CKeyID> out;
|
std::vector<CPubKey> out;
|
||||||
// For now, use the old full pubkey-based key derivation logic. As it is indexed by
|
|
||||||
// Hash160(full pubkey), we need to return both a version prefixed with 0x02, and one
|
|
||||||
// with 0x03.
|
|
||||||
unsigned char b[33] = {0x02};
|
unsigned char b[33] = {0x02};
|
||||||
std::copy(m_keydata.begin(), m_keydata.end(), b + 1);
|
std::copy(m_keydata.begin(), m_keydata.end(), b + 1);
|
||||||
CPubKey fullpubkey;
|
CPubKey fullpubkey;
|
||||||
fullpubkey.Set(b, b + 33);
|
fullpubkey.Set(b, b + 33);
|
||||||
out.push_back(fullpubkey.GetID());
|
out.push_back(fullpubkey);
|
||||||
b[0] = 0x03;
|
b[0] = 0x03;
|
||||||
fullpubkey.Set(b, b + 33);
|
fullpubkey.Set(b, b + 33);
|
||||||
out.push_back(fullpubkey.GetID());
|
out.push_back(fullpubkey);
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<CKeyID> XOnlyPubKey::GetKeyIDs() const
|
||||||
|
{
|
||||||
|
std::vector<CKeyID> out;
|
||||||
|
for (const CPubKey& pk : GetCPubKeys()) {
|
||||||
|
out.push_back(pk.GetID());
|
||||||
|
}
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -283,9 +283,13 @@ public:
|
|||||||
std::optional<std::pair<XOnlyPubKey, bool>> CreateTapTweak(const uint256* merkle_root) const;
|
std::optional<std::pair<XOnlyPubKey, bool>> CreateTapTweak(const uint256* merkle_root) const;
|
||||||
|
|
||||||
/** Returns a list of CKeyIDs for the CPubKeys that could have been used to create this XOnlyPubKey.
|
/** Returns a list of CKeyIDs for the CPubKeys that could have been used to create this XOnlyPubKey.
|
||||||
|
* As the CKeyID is the Hash160(full pubkey), the produced CKeyIDs are for the versions of this
|
||||||
|
* XOnlyPubKey with 0x02 and 0x03 prefixes.
|
||||||
* This is needed for key lookups since keys are indexed by CKeyID.
|
* This is needed for key lookups since keys are indexed by CKeyID.
|
||||||
*/
|
*/
|
||||||
std::vector<CKeyID> GetKeyIDs() const;
|
std::vector<CKeyID> GetKeyIDs() const;
|
||||||
|
/** Returns this XOnlyPubKey with 0x02 and 0x03 prefixes */
|
||||||
|
std::vector<CPubKey> GetCPubKeys() const;
|
||||||
|
|
||||||
CPubKey GetEvenCorrespondingCPubKey() const;
|
CPubKey GetEvenCorrespondingCPubKey() const;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user