Bitcoin Core  22.99.0
P2P Digital Currency
Public Member Functions | Static Public Member Functions | Private Attributes | List of all members
XOnlyPubKey Class Reference

#include <pubkey.h>

Inheritance diagram for XOnlyPubKey:
[legend]
Collaboration diagram for XOnlyPubKey:
[legend]

Public Member Functions

 XOnlyPubKey ()=default
 Construct an empty x-only pubkey. More...
 
 XOnlyPubKey (const XOnlyPubKey &)=default
 
XOnlyPubKeyoperator= (const XOnlyPubKey &)=default
 
bool IsFullyValid () const
 Determine if this pubkey is fully valid. More...
 
bool IsNull () const
 Test whether this is the 0 key (the result of default construction). More...
 
 XOnlyPubKey (Span< const unsigned char > bytes)
 Construct an x-only pubkey from exactly 32 bytes. More...
 
 XOnlyPubKey (const CPubKey &pubkey)
 Construct an x-only pubkey from a normal pubkey. More...
 
bool VerifySchnorr (const uint256 &msg, Span< const unsigned char > sigbytes) const
 Verify a Schnorr signature against this public key. More...
 
uint256 ComputeTapTweakHash (const uint256 *merkle_root) const
 Compute the Taproot tweak as specified in BIP341, with *this as internal key: More...
 
bool CheckTapTweak (const XOnlyPubKey &internal, const uint256 &merkle_root, bool parity) const
 Verify that this is a Taproot tweaked output point, against a specified internal key, Merkle root, and parity. More...
 
std::optional< std::pair< XOnlyPubKey, bool > > CreateTapTweak (const uint256 *merkle_root) const
 Construct a Taproot tweaked output point with this point as internal key. More...
 
std::vector< CKeyIDGetKeyIDs () const
 Returns a list of CKeyIDs for the CPubKeys that could have been used to create this XOnlyPubKey. More...
 
const unsigned char & operator[] (int pos) const
 
const unsigned char * data () const
 
const unsigned char * begin () const
 
const unsigned char * end () const
 
unsigned char * begin ()
 
unsigned char * end ()
 
bool operator== (const XOnlyPubKey &other) const
 
bool operator!= (const XOnlyPubKey &other) const
 
bool operator< (const XOnlyPubKey &other) const
 

Static Public Member Functions

static constexpr size_t size ()
 

Private Attributes

uint256 m_keydata
 

Detailed Description

Definition at line 220 of file pubkey.h.

Constructor & Destructor Documentation

◆ XOnlyPubKey() [1/4]

XOnlyPubKey::XOnlyPubKey ( )
default

Construct an empty x-only pubkey.

◆ XOnlyPubKey() [2/4]

XOnlyPubKey::XOnlyPubKey ( const XOnlyPubKey )
default

◆ XOnlyPubKey() [3/4]

XOnlyPubKey::XOnlyPubKey ( Span< const unsigned char >  bytes)
explicit

Construct an x-only pubkey from exactly 32 bytes.

Definition at line 177 of file pubkey.cpp.

Here is the call graph for this function:

◆ XOnlyPubKey() [4/4]

XOnlyPubKey::XOnlyPubKey ( const CPubKey pubkey)
inlineexplicit

Construct an x-only pubkey from a normal pubkey.

Definition at line 245 of file pubkey.h.

Member Function Documentation

◆ begin() [1/2]

unsigned char* XOnlyPubKey::begin ( )
inline

Definition at line 280 of file pubkey.h.

Here is the call graph for this function:

◆ begin() [2/2]

const unsigned char* XOnlyPubKey::begin ( ) const
inline

Definition at line 278 of file pubkey.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CheckTapTweak()

bool XOnlyPubKey::CheckTapTweak ( const XOnlyPubKey internal,
const uint256 merkle_root,
bool  parity 
) const

Verify that this is a Taproot tweaked output point, against a specified internal key, Merkle root, and parity.

Definition at line 227 of file pubkey.cpp.

Here is the call graph for this function:

◆ ComputeTapTweakHash()

uint256 XOnlyPubKey::ComputeTapTweakHash ( const uint256 merkle_root) const

Compute the Taproot tweak as specified in BIP341, with *this as internal key:

  • if merkle_root == nullptr: H_TapTweak(xonly_pubkey)
  • otherwise: H_TapTweak(xonly_pubkey || *merkle_root)

Note that the behavior of this function with merkle_root != nullptr is consensus critical.

Definition at line 216 of file pubkey.cpp.

Here is the caller graph for this function:

◆ CreateTapTweak()

std::optional< std::pair< XOnlyPubKey, bool > > XOnlyPubKey::CreateTapTweak ( const uint256 merkle_root) const

Construct a Taproot tweaked output point with this point as internal key.

Definition at line 235 of file pubkey.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ data()

const unsigned char* XOnlyPubKey::data ( ) const
inline

Definition at line 276 of file pubkey.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ end() [1/2]

unsigned char* XOnlyPubKey::end ( )
inline

Definition at line 281 of file pubkey.h.

Here is the call graph for this function:

◆ end() [2/2]

const unsigned char* XOnlyPubKey::end ( ) const
inline

Definition at line 279 of file pubkey.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetKeyIDs()

std::vector< CKeyID > XOnlyPubKey::GetKeyIDs ( ) const

Returns a list of CKeyIDs for the CPubKeys that could have been used to create this XOnlyPubKey.

This is needed for key lookups since keys are indexed by CKeyID.

Definition at line 183 of file pubkey.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsFullyValid()

bool XOnlyPubKey::IsFullyValid ( ) const

Determine if this pubkey is fully valid.

This is true for approximately 50% of all possible 32-byte arrays. If false, VerifySchnorr and CreatePayToContract will always fail.

Definition at line 200 of file pubkey.cpp.

Here is the call graph for this function:

◆ IsNull()

bool XOnlyPubKey::IsNull ( ) const
inline

Test whether this is the 0 key (the result of default construction).

This implies !IsFullyValid().

Definition at line 239 of file pubkey.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator!=()

bool XOnlyPubKey::operator!= ( const XOnlyPubKey other) const
inline

Definition at line 283 of file pubkey.h.

◆ operator<()

bool XOnlyPubKey::operator< ( const XOnlyPubKey other) const
inline

Definition at line 284 of file pubkey.h.

◆ operator=()

XOnlyPubKey& XOnlyPubKey::operator= ( const XOnlyPubKey )
default

◆ operator==()

bool XOnlyPubKey::operator== ( const XOnlyPubKey other) const
inline

Definition at line 282 of file pubkey.h.

◆ operator[]()

const unsigned char& XOnlyPubKey::operator[] ( int  pos) const
inline

Definition at line 275 of file pubkey.h.

Here is the call graph for this function:

◆ size()

static constexpr size_t XOnlyPubKey::size ( )
inlinestaticconstexpr

Definition at line 277 of file pubkey.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ VerifySchnorr()

bool XOnlyPubKey::VerifySchnorr ( const uint256 msg,
Span< const unsigned char >  sigbytes 
) const

Verify a Schnorr signature against this public key.

sigbytes must be exactly 64 bytes.

Definition at line 206 of file pubkey.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ m_keydata

uint256 XOnlyPubKey::m_keydata
private

Definition at line 223 of file pubkey.h.


The documentation for this class was generated from the following files: