32 #include "gtest/gtest.h" 40 using namespace tools;
42 #define MAKE_STR(arr) std::string(arr, sizeof(arr) - 1) 46 void do_test_uint_8be_to_64(
uint64_t expected,
const uint8_t* data,
size_t size)
48 uint64_t val = base58::uint_8be_to_64(data, size);
55 base58::uint_64_to_8be(num, data.size(),
reinterpret_cast<uint8_t*
>(&data[0]));
61 ASSERT_TRUE(1 <= block.size() && block.size() <= base58::full_block_size);
62 std::string enc(base58::encoded_block_sizes[block.size()], base58::alphabet[0]);
63 base58::encode_block(block.data(), block.size(), &enc[0]);
67 ASSERT_TRUE(base58::decode_block(enc.data(), enc.size(), &dec[0]));
73 std::string data(base58::decoded_block_sizes::instance(enc.size()),
'\0');
74 ASSERT_TRUE(base58::decode_block(enc.data(), enc.size(), &data[0]));
78 void do_test_decode_block_neg(
const std::string& enc)
81 ASSERT_FALSE(base58::decode_block(enc.data(), enc.size(), &data[0]));
120 #define TEST_uint_8be_to_64(expected, str) \ 121 TEST(base58_uint_8be_to_64, handles_bytes_##expected) \ 123 std::string data = str; \ 124 do_test_uint_8be_to_64(expected, reinterpret_cast<const uint8_t*>(data.data()), data.size()); \ 137 #define TEST_uint_64_to_8be(num, expected_str) \ 138 TEST(base58_uint_64_to_8be, handles_bytes_##num) \ 140 do_test_uint_64_to_8be(num, expected_str); \ 152 TEST(reverse_alphabet, is_correct)
154 ASSERT_EQ(-1, base58::reverse_alphabet::instance(0));
155 ASSERT_EQ(-1, base58::reverse_alphabet::instance(std::numeric_limits<char>::min()));
156 ASSERT_EQ(-1, base58::reverse_alphabet::instance(std::numeric_limits<char>::max()));
157 ASSERT_EQ(-1, base58::reverse_alphabet::instance(
'1' - 1));
158 ASSERT_EQ(-1, base58::reverse_alphabet::instance(
'z' + 1));
159 ASSERT_EQ(-1, base58::reverse_alphabet::instance(
'0'));
160 ASSERT_EQ(-1, base58::reverse_alphabet::instance(
'I'));
161 ASSERT_EQ(-1, base58::reverse_alphabet::instance(
'O'));
162 ASSERT_EQ(-1, base58::reverse_alphabet::instance(
'l'));
163 ASSERT_EQ(0, base58::reverse_alphabet::instance(
'1'));
164 ASSERT_EQ(8, base58::reverse_alphabet::instance(
'9'));
165 ASSERT_EQ(base58::alphabet_size - 1, base58::reverse_alphabet::instance(
'z'));
169 #define TEST_encode_block(block, expected) \ 170 TEST(base58_encode_block, handles_##expected) \ 172 do_test_encode_block(MAKE_STR(block), #expected); \ 210 #define TEST_decode_block_pos(enc, expected) \ 211 TEST(base58_decode_block, handles_pos_##enc) \ 213 do_test_decode_block_pos(#enc, MAKE_STR(expected)); \ 216 #define TEST_decode_block_neg(enc) \ 217 TEST(base58_decode_block, handles_neg_##enc) \ 219 do_test_decode_block_neg(#enc); \ 281 #define TEST_encode(expected, data) \ 282 TEST(base58_encode, handles_##expected) \ 284 do_test_encode(MAKE_STR(data), #expected); \ 292 TEST_encode(111111111,
"\x00\x00\x00\x00\x00\x00");
293 TEST_encode(1111111111,
"\x00\x00\x00\x00\x00\x00\x00");
294 TEST_encode(11111111111,
"\x00\x00\x00\x00\x00\x00\x00\x00");
295 TEST_encode(1111111111111,
"\x00\x00\x00\x00\x00\x00\x00\x00\x00");
296 TEST_encode(11111111111111,
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");
297 TEST_encode(1111111111111111,
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");
298 TEST_encode(11111111111111111,
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");
299 TEST_encode(111111111111111111,
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");
300 TEST_encode(11111111111111111111,
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");
301 TEST_encode(111111111111111111111,
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");
302 TEST_encode(1111111111111111111111,
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");
303 TEST_encode(22222222222VtB5VXc,
"\x06\x15\x60\x13\x76\x28\x79\xF7\xFF\xFF\xFF\xFF\xFF");
306 #define TEST_decode_pos(enc, expected) \ 307 TEST(base58_decode_pos, handles_pos_##enc) \ 309 do_test_decode_pos(#enc, MAKE_STR(expected)); \ 312 #define TEST_decode_neg(enc) \ 313 TEST(base58_decode_neg, handles_neg_##enc) \ 315 do_test_decode_neg(#enc); \ 327 TEST_decode_pos(jpXCZedGfVQ5Q,
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF");
328 TEST_decode_pos(jpXCZedGfVQLUv,
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF");
329 TEST_decode_pos(jpXCZedGfVQ2UzHL,
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF");
330 TEST_decode_pos(jpXCZedGfVQ7YXq9G,
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF");
331 TEST_decode_pos(jpXCZedGfVQVtB5VXc,
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF");
332 TEST_decode_pos(jpXCZedGfVQ3CUsUpv9t,
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF");
333 TEST_decode_pos(jpXCZedGfVQAhg1opVcGW,
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF");
334 TEST_decode_pos(jpXCZedGfVQjpXCZedGfVQ,
"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF");
396 #define TEST_encode_decode_addr(addr, tag, data) \ 397 TEST(base58_encode_decode_addr, handles_##addr) \ 399 do_test_encode_decode_addr(UINT64_C(tag), MAKE_STR(data), #addr); \ 402 TEST_encode_decode_addr(21D35quxec71111111111111111111111111111111111111111111111111111111111111111111111111111116Q5tCH, 6,
403 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 404 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");
405 TEST_encode_decode_addr(2Aui6ejTFscjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQVqegMoV, 6,
406 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" 407 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF");
408 TEST_encode_decode_addr(1119XrkPuSmLzdHXgVgrZKjepg5hZAxffLzdHXgVgrZKjepg5hZAxffLzdHXgVgrZKjepg5hZAxffLzdHXgVgrZKVphZRvn, 0,
409 "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF" 410 "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF");
411 TEST_encode_decode_addr(111111111111111111111111111111111111111111111111111111111111111111111111111111111111111115TXfiA, 0,
412 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 413 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");
414 TEST_encode_decode_addr(PuT7GAdgbA83qvSEivPLYo11111111111111111111111111111111111111111111111111111111111111111111111111111169tWrH, 0x1122334455667788,
415 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 416 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");
417 TEST_encode_decode_addr(PuT7GAdgbA841d7FXjswpJjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQjpXCZedGfVQVq4LL1v, 0x1122334455667788,
418 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" 419 "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF");
427 TEST_encode_decode_addr(PuT7GAdgbA83w6XaVDyvpoGQBEWbB, 0x1122334455667788,
"\x88\x88\x88\x88\x88\x88\x88\x88");
428 TEST_encode_decode_addr(PuT7GAdgbA83wk3FD1gW7J2KVGofA1r, 0x1122334455667788,
"\x99\x99\x99\x99\x99\x99\x99\x99\x99");
437 #define TEST_decode_addr_neg(addr, test_name) \ 438 TEST(base58_decode_addr_neg, test_name) \ 442 ASSERT_FALSE(base58::decode_addr(MAKE_STR(addr), tag, data)); \ 466 "\xf7\x24\xbc\x5c\x6c\xfb\xb9\xd9\x76\x02\xc3\x00\x42\x3a\x2f\x28" 467 "\x64\x18\x74\x51\x3a\x03\x57\x78\xa0\xc1\x77\x8d\x83\x32\x01\xe9" 468 "\x22\x09\x39\x68\x9e\xdf\x1a\xbd\x5b\xc1\xd0\x31\xf7\x3e\xcd\x6c" 469 "\x99\x3a\xdd\x66\xd6\x80\x88\x70\x45\x6a\xfe\xb8\xe7\xee\xb6\x8d");
471 std::string test_keys_addr_str =
"etnkQ3cy4RZj74KgQDGKRKAjTfWJywnvM1ZRGv9yX9o89N8qGedHKLheKPmtkLpTmpBWGDT3ZuLUmNVvz3LmU5LrA3gGg1nv6P";
519 std::string serialized_keys_copy = test_serialized_keys;
520 serialized_keys_copy[0] =
'\0';
529 std::string serialized_keys_copy = test_serialized_keys;
530 serialized_keys_copy.back() =
'\x01';
#define TEST_decode_block_neg(enc)
std::string get_account_address_as_str(network_type nettype, bool subaddress, account_public_address const &adr)
TEST(reverse_alphabet, is_correct)
#define TEST_decode_neg(enc)
bool parse_binary(const std::string &blob, T &v)
bool dump_binary(T &v, std::string &blob)
#define TEST_encode_block(block, expected)
#define TEST_uint_64_to_8be(num, expected_str)
#define ASSERT_FALSE(condition)
#define ASSERT_EQ(val1, val2)
#define TEST_decode_addr_neg(addr, test_name)
unsigned __int64 uint64_t
#define TEST_encode_decode_addr(addr, tag, data)
uint64_t const CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX
#define TEST_uint_8be_to_64(expected, str)
#define ASSERT_TRUE(condition)
#define TEST_encode(expected, data)
bool get_account_address_from_str(address_parse_info &info, network_type nettype, std::string const &str)
#define TEST_decode_pos(enc, expected)
#define TEST_decode_block_pos(enc, expected)