Mercurial > projects > ldc
comparison tango/tango/io/digest/Tiger.d @ 132:1700239cab2e trunk
[svn r136] MAJOR UNSTABLE UPDATE!!!
Initial commit after moving to Tango instead of Phobos.
Lots of bugfixes...
This build is not suitable for most things.
author | lindquist |
---|---|
date | Fri, 11 Jan 2008 17:57:40 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
131:5825d48b27d1 | 132:1700239cab2e |
---|---|
1 /******************************************************************************* | |
2 | |
3 copyright: Copyright (c) 2006 Tango. All rights reserved | |
4 | |
5 license: BSD style: see doc/license.txt for details | |
6 | |
7 version: Initial release: Feb 2006 | |
8 | |
9 author: Regan Heath, Oskar Linde | |
10 | |
11 This module implements the Tiger algorithm by Ross Anderson and Eli | |
12 Biham. | |
13 | |
14 *******************************************************************************/ | |
15 | |
16 module tango.io.digest.Tiger; | |
17 | |
18 private import tango.core.ByteSwap; | |
19 | |
20 private import tango.io.digest.MerkleDamgard; | |
21 | |
22 public import tango.io.digest.Digest; | |
23 | |
24 /******************************************************************************* | |
25 | |
26 *******************************************************************************/ | |
27 | |
28 final class Tiger : MerkleDamgard | |
29 { | |
30 private ulong[3] context; | |
31 private uint npass = 3; | |
32 private const uint padChar = 0x01; | |
33 | |
34 /*********************************************************************** | |
35 | |
36 ***********************************************************************/ | |
37 | |
38 private static const ulong[3] initial = | |
39 [ | |
40 0x0123456789ABCDEF, | |
41 0xFEDCBA9876543210, | |
42 0xF096A5B4C3B2E187 | |
43 ]; | |
44 | |
45 /*********************************************************************** | |
46 | |
47 Construct an Tiger | |
48 | |
49 ***********************************************************************/ | |
50 | |
51 this() { } | |
52 | |
53 /*********************************************************************** | |
54 | |
55 The size of a tiger digest is 24 bytes | |
56 | |
57 ***********************************************************************/ | |
58 | |
59 override uint digestSize() {return 24;} | |
60 | |
61 | |
62 /*********************************************************************** | |
63 | |
64 Initialize the cipher | |
65 | |
66 Remarks: | |
67 Returns the cipher state to it's initial value | |
68 | |
69 ***********************************************************************/ | |
70 | |
71 override void reset() | |
72 { | |
73 super.reset(); | |
74 context[] = initial[]; | |
75 } | |
76 | |
77 /*********************************************************************** | |
78 | |
79 Obtain the digest | |
80 | |
81 Returns: | |
82 the digest | |
83 | |
84 Remarks: | |
85 Returns a digest of the current cipher state, this may be the | |
86 final digest, or a digest of the state between calls to update() | |
87 | |
88 ***********************************************************************/ | |
89 | |
90 override void createDigest(ubyte[] buf) | |
91 { | |
92 version (LittleEndian) | |
93 ByteSwap.swap64 (context.ptr, context.length * ulong.sizeof); | |
94 buf[] = cast(ubyte[]) context; | |
95 } | |
96 | |
97 /*********************************************************************** | |
98 | |
99 Get the number of passes being performed | |
100 | |
101 Returns: | |
102 the number of passes | |
103 | |
104 Remarks: | |
105 The Tiger algorithm may perform an arbitrary number of passes | |
106 the minimum recommended number is 3 and this number should be | |
107 quite secure however the "ultra-cautious" may wish to increase | |
108 this number. | |
109 | |
110 ***********************************************************************/ | |
111 | |
112 uint passes() | |
113 { | |
114 return npass; | |
115 } | |
116 | |
117 /*********************************************************************** | |
118 | |
119 Set the number of passes to be performed | |
120 | |
121 Params: | |
122 n = the number of passes to perform | |
123 | |
124 Remarks: | |
125 The Tiger algorithm may perform an arbitrary number of passes | |
126 the minimum recommended number is 3 and this number should be | |
127 quite secure however the "ultra-cautious" may wish to increase | |
128 this number. | |
129 | |
130 ***********************************************************************/ | |
131 | |
132 void passes(uint n) | |
133 { | |
134 if (n < 3) return ; | |
135 npass = n; | |
136 } | |
137 | |
138 /*********************************************************************** | |
139 | |
140 block size | |
141 | |
142 Returns: | |
143 the block size | |
144 | |
145 Remarks: | |
146 Specifies the size (in bytes) of the block of data to pass to | |
147 each call to transform(). For Tiger the blockSize is 64. | |
148 | |
149 ***********************************************************************/ | |
150 | |
151 protected override uint blockSize() { return 64; } | |
152 | |
153 /*********************************************************************** | |
154 | |
155 Length padding size | |
156 | |
157 Returns: | |
158 the length padding size | |
159 | |
160 Remarks: | |
161 Specifies the size (in bytes) of the padding which uses the | |
162 length of the data which has been ciphered, this padding is | |
163 carried out by the padLength method. For Tiger the addSize is 8. | |
164 | |
165 ***********************************************************************/ | |
166 | |
167 protected uint addSize() { return 8; } | |
168 | |
169 /*********************************************************************** | |
170 | |
171 Pads the cipher data | |
172 | |
173 Params: | |
174 data = a slice of the cipher buffer to fill with padding | |
175 | |
176 Remarks: | |
177 Fills the passed buffer slice with the appropriate padding for | |
178 the final call to transform(). This padding will fill the cipher | |
179 buffer up to blockSize()-addSize(). | |
180 | |
181 ***********************************************************************/ | |
182 | |
183 protected override void padMessage(ubyte[] at) | |
184 { | |
185 at[0] = padChar; | |
186 at[1..at.length] = 0; | |
187 } | |
188 | |
189 /*********************************************************************** | |
190 | |
191 Performs the length padding | |
192 | |
193 Params: | |
194 data = the slice of the cipher buffer to fill with padding | |
195 length = the length of the data which has been ciphered | |
196 | |
197 Remarks: | |
198 Fills the passed buffer slice with addSize() bytes of padding | |
199 based on the length in bytes of the input data which has been | |
200 ciphered. | |
201 | |
202 ***********************************************************************/ | |
203 | |
204 protected override void padLength(ubyte[] at, ulong length) | |
205 { | |
206 length <<= 3; | |
207 littleEndian64((cast(ubyte*)&length)[0..8],cast(ulong[]) at); | |
208 } | |
209 | |
210 /*********************************************************************** | |
211 | |
212 Performs the cipher on a block of data | |
213 | |
214 Params: | |
215 data = the block of data to cipher | |
216 | |
217 Remarks: | |
218 The actual cipher algorithm is carried out by this method on | |
219 the passed block of data. This method is called for every | |
220 blockSize() bytes of input data and once more with the remaining | |
221 data padded to blockSize(). | |
222 | |
223 ***********************************************************************/ | |
224 | |
225 protected override void transform(ubyte[] input) | |
226 { | |
227 ulong tmpa,a,b,c; | |
228 ulong[8] x; | |
229 uint i; | |
230 | |
231 littleEndian64(input,x); | |
232 | |
233 a = context[0]; | |
234 b = context[1]; | |
235 c = context[2]; | |
236 | |
237 for(i = 0; i < npass; i++) { | |
238 if (i > 0) keySchedule(x); | |
239 pass(a,b,c,x,(i==0)?5:(i==1)?7:9); | |
240 tmpa = a; a = c; c = b; b = tmpa; | |
241 } | |
242 | |
243 context[0] = a ^ context[0]; | |
244 context[1] = b - context[1]; | |
245 context[2] = c + context[2]; | |
246 | |
247 x[] = 0; | |
248 } | |
249 | |
250 /*********************************************************************** | |
251 | |
252 ***********************************************************************/ | |
253 | |
254 private static ubyte getByte(ulong c, uint b1, uint b2 = 0) | |
255 { | |
256 return cast(ubyte) (c >> (b1*8) >> (b2*8)); | |
257 } | |
258 | |
259 /*********************************************************************** | |
260 | |
261 ***********************************************************************/ | |
262 | |
263 private static void round(inout ulong a, inout ulong b, inout ulong c, ulong x, ulong mul) | |
264 { | |
265 c ^= x; | |
266 a -= t1[getByte(c,0)] ^ t2[getByte(c,2)] ^ t3[getByte(c,4)] ^ t4[getByte(c,4,2)]; | |
267 b += t4[getByte(c,1)] ^ t3[getByte(c,3)] ^ t2[getByte(c,4,1)] ^ t1[getByte(c,4,3)]; | |
268 b *= mul; | |
269 } | |
270 | |
271 /*********************************************************************** | |
272 | |
273 ***********************************************************************/ | |
274 | |
275 private static void pass(inout ulong a, inout ulong b, inout ulong c, ulong[8] x, ulong mul) | |
276 { | |
277 round(a,b,c,x[0],mul); | |
278 round(b,c,a,x[1],mul); | |
279 round(c,a,b,x[2],mul); | |
280 round(a,b,c,x[3],mul); | |
281 round(b,c,a,x[4],mul); | |
282 round(c,a,b,x[5],mul); | |
283 round(a,b,c,x[6],mul); | |
284 round(b,c,a,x[7],mul); | |
285 } | |
286 | |
287 /*********************************************************************** | |
288 | |
289 ***********************************************************************/ | |
290 | |
291 private static void keySchedule(ulong[8] x) | |
292 { | |
293 x[0] -= x[7] ^ 0xA5A5A5A5A5A5A5A5; | |
294 x[1] ^= x[0]; | |
295 x[2] += x[1]; | |
296 x[3] -= x[2] ^ ((~x[1])<<19); | |
297 x[4] ^= x[3]; | |
298 x[5] += x[4]; | |
299 x[6] -= x[5] ^ ((~x[4])>>23); | |
300 x[7] ^= x[6]; | |
301 x[0] += x[7]; | |
302 x[1] -= x[0] ^ ((~x[7])<<19); | |
303 x[2] ^= x[1]; | |
304 x[3] += x[2]; | |
305 x[4] -= x[3] ^ ((~x[2])>>23); | |
306 x[5] ^= x[4]; | |
307 x[6] += x[5]; | |
308 x[7] -= x[6] ^ 0x0123456789ABCDEF; | |
309 } | |
310 | |
311 /*********************************************************************** | |
312 | |
313 ***********************************************************************/ | |
314 | |
315 private static ulong[] t1() { return table[0..256]; } | |
316 private static ulong[] t2() { return table[256..512]; } | |
317 private static ulong[] t3() { return table[512..768]; } | |
318 private static ulong[] t4() { return table[768..1024]; } | |
319 } | |
320 | |
321 | |
322 /******************************************************************************* | |
323 | |
324 *******************************************************************************/ | |
325 | |
326 private static ulong[1024] table = | |
327 [ | |
328 0x02aab17cf7e90c5e /* 0 */, 0xac424b03e243a8ec /* 1 */, | |
329 0x72cd5be30dd5fcd3 /* 2 */, 0x6d019b93f6f97f3a /* 3 */, | |
330 0xcd9978ffd21f9193 /* 4 */, 0x7573a1c9708029e2 /* 5 */, | |
331 0xb164326b922a83c3 /* 6 */, 0x46883eee04915870 /* 7 */, | |
332 0xeaace3057103ece6 /* 8 */, 0xc54169b808a3535c /* 9 */, | |
333 0x4ce754918ddec47c /* 10 */, 0x0aa2f4dfdc0df40c /* 11 */, | |
334 0x10b76f18a74dbefa /* 12 */, 0xc6ccb6235ad1ab6a /* 13 */, | |
335 0x13726121572fe2ff /* 14 */, 0x1a488c6f199d921e /* 15 */, | |
336 0x4bc9f9f4da0007ca /* 16 */, 0x26f5e6f6e85241c7 /* 17 */, | |
337 0x859079dbea5947b6 /* 18 */, 0x4f1885c5c99e8c92 /* 19 */, | |
338 0xd78e761ea96f864b /* 20 */, 0x8e36428c52b5c17d /* 21 */, | |
339 0x69cf6827373063c1 /* 22 */, 0xb607c93d9bb4c56e /* 23 */, | |
340 0x7d820e760e76b5ea /* 24 */, 0x645c9cc6f07fdc42 /* 25 */, | |
341 0xbf38a078243342e0 /* 26 */, 0x5f6b343c9d2e7d04 /* 27 */, | |
342 0xf2c28aeb600b0ec6 /* 28 */, 0x6c0ed85f7254bcac /* 29 */, | |
343 0x71592281a4db4fe5 /* 30 */, 0x1967fa69ce0fed9f /* 31 */, | |
344 0xfd5293f8b96545db /* 32 */, 0xc879e9d7f2a7600b /* 33 */, | |
345 0x860248920193194e /* 34 */, 0xa4f9533b2d9cc0b3 /* 35 */, | |
346 0x9053836c15957613 /* 36 */, 0xdb6dcf8afc357bf1 /* 37 */, | |
347 0x18beea7a7a370f57 /* 38 */, 0x037117ca50b99066 /* 39 */, | |
348 0x6ab30a9774424a35 /* 40 */, 0xf4e92f02e325249b /* 41 */, | |
349 0x7739db07061ccae1 /* 42 */, 0xd8f3b49ceca42a05 /* 43 */, | |
350 0xbd56be3f51382f73 /* 44 */, 0x45faed5843b0bb28 /* 45 */, | |
351 0x1c813d5c11bf1f83 /* 46 */, 0x8af0e4b6d75fa169 /* 47 */, | |
352 0x33ee18a487ad9999 /* 48 */, 0x3c26e8eab1c94410 /* 49 */, | |
353 0xb510102bc0a822f9 /* 50 */, 0x141eef310ce6123b /* 51 */, | |
354 0xfc65b90059ddb154 /* 52 */, 0xe0158640c5e0e607 /* 53 */, | |
355 0x884e079826c3a3cf /* 54 */, 0x930d0d9523c535fd /* 55 */, | |
356 0x35638d754e9a2b00 /* 56 */, 0x4085fccf40469dd5 /* 57 */, | |
357 0xc4b17ad28be23a4c /* 58 */, 0xcab2f0fc6a3e6a2e /* 59 */, | |
358 0x2860971a6b943fcd /* 60 */, 0x3dde6ee212e30446 /* 61 */, | |
359 0x6222f32ae01765ae /* 62 */, 0x5d550bb5478308fe /* 63 */, | |
360 0xa9efa98da0eda22a /* 64 */, 0xc351a71686c40da7 /* 65 */, | |
361 0x1105586d9c867c84 /* 66 */, 0xdcffee85fda22853 /* 67 */, | |
362 0xccfbd0262c5eef76 /* 68 */, 0xbaf294cb8990d201 /* 69 */, | |
363 0xe69464f52afad975 /* 70 */, 0x94b013afdf133e14 /* 71 */, | |
364 0x06a7d1a32823c958 /* 72 */, 0x6f95fe5130f61119 /* 73 */, | |
365 0xd92ab34e462c06c0 /* 74 */, 0xed7bde33887c71d2 /* 75 */, | |
366 0x79746d6e6518393e /* 76 */, 0x5ba419385d713329 /* 77 */, | |
367 0x7c1ba6b948a97564 /* 78 */, 0x31987c197bfdac67 /* 79 */, | |
368 0xde6c23c44b053d02 /* 80 */, 0x581c49fed002d64d /* 81 */, | |
369 0xdd474d6338261571 /* 82 */, 0xaa4546c3e473d062 /* 83 */, | |
370 0x928fce349455f860 /* 84 */, 0x48161bbacaab94d9 /* 85 */, | |
371 0x63912430770e6f68 /* 86 */, 0x6ec8a5e602c6641c /* 87 */, | |
372 0x87282515337ddd2b /* 88 */, 0x2cda6b42034b701b /* 89 */, | |
373 0xb03d37c181cb096d /* 90 */, 0xe108438266c71c6f /* 91 */, | |
374 0x2b3180c7eb51b255 /* 92 */, 0xdf92b82f96c08bbc /* 93 */, | |
375 0x5c68c8c0a632f3ba /* 94 */, 0x5504cc861c3d0556 /* 95 */, | |
376 0xabbfa4e55fb26b8f /* 96 */, 0x41848b0ab3baceb4 /* 97 */, | |
377 0xb334a273aa445d32 /* 98 */, 0xbca696f0a85ad881 /* 99 */, | |
378 0x24f6ec65b528d56c /* 100 */, 0x0ce1512e90f4524a /* 101 */, | |
379 0x4e9dd79d5506d35a /* 102 */, 0x258905fac6ce9779 /* 103 */, | |
380 0x2019295b3e109b33 /* 104 */, 0xf8a9478b73a054cc /* 105 */, | |
381 0x2924f2f934417eb0 /* 106 */, 0x3993357d536d1bc4 /* 107 */, | |
382 0x38a81ac21db6ff8b /* 108 */, 0x47c4fbf17d6016bf /* 109 */, | |
383 0x1e0faadd7667e3f5 /* 110 */, 0x7abcff62938beb96 /* 111 */, | |
384 0xa78dad948fc179c9 /* 112 */, 0x8f1f98b72911e50d /* 113 */, | |
385 0x61e48eae27121a91 /* 114 */, 0x4d62f7ad31859808 /* 115 */, | |
386 0xeceba345ef5ceaeb /* 116 */, 0xf5ceb25ebc9684ce /* 117 */, | |
387 0xf633e20cb7f76221 /* 118 */, 0xa32cdf06ab8293e4 /* 119 */, | |
388 0x985a202ca5ee2ca4 /* 120 */, 0xcf0b8447cc8a8fb1 /* 121 */, | |
389 0x9f765244979859a3 /* 122 */, 0xa8d516b1a1240017 /* 123 */, | |
390 0x0bd7ba3ebb5dc726 /* 124 */, 0xe54bca55b86adb39 /* 125 */, | |
391 0x1d7a3afd6c478063 /* 126 */, 0x519ec608e7669edd /* 127 */, | |
392 0x0e5715a2d149aa23 /* 128 */, 0x177d4571848ff194 /* 129 */, | |
393 0xeeb55f3241014c22 /* 130 */, 0x0f5e5ca13a6e2ec2 /* 131 */, | |
394 0x8029927b75f5c361 /* 132 */, 0xad139fabc3d6e436 /* 133 */, | |
395 0x0d5df1a94ccf402f /* 134 */, 0x3e8bd948bea5dfc8 /* 135 */, | |
396 0xa5a0d357bd3ff77e /* 136 */, 0xa2d12e251f74f645 /* 137 */, | |
397 0x66fd9e525e81a082 /* 138 */, 0x2e0c90ce7f687a49 /* 139 */, | |
398 0xc2e8bcbeba973bc5 /* 140 */, 0x000001bce509745f /* 141 */, | |
399 0x423777bbe6dab3d6 /* 142 */, 0xd1661c7eaef06eb5 /* 143 */, | |
400 0xa1781f354daacfd8 /* 144 */, 0x2d11284a2b16affc /* 145 */, | |
401 0xf1fc4f67fa891d1f /* 146 */, 0x73ecc25dcb920ada /* 147 */, | |
402 0xae610c22c2a12651 /* 148 */, 0x96e0a810d356b78a /* 149 */, | |
403 0x5a9a381f2fe7870f /* 150 */, 0xd5ad62ede94e5530 /* 151 */, | |
404 0xd225e5e8368d1427 /* 152 */, 0x65977b70c7af4631 /* 153 */, | |
405 0x99f889b2de39d74f /* 154 */, 0x233f30bf54e1d143 /* 155 */, | |
406 0x9a9675d3d9a63c97 /* 156 */, 0x5470554ff334f9a8 /* 157 */, | |
407 0x166acb744a4f5688 /* 158 */, 0x70c74caab2e4aead /* 159 */, | |
408 0xf0d091646f294d12 /* 160 */, 0x57b82a89684031d1 /* 161 */, | |
409 0xefd95a5a61be0b6b /* 162 */, 0x2fbd12e969f2f29a /* 163 */, | |
410 0x9bd37013feff9fe8 /* 164 */, 0x3f9b0404d6085a06 /* 165 */, | |
411 0x4940c1f3166cfe15 /* 166 */, 0x09542c4dcdf3defb /* 167 */, | |
412 0xb4c5218385cd5ce3 /* 168 */, 0xc935b7dc4462a641 /* 169 */, | |
413 0x3417f8a68ed3b63f /* 170 */, 0xb80959295b215b40 /* 171 */, | |
414 0xf99cdaef3b8c8572 /* 172 */, 0x018c0614f8fcb95d /* 173 */, | |
415 0x1b14accd1a3acdf3 /* 174 */, 0x84d471f200bb732d /* 175 */, | |
416 0xc1a3110e95e8da16 /* 176 */, 0x430a7220bf1a82b8 /* 177 */, | |
417 0xb77e090d39df210e /* 178 */, 0x5ef4bd9f3cd05e9d /* 179 */, | |
418 0x9d4ff6da7e57a444 /* 180 */, 0xda1d60e183d4a5f8 /* 181 */, | |
419 0xb287c38417998e47 /* 182 */, 0xfe3edc121bb31886 /* 183 */, | |
420 0xc7fe3ccc980ccbef /* 184 */, 0xe46fb590189bfd03 /* 185 */, | |
421 0x3732fd469a4c57dc /* 186 */, 0x7ef700a07cf1ad65 /* 187 */, | |
422 0x59c64468a31d8859 /* 188 */, 0x762fb0b4d45b61f6 /* 189 */, | |
423 0x155baed099047718 /* 190 */, 0x68755e4c3d50baa6 /* 191 */, | |
424 0xe9214e7f22d8b4df /* 192 */, 0x2addbf532eac95f4 /* 193 */, | |
425 0x32ae3909b4bd0109 /* 194 */, 0x834df537b08e3450 /* 195 */, | |
426 0xfa209da84220728d /* 196 */, 0x9e691d9b9efe23f7 /* 197 */, | |
427 0x0446d288c4ae8d7f /* 198 */, 0x7b4cc524e169785b /* 199 */, | |
428 0x21d87f0135ca1385 /* 200 */, 0xcebb400f137b8aa5 /* 201 */, | |
429 0x272e2b66580796be /* 202 */, 0x3612264125c2b0de /* 203 */, | |
430 0x057702bdad1efbb2 /* 204 */, 0xd4babb8eacf84be9 /* 205 */, | |
431 0x91583139641bc67b /* 206 */, 0x8bdc2de08036e024 /* 207 */, | |
432 0x603c8156f49f68ed /* 208 */, 0xf7d236f7dbef5111 /* 209 */, | |
433 0x9727c4598ad21e80 /* 210 */, 0xa08a0896670a5fd7 /* 211 */, | |
434 0xcb4a8f4309eba9cb /* 212 */, 0x81af564b0f7036a1 /* 213 */, | |
435 0xc0b99aa778199abd /* 214 */, 0x959f1ec83fc8e952 /* 215 */, | |
436 0x8c505077794a81b9 /* 216 */, 0x3acaaf8f056338f0 /* 217 */, | |
437 0x07b43f50627a6778 /* 218 */, 0x4a44ab49f5eccc77 /* 219 */, | |
438 0x3bc3d6e4b679ee98 /* 220 */, 0x9cc0d4d1cf14108c /* 221 */, | |
439 0x4406c00b206bc8a0 /* 222 */, 0x82a18854c8d72d89 /* 223 */, | |
440 0x67e366b35c3c432c /* 224 */, 0xb923dd61102b37f2 /* 225 */, | |
441 0x56ab2779d884271d /* 226 */, 0xbe83e1b0ff1525af /* 227 */, | |
442 0xfb7c65d4217e49a9 /* 228 */, 0x6bdbe0e76d48e7d4 /* 229 */, | |
443 0x08df828745d9179e /* 230 */, 0x22ea6a9add53bd34 /* 231 */, | |
444 0xe36e141c5622200a /* 232 */, 0x7f805d1b8cb750ee /* 233 */, | |
445 0xafe5c7a59f58e837 /* 234 */, 0xe27f996a4fb1c23c /* 235 */, | |
446 0xd3867dfb0775f0d0 /* 236 */, 0xd0e673de6e88891a /* 237 */, | |
447 0x123aeb9eafb86c25 /* 238 */, 0x30f1d5d5c145b895 /* 239 */, | |
448 0xbb434a2dee7269e7 /* 240 */, 0x78cb67ecf931fa38 /* 241 */, | |
449 0xf33b0372323bbf9c /* 242 */, 0x52d66336fb279c74 /* 243 */, | |
450 0x505f33ac0afb4eaa /* 244 */, 0xe8a5cd99a2cce187 /* 245 */, | |
451 0x534974801e2d30bb /* 246 */, 0x8d2d5711d5876d90 /* 247 */, | |
452 0x1f1a412891bc038e /* 248 */, 0xd6e2e71d82e56648 /* 249 */, | |
453 0x74036c3a497732b7 /* 250 */, 0x89b67ed96361f5ab /* 251 */, | |
454 0xffed95d8f1ea02a2 /* 252 */, 0xe72b3bd61464d43d /* 253 */, | |
455 0xa6300f170bdc4820 /* 254 */, 0xebc18760ed78a77a /* 255 */, | |
456 0xe6a6be5a05a12138 /* 256 */, 0xb5a122a5b4f87c98 /* 257 */, | |
457 0x563c6089140b6990 /* 258 */, 0x4c46cb2e391f5dd5 /* 259 */, | |
458 0xd932addbc9b79434 /* 260 */, 0x08ea70e42015aff5 /* 261 */, | |
459 0xd765a6673e478cf1 /* 262 */, 0xc4fb757eab278d99 /* 263 */, | |
460 0xdf11c6862d6e0692 /* 264 */, 0xddeb84f10d7f3b16 /* 265 */, | |
461 0x6f2ef604a665ea04 /* 266 */, 0x4a8e0f0ff0e0dfb3 /* 267 */, | |
462 0xa5edeef83dbcba51 /* 268 */, 0xfc4f0a2a0ea4371e /* 269 */, | |
463 0xe83e1da85cb38429 /* 270 */, 0xdc8ff882ba1b1ce2 /* 271 */, | |
464 0xcd45505e8353e80d /* 272 */, 0x18d19a00d4db0717 /* 273 */, | |
465 0x34a0cfeda5f38101 /* 274 */, 0x0be77e518887caf2 /* 275 */, | |
466 0x1e341438b3c45136 /* 276 */, 0xe05797f49089ccf9 /* 277 */, | |
467 0xffd23f9df2591d14 /* 278 */, 0x543dda228595c5cd /* 279 */, | |
468 0x661f81fd99052a33 /* 280 */, 0x8736e641db0f7b76 /* 281 */, | |
469 0x15227725418e5307 /* 282 */, 0xe25f7f46162eb2fa /* 283 */, | |
470 0x48a8b2126c13d9fe /* 284 */, 0xafdc541792e76eea /* 285 */, | |
471 0x03d912bfc6d1898f /* 286 */, 0x31b1aafa1b83f51b /* 287 */, | |
472 0xf1ac2796e42ab7d9 /* 288 */, 0x40a3a7d7fcd2ebac /* 289 */, | |
473 0x1056136d0afbbcc5 /* 290 */, 0x7889e1dd9a6d0c85 /* 291 */, | |
474 0xd33525782a7974aa /* 292 */, 0xa7e25d09078ac09b /* 293 */, | |
475 0xbd4138b3eac6edd0 /* 294 */, 0x920abfbe71eb9e70 /* 295 */, | |
476 0xa2a5d0f54fc2625c /* 296 */, 0xc054e36b0b1290a3 /* 297 */, | |
477 0xf6dd59ff62fe932b /* 298 */, 0x3537354511a8ac7d /* 299 */, | |
478 0xca845e9172fadcd4 /* 300 */, 0x84f82b60329d20dc /* 301 */, | |
479 0x79c62ce1cd672f18 /* 302 */, 0x8b09a2add124642c /* 303 */, | |
480 0xd0c1e96a19d9e726 /* 304 */, 0x5a786a9b4ba9500c /* 305 */, | |
481 0x0e020336634c43f3 /* 306 */, 0xc17b474aeb66d822 /* 307 */, | |
482 0x6a731ae3ec9baac2 /* 308 */, 0x8226667ae0840258 /* 309 */, | |
483 0x67d4567691caeca5 /* 310 */, 0x1d94155c4875adb5 /* 311 */, | |
484 0x6d00fd985b813fdf /* 312 */, 0x51286efcb774cd06 /* 313 */, | |
485 0x5e8834471fa744af /* 314 */, 0xf72ca0aee761ae2e /* 315 */, | |
486 0xbe40e4cdaee8e09a /* 316 */, 0xe9970bbb5118f665 /* 317 */, | |
487 0x726e4beb33df1964 /* 318 */, 0x703b000729199762 /* 319 */, | |
488 0x4631d816f5ef30a7 /* 320 */, 0xb880b5b51504a6be /* 321 */, | |
489 0x641793c37ed84b6c /* 322 */, 0x7b21ed77f6e97d96 /* 323 */, | |
490 0x776306312ef96b73 /* 324 */, 0xae528948e86ff3f4 /* 325 */, | |
491 0x53dbd7f286a3f8f8 /* 326 */, 0x16cadce74cfc1063 /* 327 */, | |
492 0x005c19bdfa52c6dd /* 328 */, 0x68868f5d64d46ad3 /* 329 */, | |
493 0x3a9d512ccf1e186a /* 330 */, 0x367e62c2385660ae /* 331 */, | |
494 0xe359e7ea77dcb1d7 /* 332 */, 0x526c0773749abe6e /* 333 */, | |
495 0x735ae5f9d09f734b /* 334 */, 0x493fc7cc8a558ba8 /* 335 */, | |
496 0xb0b9c1533041ab45 /* 336 */, 0x321958ba470a59bd /* 337 */, | |
497 0x852db00b5f46c393 /* 338 */, 0x91209b2bd336b0e5 /* 339 */, | |
498 0x6e604f7d659ef19f /* 340 */, 0xb99a8ae2782ccb24 /* 341 */, | |
499 0xccf52ab6c814c4c7 /* 342 */, 0x4727d9afbe11727b /* 343 */, | |
500 0x7e950d0c0121b34d /* 344 */, 0x756f435670ad471f /* 345 */, | |
501 0xf5add442615a6849 /* 346 */, 0x4e87e09980b9957a /* 347 */, | |
502 0x2acfa1df50aee355 /* 348 */, 0xd898263afd2fd556 /* 349 */, | |
503 0xc8f4924dd80c8fd6 /* 350 */, 0xcf99ca3d754a173a /* 351 */, | |
504 0xfe477bacaf91bf3c /* 352 */, 0xed5371f6d690c12d /* 353 */, | |
505 0x831a5c285e687094 /* 354 */, 0xc5d3c90a3708a0a4 /* 355 */, | |
506 0x0f7f903717d06580 /* 356 */, 0x19f9bb13b8fdf27f /* 357 */, | |
507 0xb1bd6f1b4d502843 /* 358 */, 0x1c761ba38fff4012 /* 359 */, | |
508 0x0d1530c4e2e21f3b /* 360 */, 0x8943ce69a7372c8a /* 361 */, | |
509 0xe5184e11feb5ce66 /* 362 */, 0x618bdb80bd736621 /* 363 */, | |
510 0x7d29bad68b574d0b /* 364 */, 0x81bb613e25e6fe5b /* 365 */, | |
511 0x071c9c10bc07913f /* 366 */, 0xc7beeb7909ac2d97 /* 367 */, | |
512 0xc3e58d353bc5d757 /* 368 */, 0xeb017892f38f61e8 /* 369 */, | |
513 0xd4effb9c9b1cc21a /* 370 */, 0x99727d26f494f7ab /* 371 */, | |
514 0xa3e063a2956b3e03 /* 372 */, 0x9d4a8b9a4aa09c30 /* 373 */, | |
515 0x3f6ab7d500090fb4 /* 374 */, 0x9cc0f2a057268ac0 /* 375 */, | |
516 0x3dee9d2dedbf42d1 /* 376 */, 0x330f49c87960a972 /* 377 */, | |
517 0xc6b2720287421b41 /* 378 */, 0x0ac59ec07c00369c /* 379 */, | |
518 0xef4eac49cb353425 /* 380 */, 0xf450244eef0129d8 /* 381 */, | |
519 0x8acc46e5caf4deb6 /* 382 */, 0x2ffeab63989263f7 /* 383 */, | |
520 0x8f7cb9fe5d7a4578 /* 384 */, 0x5bd8f7644e634635 /* 385 */, | |
521 0x427a7315bf2dc900 /* 386 */, 0x17d0c4aa2125261c /* 387 */, | |
522 0x3992486c93518e50 /* 388 */, 0xb4cbfee0a2d7d4c3 /* 389 */, | |
523 0x7c75d6202c5ddd8d /* 390 */, 0xdbc295d8e35b6c61 /* 391 */, | |
524 0x60b369d302032b19 /* 392 */, 0xce42685fdce44132 /* 393 */, | |
525 0x06f3ddb9ddf65610 /* 394 */, 0x8ea4d21db5e148f0 /* 395 */, | |
526 0x20b0fce62fcd496f /* 396 */, 0x2c1b912358b0ee31 /* 397 */, | |
527 0xb28317b818f5a308 /* 398 */, 0xa89c1e189ca6d2cf /* 399 */, | |
528 0x0c6b18576aaadbc8 /* 400 */, 0xb65deaa91299fae3 /* 401 */, | |
529 0xfb2b794b7f1027e7 /* 402 */, 0x04e4317f443b5beb /* 403 */, | |
530 0x4b852d325939d0a6 /* 404 */, 0xd5ae6beefb207ffc /* 405 */, | |
531 0x309682b281c7d374 /* 406 */, 0xbae309a194c3b475 /* 407 */, | |
532 0x8cc3f97b13b49f05 /* 408 */, 0x98a9422ff8293967 /* 409 */, | |
533 0x244b16b01076ff7c /* 410 */, 0xf8bf571c663d67ee /* 411 */, | |
534 0x1f0d6758eee30da1 /* 412 */, 0xc9b611d97adeb9b7 /* 413 */, | |
535 0xb7afd5887b6c57a2 /* 414 */, 0x6290ae846b984fe1 /* 415 */, | |
536 0x94df4cdeacc1a5fd /* 416 */, 0x058a5bd1c5483aff /* 417 */, | |
537 0x63166cc142ba3c37 /* 418 */, 0x8db8526eb2f76f40 /* 419 */, | |
538 0xe10880036f0d6d4e /* 420 */, 0x9e0523c9971d311d /* 421 */, | |
539 0x45ec2824cc7cd691 /* 422 */, 0x575b8359e62382c9 /* 423 */, | |
540 0xfa9e400dc4889995 /* 424 */, 0xd1823ecb45721568 /* 425 */, | |
541 0xdafd983b8206082f /* 426 */, 0xaa7d29082386a8cb /* 427 */, | |
542 0x269fcd4403b87588 /* 428 */, 0x1b91f5f728bdd1e0 /* 429 */, | |
543 0xe4669f39040201f6 /* 430 */, 0x7a1d7c218cf04ade /* 431 */, | |
544 0x65623c29d79ce5ce /* 432 */, 0x2368449096c00bb1 /* 433 */, | |
545 0xab9bf1879da503ba /* 434 */, 0xbc23ecb1a458058e /* 435 */, | |
546 0x9a58df01bb401ecc /* 436 */, 0xa070e868a85f143d /* 437 */, | |
547 0x4ff188307df2239e /* 438 */, 0x14d565b41a641183 /* 439 */, | |
548 0xee13337452701602 /* 440 */, 0x950e3dcf3f285e09 /* 441 */, | |
549 0x59930254b9c80953 /* 442 */, 0x3bf299408930da6d /* 443 */, | |
550 0xa955943f53691387 /* 444 */, 0xa15edecaa9cb8784 /* 445 */, | |
551 0x29142127352be9a0 /* 446 */, 0x76f0371fff4e7afb /* 447 */, | |
552 0x0239f450274f2228 /* 448 */, 0xbb073af01d5e868b /* 449 */, | |
553 0xbfc80571c10e96c1 /* 450 */, 0xd267088568222e23 /* 451 */, | |
554 0x9671a3d48e80b5b0 /* 452 */, 0x55b5d38ae193bb81 /* 453 */, | |
555 0x693ae2d0a18b04b8 /* 454 */, 0x5c48b4ecadd5335f /* 455 */, | |
556 0xfd743b194916a1ca /* 456 */, 0x2577018134be98c4 /* 457 */, | |
557 0xe77987e83c54a4ad /* 458 */, 0x28e11014da33e1b9 /* 459 */, | |
558 0x270cc59e226aa213 /* 460 */, 0x71495f756d1a5f60 /* 461 */, | |
559 0x9be853fb60afef77 /* 462 */, 0xadc786a7f7443dbf /* 463 */, | |
560 0x0904456173b29a82 /* 464 */, 0x58bc7a66c232bd5e /* 465 */, | |
561 0xf306558c673ac8b2 /* 466 */, 0x41f639c6b6c9772a /* 467 */, | |
562 0x216defe99fda35da /* 468 */, 0x11640cc71c7be615 /* 469 */, | |
563 0x93c43694565c5527 /* 470 */, 0xea038e6246777839 /* 471 */, | |
564 0xf9abf3ce5a3e2469 /* 472 */, 0x741e768d0fd312d2 /* 473 */, | |
565 0x0144b883ced652c6 /* 474 */, 0xc20b5a5ba33f8552 /* 475 */, | |
566 0x1ae69633c3435a9d /* 476 */, 0x97a28ca4088cfdec /* 477 */, | |
567 0x8824a43c1e96f420 /* 478 */, 0x37612fa66eeea746 /* 479 */, | |
568 0x6b4cb165f9cf0e5a /* 480 */, 0x43aa1c06a0abfb4a /* 481 */, | |
569 0x7f4dc26ff162796b /* 482 */, 0x6cbacc8e54ed9b0f /* 483 */, | |
570 0xa6b7ffefd2bb253e /* 484 */, 0x2e25bc95b0a29d4f /* 485 */, | |
571 0x86d6a58bdef1388c /* 486 */, 0xded74ac576b6f054 /* 487 */, | |
572 0x8030bdbc2b45805d /* 488 */, 0x3c81af70e94d9289 /* 489 */, | |
573 0x3eff6dda9e3100db /* 490 */, 0xb38dc39fdfcc8847 /* 491 */, | |
574 0x123885528d17b87e /* 492 */, 0xf2da0ed240b1b642 /* 493 */, | |
575 0x44cefadcd54bf9a9 /* 494 */, 0x1312200e433c7ee6 /* 495 */, | |
576 0x9ffcc84f3a78c748 /* 496 */, 0xf0cd1f72248576bb /* 497 */, | |
577 0xec6974053638cfe4 /* 498 */, 0x2ba7b67c0cec4e4c /* 499 */, | |
578 0xac2f4df3e5ce32ed /* 500 */, 0xcb33d14326ea4c11 /* 501 */, | |
579 0xa4e9044cc77e58bc /* 502 */, 0x5f513293d934fcef /* 503 */, | |
580 0x5dc9645506e55444 /* 504 */, 0x50de418f317de40a /* 505 */, | |
581 0x388cb31a69dde259 /* 506 */, 0x2db4a83455820a86 /* 507 */, | |
582 0x9010a91e84711ae9 /* 508 */, 0x4df7f0b7b1498371 /* 509 */, | |
583 0xd62a2eabc0977179 /* 510 */, 0x22fac097aa8d5c0e /* 511 */, | |
584 0xf49fcc2ff1daf39b /* 512 */, 0x487fd5c66ff29281 /* 513 */, | |
585 0xe8a30667fcdca83f /* 514 */, 0x2c9b4be3d2fcce63 /* 515 */, | |
586 0xda3ff74b93fbbbc2 /* 516 */, 0x2fa165d2fe70ba66 /* 517 */, | |
587 0xa103e279970e93d4 /* 518 */, 0xbecdec77b0e45e71 /* 519 */, | |
588 0xcfb41e723985e497 /* 520 */, 0xb70aaa025ef75017 /* 521 */, | |
589 0xd42309f03840b8e0 /* 522 */, 0x8efc1ad035898579 /* 523 */, | |
590 0x96c6920be2b2abc5 /* 524 */, 0x66af4163375a9172 /* 525 */, | |
591 0x2174abdcca7127fb /* 526 */, 0xb33ccea64a72ff41 /* 527 */, | |
592 0xf04a4933083066a5 /* 528 */, 0x8d970acdd7289af5 /* 529 */, | |
593 0x8f96e8e031c8c25e /* 530 */, 0xf3fec02276875d47 /* 531 */, | |
594 0xec7bf310056190dd /* 532 */, 0xf5adb0aebb0f1491 /* 533 */, | |
595 0x9b50f8850fd58892 /* 534 */, 0x4975488358b74de8 /* 535 */, | |
596 0xa3354ff691531c61 /* 536 */, 0x0702bbe481d2c6ee /* 537 */, | |
597 0x89fb24057deded98 /* 538 */, 0xac3075138596e902 /* 539 */, | |
598 0x1d2d3580172772ed /* 540 */, 0xeb738fc28e6bc30d /* 541 */, | |
599 0x5854ef8f63044326 /* 542 */, 0x9e5c52325add3bbe /* 543 */, | |
600 0x90aa53cf325c4623 /* 544 */, 0xc1d24d51349dd067 /* 545 */, | |
601 0x2051cfeea69ea624 /* 546 */, 0x13220f0a862e7e4f /* 547 */, | |
602 0xce39399404e04864 /* 548 */, 0xd9c42ca47086fcb7 /* 549 */, | |
603 0x685ad2238a03e7cc /* 550 */, 0x066484b2ab2ff1db /* 551 */, | |
604 0xfe9d5d70efbf79ec /* 552 */, 0x5b13b9dd9c481854 /* 553 */, | |
605 0x15f0d475ed1509ad /* 554 */, 0x0bebcd060ec79851 /* 555 */, | |
606 0xd58c6791183ab7f8 /* 556 */, 0xd1187c5052f3eee4 /* 557 */, | |
607 0xc95d1192e54e82ff /* 558 */, 0x86eea14cb9ac6ca2 /* 559 */, | |
608 0x3485beb153677d5d /* 560 */, 0xdd191d781f8c492a /* 561 */, | |
609 0xf60866baa784ebf9 /* 562 */, 0x518f643ba2d08c74 /* 563 */, | |
610 0x8852e956e1087c22 /* 564 */, 0xa768cb8dc410ae8d /* 565 */, | |
611 0x38047726bfec8e1a /* 566 */, 0xa67738b4cd3b45aa /* 567 */, | |
612 0xad16691cec0dde19 /* 568 */, 0xc6d4319380462e07 /* 569 */, | |
613 0xc5a5876d0ba61938 /* 570 */, 0x16b9fa1fa58fd840 /* 571 */, | |
614 0x188ab1173ca74f18 /* 572 */, 0xabda2f98c99c021f /* 573 */, | |
615 0x3e0580ab134ae816 /* 574 */, 0x5f3b05b773645abb /* 575 */, | |
616 0x2501a2be5575f2f6 /* 576 */, 0x1b2f74004e7e8ba9 /* 577 */, | |
617 0x1cd7580371e8d953 /* 578 */, 0x7f6ed89562764e30 /* 579 */, | |
618 0xb15926ff596f003d /* 580 */, 0x9f65293da8c5d6b9 /* 581 */, | |
619 0x6ecef04dd690f84c /* 582 */, 0x4782275fff33af88 /* 583 */, | |
620 0xe41433083f820801 /* 584 */, 0xfd0dfe409a1af9b5 /* 585 */, | |
621 0x4325a3342cdb396b /* 586 */, 0x8ae77e62b301b252 /* 587 */, | |
622 0xc36f9e9f6655615a /* 588 */, 0x85455a2d92d32c09 /* 589 */, | |
623 0xf2c7dea949477485 /* 590 */, 0x63cfb4c133a39eba /* 591 */, | |
624 0x83b040cc6ebc5462 /* 592 */, 0x3b9454c8fdb326b0 /* 593 */, | |
625 0x56f56a9e87ffd78c /* 594 */, 0x2dc2940d99f42bc6 /* 595 */, | |
626 0x98f7df096b096e2d /* 596 */, 0x19a6e01e3ad852bf /* 597 */, | |
627 0x42a99ccbdbd4b40b /* 598 */, 0xa59998af45e9c559 /* 599 */, | |
628 0x366295e807d93186 /* 600 */, 0x6b48181bfaa1f773 /* 601 */, | |
629 0x1fec57e2157a0a1d /* 602 */, 0x4667446af6201ad5 /* 603 */, | |
630 0xe615ebcacfb0f075 /* 604 */, 0xb8f31f4f68290778 /* 605 */, | |
631 0x22713ed6ce22d11e /* 606 */, 0x3057c1a72ec3c93b /* 607 */, | |
632 0xcb46acc37c3f1f2f /* 608 */, 0xdbb893fd02aaf50e /* 609 */, | |
633 0x331fd92e600b9fcf /* 610 */, 0xa498f96148ea3ad6 /* 611 */, | |
634 0xa8d8426e8b6a83ea /* 612 */, 0xa089b274b7735cdc /* 613 */, | |
635 0x87f6b3731e524a11 /* 614 */, 0x118808e5cbc96749 /* 615 */, | |
636 0x9906e4c7b19bd394 /* 616 */, 0xafed7f7e9b24a20c /* 617 */, | |
637 0x6509eadeeb3644a7 /* 618 */, 0x6c1ef1d3e8ef0ede /* 619 */, | |
638 0xb9c97d43e9798fb4 /* 620 */, 0xa2f2d784740c28a3 /* 621 */, | |
639 0x7b8496476197566f /* 622 */, 0x7a5be3e6b65f069d /* 623 */, | |
640 0xf96330ed78be6f10 /* 624 */, 0xeee60de77a076a15 /* 625 */, | |
641 0x2b4bee4aa08b9bd0 /* 626 */, 0x6a56a63ec7b8894e /* 627 */, | |
642 0x02121359ba34fef4 /* 628 */, 0x4cbf99f8283703fc /* 629 */, | |
643 0x398071350caf30c8 /* 630 */, 0xd0a77a89f017687a /* 631 */, | |
644 0xf1c1a9eb9e423569 /* 632 */, 0x8c7976282dee8199 /* 633 */, | |
645 0x5d1737a5dd1f7abd /* 634 */, 0x4f53433c09a9fa80 /* 635 */, | |
646 0xfa8b0c53df7ca1d9 /* 636 */, 0x3fd9dcbc886ccb77 /* 637 */, | |
647 0xc040917ca91b4720 /* 638 */, 0x7dd00142f9d1dcdf /* 639 */, | |
648 0x8476fc1d4f387b58 /* 640 */, 0x23f8e7c5f3316503 /* 641 */, | |
649 0x032a2244e7e37339 /* 642 */, 0x5c87a5d750f5a74b /* 643 */, | |
650 0x082b4cc43698992e /* 644 */, 0xdf917becb858f63c /* 645 */, | |
651 0x3270b8fc5bf86dda /* 646 */, 0x10ae72bb29b5dd76 /* 647 */, | |
652 0x576ac94e7700362b /* 648 */, 0x1ad112dac61efb8f /* 649 */, | |
653 0x691bc30ec5faa427 /* 650 */, 0xff246311cc327143 /* 651 */, | |
654 0x3142368e30e53206 /* 652 */, 0x71380e31e02ca396 /* 653 */, | |
655 0x958d5c960aad76f1 /* 654 */, 0xf8d6f430c16da536 /* 655 */, | |
656 0xc8ffd13f1be7e1d2 /* 656 */, 0x7578ae66004ddbe1 /* 657 */, | |
657 0x05833f01067be646 /* 658 */, 0xbb34b5ad3bfe586d /* 659 */, | |
658 0x095f34c9a12b97f0 /* 660 */, 0x247ab64525d60ca8 /* 661 */, | |
659 0xdcdbc6f3017477d1 /* 662 */, 0x4a2e14d4decad24d /* 663 */, | |
660 0xbdb5e6d9be0a1eeb /* 664 */, 0x2a7e70f7794301ab /* 665 */, | |
661 0xdef42d8a270540fd /* 666 */, 0x01078ec0a34c22c1 /* 667 */, | |
662 0xe5de511af4c16387 /* 668 */, 0x7ebb3a52bd9a330a /* 669 */, | |
663 0x77697857aa7d6435 /* 670 */, 0x004e831603ae4c32 /* 671 */, | |
664 0xe7a21020ad78e312 /* 672 */, 0x9d41a70c6ab420f2 /* 673 */, | |
665 0x28e06c18ea1141e6 /* 674 */, 0xd2b28cbd984f6b28 /* 675 */, | |
666 0x26b75f6c446e9d83 /* 676 */, 0xba47568c4d418d7f /* 677 */, | |
667 0xd80badbfe6183d8e /* 678 */, 0x0e206d7f5f166044 /* 679 */, | |
668 0xe258a43911cbca3e /* 680 */, 0x723a1746b21dc0bc /* 681 */, | |
669 0xc7caa854f5d7cdd3 /* 682 */, 0x7cac32883d261d9c /* 683 */, | |
670 0x7690c26423ba942c /* 684 */, 0x17e55524478042b8 /* 685 */, | |
671 0xe0be477656a2389f /* 686 */, 0x4d289b5e67ab2da0 /* 687 */, | |
672 0x44862b9c8fbbfd31 /* 688 */, 0xb47cc8049d141365 /* 689 */, | |
673 0x822c1b362b91c793 /* 690 */, 0x4eb14655fb13dfd8 /* 691 */, | |
674 0x1ecbba0714e2a97b /* 692 */, 0x6143459d5cde5f14 /* 693 */, | |
675 0x53a8fbf1d5f0ac89 /* 694 */, 0x97ea04d81c5e5b00 /* 695 */, | |
676 0x622181a8d4fdb3f3 /* 696 */, 0xe9bcd341572a1208 /* 697 */, | |
677 0x1411258643cce58a /* 698 */, 0x9144c5fea4c6e0a4 /* 699 */, | |
678 0x0d33d06565cf620f /* 700 */, 0x54a48d489f219ca1 /* 701 */, | |
679 0xc43e5eac6d63c821 /* 702 */, 0xa9728b3a72770daf /* 703 */, | |
680 0xd7934e7b20df87ef /* 704 */, 0xe35503b61a3e86e5 /* 705 */, | |
681 0xcae321fbc819d504 /* 706 */, 0x129a50b3ac60bfa6 /* 707 */, | |
682 0xcd5e68ea7e9fb6c3 /* 708 */, 0xb01c90199483b1c7 /* 709 */, | |
683 0x3de93cd5c295376c /* 710 */, 0xaed52edf2ab9ad13 /* 711 */, | |
684 0x2e60f512c0a07884 /* 712 */, 0xbc3d86a3e36210c9 /* 713 */, | |
685 0x35269d9b163951ce /* 714 */, 0x0c7d6e2ad0cdb5fa /* 715 */, | |
686 0x59e86297d87f5733 /* 716 */, 0x298ef221898db0e7 /* 717 */, | |
687 0x55000029d1a5aa7e /* 718 */, 0x8bc08ae1b5061b45 /* 719 */, | |
688 0xc2c31c2b6c92703a /* 720 */, 0x94cc596baf25ef42 /* 721 */, | |
689 0x0a1d73db22540456 /* 722 */, 0x04b6a0f9d9c4179a /* 723 */, | |
690 0xeffdafa2ae3d3c60 /* 724 */, 0xf7c8075bb49496c4 /* 725 */, | |
691 0x9cc5c7141d1cd4e3 /* 726 */, 0x78bd1638218e5534 /* 727 */, | |
692 0xb2f11568f850246a /* 728 */, 0xedfabcfa9502bc29 /* 729 */, | |
693 0x796ce5f2da23051b /* 730 */, 0xaae128b0dc93537c /* 731 */, | |
694 0x3a493da0ee4b29ae /* 732 */, 0xb5df6b2c416895d7 /* 733 */, | |
695 0xfcabbd25122d7f37 /* 734 */, 0x70810b58105dc4b1 /* 735 */, | |
696 0xe10fdd37f7882a90 /* 736 */, 0x524dcab5518a3f5c /* 737 */, | |
697 0x3c9e85878451255b /* 738 */, 0x4029828119bd34e2 /* 739 */, | |
698 0x74a05b6f5d3ceccb /* 740 */, 0xb610021542e13eca /* 741 */, | |
699 0x0ff979d12f59e2ac /* 742 */, 0x6037da27e4f9cc50 /* 743 */, | |
700 0x5e92975a0df1847d /* 744 */, 0xd66de190d3e623fe /* 745 */, | |
701 0x5032d6b87b568048 /* 746 */, 0x9a36b7ce8235216e /* 747 */, | |
702 0x80272a7a24f64b4a /* 748 */, 0x93efed8b8c6916f7 /* 749 */, | |
703 0x37ddbff44cce1555 /* 750 */, 0x4b95db5d4b99bd25 /* 751 */, | |
704 0x92d3fda169812fc0 /* 752 */, 0xfb1a4a9a90660bb6 /* 753 */, | |
705 0x730c196946a4b9b2 /* 754 */, 0x81e289aa7f49da68 /* 755 */, | |
706 0x64669a0f83b1a05f /* 756 */, 0x27b3ff7d9644f48b /* 757 */, | |
707 0xcc6b615c8db675b3 /* 758 */, 0x674f20b9bcebbe95 /* 759 */, | |
708 0x6f31238275655982 /* 760 */, 0x5ae488713e45cf05 /* 761 */, | |
709 0xbf619f9954c21157 /* 762 */, 0xeabac46040a8eae9 /* 763 */, | |
710 0x454c6fe9f2c0c1cd /* 764 */, 0x419cf6496412691c /* 765 */, | |
711 0xd3dc3bef265b0f70 /* 766 */, 0x6d0e60f5c3578a9e /* 767 */, | |
712 0x5b0e608526323c55 /* 768 */, 0x1a46c1a9fa1b59f5 /* 769 */, | |
713 0xa9e245a17c4c8ffa /* 770 */, 0x65ca5159db2955d7 /* 771 */, | |
714 0x05db0a76ce35afc2 /* 772 */, 0x81eac77ea9113d45 /* 773 */, | |
715 0x528ef88ab6ac0a0d /* 774 */, 0xa09ea253597be3ff /* 775 */, | |
716 0x430ddfb3ac48cd56 /* 776 */, 0xc4b3a67af45ce46f /* 777 */, | |
717 0x4ececfd8fbe2d05e /* 778 */, 0x3ef56f10b39935f0 /* 779 */, | |
718 0x0b22d6829cd619c6 /* 780 */, 0x17fd460a74df2069 /* 781 */, | |
719 0x6cf8cc8e8510ed40 /* 782 */, 0xd6c824bf3a6ecaa7 /* 783 */, | |
720 0x61243d581a817049 /* 784 */, 0x048bacb6bbc163a2 /* 785 */, | |
721 0xd9a38ac27d44cc32 /* 786 */, 0x7fddff5baaf410ab /* 787 */, | |
722 0xad6d495aa804824b /* 788 */, 0xe1a6a74f2d8c9f94 /* 789 */, | |
723 0xd4f7851235dee8e3 /* 790 */, 0xfd4b7f886540d893 /* 791 */, | |
724 0x247c20042aa4bfda /* 792 */, 0x096ea1c517d1327c /* 793 */, | |
725 0xd56966b4361a6685 /* 794 */, 0x277da5c31221057d /* 795 */, | |
726 0x94d59893a43acff7 /* 796 */, 0x64f0c51ccdc02281 /* 797 */, | |
727 0x3d33bcc4ff6189db /* 798 */, 0xe005cb184ce66af1 /* 799 */, | |
728 0xff5ccd1d1db99bea /* 800 */, 0xb0b854a7fe42980f /* 801 */, | |
729 0x7bd46a6a718d4b9f /* 802 */, 0xd10fa8cc22a5fd8c /* 803 */, | |
730 0xd31484952be4bd31 /* 804 */, 0xc7fa975fcb243847 /* 805 */, | |
731 0x4886ed1e5846c407 /* 806 */, 0x28cddb791eb70b04 /* 807 */, | |
732 0xc2b00be2f573417f /* 808 */, 0x5c9590452180f877 /* 809 */, | |
733 0x7a6bddfff370eb00 /* 810 */, 0xce509e38d6d9d6a4 /* 811 */, | |
734 0xebeb0f00647fa702 /* 812 */, 0x1dcc06cf76606f06 /* 813 */, | |
735 0xe4d9f28ba286ff0a /* 814 */, 0xd85a305dc918c262 /* 815 */, | |
736 0x475b1d8732225f54 /* 816 */, 0x2d4fb51668ccb5fe /* 817 */, | |
737 0xa679b9d9d72bba20 /* 818 */, 0x53841c0d912d43a5 /* 819 */, | |
738 0x3b7eaa48bf12a4e8 /* 820 */, 0x781e0e47f22f1ddf /* 821 */, | |
739 0xeff20ce60ab50973 /* 822 */, 0x20d261d19dffb742 /* 823 */, | |
740 0x16a12b03062a2e39 /* 824 */, 0x1960eb2239650495 /* 825 */, | |
741 0x251c16fed50eb8b8 /* 826 */, 0x9ac0c330f826016e /* 827 */, | |
742 0xed152665953e7671 /* 828 */, 0x02d63194a6369570 /* 829 */, | |
743 0x5074f08394b1c987 /* 830 */, 0x70ba598c90b25ce1 /* 831 */, | |
744 0x794a15810b9742f6 /* 832 */, 0x0d5925e9fcaf8c6c /* 833 */, | |
745 0x3067716cd868744e /* 834 */, 0x910ab077e8d7731b /* 835 */, | |
746 0x6a61bbdb5ac42f61 /* 836 */, 0x93513efbf0851567 /* 837 */, | |
747 0xf494724b9e83e9d5 /* 838 */, 0xe887e1985c09648d /* 839 */, | |
748 0x34b1d3c675370cfd /* 840 */, 0xdc35e433bc0d255d /* 841 */, | |
749 0xd0aab84234131be0 /* 842 */, 0x08042a50b48b7eaf /* 843 */, | |
750 0x9997c4ee44a3ab35 /* 844 */, 0x829a7b49201799d0 /* 845 */, | |
751 0x263b8307b7c54441 /* 846 */, 0x752f95f4fd6a6ca6 /* 847 */, | |
752 0x927217402c08c6e5 /* 848 */, 0x2a8ab754a795d9ee /* 849 */, | |
753 0xa442f7552f72943d /* 850 */, 0x2c31334e19781208 /* 851 */, | |
754 0x4fa98d7ceaee6291 /* 852 */, 0x55c3862f665db309 /* 853 */, | |
755 0xbd0610175d53b1f3 /* 854 */, 0x46fe6cb840413f27 /* 855 */, | |
756 0x3fe03792df0cfa59 /* 856 */, 0xcfe700372eb85e8f /* 857 */, | |
757 0xa7be29e7adbce118 /* 858 */, 0xe544ee5cde8431dd /* 859 */, | |
758 0x8a781b1b41f1873e /* 860 */, 0xa5c94c78a0d2f0e7 /* 861 */, | |
759 0x39412e2877b60728 /* 862 */, 0xa1265ef3afc9a62c /* 863 */, | |
760 0xbcc2770c6a2506c5 /* 864 */, 0x3ab66dd5dce1ce12 /* 865 */, | |
761 0xe65499d04a675b37 /* 866 */, 0x7d8f523481bfd216 /* 867 */, | |
762 0x0f6f64fcec15f389 /* 868 */, 0x74efbe618b5b13c8 /* 869 */, | |
763 0xacdc82b714273e1d /* 870 */, 0xdd40bfe003199d17 /* 871 */, | |
764 0x37e99257e7e061f8 /* 872 */, 0xfa52626904775aaa /* 873 */, | |
765 0x8bbbf63a463d56f9 /* 874 */, 0xf0013f1543a26e64 /* 875 */, | |
766 0xa8307e9f879ec898 /* 876 */, 0xcc4c27a4150177cc /* 877 */, | |
767 0x1b432f2cca1d3348 /* 878 */, 0xde1d1f8f9f6fa013 /* 879 */, | |
768 0x606602a047a7ddd6 /* 880 */, 0xd237ab64cc1cb2c7 /* 881 */, | |
769 0x9b938e7225fcd1d3 /* 882 */, 0xec4e03708e0ff476 /* 883 */, | |
770 0xfeb2fbda3d03c12d /* 884 */, 0xae0bced2ee43889a /* 885 */, | |
771 0x22cb8923ebfb4f43 /* 886 */, 0x69360d013cf7396d /* 887 */, | |
772 0x855e3602d2d4e022 /* 888 */, 0x073805bad01f784c /* 889 */, | |
773 0x33e17a133852f546 /* 890 */, 0xdf4874058ac7b638 /* 891 */, | |
774 0xba92b29c678aa14a /* 892 */, 0x0ce89fc76cfaadcd /* 893 */, | |
775 0x5f9d4e0908339e34 /* 894 */, 0xf1afe9291f5923b9 /* 895 */, | |
776 0x6e3480f60f4a265f /* 896 */, 0xeebf3a2ab29b841c /* 897 */, | |
777 0xe21938a88f91b4ad /* 898 */, 0x57dfeff845c6d3c3 /* 899 */, | |
778 0x2f006b0bf62caaf2 /* 900 */, 0x62f479ef6f75ee78 /* 901 */, | |
779 0x11a55ad41c8916a9 /* 902 */, 0xf229d29084fed453 /* 903 */, | |
780 0x42f1c27b16b000e6 /* 904 */, 0x2b1f76749823c074 /* 905 */, | |
781 0x4b76eca3c2745360 /* 906 */, 0x8c98f463b91691bd /* 907 */, | |
782 0x14bcc93cf1ade66a /* 908 */, 0x8885213e6d458397 /* 909 */, | |
783 0x8e177df0274d4711 /* 910 */, 0xb49b73b5503f2951 /* 911 */, | |
784 0x10168168c3f96b6b /* 912 */, 0x0e3d963b63cab0ae /* 913 */, | |
785 0x8dfc4b5655a1db14 /* 914 */, 0xf789f1356e14de5c /* 915 */, | |
786 0x683e68af4e51dac1 /* 916 */, 0xc9a84f9d8d4b0fd9 /* 917 */, | |
787 0x3691e03f52a0f9d1 /* 918 */, 0x5ed86e46e1878e80 /* 919 */, | |
788 0x3c711a0e99d07150 /* 920 */, 0x5a0865b20c4e9310 /* 921 */, | |
789 0x56fbfc1fe4f0682e /* 922 */, 0xea8d5de3105edf9b /* 923 */, | |
790 0x71abfdb12379187a /* 924 */, 0x2eb99de1bee77b9c /* 925 */, | |
791 0x21ecc0ea33cf4523 /* 926 */, 0x59a4d7521805c7a1 /* 927 */, | |
792 0x3896f5eb56ae7c72 /* 928 */, 0xaa638f3db18f75dc /* 929 */, | |
793 0x9f39358dabe9808e /* 930 */, 0xb7defa91c00b72ac /* 931 */, | |
794 0x6b5541fd62492d92 /* 932 */, 0x6dc6dee8f92e4d5b /* 933 */, | |
795 0x353f57abc4beea7e /* 934 */, 0x735769d6da5690ce /* 935 */, | |
796 0x0a234aa642391484 /* 936 */, 0xf6f9508028f80d9d /* 937 */, | |
797 0xb8e319a27ab3f215 /* 938 */, 0x31ad9c1151341a4d /* 939 */, | |
798 0x773c22a57bef5805 /* 940 */, 0x45c7561a07968633 /* 941 */, | |
799 0xf913da9e249dbe36 /* 942 */, 0xda652d9b78a64c68 /* 943 */, | |
800 0x4c27a97f3bc334ef /* 944 */, 0x76621220e66b17f4 /* 945 */, | |
801 0x967743899acd7d0b /* 946 */, 0xf3ee5bcae0ed6782 /* 947 */, | |
802 0x409f753600c879fc /* 948 */, 0x06d09a39b5926db6 /* 949 */, | |
803 0x6f83aeb0317ac588 /* 950 */, 0x01e6ca4a86381f21 /* 951 */, | |
804 0x66ff3462d19f3025 /* 952 */, 0x72207c24ddfd3bfb /* 953 */, | |
805 0x4af6b6d3e2ece2eb /* 954 */, 0x9c994dbec7ea08de /* 955 */, | |
806 0x49ace597b09a8bc4 /* 956 */, 0xb38c4766cf0797ba /* 957 */, | |
807 0x131b9373c57c2a75 /* 958 */, 0xb1822cce61931e58 /* 959 */, | |
808 0x9d7555b909ba1c0c /* 960 */, 0x127fafdd937d11d2 /* 961 */, | |
809 0x29da3badc66d92e4 /* 962 */, 0xa2c1d57154c2ecbc /* 963 */, | |
810 0x58c5134d82f6fe24 /* 964 */, 0x1c3ae3515b62274f /* 965 */, | |
811 0xe907c82e01cb8126 /* 966 */, 0xf8ed091913e37fcb /* 967 */, | |
812 0x3249d8f9c80046c9 /* 968 */, 0x80cf9bede388fb63 /* 969 */, | |
813 0x1881539a116cf19e /* 970 */, 0x5103f3f76bd52457 /* 971 */, | |
814 0x15b7e6f5ae47f7a8 /* 972 */, 0xdbd7c6ded47e9ccf /* 973 */, | |
815 0x44e55c410228bb1a /* 974 */, 0xb647d4255edb4e99 /* 975 */, | |
816 0x5d11882bb8aafc30 /* 976 */, 0xf5098bbb29d3212a /* 977 */, | |
817 0x8fb5ea14e90296b3 /* 978 */, 0x677b942157dd025a /* 979 */, | |
818 0xfb58e7c0a390acb5 /* 980 */, 0x89d3674c83bd4a01 /* 981 */, | |
819 0x9e2da4df4bf3b93b /* 982 */, 0xfcc41e328cab4829 /* 983 */, | |
820 0x03f38c96ba582c52 /* 984 */, 0xcad1bdbd7fd85db2 /* 985 */, | |
821 0xbbb442c16082ae83 /* 986 */, 0xb95fe86ba5da9ab0 /* 987 */, | |
822 0xb22e04673771a93f /* 988 */, 0x845358c9493152d8 /* 989 */, | |
823 0xbe2a488697b4541e /* 990 */, 0x95a2dc2dd38e6966 /* 991 */, | |
824 0xc02c11ac923c852b /* 992 */, 0x2388b1990df2a87b /* 993 */, | |
825 0x7c8008fa1b4f37be /* 994 */, 0x1f70d0c84d54e503 /* 995 */, | |
826 0x5490adec7ece57d4 /* 996 */, 0x002b3c27d9063a3a /* 997 */, | |
827 0x7eaea3848030a2bf /* 998 */, 0xc602326ded2003c0 /* 999 */, | |
828 0x83a7287d69a94086 /* 1000 */, 0xc57a5fcb30f57a8a /* 1001 */, | |
829 0xb56844e479ebe779 /* 1002 */, 0xa373b40f05dcbce9 /* 1003 */, | |
830 0xd71a786e88570ee2 /* 1004 */, 0x879cbacdbde8f6a0 /* 1005 */, | |
831 0x976ad1bcc164a32f /* 1006 */, 0xab21e25e9666d78b /* 1007 */, | |
832 0x901063aae5e5c33c /* 1008 */, 0x9818b34448698d90 /* 1009 */, | |
833 0xe36487ae3e1e8abb /* 1010 */, 0xafbdf931893bdcb4 /* 1011 */, | |
834 0x6345a0dc5fbbd519 /* 1012 */, 0x8628fe269b9465ca /* 1013 */, | |
835 0x1e5d01603f9c51ec /* 1014 */, 0x4de44006a15049b7 /* 1015 */, | |
836 0xbf6c70e5f776cbb1 /* 1016 */, 0x411218f2ef552bed /* 1017 */, | |
837 0xcb0c0708705a36a3 /* 1018 */, 0xe74d14754f986044 /* 1019 */, | |
838 0xcd56d9430ea8280e /* 1020 */, 0xc12591d7535f5065 /* 1021 */, | |
839 0xc83223f1720aef96 /* 1022 */, 0xc3a0396f7363a51f /* 1023 */ | |
840 ]; | |
841 | |
842 | |
843 /******************************************************************************* | |
844 | |
845 *******************************************************************************/ | |
846 | |
847 version (UnitTest) | |
848 { | |
849 unittest | |
850 { | |
851 static char[][] strings = [ | |
852 "", | |
853 "abc", | |
854 "Tiger", | |
855 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-", | |
856 "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789", | |
857 "Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham", | |
858 "Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham, proceedings of Fast Software Encryption 3, Cambridge.", | |
859 "Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham, proceedings of Fast Software Encryption 3, Cambridge, 1996.", | |
860 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-" | |
861 ]; | |
862 static char[][] results = [ | |
863 "24f0130c63ac933216166e76b1bb925ff373de2d49584e7a", | |
864 "f258c1e88414ab2a527ab541ffc5b8bf935f7b951c132951", | |
865 "9f00f599072300dd276abb38c8eb6dec37790c116f9d2bdf", | |
866 "87fb2a9083851cf7470d2cf810e6df9eb586445034a5a386", | |
867 "467db80863ebce488df1cd1261655de957896565975f9197", | |
868 "0c410a042968868a1671da5a3fd29a725ec1e457d3cdb303", | |
869 "ebf591d5afa655ce7f22894ff87f54ac89c811b6b0da3193", | |
870 "3d9aeb03d1bd1a6357b2774dfd6d5b24dd68151d503974fc", | |
871 "00b83eb4e53440c576ac6aaee0a7485825fd15e70a59ffe4" | |
872 ]; | |
873 | |
874 Tiger h = new Tiger(); | |
875 | |
876 foreach(int i, char[] s; strings) { | |
877 h.update(cast(ubyte[]) s); | |
878 | |
879 char[] d = h.hexDigest(); | |
880 | |
881 assert(d == results[i],":("~s~")("~d~")!=("~results[i]~")"); | |
882 | |
883 } | |
884 | |
885 ubyte[65536] buffer; | |
886 | |
887 for (uint i = 0; i < 65536; i++) | |
888 buffer[i] = cast(ubyte) i; | |
889 | |
890 h.update(buffer); | |
891 char[] e = h.hexDigest(); | |
892 | |
893 assert(e == "8ef43951b3f5f4fd1d41afe51b420e710462f233c3aaa8e1", | |
894 ":(65k)("~e~")!=(8ef43951b3f5f4fd1d41afe51b420e710462f233c3aaa8e1)"); | |
895 } | |
896 } |