1
2
3
4
5
6
7
8 """
9 A pure python (slow) implementation of rijndael with a decent interface
10
11 To include -
12
13 from rijndael import rijndael
14
15 To do a key setup -
16
17 r = rijndael(key, block_size = 16)
18
19 key must be a string of length 16, 24, or 32
20 blocksize must be 16, 24, or 32. Default is 16
21
22 To use -
23
24 ciphertext = r.encrypt(plaintext)
25 plaintext = r.decrypt(ciphertext)
26
27 If any strings are of the wrong length a ValueError is thrown
28 """
29
30
31
32
33
34
35
36 shifts = [[[0, 0], [1, 3], [2, 2], [3, 1]],
37 [[0, 0], [1, 5], [2, 4], [3, 3]],
38 [[0, 0], [1, 7], [3, 5], [4, 4]]]
39
40
41 num_rounds = {16: {16: 10, 24: 12, 32: 14},
42 24: {16: 12, 24: 12, 32: 14},
43 32: {16: 14, 24: 14, 32: 14}}
44
45
46
47
48
49 S = (99, 124, 119, 123, 242, 107, 111, 197,
50 48, 1, 103, 43, 254, 215, 171, 118,
51 202, 130, 201, 125, 250, 89, 71, 240,
52 173, 212, 162, 175, 156, 164, 114, 192,
53 183, 253, 147, 38, 54, 63, 247, 204,
54 52, 165, 229, 241, 113, 216, 49, 21,
55 4, 199, 35, 195, 24, 150, 5, 154,
56 7, 18, 128, 226, 235, 39, 178, 117,
57 9, 131, 44, 26, 27, 110, 90, 160,
58 82, 59, 214, 179, 41, 227, 47, 132,
59 83, 209, 0, 237, 32, 252, 177, 91,
60 106, 203, 190, 57, 74, 76, 88, 207,
61 208, 239, 170, 251, 67, 77, 51, 133,
62 69, 249, 2, 127, 80, 60, 159, 168,
63 81, 163, 64, 143, 146, 157, 56, 245,
64 188, 182, 218, 33, 16, 255, 243, 210,
65 205, 12, 19, 236, 95, 151, 68, 23,
66 196, 167, 126, 61, 100, 93, 25, 115,
67 96, 129, 79, 220, 34, 42, 144, 136,
68 70, 238, 184, 20, 222, 94, 11, 219,
69 224, 50, 58, 10, 73, 6, 36, 92,
70 194, 211, 172, 98, 145, 149, 228, 121,
71 231, 200, 55, 109, 141, 213, 78, 169,
72 108, 86, 244, 234, 101, 122, 174, 8,
73 186, 120, 37, 46, 28, 166, 180, 198,
74 232, 221, 116, 31, 75, 189, 139, 138,
75 112, 62, 181, 102, 72, 3, 246, 14,
76 97, 53, 87, 185, 134, 193, 29, 158,
77 225, 248, 152, 17, 105, 217, 142, 148,
78 155, 30, 135, 233, 206, 85, 40, 223,
79 140, 161, 137, 13, 191, 230, 66, 104,
80 65, 153, 45, 15, 176, 84, 187, 22)
81
82
83 Si = (82, 9, 106, 213, 48, 54, 165, 56,
84 191, 64, 163, 158, 129, 243, 215, 251,
85 124, 227, 57, 130, 155, 47, 255, 135,
86 52, 142, 67, 68, 196, 222, 233, 203,
87 84, 123, 148, 50, 166, 194, 35, 61,
88 238, 76, 149, 11, 66, 250, 195, 78,
89 8, 46, 161, 102, 40, 217, 36, 178,
90 118, 91, 162, 73, 109, 139, 209, 37,
91 114, 248, 246, 100, 134, 104, 152, 22,
92 212, 164, 92, 204, 93, 101, 182, 146,
93 108, 112, 72, 80, 253, 237, 185, 218,
94 94, 21, 70, 87, 167, 141, 157, 132,
95 144, 216, 171, 0, 140, 188, 211, 10,
96 247, 228, 88, 5, 184, 179, 69, 6,
97 208, 44, 30, 143, 202, 63, 15, 2,
98 193, 175, 189, 3, 1, 19, 138, 107,
99 58, 145, 17, 65, 79, 103, 220, 234,
100 151, 242, 207, 206, 240, 180, 230, 115,
101 150, 172, 116, 34, 231, 173, 53, 133,
102 226, 249, 55, 232, 28, 117, 223, 110,
103 71, 241, 26, 113, 29, 41, 197, 137,
104 111, 183, 98, 14, 170, 24, 190, 27,
105 252, 86, 62, 75, 198, 210, 121, 32,
106 154, 219, 192, 254, 120, 205, 90, 244,
107 31, 221, 168, 51, 136, 7, 199, 49,
108 177, 18, 16, 89, 39, 128, 236, 95,
109 96, 81, 127, 169, 25, 181, 74, 13,
110 45, 229, 122, 159, 147, 201, 156, 239,
111 160, 224, 59, 77, 174, 42, 245, 176,
112 200, 235, 187, 60, 131, 83, 153, 97,
113 23, 43, 4, 126, 186, 119, 214, 38,
114 225, 105, 20, 99, 85, 33, 12, 125)
115
116 T1 = (0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d,
117 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554,
118 0x60303050, 0x2010103, 0xce6767a9, 0x562b2b7d,
119 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a,
120 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87,
121 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b,
122 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea,
123 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b,
124 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a,
125 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f,
126 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108,
127 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f,
128 0x804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e,
129 0x30181828, 0x379696a1, 0xa05050f, 0x2f9a9ab5,
130 0xe070709, 0x24121236, 0x1b80809b, 0xdfe2e23d,
131 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f,
132 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e,
133 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb,
134 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce,
135 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497,
136 0xa65353f5, 0xb9d1d168, 0x0, 0xc1eded2c,
137 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed,
138 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b,
139 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a,
140 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16,
141 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594,
142 0x8a4545cf, 0xe9f9f910, 0x4020206, 0xfe7f7f81,
143 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3,
144 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x58f8f8a,
145 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504,
146 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163,
147 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d,
148 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f,
149 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739,
150 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47,
151 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395,
152 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f,
153 0x44222266, 0x542a2a7e, 0x3b9090ab, 0xb888883,
154 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c,
155 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76,
156 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e,
157 0x924949db, 0xc06060a, 0x4824246c, 0xb85c5ce4,
158 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6,
159 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b,
160 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7,
161 0x18d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0,
162 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25,
163 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818,
164 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72,
165 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651,
166 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21,
167 0x964b4bdd, 0x61bdbddc, 0xd8b8b86, 0xf8a8a85,
168 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa,
169 0x904848d8, 0x6030305, 0xf7f6f601, 0x1c0e0e12,
170 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0,
171 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9,
172 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133,
173 0xd26969bb, 0xa9d9d970, 0x78e8e89, 0x339494a7,
174 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920,
175 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a,
176 0x38c8c8f, 0x59a1a1f8, 0x9898980, 0x1a0d0d17,
177 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8,
178 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11,
179 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a)
180
181 T2 = (0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b,
182 0xdfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5,
183 0x50603030, 0x3020101, 0xa9ce6767, 0x7d562b2b,
184 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676,
185 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d,
186 0x15effafa, 0xebb25959, 0xc98e4747, 0xbfbf0f0,
187 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf,
188 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0,
189 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626,
190 0x5a6c3636, 0x417e3f3f, 0x2f5f7f7, 0x4f83cccc,
191 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x8f9f1f1,
192 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515,
193 0xc080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3,
194 0x28301818, 0xa1379696, 0xf0a0505, 0xb52f9a9a,
195 0x90e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2,
196 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575,
197 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a,
198 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0,
199 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3,
200 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484,
201 0xf5a65353, 0x68b9d1d1, 0x0, 0x2cc1eded,
202 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b,
203 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939,
204 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf,
205 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb,
206 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585,
207 0xcf8a4545, 0x10e9f9f9, 0x6040202, 0x81fe7f7f,
208 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8,
209 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f,
210 0xad3f9292, 0xbc219d9d, 0x48703838, 0x4f1f5f5,
211 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121,
212 0x30201010, 0x1ae5ffff, 0xefdf3f3, 0x6dbfd2d2,
213 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec,
214 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717,
215 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d,
216 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373,
217 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc,
218 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888,
219 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414,
220 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb,
221 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a,
222 0xdb924949, 0xa0c0606, 0x6c482424, 0xe4b85c5c,
223 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262,
224 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979,
225 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d,
226 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9,
227 0xb4d86c6c, 0xfaac5656, 0x7f3f4f4, 0x25cfeaea,
228 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808,
229 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e,
230 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6,
231 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f,
232 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a,
233 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666,
234 0xd8904848, 0x5060303, 0x1f7f6f6, 0x121c0e0e,
235 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9,
236 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e,
237 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111,
238 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494,
239 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9,
240 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf,
241 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d,
242 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868,
243 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f,
244 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616)
245
246 T3 = (0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b,
247 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5,
248 0x30506030, 0x1030201, 0x67a9ce67, 0x2b7d562b,
249 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76,
250 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d,
251 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0,
252 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af,
253 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0,
254 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26,
255 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc,
256 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1,
257 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15,
258 0x40c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3,
259 0x18283018, 0x96a13796, 0x50f0a05, 0x9ab52f9a,
260 0x7090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2,
261 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75,
262 0x91b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a,
263 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0,
264 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3,
265 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384,
266 0x53f5a653, 0xd168b9d1, 0x0, 0xed2cc1ed,
267 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b,
268 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239,
269 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf,
270 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb,
271 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185,
272 0x45cf8a45, 0xf910e9f9, 0x2060402, 0x7f81fe7f,
273 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8,
274 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f,
275 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5,
276 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221,
277 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2,
278 0xcd4c81cd, 0xc14180c, 0x13352613, 0xec2fc3ec,
279 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17,
280 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d,
281 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673,
282 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc,
283 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88,
284 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814,
285 0xde79a7de, 0x5ee2bc5e, 0xb1d160b, 0xdb76addb,
286 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0xa1e140a,
287 0x49db9249, 0x60a0c06, 0x246c4824, 0x5ce4b85c,
288 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462,
289 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279,
290 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d,
291 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9,
292 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea,
293 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x8181008,
294 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e,
295 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6,
296 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f,
297 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a,
298 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66,
299 0x48d89048, 0x3050603, 0xf601f7f6, 0xe121c0e,
300 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9,
301 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e,
302 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211,
303 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394,
304 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9,
305 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df,
306 0x8c8f038c, 0xa1f859a1, 0x89800989, 0xd171a0d,
307 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068,
308 0x41c38241, 0x99b02999, 0x2d775a2d, 0xf111e0f,
309 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16)
310
311 T4 = (0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6,
312 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491,
313 0x30305060, 0x1010302, 0x6767a9ce, 0x2b2b7d56,
314 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec,
315 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa,
316 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb,
317 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45,
318 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b,
319 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c,
320 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83,
321 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9,
322 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a,
323 0x4040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d,
324 0x18182830, 0x9696a137, 0x5050f0a, 0x9a9ab52f,
325 0x707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf,
326 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea,
327 0x9091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34,
328 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b,
329 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d,
330 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713,
331 0x5353f5a6, 0xd1d168b9, 0x0, 0xeded2cc1,
332 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6,
333 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72,
334 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85,
335 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed,
336 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411,
337 0x4545cf8a, 0xf9f910e9, 0x2020604, 0x7f7f81fe,
338 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b,
339 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05,
340 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1,
341 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342,
342 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf,
343 0xcdcd4c81, 0xc0c1418, 0x13133526, 0xecec2fc3,
344 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e,
345 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a,
346 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6,
347 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3,
348 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b,
349 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28,
350 0xdede79a7, 0x5e5ee2bc, 0xb0b1d16, 0xdbdb76ad,
351 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0xa0a1e14,
352 0x4949db92, 0x6060a0c, 0x24246c48, 0x5c5ce4b8,
353 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4,
354 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2,
355 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da,
356 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049,
357 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf,
358 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x8081810,
359 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c,
360 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197,
361 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e,
362 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f,
363 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc,
364 0x4848d890, 0x3030506, 0xf6f601f7, 0xe0e121c,
365 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069,
366 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927,
367 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322,
368 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733,
369 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9,
370 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5,
371 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0xd0d171a,
372 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0,
373 0x4141c382, 0x9999b029, 0x2d2d775a, 0xf0f111e,
374 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c)
375
376 T5 = (0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96,
377 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393,
378 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25,
379 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f,
380 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1,
381 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6,
382 0x38f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da,
383 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844,
384 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd,
385 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4,
386 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45,
387 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94,
388 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7,
389 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a,
390 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5,
391 0x302887f2, 0x23bfa5b2, 0x2036aba, 0xed16825c,
392 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1,
393 0x65daf4cd, 0x605bed5, 0xd134621f, 0xc4a6fe8a,
394 0x342e539d, 0xa2f355a0, 0x58ae132, 0xa4f6eb75,
395 0xb83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051,
396 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46,
397 0x91548db5, 0x71c45d05, 0x406d46f, 0x605015ff,
398 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77,
399 0xb0e842bd, 0x7898b88, 0xe7195b38, 0x79c8eedb,
400 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x0,
401 0x9808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e,
402 0xfd0efffb, 0xf853856, 0x3daed51e, 0x362d3927,
403 0xa0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a,
404 0xc0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e,
405 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16,
406 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d,
407 0xe090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8,
408 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd,
409 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34,
410 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163,
411 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120,
412 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d,
413 0x1d9e2f4b, 0xdcb230f3, 0xd8652ec, 0x77c1e3d0,
414 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422,
415 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef,
416 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36,
417 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4,
418 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662,
419 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5,
420 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3,
421 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b,
422 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8,
423 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6,
424 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6,
425 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0,
426 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815,
427 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f,
428 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df,
429 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f,
430 0x9d5eea04, 0x18c355d, 0xfa877473, 0xfb0b412e,
431 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713,
432 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89,
433 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c,
434 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf,
435 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86,
436 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f,
437 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541,
438 0x39a80171, 0x80cb3de, 0xd8b4e49c, 0x6456c190,
439 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742)
440
441 T6 = (0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e,
442 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303,
443 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c,
444 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3,
445 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0,
446 0x2c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9,
447 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259,
448 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8,
449 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971,
450 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a,
451 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f,
452 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b,
453 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8,
454 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab,
455 0x7b2eb28, 0x32fb5c2, 0x9a86c57b, 0xa5d33708,
456 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682,
457 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2,
458 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe,
459 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb,
460 0x390b83ec, 0xaa4060ef, 0x65e719f, 0x51bd6e10,
461 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd,
462 0xb591548d, 0x571c45d, 0x6f0406d4, 0xff605015,
463 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e,
464 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee,
465 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x0,
466 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72,
467 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39,
468 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e,
469 0xb10c0a67, 0xf9357e7, 0xd2b4ee96, 0x9e1b9b91,
470 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a,
471 0xae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17,
472 0xb0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9,
473 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60,
474 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e,
475 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1,
476 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611,
477 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1,
478 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3,
479 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964,
480 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390,
481 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b,
482 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf,
483 0xe42c3a9d, 0xd507892, 0x9b6a5fcc, 0x62547e46,
484 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af,
485 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512,
486 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb,
487 0x9cd2678, 0xf46e5918, 0x1ec9ab7, 0xa8834f9a,
488 0x65e6956e, 0x7eaaffe6, 0x821bccf, 0xe6ef15e8,
489 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c,
490 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266,
491 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8,
492 0x4af10498, 0xf741ecda, 0xe7fcd50, 0x2f1791f6,
493 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604,
494 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551,
495 0x49d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41,
496 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647,
497 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c,
498 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1,
499 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737,
500 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db,
501 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340,
502 0x72161dc3, 0xcbce225, 0x8b283c49, 0x41ff0d95,
503 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1,
504 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857)
505
506 T7 = (0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27,
507 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x3934be3,
508 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502,
509 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562,
510 0x5a49deb1, 0x1b6725ba, 0xe9845ea, 0xc0e15dfe,
511 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3,
512 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552,
513 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9,
514 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9,
515 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce,
516 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253,
517 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908,
518 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b,
519 0xd323ab73, 0x2e2724b, 0x8f57e31f, 0xab2a6655,
520 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x8a5d337,
521 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16,
522 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69,
523 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6,
524 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6,
525 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e,
526 0x8af93e21, 0x63d96dd, 0x5aedd3e, 0xbd464de6,
527 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050,
528 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9,
529 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8,
530 0xa47a17c, 0xfe97c42, 0x1ec9f884, 0x0,
531 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a,
532 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d,
533 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436,
534 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b,
535 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12,
536 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b,
537 0xd0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e,
538 0x198557f1, 0x74caf75, 0xddbbee99, 0x60fda37f,
539 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb,
540 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4,
541 0xdccad731, 0x85104263, 0x22401397, 0x112084c6,
542 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729,
543 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1,
544 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9,
545 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233,
546 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0xb3698d4,
547 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad,
548 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e,
549 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3,
550 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25,
551 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b,
552 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f,
553 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15,
554 0x9bd9bae7, 0x36ce4a6f, 0x9d4ea9f, 0x7cd629b0,
555 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2,
556 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7,
557 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791,
558 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x4dfe496,
559 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665,
560 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b,
561 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6,
562 0x618c9ad7, 0xc7a37a1, 0x148e59f8, 0x3c89eb13,
563 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47,
564 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7,
565 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844,
566 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3,
567 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d,
568 0x17139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456,
569 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8)
570
571 T8 = (0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a,
572 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b,
573 0x30fa5520, 0x766df6ad, 0xcc769188, 0x24c25f5,
574 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5,
575 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d,
576 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b,
577 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95,
578 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e,
579 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27,
580 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d,
581 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562,
582 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x82b94f9,
583 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752,
584 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66,
585 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3,
586 0x2887f230, 0xbfa5b223, 0x36aba02, 0x16825ced,
587 0xcf1c2b8a, 0x79b492a7, 0x7f2f0f3, 0x69e2a14e,
588 0xdaf4cd65, 0x5bed506, 0x34621fd1, 0xa6fe8ac4,
589 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4,
590 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd,
591 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d,
592 0x548db591, 0xc45d0571, 0x6d46f04, 0x5015ff60,
593 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767,
594 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79,
595 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x0,
596 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c,
597 0xefffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736,
598 0xfd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24,
599 0xa67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b,
600 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c,
601 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12,
602 0x90d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814,
603 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3,
604 0x1269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b,
605 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8,
606 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084,
607 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7,
608 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077,
609 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247,
610 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22,
611 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698,
612 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f,
613 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254,
614 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582,
615 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf,
616 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb,
617 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883,
618 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef,
619 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629,
620 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035,
621 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533,
622 0x4984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17,
623 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4,
624 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46,
625 0x5eea049d, 0x8c355d01, 0x877473fa, 0xb412efb,
626 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d,
627 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb,
628 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a,
629 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73,
630 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678,
631 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2,
632 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0xd9541ff,
633 0xa8017139, 0xcb3de08, 0xb4e49cd8, 0x56c19064,
634 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0)
635
636 U1 = (0x0, 0xe090d0b, 0x1c121a16, 0x121b171d,
637 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331,
638 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45,
639 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69,
640 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad,
641 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381,
642 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5,
643 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9,
644 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66,
645 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a,
646 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e,
647 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012,
648 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6,
649 0x38f5fe7, 0xd8652ec, 0x1f9d45f1, 0x119448fa,
650 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e,
651 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2,
652 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb,
653 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7,
654 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3,
655 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f,
656 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b,
657 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77,
658 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203,
659 0x58ae132, 0xb83ec39, 0x1998fb24, 0x1791f62f,
660 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190,
661 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc,
662 0x605bed5, 0x80cb3de, 0x1a17a4c3, 0x141ea9c8,
663 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4,
664 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120,
665 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c,
666 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978,
667 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54,
668 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea,
669 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6,
670 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2,
671 0x9808683, 0x7898b88, 0x15929c95, 0x1b9b919e,
672 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a,
673 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976,
674 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502,
675 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e,
676 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691,
677 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd,
678 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9,
679 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5,
680 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621,
681 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d,
682 0xa0fd964, 0x406d46f, 0x161dc372, 0x1814ce79,
683 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55,
684 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c,
685 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430,
686 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844,
687 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68,
688 0xc0a67b1, 0x2036aba, 0x10187da7, 0x1e1170ac,
689 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480,
690 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4,
691 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8,
692 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67,
693 0xf853856, 0x18c355d, 0x13972240, 0x1d9e2f4b,
694 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f,
695 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713,
696 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7,
697 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb,
698 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f,
699 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3)
700
701 U2 = (0x0, 0xb0e090d, 0x161c121a, 0x1d121b17,
702 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23,
703 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f,
704 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b,
705 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7,
706 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3,
707 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af,
708 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b,
709 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac,
710 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498,
711 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4,
712 0xf9357e7, 0x49d5eea, 0x198f45fd, 0x12814cf0,
713 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c,
714 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448,
715 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814,
716 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20,
717 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a,
718 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e,
719 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512,
720 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126,
721 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa,
722 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e,
723 0x1e3daed5, 0x1533a7d8, 0x821bccf, 0x32fb5c2,
724 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6,
725 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1,
726 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5,
727 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9,
728 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d,
729 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611,
730 0x11aef932, 0x1aa0f03f, 0x7b2eb28, 0xcbce225,
731 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79,
732 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d,
733 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd,
734 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9,
735 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5,
736 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91,
737 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d,
738 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329,
739 0x1fd13462, 0x14df3d6f, 0x9cd2678, 0x2c32f75,
740 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41,
741 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76,
742 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842,
743 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e,
744 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a,
745 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6,
746 0x10426385, 0x1b4c6a88, 0x65e719f, 0xd507892,
747 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce,
748 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa,
749 0x1ec9ab7, 0xae293ba, 0x17f088ad, 0x1cfe81a0,
750 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594,
751 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8,
752 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc,
753 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170,
754 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544,
755 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918,
756 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c,
757 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b,
758 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f,
759 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273,
760 0xe7fcd50, 0x571c45d, 0x1863df4a, 0x136dd647,
761 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb,
762 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff,
763 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3,
764 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697)
765
766 U3 = (0x0, 0xd0b0e09, 0x1a161c12, 0x171d121b,
767 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f,
768 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253,
769 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77,
770 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b,
771 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf,
772 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3,
773 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7,
774 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920,
775 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104,
776 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968,
777 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c,
778 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0,
779 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194,
780 0x3934be3, 0xe9845ea, 0x198557f1, 0x148e59f8,
781 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc,
782 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d,
783 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749,
784 0x5aedd3e, 0x8a5d337, 0x1fb8c12c, 0x12b3cf25,
785 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701,
786 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd,
787 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9,
788 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5,
789 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791,
790 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456,
791 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72,
792 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e,
793 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a,
794 0x63d96dd, 0xb3698d4, 0x1c2b8acf, 0x112084c6,
795 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2,
796 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e,
797 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa,
798 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7,
799 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3,
800 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf,
801 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b,
802 0xa47a17c, 0x74caf75, 0x1051bd6e, 0x1d5ab367,
803 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43,
804 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f,
805 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b,
806 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc,
807 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8,
808 0x9d4ea9f, 0x4dfe496, 0x13c2f68d, 0x1ec9f884,
809 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0,
810 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c,
811 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078,
812 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814,
813 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030,
814 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81,
815 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5,
816 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9,
817 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed,
818 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11,
819 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635,
820 0xfe97c42, 0x2e2724b, 0x15ff6050, 0x18f46e59,
821 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d,
822 0xc7a37a1, 0x17139a8, 0x166c2bb3, 0x1b6725ba,
823 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e,
824 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2,
825 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6,
826 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a,
827 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e,
828 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562,
829 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46)
830
831 U4 = (0x0, 0x90d0b0e, 0x121a161c, 0x1b171d12,
832 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a,
833 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562,
834 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a,
835 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2,
836 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca,
837 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582,
838 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba,
839 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9,
840 0x1f8f57e3, 0x16825ced, 0xd9541ff, 0x4984af1,
841 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9,
842 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281,
843 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629,
844 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11,
845 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59,
846 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261,
847 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf,
848 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787,
849 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf,
850 0x1a3182e5, 0x133c89eb, 0x82b94f9, 0x1269ff7,
851 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f,
852 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767,
853 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f,
854 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17,
855 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064,
856 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c,
857 0x5bed506, 0xcb3de08, 0x17a4c31a, 0x1ea9c814,
858 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c,
859 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084,
860 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc,
861 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4,
862 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc,
863 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53,
864 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b,
865 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223,
866 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b,
867 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3,
868 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b,
869 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3,
870 0x105633e9, 0x195b38e7, 0x24c25f5, 0xb412efb,
871 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188,
872 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0,
873 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8,
874 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0,
875 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168,
876 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50,
877 0xfd9640a, 0x6d46f04, 0x1dc37216, 0x14ce7918,
878 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520,
879 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe,
880 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6,
881 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e,
882 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6,
883 0xa67b10c, 0x36aba02, 0x187da710, 0x1170ac1e,
884 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026,
885 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e,
886 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856,
887 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725,
888 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d,
889 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55,
890 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d,
891 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5,
892 0x15e8e6ef, 0x1ce5ede1, 0x7f2f0f3, 0xefffbfd,
893 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5,
894 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d)
895
896 rcon = (0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80,
897 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f,
898 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4,
899 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91)
900
902 - def __init__(self, key, block_size = 16):
903 if block_size != 16 and block_size != 24 and block_size != 32:
904 raise ValueError('Invalid block size: ' + str(block_size))
905 if len(key) != 16 and len(key) != 24 and len(key) != 32:
906 raise ValueError('Invalid key size: ' + str(len(key)))
907 self.block_size = block_size
908
909 ROUNDS = num_rounds[len(key)][block_size]
910 BC = block_size // 4
911
912 Ke = [[0] * BC for i in range(ROUNDS + 1)]
913
914 Kd = [[0] * BC for i in range(ROUNDS + 1)]
915 ROUND_KEY_COUNT = (ROUNDS + 1) * BC
916 KC = len(key) // 4
917
918
919 tk = []
920 for i in range(0, KC):
921 tk.append((key[i * 4] << 24) | (key[i * 4 + 1] << 16) |
922 (key[i * 4 + 2] << 8) | key[i * 4 + 3])
923
924
925 t = 0
926 j = 0
927 while j < KC and t < ROUND_KEY_COUNT:
928 Ke[t // BC][t % BC] = tk[j]
929 Kd[ROUNDS - (t // BC)][t % BC] = tk[j]
930 j += 1
931 t += 1
932 tt = 0
933 rconpointer = 0
934 while t < ROUND_KEY_COUNT:
935
936 tt = tk[KC - 1]
937 tk[0] ^= (S[(tt >> 16) & 0xFF] & 0xFF) << 24 ^ \
938 (S[(tt >> 8) & 0xFF] & 0xFF) << 16 ^ \
939 (S[ tt & 0xFF] & 0xFF) << 8 ^ \
940 (S[(tt >> 24) & 0xFF] & 0xFF) ^ \
941 (rcon[rconpointer] & 0xFF) << 24
942 rconpointer += 1
943 if KC != 8:
944 for i in range(1, KC):
945 tk[i] ^= tk[i-1]
946 else:
947 for i in range(1, KC // 2):
948 tk[i] ^= tk[i-1]
949 tt = tk[KC // 2 - 1]
950 tk[KC // 2] ^= (S[ tt & 0xFF] & 0xFF) ^ \
951 (S[(tt >> 8) & 0xFF] & 0xFF) << 8 ^ \
952 (S[(tt >> 16) & 0xFF] & 0xFF) << 16 ^ \
953 (S[(tt >> 24) & 0xFF] & 0xFF) << 24
954 for i in range(KC // 2 + 1, KC):
955 tk[i] ^= tk[i-1]
956
957 j = 0
958 while j < KC and t < ROUND_KEY_COUNT:
959 Ke[t // BC][t % BC] = tk[j]
960 Kd[ROUNDS - (t // BC)][t % BC] = tk[j]
961 j += 1
962 t += 1
963
964 for r in range(1, ROUNDS):
965 for j in range(BC):
966 tt = Kd[r][j]
967 Kd[r][j] = U1[(tt >> 24) & 0xFF] ^ \
968 U2[(tt >> 16) & 0xFF] ^ \
969 U3[(tt >> 8) & 0xFF] ^ \
970 U4[ tt & 0xFF]
971 self.Ke = Ke
972 self.Kd = Kd
973
975 if len(plaintext) != self.block_size:
976 raise ValueError('wrong block length, expected {0} got {1}'
977 .format(self.block_size, len(plaintext)))
978 Ke = self.Ke
979
980 BC = self.block_size // 4
981 ROUNDS = len(Ke) - 1
982 if BC == 4:
983 SC = 0
984 elif BC == 6:
985 SC = 1
986 else:
987 SC = 2
988 s1 = shifts[SC][1][0]
989 s2 = shifts[SC][2][0]
990 s3 = shifts[SC][3][0]
991 a = [0] * BC
992
993 t = []
994
995 for i in range(BC):
996 t.append((plaintext[i * 4 ] << 24 |
997 plaintext[i * 4 + 1] << 16 |
998 plaintext[i * 4 + 2] << 8 |
999 plaintext[i * 4 + 3] ) ^ Ke[0][i])
1000
1001 for r in range(1, ROUNDS):
1002 for i in range(BC):
1003 a[i] = (T1[(t[ i ] >> 24) & 0xFF] ^
1004 T2[(t[(i + s1) % BC] >> 16) & 0xFF] ^
1005 T3[(t[(i + s2) % BC] >> 8) & 0xFF] ^
1006 T4[ t[(i + s3) % BC] & 0xFF] ) ^ Ke[r][i]
1007 t = a[:]
1008
1009 result = []
1010 for i in range(BC):
1011 tt = Ke[ROUNDS][i]
1012 result.append((S[(t[ i ] >> 24) & 0xFF] ^ (tt>>24)) & 0xFF)
1013 result.append((S[(t[(i+s1) % BC] >> 16) & 0xFF] ^ (tt>>16)) & 0xFF)
1014 result.append((S[(t[(i+s2) % BC] >> 8) & 0xFF] ^ (tt>> 8)) & 0xFF)
1015 result.append((S[ t[(i+s3) % BC] & 0xFF] ^ tt ) & 0xFF)
1016 return bytearray(result)
1017
1019 if len(ciphertext) != self.block_size:
1020 raise ValueError('wrong block length, expected {0} got {1}'
1021 .format(self.block_size, len(plaintext)))
1022 Kd = self.Kd
1023
1024 BC = self.block_size // 4
1025 ROUNDS = len(Kd) - 1
1026 if BC == 4:
1027 SC = 0
1028 elif BC == 6:
1029 SC = 1
1030 else:
1031 SC = 2
1032 s1 = shifts[SC][1][1]
1033 s2 = shifts[SC][2][1]
1034 s3 = shifts[SC][3][1]
1035 a = [0] * BC
1036
1037 t = [0] * BC
1038
1039 for i in range(BC):
1040 t[i] = (ciphertext[i * 4 ] << 24 |
1041 ciphertext[i * 4 + 1] << 16 |
1042 ciphertext[i * 4 + 2] << 8 |
1043 ciphertext[i * 4 + 3] ) ^ Kd[0][i]
1044
1045 for r in range(1, ROUNDS):
1046 for i in range(BC):
1047 a[i] = (T5[(t[ i ] >> 24) & 0xFF] ^
1048 T6[(t[(i + s1) % BC] >> 16) & 0xFF] ^
1049 T7[(t[(i + s2) % BC] >> 8) & 0xFF] ^
1050 T8[ t[(i + s3) % BC] & 0xFF] ) ^ Kd[r][i]
1051 t = a[:]
1052
1053 result = []
1054 for i in range(BC):
1055 tt = Kd[ROUNDS][i]
1056 result.append((Si[(t[ i ] >> 24) & 0xFF] ^ (tt>>24)) &0xFF)
1057 result.append((Si[(t[(i+s1) % BC] >> 16) & 0xFF] ^ (tt>>16)) &0xFF)
1058 result.append((Si[(t[(i+s2) % BC] >> 8) & 0xFF] ^ (tt>> 8)) &0xFF)
1059 result.append((Si[ t[(i+s3) % BC] & 0xFF] ^ tt ) &0xFF)
1060 return bytearray(result)
1061
1064
1067
1069 def t(kl, bl):
1070 b = 'b' * bl
1071 r = rijndael('a' * kl, bl)
1072 assert r.decrypt(r.encrypt(b)) == b
1073 t(16, 16)
1074 t(16, 24)
1075 t(16, 32)
1076 t(24, 16)
1077 t(24, 24)
1078 t(24, 32)
1079 t(32, 16)
1080 t(32, 24)
1081 t(32, 32)
1082