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
35358039fbfSMatthias 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 };
69358039fbfSMatthias Ringwald #endif
694f13fc290SMatthias Ringwald
695f13fc290SMatthias Ringwald static const u32 rcon[] =
696f13fc290SMatthias Ringwald {
6975ce1359eSMatthias Ringwald 0x01000000U, 0x02000000U, 0x04000000U, 0x08000000U,
6985ce1359eSMatthias Ringwald 0x10000000U, 0x20000000U, 0x40000000U, 0x80000000U,
6995ce1359eSMatthias Ringwald 0x1B000000U, 0x36000000U,
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 */
rijndaelSetupEncrypt(uint32_t * rk,const uint8_t * key,int keybits)718*b45b7749SMilanka Ringwald int rijndaelSetupEncrypt(uint32_t *rk, const uint8_t *key, int keybits)
719f13fc290SMatthias Ringwald {
72041f9be70SMatthias Ringwald u32 * rk_ = rk;
72141f9be70SMatthias Ringwald
722cfd54eb7SMatthias Ringwald int rounds = 0;
723f13fc290SMatthias Ringwald int i = 0;
724f13fc290SMatthias Ringwald u32 temp;
725f13fc290SMatthias Ringwald
72641f9be70SMatthias Ringwald rk_[0] = GETU32(key );
72741f9be70SMatthias Ringwald rk_[1] = GETU32(key + 4);
72841f9be70SMatthias Ringwald rk_[2] = GETU32(key + 8);
72941f9be70SMatthias Ringwald rk_[3] = GETU32(key + 12);
730f13fc290SMatthias Ringwald if (keybits == 128)
731f13fc290SMatthias Ringwald {
732f13fc290SMatthias Ringwald for (;;)
733f13fc290SMatthias Ringwald {
73441f9be70SMatthias Ringwald temp = rk_[3];
73541f9be70SMatthias Ringwald rk_[4] = rk_[0] ^
736f13fc290SMatthias Ringwald (Te4[(temp >> 16) & 0xff] & 0xff000000) ^
737f13fc290SMatthias Ringwald (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^
738f13fc290SMatthias Ringwald (Te4[(temp ) & 0xff] & 0x0000ff00) ^
739f13fc290SMatthias Ringwald (Te4[(temp >> 24) ] & 0x000000ff) ^
740f13fc290SMatthias Ringwald rcon[i];
74141f9be70SMatthias Ringwald rk_[5] = rk_[1] ^ rk_[4];
74241f9be70SMatthias Ringwald rk_[6] = rk_[2] ^ rk_[5];
74341f9be70SMatthias Ringwald rk_[7] = rk_[3] ^ rk_[6];
744cfd54eb7SMatthias Ringwald if (++i == 10) {
745cfd54eb7SMatthias Ringwald rounds = 10;
746cfd54eb7SMatthias Ringwald break;
747cfd54eb7SMatthias Ringwald }
74841f9be70SMatthias Ringwald rk_ += 4;
749f13fc290SMatthias Ringwald }
750f13fc290SMatthias Ringwald }
751cfd54eb7SMatthias Ringwald
752cfd54eb7SMatthias Ringwald #if defined(ENABLE_RIJNDAEL_192) || defined (ENABLE_RIJNDAEL_256)
753cfd54eb7SMatthias Ringwald
75441f9be70SMatthias Ringwald rk_[4] = GETU32(key + 16);
75541f9be70SMatthias Ringwald rk_[5] = GETU32(key + 20);
756f13fc290SMatthias Ringwald if (keybits == 192)
757f13fc290SMatthias Ringwald {
758f13fc290SMatthias Ringwald for (;;)
759f13fc290SMatthias Ringwald {
76041f9be70SMatthias Ringwald temp = rk_[ 5];
76141f9be70SMatthias Ringwald rk_[ 6] = rk_[ 0] ^
762f13fc290SMatthias Ringwald (Te4[(temp >> 16) & 0xff] & 0xff000000) ^
763f13fc290SMatthias Ringwald (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^
764f13fc290SMatthias Ringwald (Te4[(temp ) & 0xff] & 0x0000ff00) ^
765f13fc290SMatthias Ringwald (Te4[(temp >> 24) ] & 0x000000ff) ^
766f13fc290SMatthias Ringwald rcon[i];
76741f9be70SMatthias Ringwald rk_[ 7] = rk_[ 1] ^ rk_[ 6];
76841f9be70SMatthias Ringwald rk_[ 8] = rk_[ 2] ^ rk_[ 7];
76941f9be70SMatthias Ringwald rk_[ 9] = rk_[ 3] ^ rk_[ 8];
770cfd54eb7SMatthias Ringwald if (++i == 8){
771cfd54eb7SMatthias Ringwald rounds = 12;
772cfd54eb7SMatthias Ringwald }
77341f9be70SMatthias Ringwald rk_[10] = rk_[ 4] ^ rk_[ 9];
77441f9be70SMatthias Ringwald rk_[11] = rk_[ 5] ^ rk_[10];
77541f9be70SMatthias Ringwald rk_ += 6;
776f13fc290SMatthias Ringwald }
777f13fc290SMatthias Ringwald }
778cfd54eb7SMatthias Ringwald #endif
779cfd54eb7SMatthias Ringwald
780cfd54eb7SMatthias Ringwald #ifdef ENABLE_RIJNDAEL_256
78141f9be70SMatthias Ringwald rk_[6] = GETU32(key + 24);
78241f9be70SMatthias Ringwald rk_[7] = GETU32(key + 28);
783f13fc290SMatthias Ringwald if (keybits == 256)
784f13fc290SMatthias Ringwald {
785f13fc290SMatthias Ringwald for (;;)
786f13fc290SMatthias Ringwald {
78741f9be70SMatthias Ringwald temp = rk_[ 7];
78841f9be70SMatthias Ringwald rk_[ 8] = rk_[ 0] ^
789f13fc290SMatthias Ringwald (Te4[(temp >> 16) & 0xff] & 0xff000000) ^
790f13fc290SMatthias Ringwald (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^
791f13fc290SMatthias Ringwald (Te4[(temp ) & 0xff] & 0x0000ff00) ^
792f13fc290SMatthias Ringwald (Te4[(temp >> 24) ] & 0x000000ff) ^
793f13fc290SMatthias Ringwald rcon[i];
79441f9be70SMatthias Ringwald rk_[ 9] = rk_[ 1] ^ rk_[ 8];
79541f9be70SMatthias Ringwald rk_[10] = rk_[ 2] ^ rk_[ 9];
79641f9be70SMatthias Ringwald rk_[11] = rk_[ 3] ^ rk_[10];
797cfd54eb7SMatthias Ringwald if (++i == 7){
798cfd54eb7SMatthias Ringwald rounds = 14;
799cfd54eb7SMatthias Ringwald break;
800cfd54eb7SMatthias Ringwald }
80141f9be70SMatthias Ringwald temp = rk_[11];
80241f9be70SMatthias Ringwald rk_[12] = rk_[ 4] ^
803f13fc290SMatthias Ringwald (Te4[(temp >> 24) ] & 0xff000000) ^
804f13fc290SMatthias Ringwald (Te4[(temp >> 16) & 0xff] & 0x00ff0000) ^
805f13fc290SMatthias Ringwald (Te4[(temp >> 8) & 0xff] & 0x0000ff00) ^
806f13fc290SMatthias Ringwald (Te4[(temp ) & 0xff] & 0x000000ff);
80741f9be70SMatthias Ringwald rk_[13] = rk_[ 5] ^ rk_[12];
80841f9be70SMatthias Ringwald rk_[14] = rk_[ 6] ^ rk_[13];
80941f9be70SMatthias Ringwald rk_[15] = rk_[ 7] ^ rk_[14];
81041f9be70SMatthias Ringwald rk_ += 8;
811f13fc290SMatthias Ringwald }
812f13fc290SMatthias Ringwald }
813cfd54eb7SMatthias Ringwald #endif
814cfd54eb7SMatthias Ringwald return rounds;
815f13fc290SMatthias Ringwald }
816f13fc290SMatthias Ringwald
81758039fbfSMatthias Ringwald #ifdef ENABLE_RIJNDAEL_DECRYPT
818f13fc290SMatthias Ringwald /**
819f13fc290SMatthias Ringwald * Expand the cipher key into the decryption key schedule.
820f13fc290SMatthias Ringwald *
821f13fc290SMatthias Ringwald * @return the number of rounds for the given cipher key size.
822f13fc290SMatthias Ringwald */
rijndaelSetupDecrypt(uint32_t * rk,const uint8_t * key,int keybits)823*b45b7749SMilanka Ringwald int rijndaelSetupDecrypt(uint32_t *rk, const uint8_t *key, int keybits)
824f13fc290SMatthias Ringwald {
82541f9be70SMatthias Ringwald u32 * rk_ = rk;
826f13fc290SMatthias Ringwald int nrounds, i, j;
827f13fc290SMatthias Ringwald u32 temp;
828f13fc290SMatthias Ringwald
829f13fc290SMatthias Ringwald /* expand the cipher key: */
83041f9be70SMatthias Ringwald nrounds = rijndaelSetupEncrypt(rk_, key, keybits);
831f13fc290SMatthias Ringwald /* invert the order of the round keys: */
832f13fc290SMatthias Ringwald for (i = 0, j = 4*nrounds; i < j; i += 4, j -= 4)
833f13fc290SMatthias Ringwald {
83441f9be70SMatthias Ringwald temp = rk_[i ]; rk_[i ] = rk_[j ]; rk_[j ] = temp;
83541f9be70SMatthias Ringwald temp = rk_[i + 1]; rk_[i + 1] = rk_[j + 1]; rk_[j + 1] = temp;
83641f9be70SMatthias Ringwald temp = rk_[i + 2]; rk_[i + 2] = rk_[j + 2]; rk_[j + 2] = temp;
83741f9be70SMatthias Ringwald temp = rk_[i + 3]; rk_[i + 3] = rk_[j + 3]; rk_[j + 3] = temp;
838f13fc290SMatthias Ringwald }
839f13fc290SMatthias Ringwald /* apply the inverse MixColumn transform to all round keys but the first and the last: */
840f13fc290SMatthias Ringwald for (i = 1; i < nrounds; i++)
841f13fc290SMatthias Ringwald {
84241f9be70SMatthias Ringwald rk_ += 4;
84341f9be70SMatthias Ringwald rk_[0] =
84441f9be70SMatthias Ringwald Td0[Te4[(rk_[0] >> 24) ] & 0xff] ^
84541f9be70SMatthias Ringwald Td1[Te4[(rk_[0] >> 16) & 0xff] & 0xff] ^
84641f9be70SMatthias Ringwald Td2[Te4[(rk_[0] >> 8) & 0xff] & 0xff] ^
84741f9be70SMatthias Ringwald Td3[Te4[(rk_[0] ) & 0xff] & 0xff];
84841f9be70SMatthias Ringwald rk_[1] =
84941f9be70SMatthias Ringwald Td0[Te4[(rk_[1] >> 24) ] & 0xff] ^
85041f9be70SMatthias Ringwald Td1[Te4[(rk_[1] >> 16) & 0xff] & 0xff] ^
85141f9be70SMatthias Ringwald Td2[Te4[(rk_[1] >> 8) & 0xff] & 0xff] ^
85241f9be70SMatthias Ringwald Td3[Te4[(rk_[1] ) & 0xff] & 0xff];
85341f9be70SMatthias Ringwald rk_[2] =
85441f9be70SMatthias Ringwald Td0[Te4[(rk_[2] >> 24) ] & 0xff] ^
85541f9be70SMatthias Ringwald Td1[Te4[(rk_[2] >> 16) & 0xff] & 0xff] ^
85641f9be70SMatthias Ringwald Td2[Te4[(rk_[2] >> 8) & 0xff] & 0xff] ^
85741f9be70SMatthias Ringwald Td3[Te4[(rk_[2] ) & 0xff] & 0xff];
85841f9be70SMatthias Ringwald rk_[3] =
85941f9be70SMatthias Ringwald Td0[Te4[(rk_[3] >> 24) ] & 0xff] ^
86041f9be70SMatthias Ringwald Td1[Te4[(rk_[3] >> 16) & 0xff] & 0xff] ^
86141f9be70SMatthias Ringwald Td2[Te4[(rk_[3] >> 8) & 0xff] & 0xff] ^
86241f9be70SMatthias Ringwald Td3[Te4[(rk_[3] ) & 0xff] & 0xff];
863f13fc290SMatthias Ringwald }
864f13fc290SMatthias Ringwald return nrounds;
865f13fc290SMatthias Ringwald }
86658039fbfSMatthias Ringwald #endif
867f13fc290SMatthias Ringwald
rijndaelEncrypt(const uint32_t * rk,int nrounds,const uint8_t plaintext[16],uint8_t ciphertext[16])868*b45b7749SMilanka Ringwald void rijndaelEncrypt(const uint32_t *rk, int nrounds, const uint8_t plaintext[16], uint8_t ciphertext[16])
869f13fc290SMatthias Ringwald {
870f13fc290SMatthias Ringwald
87141f9be70SMatthias Ringwald const u32 * rk_ = rk;
872f13fc290SMatthias Ringwald u32 s0, s1, s2, s3, t0, t1, t2, t3;
873f13fc290SMatthias Ringwald #ifndef FULL_UNROLL
874f13fc290SMatthias Ringwald int r;
875f13fc290SMatthias Ringwald #endif /* ?FULL_UNROLL */
876f13fc290SMatthias Ringwald /*
877f13fc290SMatthias Ringwald * map byte array block to cipher state
878f13fc290SMatthias Ringwald * and add initial round key:
879f13fc290SMatthias Ringwald */
88041f9be70SMatthias Ringwald s0 = GETU32(plaintext ) ^ rk_[0];
88141f9be70SMatthias Ringwald s1 = GETU32(plaintext + 4) ^ rk_[1];
88241f9be70SMatthias Ringwald s2 = GETU32(plaintext + 8) ^ rk_[2];
88341f9be70SMatthias Ringwald s3 = GETU32(plaintext + 12) ^ rk_[3];
884f13fc290SMatthias Ringwald #ifdef FULL_UNROLL
885f13fc290SMatthias Ringwald /* round 1: */
88641f9be70SMatthias Ringwald t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk_[ 4];
88741f9be70SMatthias Ringwald t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk_[ 5];
88841f9be70SMatthias Ringwald t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk_[ 6];
88941f9be70SMatthias Ringwald t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk_[ 7];
890f13fc290SMatthias Ringwald /* round 2: */
89141f9be70SMatthias Ringwald s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk_[ 8];
89241f9be70SMatthias Ringwald s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk_[ 9];
89341f9be70SMatthias Ringwald s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk_[10];
89441f9be70SMatthias Ringwald s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk_[11];
895f13fc290SMatthias Ringwald /* round 3: */
89641f9be70SMatthias Ringwald t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk_[12];
89741f9be70SMatthias Ringwald t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk_[13];
89841f9be70SMatthias Ringwald t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk_[14];
89941f9be70SMatthias Ringwald t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk_[15];
900f13fc290SMatthias Ringwald /* round 4: */
90141f9be70SMatthias Ringwald s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk_[16];
90241f9be70SMatthias Ringwald s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk_[17];
90341f9be70SMatthias Ringwald s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk_[18];
90441f9be70SMatthias Ringwald s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk_[19];
905f13fc290SMatthias Ringwald /* round 5: */
90641f9be70SMatthias Ringwald t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk_[20];
90741f9be70SMatthias Ringwald t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk_[21];
90841f9be70SMatthias Ringwald t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk_[22];
90941f9be70SMatthias Ringwald t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk_[23];
910f13fc290SMatthias Ringwald /* round 6: */
91141f9be70SMatthias Ringwald s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk_[24];
91241f9be70SMatthias Ringwald s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk_[25];
91341f9be70SMatthias Ringwald s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk_[26];
91441f9be70SMatthias Ringwald s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk_[27];
915f13fc290SMatthias Ringwald /* round 7: */
91641f9be70SMatthias Ringwald t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk_[28];
91741f9be70SMatthias Ringwald t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk_[29];
91841f9be70SMatthias Ringwald t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk_[30];
91941f9be70SMatthias Ringwald t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk_[31];
920f13fc290SMatthias Ringwald /* round 8: */
92141f9be70SMatthias Ringwald s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk_[32];
92241f9be70SMatthias Ringwald s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk_[33];
92341f9be70SMatthias Ringwald s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk_[34];
92441f9be70SMatthias Ringwald s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk_[35];
925f13fc290SMatthias Ringwald /* round 9: */
92641f9be70SMatthias Ringwald t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk_[36];
92741f9be70SMatthias Ringwald t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk_[37];
92841f9be70SMatthias Ringwald t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk_[38];
92941f9be70SMatthias Ringwald t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk_[39];
930cfd54eb7SMatthias Ringwald
931cfd54eb7SMatthias Ringwald #if defined(ENABLE_RIJNDAEL_192) || defined (ENABLE_RIJNDAEL_256)
932cfd54eb7SMatthias Ringwald
933f13fc290SMatthias Ringwald if (nrounds > 10)
934f13fc290SMatthias Ringwald {
935f13fc290SMatthias Ringwald /* round 10: */
93641f9be70SMatthias Ringwald s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk_[40];
93741f9be70SMatthias Ringwald s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk_[41];
93841f9be70SMatthias Ringwald s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk_[42];
93941f9be70SMatthias Ringwald s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk_[43];
940f13fc290SMatthias Ringwald /* round 11: */
94141f9be70SMatthias Ringwald t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk_[44];
94241f9be70SMatthias Ringwald t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk_[45];
94341f9be70SMatthias Ringwald t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk_[46];
94441f9be70SMatthias Ringwald t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk_[47];
945cfd54eb7SMatthias Ringwald
946cfd54eb7SMatthias Ringwald #ifdef ENABLE_RIJNDAEL_256
947cfd54eb7SMatthias Ringwald
948f13fc290SMatthias Ringwald if (nrounds > 12)
949f13fc290SMatthias Ringwald {
950f13fc290SMatthias Ringwald /* round 12: */
95141f9be70SMatthias Ringwald s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk_[48];
95241f9be70SMatthias Ringwald s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk_[49];
95341f9be70SMatthias Ringwald s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk_[50];
95441f9be70SMatthias Ringwald s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk_[51];
955f13fc290SMatthias Ringwald /* round 13: */
95641f9be70SMatthias Ringwald t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk_[52];
95741f9be70SMatthias Ringwald t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk_[53];
95841f9be70SMatthias Ringwald t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk_[54];
95941f9be70SMatthias Ringwald t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk_[55];
960f13fc290SMatthias Ringwald }
961cfd54eb7SMatthias Ringwald #endif
962f13fc290SMatthias Ringwald }
963cfd54eb7SMatthias Ringwald #endif
964cfd54eb7SMatthias Ringwald
96541f9be70SMatthias Ringwald rk_ += nrounds << 2;
966f13fc290SMatthias Ringwald #else /* !FULL_UNROLL */
967f13fc290SMatthias Ringwald /*
968f13fc290SMatthias Ringwald * nrounds - 1 full rounds:
969f13fc290SMatthias Ringwald */
970f13fc290SMatthias Ringwald r = nrounds >> 1;
971f13fc290SMatthias Ringwald for (;;)
972f13fc290SMatthias Ringwald {
973f13fc290SMatthias Ringwald t0 =
974f13fc290SMatthias Ringwald Te0[(s0 >> 24) ] ^
975f13fc290SMatthias Ringwald Te1[(s1 >> 16) & 0xff] ^
976f13fc290SMatthias Ringwald Te2[(s2 >> 8) & 0xff] ^
977f13fc290SMatthias Ringwald Te3[(s3 ) & 0xff] ^
97841f9be70SMatthias Ringwald rk_[4];
979f13fc290SMatthias Ringwald t1 =
980f13fc290SMatthias Ringwald Te0[(s1 >> 24) ] ^
981f13fc290SMatthias Ringwald Te1[(s2 >> 16) & 0xff] ^
982f13fc290SMatthias Ringwald Te2[(s3 >> 8) & 0xff] ^
983f13fc290SMatthias Ringwald Te3[(s0 ) & 0xff] ^
98441f9be70SMatthias Ringwald rk_[5];
985f13fc290SMatthias Ringwald t2 =
986f13fc290SMatthias Ringwald Te0[(s2 >> 24) ] ^
987f13fc290SMatthias Ringwald Te1[(s3 >> 16) & 0xff] ^
988f13fc290SMatthias Ringwald Te2[(s0 >> 8) & 0xff] ^
989f13fc290SMatthias Ringwald Te3[(s1 ) & 0xff] ^
99041f9be70SMatthias Ringwald rk_[6];
991f13fc290SMatthias Ringwald t3 =
992f13fc290SMatthias Ringwald Te0[(s3 >> 24) ] ^
993f13fc290SMatthias Ringwald Te1[(s0 >> 16) & 0xff] ^
994f13fc290SMatthias Ringwald Te2[(s1 >> 8) & 0xff] ^
995f13fc290SMatthias Ringwald Te3[(s2 ) & 0xff] ^
99641f9be70SMatthias Ringwald rk_[7];
99741f9be70SMatthias Ringwald rk_ += 8;
998f13fc290SMatthias Ringwald if (--r == 0)
999f13fc290SMatthias Ringwald break;
1000f13fc290SMatthias Ringwald s0 =
1001f13fc290SMatthias Ringwald Te0[(t0 >> 24) ] ^
1002f13fc290SMatthias Ringwald Te1[(t1 >> 16) & 0xff] ^
1003f13fc290SMatthias Ringwald Te2[(t2 >> 8) & 0xff] ^
1004f13fc290SMatthias Ringwald Te3[(t3 ) & 0xff] ^
100541f9be70SMatthias Ringwald rk_[0];
1006f13fc290SMatthias Ringwald s1 =
1007f13fc290SMatthias Ringwald Te0[(t1 >> 24) ] ^
1008f13fc290SMatthias Ringwald Te1[(t2 >> 16) & 0xff] ^
1009f13fc290SMatthias Ringwald Te2[(t3 >> 8) & 0xff] ^
1010f13fc290SMatthias Ringwald Te3[(t0 ) & 0xff] ^
101141f9be70SMatthias Ringwald rk_[1];
1012f13fc290SMatthias Ringwald s2 =
1013f13fc290SMatthias Ringwald Te0[(t2 >> 24) ] ^
1014f13fc290SMatthias Ringwald Te1[(t3 >> 16) & 0xff] ^
1015f13fc290SMatthias Ringwald Te2[(t0 >> 8) & 0xff] ^
1016f13fc290SMatthias Ringwald Te3[(t1 ) & 0xff] ^
101741f9be70SMatthias Ringwald rk_[2];
1018f13fc290SMatthias Ringwald s3 =
1019f13fc290SMatthias Ringwald Te0[(t3 >> 24) ] ^
1020f13fc290SMatthias Ringwald Te1[(t0 >> 16) & 0xff] ^
1021f13fc290SMatthias Ringwald Te2[(t1 >> 8) & 0xff] ^
1022f13fc290SMatthias Ringwald Te3[(t2 ) & 0xff] ^
102341f9be70SMatthias Ringwald rk_[3];
1024f13fc290SMatthias Ringwald }
1025f13fc290SMatthias Ringwald #endif /* ?FULL_UNROLL */
1026f13fc290SMatthias Ringwald /*
1027f13fc290SMatthias Ringwald * apply last round and
1028f13fc290SMatthias Ringwald * map cipher state to byte array block:
1029f13fc290SMatthias Ringwald */
1030f13fc290SMatthias Ringwald s0 =
1031f13fc290SMatthias Ringwald (Te4[(t0 >> 24) ] & 0xff000000) ^
1032f13fc290SMatthias Ringwald (Te4[(t1 >> 16) & 0xff] & 0x00ff0000) ^
1033f13fc290SMatthias Ringwald (Te4[(t2 >> 8) & 0xff] & 0x0000ff00) ^
1034f13fc290SMatthias Ringwald (Te4[(t3 ) & 0xff] & 0x000000ff) ^
103541f9be70SMatthias Ringwald rk_[0];
1036f13fc290SMatthias Ringwald PUTU32(ciphertext , s0);
1037f13fc290SMatthias Ringwald s1 =
1038f13fc290SMatthias Ringwald (Te4[(t1 >> 24) ] & 0xff000000) ^
1039f13fc290SMatthias Ringwald (Te4[(t2 >> 16) & 0xff] & 0x00ff0000) ^
1040f13fc290SMatthias Ringwald (Te4[(t3 >> 8) & 0xff] & 0x0000ff00) ^
1041f13fc290SMatthias Ringwald (Te4[(t0 ) & 0xff] & 0x000000ff) ^
104241f9be70SMatthias Ringwald rk_[1];
1043f13fc290SMatthias Ringwald PUTU32(ciphertext + 4, s1);
1044f13fc290SMatthias Ringwald s2 =
1045f13fc290SMatthias Ringwald (Te4[(t2 >> 24) ] & 0xff000000) ^
1046f13fc290SMatthias Ringwald (Te4[(t3 >> 16) & 0xff] & 0x00ff0000) ^
1047f13fc290SMatthias Ringwald (Te4[(t0 >> 8) & 0xff] & 0x0000ff00) ^
1048f13fc290SMatthias Ringwald (Te4[(t1 ) & 0xff] & 0x000000ff) ^
104941f9be70SMatthias Ringwald rk_[2];
1050f13fc290SMatthias Ringwald PUTU32(ciphertext + 8, s2);
1051f13fc290SMatthias Ringwald s3 =
1052f13fc290SMatthias Ringwald (Te4[(t3 >> 24) ] & 0xff000000) ^
1053f13fc290SMatthias Ringwald (Te4[(t0 >> 16) & 0xff] & 0x00ff0000) ^
1054f13fc290SMatthias Ringwald (Te4[(t1 >> 8) & 0xff] & 0x0000ff00) ^
1055f13fc290SMatthias Ringwald (Te4[(t2 ) & 0xff] & 0x000000ff) ^
105641f9be70SMatthias Ringwald rk_[3];
1057f13fc290SMatthias Ringwald PUTU32(ciphertext + 12, s3);
1058f13fc290SMatthias Ringwald
1059f13fc290SMatthias Ringwald
1060f13fc290SMatthias Ringwald }
1061f13fc290SMatthias Ringwald
106258039fbfSMatthias Ringwald #ifdef ENABLE_RIJNDAEL_DECRYPT
rijndaelDecrypt(const uint32_t * rk,int nrounds,const uint8_t ciphertext[16],uint8_t plaintext[16])1063*b45b7749SMilanka Ringwald void rijndaelDecrypt(const uint32_t *rk, int nrounds, const uint8_t ciphertext[16], uint8_t plaintext[16])
1064f13fc290SMatthias Ringwald {
1065f13fc290SMatthias Ringwald
106641f9be70SMatthias Ringwald const u32 * rk_ = rk;
1067f13fc290SMatthias Ringwald u32 s0, s1, s2, s3, t0, t1, t2, t3;
1068f13fc290SMatthias Ringwald #ifndef FULL_UNROLL
1069f13fc290SMatthias Ringwald int r;
1070f13fc290SMatthias Ringwald #endif /* ?FULL_UNROLL */
1071f13fc290SMatthias Ringwald
1072f13fc290SMatthias Ringwald /*
1073f13fc290SMatthias Ringwald * map byte array block to cipher state
1074f13fc290SMatthias Ringwald * and add initial round key:
1075f13fc290SMatthias Ringwald */
107641f9be70SMatthias Ringwald s0 = GETU32(ciphertext ) ^ rk_[0];
107741f9be70SMatthias Ringwald s1 = GETU32(ciphertext + 4) ^ rk_[1];
107841f9be70SMatthias Ringwald s2 = GETU32(ciphertext + 8) ^ rk_[2];
107941f9be70SMatthias Ringwald s3 = GETU32(ciphertext + 12) ^ rk_[3];
1080f13fc290SMatthias Ringwald #ifdef FULL_UNROLL
1081f13fc290SMatthias Ringwald /* round 1: */
108241f9be70SMatthias Ringwald t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk_[ 4];
108341f9be70SMatthias Ringwald t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk_[ 5];
108441f9be70SMatthias Ringwald t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk_[ 6];
108541f9be70SMatthias Ringwald t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk_[ 7];
1086f13fc290SMatthias Ringwald /* round 2: */
108741f9be70SMatthias Ringwald s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk_[ 8];
108841f9be70SMatthias Ringwald s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk_[ 9];
108941f9be70SMatthias Ringwald s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk_[10];
109041f9be70SMatthias Ringwald s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk_[11];
1091f13fc290SMatthias Ringwald /* round 3: */
109241f9be70SMatthias Ringwald t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk_[12];
109341f9be70SMatthias Ringwald t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk_[13];
109441f9be70SMatthias Ringwald t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk_[14];
109541f9be70SMatthias Ringwald t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk_[15];
1096f13fc290SMatthias Ringwald /* round 4: */
109741f9be70SMatthias Ringwald s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk_[16];
109841f9be70SMatthias Ringwald s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk_[17];
109941f9be70SMatthias Ringwald s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk_[18];
110041f9be70SMatthias Ringwald s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk_[19];
1101f13fc290SMatthias Ringwald /* round 5: */
110241f9be70SMatthias Ringwald t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk_[20];
110341f9be70SMatthias Ringwald t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk_[21];
110441f9be70SMatthias Ringwald t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk_[22];
110541f9be70SMatthias Ringwald t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk_[23];
1106f13fc290SMatthias Ringwald /* round 6: */
110741f9be70SMatthias Ringwald s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk_[24];
110841f9be70SMatthias Ringwald s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk_[25];
110941f9be70SMatthias Ringwald s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk_[26];
111041f9be70SMatthias Ringwald s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk_[27];
1111f13fc290SMatthias Ringwald /* round 7: */
111241f9be70SMatthias Ringwald t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk_[28];
111341f9be70SMatthias Ringwald t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk_[29];
111441f9be70SMatthias Ringwald t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk_[30];
111541f9be70SMatthias Ringwald t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk_[31];
1116f13fc290SMatthias Ringwald /* round 8: */
111741f9be70SMatthias Ringwald s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk_[32];
111841f9be70SMatthias Ringwald s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk_[33];
111941f9be70SMatthias Ringwald s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk_[34];
112041f9be70SMatthias Ringwald s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk_[35];
1121f13fc290SMatthias Ringwald /* round 9: */
112241f9be70SMatthias Ringwald t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk_[36];
112341f9be70SMatthias Ringwald t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk_[37];
112441f9be70SMatthias Ringwald t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk_[38];
112541f9be70SMatthias Ringwald t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk_[39];
1126cfd54eb7SMatthias Ringwald
1127cfd54eb7SMatthias Ringwald #if defined(ENABLE_RIJNDAEL_192) || defined (ENABLE_RIJNDAEL_256)
1128cfd54eb7SMatthias Ringwald
1129f13fc290SMatthias Ringwald if (nrounds > 10)
1130f13fc290SMatthias Ringwald {
1131f13fc290SMatthias Ringwald /* round 10: */
113241f9be70SMatthias Ringwald s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk_[40];
113341f9be70SMatthias Ringwald s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk_[41];
113441f9be70SMatthias Ringwald s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk_[42];
113541f9be70SMatthias Ringwald s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk_[43];
1136f13fc290SMatthias Ringwald /* round 11: */
113741f9be70SMatthias Ringwald t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk_[44];
113841f9be70SMatthias Ringwald t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk_[45];
113941f9be70SMatthias Ringwald t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk_[46];
114041f9be70SMatthias Ringwald t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk_[47];
1141cfd54eb7SMatthias Ringwald
1142cfd54eb7SMatthias Ringwald #ifdef ENABLE_RIJNDAEL_256
1143f13fc290SMatthias Ringwald if (nrounds > 12)
1144f13fc290SMatthias Ringwald {
1145f13fc290SMatthias Ringwald /* round 12: */
114641f9be70SMatthias Ringwald s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk_[48];
114741f9be70SMatthias Ringwald s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk_[49];
114841f9be70SMatthias Ringwald s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk_[50];
114941f9be70SMatthias Ringwald s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk_[51];
1150f13fc290SMatthias Ringwald /* round 13: */
115141f9be70SMatthias Ringwald t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk_[52];
115241f9be70SMatthias Ringwald t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk_[53];
115341f9be70SMatthias Ringwald t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk_[54];
115441f9be70SMatthias Ringwald t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk_[55];
1155f13fc290SMatthias Ringwald }
1156cfd54eb7SMatthias Ringwald #endif
1157cfd54eb7SMatthias Ringwald
1158f13fc290SMatthias Ringwald }
1159cfd54eb7SMatthias Ringwald #endif
1160cfd54eb7SMatthias Ringwald
116141f9be70SMatthias Ringwald rk_ += nrounds << 2;
1162f13fc290SMatthias Ringwald #else /* !FULL_UNROLL */
1163f13fc290SMatthias Ringwald /*
1164f13fc290SMatthias Ringwald * nrounds - 1 full rounds:
1165f13fc290SMatthias Ringwald */
1166f13fc290SMatthias Ringwald r = nrounds >> 1;
1167f13fc290SMatthias Ringwald for (;;)
1168f13fc290SMatthias Ringwald {
1169f13fc290SMatthias Ringwald t0 =
1170f13fc290SMatthias Ringwald Td0[(s0 >> 24) ] ^
1171f13fc290SMatthias Ringwald Td1[(s3 >> 16) & 0xff] ^
1172f13fc290SMatthias Ringwald Td2[(s2 >> 8) & 0xff] ^
1173f13fc290SMatthias Ringwald Td3[(s1 ) & 0xff] ^
117441f9be70SMatthias Ringwald rk_[4];
1175f13fc290SMatthias Ringwald t1 =
1176f13fc290SMatthias Ringwald Td0[(s1 >> 24) ] ^
1177f13fc290SMatthias Ringwald Td1[(s0 >> 16) & 0xff] ^
1178f13fc290SMatthias Ringwald Td2[(s3 >> 8) & 0xff] ^
1179f13fc290SMatthias Ringwald Td3[(s2 ) & 0xff] ^
118041f9be70SMatthias Ringwald rk_[5];
1181f13fc290SMatthias Ringwald t2 =
1182f13fc290SMatthias Ringwald Td0[(s2 >> 24) ] ^
1183f13fc290SMatthias Ringwald Td1[(s1 >> 16) & 0xff] ^
1184f13fc290SMatthias Ringwald Td2[(s0 >> 8) & 0xff] ^
1185f13fc290SMatthias Ringwald Td3[(s3 ) & 0xff] ^
118641f9be70SMatthias Ringwald rk_[6];
1187f13fc290SMatthias Ringwald t3 =
1188f13fc290SMatthias Ringwald Td0[(s3 >> 24) ] ^
1189f13fc290SMatthias Ringwald Td1[(s2 >> 16) & 0xff] ^
1190f13fc290SMatthias Ringwald Td2[(s1 >> 8) & 0xff] ^
1191f13fc290SMatthias Ringwald Td3[(s0 ) & 0xff] ^
119241f9be70SMatthias Ringwald rk_[7];
119341f9be70SMatthias Ringwald rk_ += 8;
1194f13fc290SMatthias Ringwald if (--r == 0)
1195f13fc290SMatthias Ringwald break;
1196f13fc290SMatthias Ringwald s0 =
1197f13fc290SMatthias Ringwald Td0[(t0 >> 24) ] ^
1198f13fc290SMatthias Ringwald Td1[(t3 >> 16) & 0xff] ^
1199f13fc290SMatthias Ringwald Td2[(t2 >> 8) & 0xff] ^
1200f13fc290SMatthias Ringwald Td3[(t1 ) & 0xff] ^
120141f9be70SMatthias Ringwald rk_[0];
1202f13fc290SMatthias Ringwald s1 =
1203f13fc290SMatthias Ringwald Td0[(t1 >> 24) ] ^
1204f13fc290SMatthias Ringwald Td1[(t0 >> 16) & 0xff] ^
1205f13fc290SMatthias Ringwald Td2[(t3 >> 8) & 0xff] ^
1206f13fc290SMatthias Ringwald Td3[(t2 ) & 0xff] ^
120741f9be70SMatthias Ringwald rk_[1];
1208f13fc290SMatthias Ringwald s2 =
1209f13fc290SMatthias Ringwald Td0[(t2 >> 24) ] ^
1210f13fc290SMatthias Ringwald Td1[(t1 >> 16) & 0xff] ^
1211f13fc290SMatthias Ringwald Td2[(t0 >> 8) & 0xff] ^
1212f13fc290SMatthias Ringwald Td3[(t3 ) & 0xff] ^
121341f9be70SMatthias Ringwald rk_[2];
1214f13fc290SMatthias Ringwald s3 =
1215f13fc290SMatthias Ringwald Td0[(t3 >> 24) ] ^
1216f13fc290SMatthias Ringwald Td1[(t2 >> 16) & 0xff] ^
1217f13fc290SMatthias Ringwald Td2[(t1 >> 8) & 0xff] ^
1218f13fc290SMatthias Ringwald Td3[(t0 ) & 0xff] ^
121941f9be70SMatthias Ringwald rk_[3];
1220f13fc290SMatthias Ringwald }
1221f13fc290SMatthias Ringwald #endif /* ?FULL_UNROLL */
1222f13fc290SMatthias Ringwald /*
1223f13fc290SMatthias Ringwald * apply last round and
1224f13fc290SMatthias Ringwald * map cipher state to byte array block:
1225f13fc290SMatthias Ringwald */
1226f13fc290SMatthias Ringwald s0 =
1227f13fc290SMatthias Ringwald (Td4[(t0 >> 24) ] & 0xff000000) ^
1228f13fc290SMatthias Ringwald (Td4[(t3 >> 16) & 0xff] & 0x00ff0000) ^
1229f13fc290SMatthias Ringwald (Td4[(t2 >> 8) & 0xff] & 0x0000ff00) ^
1230f13fc290SMatthias Ringwald (Td4[(t1 ) & 0xff] & 0x000000ff) ^
123141f9be70SMatthias Ringwald rk_[0];
1232f13fc290SMatthias Ringwald PUTU32(plaintext , s0);
1233f13fc290SMatthias Ringwald s1 =
1234f13fc290SMatthias Ringwald (Td4[(t1 >> 24) ] & 0xff000000) ^
1235f13fc290SMatthias Ringwald (Td4[(t0 >> 16) & 0xff] & 0x00ff0000) ^
1236f13fc290SMatthias Ringwald (Td4[(t3 >> 8) & 0xff] & 0x0000ff00) ^
1237f13fc290SMatthias Ringwald (Td4[(t2 ) & 0xff] & 0x000000ff) ^
123841f9be70SMatthias Ringwald rk_[1];
1239f13fc290SMatthias Ringwald PUTU32(plaintext + 4, s1);
1240f13fc290SMatthias Ringwald s2 =
1241f13fc290SMatthias Ringwald (Td4[(t2 >> 24) ] & 0xff000000) ^
1242f13fc290SMatthias Ringwald (Td4[(t1 >> 16) & 0xff] & 0x00ff0000) ^
1243f13fc290SMatthias Ringwald (Td4[(t0 >> 8) & 0xff] & 0x0000ff00) ^
1244f13fc290SMatthias Ringwald (Td4[(t3 ) & 0xff] & 0x000000ff) ^
124541f9be70SMatthias Ringwald rk_[2];
1246f13fc290SMatthias Ringwald PUTU32(plaintext + 8, s2);
1247f13fc290SMatthias Ringwald s3 =
1248f13fc290SMatthias Ringwald (Td4[(t3 >> 24) ] & 0xff000000) ^
1249f13fc290SMatthias Ringwald (Td4[(t2 >> 16) & 0xff] & 0x00ff0000) ^
1250f13fc290SMatthias Ringwald (Td4[(t1 >> 8) & 0xff] & 0x0000ff00) ^
1251f13fc290SMatthias Ringwald (Td4[(t0 ) & 0xff] & 0x000000ff) ^
125241f9be70SMatthias Ringwald rk_[3];
1253f13fc290SMatthias Ringwald
1254f13fc290SMatthias Ringwald PUTU32(plaintext + 12, s3);
1255f13fc290SMatthias Ringwald
1256f13fc290SMatthias Ringwald
1257f13fc290SMatthias Ringwald }
125858039fbfSMatthias Ringwald #endif
1259