Extract check for deterministic keys to wallet2::is_deterministic()

It's cleaner for wallet2.cpp and it also allows deterministic check by
simplewallet.cpp.
This commit is contained in:
warptangent 2014-12-06 01:59:13 -08:00
parent 359ede3958
commit 1beedb9dd4
2 changed files with 20 additions and 6 deletions

View file

@ -89,8 +89,23 @@ void wallet2::init(const std::string& daemon_address, uint64_t upper_transaction
m_daemon_address = daemon_address; 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 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()) if (seed_language.empty())
{ {
std::cout << "seed_language not set" << std::endl; 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::ElectrumWords::bytes_to_words(get_account().get_keys().m_spend_secret_key, electrum_words, seed_language);
crypto::secret_key second; return true;
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;
} }
/*! /*!
* \brief Gets the seed language * \brief Gets the seed language

View file

@ -168,6 +168,10 @@ namespace tools
i_wallet2_callback* callback() const { return m_callback; } i_wallet2_callback* callback() const { return m_callback; }
void callback(i_wallet2_callback* callback) { m_callback = callback; } void callback(i_wallet2_callback* callback) { m_callback = callback; }
/*!
* \brief Checks if deterministic wallet
*/
bool is_deterministic();
bool get_seed(std::string& electrum_words); bool get_seed(std::string& electrum_words);
/*! /*!
* \brief Gets the seed language * \brief Gets the seed language