Bitcoin ABC  0.22.15
P2P Digital Currency
Public Member Functions | Static Public Member Functions | Static Public Attributes | Private Member Functions | Static Private Member Functions | Private Attributes | Friends | List of all members
CPubKey Class Reference

An encapsulated public key. More...

#include <pubkey.h>

Public Member Functions

 CPubKey ()
 Construct an invalid public key. More...
 
template<typename T >
void Set (const T pbegin, const T pend)
 Initialize a public key using begin/end iterators to byte data. More...
 
template<typename T >
 CPubKey (const T pbegin, const T pend)
 Construct a public key using begin/end iterators to byte data. More...
 
 CPubKey (const std::vector< uint8_t > &_vch)
 Construct a public key from a byte vector. More...
 
unsigned int size () const
 Simple read-only vector-like interface to the pubkey data. More...
 
const uint8_t * data () const
 
const uint8_t * begin () const
 
const uint8_t * end () const
 
const uint8_t & operator[] (unsigned int pos) const
 
template<typename Stream >
void Serialize (Stream &s) const
 Implement serialization, as if this was a byte vector. More...
 
template<typename Stream >
void Unserialize (Stream &s)
 
CKeyID GetID () const
 Get the KeyID of this public key (hash of its serialization) More...
 
uint256 GetHash () const
 Get the 256-bit hash of this public key. More...
 
bool IsValid () const
 
bool IsFullyValid () const
 fully validate whether this is a valid public key (more expensive than IsValid()) More...
 
bool IsCompressed () const
 Check whether this is a compressed public key. More...
 
bool VerifyECDSA (const uint256 &hash, const std::vector< uint8_t > &vchSig) const
 Verify a DER-serialized ECDSA signature (~72 bytes). More...
 
bool VerifySchnorr (const uint256 &hash, const std::array< uint8_t, SCHNORR_SIZE > &sig) const
 Verify a Schnorr signature (=64 bytes). More...
 
bool VerifySchnorr (const uint256 &hash, const std::vector< uint8_t > &vchSig) const
 
bool RecoverCompact (const uint256 &hash, const std::vector< uint8_t > &vchSig)
 Recover a public key from a compact ECDSA signature. More...
 
bool Decompress ()
 Turn this public key into an uncompressed public key. More...
 
bool Derive (CPubKey &pubkeyChild, ChainCode &ccChild, unsigned int nChild, const ChainCode &cc) const
 Derive BIP32 child pubkey. More...
 

Static Public Member Functions

static bool ValidSize (const std::vector< uint8_t > &vch)
 
static bool CheckLowS (const boost::sliced_range< const std::vector< uint8_t >> &vchSig)
 Check whether a DER-serialized ECDSA signature is normalized (lower-S). More...
 
static bool CheckLowS (const std::vector< uint8_t > &vchSig)
 

Static Public Attributes

static constexpr unsigned int SIZE = 65
 secp256k1: More...
 
static constexpr unsigned int COMPRESSED_SIZE = 33
 
static constexpr unsigned int SCHNORR_SIZE = 64
 
static constexpr unsigned int SIGNATURE_SIZE = 72
 
static constexpr unsigned int COMPACT_SIGNATURE_SIZE = 65
 

Private Member Functions

void Invalidate ()
 Set this key data to be invalid. More...
 

Static Private Member Functions

static unsigned int GetLen (uint8_t chHeader)
 Compute the length of a pubkey with a given first byte. More...
 

Private Attributes

uint8_t vch [SIZE]
 see www.keylength.com script supports up to 75 for single byte push More...
 

Friends

bool operator== (const CPubKey &a, const CPubKey &b)
 Comparator implementation. More...
 
bool operator!= (const CPubKey &a, const CPubKey &b)
 
bool operator< (const CPubKey &a, const CPubKey &b)
 

Detailed Description

An encapsulated public key.

Definition at line 31 of file pubkey.h.

Constructor & Destructor Documentation

◆ CPubKey() [1/3]

CPubKey::CPubKey ( )
inline

Construct an invalid public key.

Definition at line 75 of file pubkey.h.

◆ CPubKey() [2/3]

template<typename T >
CPubKey::CPubKey ( const T  pbegin,
const T  pend 
)
inline

Construct a public key using begin/end iterators to byte data.

Definition at line 88 of file pubkey.h.

◆ CPubKey() [3/3]

CPubKey::CPubKey ( const std::vector< uint8_t > &  _vch)
inlineexplicit

Construct a public key from a byte vector.

Definition at line 93 of file pubkey.h.

Member Function Documentation

◆ begin()

const uint8_t* CPubKey::begin ( ) const
inline

Definition at line 100 of file pubkey.h.

Here is the caller graph for this function:

◆ CheckLowS() [1/2]

bool CPubKey::CheckLowS ( const boost::sliced_range< const std::vector< uint8_t >> &  vchSig)
static

Check whether a DER-serialized ECDSA signature is normalized (lower-S).

Definition at line 342 of file pubkey.cpp.

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

◆ CheckLowS() [2/2]

static bool CPubKey::CheckLowS ( const std::vector< uint8_t > &  vchSig)
inlinestatic

Definition at line 179 of file pubkey.h.

◆ data()

const uint8_t* CPubKey::data ( ) const
inline

Definition at line 99 of file pubkey.h.

◆ Decompress()

bool CPubKey::Decompress ( )

Turn this public key into an uncompressed public key.

Definition at line 268 of file pubkey.cpp.

Here is the call graph for this function:

◆ Derive()

bool CPubKey::Derive ( CPubKey pubkeyChild,
ChainCode ccChild,
unsigned int  nChild,
const ChainCode cc 
) const

