20 #include <ripple/protocol/PublicKey.h>
21 #include <ripple/protocol/SecretKey.h>
22 #include <ripple/beast/unit_test.h>
32 template <
class FwdIter,
class Container>
43 for (
int i = 0; i < 10; ++i)
45 for (
int i = 0; i < 6; ++i)
51 int operator[] (
int i)
61 auto const hi (lut[(*first++)]);
62 auto const lo (lut[(*first++)]);
63 out.push_back ((hi*16)+lo);
76 check (boost::optional<ECDSACanonicality> answer,
85 testcase (
"Canonical");
90 "022100FF478110D1D4294471EC76E0157540C2181F47DEBD25D7F9E7DDCCCD47EEE905"
91 "0220078F07CDAE6C240855D084AD91D1479609533C147C93B0AEF19BC9724D003F28"));
94 "0221009218248292F1762D8A51BE80F8A7F2CD288D810CE781D5955700DA1684DF1D2D"
95 "022041A1EE1746BFD72C9760CC93A7AAA8047D52C8833A03A20EAAE92EA19717B454"));
98 "02206A9E43775F73B6D1EC420E4DDD222A80D4C6DF5D1BEECC431A91B63C928B7581"
99 "022023E9CC2D61DDA6F73EAA6BCB12688BEB0F434769276B3127E4044ED895C9D96B"));
102 "022056E720007221F3CD4EFBB6352741D8E5A0968D48D8D032C2FBC4F6304AD1D04E"
103 "02201F39EB392C20D7801C3E8D81D487E742FA84A1665E923225BD6323847C71879F"));
106 "022100FDFD5AD05518CEA0017A2DCB5C4DF61E7C73B6D3A38E7AE93210A1564E8C2F12"
107 "0220214FF061CCC123C81D0BB9D0EDEA04CD40D96BF1425D311DA62A7096BB18EA18"));
112 "022100F477B3FA6F31C7CB3A0D1AD94A231FDD24B8D78862EE334CEA7CD08F6CBC0A1B"
113 "022100928E6BCF1ED2684679730C5414AEC48FD62282B090041C41453C1D064AF597A1"));
116 "022063E7C7CA93CB2400E413A342C027D00665F8BAB9C22EF0A7B8AE3AAF092230B6"
117 "0221008F2E8BB7D09521ABBC277717B14B93170AE6465C5A1B36561099319C4BEB254C"));
120 "02210099DCA1188663DDEA506A06A7B20C2B7D8C26AFF41DECE69D6C5F7C967D32625F"
121 "022100897658A6B1F9EEE5D140D7A332DA0BD73BB98974EA53F6201B01C1B594F286EA"));
124 "02200855DE366E4E323AA2CE2A25674401A7D11F72EC432770D07F7B57DF7387AEC0"
125 "022100DA4C6ADDEA14888858DE2AC5B91ED9050D6972BB388DEF582628CEE32869AE35"));
134 "02203932c892e2e550f3af8ee4ce9c215a87f9bb831dcac87b2838e2c2eaa891df0c"
135 "022030b61dd36543125d56b9f9f3a1f53189e5af33cdda8d77a5209aec03978fa001"));
138 "0220076045be6f9eca28ff1ec606b833d0b87e70b2a630f5e3a496b110967a40f90a"
139 "0221008fffd599910eefe00bc803c688eca1d2ba7f6b180620eaa03488e6585db6ba01"));
142 "022100876045be6f9eca28ff1ec606b833d0b87e70b2a630f5e3a496b110967a40f90a"
143 "0221008fffd599910eefe00bc803c688c2eca1d2ba7f6b180620eaa03488e6585db6ba"));
145 BEAST_EXPECT(
check(boost::none,
149 BEAST_EXPECT(
check(boost::none,
153 BEAST_EXPECT(
check(boost::none,
157 BEAST_EXPECT(
check(boost::none,
161 BEAST_EXPECT(
check(boost::none,
165 BEAST_EXPECT(
check(boost::none,
169 BEAST_EXPECT(
check(boost::none,
173 BEAST_EXPECT(
check(boost::none,
177 BEAST_EXPECT(
check(boost::none,
179 "0221005990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba6105"
180 "022200002d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed"));
181 BEAST_EXPECT(
check(boost::none,
183 "02205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba6105"
184 "02202d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed"));
185 BEAST_EXPECT(
check(boost::none,
187 "02205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba6105"
188 "02202d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed"));
189 BEAST_EXPECT(
check(boost::none,
191 "01205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1"));
192 BEAST_EXPECT(
check(boost::none,
194 "02205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba6105"
195 "02202d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed00"));
196 BEAST_EXPECT(
check(boost::none,
198 "01205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba6105"
199 "02202d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed"));
200 BEAST_EXPECT(
check(boost::none,
203 "02202d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed"));
204 BEAST_EXPECT(
check(boost::none,
206 "02208990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba6105"
207 "02202d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed"));
208 BEAST_EXPECT(
check(boost::none,
210 "0221005990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba6105"
211 "02202d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed"));
212 BEAST_EXPECT(
check(boost::none,
214 "02205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba6105012"
215 "02d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed"));
216 BEAST_EXPECT(
check(boost::none,
218 "02205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba6105"
220 BEAST_EXPECT(
check(boost::none,
222 "02205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba6105"
223 "0220fd5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed"));
224 BEAST_EXPECT(
check(boost::none,
226 "02205990e0584b2b238e1dfaad8d6ed69ecc1a4a13ac85fc0b31d0df395eb1ba6105"
227 "0221002d5876262c288beb511d061691bf26777344b702b00f8fe28621fe4e566695ed"));
252 s.erase (r(s) % s.size(), 1);
261 s.resize (s.size() + i, s[i % s.size()]);
298 BEAST_EXPECT(!si.empty());
300 auto const ski = parseBase58<PublicKey> (
302 BEAST_EXPECT(ski && (keys[i] == *ski));
306 BEAST_EXPECT((keys[i] == keys[j]) == (i == j));
312 BEAST_EXPECT((si == sj) == (i == j));
314 auto const skj = parseBase58<PublicKey> (
316 BEAST_EXPECT(skj && (keys[j] == *skj));
318 BEAST_EXPECT((*ski == *skj) == (i == j));
325 testcase (
"Base58: secp256k1");
334 auto const pk2 = parseBase58<PublicKey> (
336 "n94a1u4jAz288pZLtw6yFWVbi89YamiC6JBXPVUj5zmExe5fTVg9");
339 BEAST_EXPECT(pk1 == *pk2);
344 testcase (
"Base58: ed25519");
353 auto const pk2 = parseBase58<PublicKey> (
355 "nHUeeJCSY2dM71oxM8Cgjouf5ekTuev2mwDpc374aLMxzDLXNmjf");
358 BEAST_EXPECT(pk1 == *pk2);
366 testcase (
"Miscellaneous operations");
375 BEAST_EXPECT(pk1 == pk2);
376 BEAST_EXPECT(pk2 == pk1);
380 BEAST_EXPECT(pk3 == pk2);
381 BEAST_EXPECT(pk1 == pk3);