-
Notifications
You must be signed in to change notification settings - Fork 16
/
tests.cpp
executable file
·290 lines (273 loc) · 33.6 KB
/
tests.cpp
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
#include "sha1.hpp"
#include <stdio.h>
#include <stdlib.h>
#include <vector>
void example(){
const char *text = "quick brown fox jumps over the lazy dog";
char hex[SHA1_HEX_SIZE];
char base64[SHA1_BASE64_SIZE];
// constructor can be empty or take a const char*
sha1("The ")
// can be chained
// can add single chars
.add(text[0])
// number of bytes
.add(&text[1], 4)
// 0-terminated const char*
.add(&text[5])
// finalize must be called, otherwise the hash is not valid
// after that, no more bytes should be added
.finalize()
// print the hash in hexadecimal, 0-terminated
.print_hex(hex)
// print the hash in base64, 0-terminated
.print_base64(base64);
printf("SHA1(The quick brown fox jumps over the lazy dog)\n");
printf("\n");
printf("hexadecimal\n");
printf("calculated: %s\n", hex);
printf("expected : 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12\n");
printf("\n");
printf("base64 encoded\n");
printf("calculated: %s\n", base64);
printf("expected : L9ThxnotKPzthJ7hu3bnORuT6xI=\n");
}
void test(const char *expected, const char *text){
char hex[SHA1_HEX_SIZE];
sha1(text).finalize().print_hex(hex);
if (strcmp(expected, hex) != 0){
printf("hash of : %s\n", text);
printf("wrong hash : %s\n", hex);
printf("expected hash: %s\n", expected);
}
}
int main(){
example();
const char *expected = "c6e7d00fedc0ca6f41e7c96ca5ed6221486f947b";
// initialize with a-z one million times
std::vector<char> buf(26*1000*1000 + 1);
for (size_t i = 0; i < buf.size(); i++) buf[i] = 'a' + (i%26);
buf.back() = '\0';
sha1 s;
// chop up buf and feed it bite by bite
size_t offset = 0;
while (1){
size_t remaining = buf.size() - 1 - offset;
if (remaining == 0) break;
size_t n = rand() % 128;
if (n > remaining) n = remaining;
s.add(&buf[offset], n);
offset += n;
}
s.finalize();
char hex[SHA1_HEX_SIZE];
s.print_hex(hex);
if (strcmp(expected, hex) != 0){
printf("hash of a to z one million times\n");
printf("wrong hash : %s\n", hex);
printf("expected hash: %s\n", expected);
}
test("da39a3ee5e6b4b0d3255bfef95601890afd80709", "");
test("b6589fc6ab0dc82cf12099d1c2d40ab994e8410c", "0");
test("ddfe163345d338193ac2bdc183f8e9dcff904b43", "01");
test("c4a2d99bc28d236098a095277b7eb0718d6be068", "012");
test("c4b5c86bd577da3d93fea7c89cba61c78b48e589", "0123");
test("11904a4e8b77f6242e2d288705023adad00a9310", "01234");
test("fdf8bc5814536f66012884e146a8887a44709a56", "012345");
test("b7ed088190c204b31cd71484e6a1c538986b5f77", "0123456");
test("ccaa8d8dcc7d030cd6a6768db81f90d0ef976c3d", "01234567");
test("9a7149a5a7786bb368e06d08c5d77774eb43a49e", "012345678");
test("87acec17cd9dcd20a716cc2cf67417b71c8a7016", "0123456789");
test("7ed10e4a589c87f9e6a85c22e4b0c38ecf5f5059", "01234567890");
test("5dd23b67eb79211cfdddad518279291b117971d3", "012345678901");
test("d7c997c777b174bb05faa82799526f1263b4a6f4", "0123456789012");
test("5794c55bedd56eac910b954604a9c91ad692dfcb", "01234567890123");
test("fdafb605560ce388c0ce42c3ef74dc9e805241e0", "012345678901234");
test("92c983f5bc8e4014b029985ced72f4b18bb85250", "0123456789012345");
test("c5305240f34268ab8f182105f3878362f1a18096", "01234567890123456");
test("df0cb21a0a9e137e655b9e447769cfdc24198dc4", "012345678901234567");
test("78cf0cbca6d5179496f9b939fb176e5ac7d7cc47", "0123456789012345678");
test("88a7b59d2e9172960b72b65f7839b9da2453f3e9", "01234567890123456789");
test("c042bdfc4bc5516ec716afe9e85c173b614ff9f5", "012345678901234567890");
test("4022f4ef909db734f6c6df393b51a0a34cc2edee", "0123456789012345678901");
test("35d8a16674aca2a013b5e4a84ee2ae4e0fa8fdd2", "01234567890123456789012");
test("97dff27b3af19d4c059b95cd7b7893a76851558a", "012345678901234567890123");
test("716d1cc96ee3663cb293a397119934ec8d7b578c", "0123456789012345678901234");
test("cb272e4bd9b5595921cfd80acd882a4d92bfa042", "01234567890123456789012345");
test("9399a9ed70fef6327beae2687582499772cc7b6f", "012345678901234567890123456");
test("f75b84ff9bf056fd65d7e4b80dfb83400a440952", "0123456789012345678901234567");
test("98cb68cb805366b3fdeda05109b61973795fc0d8", "01234567890123456789012345678");
test("8d3a014000038725d6daf8771b42a0784253688f", "012345678901234567890123456789");
test("a4a443429994d919eaf17308f41237ec3906cb6f", "0123456789012345678901234567890");
test("f130c02f55c5c7aabfe51907e4065a7426b52b66", "01234567890123456789012345678901");
test("8ceb248e295234b117739b601034cdf3a09e5297", "012345678901234567890123456789012");
test("75fc947815253a37de53e68ac9e38f8ce536a7d6", "0123456789012345678901234567890123");
test("ea87d71e91a1d39308ab8eabbac7bfbf8a145d68", "01234567890123456789012345678901234");
test("2a4805602add8379ffeef1f25a6388ac3426ceef", "012345678901234567890123456789012345");
test("f04302e7fd023c6b364e898012e56795de8bf1b1", "0123456789012345678901234567890123456");
test("e5dd33b926c9221a867c7b93800892e8180786b6", "01234567890123456789012345678901234567");
test("f538976e0bc42b17dcf6dd1d0532c4d9fb3e3bfa", "012345678901234567890123456789012345678");
test("394f28745cc4992d8d43dd5f788c3366535226e3", "0123456789012345678901234567890123456789");
test("b23af0b62c100a70c86c2b0d74af2a1d018e103b", "01234567890123456789012345678901234567890");
test("7738f063fce0cda36591c9d5611275287bf4a937", "012345678901234567890123456789012345678901");
test("0f2270ff9ec4c46ca34768aef2dbe6e4eb3852cd", "0123456789012345678901234567890123456789012");
test("2bbca77da40d90a6a2fef49eb0800e4753c579c5", "01234567890123456789012345678901234567890123");
test("71fe431264bf6c8866d775856e9a349b40545ea2", "012345678901234567890123456789012345678901234");
test("d0cca71abd92bf473ed412bfbb6299c24b72d239", "0123456789012345678901234567890123456789012345");
test("157b288e3307ebc2b955ea1794ba6e6f79a50f97", "01234567890123456789012345678901234567890123456");
test("fd9eed2587b61940c25c0eb62d1fe45dc63caf11", "012345678901234567890123456789012345678901234567");
test("ef4e9839b0aaa81a3c79c9992859b9b4cc3bf4a6", "0123456789012345678901234567890123456789012345678");
test("9578f951955d37f20b601c26591e260c1e5389bf", "01234567890123456789012345678901234567890123456789");
test("dae077f0a9dbf13cea96b974296240d08523303f", "012345678901234567890123456789012345678901234567890");
test("9cc716849d74f7206d9e5b8d33be88ed0d6df7c2", "0123456789012345678901234567890123456789012345678901");
test("22fe4bee50d7a75cda02c2e457f4cf667325615a", "01234567890123456789012345678901234567890123456789012");
test("6d9fbf872b4e22afee77d8c9e95c10ec03bc731d", "012345678901234567890123456789012345678901234567890123");
test("9f3a4ce7f66b1b74c34da2c5d732c39f81e0f8df", "0123456789012345678901234567890123456789012345678901234");
test("0a40b8fbdaafb7c29651618ac15d27e772287130", "01234567890123456789012345678901234567890123456789012345");
test("46cc79601f8c6b81a4180774ce08465987a225a7", "012345678901234567890123456789012345678901234567890123456");
test("b2aac732d817277777547d2f067df99bb1b5c5ee", "0123456789012345678901234567890123456789012345678901234567");
test("beb7f3acc8e5c80ad813fb013406b58b0dc821ee", "01234567890123456789012345678901234567890123456789012345678");
test("f52e3c2732de7bea28f216d877d78dae1aa1ac6a", "012345678901234567890123456789012345678901234567890123456789");
test("2a1fc3a0fb3d5a6aac17068f5e12e3989269d221", "0123456789012345678901234567890123456789012345678901234567890");
test("bfbe32d71cb46704d9e185cb6b1e42e1b0965635", "01234567890123456789012345678901234567890123456789012345678901");
test("984b0f2f6d78c24020f5a79d409f67ab99302891", "012345678901234567890123456789012345678901234567890123456789012");
test("cf0800f7644ace3cb4c3fa33388d3ba0ea3c8b6e", "0123456789012345678901234567890123456789012345678901234567890123");
test("92de3a8444fe6d15268f0ba810aa43bc8b3a4ffe", "01234567890123456789012345678901234567890123456789012345678901234");
test("54af28647b3c9f53d5c20b2b7877062eb69a4675", "012345678901234567890123456789012345678901234567890123456789012345");
test("53ef4fee648e2620abbb4287c31bb4e4629e560e", "0123456789012345678901234567890123456789012345678901234567890123456");
test("dddd45743100560058ac6ca752ef6ff4c379772a", "01234567890123456789012345678901234567890123456789012345678901234567");
test("a2e97df299f4a8fd21cf7f6f56cfc770d1c66fa9", "012345678901234567890123456789012345678901234567890123456789012345678");
test("194522b2bdb1f1838a2d2d24a248202001ac6838", "0123456789012345678901234567890123456789012345678901234567890123456789");
test("e1ad0e5174396327d40f91d4c5bacd0033c3072e", "01234567890123456789012345678901234567890123456789012345678901234567890");
test("bfdc7df2fd0d6d92f597a3024d128f77f8d89fb0", "012345678901234567890123456789012345678901234567890123456789012345678901");
test("a202605bf81934009272906da112f69d1c2be142", "0123456789012345678901234567890123456789012345678901234567890123456789012");
test("bc99c038e3114e496fd8016a9d5933d47b2cf561", "01234567890123456789012345678901234567890123456789012345678901234567890123");
test("f5dea62d7d357806d10e64591336bc6e8db7f790", "012345678901234567890123456789012345678901234567890123456789012345678901234");
test("6bf737aa823edde42715358b3b48cc7842f715de", "0123456789012345678901234567890123456789012345678901234567890123456789012345");
test("31a3ffe4b82de406cf545487a41c9a53cfd683aa", "01234567890123456789012345678901234567890123456789012345678901234567890123456");
test("83aa7d00486df86c2f576c5fe4fec87632e12550", "012345678901234567890123456789012345678901234567890123456789012345678901234567");
test("ed9971c8c0c9c9fc0df927d7a1c0dcda4c7bfab4", "0123456789012345678901234567890123456789012345678901234567890123456789012345678");
test("db9d100073836c9651690af5a74192fe6af1a2b6", "01234567890123456789012345678901234567890123456789012345678901234567890123456789");
test("af21ea1fb66d360e9af9215dd79bf042a7d3c4c3", "012345678901234567890123456789012345678901234567890123456789012345678901234567890");
test("daa9055e30e0ac793ab26219c0c96384d24620e0", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901");
test("535ecb0c55845b4511d1c6e9eae2882b54f24cf2", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012");
test("5d89e66fcf7c18c7bfa9f4436581d2f32c05fa65", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123");
test("bfa25e996b63a9c66107597e4e454f832e86ae9a", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234");
test("9485166e46f56c37f3d321a1c14edbb4fcb2f380", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345");
test("e28f7abffce26b4c5a3948e03ecc9d7a8b0849d2", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456");
test("1dbc8272e59a7ae0d23b1c8ac4c7622dc83db81c", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567");
test("5ce421bf46d36fc9930585035ecc3b561ee7e77e", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678");
test("ea9f7600338ef6a81464fa0069bc88f4c1739c6e", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
test("410bf36a9b7b9593449df6e7c027f02e74471e85", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
test("e47de516a93712d309cb30b9b62a7f4a86bc8a90", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901");
test("a900f6c3109457f1919abc4488282d000509e7f1", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012");
test("a3fb8a6dd832fa28d9add2935561514d970733d2", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123");
test("7c7ea520bbfedf65eceebd614a9b8db7af1dd12f", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234");
test("458e86651fb11eda7455c99cc54ea2a1b640ecc4", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345");
test("39c884b5f6da6ae92e9c4ee109c6ec2f919dc2a5", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456");
test("ff28360d83456591a20c120bf325a34335fcbe37", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567");
test("643cf391cb8e7f491450405d94c37406c6425cee", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678");
test("29b0e7878271645fffb7eec7db4a7473a1c00bc1", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
test("6ce23745496cc6010c0c1e4ddf50c0cdef4429b7", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
test("5fd0236b530241648c892d021b0b9eae3934e703", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901");
test("040c239299962f9ba9a2c49eeba83d0b2822d3bd", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012");
test("4bb37e4e7830a0036b15eff5115feada050de0c6", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123");
test("44bab42e663b5b995b064f117a47b392a15bad68", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234");
test("917bb3feb964a1adf0ede55f916fcdec8166b4ad", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345");
test("c769d6a29f509b04d3a4c472000dbddad3b5a0aa", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456");
test("516beb27b5ef80d14a96795f58847eaaba9f6b47", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567");
test("07409e0f588b63ce3edc9625e559957efc00bf75", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678");
test("f6c5f2a2b96f194753c284bc48ba226cb89d999c", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
test("a27050579f85a9ed7b10d1c944983738fec3264c", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
test("5cd1b92c320c61d263059de94e38faffb0ed5c82", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901");
test("ba41a2b4f82e0b098c731e8b7014d8ecbad057cb", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012");
test("70488b2e6f4bc8765c3e9885ba117e94d55d4524", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123");
test("fb169498dee9eff794f0552e6eb27816948f11d4", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234");
test("488e795a87838023b3ded98f3f83d4253d300891", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345");
test("7fefc7c1e19b51e361bf455aee710ac2d01bc52c", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456");
test("35cd557f12b2963d137ee01a6a73559706f8addd", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567");
test("d1ba16c5f745875597b6d0b9061f30b5a5c89092", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678");
test("deb4cf0a6f315d8403e5eff0923a8c5c52f21ac8", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
test("e761ce32f7e755327ef8baece7794f74111dabc8", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
test("3db9f8f6e00dab4cf624f1e621045d17fbaa1edf", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901");
test("c2e14d86d63a7a24992248adc53382ef2a917d6f", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012");
test("b15ce0d32ea5935adb0caa834bd147b89e7892fa", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123");
test("ca5d18cd4f943172081d4cddaef1c13ebbd0740d", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234");
test("3b45c5a802132ffa8a2498e0b8006da0473d68a3", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345");
test("37209e395c65a99a396343f89d79aa2e1687d04f", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456");
test("b5d36071c0845df9e0727b58ec97d2796f3312d0", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567");
test("fa7ae2ca89e50d623789f6598a8666fbd3172b5a", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678");
test("032a5a330784f785f551d399c6d72e3f5104d7de", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
test("a18aed11301304e5c9e9d58f2c1b309615bb476b", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
test("6ffd982e442106354682955637535fa902d16556", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901");
test("86852ae876cbc9e436fb0e587c172981dfd7e027", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012");
test("6b8e11ea7de950237cf879f7d58a33fd7e9618d1", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123");
test("e9b81c9e2d667067280ea1f21c2658a341c0ab38", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234");
test("3eecfa32a912b1ebc7dec950a3e357f921d462c3", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345");
test("31a891a2c206d4ed38c0bb9cc1b720401999c539", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456");
test("bc6616e23a175f59d48ad4ef5ea16ab2b04bb3eb", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567");
test("faeb47f27bfdba35e125ac3aa294dfe746b667b2", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678");
test("71018ffa005fb3665d73c55013bce9f09762d316", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
test("ee7b878e5de02bc911085b82183da16b9d42af3b", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
test("ef56fb0b322ce8c78f8e0749643bd4939ec3d432", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901");
test("f2d528c2dac73a6f3ad038c8cfd62006f5b4e562", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012");
test("7afe0b858b4b28bc9afe81d1c8a33b850e5d665a", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123");
test("c4ac18ff6a6dfcd8ce7c207c0e0e4948ca6a4d12", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234");
test("990b688e193b247c82d6e115860e7a157df10403", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345");
test("85d1a4e580bfc64680d750fdafbf7ad4f717a65e", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456");
test("6b37a4237a606f1d7fa77ee25c541a2ad07acab1", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567");
test("de6eaa9d53b7052230409cb1fd393bbd8203e36f", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678");
test("a4946ea4e9b5398dc55e18e2b40b918f18124aa8", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
test("cb35d549afc89dd26bb9dc00aeb22e960eb70ad3", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
test("f8901f5587d19ae1b79c12b3614c95bf554f5cf7", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901");
test("4ce4e4bfda66291e029e560b081a9cf08f60286f", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012");
test("498391534f3fe5f1773c207cd0174184c50646c6", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123");
test("d97192fa2f158c900757704ae079f3c969745552", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234");
test("a188fa504b3cd165703cf2f9084efbb4faad7d18", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345");
test("2f015727e287b84b226e38624066087108d4eaaf", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456");
test("ba6da0f7e744334041e348bd1b69fa5a7e638253", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567");
test("e60dca0c61a32da474383adb3e066d03140faff7", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678");
test("d90b4f481a50147bbf8b547c66834dee35b76878", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
test("7fc57ab579c05c2adfb4e4eae5e8c7dc00bd838d", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
test("a2cb22ed7ef05308bb54a2ddf6e030bae0b58381", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901");
test("d536a5b32e01c5b925647ed9eae38fa266886e63", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012");
test("360da2cbb632ddd4fe911753272f0e0632f68211", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123");
test("2f8b175026885726ca8a5fc1237c8b02159366a8", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234");
test("2436bb42a9258ce2503256837b38e786866ea5fd", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345");
test("67cae10e467ae198a38dce28174b3491a93ba91f", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456");
test("8983f5f26bb1fc8c6e941af38869e2f69821586e", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567");
test("36ce3220f0fbdb6cb47f59a74499b2ec336f9ce1", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678");
test("b57a01ffea524404634c0637b43593f6aeb53349", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
test("f42c4d0d2203398250bb0f6c272b7a87f64c18e9", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
test("26fc551c877654a28f3192a862e77b74e12b7802", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901");
test("834f973160cb8b06cf87789aa4ad2e496bad68ae", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012");
test("b2e9384fbab0b8134d73c042c80065b6cd97480f", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123");
test("062b0eefc72fd62840e6e17a549c77d1e0ab2d3a", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234");
test("ba776b484de83eabaddf64efbcc97c310b52ffc7", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345");
test("52c3090e356c107e6750132aa6b4a572ff41cfe3", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456");
test("d428b60ae0a223bb35818d2217c2196495e41dcb", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567");
test("22b0c040e83e1668fc5ff49dfc7130dee0403fe2", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678");
test("a04f45f66320a16cd022a43c322863300c0247ed", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
test("2f6fdf9c26e8d80445c48560838b574b3fe1e33d", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
test("486dcad90b2a3aa5cdd6cb0bbbc2c7e1e519784a", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901");
test("c3365a04f752e53c16b73a5940dad1552f928efb", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012");
test("91e35c7ad1a88e570bab78a835c645010d356038", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123");
test("277f03164fe38c4495aae66dc34460e1c56e0e2e", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234");
test("397623347a4bbf39c2189790640d09a4d2d8bfcd", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345");
test("455df42e4d8269910fa8e9d5fb46e97504735d71", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456");
test("22c3a0acdd65d83b53ca438738a741210898202c", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567");
test("371a172b1848139eb6beae7c073c43f1d77971f5", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678");
test("1dc19bb1f658aea884386ddb7ca92ee5628652c2", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
test("a066ec64586ad46313c0aa4c17ef6e30c1735ce4", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
test("ab1c652e2dfe40711f019463c7ea24743d656283", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901");
test("a9da06a31ff9eda8dcc20b414fa32203cd9233bb", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012");
test("e09d50f4a87d2cb029fd1e3333ad0e03d5027a98", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123");
test("7abd484d97a1eb72bdb95db678402a5debf18b3d", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234");
test("e2f251aec5c8fe93ea578a9d2755d301362406df", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345");
test("5cad74b85ded5349e1cd205129a79fbe5b7d9165", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456");
test("c2c6742eb079bb4e6c9fc029a70a8762b951d9e4", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567");
test("d86545d8fda1830291e0e2bb99a18d9397eaf623", "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678");
test("efeeb70467c1ca141619c954c2a0e699bd1f16a5", "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
test("5ce8b95a99c74f70641b91c4b5b7de139aaad098", "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
return 0;
}