1
/* rijndael-alg-fst.c --- Rijndael cipher implementation.
2
* Copyright (C) 2005, 2006 Free Software Foundation, Inc.
4
* This file is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU Lesser General Public License as published
6
* by the Free Software Foundation; either version 2.1, or (at your
7
* option) any later version.
9
* This file is distributed in the hope that it will be useful, but
10
* WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* General Public License for more details.
14
* You should have received a copy of the GNU Lesser General Public License
15
* along with this file; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21
/* Adapted for gnulib by Simon Josefsson.
23
* Based on public domain "Optimised C code" retrieved from (SHA1
24
* 7c8e4b00d06685d1dbc6724a9e0d502353de339e):
25
* http://www.iaik.tu-graz.ac.at/research/krypto/AES/old/~rijmen/rijndael/rijndael-fst-3.0.zip
33
* @version 3.0 (December 2000)
35
* Optimised ANSI C code for the Rijndael cipher (now AES)
37
* @author Vincent Rijmen <vincent.rijmen@esat.kuleuven.ac.be>
38
* @author Antoon Bosselaers <antoon.bosselaers@esat.kuleuven.ac.be>
39
* @author Paulo Barreto <paulo.barreto@terra.com.br>
41
* This code is hereby placed in the public domain.
43
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS
44
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
45
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
46
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE
47
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
48
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
49
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
50
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
51
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
52
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
53
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
56
#include "rijndael-alg-fst.h"
59
Te0[x] = S [x].[02, 01, 01, 03];
60
Te1[x] = S [x].[03, 02, 01, 01];
61
Te2[x] = S [x].[01, 03, 02, 01];
62
Te3[x] = S [x].[01, 01, 03, 02];
63
Te4[x] = S [x].[01, 01, 01, 01];
65
Td0[x] = Si[x].[0e, 09, 0d, 0b];
66
Td1[x] = Si[x].[0b, 0e, 09, 0d];
67
Td2[x] = Si[x].[0d, 0b, 0e, 09];
68
Td3[x] = Si[x].[09, 0d, 0b, 0e];
69
Td4[x] = Si[x].[01, 01, 01, 01];
72
static const uint32_t Te0[256] = {
73
0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d,
74
0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554,
75
0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d,
76
0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a,
77
0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87,
78
0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b,
79
0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea,
80
0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b,
81
0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a,
82
0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f,
83
0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108,
84
0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f,
85
0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e,
86
0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5,
87
0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d,
88
0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f,
89
0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e,
90
0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb,
91
0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce,
92
0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497,
93
0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c,
94
0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed,
95
0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b,
96
0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a,
97
0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16,
98
0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594,
99
0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81,
100
0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3,
101
0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a,
102
0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504,
103
0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163,
104
0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d,
105
0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f,
106
0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739,
107
0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47,
108
0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395,
109
0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f,
110
0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883,
111
0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c,
112
0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76,
113
0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e,
114
0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4,
115
0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6,
116
0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b,
117
0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7,
118
0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0,
119
0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25,
120
0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818,
121
0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72,
122
0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651,
123
0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21,
124
0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85,
125
0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa,
126
0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12,
127
0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0,
128
0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9,
129
0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133,
130
0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7,
131
0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920,
132
0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a,
133
0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17,
134
0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8,
135
0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11,
136
0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a,
138
static const uint32_t Te1[256] = {
139
0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b,
140
0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5,
141
0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b,
142
0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676,
143
0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d,
144
0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0,
145
0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf,
146
0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0,
147
0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626,
148
0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc,
149
0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1,
150
0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515,
151
0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3,
152
0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a,
153
0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2,
154
0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575,
155
0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a,
156
0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0,
157
0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3,
158
0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484,
159
0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded,
160
0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b,
161
0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939,
162
0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf,
163
0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb,
164
0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585,
165
0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f,
166
0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8,
167
0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f,
168
0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5,
169
0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121,
170
0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2,
171
0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec,
172
0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717,
173
0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d,
174
0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373,
175
0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc,
176
0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888,
177
0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414,
178
0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb,
179
0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a,
180
0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c,
181
0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262,
182
0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979,
183
0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d,
184
0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9,
185
0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea,
186
0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808,
187
0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e,
188
0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6,
189
0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f,
190
0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a,
191
0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666,
192
0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e,
193
0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9,
194
0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e,
195
0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111,
196
0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494,
197
0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9,
198
0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf,
199
0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d,
200
0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868,
201
0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f,
202
0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616,
204
static const uint32_t Te2[256] = {
205
0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b,
206
0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5,
207
0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b,
208
0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76,
209
0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d,
210
0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0,
211
0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af,
212
0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0,
213
0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26,
214
0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc,
215
0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1,
216
0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15,
217
0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3,
218
0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a,
219
0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2,
220
0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75,
221
0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a,
222
0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0,
223
0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3,
224
0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384,
225
0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed,
226
0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b,
227
0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239,
228
0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf,
229
0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb,
230
0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185,
231
0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f,
232
0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8,
233
0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f,
234
0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5,
235
0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221,
236
0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2,
237
0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec,
238
0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17,
239
0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d,
240
0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673,
241
0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc,
242
0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88,
243
0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814,
244
0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb,
245
0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a,
246
0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c,
247
0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462,
248
0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279,
249
0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d,
250
0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9,
251
0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea,
252
0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008,
253
0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e,
254
0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6,
255
0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f,
256
0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a,
257
0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66,
258
0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e,
259
0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9,
260
0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e,
261
0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211,
262
0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394,
263
0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9,
264
0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df,
265
0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d,
266
0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068,
267
0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f,
268
0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16,
270
static const uint32_t Te3[256] = {
271
0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6,
272
0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491,
273
0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56,
274
0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec,
275
0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa,
276
0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb,
277
0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45,
278
0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b,
279
0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c,
280
0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83,
281
0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9,
282
0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a,
283
0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d,
284
0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f,
285
0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf,
286
0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea,
287
0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34,
288
0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b,
289
0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d,
290
0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713,
291
0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1,
292
0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6,
293
0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72,
294
0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85,
295
0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed,
296
0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411,
297
0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe,
298
0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b,
299
0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05,
300
0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1,
301
0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342,
302
0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf,
303
0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3,
304
0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e,
305
0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a,
306
0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6,
307
0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3,
308
0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b,
309
0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28,
310
0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad,
311
0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14,
312
0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8,
313
0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4,
314
0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2,
315
0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da,
316
0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049,
317
0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf,
318
0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810,
319
0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c,
320
0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197,
321
0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e,
322
0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f,
323
0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc,
324
0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c,
325
0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069,
326
0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927,
327
0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322,
328
0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733,
329
0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9,
330
0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5,
331
0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a,
332
0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0,
333
0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e,
334
0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c,
336
static const uint32_t Te4[256] = {
337
0x63636363, 0x7c7c7c7c, 0x77777777, 0x7b7b7b7b,
338
0xf2f2f2f2, 0x6b6b6b6b, 0x6f6f6f6f, 0xc5c5c5c5,
339
0x30303030, 0x01010101, 0x67676767, 0x2b2b2b2b,
340
0xfefefefe, 0xd7d7d7d7, 0xabababab, 0x76767676,
341
0xcacacaca, 0x82828282, 0xc9c9c9c9, 0x7d7d7d7d,
342
0xfafafafa, 0x59595959, 0x47474747, 0xf0f0f0f0,
343
0xadadadad, 0xd4d4d4d4, 0xa2a2a2a2, 0xafafafaf,
344
0x9c9c9c9c, 0xa4a4a4a4, 0x72727272, 0xc0c0c0c0,
345
0xb7b7b7b7, 0xfdfdfdfd, 0x93939393, 0x26262626,
346
0x36363636, 0x3f3f3f3f, 0xf7f7f7f7, 0xcccccccc,
347
0x34343434, 0xa5a5a5a5, 0xe5e5e5e5, 0xf1f1f1f1,
348
0x71717171, 0xd8d8d8d8, 0x31313131, 0x15151515,
349
0x04040404, 0xc7c7c7c7, 0x23232323, 0xc3c3c3c3,
350
0x18181818, 0x96969696, 0x05050505, 0x9a9a9a9a,
351
0x07070707, 0x12121212, 0x80808080, 0xe2e2e2e2,
352
0xebebebeb, 0x27272727, 0xb2b2b2b2, 0x75757575,
353
0x09090909, 0x83838383, 0x2c2c2c2c, 0x1a1a1a1a,
354
0x1b1b1b1b, 0x6e6e6e6e, 0x5a5a5a5a, 0xa0a0a0a0,
355
0x52525252, 0x3b3b3b3b, 0xd6d6d6d6, 0xb3b3b3b3,
356
0x29292929, 0xe3e3e3e3, 0x2f2f2f2f, 0x84848484,
357
0x53535353, 0xd1d1d1d1, 0x00000000, 0xedededed,
358
0x20202020, 0xfcfcfcfc, 0xb1b1b1b1, 0x5b5b5b5b,
359
0x6a6a6a6a, 0xcbcbcbcb, 0xbebebebe, 0x39393939,
360
0x4a4a4a4a, 0x4c4c4c4c, 0x58585858, 0xcfcfcfcf,
361
0xd0d0d0d0, 0xefefefef, 0xaaaaaaaa, 0xfbfbfbfb,
362
0x43434343, 0x4d4d4d4d, 0x33333333, 0x85858585,
363
0x45454545, 0xf9f9f9f9, 0x02020202, 0x7f7f7f7f,
364
0x50505050, 0x3c3c3c3c, 0x9f9f9f9f, 0xa8a8a8a8,
365
0x51515151, 0xa3a3a3a3, 0x40404040, 0x8f8f8f8f,
366
0x92929292, 0x9d9d9d9d, 0x38383838, 0xf5f5f5f5,
367
0xbcbcbcbc, 0xb6b6b6b6, 0xdadadada, 0x21212121,
368
0x10101010, 0xffffffff, 0xf3f3f3f3, 0xd2d2d2d2,
369
0xcdcdcdcd, 0x0c0c0c0c, 0x13131313, 0xecececec,
370
0x5f5f5f5f, 0x97979797, 0x44444444, 0x17171717,
371
0xc4c4c4c4, 0xa7a7a7a7, 0x7e7e7e7e, 0x3d3d3d3d,
372
0x64646464, 0x5d5d5d5d, 0x19191919, 0x73737373,
373
0x60606060, 0x81818181, 0x4f4f4f4f, 0xdcdcdcdc,
374
0x22222222, 0x2a2a2a2a, 0x90909090, 0x88888888,
375
0x46464646, 0xeeeeeeee, 0xb8b8b8b8, 0x14141414,
376
0xdededede, 0x5e5e5e5e, 0x0b0b0b0b, 0xdbdbdbdb,
377
0xe0e0e0e0, 0x32323232, 0x3a3a3a3a, 0x0a0a0a0a,
378
0x49494949, 0x06060606, 0x24242424, 0x5c5c5c5c,
379
0xc2c2c2c2, 0xd3d3d3d3, 0xacacacac, 0x62626262,
380
0x91919191, 0x95959595, 0xe4e4e4e4, 0x79797979,
381
0xe7e7e7e7, 0xc8c8c8c8, 0x37373737, 0x6d6d6d6d,
382
0x8d8d8d8d, 0xd5d5d5d5, 0x4e4e4e4e, 0xa9a9a9a9,
383
0x6c6c6c6c, 0x56565656, 0xf4f4f4f4, 0xeaeaeaea,
384
0x65656565, 0x7a7a7a7a, 0xaeaeaeae, 0x08080808,
385
0xbabababa, 0x78787878, 0x25252525, 0x2e2e2e2e,
386
0x1c1c1c1c, 0xa6a6a6a6, 0xb4b4b4b4, 0xc6c6c6c6,
387
0xe8e8e8e8, 0xdddddddd, 0x74747474, 0x1f1f1f1f,
388
0x4b4b4b4b, 0xbdbdbdbd, 0x8b8b8b8b, 0x8a8a8a8a,
389
0x70707070, 0x3e3e3e3e, 0xb5b5b5b5, 0x66666666,
390
0x48484848, 0x03030303, 0xf6f6f6f6, 0x0e0e0e0e,
391
0x61616161, 0x35353535, 0x57575757, 0xb9b9b9b9,
392
0x86868686, 0xc1c1c1c1, 0x1d1d1d1d, 0x9e9e9e9e,
393
0xe1e1e1e1, 0xf8f8f8f8, 0x98989898, 0x11111111,
394
0x69696969, 0xd9d9d9d9, 0x8e8e8e8e, 0x94949494,
395
0x9b9b9b9b, 0x1e1e1e1e, 0x87878787, 0xe9e9e9e9,
396
0xcececece, 0x55555555, 0x28282828, 0xdfdfdfdf,
397
0x8c8c8c8c, 0xa1a1a1a1, 0x89898989, 0x0d0d0d0d,
398
0xbfbfbfbf, 0xe6e6e6e6, 0x42424242, 0x68686868,
399
0x41414141, 0x99999999, 0x2d2d2d2d, 0x0f0f0f0f,
400
0xb0b0b0b0, 0x54545454, 0xbbbbbbbb, 0x16161616,
402
static const uint32_t Td0[256] = {
403
0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96,
404
0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393,
405
0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25,
406
0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f,
407
0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1,
408
0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6,
409
0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da,
410
0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844,
411
0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd,
412
0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4,
413
0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45,
414
0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94,
415
0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7,
416
0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a,
417
0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5,
418
0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c,
419
0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1,
420
0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a,
421
0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75,
422
0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051,
423
0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46,
424
0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff,
425
0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77,
426
0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb,
427
0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000,
428
0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e,
429
0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927,
430
0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a,
431
0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e,
432
0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16,
433
0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d,
434
0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8,
435
0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd,
436
0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34,
437
0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163,
438
0xd731dcca, 0x42638510, 0x13972240, 0x84c61120,
439
0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d,
440
0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0,
441
0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422,
442
0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef,
443
0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36,
444
0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4,
445
0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662,
446
0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5,
447
0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3,
448
0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b,
449
0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8,
450
0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6,
451
0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6,
452
0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0,
453
0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815,
454
0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f,
455
0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df,
456
0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f,
457
0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e,
458
0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713,
459
0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89,
460
0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c,
461
0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf,
462
0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86,
463
0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f,
464
0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541,
465
0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190,
466
0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742,
468
static const uint32_t Td1[256] = {
469
0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e,
470
0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303,
471
0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c,
472
0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3,
473
0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0,
474
0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9,
475
0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259,
476
0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8,
477
0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971,
478
0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a,
479
0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f,
480
0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b,
481
0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8,
482
0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab,
483
0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708,
484
0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682,
485
0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2,
486
0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe,
487
0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb,
488
0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10,
489
0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd,
490
0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015,
491
0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e,
492
0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee,
493
0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000,
494
0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72,
495
0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39,
496
0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e,
497
0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91,
498
0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a,
499
0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17,
500
0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9,
501
0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60,
502
0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e,
503
0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1,
504
0xcad731dc, 0x10426385, 0x40139722, 0x2084c611,
505
0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1,
506
0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3,
507
0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964,
508
0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390,
509
0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b,
510
0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf,
511
0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46,
512
0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af,
513
0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512,
514
0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb,
515
0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a,
516
0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8,
517
0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c,
518
0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266,
519
0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8,
520
0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6,
521
0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604,
522
0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551,
523
0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41,
524
0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647,
525
0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c,
526
0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1,
527
0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737,
528
0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db,
529
0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340,
530
0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95,
531
0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1,
532
0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857,
534
static const uint32_t Td2[256] = {
535
0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27,
536
0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3,
537
0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502,
538
0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562,
539
0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe,
540
0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3,
541
0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552,
542
0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9,
543
0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9,
544
0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce,
545
0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253,
546
0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908,
547
0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b,
548
0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655,
549
0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337,
550
0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16,
551
0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69,
552
0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6,
553
0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6,
554
0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e,
555
0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6,
556
0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050,
557
0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9,
558
0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8,
559
0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000,
560
0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a,
561
0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d,
562
0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436,
563
0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b,
564
0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12,
565
0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b,
566
0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e,
567
0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f,
568
0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb,
569
0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4,
570
0xdccad731, 0x85104263, 0x22401397, 0x112084c6,
571
0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729,
572
0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1,
573
0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9,
574
0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233,
575
0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4,
576
0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad,
577
0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e,
578
0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3,
579
0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25,
580
0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b,
581
0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f,
582
0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15,
583
0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0,
584
0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2,
585
0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7,
586
0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791,
587
0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496,
588
0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665,
589
0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b,
590
0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6,
591
0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13,
592
0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47,
593
0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7,
594
0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844,
595
0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3,
596
0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d,
597
0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456,
598
0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8,
600
static const uint32_t Td3[256] = {
601
0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a,
602
0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b,
603
0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5,
604
0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5,
605
0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d,
606
0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b,
607
0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95,
608
0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e,
609
0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27,
610
0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d,
611
0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562,
612
0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9,
613
0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752,
614
0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66,
615
0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3,
616
0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced,
617
0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e,
618
0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4,
619
0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4,
620
0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd,
621
0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d,
622
0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60,
623
0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767,
624
0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79,
625
0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000,
626
0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c,
627
0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736,
628
0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24,
629
0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b,
630
0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c,
631
0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12,
632
0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814,
633
0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3,
634
0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b,
635
0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8,
636
0x31dccad7, 0x63851042, 0x97224013, 0xc6112084,
637
0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7,
638
0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077,
639
0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247,
640
0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22,
641
0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698,
642
0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f,
643
0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254,
644
0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582,
645
0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf,
646
0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb,
647
0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883,
648
0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef,
649
0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629,
650
0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035,
651
0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533,
652
0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17,
653
0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4,
654
0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46,
655
0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb,
656
0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d,
657
0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb,
658
0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a,
659
0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73,
660
0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678,
661
0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2,
662
0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff,
663
0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064,
664
0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0,
666
static const uint32_t Td4[256] = {
667
0x52525252, 0x09090909, 0x6a6a6a6a, 0xd5d5d5d5,
668
0x30303030, 0x36363636, 0xa5a5a5a5, 0x38383838,
669
0xbfbfbfbf, 0x40404040, 0xa3a3a3a3, 0x9e9e9e9e,
670
0x81818181, 0xf3f3f3f3, 0xd7d7d7d7, 0xfbfbfbfb,
671
0x7c7c7c7c, 0xe3e3e3e3, 0x39393939, 0x82828282,
672
0x9b9b9b9b, 0x2f2f2f2f, 0xffffffff, 0x87878787,
673
0x34343434, 0x8e8e8e8e, 0x43434343, 0x44444444,
674
0xc4c4c4c4, 0xdededede, 0xe9e9e9e9, 0xcbcbcbcb,
675
0x54545454, 0x7b7b7b7b, 0x94949494, 0x32323232,
676
0xa6a6a6a6, 0xc2c2c2c2, 0x23232323, 0x3d3d3d3d,
677
0xeeeeeeee, 0x4c4c4c4c, 0x95959595, 0x0b0b0b0b,
678
0x42424242, 0xfafafafa, 0xc3c3c3c3, 0x4e4e4e4e,
679
0x08080808, 0x2e2e2e2e, 0xa1a1a1a1, 0x66666666,
680
0x28282828, 0xd9d9d9d9, 0x24242424, 0xb2b2b2b2,
681
0x76767676, 0x5b5b5b5b, 0xa2a2a2a2, 0x49494949,
682
0x6d6d6d6d, 0x8b8b8b8b, 0xd1d1d1d1, 0x25252525,
683
0x72727272, 0xf8f8f8f8, 0xf6f6f6f6, 0x64646464,
684
0x86868686, 0x68686868, 0x98989898, 0x16161616,
685
0xd4d4d4d4, 0xa4a4a4a4, 0x5c5c5c5c, 0xcccccccc,
686
0x5d5d5d5d, 0x65656565, 0xb6b6b6b6, 0x92929292,
687
0x6c6c6c6c, 0x70707070, 0x48484848, 0x50505050,
688
0xfdfdfdfd, 0xedededed, 0xb9b9b9b9, 0xdadadada,
689
0x5e5e5e5e, 0x15151515, 0x46464646, 0x57575757,
690
0xa7a7a7a7, 0x8d8d8d8d, 0x9d9d9d9d, 0x84848484,
691
0x90909090, 0xd8d8d8d8, 0xabababab, 0x00000000,
692
0x8c8c8c8c, 0xbcbcbcbc, 0xd3d3d3d3, 0x0a0a0a0a,
693
0xf7f7f7f7, 0xe4e4e4e4, 0x58585858, 0x05050505,
694
0xb8b8b8b8, 0xb3b3b3b3, 0x45454545, 0x06060606,
695
0xd0d0d0d0, 0x2c2c2c2c, 0x1e1e1e1e, 0x8f8f8f8f,
696
0xcacacaca, 0x3f3f3f3f, 0x0f0f0f0f, 0x02020202,
697
0xc1c1c1c1, 0xafafafaf, 0xbdbdbdbd, 0x03030303,
698
0x01010101, 0x13131313, 0x8a8a8a8a, 0x6b6b6b6b,
699
0x3a3a3a3a, 0x91919191, 0x11111111, 0x41414141,
700
0x4f4f4f4f, 0x67676767, 0xdcdcdcdc, 0xeaeaeaea,
701
0x97979797, 0xf2f2f2f2, 0xcfcfcfcf, 0xcececece,
702
0xf0f0f0f0, 0xb4b4b4b4, 0xe6e6e6e6, 0x73737373,
703
0x96969696, 0xacacacac, 0x74747474, 0x22222222,
704
0xe7e7e7e7, 0xadadadad, 0x35353535, 0x85858585,
705
0xe2e2e2e2, 0xf9f9f9f9, 0x37373737, 0xe8e8e8e8,
706
0x1c1c1c1c, 0x75757575, 0xdfdfdfdf, 0x6e6e6e6e,
707
0x47474747, 0xf1f1f1f1, 0x1a1a1a1a, 0x71717171,
708
0x1d1d1d1d, 0x29292929, 0xc5c5c5c5, 0x89898989,
709
0x6f6f6f6f, 0xb7b7b7b7, 0x62626262, 0x0e0e0e0e,
710
0xaaaaaaaa, 0x18181818, 0xbebebebe, 0x1b1b1b1b,
711
0xfcfcfcfc, 0x56565656, 0x3e3e3e3e, 0x4b4b4b4b,
712
0xc6c6c6c6, 0xd2d2d2d2, 0x79797979, 0x20202020,
713
0x9a9a9a9a, 0xdbdbdbdb, 0xc0c0c0c0, 0xfefefefe,
714
0x78787878, 0xcdcdcdcd, 0x5a5a5a5a, 0xf4f4f4f4,
715
0x1f1f1f1f, 0xdddddddd, 0xa8a8a8a8, 0x33333333,
716
0x88888888, 0x07070707, 0xc7c7c7c7, 0x31313131,
717
0xb1b1b1b1, 0x12121212, 0x10101010, 0x59595959,
718
0x27272727, 0x80808080, 0xecececec, 0x5f5f5f5f,
719
0x60606060, 0x51515151, 0x7f7f7f7f, 0xa9a9a9a9,
720
0x19191919, 0xb5b5b5b5, 0x4a4a4a4a, 0x0d0d0d0d,
721
0x2d2d2d2d, 0xe5e5e5e5, 0x7a7a7a7a, 0x9f9f9f9f,
722
0x93939393, 0xc9c9c9c9, 0x9c9c9c9c, 0xefefefef,
723
0xa0a0a0a0, 0xe0e0e0e0, 0x3b3b3b3b, 0x4d4d4d4d,
724
0xaeaeaeae, 0x2a2a2a2a, 0xf5f5f5f5, 0xb0b0b0b0,
725
0xc8c8c8c8, 0xebebebeb, 0xbbbbbbbb, 0x3c3c3c3c,
726
0x83838383, 0x53535353, 0x99999999, 0x61616161,
727
0x17171717, 0x2b2b2b2b, 0x04040404, 0x7e7e7e7e,
728
0xbabababa, 0x77777777, 0xd6d6d6d6, 0x26262626,
729
0xe1e1e1e1, 0x69696969, 0x14141414, 0x63636363,
730
0x55555555, 0x21212121, 0x0c0c0c0c, 0x7d7d7d7d,
732
static const uint32_t rcon[] = {
733
0x01000000, 0x02000000, 0x04000000, 0x08000000,
734
0x10000000, 0x20000000, 0x40000000, 0x80000000,
735
0x1B000000, 0x36000000
736
/* for 128-bit blocks, Rijndael never uses more than 10 rcon values */
739
#define GETU32(pt) (((uint32_t)((pt)[0] & 0xFF) << 24) ^ \
740
((uint32_t)((pt)[1] & 0xFF) << 16) ^ \
741
((uint32_t)((pt)[2] & 0xFF) << 8) ^ \
742
((uint32_t)((pt)[3] & 0xFF)))
743
#define PUTU32(ct, st) { \
744
(ct)[0] = (char)((st) >> 24); \
745
(ct)[1] = (char)((st) >> 16); \
746
(ct)[2] = (char)((st) >> 8); \
747
(ct)[3] = (char)(st); }
750
* Expand the cipher key into the encryption key schedule.
752
* @return the number of rounds for the given cipher key size.
755
rijndaelKeySetupEnc (uint32_t rk[ /*4*(Nr + 1) */ ],
756
const char cipherKey[], size_t keyBits)
761
rk[0] = GETU32 (cipherKey);
762
rk[1] = GETU32 (cipherKey + 4);
763
rk[2] = GETU32 (cipherKey + 8);
764
rk[3] = GETU32 (cipherKey + 12);
771
(Te4[(temp >> 16) & 0xff] & 0xff000000) ^
772
(Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^
773
(Te4[(temp) & 0xff] & 0x0000ff00) ^
774
(Te4[(temp >> 24)] & 0x000000ff) ^ rcon[i];
775
rk[5] = rk[1] ^ rk[4];
776
rk[6] = rk[2] ^ rk[5];
777
rk[7] = rk[3] ^ rk[6];
785
rk[4] = GETU32 (cipherKey + 16);
786
rk[5] = GETU32 (cipherKey + 20);
793
(Te4[(temp >> 16) & 0xff] & 0xff000000) ^
794
(Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^
795
(Te4[(temp) & 0xff] & 0x0000ff00) ^
796
(Te4[(temp >> 24)] & 0x000000ff) ^ rcon[i];
797
rk[7] = rk[1] ^ rk[6];
798
rk[8] = rk[2] ^ rk[7];
799
rk[9] = rk[3] ^ rk[8];
804
rk[10] = rk[4] ^ rk[9];
805
rk[11] = rk[5] ^ rk[10];
809
rk[6] = GETU32 (cipherKey + 24);
810
rk[7] = GETU32 (cipherKey + 28);
817
(Te4[(temp >> 16) & 0xff] & 0xff000000) ^
818
(Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^
819
(Te4[(temp) & 0xff] & 0x0000ff00) ^
820
(Te4[(temp >> 24)] & 0x000000ff) ^ rcon[i];
821
rk[9] = rk[1] ^ rk[8];
822
rk[10] = rk[2] ^ rk[9];
823
rk[11] = rk[3] ^ rk[10];
830
(Te4[(temp >> 24)] & 0xff000000) ^
831
(Te4[(temp >> 16) & 0xff] & 0x00ff0000) ^
832
(Te4[(temp >> 8) & 0xff] & 0x0000ff00) ^
833
(Te4[(temp) & 0xff] & 0x000000ff);
834
rk[13] = rk[5] ^ rk[12];
835
rk[14] = rk[6] ^ rk[13];
836
rk[15] = rk[7] ^ rk[14];
845
* Expand the cipher key into the decryption key schedule.
847
* @return the number of rounds for the given cipher key size.
850
rijndaelKeySetupDec (uint32_t rk[ /*4*(Nr + 1) */ ],
851
const char cipherKey[], size_t keyBits)
856
/* expand the cipher key: */
857
Nr = rijndaelKeySetupEnc (rk, cipherKey, keyBits);
858
/* invert the order of the round keys: */
859
for (i = 0, j = 4 * Nr; i < j; i += 4, j -= 4)
865
rk[i + 1] = rk[j + 1];
868
rk[i + 2] = rk[j + 2];
871
rk[i + 3] = rk[j + 3];
874
/* apply the inverse MixColumn transform to all round keys but the
875
first and the last: */
876
for (i = 1; i < Nr; i++)
880
Td0[Te4[(rk[0] >> 24)] & 0xff] ^
881
Td1[Te4[(rk[0] >> 16) & 0xff] & 0xff] ^
882
Td2[Te4[(rk[0] >> 8) & 0xff] & 0xff] ^
883
Td3[Te4[(rk[0]) & 0xff] & 0xff];
885
Td0[Te4[(rk[1] >> 24)] & 0xff] ^
886
Td1[Te4[(rk[1] >> 16) & 0xff] & 0xff] ^
887
Td2[Te4[(rk[1] >> 8) & 0xff] & 0xff] ^
888
Td3[Te4[(rk[1]) & 0xff] & 0xff];
890
Td0[Te4[(rk[2] >> 24)] & 0xff] ^
891
Td1[Te4[(rk[2] >> 16) & 0xff] & 0xff] ^
892
Td2[Te4[(rk[2] >> 8) & 0xff] & 0xff] ^
893
Td3[Te4[(rk[2]) & 0xff] & 0xff];
895
Td0[Te4[(rk[3] >> 24)] & 0xff] ^
896
Td1[Te4[(rk[3] >> 16) & 0xff] & 0xff] ^
897
Td2[Te4[(rk[3] >> 8) & 0xff] & 0xff] ^
898
Td3[Te4[(rk[3]) & 0xff] & 0xff];
904
rijndaelEncrypt (const uint32_t rk[ /*4*(Nr + 1) */ ], size_t Nr,
905
const char pt[16], char ct[16])
907
uint32_t s0, s1, s2, s3, t0, t1, t2, t3;
911
* map byte array block to cipher state
912
* and add initial round key:
914
s0 = GETU32 (pt) ^ rk[0];
915
s1 = GETU32 (pt + 4) ^ rk[1];
916
s2 = GETU32 (pt + 8) ^ rk[2];
917
s3 = GETU32 (pt + 12) ^ rk[3];
919
* Nr - 1 full rounds:
926
Te1[(s1 >> 16) & 0xff] ^
927
Te2[(s2 >> 8) & 0xff] ^ Te3[(s3) & 0xff] ^ rk[4];
930
Te1[(s2 >> 16) & 0xff] ^
931
Te2[(s3 >> 8) & 0xff] ^ Te3[(s0) & 0xff] ^ rk[5];
934
Te1[(s3 >> 16) & 0xff] ^
935
Te2[(s0 >> 8) & 0xff] ^ Te3[(s1) & 0xff] ^ rk[6];
938
Te1[(s0 >> 16) & 0xff] ^
939
Te2[(s1 >> 8) & 0xff] ^ Te3[(s2) & 0xff] ^ rk[7];
949
Te1[(t1 >> 16) & 0xff] ^
950
Te2[(t2 >> 8) & 0xff] ^ Te3[(t3) & 0xff] ^ rk[0];
953
Te1[(t2 >> 16) & 0xff] ^
954
Te2[(t3 >> 8) & 0xff] ^ Te3[(t0) & 0xff] ^ rk[1];
957
Te1[(t3 >> 16) & 0xff] ^
958
Te2[(t0 >> 8) & 0xff] ^ Te3[(t1) & 0xff] ^ rk[2];
961
Te1[(t0 >> 16) & 0xff] ^
962
Te2[(t1 >> 8) & 0xff] ^ Te3[(t2) & 0xff] ^ rk[3];
965
* apply last round and
966
* map cipher state to byte array block:
969
(Te4[(t0 >> 24)] & 0xff000000) ^
970
(Te4[(t1 >> 16) & 0xff] & 0x00ff0000) ^
971
(Te4[(t2 >> 8) & 0xff] & 0x0000ff00) ^
972
(Te4[(t3) & 0xff] & 0x000000ff) ^ rk[0];
975
(Te4[(t1 >> 24)] & 0xff000000) ^
976
(Te4[(t2 >> 16) & 0xff] & 0x00ff0000) ^
977
(Te4[(t3 >> 8) & 0xff] & 0x0000ff00) ^
978
(Te4[(t0) & 0xff] & 0x000000ff) ^ rk[1];
981
(Te4[(t2 >> 24)] & 0xff000000) ^
982
(Te4[(t3 >> 16) & 0xff] & 0x00ff0000) ^
983
(Te4[(t0 >> 8) & 0xff] & 0x0000ff00) ^
984
(Te4[(t1) & 0xff] & 0x000000ff) ^ rk[2];
987
(Te4[(t3 >> 24)] & 0xff000000) ^
988
(Te4[(t0 >> 16) & 0xff] & 0x00ff0000) ^
989
(Te4[(t1 >> 8) & 0xff] & 0x0000ff00) ^
990
(Te4[(t2) & 0xff] & 0x000000ff) ^ rk[3];
991
PUTU32 (ct + 12, s3);
995
rijndaelDecrypt (const uint32_t rk[ /*4*(Nr + 1) */ ], size_t Nr,
996
const char ct[16], char pt[16])
998
uint32_t s0, s1, s2, s3, t0, t1, t2, t3;
1002
* map byte array block to cipher state
1003
* and add initial round key:
1005
s0 = GETU32 (ct) ^ rk[0];
1006
s1 = GETU32 (ct + 4) ^ rk[1];
1007
s2 = GETU32 (ct + 8) ^ rk[2];
1008
s3 = GETU32 (ct + 12) ^ rk[3];
1010
* Nr - 1 full rounds:
1017
Td1[(s3 >> 16) & 0xff] ^
1018
Td2[(s2 >> 8) & 0xff] ^ Td3[(s1) & 0xff] ^ rk[4];
1021
Td1[(s0 >> 16) & 0xff] ^
1022
Td2[(s3 >> 8) & 0xff] ^ Td3[(s2) & 0xff] ^ rk[5];
1025
Td1[(s1 >> 16) & 0xff] ^
1026
Td2[(s0 >> 8) & 0xff] ^ Td3[(s3) & 0xff] ^ rk[6];
1029
Td1[(s2 >> 16) & 0xff] ^
1030
Td2[(s1 >> 8) & 0xff] ^ Td3[(s0) & 0xff] ^ rk[7];
1040
Td1[(t3 >> 16) & 0xff] ^
1041
Td2[(t2 >> 8) & 0xff] ^ Td3[(t1) & 0xff] ^ rk[0];
1044
Td1[(t0 >> 16) & 0xff] ^
1045
Td2[(t3 >> 8) & 0xff] ^ Td3[(t2) & 0xff] ^ rk[1];
1048
Td1[(t1 >> 16) & 0xff] ^
1049
Td2[(t0 >> 8) & 0xff] ^ Td3[(t3) & 0xff] ^ rk[2];
1052
Td1[(t2 >> 16) & 0xff] ^
1053
Td2[(t1 >> 8) & 0xff] ^ Td3[(t0) & 0xff] ^ rk[3];
1056
* apply last round and
1057
* map cipher state to byte array block:
1060
(Td4[(t0 >> 24)] & 0xff000000) ^
1061
(Td4[(t3 >> 16) & 0xff] & 0x00ff0000) ^
1062
(Td4[(t2 >> 8) & 0xff] & 0x0000ff00) ^
1063
(Td4[(t1) & 0xff] & 0x000000ff) ^ rk[0];
1066
(Td4[(t1 >> 24)] & 0xff000000) ^
1067
(Td4[(t0 >> 16) & 0xff] & 0x00ff0000) ^
1068
(Td4[(t3 >> 8) & 0xff] & 0x0000ff00) ^
1069
(Td4[(t2) & 0xff] & 0x000000ff) ^ rk[1];
1070
PUTU32 (pt + 4, s1);
1072
(Td4[(t2 >> 24)] & 0xff000000) ^
1073
(Td4[(t1 >> 16) & 0xff] & 0x00ff0000) ^
1074
(Td4[(t0 >> 8) & 0xff] & 0x0000ff00) ^
1075
(Td4[(t3) & 0xff] & 0x000000ff) ^ rk[2];
1076
PUTU32 (pt + 8, s2);
1078
(Td4[(t3 >> 24)] & 0xff000000) ^
1079
(Td4[(t2 >> 16) & 0xff] & 0x00ff0000) ^
1080
(Td4[(t1 >> 8) & 0xff] & 0x0000ff00) ^
1081
(Td4[(t0) & 0xff] & 0x000000ff) ^ rk[3];
1082
PUTU32 (pt + 12, s3);