Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Side by Side Diff: core/src/fdrm/crypto/fx_crypt_aes.cpp

Issue 1265503005: clang-format all pdfium code. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: sigh Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "../../../include/fdrm/fx_crypt.h" 7 #include "../../../include/fdrm/fx_crypt.h"
8 #ifdef __cplusplus 8 #ifdef __cplusplus
9 extern "C" { 9 extern "C" {
10 #endif 10 #endif
11 #define MAX_NR 14 11 #define MAX_NR 14
12 #define MAX_NK 8 12 #define MAX_NK 8
13 #define MAX_NB 8 13 #define MAX_NB 8
14 #define mulby2(x) ( ((x&0x7F) << 1) ^ (x & 0x80 ? 0x1B : 0) ) 14 #define mulby2(x) (((x & 0x7F) << 1) ^ (x & 0x80 ? 0x1B : 0))
15 #define GET_32BIT_MSB_FIRST(cp) \ 15 #define GET_32BIT_MSB_FIRST(cp) \
16 (((unsigned long)(unsigned char)(cp)[3]) | \ 16 (((unsigned long)(unsigned char)(cp)[3]) | \
17 ((unsigned long)(unsigned char)(cp)[2] << 8) | \ 17 ((unsigned long)(unsigned char)(cp)[2] << 8) | \
18 ((unsigned long)(unsigned char)(cp)[1] << 16) | \ 18 ((unsigned long)(unsigned char)(cp)[1] << 16) | \
19 ((unsigned long)(unsigned char)(cp)[0] << 24)) 19 ((unsigned long)(unsigned char)(cp)[0] << 24))
20 #define PUT_32BIT_MSB_FIRST(cp, value) do { \ 20 #define PUT_32BIT_MSB_FIRST(cp, value) \
21 (cp)[3] = (value); \ 21 do { \
22 (cp)[2] = (value) >> 8; \ 22 (cp)[3] = (value); \
23 (cp)[1] = (value) >> 16; \ 23 (cp)[2] = (value) >> 8; \
24 (cp)[0] = (value) >> 24; } while (0) 24 (cp)[1] = (value) >> 16; \
25 (cp)[0] = (value) >> 24; \
26 } while (0)
25 struct AESContext { 27 struct AESContext {
26 unsigned int keysched[(MAX_NR + 1) * MAX_NB]; 28 unsigned int keysched[(MAX_NR + 1) * MAX_NB];
27 unsigned int invkeysched[(MAX_NR + 1) * MAX_NB]; 29 unsigned int invkeysched[(MAX_NR + 1) * MAX_NB];
28 void (*encrypt) (AESContext * ctx, unsigned int * block); 30 void (*encrypt)(AESContext* ctx, unsigned int* block);
29 void (*decrypt) (AESContext * ctx, unsigned int * block); 31 void (*decrypt)(AESContext* ctx, unsigned int* block);
30 unsigned int iv[MAX_NB]; 32 unsigned int iv[MAX_NB];
31 int Nb, Nr; 33 int Nb, Nr;
32 }; 34 };
33 static const unsigned char Sbox[256] = { 35 static const unsigned char Sbox[256] = {
34 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 36 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b,
35 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 37 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
36 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 38 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26,
37 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 39 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
38 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 40 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2,
39 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 41 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
40 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 42 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed,
41 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 43 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
42 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 44 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f,
43 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 45 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
44 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 46 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec,
45 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 47 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
46 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 48 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14,
47 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 49 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
48 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 50 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d,
49 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 51 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
50 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 52 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f,
51 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 53 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
52 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 54 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11,
53 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 55 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
54 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 56 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f,
55 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 57 0xb0, 0x54, 0xbb, 0x16};
56 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9,
57 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
58 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6,
59 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
60 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
61 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
62 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94,
63 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
64 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68,
65 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
66 };
67 static const unsigned char Sboxinv[256] = { 58 static const unsigned char Sboxinv[256] = {
68 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 59 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e,
69 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 60 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
70 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 61 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32,
71 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 62 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
72 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 63 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49,
73 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 64 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
74 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 65 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50,
75 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 66 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
76 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 67 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05,
77 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 68 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
78 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 69 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41,
79 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 70 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
80 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 71 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8,
81 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 72 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
82 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 73 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b,
83 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 74 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
84 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 75 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59,
85 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 76 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
86 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 77 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d,
87 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 78 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
88 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 79 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63,
89 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 80 0x55, 0x21, 0x0c, 0x7d};
90 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20,
91 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
92 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31,
93 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
94 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
95 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
96 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0,
97 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
98 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26,
99 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
100 };
101 static const unsigned int E0[256] = { 81 static const unsigned int E0[256] = {
102 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 82 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd,
103 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 83 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d,
104 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 84 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d,
105 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 85 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b,
106 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 86 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7,
107 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 87 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a,
108 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 88 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4,
109 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 89 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f,
110 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 90 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1,
111 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 91 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d,
112 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 92 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e,
113 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 93 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb,
114 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 94 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e,
115 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 95 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c,
116 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 96 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46,
117 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 97 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a,
118 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 98 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7,
119 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 99 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81,
120 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 100 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe,
121 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 101 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504,
122 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 102 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a,
123 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 103 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f,
124 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 104 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2,
125 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 105 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395,
126 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 106 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e,
127 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 107 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c,
128 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 108 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256,
129 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 109 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4,
130 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 110 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4,
131 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 111 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7,
132 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 112 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa,
133 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 113 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818,
134 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 114 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1,
135 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 115 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21,
136 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 116 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42,
137 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 117 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12,
138 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 118 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158,
139 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 119 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133,
140 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 120 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22,
141 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 121 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a,
142 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 122 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631,
143 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 123 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11,
144 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6,
145 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b,
146 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7,
147 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0,
148 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25,
149 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818,
150 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72,
151 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651,
152 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21,
153 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85,
154 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa,
155 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12,
156 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0,
157 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9,
158 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133,
159 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7,
160 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920,
161 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a,
162 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17,
163 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8,
164 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11,
165 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a, 124 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a,
166 }; 125 };
167 static const unsigned int E1[256] = { 126 static const unsigned int E1[256] = {
168 0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 127 0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b,
169 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 128 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b,
170 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 129 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282,
171 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 130 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0,
172 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 131 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4,
173 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 132 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626,
174 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 133 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5,
175 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 134 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515,
176 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 135 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696,
177 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 136 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2,
178 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 137 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383,
179 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 138 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0,
180 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 139 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3,
181 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 140 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded,
182 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 141 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb,
183 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 142 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf,
184 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 143 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d,
185 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 144 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f,
186 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 145 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3,
187 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 146 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5,
188 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 147 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff,
189 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 148 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec,
190 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 149 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7,
191 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 150 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373,
192 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 151 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a,
193 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 152 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414,
194 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 153 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232,
195 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 154 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c,
196 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 155 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595,
197 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 156 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d,
198 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 157 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656,
199 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 158 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808,
200 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 159 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6,
201 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 160 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f,
202 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 161 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e,
203 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 162 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e,
204 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 163 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1,
205 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 164 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111,
206 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 165 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e,
207 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 166 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf,
208 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 167 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6,
209 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 168 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f,
210 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262,
211 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979,
212 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d,
213 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9,
214 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea,
215 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808,
216 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e,
217 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6,
218 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f,
219 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a,
220 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666,
221 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e,
222 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9,
223 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e,
224 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111,
225 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494,
226 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9,
227 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf,
228 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d,
229 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868,
230 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f,
231 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616, 169 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616,
232 }; 170 };
233 static const unsigned int E2[256] = { 171 static const unsigned int E2[256] = {
234 0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 172 0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b,
235 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 173 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b,
236 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 174 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82,
237 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 175 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0,
238 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 176 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4,
239 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 177 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26,
240 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 178 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5,
241 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 179 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15,
242 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 180 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796,
243 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 181 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2,
244 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 182 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83,
245 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 183 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0,
246 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 184 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3,
247 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 185 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed,
248 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 186 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb,
249 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 187 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf,
250 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 188 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d,
251 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 189 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f,
252 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 190 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3,
253 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 191 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5,
254 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 192 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff,
255 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 193 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec,
256 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 194 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7,
257 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 195 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673,
258 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 196 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a,
259 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 197 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814,
260 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 198 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432,
261 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 199 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c,
262 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 200 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195,
263 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 201 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d,
264 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 202 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56,
265 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 203 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008,
266 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 204 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6,
267 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 205 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f,
268 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 206 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e,
269 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 207 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e,
270 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 208 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1,
271 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 209 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211,
272 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 210 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e,
273 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 211 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df,
274 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 212 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6,
275 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 213 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f,
276 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462,
277 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279,
278 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d,
279 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9,
280 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea,
281 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008,
282 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e,
283 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6,
284 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f,
285 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a,
286 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66,
287 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e,
288 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9,
289 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e,
290 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211,
291 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394,
292 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9,
293 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df,
294 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d,
295 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068,
296 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f,
297 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16, 214 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16,
298 }; 215 };
299 static const unsigned int E3[256] = { 216 static const unsigned int E3[256] = {
300 0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 217 0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6,
301 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 218 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56,
302 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 219 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f,
303 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 220 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb,
304 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 221 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753,
305 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 222 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c,
306 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 223 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451,
307 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 224 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a,
308 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 225 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137,
309 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 226 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf,
310 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 227 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d,
311 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 228 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b,
312 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 229 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd,
313 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 230 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1,
314 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 231 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d,
315 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 232 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85,
316 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 233 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a,
317 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 234 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe,
318 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 235 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d,
319 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 236 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1,
320 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 237 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5,
321 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 238 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3,
322 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 239 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255,
323 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 240 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6,
324 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 241 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54,
325 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 242 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28,
326 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 243 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664,
327 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 244 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8,
328 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 245 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431,
329 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 246 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da,
330 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 247 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac,
331 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 248 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810,
332 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 249 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157,
333 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 250 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e,
334 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 251 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c,
335 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 252 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c,
336 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 253 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899,
337 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 254 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322,
338 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 255 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c,
339 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 256 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5,
340 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 257 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7,
341 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 258 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e,
342 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4,
343 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2,
344 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da,
345 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049,
346 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf,
347 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810,
348 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c,
349 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197,
350 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e,
351 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f,
352 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc,
353 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c,
354 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069,
355 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927,
356 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322,
357 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733,
358 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9,
359 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5,
360 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a,
361 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0,
362 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e,
363 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c, 259 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c,
364 }; 260 };
365 static const unsigned int D0[256] = { 261 static const unsigned int D0[256] = {
366 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 262 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1,
367 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 263 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25,
368 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 264 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67,
369 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 265 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6,
370 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 266 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3,
371 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 267 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd,
372 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 268 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182,
373 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 269 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94,
374 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 270 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2,
375 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 271 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5,
376 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 272 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492,
377 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 273 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a,
378 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 274 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa,
379 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 275 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46,
380 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 276 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997,
381 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 277 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb,
382 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 278 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48,
383 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 279 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927,
384 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 280 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f,
385 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 281 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16,
386 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 282 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad,
387 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 283 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd,
388 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 284 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc,
389 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 285 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120,
390 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 286 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3,
391 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 287 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422,
392 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 288 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1,
393 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 289 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4,
394 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 290 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8,
395 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 291 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3,
396 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 292 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4,
397 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 293 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6,
398 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 294 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331,
399 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 295 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815,
400 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 296 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d,
401 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 297 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f,
402 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 298 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252,
403 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 299 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89,
404 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 300 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f,
405 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 301 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86,
406 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 302 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c,
407 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 303 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190,
408 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662,
409 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5,
410 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3,
411 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b,
412 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8,
413 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6,
414 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6,
415 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0,
416 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815,
417 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f,
418 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df,
419 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f,
420 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e,
421 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713,
422 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89,
423 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c,
424 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf,
425 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86,
426 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f,
427 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541,
428 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190,
429 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742, 304 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742,
430 }; 305 };
431 static const unsigned int D1[256] = { 306 static const unsigned int D1[256] = {
432 0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 307 0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45,
433 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 308 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c,
434 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 309 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b,
435 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 310 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9,
436 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 311 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421,
437 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 312 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971,
438 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 313 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31,
439 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 314 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b,
440 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 315 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02,
441 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 316 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708,
442 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 317 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4,
443 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 318 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe,
444 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 319 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef,
445 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 320 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd,
446 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 321 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9,
447 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 322 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee,
448 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 323 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed,
449 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 324 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39,
450 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 325 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7,
451 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 326 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a,
452 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 327 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7,
453 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 328 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60,
454 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 329 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6,
455 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 330 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611,
456 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 331 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230,
457 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 332 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964,
458 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 333 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1,
459 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 334 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf,
460 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 335 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8,
461 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 336 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512,
462 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 337 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918,
463 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 338 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8,
464 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 339 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23,
465 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 340 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8,
466 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 341 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0,
467 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 342 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551,
468 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 343 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2,
469 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 344 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c,
470 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 345 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273,
471 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 346 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db,
472 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 347 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225,
473 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 348 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1,
474 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46,
475 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af,
476 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512,
477 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb,
478 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a,
479 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8,
480 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c,
481 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266,
482 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8,
483 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6,
484 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604,
485 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551,
486 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41,
487 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647,
488 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c,
489 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1,
490 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737,
491 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db,
492 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340,
493 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95,
494 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1,
495 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857, 349 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857,
496 }; 350 };
497 static const unsigned int D2[256] = { 351 static const unsigned int D2[256] = {
498 0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 352 0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d,
499 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 353 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502,
500 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 354 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba,
501 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 355 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3,
502 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 356 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874,
503 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 357 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9,
504 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 358 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a,
505 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 359 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908,
506 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 360 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b,
507 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 361 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337,
508 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 362 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779,
509 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 363 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6,
510 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 364 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060,
511 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 365 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6,
512 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 366 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd,
513 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 367 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8,
514 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 368 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b,
515 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 369 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d,
516 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 370 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357,
517 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 371 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12,
518 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 372 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b,
519 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 373 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f,
520 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 374 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23,
521 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 375 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6,
522 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 376 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2,
523 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 377 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9,
524 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 378 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938,
525 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 379 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad,
526 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 380 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8,
527 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 381 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25,
528 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 382 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59,
529 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 383 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15,
530 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 384 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f,
531 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 385 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7,
532 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 386 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef,
533 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 387 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665,
534 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 388 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db,
535 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 389 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13,
536 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 390 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2,
537 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 391 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844,
538 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 392 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2,
539 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 393 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456,
540 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e,
541 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3,
542 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25,
543 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b,
544 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f,
545 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15,
546 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0,
547 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2,
548 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7,
549 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791,
550 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496,
551 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665,
552 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b,
553 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6,
554 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13,
555 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47,
556 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7,
557 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844,
558 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3,
559 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d,
560 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456,
561 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8, 394 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8,
562 }; 395 };
563 static const unsigned int D3[256] = { 396 static const unsigned int D3[256] = {
564 0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 397 0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f,
565 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 398 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5,
566 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 399 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725,
567 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 400 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b,
568 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 401 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358,
569 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 402 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27,
570 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 403 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5,
571 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 404 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9,
572 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 405 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272,
573 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 406 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3,
574 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 407 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7,
575 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 408 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4,
576 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 409 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40,
577 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 410 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d,
578 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 411 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6,
579 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 412 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79,
580 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 413 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832,
581 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 414 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736,
582 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 415 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93,
583 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 416 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c,
584 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 417 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2,
585 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 418 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3,
586 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 419 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb,
587 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 420 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084,
588 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 421 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc,
589 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 422 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247,
590 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 423 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9,
591 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 424 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f,
592 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 425 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890,
593 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 426 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf,
594 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 427 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e,
595 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 428 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef,
596 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 429 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a,
597 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 430 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533,
598 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 431 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43,
599 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 432 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46,
600 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 433 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292,
601 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 434 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb,
602 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 435 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55,
603 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 436 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678,
604 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 437 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc,
605 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 438 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064,
606 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254,
607 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582,
608 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf,
609 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb,
610 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883,
611 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef,
612 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629,
613 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035,
614 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533,
615 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17,
616 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4,
617 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46,
618 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb,
619 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d,
620 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb,
621 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a,
622 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73,
623 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678,
624 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2,
625 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff,
626 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064,
627 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0, 439 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0,
628 }; 440 };
629 #define ADD_ROUND_KEY_4 (block[0]^=*keysched++, block[1]^=*keysched++, \ 441 #define ADD_ROUND_KEY_4 \
630 block[2]^=*keysched++, block[3]^=*keysched++) 442 (block[0] ^= *keysched++, block[1] ^= *keysched++, block[2] ^= *keysched++, \
631 #define ADD_ROUND_KEY_6 (block[0]^=*keysched++, block[1]^=*keysched++, \ 443 block[3] ^= *keysched++)
632 block[2]^=*keysched++, block[3]^=*keysched++, \ 444 #define ADD_ROUND_KEY_6 \
633 block[4]^=*keysched++, block[5]^=*keysched++) 445 (block[0] ^= *keysched++, block[1] ^= *keysched++, block[2] ^= *keysched++, \
634 #define ADD_ROUND_KEY_8 (block[0]^=*keysched++, block[1]^=*keysched++, \ 446 block[3] ^= *keysched++, block[4] ^= *keysched++, block[5] ^= *keysched++)
635 block[2]^=*keysched++, block[3]^=*keysched++, \ 447 #define ADD_ROUND_KEY_8 \
636 block[4]^=*keysched++, block[5]^=*keysched++, \ 448 (block[0] ^= *keysched++, block[1] ^= *keysched++, block[2] ^= *keysched++, \
637 block[6]^=*keysched++, block[7]^=*keysched++) 449 block[3] ^= *keysched++, block[4] ^= *keysched++, block[5] ^= *keysched++, \
638 #define MOVEWORD(i) ( block[i] = newstate[i] ) 450 block[6] ^= *keysched++, block[7] ^= *keysched++)
451 #define MOVEWORD(i) (block[i] = newstate[i])
639 #undef MAKEWORD 452 #undef MAKEWORD
640 #define MAKEWORD(i) ( newstate[i] = (E0[(block[i] >> 24) & 0xFF] ^ \ 453 #define MAKEWORD(i) \
641 E1[(block[(i+C1)%Nb] >> 16) & 0xFF] ^ \ 454 (newstate[i] = (E0[(block[i] >> 24) & 0xFF] ^ \
642 E2[(block[(i+C2)%Nb] >> 8) & 0xFF] ^ \ 455 E1[(block[(i + C1) % Nb] >> 16) & 0xFF] ^ \
643 E3[block[(i+C3)%Nb] & 0xFF]) ) 456 E2[(block[(i + C2) % Nb] >> 8) & 0xFF] ^ \
644 #define LASTWORD(i) ( newstate[i] = (Sbox[(block[i] >> 24) & 0xFF] << 24) | \ 457 E3[block[(i + C3) % Nb] & 0xFF]))
645 (Sbox[(block[(i+C1)%Nb] >> 16) & 0xFF] << 16 ) | \ 458 #define LASTWORD(i) \
646 (Sbox[(block[(i+C2)%Nb] >> 8) & 0xFF] << 8 ) | \ 459 (newstate[i] = (Sbox[(block[i] >> 24) & 0xFF] << 24) | \
647 (Sbox[(block[(i+C3)%Nb] ) & 0xFF] ) ) 460 (Sbox[(block[(i + C1) % Nb] >> 16) & 0xFF] << 16) | \
648 static void aes_encrypt_nb_4(AESContext * ctx, unsigned int * block) 461 (Sbox[(block[(i + C2) % Nb] >> 8) & 0xFF] << 8) | \
649 { 462 (Sbox[(block[(i + C3) % Nb]) & 0xFF]))
650 int i; 463 static void aes_encrypt_nb_4(AESContext* ctx, unsigned int* block) {
651 static const int C1 = 1, C2 = 2, C3 = 3, Nb = 4; 464 int i;
652 unsigned int *keysched = ctx->keysched; 465 static const int C1 = 1, C2 = 2, C3 = 3, Nb = 4;
653 unsigned int newstate[4]; 466 unsigned int* keysched = ctx->keysched;
654 for (i = 0; i < ctx->Nr - 1; i++) { 467 unsigned int newstate[4];
655 ADD_ROUND_KEY_4; 468 for (i = 0; i < ctx->Nr - 1; i++) {
656 MAKEWORD(0);
657 MAKEWORD(1);
658 MAKEWORD(2);
659 MAKEWORD(3);
660 MOVEWORD(0);
661 MOVEWORD(1);
662 MOVEWORD(2);
663 MOVEWORD(3);
664 }
665 ADD_ROUND_KEY_4; 469 ADD_ROUND_KEY_4;
666 LASTWORD(0); 470 MAKEWORD(0);
667 LASTWORD(1); 471 MAKEWORD(1);
668 LASTWORD(2); 472 MAKEWORD(2);
669 LASTWORD(3); 473 MAKEWORD(3);
670 MOVEWORD(0); 474 MOVEWORD(0);
671 MOVEWORD(1); 475 MOVEWORD(1);
672 MOVEWORD(2); 476 MOVEWORD(2);
673 MOVEWORD(3); 477 MOVEWORD(3);
674 ADD_ROUND_KEY_4; 478 }
479 ADD_ROUND_KEY_4;
480 LASTWORD(0);
481 LASTWORD(1);
482 LASTWORD(2);
483 LASTWORD(3);
484 MOVEWORD(0);
485 MOVEWORD(1);
486 MOVEWORD(2);
487 MOVEWORD(3);
488 ADD_ROUND_KEY_4;
675 } 489 }
676 static void aes_encrypt_nb_6(AESContext * ctx, unsigned int * block) 490 static void aes_encrypt_nb_6(AESContext* ctx, unsigned int* block) {
677 { 491 int i;
678 int i; 492 static const int C1 = 1, C2 = 2, C3 = 3, Nb = 6;
679 static const int C1 = 1, C2 = 2, C3 = 3, Nb = 6; 493 unsigned int* keysched = ctx->keysched;
680 unsigned int *keysched = ctx->keysched; 494 unsigned int newstate[6];
681 unsigned int newstate[6]; 495 for (i = 0; i < ctx->Nr - 1; i++) {
682 for (i = 0; i < ctx->Nr - 1; i++) {
683 ADD_ROUND_KEY_6;
684 MAKEWORD(0);
685 MAKEWORD(1);
686 MAKEWORD(2);
687 MAKEWORD(3);
688 MAKEWORD(4);
689 MAKEWORD(5);
690 MOVEWORD(0);
691 MOVEWORD(1);
692 MOVEWORD(2);
693 MOVEWORD(3);
694 MOVEWORD(4);
695 MOVEWORD(5);
696 }
697 ADD_ROUND_KEY_6; 496 ADD_ROUND_KEY_6;
698 LASTWORD(0); 497 MAKEWORD(0);
699 LASTWORD(1); 498 MAKEWORD(1);
700 LASTWORD(2); 499 MAKEWORD(2);
701 LASTWORD(3); 500 MAKEWORD(3);
702 LASTWORD(4); 501 MAKEWORD(4);
703 LASTWORD(5); 502 MAKEWORD(5);
704 MOVEWORD(0); 503 MOVEWORD(0);
705 MOVEWORD(1); 504 MOVEWORD(1);
706 MOVEWORD(2); 505 MOVEWORD(2);
707 MOVEWORD(3); 506 MOVEWORD(3);
708 MOVEWORD(4); 507 MOVEWORD(4);
709 MOVEWORD(5); 508 MOVEWORD(5);
710 ADD_ROUND_KEY_6; 509 }
510 ADD_ROUND_KEY_6;
511 LASTWORD(0);
512 LASTWORD(1);
513 LASTWORD(2);
514 LASTWORD(3);
515 LASTWORD(4);
516 LASTWORD(5);
517 MOVEWORD(0);
518 MOVEWORD(1);
519 MOVEWORD(2);
520 MOVEWORD(3);
521 MOVEWORD(4);
522 MOVEWORD(5);
523 ADD_ROUND_KEY_6;
711 } 524 }
712 static void aes_encrypt_nb_8(AESContext * ctx, unsigned int * block) 525 static void aes_encrypt_nb_8(AESContext* ctx, unsigned int* block) {
713 { 526 int i;
714 int i; 527 static const int C1 = 1, C2 = 3, C3 = 4, Nb = 8;
715 static const int C1 = 1, C2 = 3, C3 = 4, Nb = 8; 528 unsigned int* keysched = ctx->keysched;
716 unsigned int *keysched = ctx->keysched; 529 unsigned int newstate[8];
717 unsigned int newstate[8]; 530 for (i = 0; i < ctx->Nr - 1; i++) {
718 for (i = 0; i < ctx->Nr - 1; i++) {
719 ADD_ROUND_KEY_8;
720 MAKEWORD(0);
721 MAKEWORD(1);
722 MAKEWORD(2);
723 MAKEWORD(3);
724 MAKEWORD(4);
725 MAKEWORD(5);
726 MAKEWORD(6);
727 MAKEWORD(7);
728 MOVEWORD(0);
729 MOVEWORD(1);
730 MOVEWORD(2);
731 MOVEWORD(3);
732 MOVEWORD(4);
733 MOVEWORD(5);
734 MOVEWORD(6);
735 MOVEWORD(7);
736 }
737 ADD_ROUND_KEY_8; 531 ADD_ROUND_KEY_8;
738 LASTWORD(0); 532 MAKEWORD(0);
739 LASTWORD(1); 533 MAKEWORD(1);
740 LASTWORD(2); 534 MAKEWORD(2);
741 LASTWORD(3); 535 MAKEWORD(3);
742 LASTWORD(4); 536 MAKEWORD(4);
743 LASTWORD(5); 537 MAKEWORD(5);
744 LASTWORD(6); 538 MAKEWORD(6);
745 LASTWORD(7); 539 MAKEWORD(7);
746 MOVEWORD(0); 540 MOVEWORD(0);
747 MOVEWORD(1); 541 MOVEWORD(1);
748 MOVEWORD(2); 542 MOVEWORD(2);
749 MOVEWORD(3); 543 MOVEWORD(3);
750 MOVEWORD(4); 544 MOVEWORD(4);
751 MOVEWORD(5); 545 MOVEWORD(5);
752 MOVEWORD(6); 546 MOVEWORD(6);
753 MOVEWORD(7); 547 MOVEWORD(7);
754 ADD_ROUND_KEY_8; 548 }
549 ADD_ROUND_KEY_8;
550 LASTWORD(0);
551 LASTWORD(1);
552 LASTWORD(2);
553 LASTWORD(3);
554 LASTWORD(4);
555 LASTWORD(5);
556 LASTWORD(6);
557 LASTWORD(7);
558 MOVEWORD(0);
559 MOVEWORD(1);
560 MOVEWORD(2);
561 MOVEWORD(3);
562 MOVEWORD(4);
563 MOVEWORD(5);
564 MOVEWORD(6);
565 MOVEWORD(7);
566 ADD_ROUND_KEY_8;
755 } 567 }
756 #undef MAKEWORD 568 #undef MAKEWORD
757 #undef LASTWORD 569 #undef LASTWORD
758 #define MAKEWORD(i) ( newstate[i] = (D0[(block[i] >> 24) & 0xFF] ^ \ 570 #define MAKEWORD(i) \
759 D1[(block[(i+C1)%Nb] >> 16) & 0xFF] ^ \ 571 (newstate[i] = (D0[(block[i] >> 24) & 0xFF] ^ \
760 D2[(block[(i+C2)%Nb] >> 8) & 0xFF] ^ \ 572 D1[(block[(i + C1) % Nb] >> 16) & 0xFF] ^ \
761 D3[block[(i+C3)%Nb] & 0xFF]) ) 573 D2[(block[(i + C2) % Nb] >> 8) & 0xFF] ^ \
762 #define LASTWORD(i) (newstate[i] = (Sboxinv[(block[i] >> 24) & 0xFF] << 24) | \ 574 D3[block[(i + C3) % Nb] & 0xFF]))
763 (Sboxinv[(block[(i+C1)%Nb] >> 16) & 0xFF] << 16) | \ 575 #define LASTWORD(i) \
764 (Sboxinv[(block[(i+C2)%Nb] >> 8) & 0xFF] << 8) | \ 576 (newstate[i] = (Sboxinv[(block[i] >> 24) & 0xFF] << 24) | \
765 (Sboxinv[(block[(i+C3)%Nb] ) & 0xFF] ) ) 577 (Sboxinv[(block[(i + C1) % Nb] >> 16) & 0xFF] << 16) | \
766 static void aes_decrypt_nb_4(AESContext * ctx, unsigned int * block) 578 (Sboxinv[(block[(i + C2) % Nb] >> 8) & 0xFF] << 8) | \
767 { 579 (Sboxinv[(block[(i + C3) % Nb]) & 0xFF]))
768 int i; 580 static void aes_decrypt_nb_4(AESContext* ctx, unsigned int* block) {
769 static const int C1 = 4 - 1, C2 = 4 - 2, C3 = 4 - 3, Nb = 4; 581 int i;
770 unsigned int *keysched = ctx->invkeysched; 582 static const int C1 = 4 - 1, C2 = 4 - 2, C3 = 4 - 3, Nb = 4;
771 unsigned int newstate[4]; 583 unsigned int* keysched = ctx->invkeysched;
772 for (i = 0; i < ctx->Nr - 1; i++) { 584 unsigned int newstate[4];
773 ADD_ROUND_KEY_4; 585 for (i = 0; i < ctx->Nr - 1; i++) {
774 MAKEWORD(0);
775 MAKEWORD(1);
776 MAKEWORD(2);
777 MAKEWORD(3);
778 MOVEWORD(0);
779 MOVEWORD(1);
780 MOVEWORD(2);
781 MOVEWORD(3);
782 }
783 ADD_ROUND_KEY_4; 586 ADD_ROUND_KEY_4;
784 LASTWORD(0); 587 MAKEWORD(0);
785 LASTWORD(1); 588 MAKEWORD(1);
786 LASTWORD(2); 589 MAKEWORD(2);
787 LASTWORD(3); 590 MAKEWORD(3);
788 MOVEWORD(0); 591 MOVEWORD(0);
789 MOVEWORD(1); 592 MOVEWORD(1);
790 MOVEWORD(2); 593 MOVEWORD(2);
791 MOVEWORD(3); 594 MOVEWORD(3);
792 ADD_ROUND_KEY_4; 595 }
596 ADD_ROUND_KEY_4;
597 LASTWORD(0);
598 LASTWORD(1);
599 LASTWORD(2);
600 LASTWORD(3);
601 MOVEWORD(0);
602 MOVEWORD(1);
603 MOVEWORD(2);
604 MOVEWORD(3);
605 ADD_ROUND_KEY_4;
793 } 606 }
794 static void aes_decrypt_nb_6(AESContext * ctx, unsigned int * block) 607 static void aes_decrypt_nb_6(AESContext* ctx, unsigned int* block) {
795 { 608 int i;
796 int i; 609 static const int C1 = 6 - 1, C2 = 6 - 2, C3 = 6 - 3, Nb = 6;
797 static const int C1 = 6 - 1, C2 = 6 - 2, C3 = 6 - 3, Nb = 6; 610 unsigned int* keysched = ctx->invkeysched;
798 unsigned int *keysched = ctx->invkeysched; 611 unsigned int newstate[6];
799 unsigned int newstate[6]; 612 for (i = 0; i < ctx->Nr - 1; i++) {
800 for (i = 0; i < ctx->Nr - 1; i++) {
801 ADD_ROUND_KEY_6;
802 MAKEWORD(0);
803 MAKEWORD(1);
804 MAKEWORD(2);
805 MAKEWORD(3);
806 MAKEWORD(4);
807 MAKEWORD(5);
808 MOVEWORD(0);
809 MOVEWORD(1);
810 MOVEWORD(2);
811 MOVEWORD(3);
812 MOVEWORD(4);
813 MOVEWORD(5);
814 }
815 ADD_ROUND_KEY_6; 613 ADD_ROUND_KEY_6;
816 LASTWORD(0); 614 MAKEWORD(0);
817 LASTWORD(1); 615 MAKEWORD(1);
818 LASTWORD(2); 616 MAKEWORD(2);
819 LASTWORD(3); 617 MAKEWORD(3);
820 LASTWORD(4); 618 MAKEWORD(4);
821 LASTWORD(5); 619 MAKEWORD(5);
822 MOVEWORD(0); 620 MOVEWORD(0);
823 MOVEWORD(1); 621 MOVEWORD(1);
824 MOVEWORD(2); 622 MOVEWORD(2);
825 MOVEWORD(3); 623 MOVEWORD(3);
826 MOVEWORD(4); 624 MOVEWORD(4);
827 MOVEWORD(5); 625 MOVEWORD(5);
828 ADD_ROUND_KEY_6; 626 }
627 ADD_ROUND_KEY_6;
628 LASTWORD(0);
629 LASTWORD(1);
630 LASTWORD(2);
631 LASTWORD(3);
632 LASTWORD(4);
633 LASTWORD(5);
634 MOVEWORD(0);
635 MOVEWORD(1);
636 MOVEWORD(2);
637 MOVEWORD(3);
638 MOVEWORD(4);
639 MOVEWORD(5);
640 ADD_ROUND_KEY_6;
829 } 641 }
830 static void aes_decrypt_nb_8(AESContext * ctx, unsigned int * block) 642 static void aes_decrypt_nb_8(AESContext* ctx, unsigned int* block) {
831 { 643 int i;
832 int i; 644 static const int C1 = 8 - 1, C2 = 8 - 3, C3 = 8 - 4, Nb = 8;
833 static const int C1 = 8 - 1, C2 = 8 - 3, C3 = 8 - 4, Nb = 8; 645 unsigned int* keysched = ctx->invkeysched;
834 unsigned int *keysched = ctx->invkeysched; 646 unsigned int newstate[8];
835 unsigned int newstate[8]; 647 for (i = 0; i < ctx->Nr - 1; i++) {
836 for (i = 0; i < ctx->Nr - 1; i++) {
837 ADD_ROUND_KEY_8;
838 MAKEWORD(0);
839 MAKEWORD(1);
840 MAKEWORD(2);
841 MAKEWORD(3);
842 MAKEWORD(4);
843 MAKEWORD(5);
844 MAKEWORD(6);
845 MAKEWORD(7);
846 MOVEWORD(0);
847 MOVEWORD(1);
848 MOVEWORD(2);
849 MOVEWORD(3);
850 MOVEWORD(4);
851 MOVEWORD(5);
852 MOVEWORD(6);
853 MOVEWORD(7);
854 }
855 ADD_ROUND_KEY_8; 648 ADD_ROUND_KEY_8;
856 LASTWORD(0); 649 MAKEWORD(0);
857 LASTWORD(1); 650 MAKEWORD(1);
858 LASTWORD(2); 651 MAKEWORD(2);
859 LASTWORD(3); 652 MAKEWORD(3);
860 LASTWORD(4); 653 MAKEWORD(4);
861 LASTWORD(5); 654 MAKEWORD(5);
862 LASTWORD(6); 655 MAKEWORD(6);
863 LASTWORD(7); 656 MAKEWORD(7);
864 MOVEWORD(0); 657 MOVEWORD(0);
865 MOVEWORD(1); 658 MOVEWORD(1);
866 MOVEWORD(2); 659 MOVEWORD(2);
867 MOVEWORD(3); 660 MOVEWORD(3);
868 MOVEWORD(4); 661 MOVEWORD(4);
869 MOVEWORD(5); 662 MOVEWORD(5);
870 MOVEWORD(6); 663 MOVEWORD(6);
871 MOVEWORD(7); 664 MOVEWORD(7);
872 ADD_ROUND_KEY_8; 665 }
666 ADD_ROUND_KEY_8;
667 LASTWORD(0);
668 LASTWORD(1);
669 LASTWORD(2);
670 LASTWORD(3);
671 LASTWORD(4);
672 LASTWORD(5);
673 LASTWORD(6);
674 LASTWORD(7);
675 MOVEWORD(0);
676 MOVEWORD(1);
677 MOVEWORD(2);
678 MOVEWORD(3);
679 MOVEWORD(4);
680 MOVEWORD(5);
681 MOVEWORD(6);
682 MOVEWORD(7);
683 ADD_ROUND_KEY_8;
873 } 684 }
874 #undef MAKEWORD 685 #undef MAKEWORD
875 #undef LASTWORD 686 #undef LASTWORD
876 static void aes_setup(AESContext * ctx, int blocklen, 687 static void aes_setup(AESContext* ctx,
877 const unsigned char *key, int keylen) 688 int blocklen,
878 { 689 const unsigned char* key,
879 int i, j, Nk, rconst; 690 int keylen) {
880 ASSERT(blocklen == 16 || blocklen == 24 || blocklen == 32); 691 int i, j, Nk, rconst;
881 ASSERT(keylen == 16 || keylen == 24 || keylen == 32); 692 ASSERT(blocklen == 16 || blocklen == 24 || blocklen == 32);
882 Nk = keylen / 4; 693 ASSERT(keylen == 16 || keylen == 24 || keylen == 32);
883 ctx->Nb = blocklen / 4; 694 Nk = keylen / 4;
884 ctx->Nr = 6 + (ctx->Nb > Nk ? ctx->Nb : Nk); 695 ctx->Nb = blocklen / 4;
885 if (ctx->Nb == 8) { 696 ctx->Nr = 6 + (ctx->Nb > Nk ? ctx->Nb : Nk);
886 ctx->encrypt = aes_encrypt_nb_8, ctx->decrypt = aes_decrypt_nb_8; 697 if (ctx->Nb == 8) {
887 } else if (ctx->Nb == 6) { 698 ctx->encrypt = aes_encrypt_nb_8, ctx->decrypt = aes_decrypt_nb_8;
888 ctx->encrypt = aes_encrypt_nb_6, ctx->decrypt = aes_decrypt_nb_6; 699 } else if (ctx->Nb == 6) {
889 } else if (ctx->Nb == 4) { 700 ctx->encrypt = aes_encrypt_nb_6, ctx->decrypt = aes_decrypt_nb_6;
890 ctx->encrypt = aes_encrypt_nb_4, ctx->decrypt = aes_decrypt_nb_4; 701 } else if (ctx->Nb == 4) {
702 ctx->encrypt = aes_encrypt_nb_4, ctx->decrypt = aes_decrypt_nb_4;
703 }
704 rconst = 1;
705 for (i = 0; i < (ctx->Nr + 1) * ctx->Nb; i++) {
706 if (i < Nk) {
707 ctx->keysched[i] = GET_32BIT_MSB_FIRST(key + 4 * i);
708 } else {
709 unsigned int temp = ctx->keysched[i - 1];
710 if (i % Nk == 0) {
711 int a, b, c, d;
712 a = (temp >> 16) & 0xFF;
713 b = (temp >> 8) & 0xFF;
714 c = (temp >> 0) & 0xFF;
715 d = (temp >> 24) & 0xFF;
716 temp = Sbox[a] ^ rconst;
717 temp = (temp << 8) | Sbox[b];
718 temp = (temp << 8) | Sbox[c];
719 temp = (temp << 8) | Sbox[d];
720 rconst = mulby2(rconst);
721 } else if (i % Nk == 4 && Nk > 6) {
722 int a, b, c, d;
723 a = (temp >> 24) & 0xFF;
724 b = (temp >> 16) & 0xFF;
725 c = (temp >> 8) & 0xFF;
726 d = (temp >> 0) & 0xFF;
727 temp = Sbox[a];
728 temp = (temp << 8) | Sbox[b];
729 temp = (temp << 8) | Sbox[c];
730 temp = (temp << 8) | Sbox[d];
731 }
732 ctx->keysched[i] = ctx->keysched[i - Nk] ^ temp;
891 } 733 }
892 rconst = 1; 734 }
893 for (i = 0; i < (ctx->Nr + 1) * ctx->Nb; i++) { 735 for (i = 0; i <= ctx->Nr; i++) {
894 if (i < Nk) { 736 for (j = 0; j < ctx->Nb; j++) {
895 ctx->keysched[i] = GET_32BIT_MSB_FIRST(key + 4 * i); 737 unsigned int temp;
896 } else { 738 temp = ctx->keysched[(ctx->Nr - i) * ctx->Nb + j];
897 unsigned int temp = ctx->keysched[i - 1]; 739 if (i != 0 && i != ctx->Nr) {
898 if (i % Nk == 0) { 740 int a, b, c, d;
899 int a, b, c, d; 741 a = (temp >> 24) & 0xFF;
900 a = (temp >> 16) & 0xFF; 742 b = (temp >> 16) & 0xFF;
901 b = (temp >> 8) & 0xFF; 743 c = (temp >> 8) & 0xFF;
902 c = (temp >> 0) & 0xFF; 744 d = (temp >> 0) & 0xFF;
903 d = (temp >> 24) & 0xFF; 745 temp = D0[Sbox[a]];
904 temp = Sbox[a] ^ rconst; 746 temp ^= D1[Sbox[b]];
905 temp = (temp << 8) | Sbox[b]; 747 temp ^= D2[Sbox[c]];
906 temp = (temp << 8) | Sbox[c]; 748 temp ^= D3[Sbox[d]];
907 temp = (temp << 8) | Sbox[d]; 749 }
908 rconst = mulby2(rconst); 750 ctx->invkeysched[i * ctx->Nb + j] = temp;
909 } else if (i % Nk == 4 && Nk > 6) {
910 int a, b, c, d;
911 a = (temp >> 24) & 0xFF;
912 b = (temp >> 16) & 0xFF;
913 c = (temp >> 8) & 0xFF;
914 d = (temp >> 0) & 0xFF;
915 temp = Sbox[a];
916 temp = (temp << 8) | Sbox[b];
917 temp = (temp << 8) | Sbox[c];
918 temp = (temp << 8) | Sbox[d];
919 }
920 ctx->keysched[i] = ctx->keysched[i - Nk] ^ temp;
921 }
922 } 751 }
923 for (i = 0; i <= ctx->Nr; i++) { 752 }
924 for (j = 0; j < ctx->Nb; j++) { 753 }
925 unsigned int temp; 754 static void aes_decrypt(AESContext* ctx, unsigned int* block) {
926 temp = ctx->keysched[(ctx->Nr - i) * ctx->Nb + j]; 755 ctx->decrypt(ctx, block);
927 if (i != 0 && i != ctx->Nr) { 756 }
928 int a, b, c, d; 757 static void aes_decrypt_cbc(unsigned char* dest,
929 a = (temp >> 24) & 0xFF; 758 const unsigned char* src,
930 b = (temp >> 16) & 0xFF; 759 int len,
931 c = (temp >> 8) & 0xFF; 760 AESContext* ctx) {
932 d = (temp >> 0) & 0xFF; 761 unsigned int iv[4], x[4], ct[4];
933 temp = D0[Sbox[a]]; 762 int i;
934 temp ^= D1[Sbox[b]]; 763 ASSERT((len & 15) == 0);
935 temp ^= D2[Sbox[c]]; 764 FXSYS_memcpy(iv, ctx->iv, sizeof(iv));
936 temp ^= D3[Sbox[d]]; 765 while (len > 0) {
937 } 766 for (i = 0; i < 4; i++) {
938 ctx->invkeysched[i * ctx->Nb + j] = temp; 767 x[i] = ct[i] = GET_32BIT_MSB_FIRST(src + 4 * i);
939 }
940 } 768 }
769 aes_decrypt(ctx, x);
770 for (i = 0; i < 4; i++) {
771 PUT_32BIT_MSB_FIRST(dest + 4 * i, iv[i] ^ x[i]);
772 iv[i] = ct[i];
773 }
774 dest += 16;
775 src += 16;
776 len -= 16;
777 }
778 FXSYS_memcpy(ctx->iv, iv, sizeof(iv));
941 } 779 }
942 static void aes_decrypt(AESContext * ctx, unsigned int * block) 780 static void aes_encrypt(AESContext* ctx, unsigned int* block) {
943 { 781 ctx->encrypt(ctx, block);
944 ctx->decrypt(ctx, block);
945 } 782 }
946 static void aes_decrypt_cbc(unsigned char *dest, const unsigned char *src, int l en, AESContext * ctx) 783 static void aes_encrypt_cbc(unsigned char* dest,
947 { 784 const unsigned char* src,
948 unsigned int iv[4], x[4], ct[4]; 785 int len,
949 int i; 786 AESContext* ctx) {
950 ASSERT((len & 15) == 0); 787 unsigned int iv[4];
951 FXSYS_memcpy(iv, ctx->iv, sizeof(iv)); 788 int i;
952 while (len > 0) { 789 ASSERT((len & 15) == 0);
953 for (i = 0; i < 4; i++) { 790 FXSYS_memcpy(iv, ctx->iv, sizeof(iv));
954 x[i] = ct[i] = GET_32BIT_MSB_FIRST(src + 4 * i); 791 while (len > 0) {
955 } 792 for (i = 0; i < 4; i++) {
956 aes_decrypt(ctx, x); 793 iv[i] ^= GET_32BIT_MSB_FIRST(src + 4 * i);
957 for (i = 0; i < 4; i++) {
958 PUT_32BIT_MSB_FIRST(dest + 4 * i, iv[i] ^ x[i]);
959 iv[i] = ct[i];
960 }
961 dest += 16;
962 src += 16;
963 len -= 16;
964 } 794 }
965 FXSYS_memcpy(ctx->iv, iv, sizeof(iv)); 795 aes_encrypt(ctx, iv);
796 for (i = 0; i < 4; i++) {
797 PUT_32BIT_MSB_FIRST(dest + 4 * i, iv[i]);
798 }
799 dest += 16;
800 src += 16;
801 len -= 16;
802 }
803 FXSYS_memcpy(ctx->iv, iv, sizeof(iv));
966 } 804 }
967 static void aes_encrypt(AESContext * ctx, unsigned int * block) 805 void CRYPT_AESSetKey(void* context,
968 { 806 FX_DWORD blocklen,
969 ctx->encrypt(ctx, block); 807 const uint8_t* key,
808 FX_DWORD keylen,
809 FX_BOOL bEncrypt) {
810 aes_setup((AESContext*)context, blocklen, key, keylen);
970 } 811 }
971 static void aes_encrypt_cbc(unsigned char *dest, const unsigned char *src, int l en, AESContext * ctx) 812 void CRYPT_AESSetIV(void* context, const uint8_t* iv) {
972 { 813 int i;
973 unsigned int iv[4]; 814 for (i = 0; i < ((AESContext*)context)->Nb; i++) {
974 int i; 815 ((AESContext*)context)->iv[i] = GET_32BIT_MSB_FIRST(iv + 4 * i);
975 ASSERT((len & 15) == 0); 816 }
976 FXSYS_memcpy(iv, ctx->iv, sizeof(iv));
977 while (len > 0) {
978 for (i = 0; i < 4; i++) {
979 iv[i] ^= GET_32BIT_MSB_FIRST(src + 4 * i);
980 }
981 aes_encrypt(ctx, iv);
982 for (i = 0; i < 4; i++) {
983 PUT_32BIT_MSB_FIRST(dest + 4 * i, iv[i]);
984 }
985 dest += 16;
986 src += 16;
987 len -= 16;
988 }
989 FXSYS_memcpy(ctx->iv, iv, sizeof(iv));
990 } 817 }
991 void CRYPT_AESSetKey(void* context, FX_DWORD blocklen, const uint8_t* key, FX_DW ORD keylen, FX_BOOL bEncrypt) 818 void CRYPT_AESDecrypt(void* context,
992 { 819 uint8_t* dest,
993 aes_setup((AESContext*)context, blocklen, key, keylen); 820 const uint8_t* src,
821 FX_DWORD len) {
822 aes_decrypt_cbc(dest, src, len, (AESContext*)context);
994 } 823 }
995 void CRYPT_AESSetIV(void* context, const uint8_t* iv) 824 void CRYPT_AESEncrypt(void* context,
996 { 825 uint8_t* dest,
997 int i; 826 const uint8_t* src,
998 for (i = 0; i < ((AESContext*)context)->Nb; i++) { 827 FX_DWORD len) {
999 ((AESContext*)context)->iv[i] = GET_32BIT_MSB_FIRST(iv + 4 * i); 828 aes_encrypt_cbc(dest, src, len, (AESContext*)context);
1000 }
1001 }
1002 void CRYPT_AESDecrypt(void* context, uint8_t* dest, const uint8_t* src, FX_DWORD len)
1003 {
1004 aes_decrypt_cbc(dest, src, len, (AESContext*)context);
1005 }
1006 void CRYPT_AESEncrypt(void* context, uint8_t* dest, const uint8_t* src, FX_DWORD len)
1007 {
1008 aes_encrypt_cbc(dest, src, len, (AESContext*)context);
1009 } 829 }
1010 #ifdef __cplusplus 830 #ifdef __cplusplus
1011 }; 831 };
1012 #endif 832 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698