30 #include "gtest/gtest.h"
39 #include <boost/algorithm/string.hpp>
55 #include <boost/algorithm/string.hpp>
64 void compare_vectors(
const std::vector<std::string> &expected,
const std::vector<std::string> &present)
66 std::vector<std::string>::const_iterator it1, it2;
67 for (it1 = expected.begin(), it2 = present.begin(); it1 != expected.end() && it2 != present.end();
84 for (
size_t ii = 0; ii <
sizeof(randkey); ++ii)
86 randkey.data[ii] =
rand();
91 const char *space = strrchr(seed.c_str(),
' ');
93 seed =
std::string(seed.c_str(), space-seed.c_str());
95 std::cout <<
"Test seed without checksum:\n";
96 std::cout << seed << std::endl;
101 std::vector<std::string> seed_vector, return_seed_vector;
107 std::cout <<
"Detected language: " << language_name << std::endl;
112 return_seed =
std::string(w_return_seed.data(), w_return_seed.size());
114 std::cout <<
"Returned seed:\n";
115 std::cout << return_seed << std::endl;
116 boost::split(seed_vector, seed, boost::is_any_of(
" "));
117 boost::split(return_seed_vector, return_seed, boost::is_any_of(
" "));
120 checksum_word = return_seed_vector.back();
121 return_seed_vector.pop_back();
122 ASSERT_EQ(seed_vector.size(), return_seed_vector.size());
124 compare_vectors(seed_vector, return_seed_vector);
127 seed += (
" " + checksum_word);
128 std::cout <<
"Test seed with checksum:\n";
129 std::cout << seed << std::endl;
132 std::cout <<
"Detected language: " << language_name << std::endl;
137 return_seed =
std::string(w_return_seed.data(), w_return_seed.size());
139 std::cout <<
"Returned seed:\n";
140 std::cout << return_seed << std::endl;
143 return_seed_vector.clear();
144 boost::split(seed_vector, seed, boost::is_any_of(
" "));
145 boost::split(return_seed_vector, return_seed, boost::is_any_of(
" "));
146 ASSERT_EQ(seed_vector.size(), return_seed_vector.size());
147 compare_vectors(seed_vector, return_seed_vector);
154 std::vector<std::string> language_list;
157 catch(
const std::exception &e)
159 std::cout <<
"Error initializing mnemonics: " << e.what() << std::endl;
167 std::vector<Language::Base*> languages({
182 for (std::vector<Language::Base*>::iterator it = languages.begin(); it != languages.end(); it++)
185 test_language(*(*it));
187 catch (
const std::exception &e) {
188 std::cout <<
"Error testing " << (*it)->get_language_name() <<
" language: " << e.what() << std::endl;
194 TEST(mnemonics, language_detection_with_bad_checksum)
201 const std::string base_seed =
"cinzento luxuriante leonardo gnostico digressao cupula fifa broxar iniquo louvor ovario dorsal ideologo besuntar decurso rosto susto lemure unheiro pagodeiro nitroglicerina eclusa mazurca bigorna";
227 TEST(mnemonics, case_tolerance)
233 const std::string seed_1 =
"Neubau umarmen Abart umarmen Turban feilen Brett Bargeld Episode Milchkuh Substanz Jahr Armband Maibaum Tand Grünalge Tabak erziehen Federboa Lobrede Tenor Leuchter Curry Diskurs Tenor";
241 std::string seed_2 =
"neubau umarmen Abart umarmen Turban feilen Brett Bargeld Episode Milchkuh Substanz Jahr Armband Maibaum Tand Grünalge Tabak erziehen Federboa Lobrede Tenor Leuchter Curry Diskurs tenor";
242 boost::algorithm::to_lower(seed_2);
250 TEST(mnemonics, partial_word_tolerance)
256 const std::string seed_1 =
"crim bam scamp gna limi woma wron tuit birth mundane donuts square cohesive dolphin titans narrate fue saved wrap aloof magic mirr toget upda wra";
Simplified Chinese word list and map.
A base language class which all languages have to inherit from for Polymorphism.
const std::string & get_language_name() const
Returns the name of the language.
const char * data() const noexcept
size_t size() const noexcept
New Dutch word list and map.
Mnemonic seed generation and wallet restoration from them.
New English word list and map.
Older version of English word list and map.
New Esperanto word list and map.
#define ASSERT_EQ(val1, val2)
#define ASSERT_STREQ(s1, s2)
#define ASSERT_TRUE(condition)
French word list and map.
German word list and map.
Italian word list and map.
Japanese word list and map.
Language Base class for Polymorphism.
New Lojban word list and map.
TEST(mnemonics, consistency)
T utf8prefix(const T &s, size_t count)
Returns a string made of (at most) the first count characters in s. Assumes well formedness....
std::vector< const Language::Base * > get_language_list()
bool words_to_bytes(const epee::wipeable_string &words, epee::wipeable_string &dst, size_t len, bool duplicate, std::string &language_name)
Converts seed words to bytes (secret key).
bool bytes_to_words(const char *src, size_t len, epee::wipeable_string &words, const std::string &language_name)
Converts bytes (secret key) to seed words.
void rand(size_t N, uint8_t *bytes)
Portuguese word list and map.
Russian word list and map.
A singleton helper class based on template.
Spanish word list and map.