Skip to content

Commit d43297c

Browse files
committed
Merge pull request #6468
6f8b6d3 don't try to decode invalid encoded ext keys (Jonas Schnelli) 8d2af54 extend bip32 tests to cover Base58c/CExtKey decode (Jonas Schnelli) 7cb1f9f fix and extend CBitcoinExtKeyBase template (Jonas Schnelli)
2 parents f6850d5 + 6f8b6d3 commit d43297c

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

src/base58.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,14 +146,21 @@ template<typename K, int Size, CChainParams::Base58Type Type> class CBitcoinExtK
146146

147147
K GetKey() {
148148
K ret;
149-
ret.Decode(&vchData[0], &vchData[Size]);
149+
if (vchData.size() == Size) {
150+
//if base58 encouded data not holds a ext key, return a !IsValid() key
151+
ret.Decode(&vchData[0]);
152+
}
150153
return ret;
151154
}
152155

153156
CBitcoinExtKeyBase(const K &key) {
154157
SetKey(key);
155158
}
156159

160+
CBitcoinExtKeyBase(const std::string& strBase58c) {
161+
SetString(strBase58c.c_str(), Params().Base58Prefix(Type).size());
162+
}
163+
157164
CBitcoinExtKeyBase() {}
158165
};
159166

src/test/bip32_tests.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,23 @@ void RunTest(const TestVector &test) {
8888
unsigned char data[74];
8989
key.Encode(data);
9090
pubkey.Encode(data);
91+
9192
// Test private key
9293
CBitcoinExtKey b58key; b58key.SetKey(key);
9394
BOOST_CHECK(b58key.ToString() == derive.prv);
95+
96+
CBitcoinExtKey b58keyDecodeCheck(derive.prv);
97+
CExtKey checkKey = b58keyDecodeCheck.GetKey();
98+
assert(checkKey == key); //ensure a base58 decoded key also matches
99+
94100
// Test public key
95101
CBitcoinExtPubKey b58pubkey; b58pubkey.SetKey(pubkey);
96102
BOOST_CHECK(b58pubkey.ToString() == derive.pub);
103+
104+
CBitcoinExtPubKey b58PubkeyDecodeCheck(derive.pub);
105+
CExtPubKey checkPubKey = b58PubkeyDecodeCheck.GetKey();
106+
assert(checkPubKey == pubkey); //ensure a base58 decoded pubkey also matches
107+
97108
// Derive new keys
98109
CExtKey keyNew;
99110
BOOST_CHECK(key.Derive(keyNew, derive.nChild));

0 commit comments

Comments
 (0)