diff --git a/src/test/bip32_tests.cpp b/src/test/bip32_tests.cpp index 6955883d148..8a52a46b19c 100644 --- a/src/test/bip32_tests.cpp +++ b/src/test/bip32_tests.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -230,4 +231,78 @@ BOOST_AUTO_TEST_CASE(bip32_max_depth) { BOOST_CHECK(!pubkey_parent.Derive(pubkey_child, 0)); } +BOOST_AUTO_TEST_CASE(parse_hd_keypath) +{ + std::vector keypath; + + BOOST_CHECK(ParseHDKeypath("1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1", keypath)); + BOOST_CHECK(!ParseHDKeypath("///////////////////////////", keypath)); + + BOOST_CHECK(ParseHDKeypath("1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1'/1", keypath)); + BOOST_CHECK(!ParseHDKeypath("//////////////////////////'/", keypath)); + + BOOST_CHECK(ParseHDKeypath("1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/", keypath)); + BOOST_CHECK(!ParseHDKeypath("1///////////////////////////", keypath)); + + BOOST_CHECK(ParseHDKeypath("1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1'/", keypath)); + BOOST_CHECK(!ParseHDKeypath("1/'//////////////////////////", keypath)); + + BOOST_CHECK(ParseHDKeypath("", keypath)); + BOOST_CHECK(!ParseHDKeypath(" ", keypath)); + + BOOST_CHECK(ParseHDKeypath("0", keypath)); + BOOST_CHECK(!ParseHDKeypath("O", keypath)); + + BOOST_CHECK(ParseHDKeypath("0000'/0000'/0000'", keypath)); + BOOST_CHECK(!ParseHDKeypath("0000,/0000,/0000,", keypath)); + + BOOST_CHECK(ParseHDKeypath("01234", keypath)); + BOOST_CHECK(!ParseHDKeypath("0x1234", keypath)); + + BOOST_CHECK(ParseHDKeypath("1", keypath)); + BOOST_CHECK(!ParseHDKeypath(" 1", keypath)); + + BOOST_CHECK(ParseHDKeypath("42", keypath)); + BOOST_CHECK(!ParseHDKeypath("m42", keypath)); + + BOOST_CHECK(ParseHDKeypath("4294967295", keypath)); // 4294967295 == 0xFFFFFFFF (uint32_t max) + BOOST_CHECK(!ParseHDKeypath("4294967296", keypath)); // 4294967296 == 0xFFFFFFFF (uint32_t max) + 1 + + BOOST_CHECK(ParseHDKeypath("m", keypath)); + BOOST_CHECK(!ParseHDKeypath("n", keypath)); + + BOOST_CHECK(ParseHDKeypath("m/", keypath)); + BOOST_CHECK(!ParseHDKeypath("n/", keypath)); + + BOOST_CHECK(ParseHDKeypath("m/0", keypath)); + BOOST_CHECK(!ParseHDKeypath("n/0", keypath)); + + BOOST_CHECK(ParseHDKeypath("m/0'", keypath)); + BOOST_CHECK(!ParseHDKeypath("m/0''", keypath)); + + BOOST_CHECK(ParseHDKeypath("m/0'/0'", keypath)); + BOOST_CHECK(!ParseHDKeypath("m/'0/0'", keypath)); + + BOOST_CHECK(ParseHDKeypath("m/0/0", keypath)); + BOOST_CHECK(!ParseHDKeypath("n/0/0", keypath)); + + BOOST_CHECK(ParseHDKeypath("m/0/0/00", keypath)); + BOOST_CHECK(!ParseHDKeypath("m/0/0/f00", keypath)); + + BOOST_CHECK(ParseHDKeypath("m/0/0/000000000000000000000000000000000000000000000000000000000000000000000000000000000000", keypath)); + BOOST_CHECK(!ParseHDKeypath("m/1/1/111111111111111111111111111111111111111111111111111111111111111111111111111111111111", keypath)); + + BOOST_CHECK(ParseHDKeypath("m/0/00/0", keypath)); + BOOST_CHECK(!ParseHDKeypath("m/0'/00/'0", keypath)); + + BOOST_CHECK(ParseHDKeypath("m/1/", keypath)); + BOOST_CHECK(!ParseHDKeypath("m/1//", keypath)); + + BOOST_CHECK(ParseHDKeypath("m/0/4294967295", keypath)); // 4294967295 == 0xFFFFFFFF (uint32_t max) + BOOST_CHECK(!ParseHDKeypath("m/0/4294967296", keypath)); // 4294967296 == 0xFFFFFFFF (uint32_t max) + 1 + + BOOST_CHECK(ParseHDKeypath("m/4294967295", keypath)); // 4294967295 == 0xFFFFFFFF (uint32_t max) + BOOST_CHECK(!ParseHDKeypath("m/4294967296", keypath)); // 4294967296 == 0xFFFFFFFF (uint32_t max) + 1 +} + BOOST_AUTO_TEST_SUITE_END() diff --git a/src/wallet/test/psbt_wallet_tests.cpp b/src/wallet/test/psbt_wallet_tests.cpp index 8d8dc2ce2b0..ec4ba0eaace 100644 --- a/src/wallet/test/psbt_wallet_tests.cpp +++ b/src/wallet/test/psbt_wallet_tests.cpp @@ -4,7 +4,6 @@ #include #include -#include #include #include @@ -79,79 +78,5 @@ BOOST_AUTO_TEST_CASE(psbt_updater_test) BOOST_CHECK(m_wallet.FillPSBT(psbtx, {.sign = true, .bip32_derivs = true}, complete)); } -BOOST_AUTO_TEST_CASE(parse_hd_keypath) -{ - std::vector keypath; - - BOOST_CHECK(ParseHDKeypath("1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1", keypath)); - BOOST_CHECK(!ParseHDKeypath("///////////////////////////", keypath)); - - BOOST_CHECK(ParseHDKeypath("1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1'/1", keypath)); - BOOST_CHECK(!ParseHDKeypath("//////////////////////////'/", keypath)); - - BOOST_CHECK(ParseHDKeypath("1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/", keypath)); - BOOST_CHECK(!ParseHDKeypath("1///////////////////////////", keypath)); - - BOOST_CHECK(ParseHDKeypath("1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1/1'/", keypath)); - BOOST_CHECK(!ParseHDKeypath("1/'//////////////////////////", keypath)); - - BOOST_CHECK(ParseHDKeypath("", keypath)); - BOOST_CHECK(!ParseHDKeypath(" ", keypath)); - - BOOST_CHECK(ParseHDKeypath("0", keypath)); - BOOST_CHECK(!ParseHDKeypath("O", keypath)); - - BOOST_CHECK(ParseHDKeypath("0000'/0000'/0000'", keypath)); - BOOST_CHECK(!ParseHDKeypath("0000,/0000,/0000,", keypath)); - - BOOST_CHECK(ParseHDKeypath("01234", keypath)); - BOOST_CHECK(!ParseHDKeypath("0x1234", keypath)); - - BOOST_CHECK(ParseHDKeypath("1", keypath)); - BOOST_CHECK(!ParseHDKeypath(" 1", keypath)); - - BOOST_CHECK(ParseHDKeypath("42", keypath)); - BOOST_CHECK(!ParseHDKeypath("m42", keypath)); - - BOOST_CHECK(ParseHDKeypath("4294967295", keypath)); // 4294967295 == 0xFFFFFFFF (uint32_t max) - BOOST_CHECK(!ParseHDKeypath("4294967296", keypath)); // 4294967296 == 0xFFFFFFFF (uint32_t max) + 1 - - BOOST_CHECK(ParseHDKeypath("m", keypath)); - BOOST_CHECK(!ParseHDKeypath("n", keypath)); - - BOOST_CHECK(ParseHDKeypath("m/", keypath)); - BOOST_CHECK(!ParseHDKeypath("n/", keypath)); - - BOOST_CHECK(ParseHDKeypath("m/0", keypath)); - BOOST_CHECK(!ParseHDKeypath("n/0", keypath)); - - BOOST_CHECK(ParseHDKeypath("m/0'", keypath)); - BOOST_CHECK(!ParseHDKeypath("m/0''", keypath)); - - BOOST_CHECK(ParseHDKeypath("m/0'/0'", keypath)); - BOOST_CHECK(!ParseHDKeypath("m/'0/0'", keypath)); - - BOOST_CHECK(ParseHDKeypath("m/0/0", keypath)); - BOOST_CHECK(!ParseHDKeypath("n/0/0", keypath)); - - BOOST_CHECK(ParseHDKeypath("m/0/0/00", keypath)); - BOOST_CHECK(!ParseHDKeypath("m/0/0/f00", keypath)); - - BOOST_CHECK(ParseHDKeypath("m/0/0/000000000000000000000000000000000000000000000000000000000000000000000000000000000000", keypath)); - BOOST_CHECK(!ParseHDKeypath("m/1/1/111111111111111111111111111111111111111111111111111111111111111111111111111111111111", keypath)); - - BOOST_CHECK(ParseHDKeypath("m/0/00/0", keypath)); - BOOST_CHECK(!ParseHDKeypath("m/0'/00/'0", keypath)); - - BOOST_CHECK(ParseHDKeypath("m/1/", keypath)); - BOOST_CHECK(!ParseHDKeypath("m/1//", keypath)); - - BOOST_CHECK(ParseHDKeypath("m/0/4294967295", keypath)); // 4294967295 == 0xFFFFFFFF (uint32_t max) - BOOST_CHECK(!ParseHDKeypath("m/0/4294967296", keypath)); // 4294967296 == 0xFFFFFFFF (uint32_t max) + 1 - - BOOST_CHECK(ParseHDKeypath("m/4294967295", keypath)); // 4294967295 == 0xFFFFFFFF (uint32_t max) - BOOST_CHECK(!ParseHDKeypath("m/4294967296", keypath)); // 4294967296 == 0xFFFFFFFF (uint32_t max) + 1 -} - BOOST_AUTO_TEST_SUITE_END() } // namespace wallet