Merge pull request #1984

a255a540 simplewallet: allow multiline seed (moneromooo-monero)
5fce581c mnemonics: ignore multiple whitespace between words (moneromooo-monero)
This commit is contained in:
Riccardo Spagni 2017-04-24 10:49:51 +02:00
commit 0385999cda
No known key found for this signature in database
GPG key ID: 55432DF31CCD4FCD
2 changed files with 23 additions and 8 deletions

View file

@ -242,7 +242,7 @@ namespace crypto
std::vector<std::string> seed; std::vector<std::string> seed;
boost::algorithm::trim(words); boost::algorithm::trim(words);
boost::split(seed, words, boost::is_any_of(" ")); boost::split(seed, words, boost::is_any_of(" "), boost::token_compress_on);
// error on non-compliant word list // error on non-compliant word list
if (seed.size() != seed_length/2 && seed.size() != seed_length && if (seed.size() != seed_length/2 && seed.size() != seed_length &&

View file

@ -891,6 +891,15 @@ void simple_wallet::print_seed(std::string seed)
std::cout << seed << std::endl; std::cout << seed << std::endl;
} }
//---------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------
static bool might_be_partial_seed(std::string words)
{
std::vector<std::string> seed;
boost::algorithm::trim(words);
boost::split(seed, words, boost::is_any_of(" "), boost::token_compress_on);
return seed.size() < 24;
}
//----------------------------------------------------------------------------------------------------
bool simple_wallet::init(const boost::program_options::variables_map& vm) bool simple_wallet::init(const boost::program_options::variables_map& vm)
{ {
if (!handle_command_line(vm)) if (!handle_command_line(vm))
@ -920,14 +929,20 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm)
if (m_electrum_seed.empty()) if (m_electrum_seed.empty())
{ {
m_electrum_seed = command_line::input_line("Specify Electrum seed: "); m_electrum_seed = "";
if (std::cin.eof()) do
return false;
if (m_electrum_seed.empty())
{ {
fail_msg_writer() << tr("specify a recovery parameter with the --electrum-seed=\"words list here\""); const char *prompt = m_electrum_seed.empty() ? "Specify Electrum seed: " : "Electrum seed continued: ";
return false; std::string electrum_seed = command_line::input_line(prompt);
} if (std::cin.eof())
return false;
if (electrum_seed.empty())
{
fail_msg_writer() << tr("specify a recovery parameter with the --electrum-seed=\"words list here\"");
return false;
}
m_electrum_seed += electrum_seed + " ";
} while (might_be_partial_seed(m_electrum_seed));
} }
if (!crypto::ElectrumWords::words_to_bytes(m_electrum_seed, m_recovery_key, old_language)) if (!crypto::ElectrumWords::words_to_bytes(m_electrum_seed, m_recovery_key, old_language))