From 1beedb9dd4633f7e365f470f9dbddc8596b1ee75 Mon Sep 17 00:00:00 2001 From: warptangent Date: Sat, 6 Dec 2014 01:59:13 -0800 Subject: Extract check for deterministic keys to wallet2::is_deterministic() It's cleaner for wallet2.cpp and it also allows deterministic check by simplewallet.cpp. --- src/wallet/wallet2.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'src/wallet/wallet2.cpp') diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 066b006b4..58b715f20 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -89,8 +89,23 @@ void wallet2::init(const std::string& daemon_address, uint64_t upper_transaction m_daemon_address = daemon_address; } //---------------------------------------------------------------------------------------------------- +bool wallet2::is_deterministic() +{ + crypto::secret_key second; + keccak((uint8_t *)&get_account().get_keys().m_spend_secret_key, sizeof(crypto::secret_key), (uint8_t *)&second, sizeof(crypto::secret_key)); + sc_reduce32((uint8_t *)&second); + bool keys_deterministic = memcmp(second.data,get_account().get_keys().m_view_secret_key.data, sizeof(crypto::secret_key)) == 0; + return keys_deterministic; +} +//---------------------------------------------------------------------------------------------------- bool wallet2::get_seed(std::string& electrum_words) { + bool keys_deterministic = is_deterministic(); + if (!keys_deterministic) + { + std::cout << "This is not a deterministic wallet" << std::endl; + return false; + } if (seed_language.empty()) { std::cout << "seed_language not set" << std::endl; @@ -99,12 +114,7 @@ bool wallet2::get_seed(std::string& electrum_words) crypto::ElectrumWords::bytes_to_words(get_account().get_keys().m_spend_secret_key, electrum_words, seed_language); - crypto::secret_key second; - keccak((uint8_t *)&get_account().get_keys().m_spend_secret_key, sizeof(crypto::secret_key), (uint8_t *)&second, sizeof(crypto::secret_key)); - - sc_reduce32((uint8_t *)&second); - - return memcmp(second.data,get_account().get_keys().m_view_secret_key.data, sizeof(crypto::secret_key)) == 0; + return true; } /*! * \brief Gets the seed language -- cgit v1.2.3 From f9822c483ead4c392fdf1f1317af31a1bfa9e228 Mon Sep 17 00:00:00 2001 From: warptangent Date: Sat, 6 Dec 2014 03:09:46 -0800 Subject: wallet JSON update for non-deterministic wallet data wallet2::store_keys() and wallet2::load_keys() should only use the JSON attribute "seed_language" when applicable. That is only for deterministic wallets. - store_keys() don't add JSON attribute "seed_language" if seed_language is empty - load_keys() don't call set_seed_language if JSON attribute "seed_language" not present --- src/wallet/wallet2.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/wallet/wallet2.cpp') diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 58b715f20..163e19df4 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -486,8 +486,11 @@ bool wallet2::store_keys(const std::string& keys_file_name, const std::string& p rapidjson::Value value(rapidjson::kStringType); value.SetString(account_data.c_str(), account_data.length()); json.AddMember("key_data", value, json.GetAllocator()); - value.SetString(seed_language.c_str(), seed_language.length()); - json.AddMember("seed_language", value, json.GetAllocator()); + if (!seed_language.empty()) + { + value.SetString(seed_language.c_str(), seed_language.length()); + json.AddMember("seed_language", value, json.GetAllocator()); + } // Serialize the JSON object rapidjson::StringBuffer buffer; @@ -553,8 +556,11 @@ void wallet2::load_keys(const std::string& keys_file_name, const std::string& pa { account_data = std::string(json["key_data"].GetString(), json["key_data"].GetString() + json["key_data"].GetStringLength()); - set_seed_language(std::string(json["seed_language"].GetString(), json["seed_language"].GetString() + - json["seed_language"].GetStringLength())); + if (json.HasMember("seed_language")) + { + set_seed_language(std::string(json["seed_language"].GetString(), json["seed_language"].GetString() + + json["seed_language"].GetStringLength())); + } } const cryptonote::account_keys& keys = m_account.get_keys(); -- cgit v1.2.3