forked from nayuki/Bitcoin-Cryptography-Library
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBase58CheckTest.cpp
More file actions
710 lines (689 loc) · 66 KB
/
Copy pathBase58CheckTest.cpp
File metadata and controls
710 lines (689 loc) · 66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
/*
* A runnable main program that tests the functionality of class Base58Check.
*
* Bitcoin cryptography library
* Copyright (c) Project Nayuki
*
* https://www.nayuki.io/page/bitcoin-cryptography-library
* https://github.com/nayuki/Bitcoin-Cryptography-Library
*/
#include "TestHelper.hpp"
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include "Base58Check.hpp"
#include "Uint256.hpp"
/*---- Structures ----*/
struct TestCase {
bool success;
const char *hexadecimal;
const char *base58;
};
// Global variables
static int numTestCases = 0;
/*---- Test suite ----*/
static void testPublicAddressExport() {
const vector<TestCase> cases{
// Extremes
{true, "0000000000000000000000000000000000000000", "1111111111111111111114oLvT2"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbz7JHiBTspS962RLKV8GndWFwi5j6Qr"},
// One bit set
{true, "0000000000000000000000000000000000000100", "1111111111111111111VxYUzGa"},
{true, "0000000000000000000000000000000000020000", "1111111111111111115Pxqs2WgU"},
{true, "0000000000000000000000000000020000000000", "1111111111111117WzVb5DB97YyE"},
{true, "0000000000000000000000000000400000000000", "1111111111111114bYimoKhYrLumT"},
{true, "0000000000000000000000400000000000000000", "1111111111116LBTANNgyRVt94oSu9"},
{true, "0000000000000000000004000000000000000000", "111111111112UHtDatz2Zky6Pgt5Fg"},
{true, "0000000000000000000080000000000000000000", "11111111111p4KFwhgTs5Fwwab49WV"},
{true, "0000000000000000002000000000000000000000", "1111111111tvf9VMtYeFhVdE5yRkNP"},
{true, "0000000000000000004000000000000000000000", "11111111112nrKHyin6HWPzFSzPVWXr"},
{true, "0000000000001000000000000000000000000000", "1111111fVTdpTzQnZKzKjFU8n3XN9qj"},
{true, "0000000000080000000000000000000000000000", "1111112TwonFkZhVYLuWLEvtAHFNnWrR"},
{true, "0000000000200000000000000000000000000000", "1111116rnE821FnyANd2KxiXe7ik4qhs"},
{true, "0000000008000000000000000000000000000000", "111117TvuUk7HKiyLrkTvUpoxKzgaakf"},
{true, "0000000080000000000000000000000000000000", "111112nRsUetjWAaYUizRkgBxGEZWPpGJ"},
{true, "0000001000000000000000000000000000000000", "1111z4irFuYT6HWNJAgf6d3VQRpRXaNd"},
{true, "0000004000000000000000000000000000000000", "11114wFtQ2dAoN92UBfjdPVAxci4KZ3Yw"},
{true, "0000010000000000000000000000000000000000", "111Gk2Yb7VgCTZ6sjfwWYwgqTpxFhyNJ"},
{true, "0000100000000000000000000000000000000000", "1115LsRiQnupAKrczmk39p5zNQD3RLYeg"},
{true, "0000800000000000000000000000000000000000", "111bjxQiHLHWHbqxyAwJDVguxCexXAYMU"},
{true, "0004000000000000000000000000000000000000", "115nveGhFfH3HokikNVNixWJccEi6YuH1"},
// One bit clear
{true, "FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QHxeWjdW6M2ZALxzVUfVyecurpRfcsFL4"},
{true, "FFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLXCBf21vobn9LLJfxq7QKHKtei52bUAS"},
{true, "FFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbPNLszu8bK9YF4TAPBun6iZ4Hk7UenG"},
{true, "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbz7B9zhZGFW8RiFRRXRG5shD1p7xQ5H"},
{true, "FFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbz7JGuKE4rJ73gg3LWwf6uH92Wa4Yxd"},
{true, "FFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbz7JHJkLyLN84rYgq12xwmPhV4vwb3d"},
{true, "FFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbz7JHi8ouytsE4nC6BAysddiqj4bDfx"},
{true, "FFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbz7JHiBJFhmwDn4tRuNwc4tUVwKWxEV"},
{true, "FFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbz7JHiBP4m739uF7NhFcCMCNDmsKrGy"},
{true, "FFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbz7JHiBTsGpeR4fvjPpqnnmBCMfJUEv"},
{true, "FFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFF", "1QLbz7JHiBTspNZPPqNsvwhmqXm3i6ZXZv"},
{true, "FFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFF", "1QLbz7JHiBTspQMEi8Mbi2zHEX1ViU9Lhp"},
{true, "FFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFF", "1QLbz7JHiBTspS96163CwnRs8u8isd1JLc"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF", "1QLbz7JHiBTspS962R2onDronEG99X4RTi"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFF", "1QLbz7JHiBTspS962RLHW4mjuwwbES5ayq"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFF", "1QLbz7JHiBTspS962RLKEk5uYJy9ZcbZK8"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFF", "1QLbz7JHiBTspS962RLKV1ko8vBjVqUXBr"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFF", "1QLbz7JHiBTspS962RLKV8GndCg6g3EVwQ"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFF", "1QLbz7JHiBTspS962RLKV8GndU4Tmki72s"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF", "1QLbz7JHiBTspS962RLKV8GndVAChhScoe"},
// Random 10% bits set
{true, "092011030200440000828002E040000C2980A210", "1qFVk5CkcU2nWmBMi4XrPgNvg5pStjn6q"},
{true, "008060A004002050B042C2411F4488A801044428", "113enpcuwXjMLHNr3vdKVhad5mTgHP8y9r"},
{true, "4C100004A2582804000400882028300402B01008", "17wBXHSk4r2m2hDMNBadqTA18VDRnRG8kj"},
{true, "181809620020004C288831A00560300002180404", "13CQ1hb1DUssQkZ3GkcZ7x6pU2uPUhckpP"},
{true, "0048000005508109B005403120800F2020460080", "112VFeZwncsWqSRFUh6UDwQhw2tGEg8HTE"},
{true, "2610030498E40040896086040110002400409822", "14UFrosdDqu3sFMUaLpFNbE5kmkF3LtCML"},
{true, "4228600228044116450804051000302000240001", "172oxy6unYYLD6t2CXosxPQ6EW5XgE8Vo3"},
{true, "E460004949900012012681211110600882026008", "1MpY51hGjxh8kybZfuhwt4sg9uDhojBLwz"},
{true, "000818000000028066A131108400804000018002", "11AhN6BTd7SLf2B9Sjqj1gBwGE5KiBGFx"},
{true, "48004680408CA1084052064C0408011706200406", "17Zhywu94rMVnK3C1mirHbWzWab3TkHQLS"},
{true, "045009444B282080080301875580021228210092", "1PoanEVVivaUfgLFyXcjfWMRC4oRPmpbG"},
{true, "0144101840140012212148718800000101004402", "17hDHQqHkjgbv4fZCazJDpQn4GdQG5T5L"},
{true, "640C440000032800485040200008630300005010", "1A81GQzNoyj75kqFEe7qGDU8oSkm5Fwxc5"},
{true, "0024024840100003000082480A6A01040010200A", "11k8wiAr8x2HjqDvbQGSCgsf9cbvWHwEx"},
{true, "01009001101301062041A040600608504120000A", "16JMH1wgwunayQhhzcdDA2QGBL7N9Qjb8"},
{true, "48012240400100221924CD020004004C40041022", "17Zj1bAjZHNJxEsiWuiemHVc3GGBvJcHEi"},
{true, "4100001102265261810480020009B20400020416", "16vgvVFJQowmCMHr3rtwUaKkEZco9jH895"},
{true, "C105292814C02970018C60080380100416940240", "1JbbbbnQy7oUZZjYE2VEbAGbzCuPiHezvz"},
{true, "209002651801C44101D02140902308A800000404", "13yB95sWRqKgS3V1wGqMmZmbxRvWESMfU5"},
{true, "4180900020961281400522700449500991002040", "16yLw9bb4ShWstWkWEeZw76SQrMwxZMPkY"},
// Random 50% bits set
{true, "A3571B72C6914434AB0F6C4EBDA1472FEBA88DEF", "1FtfVasxiAgW1JgsbndQgs48EKJiXHHVCG"},
{true, "E18D980414545D71D99DB56A1524F1003FE1D974", "1MZcfGoL9FJJWwA41omLhcnjtGmRX97h2n"},
{true, "3DEB1E22F07ED180A27606738823C4F196381AF9", "16ePsy6vn3BB4pbiMkf9Fhtpfk1HhHefKm"},
{true, "14D08EB14533DB2E7B520668A414EB014D41C38F", "12u4MfBSUXmNvvdcj2j2ifp9Mxrj3txVAC"},
{true, "FE63E0C9D9DA7290BC4066D2B0070BA228C61DBC", "1QC6HNnUD8k1eEzpHg49dYRj3nqeifzAmN"},
{true, "8AFCD5B66577E5587FEC9624E6ACC8CB65DFF5BB", "1Dfu8k84KmgjCkTLmnZce65yWLnDZ2YDqP"},
{true, "96B5132DB8A81A8F9267078650E6EA5859733938", "1EjsH5fCL4arNioZMrEjTABn9LhYP9dAMZ"},
{true, "EBBE80F83C645EAEDC8FFBF0D705234321C4CE17", "1NVW1Wticmh7Ni48rjyU8MGij2zrt5Gkee"},
{true, "4386CDDEB6923746CE07878FC155BEE38AAC367C", "17A3mDFcEgT5k1Jh1zeMWRyJoScpVonGig"},
{true, "F92643A4F0355021365EFB2500A66743CAF61612", "1PiP6QsB7rCETcWNKoUyTHjzoatg9QS3Pd"},
{true, "20898404B37B7A195C789AE86ACB914037807E41", "13y3Mu1Ti3y9sggnm5BAseEPYSUt7bxQFe"},
{true, "BDA359FABDBFBF059802C140C4A3ADEF84DE8A10", "1JHiQ7iw1TNac9e1FFeCoBeBTvEpg1M7ui"},
{true, "7013CFBC20BD0CF0DF08C04A02AA5A0331DC26DA", "1BDcR1Za9mWuimJr2uFSTSSwV1nSsmbC4w"},
{true, "B61346B9006D7A62CC20BA8426EDA6AF134665D8", "1Hbj5Fa133KUbLHJSBo7NKpFjsUTaqc34a"},
{true, "554E5FB072FFF6D49C8220193FACDD212ABD23CC", "18n4Kp5c4kQnc1f89dSotD4wThSzH5YswT"},
{true, "076AF562DBEC64D8BBD622EF36ABC9F48A0857F8", "1gDrxEzzaE97iGqP3D4n34wGBtmgrnyJp"},
{true, "B5C70B1FEAC77C67AC66A81327D2B2D91760A078", "1Ha9kWBK1ekkjU6vTi1uyxYeMWXXEiu3vm"},
{true, "848DCCF5CE854C1950EDD5ED2FAB8E3B9DF850CD", "1D5t4oWJpxpWRBjjpsVjZDBAuWJhZo1SkH"},
{true, "5CA5F7AF1FF5EC0214E4B16DBF11E8788F8D6DCB", "19SszGsHeubHFDSNihq1ZDDZH5dSMLweba"},
{true, "8973EB648CFF7E8A745882A173C6227757D0812B", "1DXnSWXQVFhmhP2NYz9LHD8oUJypiLrheF"},
{true, "9C7290E3016FC1C333A3179E7C141E1C6B6AE2E9", "1FGDf7HCZs84WuM7qMxE98b1miGE5vsiki"},
{true, "B3C5DD6476515F41AF095425F38A6F9733F540E4", "1HPYzE76mgVkM513EnpJUHuTCmt8coS6ja"},
{true, "AB5000D772C581AD77E657BB282A4D5A2107FA10", "1GcpPXg7HMtpw9AK8kYW7pHk9Prh5UVHqS"},
{true, "E8F9219C23B51431C497F5EE5F0A538E55C39558", "1NErDT71masthqdxW2knoaiYRYDBsNTTgJ"},
{true, "E3474270AA5834191D06A601D192E2A7543B7F45", "1MijkkBiLD3rxGKzTTHhzNXbcKrWiV3ZLt"},
{true, "E3EAD3AEC170B1A49B966408FC312359F508253D", "1Mn7hc1JAcKPsp2Xrz3xZzc72PZjP37rjB"},
{true, "847E1899C78F4891CF2207BE93F25CA41E8D6190", "1D5ZFdf2vHL7mAUYXsWUk2BVs3GdPRxXZ5"},
{true, "2E5AB8808621476F82C0A1977D406C812DF224B3", "15E6mDAUeye2HXYF8hhyzyHRjTvhn3veih"},
{true, "AD71BAB306924699C1CAF7F33E232FA6ED8B9900", "1Gp69Ein677xbpBHsRjABi2R3LtLzh8rMG"},
{true, "2B8561455EB12717B8DF3FA115FFBBD6DE9F37FB", "14y7qemPmVfceSrJuWUx9vWWYuiEouKuvj"},
{true, "198F8CF6432A0B326B28EB32C17871C2AE3F096A", "13L9rsNtUCdRmgeC6vjqNwzHxTvs84HYcm"},
{true, "1772691E4C0A9DA26EBC006E68B2635CD2530095", "138yboUNE1RLHm7MyDFFJorBG8YLvuRTmj"},
{true, "217F49C33287E1516A7FB8D8D146756241DE1BA6", "1447nTySMt4cUFr4GPbJE58wh5B1tVF9kD"},
{true, "3DF5455CCBA65EE4B1D1EB4D45751D0A0D15639E", "16ec3RhVDkfHp4Jp3piXRRQqBTgAP7nbwN"},
{true, "FBF6796986AAE239705DB1714E1960D064334ADB", "1PyFsUwRa7unGWwi3kZUDJmWaUy9xL7ifq"},
{true, "705F86E209F296FAE2509304FCD7C44325695EAE", "1BFB7owykf8GVv5rLJgL6GQRHEtM1y55Ae"},
{true, "FFB617DA49344C5F2BB1FABA4C1EAD9EB3349E74", "1QK5SyPv1HQ4JSFJkJuMDrVAwzWc4hcsm5"},
{true, "7574903916ABF8298C995DFA83F900917775680C", "1Bi3hQjSXRUkFGU6Ev6JLry2MxpgUzg968"},
{true, "7AB7082869E8CD456FD297FAF4E9B03DA5A3F1B1", "1CBrhgTibVTrJdFYH7gFqqrsDxdUTya6L1"},
{true, "38477BB84E4FB6A281DC26F0E1D155D22F437A4D", "168aUVJSUdeWJTMMuaXfJZFisRrj8KTLZS"},
{true, "8F86A541170B1A91767659795197C8EE820A99CE", "1E5tvmUWaqibD1dTHSmGXhAYJXz5g14H99"},
{true, "FB6F0C58BDF805CBEA560E581E61EC3BB2D9D22D", "1PvTdv7H99tUH9vneLR5oJawXnsr9cwZL5"},
{true, "0E3151FB4A3BD9E663DE4DC04929BCEE82F7D17C", "12J3YWvtweRznNMoxtHmRo6ftvEj3Q3A7T"},
{true, "75BA49A6F15CD1A9F7B8E5AC841605F36233E3AC", "1BjVDwZah1jRHeyzfsn1mv12yo6MoRgBS8"},
{true, "A915E30ED9B99F5B2AD9AC719B4C241193A34CE6", "1GR3R9kquUH3gAXkDY9WkqVFLWEhreQpSU"},
{true, "FD514ADE92F217F00DA99C0DA1E9C8287AF64439", "1Q6RLqGMBywFVArywZ85PVkL3j9qvDFtf3"},
{true, "7D5A5893718A05561D3E173BDD7F7547FD419BF3", "1CRohL5UxWpuLHhZ9YFeWdrfkXPtLD7dMx"},
{true, "200CF4384CAA848F8F3C510D6269B7F3C8E47106", "13vU9CSGHRw5ShHEfCux4WHEDgeFBzUhtq"},
{true, "DC3EACEE00B56DB601FA26423AFC6D74AD38BD75", "1M5YjySyKNpx1ZgQ7jzLkMKBvSMtwyuo8v"},
{true, "50711052B155BF5EC13FE0802094A12303D67E5D", "18LLW9x9XueHpnoxgbKnqnWkNT1CcFusFL"},
// Random 90% bits set
{true, "FFFFF77FFF3FBFFFFFF8FFFFFFAFDFFFFFF7FFBF", "1QLbwoVYyVBMWcFdedMbmn5BQyn8hTf48X"},
{true, "BFFFF7BFCBFF73FFF06EEFDFFFFDFFFFEFBFFFBF", "1JWChbLmmeEgA1rB9GKRQuhnJeDyAN25De"},
{true, "DFFFFFBFEFBFFFFFFFFFEFF7FBDFF6FEF7FEFFFB", "1MRQMuKeMZWV4xJvwp6LUHBDxrzoKWE3wv"},
{true, "FFFFFF5BFFF6EFFFFDBFEFBDF7FFFFEDFFFFFFFF", "1QLbywDP34rSfkRgzeL6LgvYMybPeYiGFK"},
{true, "DFF7FF7FDBFF9FFFFA6FFDFE5FFBFFF7FFFF1F77", "1MREmz6a7yycwLtchw8RCdurAcByNugBkM"},
{true, "7FFBFFEFFFBFDFBEFFBFABF5FFFEFFF7FFFFFFBF", "1CfihcXJjkRDEs6X2xLiDEtt5UrWMpkwh1"},
{true, "FFDBFFFFEFFFDE7FFFFFFFDFAFFFDFFFFFDF7FFB", "1QKrrnWdY2KqmLrmyrUbEJeGtyNQejX1jt"},
{true, "FFFF7DF7FFFFFFBBFF7B6FFEFDF7FFECDBDFFCFF", "1QLbNpNJ3oGWdMFiDTiGpMEqgpbmuZVcAn"},
{true, "FFEEFFDFFDFFFE5FFFDF7FBFB7DBBFE7F6FF7FEF", "1QLFctrETB6rtvuYs7rxf4o2iAc2CVX7uG"},
{true, "85BFFDFFFFB7FFFF7DF3DFFFDFFFF7FEFEFFFFF3", "1DCCsN9ASFMxHc8SmboJrZqcovfSrwrdq1"},
{true, "FFFFBFDEFFFFEFBEFFFF57DFDFF6FEEFFFFAFBFF", "1QLbghntZ6A1p1ga6fCQTC2dGEA1Ra4pNz"},
{true, "BF7FFFFFBFFFDFFFFFF7DFF7FFFFFFFFFE77FBFF", "1JTZQEeR7LfVzASkH1kUZXcPDUXGFJG93D"},
{true, "FFD5BBEBFDEFF6DFFFDF3FFFBFEFFFFE7FFEFF5F", "1QKjMRNn54735HAPK22U5axkLqZtTfjVZr"},
{true, "FFFFFFEFFFFFBFF7FFFFFDFBBFFFFFBBFFDFFBFF", "1QLbz6KDzHYw5YpZ8RfnWhTuaSzFCazBrN"},
{true, "FFFEFFFFEFF9FFEF7FFFEDF7FFEFFFF7EFF7FFFF", "1QLandPFLfH6F79t8r4vb6swPJEvUNzrAV"},
{true, "DFBAFFB7FFFFFFFDFFFFBFFFFFFFFFFFFDFFFFFF", "1MPyhgzvQMN9kkwJ138KMV5NSda7Vtbxns"},
{true, "FFFEBBFDF7FD7CFFEFFEDFFFFEFFAFDBDFFBFFFF", "1QLaUApR4khkZ2W2KzmWbjotba77QFhv6Q"},
{true, "FE7EEFFFFBBFB7FFEFFFFDF7FBFFFEFF6FBE7F7F", "1QCehVq1Wi9wzToV3PNR4e34iJRPA95HcN"},
{true, "FBFFEFEF9FFF7D7FDBFFFDDFFFFFFDFDFFD9ED7F", "1PyTCyvC2yCasAE1gFtgTSh77qo5qSFhqU"},
{true, "FEEDBFF7DFF6BDF7FFFD6FFFEF7FFBEFFFFFFF7F", "1QEwSsoa4tYREcCm7YVYa9RH6V8rkqsV4F"},
// Mismatches
{false, "0000000000000000000000000000000000000000", "111111111111111111114oLvT2"},
{false, "0000000000000000000000000000000000000000", "1111111111111111111114OLvT2"},
{false, "0000000000000000000000000000000000001000", "1111111111111111111114oLvT2"},
{false, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF", "1QLbz7JHiBTspS962RLKV8GndWFwi5j6Qr"},
{false, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbz7JHiBTspS96aRLKV8GndWFwi5j6Qr"},
{false, "A3571B72C6914434AB0F6C4EBDA1472FEBA88DEF", "1FtfVasxiAgW1JgsbndQgs48EKJiXHHVC"},
{false, "A3571B72C6914434AB0F6C4EBDA1472FEBA88DEF", "1FtfVasxiAgW1JgsbndQgs48EKJiXHHVCGa"},
};
for (const TestCase &tc : cases) {
Bytes pubkeyHash(hexBytes(tc.hexadecimal));
assert(pubkeyHash.size() == 20);
char actual[36];
Base58Check::pubkeyHashToBase58Check(pubkeyHash.data(), 0x00, actual);
assert((std::strcmp(actual, tc.base58) == 0) == tc.success);
numTestCases++;
}
}
static void testPublicAddressImport() {
const vector<TestCase> cases{
// Bad syntax or hash
{false, "0000000000000000000000000000000000000000", ""},
{false, "0000000000000000000000000000000000000000", "2123456789123456789123456789"},
{false, "0000000000000000000000000000000000000000", "1011112222222222223333333333333333"},
{false, "0000000000000000000000000000000000000000", "11111122222I2222223333333333333333"},
{false, "0000000000000000000000000000000000000000", "111111222222222222333333*333333333"},
{false, "0000000000000000000000000000000000000000", "11111122222222222233333333333333333"},
{false, "0000000000000000000000000000000000000000", "11RbjxQiHLHWHbqxyAwJDVguxCexXAYMU"},
{false, "0000000000000000000000000000000000000000", "115nveGhFfH3HokikNVNixWJccEi6YuH2"},
{false, "0000000000000000000000000000000000000000", "1QLbz7JHiBTabcd6163CwnRs8u8isd1JLc"},
{false, "0000000000000000000000000000000000000000", "1BjVpDwZmah1jRHeyqzfsHn1mtv12yzo6MoRgBCS85"},
{false, "0000000000000000000000000000020000000000", "111111111111117WzVb5DB97YyE"},
{false, "0000000000000000000000000000020000000000", "11111111111111117WzVb5DB97YyE"},
// Extremes
{true, "0000000000000000000000000000000000000000", "1111111111111111111114oLvT2"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbz7JHiBTspS962RLKV8GndWFwi5j6Qr"},
// One bit set
{true, "0000000000000000000000000000000000000100", "1111111111111111111VxYUzGa"},
{true, "0000000000000000000000000000000000020000", "1111111111111111115Pxqs2WgU"},
{true, "0000000000000000000000000000020000000000", "1111111111111117WzVb5DB97YyE"},
{true, "0000000000000000000000000000400000000000", "1111111111111114bYimoKhYrLumT"},
{true, "0000000000000000000000400000000000000000", "1111111111116LBTANNgyRVt94oSu9"},
{true, "0000000000000000000004000000000000000000", "111111111112UHtDatz2Zky6Pgt5Fg"},
{true, "0000000000000000000080000000000000000000", "11111111111p4KFwhgTs5Fwwab49WV"},
{true, "0000000000000000002000000000000000000000", "1111111111tvf9VMtYeFhVdE5yRkNP"},
{true, "0000000000000000004000000000000000000000", "11111111112nrKHyin6HWPzFSzPVWXr"},
{true, "0000000000001000000000000000000000000000", "1111111fVTdpTzQnZKzKjFU8n3XN9qj"},
{true, "0000000000080000000000000000000000000000", "1111112TwonFkZhVYLuWLEvtAHFNnWrR"},
{true, "0000000000200000000000000000000000000000", "1111116rnE821FnyANd2KxiXe7ik4qhs"},
{true, "0000000008000000000000000000000000000000", "111117TvuUk7HKiyLrkTvUpoxKzgaakf"},
{true, "0000000080000000000000000000000000000000", "111112nRsUetjWAaYUizRkgBxGEZWPpGJ"},
{true, "0000001000000000000000000000000000000000", "1111z4irFuYT6HWNJAgf6d3VQRpRXaNd"},
{true, "0000004000000000000000000000000000000000", "11114wFtQ2dAoN92UBfjdPVAxci4KZ3Yw"},
{true, "0000010000000000000000000000000000000000", "111Gk2Yb7VgCTZ6sjfwWYwgqTpxFhyNJ"},
{true, "0000100000000000000000000000000000000000", "1115LsRiQnupAKrczmk39p5zNQD3RLYeg"},
{true, "0000800000000000000000000000000000000000", "111bjxQiHLHWHbqxyAwJDVguxCexXAYMU"},
{true, "0004000000000000000000000000000000000000", "115nveGhFfH3HokikNVNixWJccEi6YuH1"},
// One bit clear
{true, "FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QHxeWjdW6M2ZALxzVUfVyecurpRfcsFL4"},
{true, "FFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLXCBf21vobn9LLJfxq7QKHKtei52bUAS"},
{true, "FFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbPNLszu8bK9YF4TAPBun6iZ4Hk7UenG"},
{true, "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbz7B9zhZGFW8RiFRRXRG5shD1p7xQ5H"},
{true, "FFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbz7JGuKE4rJ73gg3LWwf6uH92Wa4Yxd"},
{true, "FFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbz7JHJkLyLN84rYgq12xwmPhV4vwb3d"},
{true, "FFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbz7JHi8ouytsE4nC6BAysddiqj4bDfx"},
{true, "FFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbz7JHiBJFhmwDn4tRuNwc4tUVwKWxEV"},
{true, "FFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbz7JHiBP4m739uF7NhFcCMCNDmsKrGy"},
{true, "FFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF", "1QLbz7JHiBTsGpeR4fvjPpqnnmBCMfJUEv"},
{true, "FFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFF", "1QLbz7JHiBTspNZPPqNsvwhmqXm3i6ZXZv"},
{true, "FFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFF", "1QLbz7JHiBTspQMEi8Mbi2zHEX1ViU9Lhp"},
{true, "FFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFF", "1QLbz7JHiBTspS96163CwnRs8u8isd1JLc"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF", "1QLbz7JHiBTspS962R2onDronEG99X4RTi"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFF", "1QLbz7JHiBTspS962RLHW4mjuwwbES5ayq"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFF", "1QLbz7JHiBTspS962RLKEk5uYJy9ZcbZK8"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFF", "1QLbz7JHiBTspS962RLKV1ko8vBjVqUXBr"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFF", "1QLbz7JHiBTspS962RLKV8GndCg6g3EVwQ"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFF", "1QLbz7JHiBTspS962RLKV8GndU4Tmki72s"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF", "1QLbz7JHiBTspS962RLKV8GndVAChhScoe"},
// Random 10% bits set
{true, "092011030200440000828002E040000C2980A210", "1qFVk5CkcU2nWmBMi4XrPgNvg5pStjn6q"},
{true, "008060A004002050B042C2411F4488A801044428", "113enpcuwXjMLHNr3vdKVhad5mTgHP8y9r"},
{true, "4C100004A2582804000400882028300402B01008", "17wBXHSk4r2m2hDMNBadqTA18VDRnRG8kj"},
{true, "181809620020004C288831A00560300002180404", "13CQ1hb1DUssQkZ3GkcZ7x6pU2uPUhckpP"},
{true, "0048000005508109B005403120800F2020460080", "112VFeZwncsWqSRFUh6UDwQhw2tGEg8HTE"},
{true, "2610030498E40040896086040110002400409822", "14UFrosdDqu3sFMUaLpFNbE5kmkF3LtCML"},
{true, "4228600228044116450804051000302000240001", "172oxy6unYYLD6t2CXosxPQ6EW5XgE8Vo3"},
{true, "E460004949900012012681211110600882026008", "1MpY51hGjxh8kybZfuhwt4sg9uDhojBLwz"},
{true, "000818000000028066A131108400804000018002", "11AhN6BTd7SLf2B9Sjqj1gBwGE5KiBGFx"},
{true, "48004680408CA1084052064C0408011706200406", "17Zhywu94rMVnK3C1mirHbWzWab3TkHQLS"},
{true, "045009444B282080080301875580021228210092", "1PoanEVVivaUfgLFyXcjfWMRC4oRPmpbG"},
{true, "0144101840140012212148718800000101004402", "17hDHQqHkjgbv4fZCazJDpQn4GdQG5T5L"},
{true, "640C440000032800485040200008630300005010", "1A81GQzNoyj75kqFEe7qGDU8oSkm5Fwxc5"},
{true, "0024024840100003000082480A6A01040010200A", "11k8wiAr8x2HjqDvbQGSCgsf9cbvWHwEx"},
{true, "01009001101301062041A040600608504120000A", "16JMH1wgwunayQhhzcdDA2QGBL7N9Qjb8"},
{true, "48012240400100221924CD020004004C40041022", "17Zj1bAjZHNJxEsiWuiemHVc3GGBvJcHEi"},
{true, "4100001102265261810480020009B20400020416", "16vgvVFJQowmCMHr3rtwUaKkEZco9jH895"},
{true, "C105292814C02970018C60080380100416940240", "1JbbbbnQy7oUZZjYE2VEbAGbzCuPiHezvz"},
{true, "209002651801C44101D02140902308A800000404", "13yB95sWRqKgS3V1wGqMmZmbxRvWESMfU5"},
{true, "4180900020961281400522700449500991002040", "16yLw9bb4ShWstWkWEeZw76SQrMwxZMPkY"},
// Random 50% bits set
{true, "A3571B72C6914434AB0F6C4EBDA1472FEBA88DEF", "1FtfVasxiAgW1JgsbndQgs48EKJiXHHVCG"},
{true, "E18D980414545D71D99DB56A1524F1003FE1D974", "1MZcfGoL9FJJWwA41omLhcnjtGmRX97h2n"},
{true, "3DEB1E22F07ED180A27606738823C4F196381AF9", "16ePsy6vn3BB4pbiMkf9Fhtpfk1HhHefKm"},
{true, "14D08EB14533DB2E7B520668A414EB014D41C38F", "12u4MfBSUXmNvvdcj2j2ifp9Mxrj3txVAC"},
{true, "FE63E0C9D9DA7290BC4066D2B0070BA228C61DBC", "1QC6HNnUD8k1eEzpHg49dYRj3nqeifzAmN"},
{true, "8AFCD5B66577E5587FEC9624E6ACC8CB65DFF5BB", "1Dfu8k84KmgjCkTLmnZce65yWLnDZ2YDqP"},
{true, "96B5132DB8A81A8F9267078650E6EA5859733938", "1EjsH5fCL4arNioZMrEjTABn9LhYP9dAMZ"},
{true, "EBBE80F83C645EAEDC8FFBF0D705234321C4CE17", "1NVW1Wticmh7Ni48rjyU8MGij2zrt5Gkee"},
{true, "4386CDDEB6923746CE07878FC155BEE38AAC367C", "17A3mDFcEgT5k1Jh1zeMWRyJoScpVonGig"},
{true, "F92643A4F0355021365EFB2500A66743CAF61612", "1PiP6QsB7rCETcWNKoUyTHjzoatg9QS3Pd"},
{true, "20898404B37B7A195C789AE86ACB914037807E41", "13y3Mu1Ti3y9sggnm5BAseEPYSUt7bxQFe"},
{true, "BDA359FABDBFBF059802C140C4A3ADEF84DE8A10", "1JHiQ7iw1TNac9e1FFeCoBeBTvEpg1M7ui"},
{true, "7013CFBC20BD0CF0DF08C04A02AA5A0331DC26DA", "1BDcR1Za9mWuimJr2uFSTSSwV1nSsmbC4w"},
{true, "B61346B9006D7A62CC20BA8426EDA6AF134665D8", "1Hbj5Fa133KUbLHJSBo7NKpFjsUTaqc34a"},
{true, "554E5FB072FFF6D49C8220193FACDD212ABD23CC", "18n4Kp5c4kQnc1f89dSotD4wThSzH5YswT"},
{true, "076AF562DBEC64D8BBD622EF36ABC9F48A0857F8", "1gDrxEzzaE97iGqP3D4n34wGBtmgrnyJp"},
{true, "B5C70B1FEAC77C67AC66A81327D2B2D91760A078", "1Ha9kWBK1ekkjU6vTi1uyxYeMWXXEiu3vm"},
{true, "848DCCF5CE854C1950EDD5ED2FAB8E3B9DF850CD", "1D5t4oWJpxpWRBjjpsVjZDBAuWJhZo1SkH"},
{true, "5CA5F7AF1FF5EC0214E4B16DBF11E8788F8D6DCB", "19SszGsHeubHFDSNihq1ZDDZH5dSMLweba"},
{true, "8973EB648CFF7E8A745882A173C6227757D0812B", "1DXnSWXQVFhmhP2NYz9LHD8oUJypiLrheF"},
{true, "9C7290E3016FC1C333A3179E7C141E1C6B6AE2E9", "1FGDf7HCZs84WuM7qMxE98b1miGE5vsiki"},
{true, "B3C5DD6476515F41AF095425F38A6F9733F540E4", "1HPYzE76mgVkM513EnpJUHuTCmt8coS6ja"},
{true, "AB5000D772C581AD77E657BB282A4D5A2107FA10", "1GcpPXg7HMtpw9AK8kYW7pHk9Prh5UVHqS"},
{true, "E8F9219C23B51431C497F5EE5F0A538E55C39558", "1NErDT71masthqdxW2knoaiYRYDBsNTTgJ"},
{true, "E3474270AA5834191D06A601D192E2A7543B7F45", "1MijkkBiLD3rxGKzTTHhzNXbcKrWiV3ZLt"},
{true, "E3EAD3AEC170B1A49B966408FC312359F508253D", "1Mn7hc1JAcKPsp2Xrz3xZzc72PZjP37rjB"},
{true, "847E1899C78F4891CF2207BE93F25CA41E8D6190", "1D5ZFdf2vHL7mAUYXsWUk2BVs3GdPRxXZ5"},
{true, "2E5AB8808621476F82C0A1977D406C812DF224B3", "15E6mDAUeye2HXYF8hhyzyHRjTvhn3veih"},
{true, "AD71BAB306924699C1CAF7F33E232FA6ED8B9900", "1Gp69Ein677xbpBHsRjABi2R3LtLzh8rMG"},
{true, "2B8561455EB12717B8DF3FA115FFBBD6DE9F37FB", "14y7qemPmVfceSrJuWUx9vWWYuiEouKuvj"},
{true, "198F8CF6432A0B326B28EB32C17871C2AE3F096A", "13L9rsNtUCdRmgeC6vjqNwzHxTvs84HYcm"},
{true, "1772691E4C0A9DA26EBC006E68B2635CD2530095", "138yboUNE1RLHm7MyDFFJorBG8YLvuRTmj"},
{true, "217F49C33287E1516A7FB8D8D146756241DE1BA6", "1447nTySMt4cUFr4GPbJE58wh5B1tVF9kD"},
{true, "3DF5455CCBA65EE4B1D1EB4D45751D0A0D15639E", "16ec3RhVDkfHp4Jp3piXRRQqBTgAP7nbwN"},
{true, "FBF6796986AAE239705DB1714E1960D064334ADB", "1PyFsUwRa7unGWwi3kZUDJmWaUy9xL7ifq"},
{true, "705F86E209F296FAE2509304FCD7C44325695EAE", "1BFB7owykf8GVv5rLJgL6GQRHEtM1y55Ae"},
{true, "FFB617DA49344C5F2BB1FABA4C1EAD9EB3349E74", "1QK5SyPv1HQ4JSFJkJuMDrVAwzWc4hcsm5"},
{true, "7574903916ABF8298C995DFA83F900917775680C", "1Bi3hQjSXRUkFGU6Ev6JLry2MxpgUzg968"},
{true, "7AB7082869E8CD456FD297FAF4E9B03DA5A3F1B1", "1CBrhgTibVTrJdFYH7gFqqrsDxdUTya6L1"},
{true, "38477BB84E4FB6A281DC26F0E1D155D22F437A4D", "168aUVJSUdeWJTMMuaXfJZFisRrj8KTLZS"},
{true, "8F86A541170B1A91767659795197C8EE820A99CE", "1E5tvmUWaqibD1dTHSmGXhAYJXz5g14H99"},
{true, "FB6F0C58BDF805CBEA560E581E61EC3BB2D9D22D", "1PvTdv7H99tUH9vneLR5oJawXnsr9cwZL5"},
{true, "0E3151FB4A3BD9E663DE4DC04929BCEE82F7D17C", "12J3YWvtweRznNMoxtHmRo6ftvEj3Q3A7T"},
{true, "75BA49A6F15CD1A9F7B8E5AC841605F36233E3AC", "1BjVDwZah1jRHeyzfsn1mv12yo6MoRgBS8"},
{true, "A915E30ED9B99F5B2AD9AC719B4C241193A34CE6", "1GR3R9kquUH3gAXkDY9WkqVFLWEhreQpSU"},
{true, "FD514ADE92F217F00DA99C0DA1E9C8287AF64439", "1Q6RLqGMBywFVArywZ85PVkL3j9qvDFtf3"},
{true, "7D5A5893718A05561D3E173BDD7F7547FD419BF3", "1CRohL5UxWpuLHhZ9YFeWdrfkXPtLD7dMx"},
{true, "200CF4384CAA848F8F3C510D6269B7F3C8E47106", "13vU9CSGHRw5ShHEfCux4WHEDgeFBzUhtq"},
{true, "DC3EACEE00B56DB601FA26423AFC6D74AD38BD75", "1M5YjySyKNpx1ZgQ7jzLkMKBvSMtwyuo8v"},
{true, "50711052B155BF5EC13FE0802094A12303D67E5D", "18LLW9x9XueHpnoxgbKnqnWkNT1CcFusFL"},
// Random 90% bits set
{true, "FFFFF77FFF3FBFFFFFF8FFFFFFAFDFFFFFF7FFBF", "1QLbwoVYyVBMWcFdedMbmn5BQyn8hTf48X"},
{true, "BFFFF7BFCBFF73FFF06EEFDFFFFDFFFFEFBFFFBF", "1JWChbLmmeEgA1rB9GKRQuhnJeDyAN25De"},
{true, "DFFFFFBFEFBFFFFFFFFFEFF7FBDFF6FEF7FEFFFB", "1MRQMuKeMZWV4xJvwp6LUHBDxrzoKWE3wv"},
{true, "FFFFFF5BFFF6EFFFFDBFEFBDF7FFFFEDFFFFFFFF", "1QLbywDP34rSfkRgzeL6LgvYMybPeYiGFK"},
{true, "DFF7FF7FDBFF9FFFFA6FFDFE5FFBFFF7FFFF1F77", "1MREmz6a7yycwLtchw8RCdurAcByNugBkM"},
{true, "7FFBFFEFFFBFDFBEFFBFABF5FFFEFFF7FFFFFFBF", "1CfihcXJjkRDEs6X2xLiDEtt5UrWMpkwh1"},
{true, "FFDBFFFFEFFFDE7FFFFFFFDFAFFFDFFFFFDF7FFB", "1QKrrnWdY2KqmLrmyrUbEJeGtyNQejX1jt"},
{true, "FFFF7DF7FFFFFFBBFF7B6FFEFDF7FFECDBDFFCFF", "1QLbNpNJ3oGWdMFiDTiGpMEqgpbmuZVcAn"},
{true, "FFEEFFDFFDFFFE5FFFDF7FBFB7DBBFE7F6FF7FEF", "1QLFctrETB6rtvuYs7rxf4o2iAc2CVX7uG"},
{true, "85BFFDFFFFB7FFFF7DF3DFFFDFFFF7FEFEFFFFF3", "1DCCsN9ASFMxHc8SmboJrZqcovfSrwrdq1"},
{true, "FFFFBFDEFFFFEFBEFFFF57DFDFF6FEEFFFFAFBFF", "1QLbghntZ6A1p1ga6fCQTC2dGEA1Ra4pNz"},
{true, "BF7FFFFFBFFFDFFFFFF7DFF7FFFFFFFFFE77FBFF", "1JTZQEeR7LfVzASkH1kUZXcPDUXGFJG93D"},
{true, "FFD5BBEBFDEFF6DFFFDF3FFFBFEFFFFE7FFEFF5F", "1QKjMRNn54735HAPK22U5axkLqZtTfjVZr"},
{true, "FFFFFFEFFFFFBFF7FFFFFDFBBFFFFFBBFFDFFBFF", "1QLbz6KDzHYw5YpZ8RfnWhTuaSzFCazBrN"},
{true, "FFFEFFFFEFF9FFEF7FFFEDF7FFEFFFF7EFF7FFFF", "1QLandPFLfH6F79t8r4vb6swPJEvUNzrAV"},
{true, "DFBAFFB7FFFFFFFDFFFFBFFFFFFFFFFFFDFFFFFF", "1MPyhgzvQMN9kkwJ138KMV5NSda7Vtbxns"},
{true, "FFFEBBFDF7FD7CFFEFFEDFFFFEFFAFDBDFFBFFFF", "1QLaUApR4khkZ2W2KzmWbjotba77QFhv6Q"},
{true, "FE7EEFFFFBBFB7FFEFFFFDF7FBFFFEFF6FBE7F7F", "1QCehVq1Wi9wzToV3PNR4e34iJRPA95HcN"},
{true, "FBFFEFEF9FFF7D7FDBFFFDDFFFFFFDFDFFD9ED7F", "1PyTCyvC2yCasAE1gFtgTSh77qo5qSFhqU"},
{true, "FEEDBFF7DFF6BDF7FFFD6FFFEF7FFBEFFFFFFF7F", "1QEwSsoa4tYREcCm7YVYa9RH6V8rkqsV4F"},
};
for (const TestCase &tc : cases) {
Bytes expected(hexBytes(tc.hexadecimal));
assert(expected.size() == 20);
std::uint8_t pubAddr[Ripemd160::HASH_LEN];
bool ok = Base58Check::pubkeyHashFromBase58Check(tc.base58, pubAddr, nullptr);
assert(ok == tc.success);
if (ok)
assert(std::memcmp(pubAddr, expected.data(), sizeof(pubAddr)) == 0);
numTestCases++;
}
}
static void testPrivateKeyExport() {
const vector<TestCase> cases{
// Extremes
{true, "0000000000000000000000000000000000000000000000000000000000000001", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140", "L5oLkpV3aqBjhki6LmvChTCV6odsp4SXM6FfU2Gppt5kFLaHLuZ9"},
// One bit set
{true, "0000000000800000000000000000000000000000000000000000000000000000", "KwDiBf89ZHvnUda8BithBpW3yCoeTB7Jxo4LzkPAbGwmULHsofLR"},
{true, "0000000000000000000100000000000000000000000000000000000000000000", "KwDiBf89QgGbjEhvPUdqfd24EQgybjJy4u1ngZSKdhzWiYgb12kN"},
{true, "0000000000000008000000000000000000000000000000000000000000000000", "KwDiBf89QgGdLD8mwewmUJwAQ5q4dd1NzSCfQq7gu6nbmirFgHDz"},
{true, "0080000000000000000000000000000000000000000000000000000000000000", "KwEgZFEsRbywLoc7e9p7uFmeF5GoiPZUGwZDgGRToFJ7EcyFcWWi"},
{true, "0000000000000000000000000000000000000000000000000000000000001000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFUiD4boGJim"},
{true, "0000000000000000000000040000000000000000000000000000000000000000", "KwDiBf89QgGbjEhKnpdLzwNY5dmEMm9tcFoHhVuWZqxesJdcjTUD"},
{true, "0000000000000000000010000000000000000000000000000000000000000000", "KwDiBf89QgGbjEhMx86LpoMWh6xuLdw7AWNwW7ECDDW1GhRDXrYH"},
{true, "0000000000000000000000000000000000000000000080000000000000000000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi7RFNGaauJRGG5YGa68i3D"},
{true, "0000000000000000000000000000000000000000000000000000010000000000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9bW38ZJLAfdahGA"},
{true, "0000000000000000000000000000000000000000000000000000000100000000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9MB7FDQ5UieNeCR"},
{true, "0000000010000000000000000000000000000000000000000000000000000000", "KwDiBf8EAMLXfrivVTKc2be2VRZEx6YPqT2rYUUdb4jJp7R1EGWm"},
{true, "0000000000000000000000000000000000000000000400000000000000000000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZiYV9nNGfnaQMou2YMpa3aH"},
{true, "0000000000000000000000000000200000000000000000000000000000000000", "KwDiBf89QgGbjEhKnhXJuwSjznGX8n2NHaVfb4LuWHu1uFeBw6An"},
{true, "0000000040000000000000000000000000000000000000000000000000000000", "KwDiBf8URNYKVioibiiVQZE5Pr5UEh3Rq9vNJTsAoWWv8L14uGv2"},
{true, "0000000000000000000000000000000000000000000000000000000000020000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFoWPQEytL6z"},
{true, "0000000000080000000000000000000000000000000000000000000000000000", "KwDiBf89RDVruCVzwPV2Ap58ver51yfsudFrGkANXBwD4w7WJtjD"},
{true, "0000000000000000000000000100000000000000000000000000000000000000", "KwDiBf89QgGbjEhKnhXiEt6T9uRgKSXUydm6xTqF836cJKKWGzFd"},
{true, "0000000000000000000000000000000000000000000000000200000000000000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjrHXv35cevw2XRUyMw"},
{true, "8000000000000000000000000000000000000000000000000000000000000000", "L1WXUEobVkjAiVhi4jikoNA5yqKKmmquvGYkQNXAbVLxgYBegitj"},
{true, "0000000000000000000000000000000000000000000000000008000000000000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgmuCa4Etk3GsnMFUE"},
// One bit clear
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhki6Lmv12eiGxQZZTYa4Rwr71wT9hqQZgjZVkfxn"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhki6LmryzdKxikEhyySJtJATX3pDASBnFfJ6f4Gd"},
{true, "FFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhkYYkL7iTxfR6NLVnLM6KPv9ExFxoQqHWSaCeLNX"},
{true, "FFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV2PuvFibhhAay8R85ACMCxv6mh11nXCmQqQXQWsXG5vxm5"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhki6LmUT4rBt2cUc2ue35SnxsCfBvNwXpqR37pGL"},
{true, "FFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpUPZSeJAnVJijXqgtyN2bCCvjK21mzSpxf7SD8C9JKZbrph"},
{true, "FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkihPKqeLKTqNBiWjnvKoj9ej3VqUwojHzf95j3aWrMPJ92A5"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhki6Lmv6s3xZ2jEraGGvDU6xbmaBXHKBzyJav1NA"},
{true, "FFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhPeNKqKtvTsqbheVVw2Ccyhsayy8E9Vq7G5MbsLx"},
{true, "FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhki6LXi8W8gSf1pggb66TaEc2taRuYEifLyevKz3"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhki6LmvBErPm5yFKuoZ4Z7J6neATPNFAEeX2xUcP"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhki6LmvCcAXdyjVyTHTEQkHxUHiv6PnXSAwCqEmp"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhki6LmvChQosHR52MqxdbcVwVrWMMya1Wb9nFX1Y"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhki6LmvChS1MCEVb2QyCoJRsqj6nMMPuuu28f5hc"},
{true, "FFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLko38X5oPMgVQoWZqUKV5G5MJ2cShjhCgds4BSJozSzZa8Xoq"},
{true, "FFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBJ4BgssVAsax1iRa77G5CVYnv9adQ6Z87tdcctJjma"},
{true, "FFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhaBELJd3oxYLMNnKbTVzJz2qtHqAnSMpiEUU4QyQ"},
{true, "FFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLeS6q3LXw78jaM22WjNuJwNtxKvpxVG4W7QEoxz4YgUqcaA8n"},
{true, "FFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpJZCcWhAFBWQ7kQYZVMsgM3UwHeDaTvVP7arRfqagRWJGyS"},
{true, "FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5nNPENKZuUQ6BoJVKdPhUYXibMqqA8MZbYH8UcsPjPp7xgmukey"},
// Random 10% bits set
{true, "1000000A00401003008004064802000000020030104001200030004C00A88002", "Kwkp6V4SUPzUjapYcF6KnEBLogmQ8aQL2v3JJQurT1g61fcmJPto"},
{true, "00100220400010040100880046C00080008001100014000000042080024400A4", "KwDqEZwbDrGtAnZFRr1WooE8Aezfjk6rUpsxhM3gcnd7BJpxTarc"},
{true, "102408894000000000010110000080818080220010000004010280011000000A", "Kwm5xuPhka4gT7fRY3PbvtBHhF6oKHZLD2fLnu4Fb43uGLKfZDw7"},
{true, "000000400000200244402A081200100080000100000000310000000060000004", "KwDiBga4US9Fz654fwrTZ14P5CAQFnFuqhpTV5d7HKE6UR5hoC1a"},
{true, "0010110000044020010040100800004004810000008108000481000040080122", "KwDqG42CZSnDNfuJkZJSwpaGrGZTcWrLTi6HLuRT8EWCDezuJXpe"},
{true, "0080010944208208000840000801000008401100003045000000200000040200", "KwEgZMEgMPiWo2kmVs2wANNscpefYpS5QcwknyA5jHKf5rp33cFB"},
{true, "080208A002000600000024A00000046000000000108040100000080800428000", "KwVH31xYLDQb2CMVgJHgACZhcDr4kpkiz8wusDBSLJ8QssNU19ty"},
{true, "2A2C080068100120002010000A04280000200010004008010101008000211000", "KxdgqnasJJbh3PZfhRzEmwctq133FF2Zxp1ENMAD3mSCHnxq1BFp"},
{true, "0000000000001880500000100200000000000840000008000400002200009200", "KwDiBf89QgeGXmN71kUUDfntmFnwLyajNjqUEMseDDta8vbH49F9"},
{true, "3000080410000000002000200000020000800000000040800801030010006080", "Kxq1vveHxJRjtRC1mduGZPW4yCkvLsaGSSuEcjsxo1FBqE516fGY"},
{true, "000001200004010480000000000180000A2A0005440100000003050000002100", "KwDiBmdmCp8i4ysUZrFc7QswjXy6KQ8b4iBjAc9BZZCBhcfx7SVE"},
{true, "00000800910E000C0040000A080000A10802A000111000800080801010400A00", "KwDiCTSAZrBKEMAfHEmPJgZgfyGWQa9JVgbh1siU2dRhmBJjVdxe"},
{true, "0100000204000010900400002008480008000080000000204080000200020022", "KwFevqQEj18aPtUn9vktx6qV9dpitnax1PYFJhrABrKUqRSzWrvS"},
{true, "40180100001000254220852080000100890240028000A08500A0500002000002", "KyNJQ6XHri54idNaWTPaFjGYKj7ZMg915nRjX9ik6vKpo8BqiBZe"},
{true, "00C0002810400040208000002000000010000000090290000000000004100004", "KwFAk4CmB9752iFJEQf9mjeWG9MpQFPPXghSeCHHtiXvtBSkykmf"},
{true, "000010010000080200020000000004002400000028A808002404003001021000", "KwDiDFk1bL91iBbXJ8oQNzHLwFBsGgmkuMmMetnsfb45a9p9As5U"},
{true, "8011600180800008001406020000100000001000400000003004040001000020", "L1Wf84TbTNK39t7CzasbC78YLuYG9V4idZzdktoBYo1a7P4cqrmp"},
{true, "0022002002700000010069020090300004000335002000000000000C10008000", "KwDyA9wXWjSSUijcNG4mYn3M7TDX9fdcpYk5ZQinN7HbtrDYdMBW"},
{true, "00808420000000A0880212800000001010001000400080042988810008020008", "KwEgnRsu5S9tQt3y6DpniHrppFjd6dyzRe1svEdLJ1wJ7KVBPoq7"},
{true, "0000008009B0804008C880008A88000100104402020000200002000040400000", "KwDiBi22R7spKabvEHF2kHFW6RE4fd2V5RL5j1mSNY558X2SJRXt"},
// Random 50% bits set
{true, "9DCBD04EB62DF0BB2094184F64258B86494511787E5AEE41EDA9A95D39ED4358", "L2WSpW5cxTUP3dbjHiuh4gDvxF4WFu7dGfuTh4VMZauqY7C41o5E"},
{true, "EC868CF356C5A9EE5EAFE978264014AA0640CF3CB716F510657AD62A5D10B032", "L59V8CsPbQ7iARDxVbj4dvX5EviJHEFm53Sjz3NhjxN9JWkyrbLZ"},
{true, "12A189853B12301B5C1EE44CBEE0D55E6B26F1E71081BF183E0758AA0B12D613", "Kwqvj5qZ1DjFUsvMcv9RuPQXhZtgufVvLUFjsuHMHsJxNXwbeq7B"},
{true, "4A50D2D764CD71F53C46E8ADE4072B836AF479D61F044BAB674F9891A7CF2B9C", "KyiAsF3W44m8ViVEM576zyH3uYCDRdA2UC3vSXEjPFd5BDmYRSn5"},
{true, "31FFBCE29A031D36756862DC73D6693BFA16B8B5AD6208BFA1762ED69C546780", "KxtuHnJr14g88D9P3E7YJhtuJEhZBkd8K4n5hEw7UZ9igvk8fJZw"},
{true, "E1431EEDAE28F95AA118A2ED6E22E7B0FC2C8102DA3353253AFCA61922FCED8E", "L4mbErwWxVvBEqXNkjNLpCZ3FmnhbpSJRPMaMRyciB4mtcJTzoNs"},
{true, "0EEFC69066074D25BF10D3216B7FB239CCF26546F23E0A21A04864D1308A7FDD", "KwikCsh7M9Tct8VdTpiuuFPpfnpdnNLGp57ahkLd8VLVbKk8oCTA"},
{true, "A79675700A8CAFA792CE7A9EE34E00C3D525FCEBDBC0B672ECCBA8E41FF5F893", "L2qUmPJwHHWW23CuNP6EjiiGbrSd4vQQCJ8Yc51hdWsDMvLyH8xH"},
{true, "E9FB5173645F0216406621656DE0298BD30B791D3B66407208601150CE634743", "L54YKM6aHJsLphgKtW7TpqRsXHDKcyEKbzL2jFgLu33kYe3DbnEb"},
{true, "CBB0CB72C7CCECCC556A98BB315CD2E0C081D5F511E63307AE96066B45EE6EF7", "L43fATFuSvy41kdkb64ZTLGiE8v6LcmBMKZJVopjNmcZbUeJsyn8"},
{true, "AFC9CBA67612C3F81713A3F6C31666F9BE14B9A7D01F34F8BD77BDDC695FC559", "L37RL8Ej4mGH6djpzyyqCVHqKDynZzT4PWAi1REptAMtwGri5dWz"},
{true, "A0958A8C227C63F6B59E07C92EF4736B5928421AFAA0BB3F66FE9F63BF4B9B18", "L2bs9iKcmMe6zAWv4SeeLh38Qvy7sUS4QjLGrbUPdmWzUUojjXAm"},
{true, "626DCADA05D2E42E9A8536111377B2599921E141C460E3CDF320679E70F44CD5", "KzX3VSoXfmfpZSoJ1eZJNXN7ZyWHrDGyFDS8ijU4erv3nuCuDAcq"},
{true, "16636EADE672F2F017AF7DC19702B0283B11F165AF28A4A124EB646A849CABD0", "KwyEMQSEKCQsavPM9DQMKtuzePNLyCQiFnUEjrRaZAeVgSQV1cK3"},
{true, "BF9EEA8E1FECFD346A373B4764942CF24A4C2556B275533E8677349F648EAB39", "L3eCMevFTF2Y1vAAgZtDXeEhS3tbXEUhP7GqK8K6SJz841K9PdJ9"},
{true, "31E1CD0F0AFD2F0D3CDAB5A93C4D3A6D7325AB85CE1B8E19BC85D2DA24B7BF1B", "Kxtg75wieQU7uLoAepXJWeFEPiKeYBTfyWXhig3GrCpdwqkjS3xG"},
{true, "41B262F796EA5BBB831628CA5C096A132095B02EB162E98EBF48E793CD189A5A", "KyRR8mfa6EBh51CrMPyKu7dGXD1PJBP39p1RVx1ZXZZGEBK9WPAu"},
{true, "2696B062A21124FF591DDF5D12E571D4C2F5E184245F8864C23A2F83D9E39869", "KxWiqWYNkbHGyTveifUKvogNP93Ue9fKQSTrFZA8FgTiBRKz8ZRD"},
{true, "6595779A54F702CEB093283FC3C4D6E1D7392EE6C440B65E6C84607AAA8242A0", "KzdBCR1DdqvcvdyBjjfcLFs1PF7uEEN6Q3KWVncveDuREZGKrgyB"},
{true, "D4F787F445EE0CD071F3217B2F2B737914B9A89B1025C2EF6C164A5EC919E3E7", "L4Mh1uXJ1s9wMNWiFLKJkaNTxY6EpQyyPnyb5aWErjh25Ue3RgS6"},
{true, "051FADBF019E4C8B7CB98D09E5552C895BD550FFAD355D053F12A53436C54892", "KwPfrjHmFBD1P5kp8fNwr1tnMBYGTdx8YAXVCTx2UvFJ2qLN9HF1"},
{true, "F481188F452959F4F303AE6FD2FA82D1D4965DB6BB7C3BB2F7E0421A0DA94A61", "L5QzgHUvz6hc4BJqRxQktzrccsXKKmXu11SEhQkQEuiFH9LNiTLV"},
{true, "1373AEFE0C6D65F2B6028E0F0D454F7655978D527B75988D8FE46F7C07533ED2", "KwsXGzT2dHbrdJYnXdgT9CNJ7XyVUXbe1t5fsp2b71ueBaSLx8EW"},
{true, "EDD060D215A2BC712DF53A1855A518CACB05DE4C2DC2289E91C7BBED39078F62", "L5BzPD6E3twQZUpZpqkfZ1tVyVtcm9GzzaANHgBDUftKPwZyg8da"},
{true, "F7D16B49EDACB37280BA115E12481AF62129EF44E21E19C4312D04890215A92E", "L5XSHZXK15YNRPNkaQ9FBuNvocYsvGuRnRJUK16cZ53zxNeNcZsN"},
{true, "CADB673104097D4EB347CE606505D183AAD1C3369F9EFC449F1B0EFA6C9F5536", "L423BehThPNdnLogF63XxFku9p1Ps7cVsbbJnErczjGku3BpegUA"},
{true, "973058DDF336A984F528297F9B3885DF10C54BF0577B2C95E627536F7BFD5C76", "L2HbtFyW4mF3TmkDET9LxPFy4796uYC2dPKSHjbjGrFqqkgnGgiV"},
{true, "C71D26B6B96864E72CD22212C5F08A5877EBD6D7B32C626279192B9A42DE40AB", "L3tmAPkCNEY9vqsPGjHcXWH6gefSdQfWMBVYELaqixSeaBTPvest"},
{true, "B603A22FA952941A9C43CF6AA3AFA136BC7B18D1B3F1B11DA9F68D833DC8B394", "L3KXGaXnAK55XAiiZfB8i1o7Dnkg9CJD6Ct6qP9oL7EYFgsWGdYG"},
{true, "9B07D587C0652E22BD66464A852B32F89245E1A262003F3CA3D3C2AD03845610", "L2R527YGEjvoin3yDjFCetmrb5tk7DQRKtryAXQt7JPpm7EV13Xa"},
{true, "AA58EFE2B7D17A7B3D0DD004A7077FA224150DD90105B1AB6AD2621467D427AD", "L2vquReVBL85EAfUhGvBCN625k6cidYoMym6C5Dz5Ysrof2MfvGa"},
{true, "25F7578D84DA3ABAF19F32C4FFF3FF4E3B7F7A91FE1D065AD95D1AE737171103", "KxVWfCqMnBdLuRHWYqErgKP8GvZF1Mc3GebMBitCot2xCHG4QWmm"},
{true, "DB21A472CAF2395DFB90BA1B0B7F1C5395B0241A14A8A00512D40A72AF9D9997", "L4Zg2eAgDWPXGgzK5SV8fTiuVZwv6NrFyYLMdZ1wkzfyVYcUUeB9"},
{true, "73A613244DC72852462FC622C477A1A16D18907001DAC753BBF367F428243C1C", "L16Ww6uVNc7X2uoe8Q2hAvrj1YAwS7PgN6C7ZEmzSvBX8fnKZH6R"},
{true, "E2ED31137060C4AF839D0F8F8A16F3FCABB6AC3C13576A682D5E48F7CFCF7DF4", "L4pptGfQMBf9ddJBWZcVkvhzqmaKHTkBbvG4pdJR5ehr3XFKRd5J"},
{true, "76B52A3BA3FE88754BB1B5C4149051EA580E359BA78723AF1AB9410B78B02E5D", "L1CTp6DahyHbZCzGMorLngXTPrFrbzRZCdD1K5nWeRx4NyaFmMcw"},
{true, "FE17F5E1FDFE5A5911055F8EF18E91CD92029604B3831E9F2E3F0F0D56C6D240", "L5jdpWEy2juQpy9xfMuMVcrASCby1qYvwLahdFXqhXir8W9LNYtQ"},
{true, "9EF83D9357DCDD4CFFCF8D45B7A9357138D91545E7625A7A7B9E92FBFCE3BF50", "L2Yj8W621zB7Ce8cdVMMkakNH5cFEo91AYmG2qCMd6Wbx35RfcCs"},
{true, "4D7726C00DF920942E53A6BF415AB51ACB876B8D563062D4788643813B9C148A", "KypHyoZXW8ccWFU8soLgjYhRh9C2hicbTerJKvsSRDQDDmYRedLW"},
{true, "4458D5B378047CB91EAFD4186C99DB6E250366CB8679D6CB92B5D685E5FCAD27", "KyWZvpTbzpYH8wwrFv3mrzbNqZ7iJQBd2Wx8SXq3uVjm7ha4aiLv"},
{true, "05681656B32EF2E0C70C4D169323E9F90D3243B44138AF5A3A9665E50C7A862E", "KwQDkJuYVNegbsnLfro9yrgC5VyKSo62cjqNSEepe8QPX1Fb1LeL"},
{true, "F6FDF0819D2C13DCC36D8E5B6142781E3B105A7632FA69BB7E57871FA04DF6A5", "L5Vq9bffgd83iuntSLeUtjyBexRUiWFDQMWq6G5JucTecpyLorjN"},
{true, "DC334420701A03348AC0F1FCF8DAAEF03EED8817001EEE20FA3396F535AA152B", "L4bkXzYPcjMpSWvPad2bSuCMacaaAqahzxFfm1v3MPAdaJHy8c5H"},
{true, "5642965CD2A31DFF508A18D7B989F6679B4574EAD86952263D010469E6193A1F", "Kz7PXiNVFu9A29efUi9xxTEXRufMH8Nsy4ir5Tka8m7ktr7QdCsU"},
{true, "C48C699D079D6D67DD9A526D479C8600AF1043D6E77222A36091769D15829B1E", "L3omvtHNfkTzPQ7LZ1jFEUepv2hoBQHmFPQnFhFG9ykK9H7PxWMv"},
{true, "DCF8D1842CE5D8F677ECC5FDBD574C045C9BC556CD3F317D12CE92BB38D8699B", "L4dFYCdamisQ4LMP6Ecgrjs9RW8JjBnBHWo7cEJDD5aght5Mra3f"},
{true, "BD34245BB0823A07759774E5DD7D4EBF81627B0283EACF97B7A9DB9CAE039EC4", "L3ZVqu2vV7Vija6t8wkWzxq4Qywc48sFWmTjyJ6rqRGj3MDPy8Mf"},
{true, "9003BAA2CBF6F2C4E597900B2352F3B6EB99BB33F9CAB0744BF802FB0FDAE153", "L23f2KDWwzyVk48gBYLAhEFRKuzjqjsGSoHDUwD4CbAjCcPcoLoN"},
{true, "0E09E7EA9C77C5F780101F04E64EDDAF30E59F7E35C28E672AD283F65AEF4844", "KwgzyAKCoLQaDy5SJEVQGiurpzc7r1GqBAM94NX7ffAGMa7sE7ae"},
{true, "740F2F450BB23945A356052193B7C23F08C2D441D1473D31834B36B29A598FE8", "L17KDzZicxBFtaX4pVnfXtTqmp2WsagbQpabqmYKfrDwfzZuMV6R"},
// Random 90% bits set
{true, "EFFDFFFFF9EFFFFEDFFF7BFFDFDEE7BEFF3FFFFEFFEEFAEFFFFFFEFFFF6FBFFF", "L5GDxui6vnojkuMKbvTEu7NPh4ecbHHiu72zEhjYCvPZ5xt1hTZq"},
{true, "FEFFDDBFFAFFB9FF7DEBFBFDFEEEFDF5FEFEFFFFFBFFDFFFFFFBDF7FBFF72BFF", "L5mPxE3EDLKEo6k49gPg4ietQw471xh2CiLHRH47wchXcmpoVFZb"},
{true, "BFFF7FFFDFDDFFFBDFBEFFEFBB3BFFF7EBFFFFFFFEFFF7BB5FFFEDFFFF6FFFF0", "L3evtksiufo7KrPQJ1KVMK9jNEEN4nk2JSfMecASF8ntrwYhgzXA"},
{true, "FDFFFFEFDFFFFFFFFFFFFF7FFFFFEEEBD7FFFBF7DFDFFFEBFDFFEFFFFFF75DFF", "L5jTGTf1FLrSHDxZaDVd1fEUsBx53S6SRBHN8VzpNn3pY5LYTVjf"},
{true, "BFFFF7F7DFDFAFBBFBFFFFFFDF7BB6FF37F7FEF9FFFDFFFEFFFFFBF3FF9FEBFF", "L3ew6jAPYcgHkeo1QZqgUw2izzhi4ifhT3ffBhD8dz94iHvm3k4j"},
{true, "FFFFFFFBFFFF6FBFF7EFFFFFDFFFF3F7FFFDFFF3FFFFFFFFFFFDEDFDFF9FFF7B", "L5oLkpPoPgee3tB12Fh4wmmYCE1iuQpYWcyXEGq5SJeiuBvs37vd"},
{true, "EFF7FFFBFFBFFFBEB5FFFFE9FFFEFFF7FFFDFFEFFFE7FDEEFFFFFFF7F7FAFDD7", "L5GBKeRhRyMNFXnp751d8AM7wpup4rZ8B5d69KqR8xFLdT5RoC9T"},
{true, "FFFFFFFE7DFEFFE77FF9FFE7FFFFDF7DF7FCFFFFFFFFBFFFFFDFDFFFFEBAFFE7", "L5oLkpT4v92BZ3QvfPmBpL9AWkhn5KmJqZz7VBVapxqGD3xEJApq"},
{true, "EB7FFFEFF7FEF7BFF77FFDFFFCFFFBDFBFBFEBD67FFFFFFDFBFFFFFBB7FFFF7B", "L57VVhNKnX47fPNVTDdYwhZoexWUepwg2TQAeaVd8dzsLD3Mtnxt"},
{true, "4FEFF7FFFFFDFEFCFFFFEBFFFFFEFFF7FDBFFFFBCFEBFFFFDEDEFBCFFFFFFFDD", "Kyu6gGrw9ASMP1JiEw9MDcKPfRoq9t5fScigb6Z5vPsuVWMJtJym"},
{true, "FEFFFFFFEFF9BFFFFFF7FFDBFFFFEDFEFEFFEFF7FFFFDFFFF7FFFFFFD7FBFFFF", "L5mQ1eFWntJ5k9k7Xp7FmYuaJ7FvnknC5m49dNYba4xAxYezBWUe"},
{true, "FF7F777FFDFFFFFFEFFB7FFFFFFBEFFBFFE5FFEFFFD6FEEFEFCBF2FFDBFDFF7F", "L5nN9cQmh2S88AjkrLF2ZdmCy9eg7DCTx7cM48JejbMa6cGR9cUG"},
{true, "EFFFE76FBFFFF7F5FFFFFF7FDEF7F3FFFFFBFEFEFDFFFFFFFFF7DFFFF7FBFBF7", "L5GEoYctxkscwe7AkFuqhBUHBr7bqvxhjaef84sbgztEvqqFJ2Lb"},
{true, "FF6F5FEFFEFB3FFDDFBEFEFFBF6FFFDDFF3FFA77F7FA7FFDFFFFDEBFFFB7EFFF", "L5nF4ZXxPZva4piCdWHhttayp6qtcEjQYsebH4sYHcedUVTBqm8o"},
{true, "DB7EBDFFFFF7FEFF7BFFFF77FFBFB6FFFDFFDFFFFFFF7FF7F7FFFFFFDBFFE8FE", "L4aP2kXmBEa5cZEnNpjv7WsvfSQAF88hL5dpDrwhjD1uc29Qf82y"},
{true, "FFFFF5FFFDEFBFFFFEF7EFFFF6E9FFFFDF7CFFFFFF754FFF77DFF7BFFFFFF75F", "L5oLjpcSPMhqcRTECzVhoaUh7xeSWSoRabSjAvytc6DJonVN6y1b"},
{true, "F7FFFB7BFFFBEFFFFFFFFFF7FFFFFBDFBDBDEFFFFFBFFFFBFF6FDEEEFA7F5DFF", "L5XnnxVjyAei5QsfPbnH8hk3NeocpTX5J9YTzKhmFpGzSrZzJSwd"},
{true, "7FB7EFEFFFFFFBAFBBFEFEFFFDFFFEBFFDFFFDFFFFFFFEFFFBAFFFFFFF7DDFFF", "L1VyjVXnDAwSJpQUi4EpCATFvkf1nQizQp9S2cdkHnvhZnyKYV4r"},
{true, "FBFFFFFFDFFFFEFBFFEFEF7FFFDFFFFDFEFFFFDFDFEFFDFEFFFE7DFF3FB7DAFE", "L5fZn7Z5x5LGpLwqGo6Wk9mTzYyjozniRhWjvGkLxESoz7cVs32G"},
{true, "FD7FF6FFFF7FE7FBFDFFDFBFF77FDFFDFFF3BFFFFFE7FFD7FFFD7BBEFFEEFB7F", "L5iUsypV2eizXzvFFaNuMvkvQsmZ3nZTjDXyYAX6CHKfD2FFQmgX"},
// Mismatches
{false, "0000000000800000000000000000000000000000000000000000000000000000", "KwDiBf89ZHvnUda8BithBpW3yCoeTB7Jxo4LzkPAbGwmULHsofL"},
{false, "0000000000800000000000000000000000000000000000000000000000000000", "kwDiBf89ZHvnUda8BithBpW3yCoeTB7Jxo4LzkPAbGwmULHsofLR"},
{false, "0000000000800000000000000000000000000000000000000000000000000000", "KwDiBf89ZHvnUda8BithBpW3yCoeTB7Jxo4LzkPAbGwmULHsofLRR"},
{false, "0000000000000000000000000000000000000000000000000000000000000000", "KwDiBf89ZHvnUda8BithBpW3yCoeTB7Jxo4LzkPAbGwmULHsofLR"},
{false, "0000000000800000000000000000000000000000000000000000000000000001", "KwDiBf89ZHvnUda8BithBpW3yCoeTB7Jxo4LzkPAbGwmULHsofLR"},
{false, "9DCBD04EB62DF0BB2094184F64258B86494511787E5AEE41EDA9A95D39ED4358", "L2WSpW5cxTUP3dbjHiuh4gDvxF4WFu7dGfuTh4VMZauqY7C41o"},
{false, "9DCBD04EB62DF0BB2094184F64258B86494511787E5AEE41EDA9A95D39ED4358", "L2WSpW5cxTUP3dbjHivh4gDvxF4WFu7dGfuTh4VMZauqY7C41o5"},
{false, "9DCBD04EB62DF0BB2094184F64258B86494511787E5AEE41EDA9A95D39ED4358", "L2WSpW5cxTUP3dbjHiuh4gDvxF4WFu7dGfuTh4VMZauqY7C41o5EF"},
{false, "9DCBD04EB62DF0BB2094184F44258B86494511787E5AEE41EDA9A95D39ED4358", "L2WSpW5cxTUP3dbjHiuh4gDvxF4WFu7dGfuTh4VMZauqY7C41o5"},
{false, "9DCBD84EB62DF0BB2094184F64258B86494511787E5AEE41EDA9A95D39ED4358", "L2WSpW5cxTUP3dbjHiuh4gDvxF4WFu7dGfuTh4VMZauqY7C41o5"},
};
for (const TestCase &tc : cases) {
assert(std::strlen(tc.hexadecimal) == 64);
char actual[53];
Base58Check::privateKeyToBase58Check(Uint256(tc.hexadecimal), 0x80, actual);
assert((std::strcmp(actual, tc.base58) == 0) == tc.success);
numTestCases++;
}
}
static void testPrivateKeyImport() {
const vector<TestCase> cases{
// Bad syntax or hash
{false, "0000000000000000000000000000000000000000000000000000000000000000", "KwDiBf"},
{false, "0000000000000000000000000000000000000000000000000000000000000000", "11111111111111111111111111111111W3xrUjb"},
{false, "0000000000000000000000000000000000000000000000000000000000000000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWna"},
{false, "0000000000000000000000000000000000000000000000000000000000000000", "K0DiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn"},
{false, "0000000000000000000000000000000000000000000000000000000000000000", "KODiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn"},
{false, "0000000000000000000000000000000000000000000000000000000000000000", "KIDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn"},
{false, "0000000000000000000000000000000000000000000000000000000000000000", "KlDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn"},
{false, "0000000000000000000000000000000000000000000000000000000000000000", "MwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn"},
{false, "0000000000000000000000000000000000000000000000000000000000000000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWX"},
{false, "0000000000000000000000000000000000000000000000000000000000000000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU74NBMV24j"},
{false, "0000000000000000000000000000000000000000000000000000000000000000", "KwEgZFEsRbywL1c7e9p7uFmeF5GoiPZUGwZDgGRToFJ7EcyFcWWi"},
{false, "0000000000000000000000000000000000000000000000000000000000000000", "L5oLkpV3aqBjhki6LmvChQosHR52MabcdeVwVrWMMya1Wb9nFX1Y"},
{false, "0000000000000000000000000000000000000000000000000000000000000000", "KypHyoZXW8XZWFU8soLgjYhRh9C2hicbTerJKvsSRDQDDmYREdLW"},
{false, "0000000000000000000000000000000000000000000000000000000000000000", "KyWZvpTbzpYH8wwrFv3mrzkNqZ7iJQBd2Wx8SXq3uVjm7ha4aiLv"},
{false, "0000000000000000000000000000000000000000000000000000000000000000", "KwQDkJuY4NegbsnLfro9yrgC5VyKSo62cjqNSEepeBQPX1Fb1LeL"},
// Extremes
{true, "0000000000000000000000000000000000000000000000000000000000000001", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140", "L5oLkpV3aqBjhki6LmvChTCV6odsp4SXM6FfU2Gppt5kFLaHLuZ9"},
// One bit set
{true, "0000000000800000000000000000000000000000000000000000000000000000", "KwDiBf89ZHvnUda8BithBpW3yCoeTB7Jxo4LzkPAbGwmULHsofLR"},
{true, "0000000000000000000100000000000000000000000000000000000000000000", "KwDiBf89QgGbjEhvPUdqfd24EQgybjJy4u1ngZSKdhzWiYgb12kN"},
{true, "0000000000000008000000000000000000000000000000000000000000000000", "KwDiBf89QgGdLD8mwewmUJwAQ5q4dd1NzSCfQq7gu6nbmirFgHDz"},
{true, "0080000000000000000000000000000000000000000000000000000000000000", "KwEgZFEsRbywLoc7e9p7uFmeF5GoiPZUGwZDgGRToFJ7EcyFcWWi"},
{true, "0000000000000000000000000000000000000000000000000000000000001000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFUiD4boGJim"},
{true, "0000000000000000000000040000000000000000000000000000000000000000", "KwDiBf89QgGbjEhKnpdLzwNY5dmEMm9tcFoHhVuWZqxesJdcjTUD"},
{true, "0000000000000000000010000000000000000000000000000000000000000000", "KwDiBf89QgGbjEhMx86LpoMWh6xuLdw7AWNwW7ECDDW1GhRDXrYH"},
{true, "0000000000000000000000000000000000000000000080000000000000000000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi7RFNGaauJRGG5YGa68i3D"},
{true, "0000000000000000000000000000000000000000000000000000010000000000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9bW38ZJLAfdahGA"},
{true, "0000000000000000000000000000000000000000000000000000000100000000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9MB7FDQ5UieNeCR"},
{true, "0000000010000000000000000000000000000000000000000000000000000000", "KwDiBf8EAMLXfrivVTKc2be2VRZEx6YPqT2rYUUdb4jJp7R1EGWm"},
{true, "0000000000000000000000000000000000000000000400000000000000000000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZiYV9nNGfnaQMou2YMpa3aH"},
{true, "0000000000000000000000000000200000000000000000000000000000000000", "KwDiBf89QgGbjEhKnhXJuwSjznGX8n2NHaVfb4LuWHu1uFeBw6An"},
{true, "0000000040000000000000000000000000000000000000000000000000000000", "KwDiBf8URNYKVioibiiVQZE5Pr5UEh3Rq9vNJTsAoWWv8L14uGv2"},
{true, "0000000000000000000000000000000000000000000000000000000000020000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFoWPQEytL6z"},
{true, "0000000000080000000000000000000000000000000000000000000000000000", "KwDiBf89RDVruCVzwPV2Ap58ver51yfsudFrGkANXBwD4w7WJtjD"},
{true, "0000000000000000000000000100000000000000000000000000000000000000", "KwDiBf89QgGbjEhKnhXiEt6T9uRgKSXUydm6xTqF836cJKKWGzFd"},
{true, "0000000000000000000000000000000000000000000000000200000000000000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjrHXv35cevw2XRUyMw"},
{true, "8000000000000000000000000000000000000000000000000000000000000000", "L1WXUEobVkjAiVhi4jikoNA5yqKKmmquvGYkQNXAbVLxgYBegitj"},
{true, "0000000000000000000000000000000000000000000000000008000000000000", "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgmuCa4Etk3GsnMFUE"},
// One bit clear
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhki6Lmv12eiGxQZZTYa4Rwr71wT9hqQZgjZVkfxn"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhki6LmryzdKxikEhyySJtJATX3pDASBnFfJ6f4Gd"},
{true, "FFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhkYYkL7iTxfR6NLVnLM6KPv9ExFxoQqHWSaCeLNX"},
{true, "FFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV2PuvFibhhAay8R85ACMCxv6mh11nXCmQqQXQWsXG5vxm5"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhki6LmUT4rBt2cUc2ue35SnxsCfBvNwXpqR37pGL"},
{true, "FFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpUPZSeJAnVJijXqgtyN2bCCvjK21mzSpxf7SD8C9JKZbrph"},
{true, "FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkihPKqeLKTqNBiWjnvKoj9ej3VqUwojHzf95j3aWrMPJ92A5"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhki6Lmv6s3xZ2jEraGGvDU6xbmaBXHKBzyJav1NA"},
{true, "FFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhPeNKqKtvTsqbheVVw2Ccyhsayy8E9Vq7G5MbsLx"},
{true, "FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhki6LXi8W8gSf1pggb66TaEc2taRuYEifLyevKz3"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhki6LmvBErPm5yFKuoZ4Z7J6neATPNFAEeX2xUcP"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhki6LmvCcAXdyjVyTHTEQkHxUHiv6PnXSAwCqEmp"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhki6LmvChQosHR52MqxdbcVwVrWMMya1Wb9nFX1Y"},
{true, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhki6LmvChS1MCEVb2QyCoJRsqj6nMMPuuu28f5hc"},
{true, "FFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLko38X5oPMgVQoWZqUKV5G5MJ2cShjhCgds4BSJozSzZa8Xoq"},
{true, "FFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBJ4BgssVAsax1iRa77G5CVYnv9adQ6Z87tdcctJjma"},
{true, "FFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpV3aqBjhaBELJd3oxYLMNnKbTVzJz2qtHqAnSMpiEUU4QyQ"},
{true, "FFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLeS6q3LXw78jaM22WjNuJwNtxKvpxVG4W7QEoxz4YgUqcaA8n"},
{true, "FFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5oLkpJZCcWhAFBWQ7kQYZVMsgM3UwHeDaTvVP7arRfqagRWJGyS"},
{true, "FF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "L5nNPENKZuUQ6BoJVKdPhUYXibMqqA8MZbYH8UcsPjPp7xgmukey"},
// Random 10% bits set
{true, "1000000A00401003008004064802000000020030104001200030004C00A88002", "Kwkp6V4SUPzUjapYcF6KnEBLogmQ8aQL2v3JJQurT1g61fcmJPto"},
{true, "00100220400010040100880046C00080008001100014000000042080024400A4", "KwDqEZwbDrGtAnZFRr1WooE8Aezfjk6rUpsxhM3gcnd7BJpxTarc"},
{true, "102408894000000000010110000080818080220010000004010280011000000A", "Kwm5xuPhka4gT7fRY3PbvtBHhF6oKHZLD2fLnu4Fb43uGLKfZDw7"},
{true, "000000400000200244402A081200100080000100000000310000000060000004", "KwDiBga4US9Fz654fwrTZ14P5CAQFnFuqhpTV5d7HKE6UR5hoC1a"},
{true, "0010110000044020010040100800004004810000008108000481000040080122", "KwDqG42CZSnDNfuJkZJSwpaGrGZTcWrLTi6HLuRT8EWCDezuJXpe"},
{true, "0080010944208208000840000801000008401100003045000000200000040200", "KwEgZMEgMPiWo2kmVs2wANNscpefYpS5QcwknyA5jHKf5rp33cFB"},
{true, "080208A002000600000024A00000046000000000108040100000080800428000", "KwVH31xYLDQb2CMVgJHgACZhcDr4kpkiz8wusDBSLJ8QssNU19ty"},
{true, "2A2C080068100120002010000A04280000200010004008010101008000211000", "KxdgqnasJJbh3PZfhRzEmwctq133FF2Zxp1ENMAD3mSCHnxq1BFp"},
{true, "0000000000001880500000100200000000000840000008000400002200009200", "KwDiBf89QgeGXmN71kUUDfntmFnwLyajNjqUEMseDDta8vbH49F9"},
{true, "3000080410000000002000200000020000800000000040800801030010006080", "Kxq1vveHxJRjtRC1mduGZPW4yCkvLsaGSSuEcjsxo1FBqE516fGY"},
{true, "000001200004010480000000000180000A2A0005440100000003050000002100", "KwDiBmdmCp8i4ysUZrFc7QswjXy6KQ8b4iBjAc9BZZCBhcfx7SVE"},
{true, "00000800910E000C0040000A080000A10802A000111000800080801010400A00", "KwDiCTSAZrBKEMAfHEmPJgZgfyGWQa9JVgbh1siU2dRhmBJjVdxe"},
{true, "0100000204000010900400002008480008000080000000204080000200020022", "KwFevqQEj18aPtUn9vktx6qV9dpitnax1PYFJhrABrKUqRSzWrvS"},
{true, "40180100001000254220852080000100890240028000A08500A0500002000002", "KyNJQ6XHri54idNaWTPaFjGYKj7ZMg915nRjX9ik6vKpo8BqiBZe"},
{true, "00C0002810400040208000002000000010000000090290000000000004100004", "KwFAk4CmB9752iFJEQf9mjeWG9MpQFPPXghSeCHHtiXvtBSkykmf"},
{true, "000010010000080200020000000004002400000028A808002404003001021000", "KwDiDFk1bL91iBbXJ8oQNzHLwFBsGgmkuMmMetnsfb45a9p9As5U"},
{true, "8011600180800008001406020000100000001000400000003004040001000020", "L1Wf84TbTNK39t7CzasbC78YLuYG9V4idZzdktoBYo1a7P4cqrmp"},
{true, "0022002002700000010069020090300004000335002000000000000C10008000", "KwDyA9wXWjSSUijcNG4mYn3M7TDX9fdcpYk5ZQinN7HbtrDYdMBW"},
{true, "00808420000000A0880212800000001010001000400080042988810008020008", "KwEgnRsu5S9tQt3y6DpniHrppFjd6dyzRe1svEdLJ1wJ7KVBPoq7"},
{true, "0000008009B0804008C880008A88000100104402020000200002000040400000", "KwDiBi22R7spKabvEHF2kHFW6RE4fd2V5RL5j1mSNY558X2SJRXt"},
// Random 50% bits set
{true, "9DCBD04EB62DF0BB2094184F64258B86494511787E5AEE41EDA9A95D39ED4358", "L2WSpW5cxTUP3dbjHiuh4gDvxF4WFu7dGfuTh4VMZauqY7C41o5E"},
{true, "EC868CF356C5A9EE5EAFE978264014AA0640CF3CB716F510657AD62A5D10B032", "L59V8CsPbQ7iARDxVbj4dvX5EviJHEFm53Sjz3NhjxN9JWkyrbLZ"},
{true, "12A189853B12301B5C1EE44CBEE0D55E6B26F1E71081BF183E0758AA0B12D613", "Kwqvj5qZ1DjFUsvMcv9RuPQXhZtgufVvLUFjsuHMHsJxNXwbeq7B"},
{true, "4A50D2D764CD71F53C46E8ADE4072B836AF479D61F044BAB674F9891A7CF2B9C", "KyiAsF3W44m8ViVEM576zyH3uYCDRdA2UC3vSXEjPFd5BDmYRSn5"},
{true, "31FFBCE29A031D36756862DC73D6693BFA16B8B5AD6208BFA1762ED69C546780", "KxtuHnJr14g88D9P3E7YJhtuJEhZBkd8K4n5hEw7UZ9igvk8fJZw"},
{true, "E1431EEDAE28F95AA118A2ED6E22E7B0FC2C8102DA3353253AFCA61922FCED8E", "L4mbErwWxVvBEqXNkjNLpCZ3FmnhbpSJRPMaMRyciB4mtcJTzoNs"},
{true, "0EEFC69066074D25BF10D3216B7FB239CCF26546F23E0A21A04864D1308A7FDD", "KwikCsh7M9Tct8VdTpiuuFPpfnpdnNLGp57ahkLd8VLVbKk8oCTA"},
{true, "A79675700A8CAFA792CE7A9EE34E00C3D525FCEBDBC0B672ECCBA8E41FF5F893", "L2qUmPJwHHWW23CuNP6EjiiGbrSd4vQQCJ8Yc51hdWsDMvLyH8xH"},
{true, "E9FB5173645F0216406621656DE0298BD30B791D3B66407208601150CE634743", "L54YKM6aHJsLphgKtW7TpqRsXHDKcyEKbzL2jFgLu33kYe3DbnEb"},
{true, "CBB0CB72C7CCECCC556A98BB315CD2E0C081D5F511E63307AE96066B45EE6EF7", "L43fATFuSvy41kdkb64ZTLGiE8v6LcmBMKZJVopjNmcZbUeJsyn8"},
{true, "AFC9CBA67612C3F81713A3F6C31666F9BE14B9A7D01F34F8BD77BDDC695FC559", "L37RL8Ej4mGH6djpzyyqCVHqKDynZzT4PWAi1REptAMtwGri5dWz"},
{true, "A0958A8C227C63F6B59E07C92EF4736B5928421AFAA0BB3F66FE9F63BF4B9B18", "L2bs9iKcmMe6zAWv4SeeLh38Qvy7sUS4QjLGrbUPdmWzUUojjXAm"},
{true, "626DCADA05D2E42E9A8536111377B2599921E141C460E3CDF320679E70F44CD5", "KzX3VSoXfmfpZSoJ1eZJNXN7ZyWHrDGyFDS8ijU4erv3nuCuDAcq"},
{true, "16636EADE672F2F017AF7DC19702B0283B11F165AF28A4A124EB646A849CABD0", "KwyEMQSEKCQsavPM9DQMKtuzePNLyCQiFnUEjrRaZAeVgSQV1cK3"},
{true, "BF9EEA8E1FECFD346A373B4764942CF24A4C2556B275533E8677349F648EAB39", "L3eCMevFTF2Y1vAAgZtDXeEhS3tbXEUhP7GqK8K6SJz841K9PdJ9"},
{true, "31E1CD0F0AFD2F0D3CDAB5A93C4D3A6D7325AB85CE1B8E19BC85D2DA24B7BF1B", "Kxtg75wieQU7uLoAepXJWeFEPiKeYBTfyWXhig3GrCpdwqkjS3xG"},
{true, "41B262F796EA5BBB831628CA5C096A132095B02EB162E98EBF48E793CD189A5A", "KyRR8mfa6EBh51CrMPyKu7dGXD1PJBP39p1RVx1ZXZZGEBK9WPAu"},
{true, "2696B062A21124FF591DDF5D12E571D4C2F5E184245F8864C23A2F83D9E39869", "KxWiqWYNkbHGyTveifUKvogNP93Ue9fKQSTrFZA8FgTiBRKz8ZRD"},
{true, "6595779A54F702CEB093283FC3C4D6E1D7392EE6C440B65E6C84607AAA8242A0", "KzdBCR1DdqvcvdyBjjfcLFs1PF7uEEN6Q3KWVncveDuREZGKrgyB"},
{true, "D4F787F445EE0CD071F3217B2F2B737914B9A89B1025C2EF6C164A5EC919E3E7", "L4Mh1uXJ1s9wMNWiFLKJkaNTxY6EpQyyPnyb5aWErjh25Ue3RgS6"},
{true, "051FADBF019E4C8B7CB98D09E5552C895BD550FFAD355D053F12A53436C54892", "KwPfrjHmFBD1P5kp8fNwr1tnMBYGTdx8YAXVCTx2UvFJ2qLN9HF1"},
{true, "F481188F452959F4F303AE6FD2FA82D1D4965DB6BB7C3BB2F7E0421A0DA94A61", "L5QzgHUvz6hc4BJqRxQktzrccsXKKmXu11SEhQkQEuiFH9LNiTLV"},
{true, "1373AEFE0C6D65F2B6028E0F0D454F7655978D527B75988D8FE46F7C07533ED2", "KwsXGzT2dHbrdJYnXdgT9CNJ7XyVUXbe1t5fsp2b71ueBaSLx8EW"},
{true, "EDD060D215A2BC712DF53A1855A518CACB05DE4C2DC2289E91C7BBED39078F62", "L5BzPD6E3twQZUpZpqkfZ1tVyVtcm9GzzaANHgBDUftKPwZyg8da"},
{true, "F7D16B49EDACB37280BA115E12481AF62129EF44E21E19C4312D04890215A92E", "L5XSHZXK15YNRPNkaQ9FBuNvocYsvGuRnRJUK16cZ53zxNeNcZsN"},
{true, "CADB673104097D4EB347CE606505D183AAD1C3369F9EFC449F1B0EFA6C9F5536", "L423BehThPNdnLogF63XxFku9p1Ps7cVsbbJnErczjGku3BpegUA"},
{true, "973058DDF336A984F528297F9B3885DF10C54BF0577B2C95E627536F7BFD5C76", "L2HbtFyW4mF3TmkDET9LxPFy4796uYC2dPKSHjbjGrFqqkgnGgiV"},
{true, "C71D26B6B96864E72CD22212C5F08A5877EBD6D7B32C626279192B9A42DE40AB", "L3tmAPkCNEY9vqsPGjHcXWH6gefSdQfWMBVYELaqixSeaBTPvest"},
{true, "B603A22FA952941A9C43CF6AA3AFA136BC7B18D1B3F1B11DA9F68D833DC8B394", "L3KXGaXnAK55XAiiZfB8i1o7Dnkg9CJD6Ct6qP9oL7EYFgsWGdYG"},
{true, "9B07D587C0652E22BD66464A852B32F89245E1A262003F3CA3D3C2AD03845610", "L2R527YGEjvoin3yDjFCetmrb5tk7DQRKtryAXQt7JPpm7EV13Xa"},
{true, "AA58EFE2B7D17A7B3D0DD004A7077FA224150DD90105B1AB6AD2621467D427AD", "L2vquReVBL85EAfUhGvBCN625k6cidYoMym6C5Dz5Ysrof2MfvGa"},
{true, "25F7578D84DA3ABAF19F32C4FFF3FF4E3B7F7A91FE1D065AD95D1AE737171103", "KxVWfCqMnBdLuRHWYqErgKP8GvZF1Mc3GebMBitCot2xCHG4QWmm"},
{true, "DB21A472CAF2395DFB90BA1B0B7F1C5395B0241A14A8A00512D40A72AF9D9997", "L4Zg2eAgDWPXGgzK5SV8fTiuVZwv6NrFyYLMdZ1wkzfyVYcUUeB9"},
{true, "73A613244DC72852462FC622C477A1A16D18907001DAC753BBF367F428243C1C", "L16Ww6uVNc7X2uoe8Q2hAvrj1YAwS7PgN6C7ZEmzSvBX8fnKZH6R"},
{true, "E2ED31137060C4AF839D0F8F8A16F3FCABB6AC3C13576A682D5E48F7CFCF7DF4", "L4pptGfQMBf9ddJBWZcVkvhzqmaKHTkBbvG4pdJR5ehr3XFKRd5J"},
{true, "76B52A3BA3FE88754BB1B5C4149051EA580E359BA78723AF1AB9410B78B02E5D", "L1CTp6DahyHbZCzGMorLngXTPrFrbzRZCdD1K5nWeRx4NyaFmMcw"},
{true, "FE17F5E1FDFE5A5911055F8EF18E91CD92029604B3831E9F2E3F0F0D56C6D240", "L5jdpWEy2juQpy9xfMuMVcrASCby1qYvwLahdFXqhXir8W9LNYtQ"},
{true, "9EF83D9357DCDD4CFFCF8D45B7A9357138D91545E7625A7A7B9E92FBFCE3BF50", "L2Yj8W621zB7Ce8cdVMMkakNH5cFEo91AYmG2qCMd6Wbx35RfcCs"},
{true, "4D7726C00DF920942E53A6BF415AB51ACB876B8D563062D4788643813B9C148A", "KypHyoZXW8ccWFU8soLgjYhRh9C2hicbTerJKvsSRDQDDmYRedLW"},
{true, "4458D5B378047CB91EAFD4186C99DB6E250366CB8679D6CB92B5D685E5FCAD27", "KyWZvpTbzpYH8wwrFv3mrzbNqZ7iJQBd2Wx8SXq3uVjm7ha4aiLv"},
{true, "05681656B32EF2E0C70C4D169323E9F90D3243B44138AF5A3A9665E50C7A862E", "KwQDkJuYVNegbsnLfro9yrgC5VyKSo62cjqNSEepe8QPX1Fb1LeL"},
{true, "F6FDF0819D2C13DCC36D8E5B6142781E3B105A7632FA69BB7E57871FA04DF6A5", "L5Vq9bffgd83iuntSLeUtjyBexRUiWFDQMWq6G5JucTecpyLorjN"},
{true, "DC334420701A03348AC0F1FCF8DAAEF03EED8817001EEE20FA3396F535AA152B", "L4bkXzYPcjMpSWvPad2bSuCMacaaAqahzxFfm1v3MPAdaJHy8c5H"},
{true, "5642965CD2A31DFF508A18D7B989F6679B4574EAD86952263D010469E6193A1F", "Kz7PXiNVFu9A29efUi9xxTEXRufMH8Nsy4ir5Tka8m7ktr7QdCsU"},
{true, "C48C699D079D6D67DD9A526D479C8600AF1043D6E77222A36091769D15829B1E", "L3omvtHNfkTzPQ7LZ1jFEUepv2hoBQHmFPQnFhFG9ykK9H7PxWMv"},
{true, "DCF8D1842CE5D8F677ECC5FDBD574C045C9BC556CD3F317D12CE92BB38D8699B", "L4dFYCdamisQ4LMP6Ecgrjs9RW8JjBnBHWo7cEJDD5aght5Mra3f"},
{true, "BD34245BB0823A07759774E5DD7D4EBF81627B0283EACF97B7A9DB9CAE039EC4", "L3ZVqu2vV7Vija6t8wkWzxq4Qywc48sFWmTjyJ6rqRGj3MDPy8Mf"},
{true, "9003BAA2CBF6F2C4E597900B2352F3B6EB99BB33F9CAB0744BF802FB0FDAE153", "L23f2KDWwzyVk48gBYLAhEFRKuzjqjsGSoHDUwD4CbAjCcPcoLoN"},
{true, "0E09E7EA9C77C5F780101F04E64EDDAF30E59F7E35C28E672AD283F65AEF4844", "KwgzyAKCoLQaDy5SJEVQGiurpzc7r1GqBAM94NX7ffAGMa7sE7ae"},
{true, "740F2F450BB23945A356052193B7C23F08C2D441D1473D31834B36B29A598FE8", "L17KDzZicxBFtaX4pVnfXtTqmp2WsagbQpabqmYKfrDwfzZuMV6R"},
// Random 90% bits set
{true, "EFFDFFFFF9EFFFFEDFFF7BFFDFDEE7BEFF3FFFFEFFEEFAEFFFFFFEFFFF6FBFFF", "L5GDxui6vnojkuMKbvTEu7NPh4ecbHHiu72zEhjYCvPZ5xt1hTZq"},
{true, "FEFFDDBFFAFFB9FF7DEBFBFDFEEEFDF5FEFEFFFFFBFFDFFFFFFBDF7FBFF72BFF", "L5mPxE3EDLKEo6k49gPg4ietQw471xh2CiLHRH47wchXcmpoVFZb"},
{true, "BFFF7FFFDFDDFFFBDFBEFFEFBB3BFFF7EBFFFFFFFEFFF7BB5FFFEDFFFF6FFFF0", "L3evtksiufo7KrPQJ1KVMK9jNEEN4nk2JSfMecASF8ntrwYhgzXA"},
{true, "FDFFFFEFDFFFFFFFFFFFFF7FFFFFEEEBD7FFFBF7DFDFFFEBFDFFEFFFFFF75DFF", "L5jTGTf1FLrSHDxZaDVd1fEUsBx53S6SRBHN8VzpNn3pY5LYTVjf"},
{true, "BFFFF7F7DFDFAFBBFBFFFFFFDF7BB6FF37F7FEF9FFFDFFFEFFFFFBF3FF9FEBFF", "L3ew6jAPYcgHkeo1QZqgUw2izzhi4ifhT3ffBhD8dz94iHvm3k4j"},
{true, "FFFFFFFBFFFF6FBFF7EFFFFFDFFFF3F7FFFDFFF3FFFFFFFFFFFDEDFDFF9FFF7B", "L5oLkpPoPgee3tB12Fh4wmmYCE1iuQpYWcyXEGq5SJeiuBvs37vd"},
{true, "EFF7FFFBFFBFFFBEB5FFFFE9FFFEFFF7FFFDFFEFFFE7FDEEFFFFFFF7F7FAFDD7", "L5GBKeRhRyMNFXnp751d8AM7wpup4rZ8B5d69KqR8xFLdT5RoC9T"},
{true, "FFFFFFFE7DFEFFE77FF9FFE7FFFFDF7DF7FCFFFFFFFFBFFFFFDFDFFFFEBAFFE7", "L5oLkpT4v92BZ3QvfPmBpL9AWkhn5KmJqZz7VBVapxqGD3xEJApq"},
{true, "EB7FFFEFF7FEF7BFF77FFDFFFCFFFBDFBFBFEBD67FFFFFFDFBFFFFFBB7FFFF7B", "L57VVhNKnX47fPNVTDdYwhZoexWUepwg2TQAeaVd8dzsLD3Mtnxt"},
{true, "4FEFF7FFFFFDFEFCFFFFEBFFFFFEFFF7FDBFFFFBCFEBFFFFDEDEFBCFFFFFFFDD", "Kyu6gGrw9ASMP1JiEw9MDcKPfRoq9t5fScigb6Z5vPsuVWMJtJym"},
{true, "FEFFFFFFEFF9BFFFFFF7FFDBFFFFEDFEFEFFEFF7FFFFDFFFF7FFFFFFD7FBFFFF", "L5mQ1eFWntJ5k9k7Xp7FmYuaJ7FvnknC5m49dNYba4xAxYezBWUe"},
{true, "FF7F777FFDFFFFFFEFFB7FFFFFFBEFFBFFE5FFEFFFD6FEEFEFCBF2FFDBFDFF7F", "L5nN9cQmh2S88AjkrLF2ZdmCy9eg7DCTx7cM48JejbMa6cGR9cUG"},
{true, "EFFFE76FBFFFF7F5FFFFFF7FDEF7F3FFFFFBFEFEFDFFFFFFFFF7DFFFF7FBFBF7", "L5GEoYctxkscwe7AkFuqhBUHBr7bqvxhjaef84sbgztEvqqFJ2Lb"},
{true, "FF6F5FEFFEFB3FFDDFBEFEFFBF6FFFDDFF3FFA77F7FA7FFDFFFFDEBFFFB7EFFF", "L5nF4ZXxPZva4piCdWHhttayp6qtcEjQYsebH4sYHcedUVTBqm8o"},
{true, "DB7EBDFFFFF7FEFF7BFFFF77FFBFB6FFFDFFDFFFFFFF7FF7F7FFFFFFDBFFE8FE", "L4aP2kXmBEa5cZEnNpjv7WsvfSQAF88hL5dpDrwhjD1uc29Qf82y"},
{true, "FFFFF5FFFDEFBFFFFEF7EFFFF6E9FFFFDF7CFFFFFF754FFF77DFF7BFFFFFF75F", "L5oLjpcSPMhqcRTECzVhoaUh7xeSWSoRabSjAvytc6DJonVN6y1b"},
{true, "F7FFFB7BFFFBEFFFFFFFFFF7FFFFFBDFBDBDEFFFFFBFFFFBFF6FDEEEFA7F5DFF", "L5XnnxVjyAei5QsfPbnH8hk3NeocpTX5J9YTzKhmFpGzSrZzJSwd"},
{true, "7FB7EFEFFFFFFBAFBBFEFEFFFDFFFEBFFDFFFDFFFFFFFEFFFBAFFFFFFF7DDFFF", "L1VyjVXnDAwSJpQUi4EpCATFvkf1nQizQp9S2cdkHnvhZnyKYV4r"},
{true, "FBFFFFFFDFFFFEFBFFEFEF7FFFDFFFFDFEFFFFDFDFEFFDFEFFFE7DFF3FB7DAFE", "L5fZn7Z5x5LGpLwqGo6Wk9mTzYyjozniRhWjvGkLxESoz7cVs32G"},
{true, "FD7FF6FFFF7FE7FBFDFFDFBFF77FDFFDFFF3BFFFFFE7FFD7FFFD7BBEFFEEFB7F", "L5iUsypV2eizXzvFFaNuMvkvQsmZ3nZTjDXyYAX6CHKfD2FFQmgX"},
};
for (const TestCase &tc : cases) {
assert(std::strlen(tc.hexadecimal) == 64);
Uint256 privKey;
std::uint8_t version;
bool ok = Base58Check::privateKeyFromBase58Check(tc.base58, privKey, &version);
if (ok) {
if (tc.success) {
assert(privKey == Uint256(tc.hexadecimal));
assert(version == 0x80);
} else
assert(version != 0x80);
} else
assert(!tc.success);
numTestCases++;
}
}
int main() {
testPublicAddressExport();
testPublicAddressImport();
testPrivateKeyExport();
testPrivateKeyImport();
std::printf("All %d test cases passed\n", numTestCases);
return EXIT_SUCCESS;
}