~ubuntu-branches/debian/squeeze/f-spot/squeeze

« back to all changes in this revision

Viewing changes to dpap-sharp/lib/BrokenMD5.cs

  • Committer: Bazaar Package Importer
  • Author(s): Iain Lane, Mirco Bauer, Iain Lane
  • Date: 2009-02-07 20:23:32 UTC
  • mfrom: (1.1.18 upstream)
  • Revision ID: james.westby@ubuntu.com-20090207202332-oc93rfjo1st0571s
Tags: 0.5.0.3-2
[ Mirco Bauer]
* Upload to unstable.
* debian/control:
  + Lowered GNOME# build-deps to 2.0 ABI as that transition didn't happen
    yet in unstable.

[ Iain Lane ]
* debian/patches/svn-r4545_locales-import.dpatch: Patch backported from SVN
  trunk revision 4545 - initialize the translation catalog earlier (LP: #293305)
  (Closes: #514457). Thanks to Florian Heinle for finding the patch and to
  Chris Coulson for preparing the update.
* debian/control: Build-depend on libmono-dev (>= 1.2.4) to match configure
  checks.
* debian/rules: Pass CSC=/usr/bin/csc to configure for gio-sharp to fix FTBFS

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// BrokenMD5.cs
 
2
//
 
3
// Author:
 
4
//   James Willcox <snorp@snorp.net>
 
5
//
 
6
// Copyright (C) 2005  James Willcox <snorp@snorp.net>
 
7
// 
 
8
// This library is free software; you can redistribute it and/or
 
9
// modify it under the terms of the GNU Lesser General Public
 
10
// License as published by the Free Software Foundation; either
 
11
// version 2.1 of the License, or (at your option) any later version.
 
12
// 
 
13
// This library is distributed in the hope that it will be useful,
 
14
// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
15
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
16
// Lesser General Public License for more details.
 
17
// 
 
18
// You should have received a copy of the GNU Lesser General Public
 
19
// License along with this library; if not, write to the Free Software
 
20
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
21
// 
 
22
//
 
23
// BrokenMD5 Class implementation
 
24
//
 
25
// Authors:
 
26
//      Matthew S. Ford (Matthew.S.Ford@Rose-Hulman.Edu)
 
27
//      Sebastien Pouliot (sebastien@ximian.com)
 
28
//      Jon Lech Johansen (jon@nanocrew.net)
 
29
//
 
30
// Copyright 2001 by Matthew S. Ford.
 
31
// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
 
32
//
 
33
// Permission is hereby granted, free of charge, to any person obtaining
 
34
// a copy of this software and associated documentation files (the
 
35
// "Software"), to deal in the Software without restriction, including
 
36
// without limitation the rights to use, copy, modify, merge, publish,
 
37
// distribute, sublicense, and/or sell copies of the Software, and to
 
38
// permit persons to whom the Software is furnished to do so, subject to
 
39
// the following conditions:
 
40
// 
 
41
// The above copyright notice and this permission notice shall be
 
42
// included in all copies or substantial portions of the Software.
 
43
// 
 
44
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 
45
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 
46
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 
47
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 
48
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 
49
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 
50
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
51
//
 
52
 
 
53
using System;
 
54
using System.Runtime.InteropServices;
 
55
using System.Security.Cryptography;
 
56
 
 
57
namespace DPAP {
 
58
 
 
59
    internal class BrokenMD5 : MD5 {
 
60
        private const int BLOCK_SIZE_BYTES =  64;
 
61
        private const int HASH_SIZE_BYTES  =  16;
 
62
        private uint [] _H;
 
63
        private uint [] buff;
 
64
        private ulong count;
 
65
        private byte [] _ProcessingBuffer;   // Used to start data when passed less than a block worth.
 
66
        private int _ProcessingBufferCount; // Counts how much data we have stored that still needs processed.
 
67
        private int _version;
 
68
        
 
69
        public BrokenMD5 ( int version ) 
 
70
        {
 
71
            _H = new uint [4];
 
72
            buff = new uint [16];
 
73
            _ProcessingBuffer = new byte [BLOCK_SIZE_BYTES];
 
74
            _version = version;
 
75
 
 
76
            Initialize ();
 
77
        }
 
78
 
 
79
        ~BrokenMD5 () 
 
80
        {
 
81
            Dispose (false);
 
82
        }
 
83
 
 
84
        protected override void Dispose (bool disposing) 
 
85
        {
 
86
            if (_ProcessingBuffer != null) {
 
87
                Array.Clear (_ProcessingBuffer, 0, _ProcessingBuffer.Length);
 
88
                _ProcessingBuffer = null;
 
89
            }
 
90
            if (_H != null) {
 
91
                Array.Clear (_H, 0, _H.Length);
 
92
                _H = null;
 
93
            }
 
94
            if (buff != null) {
 
95
                Array.Clear (buff, 0, buff.Length);
 
96
                buff = null;
 
97
            }
 
98
        }
 
99
 
 
100
        protected override void HashCore (byte [] rgb, int start, int size) 
 
101
        {
 
102
            int i;
 
103
            State = 1;
 
104
 
 
105
            if (_ProcessingBufferCount != 0) {
 
106
                if (size < (BLOCK_SIZE_BYTES - _ProcessingBufferCount)) {
 
107
                    System.Buffer.BlockCopy (rgb, start, _ProcessingBuffer, _ProcessingBufferCount, size);
 
108
                    _ProcessingBufferCount += size;
 
109
                    return;
 
110
                }
 
111
                else {
 
112
                    i = (BLOCK_SIZE_BYTES - _ProcessingBufferCount);
 
113
                    System.Buffer.BlockCopy (rgb, start, _ProcessingBuffer, _ProcessingBufferCount, i);
 
114
                    ProcessBlock (_ProcessingBuffer, 0);
 
115
                    _ProcessingBufferCount = 0;
 
116
                    start += i;
 
117
                    size -= i;
 
118
                }
 
119
            }
 
120
 
 
121
            for (i=0; i<size-size%BLOCK_SIZE_BYTES; i += BLOCK_SIZE_BYTES) {
 
122
                ProcessBlock (rgb, start+i);
 
123
            }
 
124
 
 
125
            if (size%BLOCK_SIZE_BYTES != 0) {
 
126
                System.Buffer.BlockCopy (rgb, size-size%BLOCK_SIZE_BYTES+start, _ProcessingBuffer, 0, size%BLOCK_SIZE_BYTES);
 
127
                _ProcessingBufferCount = size%BLOCK_SIZE_BYTES;
 
128
            }
 
129
        }
 
130
        
 
131
        protected override byte [] HashFinal () 
 
132
        {
 
133
            byte [] hash = new byte [16];
 
134
            int i, j;
 
135
 
 
136
            ProcessFinalBlock (_ProcessingBuffer, 0, _ProcessingBufferCount);
 
137
 
 
138
            for (i=0; i<4; i++) {
 
139
                for (j=0; j<4; j++) {
 
140
                    hash [i*4+j] = (byte) (_H [i] >> j*8);
 
141
                }
 
142
            }
 
143
 
 
144
            return hash;
 
145
        }
 
146
 
 
147
        public override void Initialize () 
 
148
        {
 
149
            count = 0;
 
150
            _ProcessingBufferCount = 0;
 
151
 
 
152
            _H [0] = 0x67452301;
 
153
            _H [1] = 0xefcdab89;
 
154
            _H [2] = 0x98badcfe;
 
155
            _H [3] = 0x10325476;
 
156
        }
 
157
 
 
158
        private void ProcessBlock (byte [] inputBuffer, int inputOffset) 
 
159
        {
 
160
            uint a, b, c, d;
 
161
            int i;
 
162
                
 
163
            count += BLOCK_SIZE_BYTES;
 
164
                
 
165
            for (i=0; i<16; i++) {
 
166
                buff [i] = (uint) (inputBuffer [inputOffset+4*i])
 
167
                    | ( ( (uint) (inputBuffer [inputOffset+4*i+1])) <<  8)
 
168
                    | ( ( (uint) (inputBuffer [inputOffset+4*i+2])) << 16)
 
169
                    | ( ( (uint) (inputBuffer [inputOffset+4*i+3])) << 24);
 
170
            }
 
171
                
 
172
            a = _H [0];
 
173
            b = _H [1];
 
174
            c = _H [2];
 
175
            d = _H [3];
 
176
                
 
177
            // This function was unrolled because it seems to be doubling our performance with current compiler/VM.
 
178
            // Possibly roll up if this changes.
 
179
 
 
180
            // ---- Round 1 --------
 
181
 
 
182
            a += ( ( (c ^ d) & b) ^ d) + (uint) K [0] + buff [0];
 
183
            a = (a << 7) | (a >> 25);
 
184
            a += b;
 
185
 
 
186
            d += ( ( (b ^ c) & a) ^ c) + (uint) K [1] + buff [1];
 
187
            d = (d << 12) | (d >> 20);
 
188
            d += a;
 
189
 
 
190
            c += ( ( (a ^ b) & d) ^ b) + (uint) K [2] + buff [2];
 
191
            c = (c << 17) | (c >> 15);
 
192
            c += d;
 
193
 
 
194
            b += ( ( (d ^ a) & c) ^ a) + (uint) K [3] + buff [3];
 
195
            b = (b << 22) | (b >> 10);
 
196
            b += c;
 
197
 
 
198
            a += ( ( (c ^ d) & b) ^ d) + (uint) K [4] + buff [4];
 
199
            a = (a << 7) | (a >> 25);
 
200
            a += b;
 
201
 
 
202
            d += ( ( (b ^ c) & a) ^ c) + (uint) K [5] + buff [5];
 
203
            d = (d << 12) | (d >> 20);
 
204
            d += a;
 
205
 
 
206
            c += ( ( (a ^ b) & d) ^ b) + (uint) K [6] + buff [6];
 
207
            c = (c << 17) | (c >> 15);
 
208
            c += d;
 
209
 
 
210
            b += ( ( (d ^ a) & c) ^ a) + (uint) K [7] + buff [7];
 
211
            b = (b << 22) | (b >> 10);
 
212
            b += c;
 
213
 
 
214
            a += ( ( (c ^ d) & b) ^ d) + (uint) K [8] + buff [8];
 
215
            a = (a << 7) | (a >> 25);
 
216
            a += b;
 
217
 
 
218
            d += ( ( (b ^ c) & a) ^ c) + (uint) K [9] + buff [9];
 
219
            d = (d << 12) | (d >> 20);
 
220
            d += a;
 
221
 
 
222
            c += ( ( (a ^ b) & d) ^ b) + (uint) K [10] + buff [10];
 
223
            c = (c << 17) | (c >> 15);
 
224
            c += d;
 
225
 
 
226
            b += ( ( (d ^ a) & c) ^ a) + (uint) K [11] + buff [11];
 
227
            b = (b << 22) | (b >> 10);
 
228
            b += c;
 
229
 
 
230
            a += ( ( (c ^ d) & b) ^ d) + (uint) K [12] + buff [12];
 
231
            a = (a << 7) | (a >> 25);
 
232
            a += b;
 
233
 
 
234
            d += ( ( (b ^ c) & a) ^ c) + (uint) K [13] + buff [13];
 
235
            d = (d << 12) | (d >> 20);
 
236
            d += a;
 
237
 
 
238
            c += ( ( (a ^ b) & d) ^ b) + (uint) K [14] + buff [14];
 
239
            c = (c << 17) | (c >> 15);
 
240
            c += d;
 
241
 
 
242
            b += ( ( (d ^ a) & c) ^ a) + (uint) K [15] + buff [15];
 
243
            b = (b << 22) | (b >> 10);
 
244
            b += c;
 
245
 
 
246
 
 
247
            // ---- Round 2 --------
 
248
  
 
249
            a += ( ( (b ^ c) & d) ^ c) + (uint) K [16] + buff [1];
 
250
            a = (a << 5) | (a >> 27);
 
251
            a += b;
 
252
 
 
253
            d += ( ( (a ^ b) & c) ^ b) + (uint) K [17] + buff [6];
 
254
            d = (d << 9) | (d >> 23);
 
255
            d += a;
 
256
 
 
257
            c += ( ( (d ^ a) & b) ^ a) + (uint) K [18] + buff [11];
 
258
            c = (c << 14) | (c >> 18);
 
259
            c += d;
 
260
 
 
261
            b += ( ( (c ^ d) & a) ^ d) + (uint) K [19] + buff [0];
 
262
            b = (b << 20) | (b >> 12);
 
263
            b += c;
 
264
 
 
265
            a += ( ( (b ^ c) & d) ^ c) + (uint) K [20] + buff [5];
 
266
            a = (a << 5) | (a >> 27);
 
267
            a += b;
 
268
 
 
269
            d += ( ( (a ^ b) & c) ^ b) + (uint) K [21] + buff [10];
 
270
            d = (d << 9) | (d >> 23);
 
271
            d += a;
 
272
 
 
273
            c += ( ( (d ^ a) & b) ^ a) + (uint) K [22] + buff [15];
 
274
            c = (c << 14) | (c >> 18);
 
275
            c += d;
 
276
 
 
277
            b += ( ( (c ^ d) & a) ^ d) + (uint) K [23] + buff [4];
 
278
            b = (b << 20) | (b >> 12);
 
279
            b += c;
 
280
 
 
281
            a += ( ( (b ^ c) & d) ^ c) + (uint) K [24] + buff [9];
 
282
            a = (a << 5) | (a >> 27);
 
283
            a += b;
 
284
 
 
285
            d += ( ( (a ^ b) & c) ^ b) + (uint) K [25] + buff [14];
 
286
            d = (d << 9) | (d >> 23);
 
287
            d += a;
 
288
 
 
289
            c += ( ( (d ^ a) & b) ^ a) + (uint) K [26] + buff [3];
 
290
            c = (c << 14) | (c >> 18);
 
291
            c += d;
 
292
 
 
293
            if ( _version == 1 )
 
294
            {
 
295
                b += ( ( (c ^ d) & a) ^ d) + (uint) 0x445a14ed + buff [8];
 
296
                b = (b << 20) | (b >> 12);
 
297
                b += c;
 
298
            }
 
299
            else
 
300
            {
 
301
                b += ( ( (c ^ d) & a) ^ d) + (uint) K [27] + buff [8];
 
302
                b = (b << 20) | (b >> 12);
 
303
                b += c;
 
304
            }
 
305
 
 
306
            a += ( ( (b ^ c) & d) ^ c) + (uint) K [28] + buff [13];
 
307
            a = (a << 5) | (a >> 27);
 
308
            a += b;
 
309
 
 
310
            d += ( ( (a ^ b) & c) ^ b) + (uint) K [29] + buff [2];
 
311
            d = (d << 9) | (d >> 23);
 
312
            d += a;
 
313
 
 
314
            c += ( ( (d ^ a) & b) ^ a) + (uint) K [30] + buff [7];
 
315
            c = (c << 14) | (c >> 18);
 
316
            c += d;
 
317
 
 
318
            b += ( ( (c ^ d) & a) ^ d) + (uint) K [31] + buff [12];
 
319
            b = (b << 20) | (b >> 12);
 
320
            b += c;
 
321
 
 
322
 
 
323
            // ---- Round 3 --------
 
324
  
 
325
            a += (b ^ c ^ d) + (uint) K [32] + buff [5];
 
326
            a = (a << 4) | (a >> 28);
 
327
            a += b;
 
328
 
 
329
            d += (a ^ b ^ c) + (uint) K [33] + buff [8];
 
330
            d = (d << 11) | (d >> 21);
 
331
            d += a;
 
332
 
 
333
            c += (d ^ a ^ b) + (uint) K [34] + buff [11];
 
334
            c = (c << 16) | (c >> 16);
 
335
            c += d;
 
336
 
 
337
            b += (c ^ d ^ a) + (uint) K [35] + buff [14];
 
338
            b = (b << 23) | (b >> 9);
 
339
            b += c;
 
340
 
 
341
            a += (b ^ c ^ d) + (uint) K [36] + buff [1];
 
342
            a = (a << 4) | (a >> 28);
 
343
            a += b;
 
344
 
 
345
            d += (a ^ b ^ c) + (uint) K [37] + buff [4];
 
346
            d = (d << 11) | (d >> 21);
 
347
            d += a;
 
348
 
 
349
            c += (d ^ a ^ b) + (uint) K [38] + buff [7];
 
350
            c = (c << 16) | (c >> 16);
 
351
            c += d;
 
352
 
 
353
            b += (c ^ d ^ a) + (uint) K [39] + buff [10];
 
354
            b = (b << 23) | (b >> 9);
 
355
            b += c;
 
356
 
 
357
            a += (b ^ c ^ d) + (uint) K [40] + buff [13];
 
358
            a = (a << 4) | (a >> 28);
 
359
            a += b;
 
360
 
 
361
            d += (a ^ b ^ c) + (uint) K [41] + buff [0];
 
362
            d = (d << 11) | (d >> 21);
 
363
            d += a;
 
364
 
 
365
            c += (d ^ a ^ b) + (uint) K [42] + buff [3];
 
366
            c = (c << 16) | (c >> 16);
 
367
            c += d;
 
368
 
 
369
            b += (c ^ d ^ a) + (uint) K [43] + buff [6];
 
370
            b = (b << 23) | (b >> 9);
 
371
            b += c;
 
372
 
 
373
            a += (b ^ c ^ d) + (uint) K [44] + buff [9];
 
374
            a = (a << 4) | (a >> 28);
 
375
            a += b;
 
376
 
 
377
            d += (a ^ b ^ c) + (uint) K [45] + buff [12];
 
378
            d = (d << 11) | (d >> 21);
 
379
            d += a;
 
380
 
 
381
            c += (d ^ a ^ b) + (uint) K [46] + buff [15];
 
382
            c = (c << 16) | (c >> 16);
 
383
            c += d;
 
384
 
 
385
            b += (c ^ d ^ a) + (uint) K [47] + buff [2];
 
386
            b = (b << 23) | (b >> 9);
 
387
            b += c;
 
388
 
 
389
 
 
390
            // ---- Round 4 --------
 
391
  
 
392
            a += ( ( (~d) | b) ^ c) + (uint) K [48] + buff [0];
 
393
            a = (a << 6) | (a >> 26);
 
394
            a += b;
 
395
 
 
396
            d += ( ( (~c) | a) ^ b) + (uint) K [49] + buff [7];
 
397
            d = (d << 10) | (d >> 22);
 
398
            d += a;
 
399
 
 
400
            c += ( ( (~b) | d) ^ a) + (uint) K [50] + buff [14];
 
401
            c = (c << 15) | (c >> 17);
 
402
            c += d;
 
403
 
 
404
            b += ( ( (~a) | c) ^ d) + (uint) K [51] + buff [5];
 
405
            b = (b << 21) | (b >> 11);
 
406
            b += c;
 
407
 
 
408
            a += ( ( (~d) | b) ^ c) + (uint) K [52] + buff [12];
 
409
            a = (a << 6) | (a >> 26);
 
410
            a += b;
 
411
 
 
412
            d += ( ( (~c) | a) ^ b) + (uint) K [53] + buff [3];
 
413
            d = (d << 10) | (d >> 22);
 
414
            d += a;
 
415
 
 
416
            c += ( ( (~b) | d) ^ a) + (uint) K [54] + buff [10];
 
417
            c = (c << 15) | (c >> 17);
 
418
            c += d;
 
419
 
 
420
            b += ( ( (~a) | c) ^ d) + (uint) K [55] + buff [1];
 
421
            b = (b << 21) | (b >> 11);
 
422
            b += c;
 
423
 
 
424
            a += ( ( (~d) | b) ^ c) + (uint) K [56] + buff [8];
 
425
            a = (a << 6) | (a >> 26);
 
426
            a += b;
 
427
 
 
428
            d += ( ( (~c) | a) ^ b) + (uint) K [57] + buff [15];
 
429
            d = (d << 10) | (d >> 22);
 
430
            d += a;
 
431
 
 
432
            c += ( ( (~b) | d) ^ a) + (uint) K [58] + buff [6];
 
433
            c = (c << 15) | (c >> 17);
 
434
            c += d;
 
435
 
 
436
            b += ( ( (~a) | c) ^ d) + (uint) K [59] + buff [13];
 
437
            b = (b << 21) | (b >> 11);
 
438
            b += c;
 
439
 
 
440
            a += ( ( (~d) | b) ^ c) + (uint) K [60] + buff [4];
 
441
            a = (a << 6) | (a >> 26);
 
442
            a += b;
 
443
 
 
444
            d += ( ( (~c) | a) ^ b) + (uint) K [61] + buff [11];
 
445
            d = (d << 10) | (d >> 22);
 
446
            d += a;
 
447
 
 
448
            c += ( ( (~b) | d) ^ a) + (uint) K [62] + buff [2];
 
449
            c = (c << 15) | (c >> 17);
 
450
            c += d;
 
451
 
 
452
            b += ( ( (~a) | c) ^ d) + (uint) K [63] + buff [9];
 
453
            b = (b << 21) | (b >> 11);
 
454
            b += c;
 
455
 
 
456
            _H [0] += a;
 
457
            _H [1] += b;
 
458
            _H [2] += c;
 
459
            _H [3] += d;
 
460
        }
 
461
                
 
462
        private void ProcessFinalBlock (byte [] inputBuffer, int inputOffset, int inputCount) 
 
463
        {
 
464
            ulong total = count + (ulong)inputCount;
 
465
            int paddingSize = (int) (56 - total % BLOCK_SIZE_BYTES);
 
466
 
 
467
            if (paddingSize < 1)
 
468
                paddingSize += BLOCK_SIZE_BYTES;
 
469
 
 
470
            byte [] fooBuffer = new byte [inputCount+paddingSize+8];
 
471
 
 
472
            for (int i=0; i<inputCount; i++) {
 
473
                fooBuffer [i] = inputBuffer [i+inputOffset];
 
474
            }
 
475
 
 
476
            fooBuffer [inputCount] = 0x80;
 
477
            for (int i=inputCount+1; i<inputCount+paddingSize; i++) {
 
478
                fooBuffer [i] = 0x00;
 
479
            }
 
480
 
 
481
            // I deal in bytes. The algorithm deals in bits.
 
482
            ulong size = total << 3;
 
483
            AddLength (size, fooBuffer, inputCount+paddingSize);
 
484
            ProcessBlock (fooBuffer, 0);
 
485
 
 
486
            if (inputCount+paddingSize+8 == 128) {
 
487
                ProcessBlock (fooBuffer, 64);
 
488
            }
 
489
        }
 
490
 
 
491
        internal void AddLength (ulong length, byte [] buffer, int position)
 
492
        {
 
493
            buffer [position++] = (byte) (length);
 
494
            buffer [position++] = (byte) (length >>  8);
 
495
            buffer [position++] = (byte) (length >> 16);
 
496
            buffer [position++] = (byte) (length >> 24);
 
497
            buffer [position++] = (byte) (length >> 32);
 
498
            buffer [position++] = (byte) (length >> 40);
 
499
            buffer [position++] = (byte) (length >> 48);
 
500
            buffer [position]   = (byte) (length >> 56);
 
501
        }
 
502
 
 
503
        private readonly static uint [] K = {
 
504
            0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,
 
505
            0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, 
 
506
            0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,
 
507
            0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821,
 
508
            0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa,
 
509
            0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8,
 
510
            0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed,
 
511
            0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a,
 
512
            0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c,
 
513
            0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70,
 
514
            0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05,
 
515
            0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665,
 
516
            0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039,
 
517
            0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1,
 
518
            0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1,
 
519
            0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391
 
520
        };
 
521
    }
 
522
}