| 121 | }; |
| 122 | |
| 123 | void RunTest(const TestVector &test) { |
| 124 | std::vector<unsigned char> seed = ParseHex(test.strHexMaster); |
| 125 | CExtKey key; |
| 126 | CExtPubKey pubkey; |
| 127 | key.SetSeed(seed); |
| 128 | pubkey = key.Neuter(); |
| 129 | for (const TestDerivation &derive : test.vDerive) { |
| 130 | unsigned char data[74]; |
| 131 | key.Encode(data); |
| 132 | pubkey.Encode(data); |
| 133 | |
| 134 | // Test private key |
| 135 | BOOST_CHECK(EncodeExtKey(key) == derive.prv); |
| 136 | BOOST_CHECK(DecodeExtKey(derive.prv) == key); //ensure a base58 decoded key also matches |
| 137 | |
| 138 | // Test public key |
| 139 | BOOST_CHECK(EncodeExtPubKey(pubkey) == derive.pub); |
| 140 | BOOST_CHECK(DecodeExtPubKey(derive.pub) == pubkey); //ensure a base58 decoded pubkey also matches |
| 141 | |
| 142 | // Derive new keys |
| 143 | CExtKey keyNew; |
| 144 | BOOST_CHECK(key.Derive(keyNew, derive.nChild)); |
| 145 | CExtPubKey pubkeyNew = keyNew.Neuter(); |
| 146 | if (!(derive.nChild & 0x80000000)) { |
| 147 | // Compare with public derivation |
| 148 | CExtPubKey pubkeyNew2; |
| 149 | BOOST_CHECK(pubkey.Derive(pubkeyNew2, derive.nChild)); |
| 150 | BOOST_CHECK(pubkeyNew == pubkeyNew2); |
| 151 | } |
| 152 | key = keyNew; |
| 153 | pubkey = pubkeyNew; |
| 154 | } |
| 155 | } |
| 156 | |
| 157 | } // namespace |
| 158 |
no test coverage detected