Derive BIP32 child pubkey.

Definition at line 287 of file pubkey.cpp.

Here is the call graph for this function:

◆ end()

const uint8_t* CPubKey::end ( ) const
inline

Definition at line 101 of file pubkey.h.

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

◆ GetHash()

uint256 CPubKey::GetHash ( ) const
inline

Get the 256-bit hash of this public key.

Definition at line 142 of file pubkey.h.

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

◆ GetID()

CKeyID CPubKey::GetID ( ) const
inline

Get the KeyID of this public key (hash of its serialization)

Definition at line 137 of file pubkey.h.

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

◆ GetLen()

static unsigned int CPubKey::GetLen ( uint8_t  chHeader)
inlinestaticprivate

Compute the length of a pubkey with a given first byte.

Definition at line 56 of file pubkey.h.

◆ Invalidate()

void CPubKey::Invalidate ( )
inlineprivate

Set this key data to be invalid.

Definition at line 67 of file pubkey.h.

◆ IsCompressed()

bool CPubKey::IsCompressed ( ) const
inline

Check whether this is a compressed public key.

Definition at line 156 of file pubkey.h.

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

◆ IsFullyValid()

bool CPubKey::IsFullyValid ( ) const

fully validate whether this is a valid public key (more expensive than IsValid())

Definition at line 257 of file pubkey.cpp.

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

◆ IsValid()

bool CPubKey::IsValid ( ) const
inline

Definition at line 149 of file pubkey.h.

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

◆ operator[]()

const uint8_t& CPubKey::operator[] ( unsigned int  pos) const
inline

Definition at line 102 of file pubkey.h.

◆ RecoverCompact()

bool CPubKey::RecoverCompact ( const uint256 hash,
const std::vector< uint8_t > &  vchSig 
)

Recover a public key from a compact ECDSA signature.

Definition at line 228 of file pubkey.cpp.

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

◆ Serialize()

template<typename Stream >
void CPubKey::Serialize ( Stream &  s) const
inline

Implement serialization, as if this was a byte vector.

Definition at line 117 of file pubkey.h.

Here is the call graph for this function:

◆ Set()

template<typename T >
void CPubKey::Set ( const T  pbegin,
const T  pend 
)
inline

Initialize a public key using begin/end iterators to byte data.

Definition at line 78 of file pubkey.h.

Here is the caller graph for this function:

◆ size()

unsigned int CPubKey::size ( ) const
inline

Simple read-only vector-like interface to the pubkey data.

Definition at line 98 of file pubkey.h.

Here is the caller graph for this function:

◆ Unserialize()

template<typename Stream >
void CPubKey::Unserialize ( Stream &  s)
inline

Definition at line 122 of file pubkey.h.

Here is the call graph for this function:

◆ ValidSize()

static bool CPubKey::ValidSize ( const std::vector< uint8_t > &  vch)
inlinestatic

Definition at line 70 of file pubkey.h.

Here is the caller graph for this function:

◆ VerifyECDSA()

bool CPubKey::VerifyECDSA ( const uint256 hash,
const std::vector< uint8_t > &  vchSig 
) const

Verify a DER-serialized ECDSA signature (~72 bytes).

If this public key is not fully valid, the return value will be false.

libsecp256k1's ECDSA verification requires lower-S signatures, which have not historically been enforced in Bitcoin, so normalize them first.

Definition at line 173 of file pubkey.cpp.

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

◆ VerifySchnorr() [1/2]

bool CPubKey::VerifySchnorr ( const uint256 hash,
const std::array< uint8_t, SCHNORR_SIZE > &  sig 
) const

Verify a Schnorr signature (=64 bytes).

If this public key is not fully valid, the return value will be false.

Definition at line 200 of file pubkey.cpp.

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

◆ VerifySchnorr() [2/2]

bool CPubKey::VerifySchnorr ( const uint256 hash,
const std::vector< uint8_t > &  vchSig 
) const

Definition at line 216 of file pubkey.cpp.

Here is the call graph for this function:

Friends And Related Function Documentation

◆ operator!=

bool operator!= ( const CPubKey a,
const CPubKey b 
)
friend

Definition at line 108 of file pubkey.h.

◆ operator<

bool operator< ( const CPubKey a,
const CPubKey b 
)
friend

Definition at line 111 of file pubkey.h.

◆ operator==

bool operator== ( const CPubKey a,
const CPubKey b 
)
friend

Comparator implementation.

Definition at line 105 of file pubkey.h.

Member Data Documentation

◆ COMPACT_SIGNATURE_SIZE

constexpr unsigned int CPubKey::COMPACT_SIGNATURE_SIZE = 65
static

Definition at line 40 of file pubkey.h.

◆ COMPRESSED_SIZE

constexpr unsigned int CPubKey::COMPRESSED_SIZE = 33
static

Definition at line 37 of file pubkey.h.

◆ SCHNORR_SIZE

constexpr unsigned int CPubKey::SCHNORR_SIZE = 64
static

Definition at line 38 of file pubkey.h.

◆ SIGNATURE_SIZE

constexpr unsigned int CPubKey::SIGNATURE_SIZE = 72
static

Definition at line 39 of file pubkey.h.

◆ SIZE

constexpr unsigned int CPubKey::SIZE = 65
static

secp256k1:

Definition at line 36 of file pubkey.h.

◆ vch

uint8_t CPubKey::vch[SIZE]
private

see www.keylength.com script supports up to 75 for single byte push

Just store the serialized data. Its length can very cheaply be computed from the first byte.

Definition at line 46 of file pubkey.h.


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