diff --git a/src/gtest/test_keystore.cpp b/src/gtest/test_keystore.cpp index 5f4ea3ab0..8c8dff1d3 100644 --- a/src/gtest/test_keystore.cpp +++ b/src/gtest/test_keystore.cpp @@ -16,7 +16,7 @@ const uint32_t SLIP44_TESTNET_TYPE = 1; -TEST(KeystoreTests, StoreAndRetrieveHDSeed) { +TEST(KeystoreTests, StoreAndRetrieveMnemonicSeed) { CBasicKeyStore keyStore; // When we haven't set a seed, we shouldn't get one @@ -45,6 +45,33 @@ TEST(KeystoreTests, StoreAndRetrieveHDSeed) { EXPECT_EQ(seed, seedOut.value()); } +TEST(KeystoreTests, StoreAndRetrieveLegacyHDSeed) { + CBasicKeyStore keyStore; + + // When we haven't set a seed, we shouldn't get one + std::optional seedOut = keyStore.GetLegacyHDSeed(); + EXPECT_FALSE(seedOut.has_value()); + + // Generate a random seed + HDSeed seed = MnemonicSeed::Random(SLIP44_TESTNET_TYPE); + + // We should be able to set and retrieve the seed + ASSERT_TRUE(keyStore.SetLegacyHDSeed(seed)); + seedOut = keyStore.GetLegacyHDSeed(); + ASSERT_TRUE(seedOut.has_value()); + EXPECT_EQ(seed, seedOut.value()); + + // Generate another random seed + HDSeed seed2 = MnemonicSeed::Random(SLIP44_TESTNET_TYPE); + EXPECT_NE(seed, seed2); + + // We should not be able to set and retrieve a different seed + EXPECT_FALSE(keyStore.SetLegacyHDSeed(seed2)); + seedOut = keyStore.GetLegacyHDSeed(); + ASSERT_TRUE(seedOut.has_value()); + EXPECT_EQ(seed, seedOut.value()); +} + TEST(KeystoreTests, SaplingKeys) { // ["sk, ask, nsk, ovk, ak, nk, ivk, default_d, default_pk_d, note_v, note_r, note_cm, note_pos, note_nf"], UniValue sapling_keys = read_json(MAKE_STRING(json_tests::sapling_key_components)); diff --git a/src/zcash/address/zip32.h b/src/zcash/address/zip32.h index 0aa2a54d7..86184b10b 100644 --- a/src/zcash/address/zip32.h +++ b/src/zcash/address/zip32.h @@ -48,6 +48,16 @@ public: uint256 Fingerprint() const; RawHDSeed RawSeed() const { return seed; } + + friend bool operator==(const HDSeed& a, const HDSeed& b) + { + return a.seed == b.seed; + } + + friend bool operator!=(const HDSeed& a, const HDSeed& b) + { + return !(a == b); + } };