From 7cb1f9f7eb8162a792b4b87bba99fa21c682582e Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Thu, 23 Jul 2015 16:14:17 +0200 Subject: [PATCH 1/3] fix and extend CBitcoinExtKeyBase template - fix Decode call (req. only one param) - add constructor for base58c->CExtKey --- src/base58.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/base58.h b/src/base58.h index 787979c8270ec..d535491bb01c2 100644 --- a/src/base58.h +++ b/src/base58.h @@ -146,7 +146,7 @@ template class CBitcoinExtK K GetKey() { K ret; - ret.Decode(&vchData[0], &vchData[Size]); + ret.Decode(&vchData[0]); return ret; } @@ -154,6 +154,10 @@ template class CBitcoinExtK SetKey(key); } + CBitcoinExtKeyBase(const std::string& strBase58c) { + SetString(strBase58c.c_str(), Params().Base58Prefix(Type).size()); + } + CBitcoinExtKeyBase() {} }; From 8d2af54eccda83bfe86bb14069ad54d0e4ba357c Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Thu, 23 Jul 2015 16:22:37 +0200 Subject: [PATCH 2/3] extend bip32 tests to cover Base58c/CExtKey decode --- src/test/bip32_tests.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/test/bip32_tests.cpp b/src/test/bip32_tests.cpp index 0d815c27fd31a..69084213a2d44 100644 --- a/src/test/bip32_tests.cpp +++ b/src/test/bip32_tests.cpp @@ -88,12 +88,23 @@ void RunTest(const TestVector &test) { unsigned char data[74]; key.Encode(data); pubkey.Encode(data); + // Test private key CBitcoinExtKey b58key; b58key.SetKey(key); BOOST_CHECK(b58key.ToString() == derive.prv); + + CBitcoinExtKey b58keyDecodeCheck(derive.prv); + CExtKey checkKey = b58keyDecodeCheck.GetKey(); + assert(checkKey == key); //ensure a base58 decoded key also matches + // Test public key CBitcoinExtPubKey b58pubkey; b58pubkey.SetKey(pubkey); BOOST_CHECK(b58pubkey.ToString() == derive.pub); + + CBitcoinExtPubKey b58PubkeyDecodeCheck(derive.pub); + CExtPubKey checkPubKey = b58PubkeyDecodeCheck.GetKey(); + assert(checkPubKey == pubkey); //ensure a base58 decoded pubkey also matches + // Derive new keys CExtKey keyNew; BOOST_CHECK(key.Derive(keyNew, derive.nChild)); From 6f8b6d339bf6d6f7fe5a23180e668f7734755d91 Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Thu, 23 Jul 2015 21:05:00 +0200 Subject: [PATCH 3/3] don't try to decode invalid encoded ext keys --- src/base58.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/base58.h b/src/base58.h index d535491bb01c2..90014b9496a8f 100644 --- a/src/base58.h +++ b/src/base58.h @@ -146,7 +146,10 @@ template class CBitcoinExtK K GetKey() { K ret; - ret.Decode(&vchData[0]); + if (vchData.size() == Size) { + //if base58 encouded data not holds a ext key, return a !IsValid() key + ret.Decode(&vchData[0]); + } return ret; }