Bitcoin Core  22.0.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...
 
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]

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

Definition at line 273 of file pubkey.h.

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

◆ begin() [2/2]

unsigned char* XOnlyPubKey::begin ( )
inline

Definition at line 275 of file pubkey.h.

Here is the call 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 210 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 199 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 218 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 271 of file pubkey.h.

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

◆ end() [1/2]

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

Definition at line 274 of file pubkey.h.

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

◆ end() [2/2]

unsigned char* XOnlyPubKey::end ( )
inline

Definition at line 276 of file pubkey.h.

Here is the call 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 183 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 278 of file pubkey.h.

◆ operator<()

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

Definition at line 279 of file pubkey.h.

◆ operator=()

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

◆ operator==()

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

Definition at line 277 of file pubkey.h.

◆ operator[]()

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

Definition at line 270 of file pubkey.h.

Here is the call graph for this function:

◆ size()

static constexpr size_t XOnlyPubKey::size ( )
inlinestatic

Definition at line 272 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 189 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: