Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6419 hidnplayr 1
;    aes256.inc - AES256
2
;
3
;    Copyright (C) 2016 Ivan Baravy (dunkaist)
4
;    Copyright (C) 2016 Jeffrey Amelynck
5
;
6
;    This program is free software: you can redistribute it and/or modify
7
;    it under the terms of the GNU General Public License as published by
8
;    the Free Software Foundation, either version 3 of the License, or
9
;    (at your option) any later version.
10
;
11
;    This program is distributed in the hope that it will be useful,
12
;    but WITHOUT ANY WARRANTY; without even the implied warranty of
13
;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
;    GNU General Public License for more details.
15
;
16
;    You should have received a copy of the GNU General Public License
17
;    along with this program.  If not, see .
18
 
6469 hidnplayr 19
AES256_ROUNDS           = 14
20
AES256_BLOCKSIZE        = 16
6419 hidnplayr 21
 
22
struct aes256_context
23
        key     rd 4*(AES256_ROUNDS+1)
24
ends
25
 
26
 
27
proc aes256_set_encrypt_key _ctx, _userkey
28
locals
29
        i       dd ?
30
endl
31
        push    ebx esi edi
32
 
33
        mov     [i], 0
34
        mov     ebx, [_ctx]
35
 
36
        mov     esi, [_userkey]
37
        lea     edi, [ebx + aes256_context.key]
6469 hidnplayr 38
repeat 8
6419 hidnplayr 39
        lodsd
40
        bswap   eax
41
        stosd
6469 hidnplayr 42
end repeat
6419 hidnplayr 43
 
44
        lea     esi, [ebx + aes256_context.key]
45
 
46
  .while:
47
        mov     ebx, [esi + 4*7]
48
 
49
        mov     ecx, [esi + 4*0]
50
 
51
        mov     eax, ebx
52
        shr     eax, 16
53
        movzx   eax, al
54
        mov     eax, [Te2 + 4*eax]
55
        and     eax, 0xff000000
56
        xor     ecx, eax
57
 
58
        mov     eax, ebx
59
        shr     eax, 8
60
        movzx   eax, al
61
        mov     eax, [Te3 + 4*eax]
62
        and     eax, 0x00ff0000
63
        xor     ecx, eax
64
 
65
        mov     eax, ebx
66
        shr     eax, 0
67
        movzx   eax, al
68
        mov     eax, [Te0 + 4*eax]
69
        and     eax, 0x0000ff00
70
        xor     ecx, eax
71
 
72
        mov     eax, ebx
73
        shr     eax, 24
74
        mov     eax, [Te1 + 4*eax]
75
        and     eax, 0x000000ff
76
        xor     ecx, eax
77
 
78
        mov     eax, [i]
79
        xor     ecx, [rcon + 4*eax]
80
 
81
        mov     [esi + 4*8], ecx
82
 
83
 
84
        xor     ecx, [esi + 4*1]
85
        mov     [esi + 4*9], ecx
86
 
87
        xor     ecx, [esi + 4*2]
88
        mov     [esi + 4*10], ecx
89
 
90
        xor     ecx, [esi + 4*3]
91
        mov     [esi + 4*11], ecx
92
 
93
 
94
        inc     [i]
95
        cmp     [i], 7
96
        jz      .done
97
 
98
 
99
        mov     ebx, [esi + 4*11]
100
 
101
        mov     ecx, [esi + 4*4]
102
 
103
        mov     eax, ebx
104
        shr     eax, 24
105
        mov     eax, [Te2 + 4*eax]
106
        and     eax, 0xff000000
107
        xor     ecx, eax
108
 
109
        mov     eax, ebx
110
        shr     eax, 16
111
        movzx   eax, al
112
        mov     eax, [Te3 + 4*eax]
113
        and     eax, 0x00ff0000
114
        xor     ecx, eax
115
 
116
        mov     eax, ebx
117
        shr     eax, 8
118
        movzx   eax, al
119
        mov     eax, [Te0 + 4*eax]
120
        and     eax, 0x0000ff00
121
        xor     ecx, eax
122
 
123
        mov     eax, ebx
124
        shr     eax, 0
125
        movzx   eax, al
126
        mov     eax, [Te1 + 4*eax]
127
        and     eax, 0x000000ff
128
        xor     ecx, eax
129
 
130
        mov     [esi + 4*12], ecx
131
 
132
 
133
        xor     ecx, [esi + 4*5]
134
        mov     [esi + 4*13], ecx
135
 
136
        xor     ecx, [esi + 4*6]
137
        mov     [esi + 4*14], ecx
138
 
139
        xor     ecx, [esi + 4*7]
140
        mov     [esi + 4*15], ecx
141
 
142
        add     esi, 4*8
143
 
144
        jmp     .while
145
 
146
  .done:
147
        pop     edi esi ebx
148
        ret
149
endp
150
 
151
 
152
proc aes256_set_decrypt_key _ctx, _userkey
153
 
154
        push    ebx esi edi
155
 
156
        stdcall aes256_set_encrypt_key, [_ctx], [_userkey]
157
 
158
; Invert the order of the round keys
159
        mov     ebx, [_ctx]
160
        lea     esi, [ebx + aes256_context.key]
161
        lea     edi, [ebx + aes256_context.key + 4*4*AES256_ROUNDS]
162
  @@:
163
        mov     eax, [esi+0]
164
        mov     ebx, [edi+0]
165
        mov     [esi+0], ebx
166
        mov     [edi+0], eax
167
        mov     eax, [esi+4]
168
        mov     ebx, [edi+4]
169
        mov     [esi+4], ebx
170
        mov     [edi+4], eax
171
        mov     eax, [esi+8]
172
        mov     ebx, [edi+8]
173
        mov     [esi+8], ebx
174
        mov     [edi+8], eax
175
        mov     eax, [esi+12]
176
        mov     ebx, [edi+12]
177
        mov     [esi+12], ebx
178
        mov     [edi+12], eax
179
        add     esi, 4*4
180
        sub     edi, 4*4
181
        cmp     esi, edi
182
        jb      @r
183
 
184
; Apply the inverse MixColumn transform to all round keys but the first and the last
185
        mov     ecx, (AES256_ROUNDS-1)*4
186
        mov     ebx, [_ctx]
187
        lea     edi, [ebx + aes256_context.key + 16]
188
  .inverse:
189
        mov     eax, [edi]
190
        shr     eax, 24
191
        mov     eax, [Te1 + 4*eax]
192
        movzx   eax, al
193
        mov     ebx, [Td0 + 4*eax]
194
 
195
        mov     eax, [edi]
196
        shr     eax, 16
197
        movzx   eax, al
198
        mov     eax, [Te1 + 4*eax]
199
        movzx   eax, al
200
        mov     eax, [Td1 + 4*eax]
201
        xor     ebx, eax
202
 
203
        mov     eax, [edi]
204
        shr     eax, 8
205
        movzx   eax, al
206
        mov     eax, [Te1 + 4*eax]
207
        movzx   eax, al
208
        mov     eax, [Td2 + 4*eax]
209
        xor     ebx, eax
210
 
211
        mov     eax, [edi]
212
        movzx   eax, al
213
        mov     eax, [Te1 + 4*eax]
214
        movzx   eax, al
215
        mov     eax, [Td3 + 4*eax]
216
        xor     eax, ebx
217
        stosd
218
 
219
        dec     ecx
220
        jnz     .inverse
221
 
222
  .done:
223
        pop     edi esi ebx
224
        ret
225
endp
226
 
227
proc aes256_encrypt _key, _in, _out
228
locals
229
        s       rd 4
230
        t       rd 4
231
        r       dd ?
232
endl
233
        push    ebx esi edi
234
 
235
        DEBUGF  1,'input  : '
6469 hidnplayr 236
        stdcall dump_hex, [_in], 4
6419 hidnplayr 237
 
238
        mov     ebx, [_key]
239
        mov     esi, [_in]
240
        lea     edi, [s]
241
 
242
        mov     eax, [esi + 4*0]
243
        bswap   eax
244
        xor     eax, [ebx + 4*0]
245
        mov     [edi + 4*0], eax
246
 
247
        mov     eax, [esi + 4*1]
248
        bswap   eax
249
        xor     eax, [ebx + 4*1]
250
        mov     [edi + 4*1], eax
251
 
252
        mov     eax, [esi +  4*2]
253
        bswap   eax
254
        xor     eax, [ebx + 4*2]
255
        mov     [edi + 4*2], eax
256
 
257
        mov     eax, [esi + 4*3]
258
        bswap   eax
259
        xor     eax, [ebx + 4*3]
260
        mov     [edi + 4*3], eax
261
 
262
 
263
        mov     [r], AES256_ROUNDS SHR 1
264
 
265
  .for:
266
        lea     esi, [s]
267
        lea     edi, [t]
268
 
269
 
270
        mov     ecx, [ebx + 4*4]
271
 
272
        mov     eax, [esi + 4*0]
273
        shr     eax, 24
274
        mov     eax, [Te0 + 4*eax]
275
        xor     ecx, eax
276
 
277
        mov     eax, [esi + 4*1]
278
        shr     eax, 16
279
        movzx   eax, al
280
        mov     eax, [Te1 + 4*eax]
281
        xor     ecx, eax
282
 
283
        mov     eax, [esi + 4*2]
284
        shr     eax, 8
285
        movzx   eax, al
286
        mov     eax, [Te2 + 4*eax]
287
        xor     ecx, eax
288
 
289
        mov     eax, [esi + 4*3]
290
        movzx   eax, al
291
        mov     eax, [Te3 + 4*eax]
292
        xor     ecx, eax
293
 
294
        mov     [edi + 4*0], ecx
295
 
296
 
297
        mov     ecx, [ebx + 4*5]
298
 
299
        mov     eax, [esi + 4*1]
300
        shr     eax, 24
301
        mov     eax, [Te0 + 4*eax]
302
        xor     ecx, eax
303
 
304
        mov     eax, [esi + 4*2]
305
        shr     eax, 16
306
        movzx   eax, al
307
        mov     eax, [Te1 + 4*eax]
308
        xor     ecx, eax
309
 
310
        mov     eax, [esi + 4*3]
311
        shr     eax, 8
312
        movzx   eax, al
313
        mov     eax, [Te2 + 4*eax]
314
        xor     ecx, eax
315
 
316
        mov     eax, [esi + 4*0]
317
        movzx   eax, al
318
        mov     eax, [Te3 + 4*eax]
319
        xor     ecx, eax
320
 
321
        mov     [edi + 4*1], ecx
322
 
323
 
324
        mov     ecx, [ebx + 4*6]
325
 
326
        mov     eax, [esi + 4*2]
327
        shr     eax, 24
328
        mov     eax, [Te0 + 4*eax]
329
        xor     ecx, eax
330
 
331
        mov     eax, [esi + 4*3]
332
        shr     eax, 16
333
        movzx   eax, al
334
        mov     eax, [Te1 + 4*eax]
335
        xor     ecx, eax
336
 
337
        mov     eax, [esi + 4*0]
338
        shr     eax, 8
339
        movzx   eax, al
340
        mov     eax, [Te2 + 4*eax]
341
        xor     ecx, eax
342
 
343
        mov     eax, [esi + 4*1]
344
        movzx   eax, al
345
        mov     eax, [Te3 + 4*eax]
346
        xor     ecx, eax
347
 
348
        mov     [edi + 4*2], ecx
349
 
350
 
351
        mov     ecx, [ebx + 4*7]
352
 
353
        mov     eax, [esi + 4*3]
354
        shr     eax, 24
355
        mov     eax, [Te0 + 4*eax]
356
        xor     ecx, eax
357
 
358
        mov     eax, [esi + 4*0]
359
        shr     eax, 16
360
        movzx   eax, al
361
        mov     eax, [Te1 + 4*eax]
362
        xor     ecx, eax
363
 
364
        mov     eax, [esi + 4*1]
365
        shr     eax, 8
366
        movzx   eax, al
367
        mov     eax, [Te2 + 4*eax]
368
        xor     ecx, eax
369
 
370
        mov     eax, [esi + 4*2]
371
        movzx   eax, al
372
        mov     eax, [Te3 + 4*eax]
373
        xor     ecx, eax
374
 
375
        mov     [edi + 4*3], ecx
376
 
377
 
378
        add     ebx, 4*8
379
        dec     [r]
380
        jz      .end_for
381
 
382
 
383
        mov     ecx, [ebx + 4*0]
384
 
385
        mov     eax, [edi + 4*0]
386
        shr     eax, 24
387
        mov     eax, [Te0 + 4*eax]
388
        xor     ecx, eax
389
 
390
        mov     eax, [edi + 4*1]
391
        shr     eax, 16
392
        movzx   eax, al
393
        mov     eax, [Te1 + 4*eax]
394
        xor     ecx, eax
395
 
396
        mov     eax, [edi + 4*2]
397
        shr     eax, 8
398
        movzx   eax, al
399
        mov     eax, [Te2 + 4*eax]
400
        xor     ecx, eax
401
 
402
        mov     eax, [edi + 4*3]
403
        movzx   eax, al
404
        mov     eax, [Te3 + 4*eax]
405
        xor     ecx, eax
406
 
407
        mov     [esi + 4*0], ecx
408
 
409
 
410
        mov     ecx, [ebx + 4*1]
411
 
412
        mov     eax, [edi + 4*1]
413
        shr     eax, 24
414
        mov     eax, [Te0 + 4*eax]
415
        xor     ecx, eax
416
 
417
        mov     eax, [edi + 4*2]
418
        shr     eax, 16
419
        movzx   eax, al
420
        mov     eax, [Te1 + 4*eax]
421
        xor     ecx, eax
422
 
423
        mov     eax, [edi + 4*3]
424
        shr     eax, 8
425
        movzx   eax, al
426
        mov     eax, [Te2 + 4*eax]
427
        xor     ecx, eax
428
 
429
        mov     eax, [edi + 4*0]
430
        movzx   eax, al
431
        mov     eax, [Te3 + 4*eax]
432
        xor     ecx, eax
433
 
434
        mov     [esi + 4*1], ecx
435
 
436
 
437
        mov     ecx, [ebx + 4*2]
438
 
439
        mov     eax, [edi + 4*2]
440
        shr     eax, 24
441
        mov     eax, [Te0 + 4*eax]
442
        xor     ecx, eax
443
 
444
        mov     eax, [edi + 4*3]
445
        shr     eax, 16
446
        movzx   eax, al
447
        mov     eax, [Te1 + 4*eax]
448
        xor     ecx, eax
449
 
450
        mov     eax, [edi + 4*0]
451
        shr     eax, 8
452
        movzx   eax, al
453
        mov     eax, [Te2 + 4*eax]
454
        xor     ecx, eax
455
 
456
        mov     eax, [edi + 4*1]
457
        movzx   eax, al
458
        mov     eax, [Te3 + 4*eax]
459
        xor     ecx, eax
460
 
461
        mov     [esi + 4*2], ecx
462
 
463
 
464
        mov     ecx, [ebx + 4*3]
465
 
466
        mov     eax, [edi + 4*3]
467
        shr     eax, 24
468
        mov     eax, [Te0 + 4*eax]
469
        xor     ecx, eax
470
 
471
        mov     eax, [edi + 4*0]
472
        shr     eax, 16
473
        movzx   eax, al
474
        mov     eax, [Te1 + 4*eax]
475
        xor     ecx, eax
476
 
477
        mov     eax, [edi + 4*1]
478
        shr     eax, 8
479
        movzx   eax, al
480
        mov     eax, [Te2 + 4*eax]
481
        xor     ecx, eax
482
 
483
        mov     eax, [edi + 4*2]
484
        movzx   eax, al
485
        mov     eax, [Te3 + 4*eax]
486
        xor     ecx, eax
487
 
488
        mov     [esi + 4*3], ecx
489
 
490
        jmp     .for
491
  .end_for:
492
 
493
        mov     ecx, [ebx + 4*0]
494
 
495
        mov     eax, [edi + 4*0]
496
        shr     eax, 24
497
        mov     eax, [Te2 + 4*eax]
498
        and     eax, 0xff000000
499
        xor     ecx, eax
500
 
501
        mov     eax, [edi + 4*1]
502
        shr     eax, 16
503
        movzx   eax, al
504
        mov     eax, [Te3 + 4*eax]
505
        and     eax, 0x00ff0000
506
        xor     ecx, eax
507
 
508
        mov     eax, [edi + 4*2]
509
        shr     eax, 8
510
        movzx   eax, al
511
        mov     eax, [Te0 + 4*eax]
512
        and     eax, 0x0000ff00
513
        xor     ecx, eax
514
 
515
        mov     eax, [edi + 4*3]
516
        movzx   eax, al
517
        mov     eax, [Te1 + 4*eax]
518
        and     eax, 0x000000ff
519
        xor     ecx, eax
520
 
521
        mov     [esi + 4*0], ecx
522
 
523
 
524
        mov     ecx, [ebx + 4*1]
525
 
526
        mov     eax, [edi + 4*1]
527
        shr     eax, 24
528
        mov     eax, [Te2 + 4*eax]
529
        and     eax, 0xff000000
530
        xor     ecx, eax
531
 
532
        mov     eax, [edi + 4*2]
533
        shr     eax, 16
534
        movzx   eax, al
535
        mov     eax, [Te3 + 4*eax]
536
        and     eax, 0x00ff0000
537
        xor     ecx, eax
538
 
539
        mov     eax, [edi + 4*3]
540
        shr     eax, 8
541
        movzx   eax, al
542
        mov     eax, [Te0 + 4*eax]
543
        and     eax, 0x0000ff00
544
        xor     ecx, eax
545
 
546
        mov     eax, [edi + 4*0]
547
        movzx   eax, al
548
        mov     eax, [Te1 + 4*eax]
549
        and     eax, 0x000000ff
550
        xor     ecx, eax
551
 
552
        mov     [esi + 4*1], ecx
553
 
554
 
555
        mov     ecx, [ebx + 4*2]
556
 
557
        mov     eax, [edi + 4*2]
558
        shr     eax, 24
559
        mov     eax, [Te2 + 4*eax]
560
        and     eax, 0xff000000
561
        xor     ecx, eax
562
 
563
        mov     eax, [edi + 4*3]
564
        shr     eax, 16
565
        movzx   eax, al
566
        mov     eax, [Te3 + 4*eax]
567
        and     eax, 0x00ff0000
568
        xor     ecx, eax
569
 
570
        mov     eax, [edi + 4*0]
571
        shr     eax, 8
572
        movzx   eax, al
573
        mov     eax, [Te0 + 4*eax]
574
        and     eax, 0x0000ff00
575
        xor     ecx, eax
576
 
577
        mov     eax, [edi + 4*1]
578
        movzx   eax, al
579
        mov     eax, [Te1 + 4*eax]
580
        and     eax, 0x000000ff
581
        xor     ecx, eax
582
 
583
        mov     [esi + 4*2], ecx
584
 
585
 
586
        mov     ecx, [ebx + 4*3]
587
 
588
        mov     eax, [edi + 4*3]
589
        shr     eax, 24
590
        mov     eax, [Te2 + 4*eax]
591
        and     eax, 0xff000000
592
        xor     ecx, eax
593
 
594
        mov     eax, [edi + 4*0]
595
        shr     eax, 16
596
        movzx   eax, al
597
        mov     eax, [Te3 + 4*eax]
598
        and     eax, 0x00ff0000
599
        xor     ecx, eax
600
 
601
        mov     eax, [edi + 4*1]
602
        shr     eax, 8
603
        movzx   eax, al
604
        mov     eax, [Te0 + 4*eax]
605
        and     eax, 0x0000ff00
606
        xor     ecx, eax
607
 
608
        mov     eax, [edi + 4*2]
609
        movzx   eax, al
610
        mov     eax, [Te1 + 4*eax]
611
        and     eax, 0x000000ff
612
        xor     ecx, eax
613
 
614
        mov     [esi + 4*3], ecx
615
 
616
 
617
        mov     edi, [_out]
618
        lodsd
619
        bswap   eax
620
        stosd
621
        lodsd
622
        bswap   eax
623
        stosd
624
        lodsd
625
        bswap   eax
626
        stosd
627
        lodsd
628
        bswap   eax
629
        stosd
630
 
631
        DEBUGF  1,'output : '
6469 hidnplayr 632
        stdcall dump_hex, [_out], 4
6419 hidnplayr 633
 
634
        pop     edi esi ebx
635
        ret
636
endp
637
 
638
proc aes256_decrypt _key, _in, _out
639
locals
640
        s       rd 4
641
        t       rd 4
642
        r       dd ?
643
endl
644
        push    ebx esi edi
645
 
646
        DEBUGF  1,'input  : '
6469 hidnplayr 647
        stdcall dump_hex, [_in], 4
6419 hidnplayr 648
 
649
        mov     ebx, [_key]
650
        mov     esi, [_in]
651
        lea     edi, [s]
652
 
653
        mov     eax, [esi + 4*0]
654
        bswap   eax
655
        xor     eax, [ebx + 4*0]
656
        mov     [edi + 4*0], eax
657
 
658
        mov     eax, [esi + 4*1]
659
        bswap   eax
660
        xor     eax, [ebx + 4*1]
661
        mov     [edi + 4*1], eax
662
 
663
        mov     eax, [esi +  4*2]
664
        bswap   eax
665
        xor     eax, [ebx + 4*2]
666
        mov     [edi + 4*2], eax
667
 
668
        mov     eax, [esi + 4*3]
669
        bswap   eax
670
        xor     eax, [ebx + 4*3]
671
        mov     [edi + 4*3], eax
672
 
673
 
674
        mov     [r], AES256_ROUNDS SHR 1
675
  .for:
676
        lea     esi, [s]
677
        lea     edi, [t]
678
 
679
 
680
        mov     ecx, [ebx + 4*4]
681
 
682
        mov     eax, [esi + 4*0]
683
        shr     eax, 24
684
        mov     eax, [Td0 + 4*eax]
685
        xor     ecx, eax
686
 
687
        mov     eax, [esi + 4*3]
688
        shr     eax, 16
689
        movzx   eax, al
690
        mov     eax, [Td1 + 4*eax]
691
        xor     ecx, eax
692
 
693
        mov     eax, [esi + 4*2]
694
        shr     eax, 8
695
        movzx   eax, al
696
        mov     eax, [Td2 + 4*eax]
697
        xor     ecx, eax
698
 
699
        mov     eax, [esi + 4*1]
700
        movzx   eax, al
701
        mov     eax, [Td3 + 4*eax]
702
        xor     ecx, eax
703
 
704
        mov     [edi + 4*0], ecx
705
 
706
 
707
        mov     ecx, [ebx + 4*5]
708
 
709
        mov     eax, [esi + 4*1]
710
        shr     eax, 24
711
        mov     eax, [Td0 + 4*eax]
712
        xor     ecx, eax
713
 
714
        mov     eax, [esi + 4*0]
715
        shr     eax, 16
716
        movzx   eax, al
717
        mov     eax, [Td1 + 4*eax]
718
        xor     ecx, eax
719
 
720
        mov     eax, [esi + 4*3]
721
        shr     eax, 8
722
        movzx   eax, al
723
        mov     eax, [Td2 + 4*eax]
724
        xor     ecx, eax
725
 
726
        mov     eax, [esi + 4*2]
727
        movzx   eax, al
728
        mov     eax, [Td3 + 4*eax]
729
        xor     ecx, eax
730
 
731
        mov     [edi + 4*1], ecx
732
 
733
 
734
        mov     ecx, [ebx + 4*6]
735
 
736
        mov     eax, [esi + 4*2]
737
        shr     eax, 24
738
        mov     eax, [Td0 + 4*eax]
739
        xor     ecx, eax
740
 
741
        mov     eax, [esi + 4*1]
742
        shr     eax, 16
743
        movzx   eax, al
744
        mov     eax, [Td1 + 4*eax]
745
        xor     ecx, eax
746
 
747
        mov     eax, [esi + 4*0]
748
        shr     eax, 8
749
        movzx   eax, al
750
        mov     eax, [Td2 + 4*eax]
751
        xor     ecx, eax
752
 
753
        mov     eax, [esi + 4*3]
754
        movzx   eax, al
755
        mov     eax, [Td3 + 4*eax]
756
        xor     ecx, eax
757
 
758
        mov     [edi + 4*2], ecx
759
 
760
 
761
        mov     ecx, [ebx + 4*7]
762
 
763
        mov     eax, [esi + 4*3]
764
        shr     eax, 24
765
        mov     eax, [Td0 + 4*eax]
766
        xor     ecx, eax
767
 
768
        mov     eax, [esi + 4*2]
769
        shr     eax, 16
770
        movzx   eax, al
771
        mov     eax, [Td1 + 4*eax]
772
        xor     ecx, eax
773
 
774
        mov     eax, [esi + 4*1]
775
        shr     eax, 8
776
        movzx   eax, al
777
        mov     eax, [Td2 + 4*eax]
778
        xor     ecx, eax
779
 
780
        mov     eax, [esi + 4*0]
781
        movzx   eax, al
782
        mov     eax, [Td3 + 4*eax]
783
        xor     ecx, eax
784
 
785
        mov     [edi + 4*3], ecx
786
 
787
 
788
        add     ebx, 4*8
789
        dec     [r]
790
        jz      .end_for
791
 
792
 
793
        mov     ecx, [ebx + 4*0]
794
 
795
        mov     eax, [edi + 4*0]
796
        shr     eax, 24
797
        mov     eax, [Td0 + 4*eax]
798
        xor     ecx, eax
799
 
800
        mov     eax, [edi + 4*3]
801
        shr     eax, 16
802
        movzx   eax, al
803
        mov     eax, [Td1 + 4*eax]
804
        xor     ecx, eax
805
 
806
        mov     eax, [edi + 4*2]
807
        shr     eax, 8
808
        movzx   eax, al
809
        mov     eax, [Td2 + 4*eax]
810
        xor     ecx, eax
811
 
812
        mov     eax, [edi + 4*1]
813
        movzx   eax, al
814
        mov     eax, [Td3 + 4*eax]
815
        xor     ecx, eax
816
 
817
        mov     [esi + 4*0], ecx
818
 
819
 
820
        mov     ecx, [ebx + 4*1]
821
 
822
        mov     eax, [edi + 4*1]
823
        shr     eax, 24
824
        mov     eax, [Td0 + 4*eax]
825
        xor     ecx, eax
826
 
827
        mov     eax, [edi + 4*0]
828
        shr     eax, 16
829
        movzx   eax, al
830
        mov     eax, [Td1 + 4*eax]
831
        xor     ecx, eax
832
 
833
        mov     eax, [edi + 4*3]
834
        shr     eax, 8
835
        movzx   eax, al
836
        mov     eax, [Td2 + 4*eax]
837
        xor     ecx, eax
838
 
839
        mov     eax, [edi + 4*2]
840
        movzx   eax, al
841
        mov     eax, [Td3 + 4*eax]
842
        xor     ecx, eax
843
 
844
        mov     [esi + 4*1], ecx
845
 
846
 
847
        mov     ecx, [ebx + 4*2]
848
 
849
        mov     eax, [edi + 4*2]
850
        shr     eax, 24
851
        mov     eax, [Td0 + 4*eax]
852
        xor     ecx, eax
853
 
854
        mov     eax, [edi + 4*1]
855
        shr     eax, 16
856
        movzx   eax, al
857
        mov     eax, [Td1 + 4*eax]
858
        xor     ecx, eax
859
 
860
        mov     eax, [edi + 4*0]
861
        shr     eax, 8
862
        movzx   eax, al
863
        mov     eax, [Td2 + 4*eax]
864
        xor     ecx, eax
865
 
866
        mov     eax, [edi + 4*3]
867
        movzx   eax, al
868
        mov     eax, [Td3 + 4*eax]
869
        xor     ecx, eax
870
 
871
        mov     [esi + 4*2], ecx
872
 
873
 
874
        mov     ecx, [ebx + 4*3]
875
 
876
        mov     eax, [edi + 4*3]
877
        shr     eax, 24
878
        mov     eax, [Td0 + 4*eax]
879
        xor     ecx, eax
880
 
881
        mov     eax, [edi + 4*2]
882
        shr     eax, 16
883
        movzx   eax, al
884
        mov     eax, [Td1 + 4*eax]
885
        xor     ecx, eax
886
 
887
        mov     eax, [edi + 4*1]
888
        shr     eax, 8
889
        movzx   eax, al
890
        mov     eax, [Td2 + 4*eax]
891
        xor     ecx, eax
892
 
893
        mov     eax, [edi + 4*0]
894
        movzx   eax, al
895
        mov     eax, [Td3 + 4*eax]
896
        xor     ecx, eax
897
 
898
        mov     [esi + 4*3], ecx
899
 
900
        jmp     .for
901
  .end_for:
902
 
903
; Apply last round
904
 
905
        mov     ecx, [ebx + 4*0]
906
 
907
        mov     eax, [edi + 4*0]
908
        shr     eax, 24
909
        movzx   eax, [Td4 + eax]
910
        shl     eax, 24
911
        xor     ecx, eax
912
 
913
        mov     eax, [edi + 4*3]
914
        shr     eax, 16
915
        movzx   eax, al
916
        movzx   eax, [Td4 + eax]
917
        shl     eax, 16
918
        xor     ecx, eax
919
 
920
        mov     eax, [edi + 4*2]
921
        shr     eax, 8
922
        movzx   eax, al
923
        movzx   eax, [Td4 + eax]
924
        shl     eax, 8
925
        xor     ecx, eax
926
 
927
        mov     eax, [edi + 4*1]
928
        movzx   eax, al
929
        movzx   eax, [Td4 + eax]
930
        xor     ecx, eax
931
 
932
        mov     [esi + 4*0], ecx
933
 
934
 
935
        mov     ecx, [ebx + 4*1]
936
 
937
        mov     eax, [edi + 4*1]
938
        shr     eax, 24
939
        movzx   eax, [Td4 + eax]
940
        shl     eax, 24
941
        xor     ecx, eax
942
 
943
        mov     eax, [edi + 4*0]
944
        shr     eax, 16
945
        movzx   eax, al
946
        movzx   eax, [Td4 + eax]
947
        shl     eax, 16
948
        xor     ecx, eax
949
 
950
        mov     eax, [edi + 4*3]
951
        shr     eax, 8
952
        movzx   eax, al
953
        movzx   eax, [Td4 + eax]
954
        shl     eax, 8
955
        xor     ecx, eax
956
 
957
        mov     eax, [edi + 4*2]
958
        movzx   eax, al
959
        movzx   eax, [Td4 + eax]
960
        xor     ecx, eax
961
 
962
        mov     [esi + 4*1], ecx
963
 
964
 
965
        mov     ecx, [ebx + 4*2]
966
 
967
        mov     eax, [edi + 4*2]
968
        shr     eax, 24
969
        movzx   eax, [Td4 + eax]
970
        shl     eax, 24
971
        xor     ecx, eax
972
 
973
        mov     eax, [edi + 4*1]
974
        shr     eax, 16
975
        movzx   eax, al
976
        movzx   eax, [Td4 + eax]
977
        shl     eax, 16
978
        xor     ecx, eax
979
 
980
        mov     eax, [edi + 4*0]
981
        shr     eax, 8
982
        movzx   eax, al
983
        movzx   eax, [Td4 + eax]
984
        shl     eax, 8
985
        xor     ecx, eax
986
 
987
        mov     eax, [edi + 4*3]
988
        movzx   eax, al
989
        movzx   eax, [Td4 + eax]
990
        xor     ecx, eax
991
 
992
        mov     [esi + 4*2], ecx
993
 
994
 
995
        mov     ecx, [ebx + 4*3]
996
 
997
        mov     eax, [edi + 4*3]
998
        shr     eax, 24
999
        movzx   eax, [Td4 + eax]
1000
        shl     eax, 24
1001
        xor     ecx, eax
1002
 
1003
        mov     eax, [edi + 4*2]
1004
        shr     eax, 16
1005
        movzx   eax, al
1006
        movzx   eax, [Td4 + eax]
1007
        shl     eax, 16
1008
        xor     ecx, eax
1009
 
1010
        mov     eax, [edi + 4*1]
1011
        shr     eax, 8
1012
        movzx   eax, al
1013
        movzx   eax, [Td4 + eax]
1014
        shl     eax, 8
1015
        xor     ecx, eax
1016
 
1017
        mov     eax, [edi + 4*0]
1018
        movzx   eax, al
1019
        movzx   eax, [Td4 + eax]
1020
        xor     ecx, eax
1021
 
1022
        mov     [esi + 4*3], ecx
1023
 
1024
 
1025
        mov     edi, [_out]
1026
        lodsd
1027
        bswap   eax
1028
        stosd
1029
        lodsd
1030
        bswap   eax
1031
        stosd
1032
        lodsd
1033
        bswap   eax
1034
        stosd
1035
        lodsd
1036
        bswap   eax
1037
        stosd
1038
 
1039
        DEBUGF  1,'output : '
6469 hidnplayr 1040
        stdcall dump_hex, [_out], 4
6419 hidnplayr 1041
 
1042
        pop     edi esi ebx
1043
        ret
1044
endp
1045
 
1046
iglobal
1047
 
1048
Te0     dd \
1049
        0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, \
1050
        0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, \
1051
        0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, \
1052
        0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, \
1053
        0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, \
1054
        0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, \
1055
        0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, \
1056
        0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, \
1057
        0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, \
1058
        0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, \
1059
        0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, \
1060
        0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, \
1061
        0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, \
1062
        0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, \
1063
        0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, \
1064
        0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, \
1065
        0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, \
1066
        0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, \
1067
        0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, \
1068
        0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, \
1069
        0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, \
1070
        0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, \
1071
        0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, \
1072
        0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, \
1073
        0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, \
1074
        0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, \
1075
        0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, \
1076
        0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, \
1077
        0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, \
1078
        0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, \
1079
        0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, \
1080
        0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, \
1081
        0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, \
1082
        0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, \
1083
        0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, \
1084
        0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, \
1085
        0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, \
1086
        0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, \
1087
        0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, \
1088
        0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, \
1089
        0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, \
1090
        0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, \
1091
        0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, \
1092
        0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, \
1093
        0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, \
1094
        0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, \
1095
        0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, \
1096
        0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, \
1097
        0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, \
1098
        0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, \
1099
        0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, \
1100
        0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, \
1101
        0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, \
1102
        0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, \
1103
        0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, \
1104
        0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, \
1105
        0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, \
1106
        0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, \
1107
        0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, \
1108
        0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, \
1109
        0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, \
1110
        0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, \
1111
        0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, \
1112
        0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a
1113
 
1114
Te1     dd \
1115
        0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, \
1116
        0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, \
1117
        0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, \
1118
        0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, \
1119
        0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, \
1120
        0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, \
1121
        0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, \
1122
        0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, \
1123
        0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, \
1124
        0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, \
1125
        0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, \
1126
        0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, \
1127
        0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, \
1128
        0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, \
1129
        0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, \
1130
        0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, \
1131
        0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, \
1132
        0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, \
1133
        0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, \
1134
        0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, \
1135
        0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, \
1136
        0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, \
1137
        0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, \
1138
        0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, \
1139
        0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, \
1140
        0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, \
1141
        0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, \
1142
        0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, \
1143
        0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, \
1144
        0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, \
1145
        0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, \
1146
        0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, \
1147
        0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, \
1148
        0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, \
1149
        0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, \
1150
        0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, \
1151
        0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, \
1152
        0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, \
1153
        0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, \
1154
        0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, \
1155
        0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, \
1156
        0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, \
1157
        0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, \
1158
        0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, \
1159
        0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, \
1160
        0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, \
1161
        0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, \
1162
        0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, \
1163
        0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, \
1164
        0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, \
1165
        0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, \
1166
        0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, \
1167
        0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, \
1168
        0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, \
1169
        0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, \
1170
        0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, \
1171
        0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, \
1172
        0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, \
1173
        0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, \
1174
        0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, \
1175
        0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, \
1176
        0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, \
1177
        0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, \
1178
        0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616
1179
 
1180
Te2     dd \
1181
        0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, \
1182
        0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, \
1183
        0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, \
1184
        0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, \
1185
        0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, \
1186
        0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, \
1187
        0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, \
1188
        0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, \
1189
        0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, \
1190
        0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, \
1191
        0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, \
1192
        0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, \
1193
        0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, \
1194
        0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, \
1195
        0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, \
1196
        0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, \
1197
        0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, \
1198
        0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, \
1199
        0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, \
1200
        0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, \
1201
        0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, \
1202
        0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, \
1203
        0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, \
1204
        0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, \
1205
        0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, \
1206
        0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, \
1207
        0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, \
1208
        0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, \
1209
        0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, \
1210
        0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, \
1211
        0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, \
1212
        0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, \
1213
        0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, \
1214
        0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, \
1215
        0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, \
1216
        0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, \
1217
        0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, \
1218
        0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, \
1219
        0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, \
1220
        0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, \
1221
        0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, \
1222
        0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, \
1223
        0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, \
1224
        0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, \
1225
        0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, \
1226
        0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, \
1227
        0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, \
1228
        0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, \
1229
        0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, \
1230
        0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, \
1231
        0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, \
1232
        0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, \
1233
        0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, \
1234
        0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, \
1235
        0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, \
1236
        0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, \
1237
        0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, \
1238
        0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, \
1239
        0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, \
1240
        0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, \
1241
        0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, \
1242
        0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, \
1243
        0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, \
1244
        0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16
1245
 
1246
Te3     dd \
1247
        0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, \
1248
        0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, \
1249
        0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, \
1250
        0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, \
1251
        0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, \
1252
        0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, \
1253
        0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, \
1254
        0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, \
1255
        0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, \
1256
        0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, \
1257
        0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, \
1258
        0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, \
1259
        0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, \
1260
        0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, \
1261
        0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, \
1262
        0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, \
1263
        0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, \
1264
        0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, \
1265
        0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, \
1266
        0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, \
1267
        0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, \
1268
        0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, \
1269
        0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, \
1270
        0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, \
1271
        0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, \
1272
        0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, \
1273
        0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, \
1274
        0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, \
1275
        0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, \
1276
        0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, \
1277
        0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, \
1278
        0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, \
1279
        0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, \
1280
        0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, \
1281
        0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, \
1282
        0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, \
1283
        0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, \
1284
        0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, \
1285
        0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, \
1286
        0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, \
1287
        0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, \
1288
        0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, \
1289
        0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, \
1290
        0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, \
1291
        0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, \
1292
        0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, \
1293
        0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, \
1294
        0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, \
1295
        0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, \
1296
        0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, \
1297
        0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, \
1298
        0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, \
1299
        0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, \
1300
        0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, \
1301
        0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, \
1302
        0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, \
1303
        0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, \
1304
        0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, \
1305
        0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, \
1306
        0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, \
1307
        0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, \
1308
        0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, \
1309
        0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, \
1310
        0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c
1311
 
1312
 
1313
Td0     dd \
1314
        0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, \
1315
        0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, \
1316
        0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, \
1317
        0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, \
1318
        0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, \
1319
        0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, \
1320
        0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, \
1321
        0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, \
1322
        0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, \
1323
        0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, \
1324
        0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, \
1325
        0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, \
1326
        0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, \
1327
        0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, \
1328
        0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, \
1329
        0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, \
1330
        0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, \
1331
        0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, \
1332
        0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, \
1333
        0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, \
1334
        0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, \
1335
        0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, \
1336
        0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, \
1337
        0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, \
1338
        0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, \
1339
        0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, \
1340
        0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, \
1341
        0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, \
1342
        0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, \
1343
        0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, \
1344
        0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, \
1345
        0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, \
1346
        0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, \
1347
        0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, \
1348
        0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, \
1349
        0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, \
1350
        0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, \
1351
        0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, \
1352
        0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, \
1353
        0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, \
1354
        0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, \
1355
        0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, \
1356
        0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, \
1357
        0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, \
1358
        0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, \
1359
        0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, \
1360
        0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, \
1361
        0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, \
1362
        0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, \
1363
        0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, \
1364
        0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, \
1365
        0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, \
1366
        0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, \
1367
        0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, \
1368
        0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, \
1369
        0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, \
1370
        0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, \
1371
        0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, \
1372
        0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, \
1373
        0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, \
1374
        0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, \
1375
        0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, \
1376
        0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, \
1377
        0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742
1378
 
1379
Td1     dd \
1380
        0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, \
1381
        0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, \
1382
        0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, \
1383
        0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, \
1384
        0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, \
1385
        0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, \
1386
        0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, \
1387
        0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, \
1388
        0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, \
1389
        0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, \
1390
        0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, \
1391
        0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, \
1392
        0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, \
1393
        0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, \
1394
        0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, \
1395
        0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, \
1396
        0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, \
1397
        0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, \
1398
        0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, \
1399
        0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, \
1400
        0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, \
1401
        0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, \
1402
        0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, \
1403
        0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, \
1404
        0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, \
1405
        0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, \
1406
        0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, \
1407
        0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, \
1408
        0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, \
1409
        0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, \
1410
        0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, \
1411
        0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, \
1412
        0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, \
1413
        0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, \
1414
        0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, \
1415
        0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, \
1416
        0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, \
1417
        0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, \
1418
        0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, \
1419
        0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, \
1420
        0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, \
1421
        0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, \
1422
        0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, \
1423
        0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, \
1424
        0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, \
1425
        0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, \
1426
        0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, \
1427
        0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, \
1428
        0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, \
1429
        0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, \
1430
        0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, \
1431
        0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, \
1432
        0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, \
1433
        0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, \
1434
        0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, \
1435
        0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, \
1436
        0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, \
1437
        0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, \
1438
        0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, \
1439
        0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, \
1440
        0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, \
1441
        0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, \
1442
        0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, \
1443
        0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857
1444
 
1445
Td2     dd \
1446
        0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, \
1447
        0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, \
1448
        0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, \
1449
        0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, \
1450
        0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, \
1451
        0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, \
1452
        0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, \
1453
        0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, \
1454
        0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, \
1455
        0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, \
1456
        0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, \
1457
        0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, \
1458
        0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, \
1459
        0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, \
1460
        0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, \
1461
        0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, \
1462
        0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, \
1463
        0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, \
1464
        0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, \
1465
        0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, \
1466
        0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, \
1467
        0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, \
1468
        0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, \
1469
        0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, \
1470
        0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, \
1471
        0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, \
1472
        0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, \
1473
        0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, \
1474
        0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, \
1475
        0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, \
1476
        0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, \
1477
        0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, \
1478
        0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, \
1479
        0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, \
1480
        0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, \
1481
        0xdccad731, 0x85104263, 0x22401397, 0x112084c6, \
1482
        0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, \
1483
        0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, \
1484
        0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, \
1485
        0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, \
1486
        0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, \
1487
        0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, \
1488
        0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, \
1489
        0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, \
1490
        0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, \
1491
        0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, \
1492
        0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, \
1493
        0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, \
1494
        0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, \
1495
        0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, \
1496
        0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, \
1497
        0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, \
1498
        0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, \
1499
        0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, \
1500
        0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, \
1501
        0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, \
1502
        0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, \
1503
        0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, \
1504
        0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, \
1505
        0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, \
1506
        0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, \
1507
        0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, \
1508
        0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, \
1509
        0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8
1510
 
1511
Td3     dd \
1512
        0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, \
1513
        0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, \
1514
        0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, \
1515
        0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, \
1516
        0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, \
1517
        0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, \
1518
        0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, \
1519
        0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, \
1520
        0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, \
1521
        0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, \
1522
        0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, \
1523
        0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, \
1524
        0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, \
1525
        0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, \
1526
        0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, \
1527
        0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, \
1528
        0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, \
1529
        0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, \
1530
        0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, \
1531
        0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, \
1532
        0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, \
1533
        0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, \
1534
        0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, \
1535
        0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, \
1536
        0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, \
1537
        0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, \
1538
        0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, \
1539
        0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, \
1540
        0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, \
1541
        0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, \
1542
        0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, \
1543
        0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, \
1544
        0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, \
1545
        0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, \
1546
        0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, \
1547
        0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, \
1548
        0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, \
1549
        0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, \
1550
        0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, \
1551
        0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, \
1552
        0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, \
1553
        0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, \
1554
        0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, \
1555
        0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, \
1556
        0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, \
1557
        0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, \
1558
        0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, \
1559
        0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, \
1560
        0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, \
1561
        0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, \
1562
        0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, \
1563
        0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, \
1564
        0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, \
1565
        0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, \
1566
        0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, \
1567
        0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, \
1568
        0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, \
1569
        0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, \
1570
        0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, \
1571
        0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, \
1572
        0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, \
1573
        0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, \
1574
        0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, \
1575
        0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0
1576
 
1577
Td4     db \
1578
        0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, \
1579
        0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, \
1580
        0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, \
1581
        0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, \
1582
        0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, \
1583
        0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, \
1584
        0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, \
1585
        0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, \
1586
        0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, \
1587
        0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, \
1588
        0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, \
1589
        0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, \
1590
        0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, \
1591
        0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, \
1592
        0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, \
1593
        0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, \
1594
        0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, \
1595
        0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, \
1596
        0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, \
1597
        0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, \
1598
        0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, \
1599
        0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, \
1600
        0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, \
1601
        0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, \
1602
        0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, \
1603
        0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, \
1604
        0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, \
1605
        0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, \
1606
        0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, \
1607
        0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, \
1608
        0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, \
1609
        0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
1610
 
1611
rcon    dd \
1612
        0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, \
1613
        0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000
1614
 
1615
endg