Skip to content

Commit

Permalink
merge bitcoin#23595: Add ParseHex<std::byte>() helper
Browse files Browse the repository at this point in the history
includes:
- facd1fb

continuation of cf4522f in dash#5901
  • Loading branch information
kwvg committed Oct 29, 2024
1 parent c2defe7 commit aa945c2
Show file tree
Hide file tree
Showing 9 changed files with 14 additions and 13 deletions.
4 changes: 2 additions & 2 deletions src/key.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -348,11 +348,11 @@ bool CExtKey::Derive(CExtKey &out, unsigned int _nChild) const {
return key.Derive(out.key, out.chaincode, _nChild, chaincode);
}

void CExtKey::SetSeed(Span<const uint8_t> seed)
void CExtKey::SetSeed(Span<const std::byte> seed)
{
static const unsigned char hashkey[] = {'B','i','t','c','o','i','n',' ','s','e','e','d'};
std::vector<unsigned char, secure_allocator<unsigned char>> vout(64);
CHMAC_SHA512{hashkey, sizeof(hashkey)}.Write(seed.data(), seed.size()).Finalize(vout.data());
CHMAC_SHA512{hashkey, sizeof(hashkey)}.Write(UCharCast(seed.data()), seed.size()).Finalize(vout.data());
key.Set(vout.data(), vout.data() + 32, true);
memcpy(chaincode.begin(), vout.data() + 32, 32);
nDepth = 0;
Expand Down
4 changes: 2 additions & 2 deletions src/key.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ class CKey

//! Simple read-only vector-like interface.
unsigned int size() const { return (fValid ? keydata.size() : 0); }
const unsigned char* data() const { return keydata.data(); }
const std::byte* data() const { return reinterpret_cast<const std::byte*>(keydata.data()); }
const unsigned char* begin() const { return keydata.data(); }
const unsigned char* end() const { return keydata.data() + size(); }

Expand Down Expand Up @@ -188,7 +188,7 @@ struct CExtKey {
void Decode(const unsigned char code[BIP32_EXTKEY_SIZE]);
bool Derive(CExtKey& out, unsigned int nChild) const;
CExtPubKey Neuter() const;
void SetSeed(Span<const uint8_t> seed);
void SetSeed(Span<const std::byte> seed);
};

/** Initialize the elliptic curve support. May not be called twice without calling ECC_Stop first. */
Expand Down
7 changes: 4 additions & 3 deletions src/test/bip32_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,11 +120,12 @@ const std::vector<std::string> TEST5 = {
"xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHL"
};

void RunTest(const TestVector &test) {
std::vector<unsigned char> seed = ParseHex(test.strHexMaster);
void RunTest(const TestVector& test)
{
std::vector<std::byte> seed{ParseHex<std::byte>(test.strHexMaster)};
CExtKey key;
CExtPubKey pubkey;
key.SetSeed(seed);
key.SetSeed(MakeByteSpan(seed));
pubkey = key.Neuter();
for (const TestDerivation &derive : test.vDerive) {
unsigned char data[74];
Expand Down
2 changes: 1 addition & 1 deletion src/test/key_io_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ BOOST_AUTO_TEST_CASE(key_io_valid_parse)
continue;
}
std::string exp_base58string = test[0].get_str();
std::vector<unsigned char> exp_payload = ParseHex(test[1].get_str());
const std::vector<std::byte> exp_payload{ParseHex<std::byte>(test[1].get_str())};
const UniValue &metadata = test[2].get_obj();
bool isPrivkey = find_value(metadata, "isPrivkey").get_bool();
SelectParams(find_value(metadata, "chain").get_str());
Expand Down
2 changes: 1 addition & 1 deletion src/wallet/hdchain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ void CHDChain::DeriveChildExtKey(uint32_t nAccountIndex, bool fInternal, uint32_
CExtKey changeKey; //key at m/purpose'/coin_type'/account'/change
CExtKey childKey; //key at m/purpose'/coin_type'/account'/change/address_index

masterKey.SetSeed(vchSeed);
masterKey.SetSeed(MakeByteSpan(vchSeed));

// Use hardened derivation for purpose, coin_type and account
// (keys >= 0x80000000 are hardened after bip32)
Expand Down
2 changes: 1 addition & 1 deletion src/wallet/rpcdump.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1007,7 +1007,7 @@ RPCHelpMan dumpwallet()
file << "# HD seed: " << HexStr(vchSeed) << "\n\n";

CExtKey masterKey;
masterKey.SetSeed(vchSeed);
masterKey.SetSeed(MakeByteSpan(vchSeed));

file << "# extended private masterkey: " << EncodeExtKey(masterKey) << "\n";

Expand Down
2 changes: 1 addition & 1 deletion src/wallet/scriptpubkeyman.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,7 @@ void LegacyScriptPubKeyMan::UpgradeKeyMetadata()

CExtKey masterKey;
SecureVector vchSeed = hdChainCurrent.GetSeed();
masterKey.SetSeed(vchSeed);
masterKey.SetSeed(MakeByteSpan(vchSeed));
CKeyID master_id = masterKey.key.GetPubKey().GetID();

std::unique_ptr<WalletBatch> batch = std::make_unique<WalletBatch>(m_storage.GetDatabase());
Expand Down
2 changes: 1 addition & 1 deletion src/wallet/test/bip39_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ BOOST_AUTO_TEST_CASE(bip39_vectors)
CExtKey key;
CExtPubKey pubkey;

key.SetSeed(seed);
key.SetSeed(MakeByteSpan(seed));
pubkey = key.Neuter();

// printf("CBitcoinExtKey: %s\n", EncodeExtKey(key).c_str());
Expand Down
2 changes: 1 addition & 1 deletion src/wallet/wallet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5866,7 +5866,7 @@ void CWallet::SetupDescriptorScriptPubKeyMans()

// Get the extended key
CExtKey master_key;
master_key.SetSeed(seed_key);
master_key.SetSeed(MakeByteSpan(seed_key));

for (bool internal : {false, true}) {
{ // OUTPUT_TYPE is only one: LEGACY
Expand Down

0 comments on commit aa945c2

Please sign in to comment.