xref: /btstack/3rd-party/rijndael/rijndael.c (revision 58039fbfdc506cc3337575a84f7f5ab2a2f84256)
1f13fc290SMatthias Ringwald //=============================== RIJNDAEL.C   ===============================
2f13fc290SMatthias Ringwald // from http://www.efgh.com/software/rijndael.htm,
3f13fc290SMatthias Ringwald // License: Public Domain,
4f13fc290SMatthias Ringwald // Author:  Philip J. Erdelsky
5f13fc290SMatthias Ringwald 
6f13fc290SMatthias Ringwald #define FULL_UNROLL
7f13fc290SMatthias Ringwald 
8f13fc290SMatthias Ringwald #include "rijndael.h"
9f13fc290SMatthias Ringwald 
10f13fc290SMatthias Ringwald typedef uint32_t u32;
11f13fc290SMatthias Ringwald typedef uint8_t   u8;
12f13fc290SMatthias Ringwald 
13f13fc290SMatthias Ringwald static const u32 Te0[256] =
14f13fc290SMatthias Ringwald {
15f13fc290SMatthias Ringwald   0xc66363a5U, 0xf87c7c84U, 0xee777799U, 0xf67b7b8dU,
16f13fc290SMatthias Ringwald   0xfff2f20dU, 0xd66b6bbdU, 0xde6f6fb1U, 0x91c5c554U,
17f13fc290SMatthias Ringwald   0x60303050U, 0x02010103U, 0xce6767a9U, 0x562b2b7dU,
18f13fc290SMatthias Ringwald   0xe7fefe19U, 0xb5d7d762U, 0x4dababe6U, 0xec76769aU,
19f13fc290SMatthias Ringwald   0x8fcaca45U, 0x1f82829dU, 0x89c9c940U, 0xfa7d7d87U,
20f13fc290SMatthias Ringwald   0xeffafa15U, 0xb25959ebU, 0x8e4747c9U, 0xfbf0f00bU,
21f13fc290SMatthias Ringwald   0x41adadecU, 0xb3d4d467U, 0x5fa2a2fdU, 0x45afafeaU,
22f13fc290SMatthias Ringwald   0x239c9cbfU, 0x53a4a4f7U, 0xe4727296U, 0x9bc0c05bU,
23f13fc290SMatthias Ringwald   0x75b7b7c2U, 0xe1fdfd1cU, 0x3d9393aeU, 0x4c26266aU,
24f13fc290SMatthias Ringwald   0x6c36365aU, 0x7e3f3f41U, 0xf5f7f702U, 0x83cccc4fU,
25f13fc290SMatthias Ringwald   0x6834345cU, 0x51a5a5f4U, 0xd1e5e534U, 0xf9f1f108U,
26f13fc290SMatthias Ringwald   0xe2717193U, 0xabd8d873U, 0x62313153U, 0x2a15153fU,
27f13fc290SMatthias Ringwald   0x0804040cU, 0x95c7c752U, 0x46232365U, 0x9dc3c35eU,
28f13fc290SMatthias Ringwald   0x30181828U, 0x379696a1U, 0x0a05050fU, 0x2f9a9ab5U,
29f13fc290SMatthias Ringwald   0x0e070709U, 0x24121236U, 0x1b80809bU, 0xdfe2e23dU,
30f13fc290SMatthias Ringwald   0xcdebeb26U, 0x4e272769U, 0x7fb2b2cdU, 0xea75759fU,
31f13fc290SMatthias Ringwald   0x1209091bU, 0x1d83839eU, 0x582c2c74U, 0x341a1a2eU,
32f13fc290SMatthias Ringwald   0x361b1b2dU, 0xdc6e6eb2U, 0xb45a5aeeU, 0x5ba0a0fbU,
33f13fc290SMatthias Ringwald   0xa45252f6U, 0x763b3b4dU, 0xb7d6d661U, 0x7db3b3ceU,
34f13fc290SMatthias Ringwald   0x5229297bU, 0xdde3e33eU, 0x5e2f2f71U, 0x13848497U,
35f13fc290SMatthias Ringwald   0xa65353f5U, 0xb9d1d168U, 0x00000000U, 0xc1eded2cU,
36f13fc290SMatthias Ringwald   0x40202060U, 0xe3fcfc1fU, 0x79b1b1c8U, 0xb65b5bedU,
37f13fc290SMatthias Ringwald   0xd46a6abeU, 0x8dcbcb46U, 0x67bebed9U, 0x7239394bU,
38f13fc290SMatthias Ringwald   0x944a4adeU, 0x984c4cd4U, 0xb05858e8U, 0x85cfcf4aU,
39f13fc290SMatthias Ringwald   0xbbd0d06bU, 0xc5efef2aU, 0x4faaaae5U, 0xedfbfb16U,
40f13fc290SMatthias Ringwald   0x864343c5U, 0x9a4d4dd7U, 0x66333355U, 0x11858594U,
41f13fc290SMatthias Ringwald   0x8a4545cfU, 0xe9f9f910U, 0x04020206U, 0xfe7f7f81U,
42f13fc290SMatthias Ringwald   0xa05050f0U, 0x783c3c44U, 0x259f9fbaU, 0x4ba8a8e3U,
43f13fc290SMatthias Ringwald   0xa25151f3U, 0x5da3a3feU, 0x804040c0U, 0x058f8f8aU,
44f13fc290SMatthias Ringwald   0x3f9292adU, 0x219d9dbcU, 0x70383848U, 0xf1f5f504U,
45f13fc290SMatthias Ringwald   0x63bcbcdfU, 0x77b6b6c1U, 0xafdada75U, 0x42212163U,
46f13fc290SMatthias Ringwald   0x20101030U, 0xe5ffff1aU, 0xfdf3f30eU, 0xbfd2d26dU,
47f13fc290SMatthias Ringwald   0x81cdcd4cU, 0x180c0c14U, 0x26131335U, 0xc3ecec2fU,
48f13fc290SMatthias Ringwald   0xbe5f5fe1U, 0x359797a2U, 0x884444ccU, 0x2e171739U,
49f13fc290SMatthias Ringwald   0x93c4c457U, 0x55a7a7f2U, 0xfc7e7e82U, 0x7a3d3d47U,
50f13fc290SMatthias Ringwald   0xc86464acU, 0xba5d5de7U, 0x3219192bU, 0xe6737395U,
51f13fc290SMatthias Ringwald   0xc06060a0U, 0x19818198U, 0x9e4f4fd1U, 0xa3dcdc7fU,
52f13fc290SMatthias Ringwald   0x44222266U, 0x542a2a7eU, 0x3b9090abU, 0x0b888883U,
53f13fc290SMatthias Ringwald   0x8c4646caU, 0xc7eeee29U, 0x6bb8b8d3U, 0x2814143cU,
54f13fc290SMatthias Ringwald   0xa7dede79U, 0xbc5e5ee2U, 0x160b0b1dU, 0xaddbdb76U,
55f13fc290SMatthias Ringwald   0xdbe0e03bU, 0x64323256U, 0x743a3a4eU, 0x140a0a1eU,
56f13fc290SMatthias Ringwald   0x924949dbU, 0x0c06060aU, 0x4824246cU, 0xb85c5ce4U,
57f13fc290SMatthias Ringwald   0x9fc2c25dU, 0xbdd3d36eU, 0x43acacefU, 0xc46262a6U,
58f13fc290SMatthias Ringwald   0x399191a8U, 0x319595a4U, 0xd3e4e437U, 0xf279798bU,
59f13fc290SMatthias Ringwald   0xd5e7e732U, 0x8bc8c843U, 0x6e373759U, 0xda6d6db7U,
60f13fc290SMatthias Ringwald   0x018d8d8cU, 0xb1d5d564U, 0x9c4e4ed2U, 0x49a9a9e0U,
61f13fc290SMatthias Ringwald   0xd86c6cb4U, 0xac5656faU, 0xf3f4f407U, 0xcfeaea25U,
62f13fc290SMatthias Ringwald   0xca6565afU, 0xf47a7a8eU, 0x47aeaee9U, 0x10080818U,
63f13fc290SMatthias Ringwald   0x6fbabad5U, 0xf0787888U, 0x4a25256fU, 0x5c2e2e72U,
64f13fc290SMatthias Ringwald   0x381c1c24U, 0x57a6a6f1U, 0x73b4b4c7U, 0x97c6c651U,
65f13fc290SMatthias Ringwald   0xcbe8e823U, 0xa1dddd7cU, 0xe874749cU, 0x3e1f1f21U,
66f13fc290SMatthias Ringwald   0x964b4bddU, 0x61bdbddcU, 0x0d8b8b86U, 0x0f8a8a85U,
67f13fc290SMatthias Ringwald   0xe0707090U, 0x7c3e3e42U, 0x71b5b5c4U, 0xcc6666aaU,
68f13fc290SMatthias Ringwald   0x904848d8U, 0x06030305U, 0xf7f6f601U, 0x1c0e0e12U,
69f13fc290SMatthias Ringwald   0xc26161a3U, 0x6a35355fU, 0xae5757f9U, 0x69b9b9d0U,
70f13fc290SMatthias Ringwald   0x17868691U, 0x99c1c158U, 0x3a1d1d27U, 0x279e9eb9U,
71f13fc290SMatthias Ringwald   0xd9e1e138U, 0xebf8f813U, 0x2b9898b3U, 0x22111133U,
72f13fc290SMatthias Ringwald   0xd26969bbU, 0xa9d9d970U, 0x078e8e89U, 0x339494a7U,
73f13fc290SMatthias Ringwald   0x2d9b9bb6U, 0x3c1e1e22U, 0x15878792U, 0xc9e9e920U,
74f13fc290SMatthias Ringwald   0x87cece49U, 0xaa5555ffU, 0x50282878U, 0xa5dfdf7aU,
75f13fc290SMatthias Ringwald   0x038c8c8fU, 0x59a1a1f8U, 0x09898980U, 0x1a0d0d17U,
76f13fc290SMatthias Ringwald   0x65bfbfdaU, 0xd7e6e631U, 0x844242c6U, 0xd06868b8U,
77f13fc290SMatthias Ringwald   0x824141c3U, 0x299999b0U, 0x5a2d2d77U, 0x1e0f0f11U,
78f13fc290SMatthias Ringwald   0x7bb0b0cbU, 0xa85454fcU, 0x6dbbbbd6U, 0x2c16163aU,
79f13fc290SMatthias Ringwald };
80f13fc290SMatthias Ringwald 
81f13fc290SMatthias Ringwald static const u32 Te1[256] =
82f13fc290SMatthias Ringwald {
83f13fc290SMatthias Ringwald   0xa5c66363U, 0x84f87c7cU, 0x99ee7777U, 0x8df67b7bU,
84f13fc290SMatthias Ringwald   0x0dfff2f2U, 0xbdd66b6bU, 0xb1de6f6fU, 0x5491c5c5U,
85f13fc290SMatthias Ringwald   0x50603030U, 0x03020101U, 0xa9ce6767U, 0x7d562b2bU,
86f13fc290SMatthias Ringwald   0x19e7fefeU, 0x62b5d7d7U, 0xe64dababU, 0x9aec7676U,
87f13fc290SMatthias Ringwald   0x458fcacaU, 0x9d1f8282U, 0x4089c9c9U, 0x87fa7d7dU,
88f13fc290SMatthias Ringwald   0x15effafaU, 0xebb25959U, 0xc98e4747U, 0x0bfbf0f0U,
89f13fc290SMatthias Ringwald   0xec41adadU, 0x67b3d4d4U, 0xfd5fa2a2U, 0xea45afafU,
90f13fc290SMatthias Ringwald   0xbf239c9cU, 0xf753a4a4U, 0x96e47272U, 0x5b9bc0c0U,
91f13fc290SMatthias Ringwald   0xc275b7b7U, 0x1ce1fdfdU, 0xae3d9393U, 0x6a4c2626U,
92f13fc290SMatthias Ringwald   0x5a6c3636U, 0x417e3f3fU, 0x02f5f7f7U, 0x4f83ccccU,
93f13fc290SMatthias Ringwald   0x5c683434U, 0xf451a5a5U, 0x34d1e5e5U, 0x08f9f1f1U,
94f13fc290SMatthias Ringwald   0x93e27171U, 0x73abd8d8U, 0x53623131U, 0x3f2a1515U,
95f13fc290SMatthias Ringwald   0x0c080404U, 0x5295c7c7U, 0x65462323U, 0x5e9dc3c3U,
96f13fc290SMatthias Ringwald   0x28301818U, 0xa1379696U, 0x0f0a0505U, 0xb52f9a9aU,
97f13fc290SMatthias Ringwald   0x090e0707U, 0x36241212U, 0x9b1b8080U, 0x3ddfe2e2U,
98f13fc290SMatthias Ringwald   0x26cdebebU, 0x694e2727U, 0xcd7fb2b2U, 0x9fea7575U,
99f13fc290SMatthias Ringwald   0x1b120909U, 0x9e1d8383U, 0x74582c2cU, 0x2e341a1aU,
100f13fc290SMatthias Ringwald   0x2d361b1bU, 0xb2dc6e6eU, 0xeeb45a5aU, 0xfb5ba0a0U,
101f13fc290SMatthias Ringwald   0xf6a45252U, 0x4d763b3bU, 0x61b7d6d6U, 0xce7db3b3U,
102f13fc290SMatthias Ringwald   0x7b522929U, 0x3edde3e3U, 0x715e2f2fU, 0x97138484U,
103f13fc290SMatthias Ringwald   0xf5a65353U, 0x68b9d1d1U, 0x00000000U, 0x2cc1ededU,
104f13fc290SMatthias Ringwald   0x60402020U, 0x1fe3fcfcU, 0xc879b1b1U, 0xedb65b5bU,
105f13fc290SMatthias Ringwald   0xbed46a6aU, 0x468dcbcbU, 0xd967bebeU, 0x4b723939U,
106f13fc290SMatthias Ringwald   0xde944a4aU, 0xd4984c4cU, 0xe8b05858U, 0x4a85cfcfU,
107f13fc290SMatthias Ringwald   0x6bbbd0d0U, 0x2ac5efefU, 0xe54faaaaU, 0x16edfbfbU,
108f13fc290SMatthias Ringwald   0xc5864343U, 0xd79a4d4dU, 0x55663333U, 0x94118585U,
109f13fc290SMatthias Ringwald   0xcf8a4545U, 0x10e9f9f9U, 0x06040202U, 0x81fe7f7fU,
110f13fc290SMatthias Ringwald   0xf0a05050U, 0x44783c3cU, 0xba259f9fU, 0xe34ba8a8U,
111f13fc290SMatthias Ringwald   0xf3a25151U, 0xfe5da3a3U, 0xc0804040U, 0x8a058f8fU,
112f13fc290SMatthias Ringwald   0xad3f9292U, 0xbc219d9dU, 0x48703838U, 0x04f1f5f5U,
113f13fc290SMatthias Ringwald   0xdf63bcbcU, 0xc177b6b6U, 0x75afdadaU, 0x63422121U,
114f13fc290SMatthias Ringwald   0x30201010U, 0x1ae5ffffU, 0x0efdf3f3U, 0x6dbfd2d2U,
115f13fc290SMatthias Ringwald   0x4c81cdcdU, 0x14180c0cU, 0x35261313U, 0x2fc3ececU,
116f13fc290SMatthias Ringwald   0xe1be5f5fU, 0xa2359797U, 0xcc884444U, 0x392e1717U,
117f13fc290SMatthias Ringwald   0x5793c4c4U, 0xf255a7a7U, 0x82fc7e7eU, 0x477a3d3dU,
118f13fc290SMatthias Ringwald   0xacc86464U, 0xe7ba5d5dU, 0x2b321919U, 0x95e67373U,
119f13fc290SMatthias Ringwald   0xa0c06060U, 0x98198181U, 0xd19e4f4fU, 0x7fa3dcdcU,
120f13fc290SMatthias Ringwald   0x66442222U, 0x7e542a2aU, 0xab3b9090U, 0x830b8888U,
121f13fc290SMatthias Ringwald   0xca8c4646U, 0x29c7eeeeU, 0xd36bb8b8U, 0x3c281414U,
122f13fc290SMatthias Ringwald   0x79a7dedeU, 0xe2bc5e5eU, 0x1d160b0bU, 0x76addbdbU,
123f13fc290SMatthias Ringwald   0x3bdbe0e0U, 0x56643232U, 0x4e743a3aU, 0x1e140a0aU,
124f13fc290SMatthias Ringwald   0xdb924949U, 0x0a0c0606U, 0x6c482424U, 0xe4b85c5cU,
125f13fc290SMatthias Ringwald   0x5d9fc2c2U, 0x6ebdd3d3U, 0xef43acacU, 0xa6c46262U,
126f13fc290SMatthias Ringwald   0xa8399191U, 0xa4319595U, 0x37d3e4e4U, 0x8bf27979U,
127f13fc290SMatthias Ringwald   0x32d5e7e7U, 0x438bc8c8U, 0x596e3737U, 0xb7da6d6dU,
128f13fc290SMatthias Ringwald   0x8c018d8dU, 0x64b1d5d5U, 0xd29c4e4eU, 0xe049a9a9U,
129f13fc290SMatthias Ringwald   0xb4d86c6cU, 0xfaac5656U, 0x07f3f4f4U, 0x25cfeaeaU,
130f13fc290SMatthias Ringwald   0xafca6565U, 0x8ef47a7aU, 0xe947aeaeU, 0x18100808U,
131f13fc290SMatthias Ringwald   0xd56fbabaU, 0x88f07878U, 0x6f4a2525U, 0x725c2e2eU,
132f13fc290SMatthias Ringwald   0x24381c1cU, 0xf157a6a6U, 0xc773b4b4U, 0x5197c6c6U,
133f13fc290SMatthias Ringwald   0x23cbe8e8U, 0x7ca1ddddU, 0x9ce87474U, 0x213e1f1fU,
134f13fc290SMatthias Ringwald   0xdd964b4bU, 0xdc61bdbdU, 0x860d8b8bU, 0x850f8a8aU,
135f13fc290SMatthias Ringwald   0x90e07070U, 0x427c3e3eU, 0xc471b5b5U, 0xaacc6666U,
136f13fc290SMatthias Ringwald   0xd8904848U, 0x05060303U, 0x01f7f6f6U, 0x121c0e0eU,
137f13fc290SMatthias Ringwald   0xa3c26161U, 0x5f6a3535U, 0xf9ae5757U, 0xd069b9b9U,
138f13fc290SMatthias Ringwald   0x91178686U, 0x5899c1c1U, 0x273a1d1dU, 0xb9279e9eU,
139f13fc290SMatthias Ringwald   0x38d9e1e1U, 0x13ebf8f8U, 0xb32b9898U, 0x33221111U,
140f13fc290SMatthias Ringwald   0xbbd26969U, 0x70a9d9d9U, 0x89078e8eU, 0xa7339494U,
141f13fc290SMatthias Ringwald   0xb62d9b9bU, 0x223c1e1eU, 0x92158787U, 0x20c9e9e9U,
142f13fc290SMatthias Ringwald   0x4987ceceU, 0xffaa5555U, 0x78502828U, 0x7aa5dfdfU,
143f13fc290SMatthias Ringwald   0x8f038c8cU, 0xf859a1a1U, 0x80098989U, 0x171a0d0dU,
144f13fc290SMatthias Ringwald   0xda65bfbfU, 0x31d7e6e6U, 0xc6844242U, 0xb8d06868U,
145f13fc290SMatthias Ringwald   0xc3824141U, 0xb0299999U, 0x775a2d2dU, 0x111e0f0fU,
146f13fc290SMatthias Ringwald   0xcb7bb0b0U, 0xfca85454U, 0xd66dbbbbU, 0x3a2c1616U,
147f13fc290SMatthias Ringwald };
148f13fc290SMatthias Ringwald 
149f13fc290SMatthias Ringwald static const u32 Te2[256] =
150f13fc290SMatthias Ringwald {
151f13fc290SMatthias Ringwald   0x63a5c663U, 0x7c84f87cU, 0x7799ee77U, 0x7b8df67bU,
152f13fc290SMatthias Ringwald   0xf20dfff2U, 0x6bbdd66bU, 0x6fb1de6fU, 0xc55491c5U,
153f13fc290SMatthias Ringwald   0x30506030U, 0x01030201U, 0x67a9ce67U, 0x2b7d562bU,
154f13fc290SMatthias Ringwald   0xfe19e7feU, 0xd762b5d7U, 0xabe64dabU, 0x769aec76U,
155f13fc290SMatthias Ringwald   0xca458fcaU, 0x829d1f82U, 0xc94089c9U, 0x7d87fa7dU,
156f13fc290SMatthias Ringwald   0xfa15effaU, 0x59ebb259U, 0x47c98e47U, 0xf00bfbf0U,
157f13fc290SMatthias Ringwald   0xadec41adU, 0xd467b3d4U, 0xa2fd5fa2U, 0xafea45afU,
158f13fc290SMatthias Ringwald   0x9cbf239cU, 0xa4f753a4U, 0x7296e472U, 0xc05b9bc0U,
159f13fc290SMatthias Ringwald   0xb7c275b7U, 0xfd1ce1fdU, 0x93ae3d93U, 0x266a4c26U,
160f13fc290SMatthias Ringwald   0x365a6c36U, 0x3f417e3fU, 0xf702f5f7U, 0xcc4f83ccU,
161f13fc290SMatthias Ringwald   0x345c6834U, 0xa5f451a5U, 0xe534d1e5U, 0xf108f9f1U,
162f13fc290SMatthias Ringwald   0x7193e271U, 0xd873abd8U, 0x31536231U, 0x153f2a15U,
163f13fc290SMatthias Ringwald   0x040c0804U, 0xc75295c7U, 0x23654623U, 0xc35e9dc3U,
164f13fc290SMatthias Ringwald   0x18283018U, 0x96a13796U, 0x050f0a05U, 0x9ab52f9aU,
165f13fc290SMatthias Ringwald   0x07090e07U, 0x12362412U, 0x809b1b80U, 0xe23ddfe2U,
166f13fc290SMatthias Ringwald   0xeb26cdebU, 0x27694e27U, 0xb2cd7fb2U, 0x759fea75U,
167f13fc290SMatthias Ringwald   0x091b1209U, 0x839e1d83U, 0x2c74582cU, 0x1a2e341aU,
168f13fc290SMatthias Ringwald   0x1b2d361bU, 0x6eb2dc6eU, 0x5aeeb45aU, 0xa0fb5ba0U,
169f13fc290SMatthias Ringwald   0x52f6a452U, 0x3b4d763bU, 0xd661b7d6U, 0xb3ce7db3U,
170f13fc290SMatthias Ringwald   0x297b5229U, 0xe33edde3U, 0x2f715e2fU, 0x84971384U,
171f13fc290SMatthias Ringwald   0x53f5a653U, 0xd168b9d1U, 0x00000000U, 0xed2cc1edU,
172f13fc290SMatthias Ringwald   0x20604020U, 0xfc1fe3fcU, 0xb1c879b1U, 0x5bedb65bU,
173f13fc290SMatthias Ringwald   0x6abed46aU, 0xcb468dcbU, 0xbed967beU, 0x394b7239U,
174f13fc290SMatthias Ringwald   0x4ade944aU, 0x4cd4984cU, 0x58e8b058U, 0xcf4a85cfU,
175f13fc290SMatthias Ringwald   0xd06bbbd0U, 0xef2ac5efU, 0xaae54faaU, 0xfb16edfbU,
176f13fc290SMatthias Ringwald   0x43c58643U, 0x4dd79a4dU, 0x33556633U, 0x85941185U,
177f13fc290SMatthias Ringwald   0x45cf8a45U, 0xf910e9f9U, 0x02060402U, 0x7f81fe7fU,
178f13fc290SMatthias Ringwald   0x50f0a050U, 0x3c44783cU, 0x9fba259fU, 0xa8e34ba8U,
179f13fc290SMatthias Ringwald   0x51f3a251U, 0xa3fe5da3U, 0x40c08040U, 0x8f8a058fU,
180f13fc290SMatthias Ringwald   0x92ad3f92U, 0x9dbc219dU, 0x38487038U, 0xf504f1f5U,
181f13fc290SMatthias Ringwald   0xbcdf63bcU, 0xb6c177b6U, 0xda75afdaU, 0x21634221U,
182f13fc290SMatthias Ringwald   0x10302010U, 0xff1ae5ffU, 0xf30efdf3U, 0xd26dbfd2U,
183f13fc290SMatthias Ringwald   0xcd4c81cdU, 0x0c14180cU, 0x13352613U, 0xec2fc3ecU,
184f13fc290SMatthias Ringwald   0x5fe1be5fU, 0x97a23597U, 0x44cc8844U, 0x17392e17U,
185f13fc290SMatthias Ringwald   0xc45793c4U, 0xa7f255a7U, 0x7e82fc7eU, 0x3d477a3dU,
186f13fc290SMatthias Ringwald   0x64acc864U, 0x5de7ba5dU, 0x192b3219U, 0x7395e673U,
187f13fc290SMatthias Ringwald   0x60a0c060U, 0x81981981U, 0x4fd19e4fU, 0xdc7fa3dcU,
188f13fc290SMatthias Ringwald   0x22664422U, 0x2a7e542aU, 0x90ab3b90U, 0x88830b88U,
189f13fc290SMatthias Ringwald   0x46ca8c46U, 0xee29c7eeU, 0xb8d36bb8U, 0x143c2814U,
190f13fc290SMatthias Ringwald   0xde79a7deU, 0x5ee2bc5eU, 0x0b1d160bU, 0xdb76addbU,
191f13fc290SMatthias Ringwald   0xe03bdbe0U, 0x32566432U, 0x3a4e743aU, 0x0a1e140aU,
192f13fc290SMatthias Ringwald   0x49db9249U, 0x060a0c06U, 0x246c4824U, 0x5ce4b85cU,
193f13fc290SMatthias Ringwald   0xc25d9fc2U, 0xd36ebdd3U, 0xacef43acU, 0x62a6c462U,
194f13fc290SMatthias Ringwald   0x91a83991U, 0x95a43195U, 0xe437d3e4U, 0x798bf279U,
195f13fc290SMatthias Ringwald   0xe732d5e7U, 0xc8438bc8U, 0x37596e37U, 0x6db7da6dU,
196f13fc290SMatthias Ringwald   0x8d8c018dU, 0xd564b1d5U, 0x4ed29c4eU, 0xa9e049a9U,
197f13fc290SMatthias Ringwald   0x6cb4d86cU, 0x56faac56U, 0xf407f3f4U, 0xea25cfeaU,
198f13fc290SMatthias Ringwald   0x65afca65U, 0x7a8ef47aU, 0xaee947aeU, 0x08181008U,
199f13fc290SMatthias Ringwald   0xbad56fbaU, 0x7888f078U, 0x256f4a25U, 0x2e725c2eU,
200f13fc290SMatthias Ringwald   0x1c24381cU, 0xa6f157a6U, 0xb4c773b4U, 0xc65197c6U,
201f13fc290SMatthias Ringwald   0xe823cbe8U, 0xdd7ca1ddU, 0x749ce874U, 0x1f213e1fU,
202f13fc290SMatthias Ringwald   0x4bdd964bU, 0xbddc61bdU, 0x8b860d8bU, 0x8a850f8aU,
203f13fc290SMatthias Ringwald   0x7090e070U, 0x3e427c3eU, 0xb5c471b5U, 0x66aacc66U,
204f13fc290SMatthias Ringwald   0x48d89048U, 0x03050603U, 0xf601f7f6U, 0x0e121c0eU,
205f13fc290SMatthias Ringwald   0x61a3c261U, 0x355f6a35U, 0x57f9ae57U, 0xb9d069b9U,
206f13fc290SMatthias Ringwald   0x86911786U, 0xc15899c1U, 0x1d273a1dU, 0x9eb9279eU,
207f13fc290SMatthias Ringwald   0xe138d9e1U, 0xf813ebf8U, 0x98b32b98U, 0x11332211U,
208f13fc290SMatthias Ringwald   0x69bbd269U, 0xd970a9d9U, 0x8e89078eU, 0x94a73394U,
209f13fc290SMatthias Ringwald   0x9bb62d9bU, 0x1e223c1eU, 0x87921587U, 0xe920c9e9U,
210f13fc290SMatthias Ringwald   0xce4987ceU, 0x55ffaa55U, 0x28785028U, 0xdf7aa5dfU,
211f13fc290SMatthias Ringwald   0x8c8f038cU, 0xa1f859a1U, 0x89800989U, 0x0d171a0dU,
212f13fc290SMatthias Ringwald   0xbfda65bfU, 0xe631d7e6U, 0x42c68442U, 0x68b8d068U,
213f13fc290SMatthias Ringwald   0x41c38241U, 0x99b02999U, 0x2d775a2dU, 0x0f111e0fU,
214f13fc290SMatthias Ringwald   0xb0cb7bb0U, 0x54fca854U, 0xbbd66dbbU, 0x163a2c16U,
215f13fc290SMatthias Ringwald };
216f13fc290SMatthias Ringwald 
217f13fc290SMatthias Ringwald static const u32 Te3[256] =
218f13fc290SMatthias Ringwald {
219f13fc290SMatthias Ringwald   0x6363a5c6U, 0x7c7c84f8U, 0x777799eeU, 0x7b7b8df6U,
220f13fc290SMatthias Ringwald   0xf2f20dffU, 0x6b6bbdd6U, 0x6f6fb1deU, 0xc5c55491U,
221f13fc290SMatthias Ringwald   0x30305060U, 0x01010302U, 0x6767a9ceU, 0x2b2b7d56U,
222f13fc290SMatthias Ringwald   0xfefe19e7U, 0xd7d762b5U, 0xababe64dU, 0x76769aecU,
223f13fc290SMatthias Ringwald   0xcaca458fU, 0x82829d1fU, 0xc9c94089U, 0x7d7d87faU,
224f13fc290SMatthias Ringwald   0xfafa15efU, 0x5959ebb2U, 0x4747c98eU, 0xf0f00bfbU,
225f13fc290SMatthias Ringwald   0xadadec41U, 0xd4d467b3U, 0xa2a2fd5fU, 0xafafea45U,
226f13fc290SMatthias Ringwald   0x9c9cbf23U, 0xa4a4f753U, 0x727296e4U, 0xc0c05b9bU,
227f13fc290SMatthias Ringwald   0xb7b7c275U, 0xfdfd1ce1U, 0x9393ae3dU, 0x26266a4cU,
228f13fc290SMatthias Ringwald   0x36365a6cU, 0x3f3f417eU, 0xf7f702f5U, 0xcccc4f83U,
229f13fc290SMatthias Ringwald   0x34345c68U, 0xa5a5f451U, 0xe5e534d1U, 0xf1f108f9U,
230f13fc290SMatthias Ringwald   0x717193e2U, 0xd8d873abU, 0x31315362U, 0x15153f2aU,
231f13fc290SMatthias Ringwald   0x04040c08U, 0xc7c75295U, 0x23236546U, 0xc3c35e9dU,
232f13fc290SMatthias Ringwald   0x18182830U, 0x9696a137U, 0x05050f0aU, 0x9a9ab52fU,
233f13fc290SMatthias Ringwald   0x0707090eU, 0x12123624U, 0x80809b1bU, 0xe2e23ddfU,
234f13fc290SMatthias Ringwald   0xebeb26cdU, 0x2727694eU, 0xb2b2cd7fU, 0x75759feaU,
235f13fc290SMatthias Ringwald   0x09091b12U, 0x83839e1dU, 0x2c2c7458U, 0x1a1a2e34U,
236f13fc290SMatthias Ringwald   0x1b1b2d36U, 0x6e6eb2dcU, 0x5a5aeeb4U, 0xa0a0fb5bU,
237f13fc290SMatthias Ringwald   0x5252f6a4U, 0x3b3b4d76U, 0xd6d661b7U, 0xb3b3ce7dU,
238f13fc290SMatthias Ringwald   0x29297b52U, 0xe3e33eddU, 0x2f2f715eU, 0x84849713U,
239f13fc290SMatthias Ringwald   0x5353f5a6U, 0xd1d168b9U, 0x00000000U, 0xeded2cc1U,
240f13fc290SMatthias Ringwald   0x20206040U, 0xfcfc1fe3U, 0xb1b1c879U, 0x5b5bedb6U,
241f13fc290SMatthias Ringwald   0x6a6abed4U, 0xcbcb468dU, 0xbebed967U, 0x39394b72U,
242f13fc290SMatthias Ringwald   0x4a4ade94U, 0x4c4cd498U, 0x5858e8b0U, 0xcfcf4a85U,
243f13fc290SMatthias Ringwald   0xd0d06bbbU, 0xefef2ac5U, 0xaaaae54fU, 0xfbfb16edU,
244f13fc290SMatthias Ringwald   0x4343c586U, 0x4d4dd79aU, 0x33335566U, 0x85859411U,
245f13fc290SMatthias Ringwald   0x4545cf8aU, 0xf9f910e9U, 0x02020604U, 0x7f7f81feU,
246f13fc290SMatthias Ringwald   0x5050f0a0U, 0x3c3c4478U, 0x9f9fba25U, 0xa8a8e34bU,
247f13fc290SMatthias Ringwald   0x5151f3a2U, 0xa3a3fe5dU, 0x4040c080U, 0x8f8f8a05U,
248f13fc290SMatthias Ringwald   0x9292ad3fU, 0x9d9dbc21U, 0x38384870U, 0xf5f504f1U,
249f13fc290SMatthias Ringwald   0xbcbcdf63U, 0xb6b6c177U, 0xdada75afU, 0x21216342U,
250f13fc290SMatthias Ringwald   0x10103020U, 0xffff1ae5U, 0xf3f30efdU, 0xd2d26dbfU,
251f13fc290SMatthias Ringwald   0xcdcd4c81U, 0x0c0c1418U, 0x13133526U, 0xecec2fc3U,
252f13fc290SMatthias Ringwald   0x5f5fe1beU, 0x9797a235U, 0x4444cc88U, 0x1717392eU,
253f13fc290SMatthias Ringwald   0xc4c45793U, 0xa7a7f255U, 0x7e7e82fcU, 0x3d3d477aU,
254f13fc290SMatthias Ringwald   0x6464acc8U, 0x5d5de7baU, 0x19192b32U, 0x737395e6U,
255f13fc290SMatthias Ringwald   0x6060a0c0U, 0x81819819U, 0x4f4fd19eU, 0xdcdc7fa3U,
256f13fc290SMatthias Ringwald   0x22226644U, 0x2a2a7e54U, 0x9090ab3bU, 0x8888830bU,
257f13fc290SMatthias Ringwald   0x4646ca8cU, 0xeeee29c7U, 0xb8b8d36bU, 0x14143c28U,
258f13fc290SMatthias Ringwald   0xdede79a7U, 0x5e5ee2bcU, 0x0b0b1d16U, 0xdbdb76adU,
259f13fc290SMatthias Ringwald   0xe0e03bdbU, 0x32325664U, 0x3a3a4e74U, 0x0a0a1e14U,
260f13fc290SMatthias Ringwald   0x4949db92U, 0x06060a0cU, 0x24246c48U, 0x5c5ce4b8U,
261f13fc290SMatthias Ringwald   0xc2c25d9fU, 0xd3d36ebdU, 0xacacef43U, 0x6262a6c4U,
262f13fc290SMatthias Ringwald   0x9191a839U, 0x9595a431U, 0xe4e437d3U, 0x79798bf2U,
263f13fc290SMatthias Ringwald   0xe7e732d5U, 0xc8c8438bU, 0x3737596eU, 0x6d6db7daU,
264f13fc290SMatthias Ringwald   0x8d8d8c01U, 0xd5d564b1U, 0x4e4ed29cU, 0xa9a9e049U,
265f13fc290SMatthias Ringwald   0x6c6cb4d8U, 0x5656faacU, 0xf4f407f3U, 0xeaea25cfU,
266f13fc290SMatthias Ringwald   0x6565afcaU, 0x7a7a8ef4U, 0xaeaee947U, 0x08081810U,
267f13fc290SMatthias Ringwald   0xbabad56fU, 0x787888f0U, 0x25256f4aU, 0x2e2e725cU,
268f13fc290SMatthias Ringwald   0x1c1c2438U, 0xa6a6f157U, 0xb4b4c773U, 0xc6c65197U,
269f13fc290SMatthias Ringwald   0xe8e823cbU, 0xdddd7ca1U, 0x74749ce8U, 0x1f1f213eU,
270f13fc290SMatthias Ringwald   0x4b4bdd96U, 0xbdbddc61U, 0x8b8b860dU, 0x8a8a850fU,
271f13fc290SMatthias Ringwald   0x707090e0U, 0x3e3e427cU, 0xb5b5c471U, 0x6666aaccU,
272f13fc290SMatthias Ringwald   0x4848d890U, 0x03030506U, 0xf6f601f7U, 0x0e0e121cU,
273f13fc290SMatthias Ringwald   0x6161a3c2U, 0x35355f6aU, 0x5757f9aeU, 0xb9b9d069U,
274f13fc290SMatthias Ringwald   0x86869117U, 0xc1c15899U, 0x1d1d273aU, 0x9e9eb927U,
275f13fc290SMatthias Ringwald   0xe1e138d9U, 0xf8f813ebU, 0x9898b32bU, 0x11113322U,
276f13fc290SMatthias Ringwald   0x6969bbd2U, 0xd9d970a9U, 0x8e8e8907U, 0x9494a733U,
277f13fc290SMatthias Ringwald   0x9b9bb62dU, 0x1e1e223cU, 0x87879215U, 0xe9e920c9U,
278f13fc290SMatthias Ringwald   0xcece4987U, 0x5555ffaaU, 0x28287850U, 0xdfdf7aa5U,
279f13fc290SMatthias Ringwald   0x8c8c8f03U, 0xa1a1f859U, 0x89898009U, 0x0d0d171aU,
280f13fc290SMatthias Ringwald   0xbfbfda65U, 0xe6e631d7U, 0x4242c684U, 0x6868b8d0U,
281f13fc290SMatthias Ringwald   0x4141c382U, 0x9999b029U, 0x2d2d775aU, 0x0f0f111eU,
282f13fc290SMatthias Ringwald   0xb0b0cb7bU, 0x5454fca8U, 0xbbbbd66dU, 0x16163a2cU,
283f13fc290SMatthias Ringwald };
284f13fc290SMatthias Ringwald 
285f13fc290SMatthias Ringwald static const u32 Te4[256] =
286f13fc290SMatthias Ringwald {
287f13fc290SMatthias Ringwald   0x63636363U, 0x7c7c7c7cU, 0x77777777U, 0x7b7b7b7bU,
288f13fc290SMatthias Ringwald   0xf2f2f2f2U, 0x6b6b6b6bU, 0x6f6f6f6fU, 0xc5c5c5c5U,
289f13fc290SMatthias Ringwald   0x30303030U, 0x01010101U, 0x67676767U, 0x2b2b2b2bU,
290f13fc290SMatthias Ringwald   0xfefefefeU, 0xd7d7d7d7U, 0xababababU, 0x76767676U,
291f13fc290SMatthias Ringwald   0xcacacacaU, 0x82828282U, 0xc9c9c9c9U, 0x7d7d7d7dU,
292f13fc290SMatthias Ringwald   0xfafafafaU, 0x59595959U, 0x47474747U, 0xf0f0f0f0U,
293f13fc290SMatthias Ringwald   0xadadadadU, 0xd4d4d4d4U, 0xa2a2a2a2U, 0xafafafafU,
294f13fc290SMatthias Ringwald   0x9c9c9c9cU, 0xa4a4a4a4U, 0x72727272U, 0xc0c0c0c0U,
295f13fc290SMatthias Ringwald   0xb7b7b7b7U, 0xfdfdfdfdU, 0x93939393U, 0x26262626U,
296f13fc290SMatthias Ringwald   0x36363636U, 0x3f3f3f3fU, 0xf7f7f7f7U, 0xccccccccU,
297f13fc290SMatthias Ringwald   0x34343434U, 0xa5a5a5a5U, 0xe5e5e5e5U, 0xf1f1f1f1U,
298f13fc290SMatthias Ringwald   0x71717171U, 0xd8d8d8d8U, 0x31313131U, 0x15151515U,
299f13fc290SMatthias Ringwald   0x04040404U, 0xc7c7c7c7U, 0x23232323U, 0xc3c3c3c3U,
300f13fc290SMatthias Ringwald   0x18181818U, 0x96969696U, 0x05050505U, 0x9a9a9a9aU,
301f13fc290SMatthias Ringwald   0x07070707U, 0x12121212U, 0x80808080U, 0xe2e2e2e2U,
302f13fc290SMatthias Ringwald   0xebebebebU, 0x27272727U, 0xb2b2b2b2U, 0x75757575U,
303f13fc290SMatthias Ringwald   0x09090909U, 0x83838383U, 0x2c2c2c2cU, 0x1a1a1a1aU,
304f13fc290SMatthias Ringwald   0x1b1b1b1bU, 0x6e6e6e6eU, 0x5a5a5a5aU, 0xa0a0a0a0U,
305f13fc290SMatthias Ringwald   0x52525252U, 0x3b3b3b3bU, 0xd6d6d6d6U, 0xb3b3b3b3U,
306f13fc290SMatthias Ringwald   0x29292929U, 0xe3e3e3e3U, 0x2f2f2f2fU, 0x84848484U,
307f13fc290SMatthias Ringwald   0x53535353U, 0xd1d1d1d1U, 0x00000000U, 0xededededU,
308f13fc290SMatthias Ringwald   0x20202020U, 0xfcfcfcfcU, 0xb1b1b1b1U, 0x5b5b5b5bU,
309f13fc290SMatthias Ringwald   0x6a6a6a6aU, 0xcbcbcbcbU, 0xbebebebeU, 0x39393939U,
310f13fc290SMatthias Ringwald   0x4a4a4a4aU, 0x4c4c4c4cU, 0x58585858U, 0xcfcfcfcfU,
311f13fc290SMatthias Ringwald   0xd0d0d0d0U, 0xefefefefU, 0xaaaaaaaaU, 0xfbfbfbfbU,
312f13fc290SMatthias Ringwald   0x43434343U, 0x4d4d4d4dU, 0x33333333U, 0x85858585U,
313f13fc290SMatthias Ringwald   0x45454545U, 0xf9f9f9f9U, 0x02020202U, 0x7f7f7f7fU,
314f13fc290SMatthias Ringwald   0x50505050U, 0x3c3c3c3cU, 0x9f9f9f9fU, 0xa8a8a8a8U,
315f13fc290SMatthias Ringwald   0x51515151U, 0xa3a3a3a3U, 0x40404040U, 0x8f8f8f8fU,
316f13fc290SMatthias Ringwald   0x92929292U, 0x9d9d9d9dU, 0x38383838U, 0xf5f5f5f5U,
317f13fc290SMatthias Ringwald   0xbcbcbcbcU, 0xb6b6b6b6U, 0xdadadadaU, 0x21212121U,
318f13fc290SMatthias Ringwald   0x10101010U, 0xffffffffU, 0xf3f3f3f3U, 0xd2d2d2d2U,
319f13fc290SMatthias Ringwald   0xcdcdcdcdU, 0x0c0c0c0cU, 0x13131313U, 0xececececU,
320f13fc290SMatthias Ringwald   0x5f5f5f5fU, 0x97979797U, 0x44444444U, 0x17171717U,
321f13fc290SMatthias Ringwald   0xc4c4c4c4U, 0xa7a7a7a7U, 0x7e7e7e7eU, 0x3d3d3d3dU,
322f13fc290SMatthias Ringwald   0x64646464U, 0x5d5d5d5dU, 0x19191919U, 0x73737373U,
323f13fc290SMatthias Ringwald   0x60606060U, 0x81818181U, 0x4f4f4f4fU, 0xdcdcdcdcU,
324f13fc290SMatthias Ringwald   0x22222222U, 0x2a2a2a2aU, 0x90909090U, 0x88888888U,
325f13fc290SMatthias Ringwald   0x46464646U, 0xeeeeeeeeU, 0xb8b8b8b8U, 0x14141414U,
326f13fc290SMatthias Ringwald   0xdedededeU, 0x5e5e5e5eU, 0x0b0b0b0bU, 0xdbdbdbdbU,
327f13fc290SMatthias Ringwald   0xe0e0e0e0U, 0x32323232U, 0x3a3a3a3aU, 0x0a0a0a0aU,
328f13fc290SMatthias Ringwald   0x49494949U, 0x06060606U, 0x24242424U, 0x5c5c5c5cU,
329f13fc290SMatthias Ringwald   0xc2c2c2c2U, 0xd3d3d3d3U, 0xacacacacU, 0x62626262U,
330f13fc290SMatthias Ringwald   0x91919191U, 0x95959595U, 0xe4e4e4e4U, 0x79797979U,
331f13fc290SMatthias Ringwald   0xe7e7e7e7U, 0xc8c8c8c8U, 0x37373737U, 0x6d6d6d6dU,
332f13fc290SMatthias Ringwald   0x8d8d8d8dU, 0xd5d5d5d5U, 0x4e4e4e4eU, 0xa9a9a9a9U,
333f13fc290SMatthias Ringwald   0x6c6c6c6cU, 0x56565656U, 0xf4f4f4f4U, 0xeaeaeaeaU,
334f13fc290SMatthias Ringwald   0x65656565U, 0x7a7a7a7aU, 0xaeaeaeaeU, 0x08080808U,
335f13fc290SMatthias Ringwald   0xbabababaU, 0x78787878U, 0x25252525U, 0x2e2e2e2eU,
336f13fc290SMatthias Ringwald   0x1c1c1c1cU, 0xa6a6a6a6U, 0xb4b4b4b4U, 0xc6c6c6c6U,
337f13fc290SMatthias Ringwald   0xe8e8e8e8U, 0xddddddddU, 0x74747474U, 0x1f1f1f1fU,
338f13fc290SMatthias Ringwald   0x4b4b4b4bU, 0xbdbdbdbdU, 0x8b8b8b8bU, 0x8a8a8a8aU,
339f13fc290SMatthias Ringwald   0x70707070U, 0x3e3e3e3eU, 0xb5b5b5b5U, 0x66666666U,
340f13fc290SMatthias Ringwald   0x48484848U, 0x03030303U, 0xf6f6f6f6U, 0x0e0e0e0eU,
341f13fc290SMatthias Ringwald   0x61616161U, 0x35353535U, 0x57575757U, 0xb9b9b9b9U,
342f13fc290SMatthias Ringwald   0x86868686U, 0xc1c1c1c1U, 0x1d1d1d1dU, 0x9e9e9e9eU,
343f13fc290SMatthias Ringwald   0xe1e1e1e1U, 0xf8f8f8f8U, 0x98989898U, 0x11111111U,
344f13fc290SMatthias Ringwald   0x69696969U, 0xd9d9d9d9U, 0x8e8e8e8eU, 0x94949494U,
345f13fc290SMatthias Ringwald   0x9b9b9b9bU, 0x1e1e1e1eU, 0x87878787U, 0xe9e9e9e9U,
346f13fc290SMatthias Ringwald   0xcecececeU, 0x55555555U, 0x28282828U, 0xdfdfdfdfU,
347f13fc290SMatthias Ringwald   0x8c8c8c8cU, 0xa1a1a1a1U, 0x89898989U, 0x0d0d0d0dU,
348f13fc290SMatthias Ringwald   0xbfbfbfbfU, 0xe6e6e6e6U, 0x42424242U, 0x68686868U,
349f13fc290SMatthias Ringwald   0x41414141U, 0x99999999U, 0x2d2d2d2dU, 0x0f0f0f0fU,
350f13fc290SMatthias Ringwald   0xb0b0b0b0U, 0x54545454U, 0xbbbbbbbbU, 0x16161616U,
351f13fc290SMatthias Ringwald };
352f13fc290SMatthias Ringwald 
353*58039fbfSMatthias Ringwald #ifdef ENABLE_RIJNDAEL_DECRYPT
354f13fc290SMatthias Ringwald static const u32 Td0[256] =
355f13fc290SMatthias Ringwald {
356f13fc290SMatthias Ringwald   0x51f4a750U, 0x7e416553U, 0x1a17a4c3U, 0x3a275e96U,
357f13fc290SMatthias Ringwald   0x3bab6bcbU, 0x1f9d45f1U, 0xacfa58abU, 0x4be30393U,
358f13fc290SMatthias Ringwald   0x2030fa55U, 0xad766df6U, 0x88cc7691U, 0xf5024c25U,
359f13fc290SMatthias Ringwald   0x4fe5d7fcU, 0xc52acbd7U, 0x26354480U, 0xb562a38fU,
360f13fc290SMatthias Ringwald   0xdeb15a49U, 0x25ba1b67U, 0x45ea0e98U, 0x5dfec0e1U,
361f13fc290SMatthias Ringwald   0xc32f7502U, 0x814cf012U, 0x8d4697a3U, 0x6bd3f9c6U,
362f13fc290SMatthias Ringwald   0x038f5fe7U, 0x15929c95U, 0xbf6d7aebU, 0x955259daU,
363f13fc290SMatthias Ringwald   0xd4be832dU, 0x587421d3U, 0x49e06929U, 0x8ec9c844U,
364f13fc290SMatthias Ringwald   0x75c2896aU, 0xf48e7978U, 0x99583e6bU, 0x27b971ddU,
365f13fc290SMatthias Ringwald   0xbee14fb6U, 0xf088ad17U, 0xc920ac66U, 0x7dce3ab4U,
366f13fc290SMatthias Ringwald   0x63df4a18U, 0xe51a3182U, 0x97513360U, 0x62537f45U,
367f13fc290SMatthias Ringwald   0xb16477e0U, 0xbb6bae84U, 0xfe81a01cU, 0xf9082b94U,
368f13fc290SMatthias Ringwald   0x70486858U, 0x8f45fd19U, 0x94de6c87U, 0x527bf8b7U,
369f13fc290SMatthias Ringwald   0xab73d323U, 0x724b02e2U, 0xe31f8f57U, 0x6655ab2aU,
370f13fc290SMatthias Ringwald   0xb2eb2807U, 0x2fb5c203U, 0x86c57b9aU, 0xd33708a5U,
371f13fc290SMatthias Ringwald   0x302887f2U, 0x23bfa5b2U, 0x02036abaU, 0xed16825cU,
372f13fc290SMatthias Ringwald   0x8acf1c2bU, 0xa779b492U, 0xf307f2f0U, 0x4e69e2a1U,
373f13fc290SMatthias Ringwald   0x65daf4cdU, 0x0605bed5U, 0xd134621fU, 0xc4a6fe8aU,
374f13fc290SMatthias Ringwald   0x342e539dU, 0xa2f355a0U, 0x058ae132U, 0xa4f6eb75U,
375f13fc290SMatthias Ringwald   0x0b83ec39U, 0x4060efaaU, 0x5e719f06U, 0xbd6e1051U,
376f13fc290SMatthias Ringwald   0x3e218af9U, 0x96dd063dU, 0xdd3e05aeU, 0x4de6bd46U,
377f13fc290SMatthias Ringwald   0x91548db5U, 0x71c45d05U, 0x0406d46fU, 0x605015ffU,
378f13fc290SMatthias Ringwald   0x1998fb24U, 0xd6bde997U, 0x894043ccU, 0x67d99e77U,
379f13fc290SMatthias Ringwald   0xb0e842bdU, 0x07898b88U, 0xe7195b38U, 0x79c8eedbU,
380f13fc290SMatthias Ringwald   0xa17c0a47U, 0x7c420fe9U, 0xf8841ec9U, 0x00000000U,
381f13fc290SMatthias Ringwald   0x09808683U, 0x322bed48U, 0x1e1170acU, 0x6c5a724eU,
382f13fc290SMatthias Ringwald   0xfd0efffbU, 0x0f853856U, 0x3daed51eU, 0x362d3927U,
383f13fc290SMatthias Ringwald   0x0a0fd964U, 0x685ca621U, 0x9b5b54d1U, 0x24362e3aU,
384f13fc290SMatthias Ringwald   0x0c0a67b1U, 0x9357e70fU, 0xb4ee96d2U, 0x1b9b919eU,
385f13fc290SMatthias Ringwald   0x80c0c54fU, 0x61dc20a2U, 0x5a774b69U, 0x1c121a16U,
386f13fc290SMatthias Ringwald   0xe293ba0aU, 0xc0a02ae5U, 0x3c22e043U, 0x121b171dU,
387f13fc290SMatthias Ringwald   0x0e090d0bU, 0xf28bc7adU, 0x2db6a8b9U, 0x141ea9c8U,
388f13fc290SMatthias Ringwald   0x57f11985U, 0xaf75074cU, 0xee99ddbbU, 0xa37f60fdU,
389f13fc290SMatthias Ringwald   0xf701269fU, 0x5c72f5bcU, 0x44663bc5U, 0x5bfb7e34U,
390f13fc290SMatthias Ringwald   0x8b432976U, 0xcb23c6dcU, 0xb6edfc68U, 0xb8e4f163U,
391f13fc290SMatthias Ringwald   0xd731dccaU, 0x42638510U, 0x13972240U, 0x84c61120U,
392f13fc290SMatthias Ringwald   0x854a247dU, 0xd2bb3df8U, 0xaef93211U, 0xc729a16dU,
393f13fc290SMatthias Ringwald   0x1d9e2f4bU, 0xdcb230f3U, 0x0d8652ecU, 0x77c1e3d0U,
394f13fc290SMatthias Ringwald   0x2bb3166cU, 0xa970b999U, 0x119448faU, 0x47e96422U,
395f13fc290SMatthias Ringwald   0xa8fc8cc4U, 0xa0f03f1aU, 0x567d2cd8U, 0x223390efU,
396f13fc290SMatthias Ringwald   0x87494ec7U, 0xd938d1c1U, 0x8ccaa2feU, 0x98d40b36U,
397f13fc290SMatthias Ringwald   0xa6f581cfU, 0xa57ade28U, 0xdab78e26U, 0x3fadbfa4U,
398f13fc290SMatthias Ringwald   0x2c3a9de4U, 0x5078920dU, 0x6a5fcc9bU, 0x547e4662U,
399f13fc290SMatthias Ringwald   0xf68d13c2U, 0x90d8b8e8U, 0x2e39f75eU, 0x82c3aff5U,
400f13fc290SMatthias Ringwald   0x9f5d80beU, 0x69d0937cU, 0x6fd52da9U, 0xcf2512b3U,
401f13fc290SMatthias Ringwald   0xc8ac993bU, 0x10187da7U, 0xe89c636eU, 0xdb3bbb7bU,
402f13fc290SMatthias Ringwald   0xcd267809U, 0x6e5918f4U, 0xec9ab701U, 0x834f9aa8U,
403f13fc290SMatthias Ringwald   0xe6956e65U, 0xaaffe67eU, 0x21bccf08U, 0xef15e8e6U,
404f13fc290SMatthias Ringwald   0xbae79bd9U, 0x4a6f36ceU, 0xea9f09d4U, 0x29b07cd6U,
405f13fc290SMatthias Ringwald   0x31a4b2afU, 0x2a3f2331U, 0xc6a59430U, 0x35a266c0U,
406f13fc290SMatthias Ringwald   0x744ebc37U, 0xfc82caa6U, 0xe090d0b0U, 0x33a7d815U,
407f13fc290SMatthias Ringwald   0xf104984aU, 0x41ecdaf7U, 0x7fcd500eU, 0x1791f62fU,
408f13fc290SMatthias Ringwald   0x764dd68dU, 0x43efb04dU, 0xccaa4d54U, 0xe49604dfU,
409f13fc290SMatthias Ringwald   0x9ed1b5e3U, 0x4c6a881bU, 0xc12c1fb8U, 0x4665517fU,
410f13fc290SMatthias Ringwald   0x9d5eea04U, 0x018c355dU, 0xfa877473U, 0xfb0b412eU,
411f13fc290SMatthias Ringwald   0xb3671d5aU, 0x92dbd252U, 0xe9105633U, 0x6dd64713U,
412f13fc290SMatthias Ringwald   0x9ad7618cU, 0x37a10c7aU, 0x59f8148eU, 0xeb133c89U,
413f13fc290SMatthias Ringwald   0xcea927eeU, 0xb761c935U, 0xe11ce5edU, 0x7a47b13cU,
414f13fc290SMatthias Ringwald   0x9cd2df59U, 0x55f2733fU, 0x1814ce79U, 0x73c737bfU,
415f13fc290SMatthias Ringwald   0x53f7cdeaU, 0x5ffdaa5bU, 0xdf3d6f14U, 0x7844db86U,
416f13fc290SMatthias Ringwald   0xcaaff381U, 0xb968c43eU, 0x3824342cU, 0xc2a3405fU,
417f13fc290SMatthias Ringwald   0x161dc372U, 0xbce2250cU, 0x283c498bU, 0xff0d9541U,
418f13fc290SMatthias Ringwald   0x39a80171U, 0x080cb3deU, 0xd8b4e49cU, 0x6456c190U,
419f13fc290SMatthias Ringwald   0x7bcb8461U, 0xd532b670U, 0x486c5c74U, 0xd0b85742U,
420f13fc290SMatthias Ringwald };
421f13fc290SMatthias Ringwald 
422f13fc290SMatthias Ringwald static const u32 Td1[256] =
423f13fc290SMatthias Ringwald {
424f13fc290SMatthias Ringwald   0x5051f4a7U, 0x537e4165U, 0xc31a17a4U, 0x963a275eU,
425f13fc290SMatthias Ringwald   0xcb3bab6bU, 0xf11f9d45U, 0xabacfa58U, 0x934be303U,
426f13fc290SMatthias Ringwald   0x552030faU, 0xf6ad766dU, 0x9188cc76U, 0x25f5024cU,
427f13fc290SMatthias Ringwald   0xfc4fe5d7U, 0xd7c52acbU, 0x80263544U, 0x8fb562a3U,
428f13fc290SMatthias Ringwald   0x49deb15aU, 0x6725ba1bU, 0x9845ea0eU, 0xe15dfec0U,
429f13fc290SMatthias Ringwald   0x02c32f75U, 0x12814cf0U, 0xa38d4697U, 0xc66bd3f9U,
430f13fc290SMatthias Ringwald   0xe7038f5fU, 0x9515929cU, 0xebbf6d7aU, 0xda955259U,
431f13fc290SMatthias Ringwald   0x2dd4be83U, 0xd3587421U, 0x2949e069U, 0x448ec9c8U,
432f13fc290SMatthias Ringwald   0x6a75c289U, 0x78f48e79U, 0x6b99583eU, 0xdd27b971U,
433f13fc290SMatthias Ringwald   0xb6bee14fU, 0x17f088adU, 0x66c920acU, 0xb47dce3aU,
434f13fc290SMatthias Ringwald   0x1863df4aU, 0x82e51a31U, 0x60975133U, 0x4562537fU,
435f13fc290SMatthias Ringwald   0xe0b16477U, 0x84bb6baeU, 0x1cfe81a0U, 0x94f9082bU,
436f13fc290SMatthias Ringwald   0x58704868U, 0x198f45fdU, 0x8794de6cU, 0xb7527bf8U,
437f13fc290SMatthias Ringwald   0x23ab73d3U, 0xe2724b02U, 0x57e31f8fU, 0x2a6655abU,
438f13fc290SMatthias Ringwald   0x07b2eb28U, 0x032fb5c2U, 0x9a86c57bU, 0xa5d33708U,
439f13fc290SMatthias Ringwald   0xf2302887U, 0xb223bfa5U, 0xba02036aU, 0x5ced1682U,
440f13fc290SMatthias Ringwald   0x2b8acf1cU, 0x92a779b4U, 0xf0f307f2U, 0xa14e69e2U,
441f13fc290SMatthias Ringwald   0xcd65daf4U, 0xd50605beU, 0x1fd13462U, 0x8ac4a6feU,
442f13fc290SMatthias Ringwald   0x9d342e53U, 0xa0a2f355U, 0x32058ae1U, 0x75a4f6ebU,
443f13fc290SMatthias Ringwald   0x390b83ecU, 0xaa4060efU, 0x065e719fU, 0x51bd6e10U,
444f13fc290SMatthias Ringwald   0xf93e218aU, 0x3d96dd06U, 0xaedd3e05U, 0x464de6bdU,
445f13fc290SMatthias Ringwald   0xb591548dU, 0x0571c45dU, 0x6f0406d4U, 0xff605015U,
446f13fc290SMatthias Ringwald   0x241998fbU, 0x97d6bde9U, 0xcc894043U, 0x7767d99eU,
447f13fc290SMatthias Ringwald   0xbdb0e842U, 0x8807898bU, 0x38e7195bU, 0xdb79c8eeU,
448f13fc290SMatthias Ringwald   0x47a17c0aU, 0xe97c420fU, 0xc9f8841eU, 0x00000000U,
449f13fc290SMatthias Ringwald   0x83098086U, 0x48322bedU, 0xac1e1170U, 0x4e6c5a72U,
450f13fc290SMatthias Ringwald   0xfbfd0effU, 0x560f8538U, 0x1e3daed5U, 0x27362d39U,
451f13fc290SMatthias Ringwald   0x640a0fd9U, 0x21685ca6U, 0xd19b5b54U, 0x3a24362eU,
452f13fc290SMatthias Ringwald   0xb10c0a67U, 0x0f9357e7U, 0xd2b4ee96U, 0x9e1b9b91U,
453f13fc290SMatthias Ringwald   0x4f80c0c5U, 0xa261dc20U, 0x695a774bU, 0x161c121aU,
454f13fc290SMatthias Ringwald   0x0ae293baU, 0xe5c0a02aU, 0x433c22e0U, 0x1d121b17U,
455f13fc290SMatthias Ringwald   0x0b0e090dU, 0xadf28bc7U, 0xb92db6a8U, 0xc8141ea9U,
456f13fc290SMatthias Ringwald   0x8557f119U, 0x4caf7507U, 0xbbee99ddU, 0xfda37f60U,
457f13fc290SMatthias Ringwald   0x9ff70126U, 0xbc5c72f5U, 0xc544663bU, 0x345bfb7eU,
458f13fc290SMatthias Ringwald   0x768b4329U, 0xdccb23c6U, 0x68b6edfcU, 0x63b8e4f1U,
459f13fc290SMatthias Ringwald   0xcad731dcU, 0x10426385U, 0x40139722U, 0x2084c611U,
460f13fc290SMatthias Ringwald   0x7d854a24U, 0xf8d2bb3dU, 0x11aef932U, 0x6dc729a1U,
461f13fc290SMatthias Ringwald   0x4b1d9e2fU, 0xf3dcb230U, 0xec0d8652U, 0xd077c1e3U,
462f13fc290SMatthias Ringwald   0x6c2bb316U, 0x99a970b9U, 0xfa119448U, 0x2247e964U,
463f13fc290SMatthias Ringwald   0xc4a8fc8cU, 0x1aa0f03fU, 0xd8567d2cU, 0xef223390U,
464f13fc290SMatthias Ringwald   0xc787494eU, 0xc1d938d1U, 0xfe8ccaa2U, 0x3698d40bU,
465f13fc290SMatthias Ringwald   0xcfa6f581U, 0x28a57adeU, 0x26dab78eU, 0xa43fadbfU,
466f13fc290SMatthias Ringwald   0xe42c3a9dU, 0x0d507892U, 0x9b6a5fccU, 0x62547e46U,
467f13fc290SMatthias Ringwald   0xc2f68d13U, 0xe890d8b8U, 0x5e2e39f7U, 0xf582c3afU,
468f13fc290SMatthias Ringwald   0xbe9f5d80U, 0x7c69d093U, 0xa96fd52dU, 0xb3cf2512U,
469f13fc290SMatthias Ringwald   0x3bc8ac99U, 0xa710187dU, 0x6ee89c63U, 0x7bdb3bbbU,
470f13fc290SMatthias Ringwald   0x09cd2678U, 0xf46e5918U, 0x01ec9ab7U, 0xa8834f9aU,
471f13fc290SMatthias Ringwald   0x65e6956eU, 0x7eaaffe6U, 0x0821bccfU, 0xe6ef15e8U,
472f13fc290SMatthias Ringwald   0xd9bae79bU, 0xce4a6f36U, 0xd4ea9f09U, 0xd629b07cU,
473f13fc290SMatthias Ringwald   0xaf31a4b2U, 0x312a3f23U, 0x30c6a594U, 0xc035a266U,
474f13fc290SMatthias Ringwald   0x37744ebcU, 0xa6fc82caU, 0xb0e090d0U, 0x1533a7d8U,
475f13fc290SMatthias Ringwald   0x4af10498U, 0xf741ecdaU, 0x0e7fcd50U, 0x2f1791f6U,
476f13fc290SMatthias Ringwald   0x8d764dd6U, 0x4d43efb0U, 0x54ccaa4dU, 0xdfe49604U,
477f13fc290SMatthias Ringwald   0xe39ed1b5U, 0x1b4c6a88U, 0xb8c12c1fU, 0x7f466551U,
478f13fc290SMatthias Ringwald   0x049d5eeaU, 0x5d018c35U, 0x73fa8774U, 0x2efb0b41U,
479f13fc290SMatthias Ringwald   0x5ab3671dU, 0x5292dbd2U, 0x33e91056U, 0x136dd647U,
480f13fc290SMatthias Ringwald   0x8c9ad761U, 0x7a37a10cU, 0x8e59f814U, 0x89eb133cU,
481f13fc290SMatthias Ringwald   0xeecea927U, 0x35b761c9U, 0xede11ce5U, 0x3c7a47b1U,
482f13fc290SMatthias Ringwald   0x599cd2dfU, 0x3f55f273U, 0x791814ceU, 0xbf73c737U,
483f13fc290SMatthias Ringwald   0xea53f7cdU, 0x5b5ffdaaU, 0x14df3d6fU, 0x867844dbU,
484f13fc290SMatthias Ringwald   0x81caaff3U, 0x3eb968c4U, 0x2c382434U, 0x5fc2a340U,
485f13fc290SMatthias Ringwald   0x72161dc3U, 0x0cbce225U, 0x8b283c49U, 0x41ff0d95U,
486f13fc290SMatthias Ringwald   0x7139a801U, 0xde080cb3U, 0x9cd8b4e4U, 0x906456c1U,
487f13fc290SMatthias Ringwald   0x617bcb84U, 0x70d532b6U, 0x74486c5cU, 0x42d0b857U,
488f13fc290SMatthias Ringwald };
489f13fc290SMatthias Ringwald 
490f13fc290SMatthias Ringwald static const u32 Td2[256] =
491f13fc290SMatthias Ringwald {
492f13fc290SMatthias Ringwald   0xa75051f4U, 0x65537e41U, 0xa4c31a17U, 0x5e963a27U,
493f13fc290SMatthias Ringwald   0x6bcb3babU, 0x45f11f9dU, 0x58abacfaU, 0x03934be3U,
494f13fc290SMatthias Ringwald   0xfa552030U, 0x6df6ad76U, 0x769188ccU, 0x4c25f502U,
495f13fc290SMatthias Ringwald   0xd7fc4fe5U, 0xcbd7c52aU, 0x44802635U, 0xa38fb562U,
496f13fc290SMatthias Ringwald   0x5a49deb1U, 0x1b6725baU, 0x0e9845eaU, 0xc0e15dfeU,
497f13fc290SMatthias Ringwald   0x7502c32fU, 0xf012814cU, 0x97a38d46U, 0xf9c66bd3U,
498f13fc290SMatthias Ringwald   0x5fe7038fU, 0x9c951592U, 0x7aebbf6dU, 0x59da9552U,
499f13fc290SMatthias Ringwald   0x832dd4beU, 0x21d35874U, 0x692949e0U, 0xc8448ec9U,
500f13fc290SMatthias Ringwald   0x896a75c2U, 0x7978f48eU, 0x3e6b9958U, 0x71dd27b9U,
501f13fc290SMatthias Ringwald   0x4fb6bee1U, 0xad17f088U, 0xac66c920U, 0x3ab47dceU,
502f13fc290SMatthias Ringwald   0x4a1863dfU, 0x3182e51aU, 0x33609751U, 0x7f456253U,
503f13fc290SMatthias Ringwald   0x77e0b164U, 0xae84bb6bU, 0xa01cfe81U, 0x2b94f908U,
504f13fc290SMatthias Ringwald   0x68587048U, 0xfd198f45U, 0x6c8794deU, 0xf8b7527bU,
505f13fc290SMatthias Ringwald   0xd323ab73U, 0x02e2724bU, 0x8f57e31fU, 0xab2a6655U,
506f13fc290SMatthias Ringwald   0x2807b2ebU, 0xc2032fb5U, 0x7b9a86c5U, 0x08a5d337U,
507f13fc290SMatthias Ringwald   0x87f23028U, 0xa5b223bfU, 0x6aba0203U, 0x825ced16U,
508f13fc290SMatthias Ringwald   0x1c2b8acfU, 0xb492a779U, 0xf2f0f307U, 0xe2a14e69U,
509f13fc290SMatthias Ringwald   0xf4cd65daU, 0xbed50605U, 0x621fd134U, 0xfe8ac4a6U,
510f13fc290SMatthias Ringwald   0x539d342eU, 0x55a0a2f3U, 0xe132058aU, 0xeb75a4f6U,
511f13fc290SMatthias Ringwald   0xec390b83U, 0xefaa4060U, 0x9f065e71U, 0x1051bd6eU,
512f13fc290SMatthias Ringwald   0x8af93e21U, 0x063d96ddU, 0x05aedd3eU, 0xbd464de6U,
513f13fc290SMatthias Ringwald   0x8db59154U, 0x5d0571c4U, 0xd46f0406U, 0x15ff6050U,
514f13fc290SMatthias Ringwald   0xfb241998U, 0xe997d6bdU, 0x43cc8940U, 0x9e7767d9U,
515f13fc290SMatthias Ringwald   0x42bdb0e8U, 0x8b880789U, 0x5b38e719U, 0xeedb79c8U,
516f13fc290SMatthias Ringwald   0x0a47a17cU, 0x0fe97c42U, 0x1ec9f884U, 0x00000000U,
517f13fc290SMatthias Ringwald   0x86830980U, 0xed48322bU, 0x70ac1e11U, 0x724e6c5aU,
518f13fc290SMatthias Ringwald   0xfffbfd0eU, 0x38560f85U, 0xd51e3daeU, 0x3927362dU,
519f13fc290SMatthias Ringwald   0xd9640a0fU, 0xa621685cU, 0x54d19b5bU, 0x2e3a2436U,
520f13fc290SMatthias Ringwald   0x67b10c0aU, 0xe70f9357U, 0x96d2b4eeU, 0x919e1b9bU,
521f13fc290SMatthias Ringwald   0xc54f80c0U, 0x20a261dcU, 0x4b695a77U, 0x1a161c12U,
522f13fc290SMatthias Ringwald   0xba0ae293U, 0x2ae5c0a0U, 0xe0433c22U, 0x171d121bU,
523f13fc290SMatthias Ringwald   0x0d0b0e09U, 0xc7adf28bU, 0xa8b92db6U, 0xa9c8141eU,
524f13fc290SMatthias Ringwald   0x198557f1U, 0x074caf75U, 0xddbbee99U, 0x60fda37fU,
525f13fc290SMatthias Ringwald   0x269ff701U, 0xf5bc5c72U, 0x3bc54466U, 0x7e345bfbU,
526f13fc290SMatthias Ringwald   0x29768b43U, 0xc6dccb23U, 0xfc68b6edU, 0xf163b8e4U,
527f13fc290SMatthias Ringwald   0xdccad731U, 0x85104263U, 0x22401397U, 0x112084c6U,
528f13fc290SMatthias Ringwald   0x247d854aU, 0x3df8d2bbU, 0x3211aef9U, 0xa16dc729U,
529f13fc290SMatthias Ringwald   0x2f4b1d9eU, 0x30f3dcb2U, 0x52ec0d86U, 0xe3d077c1U,
530f13fc290SMatthias Ringwald   0x166c2bb3U, 0xb999a970U, 0x48fa1194U, 0x642247e9U,
531f13fc290SMatthias Ringwald   0x8cc4a8fcU, 0x3f1aa0f0U, 0x2cd8567dU, 0x90ef2233U,
532f13fc290SMatthias Ringwald   0x4ec78749U, 0xd1c1d938U, 0xa2fe8ccaU, 0x0b3698d4U,
533f13fc290SMatthias Ringwald   0x81cfa6f5U, 0xde28a57aU, 0x8e26dab7U, 0xbfa43fadU,
534f13fc290SMatthias Ringwald   0x9de42c3aU, 0x920d5078U, 0xcc9b6a5fU, 0x4662547eU,
535f13fc290SMatthias Ringwald   0x13c2f68dU, 0xb8e890d8U, 0xf75e2e39U, 0xaff582c3U,
536f13fc290SMatthias Ringwald   0x80be9f5dU, 0x937c69d0U, 0x2da96fd5U, 0x12b3cf25U,
537f13fc290SMatthias Ringwald   0x993bc8acU, 0x7da71018U, 0x636ee89cU, 0xbb7bdb3bU,
538f13fc290SMatthias Ringwald   0x7809cd26U, 0x18f46e59U, 0xb701ec9aU, 0x9aa8834fU,
539f13fc290SMatthias Ringwald   0x6e65e695U, 0xe67eaaffU, 0xcf0821bcU, 0xe8e6ef15U,
540f13fc290SMatthias Ringwald   0x9bd9bae7U, 0x36ce4a6fU, 0x09d4ea9fU, 0x7cd629b0U,
541f13fc290SMatthias Ringwald   0xb2af31a4U, 0x23312a3fU, 0x9430c6a5U, 0x66c035a2U,
542f13fc290SMatthias Ringwald   0xbc37744eU, 0xcaa6fc82U, 0xd0b0e090U, 0xd81533a7U,
543f13fc290SMatthias Ringwald   0x984af104U, 0xdaf741ecU, 0x500e7fcdU, 0xf62f1791U,
544f13fc290SMatthias Ringwald   0xd68d764dU, 0xb04d43efU, 0x4d54ccaaU, 0x04dfe496U,
545f13fc290SMatthias Ringwald   0xb5e39ed1U, 0x881b4c6aU, 0x1fb8c12cU, 0x517f4665U,
546f13fc290SMatthias Ringwald   0xea049d5eU, 0x355d018cU, 0x7473fa87U, 0x412efb0bU,
547f13fc290SMatthias Ringwald   0x1d5ab367U, 0xd25292dbU, 0x5633e910U, 0x47136dd6U,
548f13fc290SMatthias Ringwald   0x618c9ad7U, 0x0c7a37a1U, 0x148e59f8U, 0x3c89eb13U,
549f13fc290SMatthias Ringwald   0x27eecea9U, 0xc935b761U, 0xe5ede11cU, 0xb13c7a47U,
550f13fc290SMatthias Ringwald   0xdf599cd2U, 0x733f55f2U, 0xce791814U, 0x37bf73c7U,
551f13fc290SMatthias Ringwald   0xcdea53f7U, 0xaa5b5ffdU, 0x6f14df3dU, 0xdb867844U,
552f13fc290SMatthias Ringwald   0xf381caafU, 0xc43eb968U, 0x342c3824U, 0x405fc2a3U,
553f13fc290SMatthias Ringwald   0xc372161dU, 0x250cbce2U, 0x498b283cU, 0x9541ff0dU,
554f13fc290SMatthias Ringwald   0x017139a8U, 0xb3de080cU, 0xe49cd8b4U, 0xc1906456U,
555f13fc290SMatthias Ringwald   0x84617bcbU, 0xb670d532U, 0x5c74486cU, 0x5742d0b8U,
556f13fc290SMatthias Ringwald };
557f13fc290SMatthias Ringwald 
558f13fc290SMatthias Ringwald static const u32 Td3[256] =
559f13fc290SMatthias Ringwald {
560f13fc290SMatthias Ringwald   0xf4a75051U, 0x4165537eU, 0x17a4c31aU, 0x275e963aU,
561f13fc290SMatthias Ringwald   0xab6bcb3bU, 0x9d45f11fU, 0xfa58abacU, 0xe303934bU,
562f13fc290SMatthias Ringwald   0x30fa5520U, 0x766df6adU, 0xcc769188U, 0x024c25f5U,
563f13fc290SMatthias Ringwald   0xe5d7fc4fU, 0x2acbd7c5U, 0x35448026U, 0x62a38fb5U,
564f13fc290SMatthias Ringwald   0xb15a49deU, 0xba1b6725U, 0xea0e9845U, 0xfec0e15dU,
565f13fc290SMatthias Ringwald   0x2f7502c3U, 0x4cf01281U, 0x4697a38dU, 0xd3f9c66bU,
566f13fc290SMatthias Ringwald   0x8f5fe703U, 0x929c9515U, 0x6d7aebbfU, 0x5259da95U,
567f13fc290SMatthias Ringwald   0xbe832dd4U, 0x7421d358U, 0xe0692949U, 0xc9c8448eU,
568f13fc290SMatthias Ringwald   0xc2896a75U, 0x8e7978f4U, 0x583e6b99U, 0xb971dd27U,
569f13fc290SMatthias Ringwald   0xe14fb6beU, 0x88ad17f0U, 0x20ac66c9U, 0xce3ab47dU,
570f13fc290SMatthias Ringwald   0xdf4a1863U, 0x1a3182e5U, 0x51336097U, 0x537f4562U,
571f13fc290SMatthias Ringwald   0x6477e0b1U, 0x6bae84bbU, 0x81a01cfeU, 0x082b94f9U,
572f13fc290SMatthias Ringwald   0x48685870U, 0x45fd198fU, 0xde6c8794U, 0x7bf8b752U,
573f13fc290SMatthias Ringwald   0x73d323abU, 0x4b02e272U, 0x1f8f57e3U, 0x55ab2a66U,
574f13fc290SMatthias Ringwald   0xeb2807b2U, 0xb5c2032fU, 0xc57b9a86U, 0x3708a5d3U,
575f13fc290SMatthias Ringwald   0x2887f230U, 0xbfa5b223U, 0x036aba02U, 0x16825cedU,
576f13fc290SMatthias Ringwald   0xcf1c2b8aU, 0x79b492a7U, 0x07f2f0f3U, 0x69e2a14eU,
577f13fc290SMatthias Ringwald   0xdaf4cd65U, 0x05bed506U, 0x34621fd1U, 0xa6fe8ac4U,
578f13fc290SMatthias Ringwald   0x2e539d34U, 0xf355a0a2U, 0x8ae13205U, 0xf6eb75a4U,
579f13fc290SMatthias Ringwald   0x83ec390bU, 0x60efaa40U, 0x719f065eU, 0x6e1051bdU,
580f13fc290SMatthias Ringwald   0x218af93eU, 0xdd063d96U, 0x3e05aeddU, 0xe6bd464dU,
581f13fc290SMatthias Ringwald   0x548db591U, 0xc45d0571U, 0x06d46f04U, 0x5015ff60U,
582f13fc290SMatthias Ringwald   0x98fb2419U, 0xbde997d6U, 0x4043cc89U, 0xd99e7767U,
583f13fc290SMatthias Ringwald   0xe842bdb0U, 0x898b8807U, 0x195b38e7U, 0xc8eedb79U,
584f13fc290SMatthias Ringwald   0x7c0a47a1U, 0x420fe97cU, 0x841ec9f8U, 0x00000000U,
585f13fc290SMatthias Ringwald   0x80868309U, 0x2bed4832U, 0x1170ac1eU, 0x5a724e6cU,
586f13fc290SMatthias Ringwald   0x0efffbfdU, 0x8538560fU, 0xaed51e3dU, 0x2d392736U,
587f13fc290SMatthias Ringwald   0x0fd9640aU, 0x5ca62168U, 0x5b54d19bU, 0x362e3a24U,
588f13fc290SMatthias Ringwald   0x0a67b10cU, 0x57e70f93U, 0xee96d2b4U, 0x9b919e1bU,
589f13fc290SMatthias Ringwald   0xc0c54f80U, 0xdc20a261U, 0x774b695aU, 0x121a161cU,
590f13fc290SMatthias Ringwald   0x93ba0ae2U, 0xa02ae5c0U, 0x22e0433cU, 0x1b171d12U,
591f13fc290SMatthias Ringwald   0x090d0b0eU, 0x8bc7adf2U, 0xb6a8b92dU, 0x1ea9c814U,
592f13fc290SMatthias Ringwald   0xf1198557U, 0x75074cafU, 0x99ddbbeeU, 0x7f60fda3U,
593f13fc290SMatthias Ringwald   0x01269ff7U, 0x72f5bc5cU, 0x663bc544U, 0xfb7e345bU,
594f13fc290SMatthias Ringwald   0x4329768bU, 0x23c6dccbU, 0xedfc68b6U, 0xe4f163b8U,
595f13fc290SMatthias Ringwald   0x31dccad7U, 0x63851042U, 0x97224013U, 0xc6112084U,
596f13fc290SMatthias Ringwald   0x4a247d85U, 0xbb3df8d2U, 0xf93211aeU, 0x29a16dc7U,
597f13fc290SMatthias Ringwald   0x9e2f4b1dU, 0xb230f3dcU, 0x8652ec0dU, 0xc1e3d077U,
598f13fc290SMatthias Ringwald   0xb3166c2bU, 0x70b999a9U, 0x9448fa11U, 0xe9642247U,
599f13fc290SMatthias Ringwald   0xfc8cc4a8U, 0xf03f1aa0U, 0x7d2cd856U, 0x3390ef22U,
600f13fc290SMatthias Ringwald   0x494ec787U, 0x38d1c1d9U, 0xcaa2fe8cU, 0xd40b3698U,
601f13fc290SMatthias Ringwald   0xf581cfa6U, 0x7ade28a5U, 0xb78e26daU, 0xadbfa43fU,
602f13fc290SMatthias Ringwald   0x3a9de42cU, 0x78920d50U, 0x5fcc9b6aU, 0x7e466254U,
603f13fc290SMatthias Ringwald   0x8d13c2f6U, 0xd8b8e890U, 0x39f75e2eU, 0xc3aff582U,
604f13fc290SMatthias Ringwald   0x5d80be9fU, 0xd0937c69U, 0xd52da96fU, 0x2512b3cfU,
605f13fc290SMatthias Ringwald   0xac993bc8U, 0x187da710U, 0x9c636ee8U, 0x3bbb7bdbU,
606f13fc290SMatthias Ringwald   0x267809cdU, 0x5918f46eU, 0x9ab701ecU, 0x4f9aa883U,
607f13fc290SMatthias Ringwald   0x956e65e6U, 0xffe67eaaU, 0xbccf0821U, 0x15e8e6efU,
608f13fc290SMatthias Ringwald   0xe79bd9baU, 0x6f36ce4aU, 0x9f09d4eaU, 0xb07cd629U,
609f13fc290SMatthias Ringwald   0xa4b2af31U, 0x3f23312aU, 0xa59430c6U, 0xa266c035U,
610f13fc290SMatthias Ringwald   0x4ebc3774U, 0x82caa6fcU, 0x90d0b0e0U, 0xa7d81533U,
611f13fc290SMatthias Ringwald   0x04984af1U, 0xecdaf741U, 0xcd500e7fU, 0x91f62f17U,
612f13fc290SMatthias Ringwald   0x4dd68d76U, 0xefb04d43U, 0xaa4d54ccU, 0x9604dfe4U,
613f13fc290SMatthias Ringwald   0xd1b5e39eU, 0x6a881b4cU, 0x2c1fb8c1U, 0x65517f46U,
614f13fc290SMatthias Ringwald   0x5eea049dU, 0x8c355d01U, 0x877473faU, 0x0b412efbU,
615f13fc290SMatthias Ringwald   0x671d5ab3U, 0xdbd25292U, 0x105633e9U, 0xd647136dU,
616f13fc290SMatthias Ringwald   0xd7618c9aU, 0xa10c7a37U, 0xf8148e59U, 0x133c89ebU,
617f13fc290SMatthias Ringwald   0xa927eeceU, 0x61c935b7U, 0x1ce5ede1U, 0x47b13c7aU,
618f13fc290SMatthias Ringwald   0xd2df599cU, 0xf2733f55U, 0x14ce7918U, 0xc737bf73U,
619f13fc290SMatthias Ringwald   0xf7cdea53U, 0xfdaa5b5fU, 0x3d6f14dfU, 0x44db8678U,
620f13fc290SMatthias Ringwald   0xaff381caU, 0x68c43eb9U, 0x24342c38U, 0xa3405fc2U,
621f13fc290SMatthias Ringwald   0x1dc37216U, 0xe2250cbcU, 0x3c498b28U, 0x0d9541ffU,
622f13fc290SMatthias Ringwald   0xa8017139U, 0x0cb3de08U, 0xb4e49cd8U, 0x56c19064U,
623f13fc290SMatthias Ringwald   0xcb84617bU, 0x32b670d5U, 0x6c5c7448U, 0xb85742d0U,
624f13fc290SMatthias Ringwald };
625f13fc290SMatthias Ringwald 
626f13fc290SMatthias Ringwald static const u32 Td4[256] =
627f13fc290SMatthias Ringwald {
628f13fc290SMatthias Ringwald   0x52525252U, 0x09090909U, 0x6a6a6a6aU, 0xd5d5d5d5U,
629f13fc290SMatthias Ringwald   0x30303030U, 0x36363636U, 0xa5a5a5a5U, 0x38383838U,
630f13fc290SMatthias Ringwald   0xbfbfbfbfU, 0x40404040U, 0xa3a3a3a3U, 0x9e9e9e9eU,
631f13fc290SMatthias Ringwald   0x81818181U, 0xf3f3f3f3U, 0xd7d7d7d7U, 0xfbfbfbfbU,
632f13fc290SMatthias Ringwald   0x7c7c7c7cU, 0xe3e3e3e3U, 0x39393939U, 0x82828282U,
633f13fc290SMatthias Ringwald   0x9b9b9b9bU, 0x2f2f2f2fU, 0xffffffffU, 0x87878787U,
634f13fc290SMatthias Ringwald   0x34343434U, 0x8e8e8e8eU, 0x43434343U, 0x44444444U,
635f13fc290SMatthias Ringwald   0xc4c4c4c4U, 0xdedededeU, 0xe9e9e9e9U, 0xcbcbcbcbU,
636f13fc290SMatthias Ringwald   0x54545454U, 0x7b7b7b7bU, 0x94949494U, 0x32323232U,
637f13fc290SMatthias Ringwald   0xa6a6a6a6U, 0xc2c2c2c2U, 0x23232323U, 0x3d3d3d3dU,
638f13fc290SMatthias Ringwald   0xeeeeeeeeU, 0x4c4c4c4cU, 0x95959595U, 0x0b0b0b0bU,
639f13fc290SMatthias Ringwald   0x42424242U, 0xfafafafaU, 0xc3c3c3c3U, 0x4e4e4e4eU,
640f13fc290SMatthias Ringwald   0x08080808U, 0x2e2e2e2eU, 0xa1a1a1a1U, 0x66666666U,
641f13fc290SMatthias Ringwald   0x28282828U, 0xd9d9d9d9U, 0x24242424U, 0xb2b2b2b2U,
642f13fc290SMatthias Ringwald   0x76767676U, 0x5b5b5b5bU, 0xa2a2a2a2U, 0x49494949U,
643f13fc290SMatthias Ringwald   0x6d6d6d6dU, 0x8b8b8b8bU, 0xd1d1d1d1U, 0x25252525U,
644f13fc290SMatthias Ringwald   0x72727272U, 0xf8f8f8f8U, 0xf6f6f6f6U, 0x64646464U,
645f13fc290SMatthias Ringwald   0x86868686U, 0x68686868U, 0x98989898U, 0x16161616U,
646f13fc290SMatthias Ringwald   0xd4d4d4d4U, 0xa4a4a4a4U, 0x5c5c5c5cU, 0xccccccccU,
647f13fc290SMatthias Ringwald   0x5d5d5d5dU, 0x65656565U, 0xb6b6b6b6U, 0x92929292U,
648f13fc290SMatthias Ringwald   0x6c6c6c6cU, 0x70707070U, 0x48484848U, 0x50505050U,
649f13fc290SMatthias Ringwald   0xfdfdfdfdU, 0xededededU, 0xb9b9b9b9U, 0xdadadadaU,
650f13fc290SMatthias Ringwald   0x5e5e5e5eU, 0x15151515U, 0x46464646U, 0x57575757U,
651f13fc290SMatthias Ringwald   0xa7a7a7a7U, 0x8d8d8d8dU, 0x9d9d9d9dU, 0x84848484U,
652f13fc290SMatthias Ringwald   0x90909090U, 0xd8d8d8d8U, 0xababababU, 0x00000000U,
653f13fc290SMatthias Ringwald   0x8c8c8c8cU, 0xbcbcbcbcU, 0xd3d3d3d3U, 0x0a0a0a0aU,
654f13fc290SMatthias Ringwald   0xf7f7f7f7U, 0xe4e4e4e4U, 0x58585858U, 0x05050505U,
655f13fc290SMatthias Ringwald   0xb8b8b8b8U, 0xb3b3b3b3U, 0x45454545U, 0x06060606U,
656f13fc290SMatthias Ringwald   0xd0d0d0d0U, 0x2c2c2c2cU, 0x1e1e1e1eU, 0x8f8f8f8fU,
657f13fc290SMatthias Ringwald   0xcacacacaU, 0x3f3f3f3fU, 0x0f0f0f0fU, 0x02020202U,
658f13fc290SMatthias Ringwald   0xc1c1c1c1U, 0xafafafafU, 0xbdbdbdbdU, 0x03030303U,
659f13fc290SMatthias Ringwald   0x01010101U, 0x13131313U, 0x8a8a8a8aU, 0x6b6b6b6bU,
660f13fc290SMatthias Ringwald   0x3a3a3a3aU, 0x91919191U, 0x11111111U, 0x41414141U,
661f13fc290SMatthias Ringwald   0x4f4f4f4fU, 0x67676767U, 0xdcdcdcdcU, 0xeaeaeaeaU,
662f13fc290SMatthias Ringwald   0x97979797U, 0xf2f2f2f2U, 0xcfcfcfcfU, 0xcecececeU,
663f13fc290SMatthias Ringwald   0xf0f0f0f0U, 0xb4b4b4b4U, 0xe6e6e6e6U, 0x73737373U,
664f13fc290SMatthias Ringwald   0x96969696U, 0xacacacacU, 0x74747474U, 0x22222222U,
665f13fc290SMatthias Ringwald   0xe7e7e7e7U, 0xadadadadU, 0x35353535U, 0x85858585U,
666f13fc290SMatthias Ringwald   0xe2e2e2e2U, 0xf9f9f9f9U, 0x37373737U, 0xe8e8e8e8U,
667f13fc290SMatthias Ringwald   0x1c1c1c1cU, 0x75757575U, 0xdfdfdfdfU, 0x6e6e6e6eU,
668f13fc290SMatthias Ringwald   0x47474747U, 0xf1f1f1f1U, 0x1a1a1a1aU, 0x71717171U,
669f13fc290SMatthias Ringwald   0x1d1d1d1dU, 0x29292929U, 0xc5c5c5c5U, 0x89898989U,
670f13fc290SMatthias Ringwald   0x6f6f6f6fU, 0xb7b7b7b7U, 0x62626262U, 0x0e0e0e0eU,
671f13fc290SMatthias Ringwald   0xaaaaaaaaU, 0x18181818U, 0xbebebebeU, 0x1b1b1b1bU,
672f13fc290SMatthias Ringwald   0xfcfcfcfcU, 0x56565656U, 0x3e3e3e3eU, 0x4b4b4b4bU,
673f13fc290SMatthias Ringwald   0xc6c6c6c6U, 0xd2d2d2d2U, 0x79797979U, 0x20202020U,
674f13fc290SMatthias Ringwald   0x9a9a9a9aU, 0xdbdbdbdbU, 0xc0c0c0c0U, 0xfefefefeU,
675f13fc290SMatthias Ringwald   0x78787878U, 0xcdcdcdcdU, 0x5a5a5a5aU, 0xf4f4f4f4U,
676f13fc290SMatthias Ringwald   0x1f1f1f1fU, 0xddddddddU, 0xa8a8a8a8U, 0x33333333U,
677f13fc290SMatthias Ringwald   0x88888888U, 0x07070707U, 0xc7c7c7c7U, 0x31313131U,
678f13fc290SMatthias Ringwald   0xb1b1b1b1U, 0x12121212U, 0x10101010U, 0x59595959U,
679f13fc290SMatthias Ringwald   0x27272727U, 0x80808080U, 0xececececU, 0x5f5f5f5fU,
680f13fc290SMatthias Ringwald   0x60606060U, 0x51515151U, 0x7f7f7f7fU, 0xa9a9a9a9U,
681f13fc290SMatthias Ringwald   0x19191919U, 0xb5b5b5b5U, 0x4a4a4a4aU, 0x0d0d0d0dU,
682f13fc290SMatthias Ringwald   0x2d2d2d2dU, 0xe5e5e5e5U, 0x7a7a7a7aU, 0x9f9f9f9fU,
683f13fc290SMatthias Ringwald   0x93939393U, 0xc9c9c9c9U, 0x9c9c9c9cU, 0xefefefefU,
684f13fc290SMatthias Ringwald   0xa0a0a0a0U, 0xe0e0e0e0U, 0x3b3b3b3bU, 0x4d4d4d4dU,
685f13fc290SMatthias Ringwald   0xaeaeaeaeU, 0x2a2a2a2aU, 0xf5f5f5f5U, 0xb0b0b0b0U,
686f13fc290SMatthias Ringwald   0xc8c8c8c8U, 0xebebebebU, 0xbbbbbbbbU, 0x3c3c3c3cU,
687f13fc290SMatthias Ringwald   0x83838383U, 0x53535353U, 0x99999999U, 0x61616161U,
688f13fc290SMatthias Ringwald   0x17171717U, 0x2b2b2b2bU, 0x04040404U, 0x7e7e7e7eU,
689f13fc290SMatthias Ringwald   0xbabababaU, 0x77777777U, 0xd6d6d6d6U, 0x26262626U,
690f13fc290SMatthias Ringwald   0xe1e1e1e1U, 0x69696969U, 0x14141414U, 0x63636363U,
691f13fc290SMatthias Ringwald   0x55555555U, 0x21212121U, 0x0c0c0c0cU, 0x7d7d7d7dU,
692f13fc290SMatthias Ringwald };
693*58039fbfSMatthias Ringwald #endif
694f13fc290SMatthias Ringwald 
695f13fc290SMatthias Ringwald static const u32 rcon[] =
696f13fc290SMatthias Ringwald {
697f13fc290SMatthias Ringwald   0x01000000, 0x02000000, 0x04000000, 0x08000000,
698f13fc290SMatthias Ringwald   0x10000000, 0x20000000, 0x40000000, 0x80000000,
699f13fc290SMatthias Ringwald   0x1B000000, 0x36000000,
700f13fc290SMatthias Ringwald   /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */
701f13fc290SMatthias Ringwald };
702f13fc290SMatthias Ringwald 
703f13fc290SMatthias Ringwald #define GETU32(plaintext) (((u32)(plaintext)[0] << 24) ^ \
704f13fc290SMatthias Ringwald                     ((u32)(plaintext)[1] << 16) ^ \
705f13fc290SMatthias Ringwald                     ((u32)(plaintext)[2] <<  8) ^ \
706f13fc290SMatthias Ringwald                     ((u32)(plaintext)[3]))
707f13fc290SMatthias Ringwald 
708f13fc290SMatthias Ringwald #define PUTU32(ciphertext, st) { (ciphertext)[0] = (u8)((st) >> 24); \
709f13fc290SMatthias Ringwald                          (ciphertext)[1] = (u8)((st) >> 16); \
710f13fc290SMatthias Ringwald                          (ciphertext)[2] = (u8)((st) >>  8); \
711f13fc290SMatthias Ringwald                          (ciphertext)[3] = (u8)(st); }
712f13fc290SMatthias Ringwald 
713f13fc290SMatthias Ringwald /**
714f13fc290SMatthias Ringwald  * Expand the cipher key into the encryption key schedule.
715f13fc290SMatthias Ringwald  *
716f13fc290SMatthias Ringwald  * @return the number of rounds for the given cipher key size.
717f13fc290SMatthias Ringwald  */
718f13fc290SMatthias Ringwald int rijndaelSetupEncrypt(u32 *rk, const u8 *key, int keybits)
719f13fc290SMatthias Ringwald {
720f13fc290SMatthias Ringwald   int i = 0;
721f13fc290SMatthias Ringwald   u32 temp;
722f13fc290SMatthias Ringwald 
723f13fc290SMatthias Ringwald   rk[0] = GETU32(key     );
724f13fc290SMatthias Ringwald   rk[1] = GETU32(key +  4);
725f13fc290SMatthias Ringwald   rk[2] = GETU32(key +  8);
726f13fc290SMatthias Ringwald   rk[3] = GETU32(key + 12);
727f13fc290SMatthias Ringwald   if (keybits == 128)
728f13fc290SMatthias Ringwald   {
729f13fc290SMatthias Ringwald     for (;;)
730f13fc290SMatthias Ringwald     {
731f13fc290SMatthias Ringwald       temp  = rk[3];
732f13fc290SMatthias Ringwald       rk[4] = rk[0] ^
733f13fc290SMatthias Ringwald         (Te4[(temp >> 16) & 0xff] & 0xff000000) ^
734f13fc290SMatthias Ringwald         (Te4[(temp >>  8) & 0xff] & 0x00ff0000) ^
735f13fc290SMatthias Ringwald         (Te4[(temp      ) & 0xff] & 0x0000ff00) ^
736f13fc290SMatthias Ringwald         (Te4[(temp >> 24)       ] & 0x000000ff) ^
737f13fc290SMatthias Ringwald         rcon[i];
738f13fc290SMatthias Ringwald       rk[5] = rk[1] ^ rk[4];
739f13fc290SMatthias Ringwald       rk[6] = rk[2] ^ rk[5];
740f13fc290SMatthias Ringwald       rk[7] = rk[3] ^ rk[6];
741f13fc290SMatthias Ringwald       if (++i == 10)
742f13fc290SMatthias Ringwald         return 10;
743f13fc290SMatthias Ringwald       rk += 4;
744f13fc290SMatthias Ringwald     }
745f13fc290SMatthias Ringwald   }
746f13fc290SMatthias Ringwald   rk[4] = GETU32(key + 16);
747f13fc290SMatthias Ringwald   rk[5] = GETU32(key + 20);
748f13fc290SMatthias Ringwald   if (keybits == 192)
749f13fc290SMatthias Ringwald   {
750f13fc290SMatthias Ringwald     for (;;)
751f13fc290SMatthias Ringwald     {
752f13fc290SMatthias Ringwald       temp = rk[ 5];
753f13fc290SMatthias Ringwald       rk[ 6] = rk[ 0] ^
754f13fc290SMatthias Ringwald         (Te4[(temp >> 16) & 0xff] & 0xff000000) ^
755f13fc290SMatthias Ringwald         (Te4[(temp >>  8) & 0xff] & 0x00ff0000) ^
756f13fc290SMatthias Ringwald         (Te4[(temp      ) & 0xff] & 0x0000ff00) ^
757f13fc290SMatthias Ringwald         (Te4[(temp >> 24)       ] & 0x000000ff) ^
758f13fc290SMatthias Ringwald         rcon[i];
759f13fc290SMatthias Ringwald       rk[ 7] = rk[ 1] ^ rk[ 6];
760f13fc290SMatthias Ringwald       rk[ 8] = rk[ 2] ^ rk[ 7];
761f13fc290SMatthias Ringwald       rk[ 9] = rk[ 3] ^ rk[ 8];
762f13fc290SMatthias Ringwald       if (++i == 8)
763f13fc290SMatthias Ringwald         return 12;
764f13fc290SMatthias Ringwald       rk[10] = rk[ 4] ^ rk[ 9];
765f13fc290SMatthias Ringwald       rk[11] = rk[ 5] ^ rk[10];
766f13fc290SMatthias Ringwald       rk += 6;
767f13fc290SMatthias Ringwald     }
768f13fc290SMatthias Ringwald   }
769f13fc290SMatthias Ringwald   rk[6] = GETU32(key + 24);
770f13fc290SMatthias Ringwald   rk[7] = GETU32(key + 28);
771f13fc290SMatthias Ringwald   if (keybits == 256)
772f13fc290SMatthias Ringwald   {
773f13fc290SMatthias Ringwald     for (;;)
774f13fc290SMatthias Ringwald     {
775f13fc290SMatthias Ringwald       temp = rk[ 7];
776f13fc290SMatthias Ringwald       rk[ 8] = rk[ 0] ^
777f13fc290SMatthias Ringwald         (Te4[(temp >> 16) & 0xff] & 0xff000000) ^
778f13fc290SMatthias Ringwald         (Te4[(temp >>  8) & 0xff] & 0x00ff0000) ^
779f13fc290SMatthias Ringwald         (Te4[(temp      ) & 0xff] & 0x0000ff00) ^
780f13fc290SMatthias Ringwald         (Te4[(temp >> 24)       ] & 0x000000ff) ^
781f13fc290SMatthias Ringwald         rcon[i];
782f13fc290SMatthias Ringwald       rk[ 9] = rk[ 1] ^ rk[ 8];
783f13fc290SMatthias Ringwald       rk[10] = rk[ 2] ^ rk[ 9];
784f13fc290SMatthias Ringwald       rk[11] = rk[ 3] ^ rk[10];
785f13fc290SMatthias Ringwald       if (++i == 7)
786f13fc290SMatthias Ringwald         return 14;
787f13fc290SMatthias Ringwald       temp = rk[11];
788f13fc290SMatthias Ringwald       rk[12] = rk[ 4] ^
789f13fc290SMatthias Ringwald         (Te4[(temp >> 24)       ] & 0xff000000) ^
790f13fc290SMatthias Ringwald         (Te4[(temp >> 16) & 0xff] & 0x00ff0000) ^
791f13fc290SMatthias Ringwald         (Te4[(temp >>  8) & 0xff] & 0x0000ff00) ^
792f13fc290SMatthias Ringwald         (Te4[(temp      ) & 0xff] & 0x000000ff);
793f13fc290SMatthias Ringwald       rk[13] = rk[ 5] ^ rk[12];
794f13fc290SMatthias Ringwald       rk[14] = rk[ 6] ^ rk[13];
795f13fc290SMatthias Ringwald       rk[15] = rk[ 7] ^ rk[14];
796f13fc290SMatthias Ringwald       rk += 8;
797f13fc290SMatthias Ringwald     }
798f13fc290SMatthias Ringwald   }
799f13fc290SMatthias Ringwald   return 0;
800f13fc290SMatthias Ringwald }
801f13fc290SMatthias Ringwald 
802*58039fbfSMatthias Ringwald #ifdef ENABLE_RIJNDAEL_DECRYPT
803f13fc290SMatthias Ringwald /**
804f13fc290SMatthias Ringwald  * Expand the cipher key into the decryption key schedule.
805f13fc290SMatthias Ringwald  *
806f13fc290SMatthias Ringwald  * @return the number of rounds for the given cipher key size.
807f13fc290SMatthias Ringwald  */
808f13fc290SMatthias Ringwald int rijndaelSetupDecrypt(u32 *rk, const u8 *key, int keybits)
809f13fc290SMatthias Ringwald {
810f13fc290SMatthias Ringwald   int nrounds, i, j;
811f13fc290SMatthias Ringwald   u32 temp;
812f13fc290SMatthias Ringwald 
813f13fc290SMatthias Ringwald   /* expand the cipher key: */
814f13fc290SMatthias Ringwald   nrounds = rijndaelSetupEncrypt(rk, key, keybits);
815f13fc290SMatthias Ringwald   /* invert the order of the round keys: */
816f13fc290SMatthias Ringwald   for (i = 0, j = 4*nrounds; i < j; i += 4, j -= 4)
817f13fc290SMatthias Ringwald   {
818f13fc290SMatthias Ringwald     temp = rk[i    ]; rk[i    ] = rk[j    ]; rk[j    ] = temp;
819f13fc290SMatthias Ringwald     temp = rk[i + 1]; rk[i + 1] = rk[j + 1]; rk[j + 1] = temp;
820f13fc290SMatthias Ringwald     temp = rk[i + 2]; rk[i + 2] = rk[j + 2]; rk[j + 2] = temp;
821f13fc290SMatthias Ringwald     temp = rk[i + 3]; rk[i + 3] = rk[j + 3]; rk[j + 3] = temp;
822f13fc290SMatthias Ringwald   }
823f13fc290SMatthias Ringwald   /* apply the inverse MixColumn transform to all round keys but the first and the last: */
824f13fc290SMatthias Ringwald   for (i = 1; i < nrounds; i++)
825f13fc290SMatthias Ringwald   {
826f13fc290SMatthias Ringwald     rk += 4;
827f13fc290SMatthias Ringwald     rk[0] =
828f13fc290SMatthias Ringwald       Td0[Te4[(rk[0] >> 24)       ] & 0xff] ^
829f13fc290SMatthias Ringwald       Td1[Te4[(rk[0] >> 16) & 0xff] & 0xff] ^
830f13fc290SMatthias Ringwald       Td2[Te4[(rk[0] >>  8) & 0xff] & 0xff] ^
831f13fc290SMatthias Ringwald       Td3[Te4[(rk[0]      ) & 0xff] & 0xff];
832f13fc290SMatthias Ringwald     rk[1] =
833f13fc290SMatthias Ringwald       Td0[Te4[(rk[1] >> 24)       ] & 0xff] ^
834f13fc290SMatthias Ringwald       Td1[Te4[(rk[1] >> 16) & 0xff] & 0xff] ^
835f13fc290SMatthias Ringwald       Td2[Te4[(rk[1] >>  8) & 0xff] & 0xff] ^
836f13fc290SMatthias Ringwald       Td3[Te4[(rk[1]      ) & 0xff] & 0xff];
837f13fc290SMatthias Ringwald     rk[2] =
838f13fc290SMatthias Ringwald       Td0[Te4[(rk[2] >> 24)       ] & 0xff] ^
839f13fc290SMatthias Ringwald       Td1[Te4[(rk[2] >> 16) & 0xff] & 0xff] ^
840f13fc290SMatthias Ringwald       Td2[Te4[(rk[2] >>  8) & 0xff] & 0xff] ^
841f13fc290SMatthias Ringwald       Td3[Te4[(rk[2]      ) & 0xff] & 0xff];
842f13fc290SMatthias Ringwald     rk[3] =
843f13fc290SMatthias Ringwald       Td0[Te4[(rk[3] >> 24)       ] & 0xff] ^
844f13fc290SMatthias Ringwald       Td1[Te4[(rk[3] >> 16) & 0xff] & 0xff] ^
845f13fc290SMatthias Ringwald       Td2[Te4[(rk[3] >>  8) & 0xff] & 0xff] ^
846f13fc290SMatthias Ringwald       Td3[Te4[(rk[3]      ) & 0xff] & 0xff];
847f13fc290SMatthias Ringwald   }
848f13fc290SMatthias Ringwald   return nrounds;
849f13fc290SMatthias Ringwald }
850*58039fbfSMatthias Ringwald #endif
851f13fc290SMatthias Ringwald 
852f13fc290SMatthias Ringwald void rijndaelEncrypt(const u32 *rk, int nrounds, const u8 plaintext[16],
853f13fc290SMatthias Ringwald   u8 ciphertext[16])
854f13fc290SMatthias Ringwald {
855f13fc290SMatthias Ringwald 
856f13fc290SMatthias Ringwald   u32 s0, s1, s2, s3, t0, t1, t2, t3;
857f13fc290SMatthias Ringwald   #ifndef FULL_UNROLL
858f13fc290SMatthias Ringwald     int r;
859f13fc290SMatthias Ringwald   #endif /* ?FULL_UNROLL */
860f13fc290SMatthias Ringwald   /*
861f13fc290SMatthias Ringwald    * map byte array block to cipher state
862f13fc290SMatthias Ringwald    * and add initial round key:
863f13fc290SMatthias Ringwald   */
864f13fc290SMatthias Ringwald   s0 = GETU32(plaintext     ) ^ rk[0];
865f13fc290SMatthias Ringwald   s1 = GETU32(plaintext +  4) ^ rk[1];
866f13fc290SMatthias Ringwald   s2 = GETU32(plaintext +  8) ^ rk[2];
867f13fc290SMatthias Ringwald   s3 = GETU32(plaintext + 12) ^ rk[3];
868f13fc290SMatthias Ringwald   #ifdef FULL_UNROLL
869f13fc290SMatthias Ringwald     /* round 1: */
870f13fc290SMatthias Ringwald     t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[ 4];
871f13fc290SMatthias Ringwald     t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[ 5];
872f13fc290SMatthias Ringwald     t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[ 6];
873f13fc290SMatthias Ringwald     t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[ 7];
874f13fc290SMatthias Ringwald     /* round 2: */
875f13fc290SMatthias Ringwald     s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[ 8];
876f13fc290SMatthias Ringwald     s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[ 9];
877f13fc290SMatthias Ringwald     s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[10];
878f13fc290SMatthias Ringwald     s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[11];
879f13fc290SMatthias Ringwald     /* round 3: */
880f13fc290SMatthias Ringwald     t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[12];
881f13fc290SMatthias Ringwald     t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[13];
882f13fc290SMatthias Ringwald     t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[14];
883f13fc290SMatthias Ringwald     t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[15];
884f13fc290SMatthias Ringwald     /* round 4: */
885f13fc290SMatthias Ringwald     s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[16];
886f13fc290SMatthias Ringwald     s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[17];
887f13fc290SMatthias Ringwald     s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[18];
888f13fc290SMatthias Ringwald     s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[19];
889f13fc290SMatthias Ringwald     /* round 5: */
890f13fc290SMatthias Ringwald     t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[20];
891f13fc290SMatthias Ringwald     t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[21];
892f13fc290SMatthias Ringwald     t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[22];
893f13fc290SMatthias Ringwald     t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[23];
894f13fc290SMatthias Ringwald     /* round 6: */
895f13fc290SMatthias Ringwald     s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[24];
896f13fc290SMatthias Ringwald     s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[25];
897f13fc290SMatthias Ringwald     s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[26];
898f13fc290SMatthias Ringwald     s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[27];
899f13fc290SMatthias Ringwald     /* round 7: */
900f13fc290SMatthias Ringwald     t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[28];
901f13fc290SMatthias Ringwald     t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[29];
902f13fc290SMatthias Ringwald     t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[30];
903f13fc290SMatthias Ringwald     t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[31];
904f13fc290SMatthias Ringwald     /* round 8: */
905f13fc290SMatthias Ringwald     s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[32];
906f13fc290SMatthias Ringwald     s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[33];
907f13fc290SMatthias Ringwald     s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[34];
908f13fc290SMatthias Ringwald     s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[35];
909f13fc290SMatthias Ringwald     /* round 9: */
910f13fc290SMatthias Ringwald     t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[36];
911f13fc290SMatthias Ringwald     t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[37];
912f13fc290SMatthias Ringwald     t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[38];
913f13fc290SMatthias Ringwald     t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[39];
914f13fc290SMatthias Ringwald     if (nrounds > 10)
915f13fc290SMatthias Ringwald     {
916f13fc290SMatthias Ringwald       /* round 10: */
917f13fc290SMatthias Ringwald       s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[40];
918f13fc290SMatthias Ringwald       s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[41];
919f13fc290SMatthias Ringwald       s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[42];
920f13fc290SMatthias Ringwald       s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[43];
921f13fc290SMatthias Ringwald       /* round 11: */
922f13fc290SMatthias Ringwald       t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[44];
923f13fc290SMatthias Ringwald       t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[45];
924f13fc290SMatthias Ringwald       t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[46];
925f13fc290SMatthias Ringwald       t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[47];
926f13fc290SMatthias Ringwald       if (nrounds > 12)
927f13fc290SMatthias Ringwald       {
928f13fc290SMatthias Ringwald         /* round 12: */
929f13fc290SMatthias Ringwald         s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[48];
930f13fc290SMatthias Ringwald         s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[49];
931f13fc290SMatthias Ringwald         s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[50];
932f13fc290SMatthias Ringwald         s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[51];
933f13fc290SMatthias Ringwald         /* round 13: */
934f13fc290SMatthias Ringwald         t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[52];
935f13fc290SMatthias Ringwald         t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[53];
936f13fc290SMatthias Ringwald         t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[54];
937f13fc290SMatthias Ringwald         t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[55];
938f13fc290SMatthias Ringwald       }
939f13fc290SMatthias Ringwald     }
940f13fc290SMatthias Ringwald     rk += nrounds << 2;
941f13fc290SMatthias Ringwald   #else  /* !FULL_UNROLL */
942f13fc290SMatthias Ringwald     /*
943f13fc290SMatthias Ringwald     * nrounds - 1 full rounds:
944f13fc290SMatthias Ringwald     */
945f13fc290SMatthias Ringwald     r = nrounds >> 1;
946f13fc290SMatthias Ringwald     for (;;)
947f13fc290SMatthias Ringwald     {
948f13fc290SMatthias Ringwald       t0 =
949f13fc290SMatthias Ringwald         Te0[(s0 >> 24)       ] ^
950f13fc290SMatthias Ringwald         Te1[(s1 >> 16) & 0xff] ^
951f13fc290SMatthias Ringwald         Te2[(s2 >>  8) & 0xff] ^
952f13fc290SMatthias Ringwald         Te3[(s3      ) & 0xff] ^
953f13fc290SMatthias Ringwald         rk[4];
954f13fc290SMatthias Ringwald       t1 =
955f13fc290SMatthias Ringwald         Te0[(s1 >> 24)       ] ^
956f13fc290SMatthias Ringwald         Te1[(s2 >> 16) & 0xff] ^
957f13fc290SMatthias Ringwald         Te2[(s3 >>  8) & 0xff] ^
958f13fc290SMatthias Ringwald         Te3[(s0      ) & 0xff] ^
959f13fc290SMatthias Ringwald         rk[5];
960f13fc290SMatthias Ringwald       t2 =
961f13fc290SMatthias Ringwald         Te0[(s2 >> 24)       ] ^
962f13fc290SMatthias Ringwald         Te1[(s3 >> 16) & 0xff] ^
963f13fc290SMatthias Ringwald         Te2[(s0 >>  8) & 0xff] ^
964f13fc290SMatthias Ringwald         Te3[(s1      ) & 0xff] ^
965f13fc290SMatthias Ringwald         rk[6];
966f13fc290SMatthias Ringwald       t3 =
967f13fc290SMatthias Ringwald         Te0[(s3 >> 24)       ] ^
968f13fc290SMatthias Ringwald         Te1[(s0 >> 16) & 0xff] ^
969f13fc290SMatthias Ringwald         Te2[(s1 >>  8) & 0xff] ^
970f13fc290SMatthias Ringwald         Te3[(s2      ) & 0xff] ^
971f13fc290SMatthias Ringwald         rk[7];
972f13fc290SMatthias Ringwald         rk += 8;
973f13fc290SMatthias Ringwald         if (--r == 0)
974f13fc290SMatthias Ringwald             break;
975f13fc290SMatthias Ringwald       s0 =
976f13fc290SMatthias Ringwald         Te0[(t0 >> 24)       ] ^
977f13fc290SMatthias Ringwald         Te1[(t1 >> 16) & 0xff] ^
978f13fc290SMatthias Ringwald         Te2[(t2 >>  8) & 0xff] ^
979f13fc290SMatthias Ringwald         Te3[(t3      ) & 0xff] ^
980f13fc290SMatthias Ringwald         rk[0];
981f13fc290SMatthias Ringwald       s1 =
982f13fc290SMatthias Ringwald         Te0[(t1 >> 24)       ] ^
983f13fc290SMatthias Ringwald         Te1[(t2 >> 16) & 0xff] ^
984f13fc290SMatthias Ringwald         Te2[(t3 >>  8) & 0xff] ^
985f13fc290SMatthias Ringwald         Te3[(t0      ) & 0xff] ^
986f13fc290SMatthias Ringwald         rk[1];
987f13fc290SMatthias Ringwald       s2 =
988f13fc290SMatthias Ringwald         Te0[(t2 >> 24)       ] ^
989f13fc290SMatthias Ringwald         Te1[(t3 >> 16) & 0xff] ^
990f13fc290SMatthias Ringwald         Te2[(t0 >>  8) & 0xff] ^
991f13fc290SMatthias Ringwald         Te3[(t1      ) & 0xff] ^
992f13fc290SMatthias Ringwald         rk[2];
993f13fc290SMatthias Ringwald       s3 =
994f13fc290SMatthias Ringwald         Te0[(t3 >> 24)       ] ^
995f13fc290SMatthias Ringwald         Te1[(t0 >> 16) & 0xff] ^
996f13fc290SMatthias Ringwald         Te2[(t1 >>  8) & 0xff] ^
997f13fc290SMatthias Ringwald         Te3[(t2      ) & 0xff] ^
998f13fc290SMatthias Ringwald         rk[3];
999f13fc290SMatthias Ringwald      }
1000f13fc290SMatthias Ringwald  #endif /* ?FULL_UNROLL */
1001f13fc290SMatthias Ringwald   /*
1002f13fc290SMatthias Ringwald   * apply last round and
1003f13fc290SMatthias Ringwald   * map cipher state to byte array block:
1004f13fc290SMatthias Ringwald   */
1005f13fc290SMatthias Ringwald   s0 =
1006f13fc290SMatthias Ringwald     (Te4[(t0 >> 24)       ] & 0xff000000) ^
1007f13fc290SMatthias Ringwald     (Te4[(t1 >> 16) & 0xff] & 0x00ff0000) ^
1008f13fc290SMatthias Ringwald     (Te4[(t2 >>  8) & 0xff] & 0x0000ff00) ^
1009f13fc290SMatthias Ringwald     (Te4[(t3      ) & 0xff] & 0x000000ff) ^
1010f13fc290SMatthias Ringwald     rk[0];
1011f13fc290SMatthias Ringwald   PUTU32(ciphertext     , s0);
1012f13fc290SMatthias Ringwald   s1 =
1013f13fc290SMatthias Ringwald     (Te4[(t1 >> 24)       ] & 0xff000000) ^
1014f13fc290SMatthias Ringwald     (Te4[(t2 >> 16) & 0xff] & 0x00ff0000) ^
1015f13fc290SMatthias Ringwald     (Te4[(t3 >>  8) & 0xff] & 0x0000ff00) ^
1016f13fc290SMatthias Ringwald     (Te4[(t0      ) & 0xff] & 0x000000ff) ^
1017f13fc290SMatthias Ringwald     rk[1];
1018f13fc290SMatthias Ringwald   PUTU32(ciphertext +  4, s1);
1019f13fc290SMatthias Ringwald   s2 =
1020f13fc290SMatthias Ringwald     (Te4[(t2 >> 24)       ] & 0xff000000) ^
1021f13fc290SMatthias Ringwald     (Te4[(t3 >> 16) & 0xff] & 0x00ff0000) ^
1022f13fc290SMatthias Ringwald     (Te4[(t0 >>  8) & 0xff] & 0x0000ff00) ^
1023f13fc290SMatthias Ringwald     (Te4[(t1      ) & 0xff] & 0x000000ff) ^
1024f13fc290SMatthias Ringwald     rk[2];
1025f13fc290SMatthias Ringwald   PUTU32(ciphertext +  8, s2);
1026f13fc290SMatthias Ringwald   s3 =
1027f13fc290SMatthias Ringwald     (Te4[(t3 >> 24)       ] & 0xff000000) ^
1028f13fc290SMatthias Ringwald     (Te4[(t0 >> 16) & 0xff] & 0x00ff0000) ^
1029f13fc290SMatthias Ringwald     (Te4[(t1 >>  8) & 0xff] & 0x0000ff00) ^
1030f13fc290SMatthias Ringwald     (Te4[(t2      ) & 0xff] & 0x000000ff) ^
1031f13fc290SMatthias Ringwald     rk[3];
1032f13fc290SMatthias Ringwald   PUTU32(ciphertext + 12, s3);
1033f13fc290SMatthias Ringwald 
1034f13fc290SMatthias Ringwald 
1035f13fc290SMatthias Ringwald }
1036f13fc290SMatthias Ringwald 
1037*58039fbfSMatthias Ringwald #ifdef ENABLE_RIJNDAEL_DECRYPT
1038f13fc290SMatthias Ringwald void rijndaelDecrypt(const u32 *rk, int nrounds, const u8 ciphertext[16],
1039f13fc290SMatthias Ringwald   u8 plaintext[16])
1040f13fc290SMatthias Ringwald {
1041f13fc290SMatthias Ringwald 
1042f13fc290SMatthias Ringwald 
1043f13fc290SMatthias Ringwald 
1044f13fc290SMatthias Ringwald u32 s0, s1, s2, s3, t0, t1, t2, t3;
1045f13fc290SMatthias Ringwald   #ifndef FULL_UNROLL
1046f13fc290SMatthias Ringwald     int r;
1047f13fc290SMatthias Ringwald   #endif /* ?FULL_UNROLL */
1048f13fc290SMatthias Ringwald 
1049f13fc290SMatthias Ringwald   /*
1050f13fc290SMatthias Ringwald   * map byte array block to cipher state
1051f13fc290SMatthias Ringwald   * and add initial round key:
1052f13fc290SMatthias Ringwald   */
1053f13fc290SMatthias Ringwald     s0 = GETU32(ciphertext     ) ^ rk[0];
1054f13fc290SMatthias Ringwald     s1 = GETU32(ciphertext +  4) ^ rk[1];
1055f13fc290SMatthias Ringwald     s2 = GETU32(ciphertext +  8) ^ rk[2];
1056f13fc290SMatthias Ringwald     s3 = GETU32(ciphertext + 12) ^ rk[3];
1057f13fc290SMatthias Ringwald   #ifdef FULL_UNROLL
1058f13fc290SMatthias Ringwald     /* round 1: */
1059f13fc290SMatthias Ringwald     t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[ 4];
1060f13fc290SMatthias Ringwald     t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[ 5];
1061f13fc290SMatthias Ringwald     t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[ 6];
1062f13fc290SMatthias Ringwald     t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[ 7];
1063f13fc290SMatthias Ringwald     /* round 2: */
1064f13fc290SMatthias Ringwald     s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >>  8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[ 8];
1065f13fc290SMatthias Ringwald     s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >>  8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[ 9];
1066f13fc290SMatthias Ringwald     s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >>  8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[10];
1067f13fc290SMatthias Ringwald     s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >>  8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[11];
1068f13fc290SMatthias Ringwald     /* round 3: */
1069f13fc290SMatthias Ringwald     t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[12];
1070f13fc290SMatthias Ringwald     t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[13];
1071f13fc290SMatthias Ringwald     t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[14];
1072f13fc290SMatthias Ringwald     t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[15];
1073f13fc290SMatthias Ringwald     /* round 4: */
1074f13fc290SMatthias Ringwald     s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >>  8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[16];
1075f13fc290SMatthias Ringwald     s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >>  8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[17];
1076f13fc290SMatthias Ringwald     s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >>  8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[18];
1077f13fc290SMatthias Ringwald     s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >>  8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[19];
1078f13fc290SMatthias Ringwald     /* round 5: */
1079f13fc290SMatthias Ringwald     t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[20];
1080f13fc290SMatthias Ringwald     t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[21];
1081f13fc290SMatthias Ringwald     t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[22];
1082f13fc290SMatthias Ringwald     t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[23];
1083f13fc290SMatthias Ringwald     /* round 6: */
1084f13fc290SMatthias Ringwald     s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >>  8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[24];
1085f13fc290SMatthias Ringwald     s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >>  8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[25];
1086f13fc290SMatthias Ringwald     s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >>  8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[26];
1087f13fc290SMatthias Ringwald     s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >>  8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[27];
1088f13fc290SMatthias Ringwald     /* round 7: */
1089f13fc290SMatthias Ringwald     t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[28];
1090f13fc290SMatthias Ringwald     t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[29];
1091f13fc290SMatthias Ringwald     t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[30];
1092f13fc290SMatthias Ringwald     t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[31];
1093f13fc290SMatthias Ringwald     /* round 8: */
1094f13fc290SMatthias Ringwald     s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >>  8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[32];
1095f13fc290SMatthias Ringwald     s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >>  8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[33];
1096f13fc290SMatthias Ringwald     s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >>  8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[34];
1097f13fc290SMatthias Ringwald     s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >>  8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[35];
1098f13fc290SMatthias Ringwald     /* round 9: */
1099f13fc290SMatthias Ringwald     t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[36];
1100f13fc290SMatthias Ringwald     t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[37];
1101f13fc290SMatthias Ringwald     t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[38];
1102f13fc290SMatthias Ringwald     t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[39];
1103f13fc290SMatthias Ringwald     if (nrounds > 10)
1104f13fc290SMatthias Ringwald     {
1105f13fc290SMatthias Ringwald       /* round 10: */
1106f13fc290SMatthias Ringwald       s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >>  8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[40];
1107f13fc290SMatthias Ringwald       s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >>  8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[41];
1108f13fc290SMatthias Ringwald       s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >>  8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[42];
1109f13fc290SMatthias Ringwald       s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >>  8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[43];
1110f13fc290SMatthias Ringwald       /* round 11: */
1111f13fc290SMatthias Ringwald       t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[44];
1112f13fc290SMatthias Ringwald       t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[45];
1113f13fc290SMatthias Ringwald       t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[46];
1114f13fc290SMatthias Ringwald       t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[47];
1115f13fc290SMatthias Ringwald       if (nrounds > 12)
1116f13fc290SMatthias Ringwald       {
1117f13fc290SMatthias Ringwald         /* round 12: */
1118f13fc290SMatthias Ringwald         s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >>  8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[48];
1119f13fc290SMatthias Ringwald         s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >>  8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[49];
1120f13fc290SMatthias Ringwald         s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >>  8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[50];
1121f13fc290SMatthias Ringwald         s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >>  8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[51];
1122f13fc290SMatthias Ringwald         /* round 13: */
1123f13fc290SMatthias Ringwald         t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[52];
1124f13fc290SMatthias Ringwald         t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[53];
1125f13fc290SMatthias Ringwald         t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[54];
1126f13fc290SMatthias Ringwald         t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[55];
1127f13fc290SMatthias Ringwald       }
1128f13fc290SMatthias Ringwald     }
1129f13fc290SMatthias Ringwald     rk += nrounds << 2;
1130f13fc290SMatthias Ringwald   #else  /* !FULL_UNROLL */
1131f13fc290SMatthias Ringwald     /*
1132f13fc290SMatthias Ringwald     * nrounds - 1 full rounds:
1133f13fc290SMatthias Ringwald     */
1134f13fc290SMatthias Ringwald     r = nrounds >> 1;
1135f13fc290SMatthias Ringwald     for (;;)
1136f13fc290SMatthias Ringwald     {
1137f13fc290SMatthias Ringwald       t0 =
1138f13fc290SMatthias Ringwald         Td0[(s0 >> 24)       ] ^
1139f13fc290SMatthias Ringwald         Td1[(s3 >> 16) & 0xff] ^
1140f13fc290SMatthias Ringwald         Td2[(s2 >>  8) & 0xff] ^
1141f13fc290SMatthias Ringwald         Td3[(s1      ) & 0xff] ^
1142f13fc290SMatthias Ringwald         rk[4];
1143f13fc290SMatthias Ringwald       t1 =
1144f13fc290SMatthias Ringwald         Td0[(s1 >> 24)       ] ^
1145f13fc290SMatthias Ringwald         Td1[(s0 >> 16) & 0xff] ^
1146f13fc290SMatthias Ringwald         Td2[(s3 >>  8) & 0xff] ^
1147f13fc290SMatthias Ringwald         Td3[(s2      ) & 0xff] ^
1148f13fc290SMatthias Ringwald         rk[5];
1149f13fc290SMatthias Ringwald       t2 =
1150f13fc290SMatthias Ringwald         Td0[(s2 >> 24)       ] ^
1151f13fc290SMatthias Ringwald         Td1[(s1 >> 16) & 0xff] ^
1152f13fc290SMatthias Ringwald         Td2[(s0 >>  8) & 0xff] ^
1153f13fc290SMatthias Ringwald         Td3[(s3      ) & 0xff] ^
1154f13fc290SMatthias Ringwald         rk[6];
1155f13fc290SMatthias Ringwald       t3 =
1156f13fc290SMatthias Ringwald         Td0[(s3 >> 24)       ] ^
1157f13fc290SMatthias Ringwald         Td1[(s2 >> 16) & 0xff] ^
1158f13fc290SMatthias Ringwald         Td2[(s1 >>  8) & 0xff] ^
1159f13fc290SMatthias Ringwald         Td3[(s0      ) & 0xff] ^
1160f13fc290SMatthias Ringwald         rk[7];
1161f13fc290SMatthias Ringwald       rk += 8;
1162f13fc290SMatthias Ringwald       if (--r == 0)
1163f13fc290SMatthias Ringwald           break;
1164f13fc290SMatthias Ringwald       s0 =
1165f13fc290SMatthias Ringwald         Td0[(t0 >> 24)       ] ^
1166f13fc290SMatthias Ringwald         Td1[(t3 >> 16) & 0xff] ^
1167f13fc290SMatthias Ringwald         Td2[(t2 >>  8) & 0xff] ^
1168f13fc290SMatthias Ringwald         Td3[(t1      ) & 0xff] ^
1169f13fc290SMatthias Ringwald         rk[0];
1170f13fc290SMatthias Ringwald       s1 =
1171f13fc290SMatthias Ringwald         Td0[(t1 >> 24)       ] ^
1172f13fc290SMatthias Ringwald         Td1[(t0 >> 16) & 0xff] ^
1173f13fc290SMatthias Ringwald         Td2[(t3 >>  8) & 0xff] ^
1174f13fc290SMatthias Ringwald         Td3[(t2      ) & 0xff] ^
1175f13fc290SMatthias Ringwald         rk[1];
1176f13fc290SMatthias Ringwald       s2 =
1177f13fc290SMatthias Ringwald         Td0[(t2 >> 24)       ] ^
1178f13fc290SMatthias Ringwald         Td1[(t1 >> 16) & 0xff] ^
1179f13fc290SMatthias Ringwald         Td2[(t0 >>  8) & 0xff] ^
1180f13fc290SMatthias Ringwald         Td3[(t3      ) & 0xff] ^
1181f13fc290SMatthias Ringwald         rk[2];
1182f13fc290SMatthias Ringwald       s3 =
1183f13fc290SMatthias Ringwald         Td0[(t3 >> 24)       ] ^
1184f13fc290SMatthias Ringwald         Td1[(t2 >> 16) & 0xff] ^
1185f13fc290SMatthias Ringwald         Td2[(t1 >>  8) & 0xff] ^
1186f13fc290SMatthias Ringwald         Td3[(t0      ) & 0xff] ^
1187f13fc290SMatthias Ringwald         rk[3];
1188f13fc290SMatthias Ringwald     }
1189f13fc290SMatthias Ringwald   #endif /* ?FULL_UNROLL */
1190f13fc290SMatthias Ringwald   /*
1191f13fc290SMatthias Ringwald   * apply last round and
1192f13fc290SMatthias Ringwald   * map cipher state to byte array block:
1193f13fc290SMatthias Ringwald   */
1194f13fc290SMatthias Ringwald   s0 =
1195f13fc290SMatthias Ringwald     (Td4[(t0 >> 24)       ] & 0xff000000) ^
1196f13fc290SMatthias Ringwald     (Td4[(t3 >> 16) & 0xff] & 0x00ff0000) ^
1197f13fc290SMatthias Ringwald     (Td4[(t2 >>  8) & 0xff] & 0x0000ff00) ^
1198f13fc290SMatthias Ringwald     (Td4[(t1      ) & 0xff] & 0x000000ff) ^
1199f13fc290SMatthias Ringwald     rk[0];
1200f13fc290SMatthias Ringwald   PUTU32(plaintext     , s0);
1201f13fc290SMatthias Ringwald   s1 =
1202f13fc290SMatthias Ringwald     (Td4[(t1 >> 24)       ] & 0xff000000) ^
1203f13fc290SMatthias Ringwald     (Td4[(t0 >> 16) & 0xff] & 0x00ff0000) ^
1204f13fc290SMatthias Ringwald     (Td4[(t3 >>  8) & 0xff] & 0x0000ff00) ^
1205f13fc290SMatthias Ringwald     (Td4[(t2      ) & 0xff] & 0x000000ff) ^
1206f13fc290SMatthias Ringwald     rk[1];
1207f13fc290SMatthias Ringwald   PUTU32(plaintext +  4, s1);
1208f13fc290SMatthias Ringwald   s2 =
1209f13fc290SMatthias Ringwald     (Td4[(t2 >> 24)       ] & 0xff000000) ^
1210f13fc290SMatthias Ringwald     (Td4[(t1 >> 16) & 0xff] & 0x00ff0000) ^
1211f13fc290SMatthias Ringwald     (Td4[(t0 >>  8) & 0xff] & 0x0000ff00) ^
1212f13fc290SMatthias Ringwald     (Td4[(t3      ) & 0xff] & 0x000000ff) ^
1213f13fc290SMatthias Ringwald     rk[2];
1214f13fc290SMatthias Ringwald   PUTU32(plaintext +  8, s2);
1215f13fc290SMatthias Ringwald   s3 =
1216f13fc290SMatthias Ringwald     (Td4[(t3 >> 24)       ] & 0xff000000) ^
1217f13fc290SMatthias Ringwald     (Td4[(t2 >> 16) & 0xff] & 0x00ff0000) ^
1218f13fc290SMatthias Ringwald     (Td4[(t1 >>  8) & 0xff] & 0x0000ff00) ^
1219f13fc290SMatthias Ringwald     (Td4[(t0      ) & 0xff] & 0x000000ff) ^
1220f13fc290SMatthias Ringwald     rk[3];
1221f13fc290SMatthias Ringwald 
1222f13fc290SMatthias Ringwald 	PUTU32(plaintext + 12, s3);
1223f13fc290SMatthias Ringwald 
1224f13fc290SMatthias Ringwald 
1225f13fc290SMatthias Ringwald }
1226*58039fbfSMatthias Ringwald #endif