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