unit_tests: fix mnemonics unit test testing invalid seeds
Some word triplets, such as "mugged names nail", are not valid results from any 32 bit value. If used to decode a 32 bit value, the result will therefore encode to a different word triplet. Fix this by using random words converted from an actual random bitstring, ensuring we always get valid triplets.
This commit is contained in:
parent
cf88e4dd24
commit
c4344800eb
|
@ -44,16 +44,6 @@
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
/*!
|
|
||||||
* \brief Returns random index from 0 to max-1
|
|
||||||
* \param max Range maximum
|
|
||||||
* \return required random index
|
|
||||||
*/
|
|
||||||
uint32_t get_random_index(int max)
|
|
||||||
{
|
|
||||||
return rand() % max;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Compares vectors for equality
|
* \brief Compares vectors for equality
|
||||||
* \param expected expected vector
|
* \param expected expected vector
|
||||||
|
@ -78,11 +68,17 @@ namespace
|
||||||
const std::vector<std::string> &word_list = language.get_word_list();
|
const std::vector<std::string> &word_list = language.get_word_list();
|
||||||
std::string seed = "", return_seed = "";
|
std::string seed = "", return_seed = "";
|
||||||
// Generate a random seed without checksum
|
// Generate a random seed without checksum
|
||||||
for (int ii = 0; ii < crypto::ElectrumWords::seed_length; ii++)
|
crypto::secret_key randkey;
|
||||||
|
for (size_t ii = 0; ii < sizeof(randkey); ++ii)
|
||||||
{
|
{
|
||||||
seed += (word_list[get_random_index(word_list.size())] + ' ');
|
randkey.data[ii] = rand();
|
||||||
}
|
}
|
||||||
seed.pop_back();
|
crypto::ElectrumWords::bytes_to_words(randkey, seed, language.get_language_name());
|
||||||
|
// remove the checksum word
|
||||||
|
const char *space = strrchr(seed.c_str(), ' ');
|
||||||
|
ASSERT_TRUE(space != NULL);
|
||||||
|
seed = std::string(seed.c_str(), space-seed.c_str());
|
||||||
|
|
||||||
std::cout << "Test seed without checksum:\n";
|
std::cout << "Test seed without checksum:\n";
|
||||||
std::cout << seed << std::endl;
|
std::cout << seed << std::endl;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue