mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-27 03:33:27 -03:00
Store version bytes and be able to serialize them in CExtPubKey
CExtPubKey does not store the version bytes for the extended public key. We store these so that a CExtPubKey can be serialized and deserialized with the same version bytes.
This commit is contained in:
parent
5fdaf6a2ad
commit
a69332fd89
2 changed files with 16 additions and 0 deletions
|
@ -352,6 +352,18 @@ void CExtPubKey::Decode(const unsigned char code[BIP32_EXTKEY_SIZE]) {
|
||||||
if ((nDepth == 0 && (nChild != 0 || ReadLE32(vchFingerprint) != 0)) || !pubkey.IsFullyValid()) pubkey = CPubKey();
|
if ((nDepth == 0 && (nChild != 0 || ReadLE32(vchFingerprint) != 0)) || !pubkey.IsFullyValid()) pubkey = CPubKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CExtPubKey::EncodeWithVersion(unsigned char code[BIP32_EXTKEY_WITH_VERSION_SIZE]) const
|
||||||
|
{
|
||||||
|
memcpy(code, version, 4);
|
||||||
|
Encode(&code[4]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CExtPubKey::DecodeWithVersion(const unsigned char code[BIP32_EXTKEY_WITH_VERSION_SIZE])
|
||||||
|
{
|
||||||
|
memcpy(version, code, 4);
|
||||||
|
Decode(&code[4]);
|
||||||
|
}
|
||||||
|
|
||||||
bool CExtPubKey::Derive(CExtPubKey &out, unsigned int _nChild) const {
|
bool CExtPubKey::Derive(CExtPubKey &out, unsigned int _nChild) const {
|
||||||
out.nDepth = nDepth + 1;
|
out.nDepth = nDepth + 1;
|
||||||
CKeyID id = pubkey.GetID();
|
CKeyID id = pubkey.GetID();
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
const unsigned int BIP32_EXTKEY_SIZE = 74;
|
const unsigned int BIP32_EXTKEY_SIZE = 74;
|
||||||
|
const unsigned int BIP32_EXTKEY_WITH_VERSION_SIZE = 78;
|
||||||
|
|
||||||
/** A reference to a CKey: the Hash160 of its serialized public key */
|
/** A reference to a CKey: the Hash160 of its serialized public key */
|
||||||
class CKeyID : public uint160
|
class CKeyID : public uint160
|
||||||
|
@ -283,6 +284,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CExtPubKey {
|
struct CExtPubKey {
|
||||||
|
unsigned char version[4];
|
||||||
unsigned char nDepth;
|
unsigned char nDepth;
|
||||||
unsigned char vchFingerprint[4];
|
unsigned char vchFingerprint[4];
|
||||||
unsigned int nChild;
|
unsigned int nChild;
|
||||||
|
@ -305,6 +307,8 @@ struct CExtPubKey {
|
||||||
|
|
||||||
void Encode(unsigned char code[BIP32_EXTKEY_SIZE]) const;
|
void Encode(unsigned char code[BIP32_EXTKEY_SIZE]) const;
|
||||||
void Decode(const unsigned char code[BIP32_EXTKEY_SIZE]);
|
void Decode(const unsigned char code[BIP32_EXTKEY_SIZE]);
|
||||||
|
void EncodeWithVersion(unsigned char code[BIP32_EXTKEY_WITH_VERSION_SIZE]) const;
|
||||||
|
void DecodeWithVersion(const unsigned char code[BIP32_EXTKEY_WITH_VERSION_SIZE]);
|
||||||
bool Derive(CExtPubKey& out, unsigned int nChild) const;
|
bool Derive(CExtPubKey& out, unsigned int nChild) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue