Bitcoin Core
27.99.0
P2P Digital Currency

An encapsulated private key. More...
#include <key.h>
Public Member Functions  
CKey () noexcept=default  
CKey (CKey &&) noexcept=default  
CKey &  operator= (CKey &&) noexcept=default 
CKey &  operator= (const CKey &other) 
CKey (const CKey &other)  
template<typename T >  
void  Set (const T pbegin, const T pend, bool fCompressedIn) 
Initialize using begin and end iterators to byte data. More...  
unsigned int  size () const 
Simple readonly vectorlike interface. More...  
const std::byte *  data () const 
const std::byte *  begin () const 
const std::byte *  end () const 
bool  IsValid () const 
Check whether this private key is valid. More...  
bool  IsCompressed () const 
Check whether the public key corresponding to this private key is (to be) compressed. More...  
void  MakeNewKey (bool fCompressed) 
Generate a new private key using a cryptographic PRNG. More...  
CPrivKey  GetPrivKey () const 
Convert the private key to a CPrivKey (serialized OpenSSL private key data). More...  
CPubKey  GetPubKey () const 
Compute the public key from a private key. More...  
bool  Sign (const uint256 &hash, std::vector< unsigned char > &vchSig, bool grind=true, uint32_t test_case=0) const 
Create a DERserialized signature. More...  
bool  SignCompact (const uint256 &hash, std::vector< unsigned char > &vchSig) const 
Create a compact signature (65 bytes), which allows reconstructing the used public key. More...  
bool  SignSchnorr (const uint256 &hash, Span< unsigned char > sig, const uint256 *merkle_root, const uint256 &aux) const 
Create a BIP340 Schnorr signature, for the xonlypubkey corresponding to *this, optionally tweaked by *merkle_root. More...  
bool  Derive (CKey &keyChild, ChainCode &ccChild, unsigned int nChild, const ChainCode &cc) const 
Derive BIP32 child key. More...  
bool  VerifyPubKey (const CPubKey &vchPubKey) const 
Verify thoroughly whether a private key and a public key match. More...  
bool  Load (const CPrivKey &privkey, const CPubKey &vchPubKey, bool fSkipCheck) 
Load private key and check that public key matches. More...  
EllSwiftPubKey  EllSwiftCreate (Span< const std::byte > entropy) const 
Create an ellswiftencoded public key for this key, with specified entropy. More...  
ECDHSecret  ComputeBIP324ECDHSecret (const EllSwiftPubKey &their_ellswift, const EllSwiftPubKey &our_ellswift, bool initiating) const 
Compute a BIP324style ECDH shared secret. More...  
Static Public Attributes  
static const unsigned int  SIZE = 279 
secp256k1: More...  
static const unsigned int  COMPRESSED_SIZE = 214 
Private Types  
using  KeyType = std::array< unsigned char, 32 > 
see www.keylength.com script supports up to 75 for single byte push More...  
Private Member Functions  
void  MakeKeyData () 
void  ClearKeyData () 
Static Private Member Functions  
static bool  Check (const unsigned char *vch) 
Check whether the 32byte array pointed to by vch is valid keydata. More...  
Private Attributes  
bool  fCompressed {false} 
Whether the public key corresponding to this private key is (to be) compressed. More...  
secure_unique_ptr< KeyType >  keydata 
The actual byte data. nullptr for invalid keys. More...  
Friends  
bool  operator== (const CKey &a, const CKey &b) 

private 

defaultnoexcept 

defaultnoexcept 

inline 

staticprivate 

inlineprivate 
ECDHSecret CKey::ComputeBIP324ECDHSecret  (  const EllSwiftPubKey &  their_ellswift, 
const EllSwiftPubKey &  our_ellswift,  
bool  initiating  
)  const 
Compute a BIP324style ECDH shared secret.
Definition at line 346 of file key.cpp.

inline 
EllSwiftPubKey CKey::EllSwiftCreate  (  Span< const std::byte >  entropy  )  const 
Create an ellswiftencoded public key for this key, with specified entropy.
entropy must be a 32byte span with additional entropy to use in the encoding. Every public key has ~2^256 different encodings, and this function will deterministically pick one of them, based on entropy. Note that even without truly random entropy, the resulting encoding will be indistinguishable from uniform to any adversary who does not know the private key (because the private key itself is always used as entropy as well).
Definition at line 330 of file key.cpp.

inline 
CPrivKey CKey::GetPrivKey  (  )  const 
CPubKey CKey::GetPubKey  (  )  const 

inline 

inline 

inlineprivate 
void CKey::MakeNewKey  (  bool  fCompressed  ) 
bool CKey::Sign  (  const uint256 &  hash, 
std::vector< unsigned char > &  vchSig,  
bool  grind = true , 

uint32_t  test_case = 0 

)  const 
bool CKey::SignCompact  (  const uint256 &  hash, 
std::vector< unsigned char > &  vchSig  
)  const 
Create a compact signature (65 bytes), which allows reconstructing the used public key.
The format is one header byte, followed by two times 32 bytes for the serialized r and s values. The header byte: 0x1B = first key with even y, 0x1C = first key with odd y, 0x1D = second key with even y, 0x1E = second key with odd y, add 0x04 for compressed keys.
Definition at line 249 of file key.cpp.
bool CKey::SignSchnorr  (  const uint256 &  hash, 
Span< unsigned char >  sig,  
const uint256 *  merkle_root,  
const uint256 &  aux  
)  const 
Create a BIP340 Schnorr signature, for the xonlypubkey corresponding to *this, optionally tweaked by *merkle_root.
Additional nonce entropy is provided through aux.
merkle_root is used to optionally perform tweaking of the private key, as specified in BIP341:
Definition at line 272 of file key.cpp.

inline 
bool CKey::VerifyPubKey  (  const CPubKey &  vchPubKey  )  const 

private 

private 