1
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
3
* LibTomCrypt is a library that provides various cryptographic
4
* algorithms in a highly modular and flexible manner.
6
* The library is free for all purposes without any express
9
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
14
Anubis implementation derived from public domain source
15
Authors: Paulo S.L.M. Barreto and Vincent Rijmen.
22
const struct ltc_cipher_descriptor anubis_desc = {
32
NULL, NULL, NULL, NULL, NULL, NULL, NULL
37
#define MIN_ROUNDS (8 + MIN_N)
38
#define MAX_ROUNDS (8 + MAX_N)
39
#define MIN_KEYSIZEB (4*MIN_N)
40
#define MAX_KEYSIZEB (4*MAX_N)
42
#define BLOCKSIZEB (BLOCKSIZE/8)
46
* Though Anubis is endianness-neutral, the encryption tables are listed
47
* in BIG-ENDIAN format, which is adopted throughout this implementation
48
* (but little-endian notation would be equally suitable if consistently
51
#if defined(ANUBIS_TWEAK)
53
static const ulong32 T0[256] = {
54
0xba69d2bbU, 0x54a84de5U, 0x2f5ebce2U, 0x74e8cd25U,
55
0x53a651f7U, 0xd3bb6bd0U, 0xd2b96fd6U, 0x4d9a29b3U,
56
0x50a05dfdU, 0xac458acfU, 0x8d070e09U, 0xbf63c6a5U,
57
0x70e0dd3dU, 0x52a455f1U, 0x9a29527bU, 0x4c982db5U,
58
0xeac98f46U, 0xd5b773c4U, 0x97336655U, 0xd1bf63dcU,
59
0x3366ccaaU, 0x51a259fbU, 0x5bb671c7U, 0xa651a2f3U,
60
0xdea15ffeU, 0x48903dadU, 0xa84d9ad7U, 0x992f5e71U,
61
0xdbab4be0U, 0x3264c8acU, 0xb773e695U, 0xfce5d732U,
62
0xe3dbab70U, 0x9e214263U, 0x913f7e41U, 0x9b2b567dU,
63
0xe2d9af76U, 0xbb6bd6bdU, 0x4182199bU, 0x6edca579U,
64
0xa557aef9U, 0xcb8b0b80U, 0x6bd6b167U, 0x95376e59U,
65
0xa15fbee1U, 0xf3fbeb10U, 0xb17ffe81U, 0x0204080cU,
66
0xcc851792U, 0xc49537a2U, 0x1d3a744eU, 0x14285078U,
67
0xc39b2bb0U, 0x63c69157U, 0xdaa94fe6U, 0x5dba69d3U,
68
0x5fbe61dfU, 0xdca557f2U, 0x7dfae913U, 0xcd871394U,
69
0x7ffee11fU, 0x5ab475c1U, 0x6cd8ad75U, 0x5cb86dd5U,
70
0xf7f3fb08U, 0x264c98d4U, 0xffe3db38U, 0xedc79354U,
71
0xe8cd874aU, 0x9d274e69U, 0x6fdea17fU, 0x8e010203U,
72
0x19326456U, 0xa05dbae7U, 0xf0fde71aU, 0x890f1e11U,
73
0x0f1e3c22U, 0x070e1c12U, 0xaf4386c5U, 0xfbebcb20U,
74
0x08102030U, 0x152a547eU, 0x0d1a342eU, 0x04081018U,
75
0x01020406U, 0x64c88d45U, 0xdfa35bf8U, 0x76ecc529U,
76
0x79f2f90bU, 0xdda753f4U, 0x3d7af48eU, 0x162c5874U,
77
0x3f7efc82U, 0x376edcb2U, 0x6ddaa973U, 0x3870e090U,
78
0xb96fdeb1U, 0x73e6d137U, 0xe9cf834cU, 0x356ad4beU,
79
0x55aa49e3U, 0x71e2d93bU, 0x7bf6f107U, 0x8c050a0fU,
80
0x72e4d531U, 0x880d1a17U, 0xf6f1ff0eU, 0x2a54a8fcU,
81
0x3e7cf884U, 0x5ebc65d9U, 0x274e9cd2U, 0x468c0589U,
82
0x0c183028U, 0x65ca8943U, 0x68d0bd6dU, 0x61c2995bU,
83
0x03060c0aU, 0xc19f23bcU, 0x57ae41efU, 0xd6b17fceU,
84
0xd9af43ecU, 0x58b07dcdU, 0xd8ad47eaU, 0x66cc8549U,
85
0xd7b37bc8U, 0x3a74e89cU, 0xc88d078aU, 0x3c78f088U,
86
0xfae9cf26U, 0x96316253U, 0xa753a6f5U, 0x982d5a77U,
87
0xecc59752U, 0xb86ddab7U, 0xc7933ba8U, 0xae4182c3U,
88
0x69d2b96bU, 0x4b9631a7U, 0xab4b96ddU, 0xa94f9ed1U,
89
0x67ce814fU, 0x0a14283cU, 0x478e018fU, 0xf2f9ef16U,
90
0xb577ee99U, 0x224488ccU, 0xe5d7b364U, 0xeec19f5eU,
91
0xbe61c2a3U, 0x2b56acfaU, 0x811f3e21U, 0x1224486cU,
92
0x831b362dU, 0x1b366c5aU, 0x0e1c3824U, 0x23468ccaU,
93
0xf5f7f304U, 0x458a0983U, 0x214284c6U, 0xce811f9eU,
94
0x499239abU, 0x2c58b0e8U, 0xf9efc32cU, 0xe6d1bf6eU,
95
0xb671e293U, 0x2850a0f0U, 0x172e5c72U, 0x8219322bU,
96
0x1a34685cU, 0x8b0b161dU, 0xfee1df3eU, 0x8a09121bU,
97
0x09122436U, 0xc98f038cU, 0x87132635U, 0x4e9c25b9U,
98
0xe1dfa37cU, 0x2e5cb8e4U, 0xe4d5b762U, 0xe0dda77aU,
99
0xebcb8b40U, 0x903d7a47U, 0xa455aaffU, 0x1e3c7844U,
100
0x85172e39U, 0x60c09d5dU, 0x00000000U, 0x254a94deU,
101
0xf4f5f702U, 0xf1ffe31cU, 0x94356a5fU, 0x0b162c3aU,
102
0xe7d3bb68U, 0x75eac923U, 0xefc39b58U, 0x3468d0b8U,
103
0x3162c4a6U, 0xd4b577c2U, 0xd0bd67daU, 0x86112233U,
104
0x7efce519U, 0xad478ec9U, 0xfde7d334U, 0x2952a4f6U,
105
0x3060c0a0U, 0x3b76ec9aU, 0x9f234665U, 0xf8edc72aU,
106
0xc6913faeU, 0x13264c6aU, 0x060c1814U, 0x050a141eU,
107
0xc59733a4U, 0x11224466U, 0x77eec12fU, 0x7cf8ed15U,
108
0x7af4f501U, 0x78f0fd0dU, 0x366cd8b4U, 0x1c387048U,
109
0x3972e496U, 0x59b279cbU, 0x18306050U, 0x56ac45e9U,
110
0xb37bf68dU, 0xb07dfa87U, 0x244890d8U, 0x204080c0U,
111
0xb279f28bU, 0x9239724bU, 0xa35bb6edU, 0xc09d27baU,
112
0x44880d85U, 0x62c49551U, 0x10204060U, 0xb475ea9fU,
113
0x84152a3fU, 0x43861197U, 0x933b764dU, 0xc2992fb6U,
114
0x4a9435a1U, 0xbd67cea9U, 0x8f030605U, 0x2d5ab4eeU,
115
0xbc65caafU, 0x9c254a6fU, 0x6ad4b561U, 0x40801d9dU,
116
0xcf831b98U, 0xa259b2ebU, 0x801d3a27U, 0x4f9e21bfU,
117
0x1f3e7c42U, 0xca890f86U, 0xaa4992dbU, 0x42841591U,
120
static const ulong32 T1[256] = {
121
0x69babbd2U, 0xa854e54dU, 0x5e2fe2bcU, 0xe87425cdU,
122
0xa653f751U, 0xbbd3d06bU, 0xb9d2d66fU, 0x9a4db329U,
123
0xa050fd5dU, 0x45accf8aU, 0x078d090eU, 0x63bfa5c6U,
124
0xe0703dddU, 0xa452f155U, 0x299a7b52U, 0x984cb52dU,
125
0xc9ea468fU, 0xb7d5c473U, 0x33975566U, 0xbfd1dc63U,
126
0x6633aaccU, 0xa251fb59U, 0xb65bc771U, 0x51a6f3a2U,
127
0xa1defe5fU, 0x9048ad3dU, 0x4da8d79aU, 0x2f99715eU,
128
0xabdbe04bU, 0x6432acc8U, 0x73b795e6U, 0xe5fc32d7U,
129
0xdbe370abU, 0x219e6342U, 0x3f91417eU, 0x2b9b7d56U,
130
0xd9e276afU, 0x6bbbbdd6U, 0x82419b19U, 0xdc6e79a5U,
131
0x57a5f9aeU, 0x8bcb800bU, 0xd66b67b1U, 0x3795596eU,
132
0x5fa1e1beU, 0xfbf310ebU, 0x7fb181feU, 0x04020c08U,
133
0x85cc9217U, 0x95c4a237U, 0x3a1d4e74U, 0x28147850U,
134
0x9bc3b02bU, 0xc6635791U, 0xa9dae64fU, 0xba5dd369U,
135
0xbe5fdf61U, 0xa5dcf257U, 0xfa7d13e9U, 0x87cd9413U,
136
0xfe7f1fe1U, 0xb45ac175U, 0xd86c75adU, 0xb85cd56dU,
137
0xf3f708fbU, 0x4c26d498U, 0xe3ff38dbU, 0xc7ed5493U,
138
0xcde84a87U, 0x279d694eU, 0xde6f7fa1U, 0x018e0302U,
139
0x32195664U, 0x5da0e7baU, 0xfdf01ae7U, 0x0f89111eU,
140
0x1e0f223cU, 0x0e07121cU, 0x43afc586U, 0xebfb20cbU,
141
0x10083020U, 0x2a157e54U, 0x1a0d2e34U, 0x08041810U,
142
0x02010604U, 0xc864458dU, 0xa3dff85bU, 0xec7629c5U,
143
0xf2790bf9U, 0xa7ddf453U, 0x7a3d8ef4U, 0x2c167458U,
144
0x7e3f82fcU, 0x6e37b2dcU, 0xda6d73a9U, 0x703890e0U,
145
0x6fb9b1deU, 0xe67337d1U, 0xcfe94c83U, 0x6a35bed4U,
146
0xaa55e349U, 0xe2713bd9U, 0xf67b07f1U, 0x058c0f0aU,
147
0xe47231d5U, 0x0d88171aU, 0xf1f60effU, 0x542afca8U,
148
0x7c3e84f8U, 0xbc5ed965U, 0x4e27d29cU, 0x8c468905U,
149
0x180c2830U, 0xca654389U, 0xd0686dbdU, 0xc2615b99U,
150
0x06030a0cU, 0x9fc1bc23U, 0xae57ef41U, 0xb1d6ce7fU,
151
0xafd9ec43U, 0xb058cd7dU, 0xadd8ea47U, 0xcc664985U,
152
0xb3d7c87bU, 0x743a9ce8U, 0x8dc88a07U, 0x783c88f0U,
153
0xe9fa26cfU, 0x31965362U, 0x53a7f5a6U, 0x2d98775aU,
154
0xc5ec5297U, 0x6db8b7daU, 0x93c7a83bU, 0x41aec382U,
155
0xd2696bb9U, 0x964ba731U, 0x4babdd96U, 0x4fa9d19eU,
156
0xce674f81U, 0x140a3c28U, 0x8e478f01U, 0xf9f216efU,
157
0x77b599eeU, 0x4422cc88U, 0xd7e564b3U, 0xc1ee5e9fU,
158
0x61bea3c2U, 0x562bfaacU, 0x1f81213eU, 0x24126c48U,
159
0x1b832d36U, 0x361b5a6cU, 0x1c0e2438U, 0x4623ca8cU,
160
0xf7f504f3U, 0x8a458309U, 0x4221c684U, 0x81ce9e1fU,
161
0x9249ab39U, 0x582ce8b0U, 0xeff92cc3U, 0xd1e66ebfU,
162
0x71b693e2U, 0x5028f0a0U, 0x2e17725cU, 0x19822b32U,
163
0x341a5c68U, 0x0b8b1d16U, 0xe1fe3edfU, 0x098a1b12U,
164
0x12093624U, 0x8fc98c03U, 0x13873526U, 0x9c4eb925U,
165
0xdfe17ca3U, 0x5c2ee4b8U, 0xd5e462b7U, 0xdde07aa7U,
166
0xcbeb408bU, 0x3d90477aU, 0x55a4ffaaU, 0x3c1e4478U,
167
0x1785392eU, 0xc0605d9dU, 0x00000000U, 0x4a25de94U,
168
0xf5f402f7U, 0xfff11ce3U, 0x35945f6aU, 0x160b3a2cU,
169
0xd3e768bbU, 0xea7523c9U, 0xc3ef589bU, 0x6834b8d0U,
170
0x6231a6c4U, 0xb5d4c277U, 0xbdd0da67U, 0x11863322U,
171
0xfc7e19e5U, 0x47adc98eU, 0xe7fd34d3U, 0x5229f6a4U,
172
0x6030a0c0U, 0x763b9aecU, 0x239f6546U, 0xedf82ac7U,
173
0x91c6ae3fU, 0x26136a4cU, 0x0c061418U, 0x0a051e14U,
174
0x97c5a433U, 0x22116644U, 0xee772fc1U, 0xf87c15edU,
175
0xf47a01f5U, 0xf0780dfdU, 0x6c36b4d8U, 0x381c4870U,
176
0x723996e4U, 0xb259cb79U, 0x30185060U, 0xac56e945U,
177
0x7bb38df6U, 0x7db087faU, 0x4824d890U, 0x4020c080U,
178
0x79b28bf2U, 0x39924b72U, 0x5ba3edb6U, 0x9dc0ba27U,
179
0x8844850dU, 0xc4625195U, 0x20106040U, 0x75b49feaU,
180
0x15843f2aU, 0x86439711U, 0x3b934d76U, 0x99c2b62fU,
181
0x944aa135U, 0x67bda9ceU, 0x038f0506U, 0x5a2deeb4U,
182
0x65bcafcaU, 0x259c6f4aU, 0xd46a61b5U, 0x80409d1dU,
183
0x83cf981bU, 0x59a2ebb2U, 0x1d80273aU, 0x9e4fbf21U,
184
0x3e1f427cU, 0x89ca860fU, 0x49aadb92U, 0x84429115U,
187
static const ulong32 T2[256] = {
188
0xd2bbba69U, 0x4de554a8U, 0xbce22f5eU, 0xcd2574e8U,
189
0x51f753a6U, 0x6bd0d3bbU, 0x6fd6d2b9U, 0x29b34d9aU,
190
0x5dfd50a0U, 0x8acfac45U, 0x0e098d07U, 0xc6a5bf63U,
191
0xdd3d70e0U, 0x55f152a4U, 0x527b9a29U, 0x2db54c98U,
192
0x8f46eac9U, 0x73c4d5b7U, 0x66559733U, 0x63dcd1bfU,
193
0xccaa3366U, 0x59fb51a2U, 0x71c75bb6U, 0xa2f3a651U,
194
0x5ffedea1U, 0x3dad4890U, 0x9ad7a84dU, 0x5e71992fU,
195
0x4be0dbabU, 0xc8ac3264U, 0xe695b773U, 0xd732fce5U,
196
0xab70e3dbU, 0x42639e21U, 0x7e41913fU, 0x567d9b2bU,
197
0xaf76e2d9U, 0xd6bdbb6bU, 0x199b4182U, 0xa5796edcU,
198
0xaef9a557U, 0x0b80cb8bU, 0xb1676bd6U, 0x6e599537U,
199
0xbee1a15fU, 0xeb10f3fbU, 0xfe81b17fU, 0x080c0204U,
200
0x1792cc85U, 0x37a2c495U, 0x744e1d3aU, 0x50781428U,
201
0x2bb0c39bU, 0x915763c6U, 0x4fe6daa9U, 0x69d35dbaU,
202
0x61df5fbeU, 0x57f2dca5U, 0xe9137dfaU, 0x1394cd87U,
203
0xe11f7ffeU, 0x75c15ab4U, 0xad756cd8U, 0x6dd55cb8U,
204
0xfb08f7f3U, 0x98d4264cU, 0xdb38ffe3U, 0x9354edc7U,
205
0x874ae8cdU, 0x4e699d27U, 0xa17f6fdeU, 0x02038e01U,
206
0x64561932U, 0xbae7a05dU, 0xe71af0fdU, 0x1e11890fU,
207
0x3c220f1eU, 0x1c12070eU, 0x86c5af43U, 0xcb20fbebU,
208
0x20300810U, 0x547e152aU, 0x342e0d1aU, 0x10180408U,
209
0x04060102U, 0x8d4564c8U, 0x5bf8dfa3U, 0xc52976ecU,
210
0xf90b79f2U, 0x53f4dda7U, 0xf48e3d7aU, 0x5874162cU,
211
0xfc823f7eU, 0xdcb2376eU, 0xa9736ddaU, 0xe0903870U,
212
0xdeb1b96fU, 0xd13773e6U, 0x834ce9cfU, 0xd4be356aU,
213
0x49e355aaU, 0xd93b71e2U, 0xf1077bf6U, 0x0a0f8c05U,
214
0xd53172e4U, 0x1a17880dU, 0xff0ef6f1U, 0xa8fc2a54U,
215
0xf8843e7cU, 0x65d95ebcU, 0x9cd2274eU, 0x0589468cU,
216
0x30280c18U, 0x894365caU, 0xbd6d68d0U, 0x995b61c2U,
217
0x0c0a0306U, 0x23bcc19fU, 0x41ef57aeU, 0x7fced6b1U,
218
0x43ecd9afU, 0x7dcd58b0U, 0x47ead8adU, 0x854966ccU,
219
0x7bc8d7b3U, 0xe89c3a74U, 0x078ac88dU, 0xf0883c78U,
220
0xcf26fae9U, 0x62539631U, 0xa6f5a753U, 0x5a77982dU,
221
0x9752ecc5U, 0xdab7b86dU, 0x3ba8c793U, 0x82c3ae41U,
222
0xb96b69d2U, 0x31a74b96U, 0x96ddab4bU, 0x9ed1a94fU,
223
0x814f67ceU, 0x283c0a14U, 0x018f478eU, 0xef16f2f9U,
224
0xee99b577U, 0x88cc2244U, 0xb364e5d7U, 0x9f5eeec1U,
225
0xc2a3be61U, 0xacfa2b56U, 0x3e21811fU, 0x486c1224U,
226
0x362d831bU, 0x6c5a1b36U, 0x38240e1cU, 0x8cca2346U,
227
0xf304f5f7U, 0x0983458aU, 0x84c62142U, 0x1f9ece81U,
228
0x39ab4992U, 0xb0e82c58U, 0xc32cf9efU, 0xbf6ee6d1U,
229
0xe293b671U, 0xa0f02850U, 0x5c72172eU, 0x322b8219U,
230
0x685c1a34U, 0x161d8b0bU, 0xdf3efee1U, 0x121b8a09U,
231
0x24360912U, 0x038cc98fU, 0x26358713U, 0x25b94e9cU,
232
0xa37ce1dfU, 0xb8e42e5cU, 0xb762e4d5U, 0xa77ae0ddU,
233
0x8b40ebcbU, 0x7a47903dU, 0xaaffa455U, 0x78441e3cU,
234
0x2e398517U, 0x9d5d60c0U, 0x00000000U, 0x94de254aU,
235
0xf702f4f5U, 0xe31cf1ffU, 0x6a5f9435U, 0x2c3a0b16U,
236
0xbb68e7d3U, 0xc92375eaU, 0x9b58efc3U, 0xd0b83468U,
237
0xc4a63162U, 0x77c2d4b5U, 0x67dad0bdU, 0x22338611U,
238
0xe5197efcU, 0x8ec9ad47U, 0xd334fde7U, 0xa4f62952U,
239
0xc0a03060U, 0xec9a3b76U, 0x46659f23U, 0xc72af8edU,
240
0x3faec691U, 0x4c6a1326U, 0x1814060cU, 0x141e050aU,
241
0x33a4c597U, 0x44661122U, 0xc12f77eeU, 0xed157cf8U,
242
0xf5017af4U, 0xfd0d78f0U, 0xd8b4366cU, 0x70481c38U,
243
0xe4963972U, 0x79cb59b2U, 0x60501830U, 0x45e956acU,
244
0xf68db37bU, 0xfa87b07dU, 0x90d82448U, 0x80c02040U,
245
0xf28bb279U, 0x724b9239U, 0xb6eda35bU, 0x27bac09dU,
246
0x0d854488U, 0x955162c4U, 0x40601020U, 0xea9fb475U,
247
0x2a3f8415U, 0x11974386U, 0x764d933bU, 0x2fb6c299U,
248
0x35a14a94U, 0xcea9bd67U, 0x06058f03U, 0xb4ee2d5aU,
249
0xcaafbc65U, 0x4a6f9c25U, 0xb5616ad4U, 0x1d9d4080U,
250
0x1b98cf83U, 0xb2eba259U, 0x3a27801dU, 0x21bf4f9eU,
251
0x7c421f3eU, 0x0f86ca89U, 0x92dbaa49U, 0x15914284U,
254
static const ulong32 T3[256] = {
255
0xbbd269baU, 0xe54da854U, 0xe2bc5e2fU, 0x25cde874U,
256
0xf751a653U, 0xd06bbbd3U, 0xd66fb9d2U, 0xb3299a4dU,
257
0xfd5da050U, 0xcf8a45acU, 0x090e078dU, 0xa5c663bfU,
258
0x3ddde070U, 0xf155a452U, 0x7b52299aU, 0xb52d984cU,
259
0x468fc9eaU, 0xc473b7d5U, 0x55663397U, 0xdc63bfd1U,
260
0xaacc6633U, 0xfb59a251U, 0xc771b65bU, 0xf3a251a6U,
261
0xfe5fa1deU, 0xad3d9048U, 0xd79a4da8U, 0x715e2f99U,
262
0xe04babdbU, 0xacc86432U, 0x95e673b7U, 0x32d7e5fcU,
263
0x70abdbe3U, 0x6342219eU, 0x417e3f91U, 0x7d562b9bU,
264
0x76afd9e2U, 0xbdd66bbbU, 0x9b198241U, 0x79a5dc6eU,
265
0xf9ae57a5U, 0x800b8bcbU, 0x67b1d66bU, 0x596e3795U,
266
0xe1be5fa1U, 0x10ebfbf3U, 0x81fe7fb1U, 0x0c080402U,
267
0x921785ccU, 0xa23795c4U, 0x4e743a1dU, 0x78502814U,
268
0xb02b9bc3U, 0x5791c663U, 0xe64fa9daU, 0xd369ba5dU,
269
0xdf61be5fU, 0xf257a5dcU, 0x13e9fa7dU, 0x941387cdU,
270
0x1fe1fe7fU, 0xc175b45aU, 0x75add86cU, 0xd56db85cU,
271
0x08fbf3f7U, 0xd4984c26U, 0x38dbe3ffU, 0x5493c7edU,
272
0x4a87cde8U, 0x694e279dU, 0x7fa1de6fU, 0x0302018eU,
273
0x56643219U, 0xe7ba5da0U, 0x1ae7fdf0U, 0x111e0f89U,
274
0x223c1e0fU, 0x121c0e07U, 0xc58643afU, 0x20cbebfbU,
275
0x30201008U, 0x7e542a15U, 0x2e341a0dU, 0x18100804U,
276
0x06040201U, 0x458dc864U, 0xf85ba3dfU, 0x29c5ec76U,
277
0x0bf9f279U, 0xf453a7ddU, 0x8ef47a3dU, 0x74582c16U,
278
0x82fc7e3fU, 0xb2dc6e37U, 0x73a9da6dU, 0x90e07038U,
279
0xb1de6fb9U, 0x37d1e673U, 0x4c83cfe9U, 0xbed46a35U,
280
0xe349aa55U, 0x3bd9e271U, 0x07f1f67bU, 0x0f0a058cU,
281
0x31d5e472U, 0x171a0d88U, 0x0efff1f6U, 0xfca8542aU,
282
0x84f87c3eU, 0xd965bc5eU, 0xd29c4e27U, 0x89058c46U,
283
0x2830180cU, 0x4389ca65U, 0x6dbdd068U, 0x5b99c261U,
284
0x0a0c0603U, 0xbc239fc1U, 0xef41ae57U, 0xce7fb1d6U,
285
0xec43afd9U, 0xcd7db058U, 0xea47add8U, 0x4985cc66U,
286
0xc87bb3d7U, 0x9ce8743aU, 0x8a078dc8U, 0x88f0783cU,
287
0x26cfe9faU, 0x53623196U, 0xf5a653a7U, 0x775a2d98U,
288
0x5297c5ecU, 0xb7da6db8U, 0xa83b93c7U, 0xc38241aeU,
289
0x6bb9d269U, 0xa731964bU, 0xdd964babU, 0xd19e4fa9U,
290
0x4f81ce67U, 0x3c28140aU, 0x8f018e47U, 0x16eff9f2U,
291
0x99ee77b5U, 0xcc884422U, 0x64b3d7e5U, 0x5e9fc1eeU,
292
0xa3c261beU, 0xfaac562bU, 0x213e1f81U, 0x6c482412U,
293
0x2d361b83U, 0x5a6c361bU, 0x24381c0eU, 0xca8c4623U,
294
0x04f3f7f5U, 0x83098a45U, 0xc6844221U, 0x9e1f81ceU,
295
0xab399249U, 0xe8b0582cU, 0x2cc3eff9U, 0x6ebfd1e6U,
296
0x93e271b6U, 0xf0a05028U, 0x725c2e17U, 0x2b321982U,
297
0x5c68341aU, 0x1d160b8bU, 0x3edfe1feU, 0x1b12098aU,
298
0x36241209U, 0x8c038fc9U, 0x35261387U, 0xb9259c4eU,
299
0x7ca3dfe1U, 0xe4b85c2eU, 0x62b7d5e4U, 0x7aa7dde0U,
300
0x408bcbebU, 0x477a3d90U, 0xffaa55a4U, 0x44783c1eU,
301
0x392e1785U, 0x5d9dc060U, 0x00000000U, 0xde944a25U,
302
0x02f7f5f4U, 0x1ce3fff1U, 0x5f6a3594U, 0x3a2c160bU,
303
0x68bbd3e7U, 0x23c9ea75U, 0x589bc3efU, 0xb8d06834U,
304
0xa6c46231U, 0xc277b5d4U, 0xda67bdd0U, 0x33221186U,
305
0x19e5fc7eU, 0xc98e47adU, 0x34d3e7fdU, 0xf6a45229U,
306
0xa0c06030U, 0x9aec763bU, 0x6546239fU, 0x2ac7edf8U,
307
0xae3f91c6U, 0x6a4c2613U, 0x14180c06U, 0x1e140a05U,
308
0xa43397c5U, 0x66442211U, 0x2fc1ee77U, 0x15edf87cU,
309
0x01f5f47aU, 0x0dfdf078U, 0xb4d86c36U, 0x4870381cU,
310
0x96e47239U, 0xcb79b259U, 0x50603018U, 0xe945ac56U,
311
0x8df67bb3U, 0x87fa7db0U, 0xd8904824U, 0xc0804020U,
312
0x8bf279b2U, 0x4b723992U, 0xedb65ba3U, 0xba279dc0U,
313
0x850d8844U, 0x5195c462U, 0x60402010U, 0x9fea75b4U,
314
0x3f2a1584U, 0x97118643U, 0x4d763b93U, 0xb62f99c2U,
315
0xa135944aU, 0xa9ce67bdU, 0x0506038fU, 0xeeb45a2dU,
316
0xafca65bcU, 0x6f4a259cU, 0x61b5d46aU, 0x9d1d8040U,
317
0x981b83cfU, 0xebb259a2U, 0x273a1d80U, 0xbf219e4fU,
318
0x427c3e1fU, 0x860f89caU, 0xdb9249aaU, 0x91158442U,
321
static const ulong32 T4[256] = {
322
0xbabababaU, 0x54545454U, 0x2f2f2f2fU, 0x74747474U,
323
0x53535353U, 0xd3d3d3d3U, 0xd2d2d2d2U, 0x4d4d4d4dU,
324
0x50505050U, 0xacacacacU, 0x8d8d8d8dU, 0xbfbfbfbfU,
325
0x70707070U, 0x52525252U, 0x9a9a9a9aU, 0x4c4c4c4cU,
326
0xeaeaeaeaU, 0xd5d5d5d5U, 0x97979797U, 0xd1d1d1d1U,
327
0x33333333U, 0x51515151U, 0x5b5b5b5bU, 0xa6a6a6a6U,
328
0xdedededeU, 0x48484848U, 0xa8a8a8a8U, 0x99999999U,
329
0xdbdbdbdbU, 0x32323232U, 0xb7b7b7b7U, 0xfcfcfcfcU,
330
0xe3e3e3e3U, 0x9e9e9e9eU, 0x91919191U, 0x9b9b9b9bU,
331
0xe2e2e2e2U, 0xbbbbbbbbU, 0x41414141U, 0x6e6e6e6eU,
332
0xa5a5a5a5U, 0xcbcbcbcbU, 0x6b6b6b6bU, 0x95959595U,
333
0xa1a1a1a1U, 0xf3f3f3f3U, 0xb1b1b1b1U, 0x02020202U,
334
0xccccccccU, 0xc4c4c4c4U, 0x1d1d1d1dU, 0x14141414U,
335
0xc3c3c3c3U, 0x63636363U, 0xdadadadaU, 0x5d5d5d5dU,
336
0x5f5f5f5fU, 0xdcdcdcdcU, 0x7d7d7d7dU, 0xcdcdcdcdU,
337
0x7f7f7f7fU, 0x5a5a5a5aU, 0x6c6c6c6cU, 0x5c5c5c5cU,
338
0xf7f7f7f7U, 0x26262626U, 0xffffffffU, 0xededededU,
339
0xe8e8e8e8U, 0x9d9d9d9dU, 0x6f6f6f6fU, 0x8e8e8e8eU,
340
0x19191919U, 0xa0a0a0a0U, 0xf0f0f0f0U, 0x89898989U,
341
0x0f0f0f0fU, 0x07070707U, 0xafafafafU, 0xfbfbfbfbU,
342
0x08080808U, 0x15151515U, 0x0d0d0d0dU, 0x04040404U,
343
0x01010101U, 0x64646464U, 0xdfdfdfdfU, 0x76767676U,
344
0x79797979U, 0xddddddddU, 0x3d3d3d3dU, 0x16161616U,
345
0x3f3f3f3fU, 0x37373737U, 0x6d6d6d6dU, 0x38383838U,
346
0xb9b9b9b9U, 0x73737373U, 0xe9e9e9e9U, 0x35353535U,
347
0x55555555U, 0x71717171U, 0x7b7b7b7bU, 0x8c8c8c8cU,
348
0x72727272U, 0x88888888U, 0xf6f6f6f6U, 0x2a2a2a2aU,
349
0x3e3e3e3eU, 0x5e5e5e5eU, 0x27272727U, 0x46464646U,
350
0x0c0c0c0cU, 0x65656565U, 0x68686868U, 0x61616161U,
351
0x03030303U, 0xc1c1c1c1U, 0x57575757U, 0xd6d6d6d6U,
352
0xd9d9d9d9U, 0x58585858U, 0xd8d8d8d8U, 0x66666666U,
353
0xd7d7d7d7U, 0x3a3a3a3aU, 0xc8c8c8c8U, 0x3c3c3c3cU,
354
0xfafafafaU, 0x96969696U, 0xa7a7a7a7U, 0x98989898U,
355
0xececececU, 0xb8b8b8b8U, 0xc7c7c7c7U, 0xaeaeaeaeU,
356
0x69696969U, 0x4b4b4b4bU, 0xababababU, 0xa9a9a9a9U,
357
0x67676767U, 0x0a0a0a0aU, 0x47474747U, 0xf2f2f2f2U,
358
0xb5b5b5b5U, 0x22222222U, 0xe5e5e5e5U, 0xeeeeeeeeU,
359
0xbebebebeU, 0x2b2b2b2bU, 0x81818181U, 0x12121212U,
360
0x83838383U, 0x1b1b1b1bU, 0x0e0e0e0eU, 0x23232323U,
361
0xf5f5f5f5U, 0x45454545U, 0x21212121U, 0xcecececeU,
362
0x49494949U, 0x2c2c2c2cU, 0xf9f9f9f9U, 0xe6e6e6e6U,
363
0xb6b6b6b6U, 0x28282828U, 0x17171717U, 0x82828282U,
364
0x1a1a1a1aU, 0x8b8b8b8bU, 0xfefefefeU, 0x8a8a8a8aU,
365
0x09090909U, 0xc9c9c9c9U, 0x87878787U, 0x4e4e4e4eU,
366
0xe1e1e1e1U, 0x2e2e2e2eU, 0xe4e4e4e4U, 0xe0e0e0e0U,
367
0xebebebebU, 0x90909090U, 0xa4a4a4a4U, 0x1e1e1e1eU,
368
0x85858585U, 0x60606060U, 0x00000000U, 0x25252525U,
369
0xf4f4f4f4U, 0xf1f1f1f1U, 0x94949494U, 0x0b0b0b0bU,
370
0xe7e7e7e7U, 0x75757575U, 0xefefefefU, 0x34343434U,
371
0x31313131U, 0xd4d4d4d4U, 0xd0d0d0d0U, 0x86868686U,
372
0x7e7e7e7eU, 0xadadadadU, 0xfdfdfdfdU, 0x29292929U,
373
0x30303030U, 0x3b3b3b3bU, 0x9f9f9f9fU, 0xf8f8f8f8U,
374
0xc6c6c6c6U, 0x13131313U, 0x06060606U, 0x05050505U,
375
0xc5c5c5c5U, 0x11111111U, 0x77777777U, 0x7c7c7c7cU,
376
0x7a7a7a7aU, 0x78787878U, 0x36363636U, 0x1c1c1c1cU,
377
0x39393939U, 0x59595959U, 0x18181818U, 0x56565656U,
378
0xb3b3b3b3U, 0xb0b0b0b0U, 0x24242424U, 0x20202020U,
379
0xb2b2b2b2U, 0x92929292U, 0xa3a3a3a3U, 0xc0c0c0c0U,
380
0x44444444U, 0x62626262U, 0x10101010U, 0xb4b4b4b4U,
381
0x84848484U, 0x43434343U, 0x93939393U, 0xc2c2c2c2U,
382
0x4a4a4a4aU, 0xbdbdbdbdU, 0x8f8f8f8fU, 0x2d2d2d2dU,
383
0xbcbcbcbcU, 0x9c9c9c9cU, 0x6a6a6a6aU, 0x40404040U,
384
0xcfcfcfcfU, 0xa2a2a2a2U, 0x80808080U, 0x4f4f4f4fU,
385
0x1f1f1f1fU, 0xcacacacaU, 0xaaaaaaaaU, 0x42424242U,
388
static const ulong32 T5[256] = {
389
0x00000000U, 0x01020608U, 0x02040c10U, 0x03060a18U,
390
0x04081820U, 0x050a1e28U, 0x060c1430U, 0x070e1238U,
391
0x08103040U, 0x09123648U, 0x0a143c50U, 0x0b163a58U,
392
0x0c182860U, 0x0d1a2e68U, 0x0e1c2470U, 0x0f1e2278U,
393
0x10206080U, 0x11226688U, 0x12246c90U, 0x13266a98U,
394
0x142878a0U, 0x152a7ea8U, 0x162c74b0U, 0x172e72b8U,
395
0x183050c0U, 0x193256c8U, 0x1a345cd0U, 0x1b365ad8U,
396
0x1c3848e0U, 0x1d3a4ee8U, 0x1e3c44f0U, 0x1f3e42f8U,
397
0x2040c01dU, 0x2142c615U, 0x2244cc0dU, 0x2346ca05U,
398
0x2448d83dU, 0x254ade35U, 0x264cd42dU, 0x274ed225U,
399
0x2850f05dU, 0x2952f655U, 0x2a54fc4dU, 0x2b56fa45U,
400
0x2c58e87dU, 0x2d5aee75U, 0x2e5ce46dU, 0x2f5ee265U,
401
0x3060a09dU, 0x3162a695U, 0x3264ac8dU, 0x3366aa85U,
402
0x3468b8bdU, 0x356abeb5U, 0x366cb4adU, 0x376eb2a5U,
403
0x387090ddU, 0x397296d5U, 0x3a749ccdU, 0x3b769ac5U,
404
0x3c7888fdU, 0x3d7a8ef5U, 0x3e7c84edU, 0x3f7e82e5U,
405
0x40809d3aU, 0x41829b32U, 0x4284912aU, 0x43869722U,
406
0x4488851aU, 0x458a8312U, 0x468c890aU, 0x478e8f02U,
407
0x4890ad7aU, 0x4992ab72U, 0x4a94a16aU, 0x4b96a762U,
408
0x4c98b55aU, 0x4d9ab352U, 0x4e9cb94aU, 0x4f9ebf42U,
409
0x50a0fdbaU, 0x51a2fbb2U, 0x52a4f1aaU, 0x53a6f7a2U,
410
0x54a8e59aU, 0x55aae392U, 0x56ace98aU, 0x57aeef82U,
411
0x58b0cdfaU, 0x59b2cbf2U, 0x5ab4c1eaU, 0x5bb6c7e2U,
412
0x5cb8d5daU, 0x5dbad3d2U, 0x5ebcd9caU, 0x5fbedfc2U,
413
0x60c05d27U, 0x61c25b2fU, 0x62c45137U, 0x63c6573fU,
414
0x64c84507U, 0x65ca430fU, 0x66cc4917U, 0x67ce4f1fU,
415
0x68d06d67U, 0x69d26b6fU, 0x6ad46177U, 0x6bd6677fU,
416
0x6cd87547U, 0x6dda734fU, 0x6edc7957U, 0x6fde7f5fU,
417
0x70e03da7U, 0x71e23bafU, 0x72e431b7U, 0x73e637bfU,
418
0x74e82587U, 0x75ea238fU, 0x76ec2997U, 0x77ee2f9fU,
419
0x78f00de7U, 0x79f20befU, 0x7af401f7U, 0x7bf607ffU,
420
0x7cf815c7U, 0x7dfa13cfU, 0x7efc19d7U, 0x7ffe1fdfU,
421
0x801d2774U, 0x811f217cU, 0x82192b64U, 0x831b2d6cU,
422
0x84153f54U, 0x8517395cU, 0x86113344U, 0x8713354cU,
423
0x880d1734U, 0x890f113cU, 0x8a091b24U, 0x8b0b1d2cU,
424
0x8c050f14U, 0x8d07091cU, 0x8e010304U, 0x8f03050cU,
425
0x903d47f4U, 0x913f41fcU, 0x92394be4U, 0x933b4decU,
426
0x94355fd4U, 0x953759dcU, 0x963153c4U, 0x973355ccU,
427
0x982d77b4U, 0x992f71bcU, 0x9a297ba4U, 0x9b2b7dacU,
428
0x9c256f94U, 0x9d27699cU, 0x9e216384U, 0x9f23658cU,
429
0xa05de769U, 0xa15fe161U, 0xa259eb79U, 0xa35bed71U,
430
0xa455ff49U, 0xa557f941U, 0xa651f359U, 0xa753f551U,
431
0xa84dd729U, 0xa94fd121U, 0xaa49db39U, 0xab4bdd31U,
432
0xac45cf09U, 0xad47c901U, 0xae41c319U, 0xaf43c511U,
433
0xb07d87e9U, 0xb17f81e1U, 0xb2798bf9U, 0xb37b8df1U,
434
0xb4759fc9U, 0xb57799c1U, 0xb67193d9U, 0xb77395d1U,
435
0xb86db7a9U, 0xb96fb1a1U, 0xba69bbb9U, 0xbb6bbdb1U,
436
0xbc65af89U, 0xbd67a981U, 0xbe61a399U, 0xbf63a591U,
437
0xc09dba4eU, 0xc19fbc46U, 0xc299b65eU, 0xc39bb056U,
438
0xc495a26eU, 0xc597a466U, 0xc691ae7eU, 0xc793a876U,
439
0xc88d8a0eU, 0xc98f8c06U, 0xca89861eU, 0xcb8b8016U,
440
0xcc85922eU, 0xcd879426U, 0xce819e3eU, 0xcf839836U,
441
0xd0bddaceU, 0xd1bfdcc6U, 0xd2b9d6deU, 0xd3bbd0d6U,
442
0xd4b5c2eeU, 0xd5b7c4e6U, 0xd6b1cefeU, 0xd7b3c8f6U,
443
0xd8adea8eU, 0xd9afec86U, 0xdaa9e69eU, 0xdbabe096U,
444
0xdca5f2aeU, 0xdda7f4a6U, 0xdea1febeU, 0xdfa3f8b6U,
445
0xe0dd7a53U, 0xe1df7c5bU, 0xe2d97643U, 0xe3db704bU,
446
0xe4d56273U, 0xe5d7647bU, 0xe6d16e63U, 0xe7d3686bU,
447
0xe8cd4a13U, 0xe9cf4c1bU, 0xeac94603U, 0xebcb400bU,
448
0xecc55233U, 0xedc7543bU, 0xeec15e23U, 0xefc3582bU,
449
0xf0fd1ad3U, 0xf1ff1cdbU, 0xf2f916c3U, 0xf3fb10cbU,
450
0xf4f502f3U, 0xf5f704fbU, 0xf6f10ee3U, 0xf7f308ebU,
451
0xf8ed2a93U, 0xf9ef2c9bU, 0xfae92683U, 0xfbeb208bU,
452
0xfce532b3U, 0xfde734bbU, 0xfee13ea3U, 0xffe338abU,
456
* The round constants.
458
static const ulong32 rc[] = {
459
0xba542f74U, 0x53d3d24dU, 0x50ac8dbfU, 0x70529a4cU,
460
0xead597d1U, 0x33515ba6U, 0xde48a899U, 0xdb32b7fcU,
461
0xe39e919bU, 0xe2bb416eU, 0xa5cb6b95U, 0xa1f3b102U,
462
0xccc41d14U, 0xc363da5dU, 0x5fdc7dcdU, 0x7f5a6c5cU,
463
0xf726ffedU, 0xe89d6f8eU, 0x19a0f089U,
471
static const ulong32 T0[256] = {
472
0xa753a6f5U, 0xd3bb6bd0U, 0xe6d1bf6eU, 0x71e2d93bU,
473
0xd0bd67daU, 0xac458acfU, 0x4d9a29b3U, 0x79f2f90bU,
474
0x3a74e89cU, 0xc98f038cU, 0x913f7e41U, 0xfce5d732U,
475
0x1e3c7844U, 0x478e018fU, 0x54a84de5U, 0xbd67cea9U,
476
0x8c050a0fU, 0xa557aef9U, 0x7af4f501U, 0xfbebcb20U,
477
0x63c69157U, 0xb86ddab7U, 0xdda753f4U, 0xd4b577c2U,
478
0xe5d7b364U, 0xb37bf68dU, 0xc59733a4U, 0xbe61c2a3U,
479
0xa94f9ed1U, 0x880d1a17U, 0x0c183028U, 0xa259b2ebU,
480
0x3972e496U, 0xdfa35bf8U, 0x2952a4f6U, 0xdaa94fe6U,
481
0x2b56acfaU, 0xa84d9ad7U, 0xcb8b0b80U, 0x4c982db5U,
482
0x4b9631a7U, 0x224488ccU, 0xaa4992dbU, 0x244890d8U,
483
0x4182199bU, 0x70e0dd3dU, 0xa651a2f3U, 0xf9efc32cU,
484
0x5ab475c1U, 0xe2d9af76U, 0xb07dfa87U, 0x366cd8b4U,
485
0x7dfae913U, 0xe4d5b762U, 0x3366ccaaU, 0xffe3db38U,
486
0x60c09d5dU, 0x204080c0U, 0x08102030U, 0x8b0b161dU,
487
0x5ebc65d9U, 0xab4b96ddU, 0x7ffee11fU, 0x78f0fd0dU,
488
0x7cf8ed15U, 0x2c58b0e8U, 0x57ae41efU, 0xd2b96fd6U,
489
0xdca557f2U, 0x6ddaa973U, 0x7efce519U, 0x0d1a342eU,
490
0x53a651f7U, 0x94356a5fU, 0xc39b2bb0U, 0x2850a0f0U,
491
0x274e9cd2U, 0x060c1814U, 0x5fbe61dfU, 0xad478ec9U,
492
0x67ce814fU, 0x5cb86dd5U, 0x55aa49e3U, 0x48903dadU,
493
0x0e1c3824U, 0x52a455f1U, 0xeac98f46U, 0x42841591U,
494
0x5bb671c7U, 0x5dba69d3U, 0x3060c0a0U, 0x58b07dcdU,
495
0x51a259fbU, 0x59b279cbU, 0x3c78f088U, 0x4e9c25b9U,
496
0x3870e090U, 0x8a09121bU, 0x72e4d531U, 0x14285078U,
497
0xe7d3bb68U, 0xc6913faeU, 0xdea15ffeU, 0x50a05dfdU,
498
0x8e010203U, 0x9239724bU, 0xd1bf63dcU, 0x77eec12fU,
499
0x933b764dU, 0x458a0983U, 0x9a29527bU, 0xce811f9eU,
500
0x2d5ab4eeU, 0x03060c0aU, 0x62c49551U, 0xb671e293U,
501
0xb96fdeb1U, 0xbf63c6a5U, 0x96316253U, 0x6bd6b167U,
502
0x3f7efc82U, 0x070e1c12U, 0x1224486cU, 0xae4182c3U,
503
0x40801d9dU, 0x3468d0b8U, 0x468c0589U, 0x3e7cf884U,
504
0xdbab4be0U, 0xcf831b98U, 0xecc59752U, 0xcc851792U,
505
0xc19f23bcU, 0xa15fbee1U, 0xc09d27baU, 0xd6b17fceU,
506
0x1d3a744eU, 0xf4f5f702U, 0x61c2995bU, 0x3b76ec9aU,
507
0x10204060U, 0xd8ad47eaU, 0x68d0bd6dU, 0xa05dbae7U,
508
0xb17ffe81U, 0x0a14283cU, 0x69d2b96bU, 0x6cd8ad75U,
509
0x499239abU, 0xfae9cf26U, 0x76ecc529U, 0xc49537a2U,
510
0x9e214263U, 0x9b2b567dU, 0x6edca579U, 0x992f5e71U,
511
0xc2992fb6U, 0xb773e695U, 0x982d5a77U, 0xbc65caafU,
512
0x8f030605U, 0x85172e39U, 0x1f3e7c42U, 0xb475ea9fU,
513
0xf8edc72aU, 0x11224466U, 0x2e5cb8e4U, 0x00000000U,
514
0x254a94deU, 0x1c387048U, 0x2a54a8fcU, 0x3d7af48eU,
515
0x050a141eU, 0x4f9e21bfU, 0x7bf6f107U, 0xb279f28bU,
516
0x3264c8acU, 0x903d7a47U, 0xaf4386c5U, 0x19326456U,
517
0xa35bb6edU, 0xf7f3fb08U, 0x73e6d137U, 0x9d274e69U,
518
0x152a547eU, 0x74e8cd25U, 0xeec19f5eU, 0xca890f86U,
519
0x9f234665U, 0x0f1e3c22U, 0x1b366c5aU, 0x75eac923U,
520
0x86112233U, 0x84152a3fU, 0x9c254a6fU, 0x4a9435a1U,
521
0x97336655U, 0x1a34685cU, 0x65ca8943U, 0xf6f1ff0eU,
522
0xedc79354U, 0x09122436U, 0xbb6bd6bdU, 0x264c98d4U,
523
0x831b362dU, 0xebcb8b40U, 0x6fdea17fU, 0x811f3e21U,
524
0x04081018U, 0x6ad4b561U, 0x43861197U, 0x01020406U,
525
0x172e5c72U, 0xe1dfa37cU, 0x87132635U, 0xf5f7f304U,
526
0x8d070e09U, 0xe3dbab70U, 0x23468ccaU, 0x801d3a27U,
527
0x44880d85U, 0x162c5874U, 0x66cc8549U, 0x214284c6U,
528
0xfee1df3eU, 0xd5b773c4U, 0x3162c4a6U, 0xd9af43ecU,
529
0x356ad4beU, 0x18306050U, 0x0204080cU, 0x64c88d45U,
530
0xf2f9ef16U, 0xf1ffe31cU, 0x56ac45e9U, 0xcd871394U,
531
0x8219322bU, 0xc88d078aU, 0xba69d2bbU, 0xf0fde71aU,
532
0xefc39b58U, 0xe9cf834cU, 0xe8cd874aU, 0xfde7d334U,
533
0x890f1e11U, 0xd7b37bc8U, 0xc7933ba8U, 0xb577ee99U,
534
0xa455aaffU, 0x2f5ebce2U, 0x95376e59U, 0x13264c6aU,
535
0x0b162c3aU, 0xf3fbeb10U, 0xe0dda77aU, 0x376edcb2U,
538
static const ulong32 T1[256] = {
539
0x53a7f5a6U, 0xbbd3d06bU, 0xd1e66ebfU, 0xe2713bd9U,
540
0xbdd0da67U, 0x45accf8aU, 0x9a4db329U, 0xf2790bf9U,
541
0x743a9ce8U, 0x8fc98c03U, 0x3f91417eU, 0xe5fc32d7U,
542
0x3c1e4478U, 0x8e478f01U, 0xa854e54dU, 0x67bda9ceU,
543
0x058c0f0aU, 0x57a5f9aeU, 0xf47a01f5U, 0xebfb20cbU,
544
0xc6635791U, 0x6db8b7daU, 0xa7ddf453U, 0xb5d4c277U,
545
0xd7e564b3U, 0x7bb38df6U, 0x97c5a433U, 0x61bea3c2U,
546
0x4fa9d19eU, 0x0d88171aU, 0x180c2830U, 0x59a2ebb2U,
547
0x723996e4U, 0xa3dff85bU, 0x5229f6a4U, 0xa9dae64fU,
548
0x562bfaacU, 0x4da8d79aU, 0x8bcb800bU, 0x984cb52dU,
549
0x964ba731U, 0x4422cc88U, 0x49aadb92U, 0x4824d890U,
550
0x82419b19U, 0xe0703dddU, 0x51a6f3a2U, 0xeff92cc3U,
551
0xb45ac175U, 0xd9e276afU, 0x7db087faU, 0x6c36b4d8U,
552
0xfa7d13e9U, 0xd5e462b7U, 0x6633aaccU, 0xe3ff38dbU,
553
0xc0605d9dU, 0x4020c080U, 0x10083020U, 0x0b8b1d16U,
554
0xbc5ed965U, 0x4babdd96U, 0xfe7f1fe1U, 0xf0780dfdU,
555
0xf87c15edU, 0x582ce8b0U, 0xae57ef41U, 0xb9d2d66fU,
556
0xa5dcf257U, 0xda6d73a9U, 0xfc7e19e5U, 0x1a0d2e34U,
557
0xa653f751U, 0x35945f6aU, 0x9bc3b02bU, 0x5028f0a0U,
558
0x4e27d29cU, 0x0c061418U, 0xbe5fdf61U, 0x47adc98eU,
559
0xce674f81U, 0xb85cd56dU, 0xaa55e349U, 0x9048ad3dU,
560
0x1c0e2438U, 0xa452f155U, 0xc9ea468fU, 0x84429115U,
561
0xb65bc771U, 0xba5dd369U, 0x6030a0c0U, 0xb058cd7dU,
562
0xa251fb59U, 0xb259cb79U, 0x783c88f0U, 0x9c4eb925U,
563
0x703890e0U, 0x098a1b12U, 0xe47231d5U, 0x28147850U,
564
0xd3e768bbU, 0x91c6ae3fU, 0xa1defe5fU, 0xa050fd5dU,
565
0x018e0302U, 0x39924b72U, 0xbfd1dc63U, 0xee772fc1U,
566
0x3b934d76U, 0x8a458309U, 0x299a7b52U, 0x81ce9e1fU,
567
0x5a2deeb4U, 0x06030a0cU, 0xc4625195U, 0x71b693e2U,
568
0x6fb9b1deU, 0x63bfa5c6U, 0x31965362U, 0xd66b67b1U,
569
0x7e3f82fcU, 0x0e07121cU, 0x24126c48U, 0x41aec382U,
570
0x80409d1dU, 0x6834b8d0U, 0x8c468905U, 0x7c3e84f8U,
571
0xabdbe04bU, 0x83cf981bU, 0xc5ec5297U, 0x85cc9217U,
572
0x9fc1bc23U, 0x5fa1e1beU, 0x9dc0ba27U, 0xb1d6ce7fU,
573
0x3a1d4e74U, 0xf5f402f7U, 0xc2615b99U, 0x763b9aecU,
574
0x20106040U, 0xadd8ea47U, 0xd0686dbdU, 0x5da0e7baU,
575
0x7fb181feU, 0x140a3c28U, 0xd2696bb9U, 0xd86c75adU,
576
0x9249ab39U, 0xe9fa26cfU, 0xec7629c5U, 0x95c4a237U,
577
0x219e6342U, 0x2b9b7d56U, 0xdc6e79a5U, 0x2f99715eU,
578
0x99c2b62fU, 0x73b795e6U, 0x2d98775aU, 0x65bcafcaU,
579
0x038f0506U, 0x1785392eU, 0x3e1f427cU, 0x75b49feaU,
580
0xedf82ac7U, 0x22116644U, 0x5c2ee4b8U, 0x00000000U,
581
0x4a25de94U, 0x381c4870U, 0x542afca8U, 0x7a3d8ef4U,
582
0x0a051e14U, 0x9e4fbf21U, 0xf67b07f1U, 0x79b28bf2U,
583
0x6432acc8U, 0x3d90477aU, 0x43afc586U, 0x32195664U,
584
0x5ba3edb6U, 0xf3f708fbU, 0xe67337d1U, 0x279d694eU,
585
0x2a157e54U, 0xe87425cdU, 0xc1ee5e9fU, 0x89ca860fU,
586
0x239f6546U, 0x1e0f223cU, 0x361b5a6cU, 0xea7523c9U,
587
0x11863322U, 0x15843f2aU, 0x259c6f4aU, 0x944aa135U,
588
0x33975566U, 0x341a5c68U, 0xca654389U, 0xf1f60effU,
589
0xc7ed5493U, 0x12093624U, 0x6bbbbdd6U, 0x4c26d498U,
590
0x1b832d36U, 0xcbeb408bU, 0xde6f7fa1U, 0x1f81213eU,
591
0x08041810U, 0xd46a61b5U, 0x86439711U, 0x02010604U,
592
0x2e17725cU, 0xdfe17ca3U, 0x13873526U, 0xf7f504f3U,
593
0x078d090eU, 0xdbe370abU, 0x4623ca8cU, 0x1d80273aU,
594
0x8844850dU, 0x2c167458U, 0xcc664985U, 0x4221c684U,
595
0xe1fe3edfU, 0xb7d5c473U, 0x6231a6c4U, 0xafd9ec43U,
596
0x6a35bed4U, 0x30185060U, 0x04020c08U, 0xc864458dU,
597
0xf9f216efU, 0xfff11ce3U, 0xac56e945U, 0x87cd9413U,
598
0x19822b32U, 0x8dc88a07U, 0x69babbd2U, 0xfdf01ae7U,
599
0xc3ef589bU, 0xcfe94c83U, 0xcde84a87U, 0xe7fd34d3U,
600
0x0f89111eU, 0xb3d7c87bU, 0x93c7a83bU, 0x77b599eeU,
601
0x55a4ffaaU, 0x5e2fe2bcU, 0x3795596eU, 0x26136a4cU,
602
0x160b3a2cU, 0xfbf310ebU, 0xdde07aa7U, 0x6e37b2dcU,
605
static const ulong32 T2[256] = {
606
0xa6f5a753U, 0x6bd0d3bbU, 0xbf6ee6d1U, 0xd93b71e2U,
607
0x67dad0bdU, 0x8acfac45U, 0x29b34d9aU, 0xf90b79f2U,
608
0xe89c3a74U, 0x038cc98fU, 0x7e41913fU, 0xd732fce5U,
609
0x78441e3cU, 0x018f478eU, 0x4de554a8U, 0xcea9bd67U,
610
0x0a0f8c05U, 0xaef9a557U, 0xf5017af4U, 0xcb20fbebU,
611
0x915763c6U, 0xdab7b86dU, 0x53f4dda7U, 0x77c2d4b5U,
612
0xb364e5d7U, 0xf68db37bU, 0x33a4c597U, 0xc2a3be61U,
613
0x9ed1a94fU, 0x1a17880dU, 0x30280c18U, 0xb2eba259U,
614
0xe4963972U, 0x5bf8dfa3U, 0xa4f62952U, 0x4fe6daa9U,
615
0xacfa2b56U, 0x9ad7a84dU, 0x0b80cb8bU, 0x2db54c98U,
616
0x31a74b96U, 0x88cc2244U, 0x92dbaa49U, 0x90d82448U,
617
0x199b4182U, 0xdd3d70e0U, 0xa2f3a651U, 0xc32cf9efU,
618
0x75c15ab4U, 0xaf76e2d9U, 0xfa87b07dU, 0xd8b4366cU,
619
0xe9137dfaU, 0xb762e4d5U, 0xccaa3366U, 0xdb38ffe3U,
620
0x9d5d60c0U, 0x80c02040U, 0x20300810U, 0x161d8b0bU,
621
0x65d95ebcU, 0x96ddab4bU, 0xe11f7ffeU, 0xfd0d78f0U,
622
0xed157cf8U, 0xb0e82c58U, 0x41ef57aeU, 0x6fd6d2b9U,
623
0x57f2dca5U, 0xa9736ddaU, 0xe5197efcU, 0x342e0d1aU,
624
0x51f753a6U, 0x6a5f9435U, 0x2bb0c39bU, 0xa0f02850U,
625
0x9cd2274eU, 0x1814060cU, 0x61df5fbeU, 0x8ec9ad47U,
626
0x814f67ceU, 0x6dd55cb8U, 0x49e355aaU, 0x3dad4890U,
627
0x38240e1cU, 0x55f152a4U, 0x8f46eac9U, 0x15914284U,
628
0x71c75bb6U, 0x69d35dbaU, 0xc0a03060U, 0x7dcd58b0U,
629
0x59fb51a2U, 0x79cb59b2U, 0xf0883c78U, 0x25b94e9cU,
630
0xe0903870U, 0x121b8a09U, 0xd53172e4U, 0x50781428U,
631
0xbb68e7d3U, 0x3faec691U, 0x5ffedea1U, 0x5dfd50a0U,
632
0x02038e01U, 0x724b9239U, 0x63dcd1bfU, 0xc12f77eeU,
633
0x764d933bU, 0x0983458aU, 0x527b9a29U, 0x1f9ece81U,
634
0xb4ee2d5aU, 0x0c0a0306U, 0x955162c4U, 0xe293b671U,
635
0xdeb1b96fU, 0xc6a5bf63U, 0x62539631U, 0xb1676bd6U,
636
0xfc823f7eU, 0x1c12070eU, 0x486c1224U, 0x82c3ae41U,
637
0x1d9d4080U, 0xd0b83468U, 0x0589468cU, 0xf8843e7cU,
638
0x4be0dbabU, 0x1b98cf83U, 0x9752ecc5U, 0x1792cc85U,
639
0x23bcc19fU, 0xbee1a15fU, 0x27bac09dU, 0x7fced6b1U,
640
0x744e1d3aU, 0xf702f4f5U, 0x995b61c2U, 0xec9a3b76U,
641
0x40601020U, 0x47ead8adU, 0xbd6d68d0U, 0xbae7a05dU,
642
0xfe81b17fU, 0x283c0a14U, 0xb96b69d2U, 0xad756cd8U,
643
0x39ab4992U, 0xcf26fae9U, 0xc52976ecU, 0x37a2c495U,
644
0x42639e21U, 0x567d9b2bU, 0xa5796edcU, 0x5e71992fU,
645
0x2fb6c299U, 0xe695b773U, 0x5a77982dU, 0xcaafbc65U,
646
0x06058f03U, 0x2e398517U, 0x7c421f3eU, 0xea9fb475U,
647
0xc72af8edU, 0x44661122U, 0xb8e42e5cU, 0x00000000U,
648
0x94de254aU, 0x70481c38U, 0xa8fc2a54U, 0xf48e3d7aU,
649
0x141e050aU, 0x21bf4f9eU, 0xf1077bf6U, 0xf28bb279U,
650
0xc8ac3264U, 0x7a47903dU, 0x86c5af43U, 0x64561932U,
651
0xb6eda35bU, 0xfb08f7f3U, 0xd13773e6U, 0x4e699d27U,
652
0x547e152aU, 0xcd2574e8U, 0x9f5eeec1U, 0x0f86ca89U,
653
0x46659f23U, 0x3c220f1eU, 0x6c5a1b36U, 0xc92375eaU,
654
0x22338611U, 0x2a3f8415U, 0x4a6f9c25U, 0x35a14a94U,
655
0x66559733U, 0x685c1a34U, 0x894365caU, 0xff0ef6f1U,
656
0x9354edc7U, 0x24360912U, 0xd6bdbb6bU, 0x98d4264cU,
657
0x362d831bU, 0x8b40ebcbU, 0xa17f6fdeU, 0x3e21811fU,
658
0x10180408U, 0xb5616ad4U, 0x11974386U, 0x04060102U,
659
0x5c72172eU, 0xa37ce1dfU, 0x26358713U, 0xf304f5f7U,
660
0x0e098d07U, 0xab70e3dbU, 0x8cca2346U, 0x3a27801dU,
661
0x0d854488U, 0x5874162cU, 0x854966ccU, 0x84c62142U,
662
0xdf3efee1U, 0x73c4d5b7U, 0xc4a63162U, 0x43ecd9afU,
663
0xd4be356aU, 0x60501830U, 0x080c0204U, 0x8d4564c8U,
664
0xef16f2f9U, 0xe31cf1ffU, 0x45e956acU, 0x1394cd87U,
665
0x322b8219U, 0x078ac88dU, 0xd2bbba69U, 0xe71af0fdU,
666
0x9b58efc3U, 0x834ce9cfU, 0x874ae8cdU, 0xd334fde7U,
667
0x1e11890fU, 0x7bc8d7b3U, 0x3ba8c793U, 0xee99b577U,
668
0xaaffa455U, 0xbce22f5eU, 0x6e599537U, 0x4c6a1326U,
669
0x2c3a0b16U, 0xeb10f3fbU, 0xa77ae0ddU, 0xdcb2376eU,
672
static const ulong32 T3[256] = {
673
0xf5a653a7U, 0xd06bbbd3U, 0x6ebfd1e6U, 0x3bd9e271U,
674
0xda67bdd0U, 0xcf8a45acU, 0xb3299a4dU, 0x0bf9f279U,
675
0x9ce8743aU, 0x8c038fc9U, 0x417e3f91U, 0x32d7e5fcU,
676
0x44783c1eU, 0x8f018e47U, 0xe54da854U, 0xa9ce67bdU,
677
0x0f0a058cU, 0xf9ae57a5U, 0x01f5f47aU, 0x20cbebfbU,
678
0x5791c663U, 0xb7da6db8U, 0xf453a7ddU, 0xc277b5d4U,
679
0x64b3d7e5U, 0x8df67bb3U, 0xa43397c5U, 0xa3c261beU,
680
0xd19e4fa9U, 0x171a0d88U, 0x2830180cU, 0xebb259a2U,
681
0x96e47239U, 0xf85ba3dfU, 0xf6a45229U, 0xe64fa9daU,
682
0xfaac562bU, 0xd79a4da8U, 0x800b8bcbU, 0xb52d984cU,
683
0xa731964bU, 0xcc884422U, 0xdb9249aaU, 0xd8904824U,
684
0x9b198241U, 0x3ddde070U, 0xf3a251a6U, 0x2cc3eff9U,
685
0xc175b45aU, 0x76afd9e2U, 0x87fa7db0U, 0xb4d86c36U,
686
0x13e9fa7dU, 0x62b7d5e4U, 0xaacc6633U, 0x38dbe3ffU,
687
0x5d9dc060U, 0xc0804020U, 0x30201008U, 0x1d160b8bU,
688
0xd965bc5eU, 0xdd964babU, 0x1fe1fe7fU, 0x0dfdf078U,
689
0x15edf87cU, 0xe8b0582cU, 0xef41ae57U, 0xd66fb9d2U,
690
0xf257a5dcU, 0x73a9da6dU, 0x19e5fc7eU, 0x2e341a0dU,
691
0xf751a653U, 0x5f6a3594U, 0xb02b9bc3U, 0xf0a05028U,
692
0xd29c4e27U, 0x14180c06U, 0xdf61be5fU, 0xc98e47adU,
693
0x4f81ce67U, 0xd56db85cU, 0xe349aa55U, 0xad3d9048U,
694
0x24381c0eU, 0xf155a452U, 0x468fc9eaU, 0x91158442U,
695
0xc771b65bU, 0xd369ba5dU, 0xa0c06030U, 0xcd7db058U,
696
0xfb59a251U, 0xcb79b259U, 0x88f0783cU, 0xb9259c4eU,
697
0x90e07038U, 0x1b12098aU, 0x31d5e472U, 0x78502814U,
698
0x68bbd3e7U, 0xae3f91c6U, 0xfe5fa1deU, 0xfd5da050U,
699
0x0302018eU, 0x4b723992U, 0xdc63bfd1U, 0x2fc1ee77U,
700
0x4d763b93U, 0x83098a45U, 0x7b52299aU, 0x9e1f81ceU,
701
0xeeb45a2dU, 0x0a0c0603U, 0x5195c462U, 0x93e271b6U,
702
0xb1de6fb9U, 0xa5c663bfU, 0x53623196U, 0x67b1d66bU,
703
0x82fc7e3fU, 0x121c0e07U, 0x6c482412U, 0xc38241aeU,
704
0x9d1d8040U, 0xb8d06834U, 0x89058c46U, 0x84f87c3eU,
705
0xe04babdbU, 0x981b83cfU, 0x5297c5ecU, 0x921785ccU,
706
0xbc239fc1U, 0xe1be5fa1U, 0xba279dc0U, 0xce7fb1d6U,
707
0x4e743a1dU, 0x02f7f5f4U, 0x5b99c261U, 0x9aec763bU,
708
0x60402010U, 0xea47add8U, 0x6dbdd068U, 0xe7ba5da0U,
709
0x81fe7fb1U, 0x3c28140aU, 0x6bb9d269U, 0x75add86cU,
710
0xab399249U, 0x26cfe9faU, 0x29c5ec76U, 0xa23795c4U,
711
0x6342219eU, 0x7d562b9bU, 0x79a5dc6eU, 0x715e2f99U,
712
0xb62f99c2U, 0x95e673b7U, 0x775a2d98U, 0xafca65bcU,
713
0x0506038fU, 0x392e1785U, 0x427c3e1fU, 0x9fea75b4U,
714
0x2ac7edf8U, 0x66442211U, 0xe4b85c2eU, 0x00000000U,
715
0xde944a25U, 0x4870381cU, 0xfca8542aU, 0x8ef47a3dU,
716
0x1e140a05U, 0xbf219e4fU, 0x07f1f67bU, 0x8bf279b2U,
717
0xacc86432U, 0x477a3d90U, 0xc58643afU, 0x56643219U,
718
0xedb65ba3U, 0x08fbf3f7U, 0x37d1e673U, 0x694e279dU,
719
0x7e542a15U, 0x25cde874U, 0x5e9fc1eeU, 0x860f89caU,
720
0x6546239fU, 0x223c1e0fU, 0x5a6c361bU, 0x23c9ea75U,
721
0x33221186U, 0x3f2a1584U, 0x6f4a259cU, 0xa135944aU,
722
0x55663397U, 0x5c68341aU, 0x4389ca65U, 0x0efff1f6U,
723
0x5493c7edU, 0x36241209U, 0xbdd66bbbU, 0xd4984c26U,
724
0x2d361b83U, 0x408bcbebU, 0x7fa1de6fU, 0x213e1f81U,
725
0x18100804U, 0x61b5d46aU, 0x97118643U, 0x06040201U,
726
0x725c2e17U, 0x7ca3dfe1U, 0x35261387U, 0x04f3f7f5U,
727
0x090e078dU, 0x70abdbe3U, 0xca8c4623U, 0x273a1d80U,
728
0x850d8844U, 0x74582c16U, 0x4985cc66U, 0xc6844221U,
729
0x3edfe1feU, 0xc473b7d5U, 0xa6c46231U, 0xec43afd9U,
730
0xbed46a35U, 0x50603018U, 0x0c080402U, 0x458dc864U,
731
0x16eff9f2U, 0x1ce3fff1U, 0xe945ac56U, 0x941387cdU,
732
0x2b321982U, 0x8a078dc8U, 0xbbd269baU, 0x1ae7fdf0U,
733
0x589bc3efU, 0x4c83cfe9U, 0x4a87cde8U, 0x34d3e7fdU,
734
0x111e0f89U, 0xc87bb3d7U, 0xa83b93c7U, 0x99ee77b5U,
735
0xffaa55a4U, 0xe2bc5e2fU, 0x596e3795U, 0x6a4c2613U,
736
0x3a2c160bU, 0x10ebfbf3U, 0x7aa7dde0U, 0xb2dc6e37U,
739
static const ulong32 T4[256] = {
740
0xa7a7a7a7U, 0xd3d3d3d3U, 0xe6e6e6e6U, 0x71717171U,
741
0xd0d0d0d0U, 0xacacacacU, 0x4d4d4d4dU, 0x79797979U,
742
0x3a3a3a3aU, 0xc9c9c9c9U, 0x91919191U, 0xfcfcfcfcU,
743
0x1e1e1e1eU, 0x47474747U, 0x54545454U, 0xbdbdbdbdU,
744
0x8c8c8c8cU, 0xa5a5a5a5U, 0x7a7a7a7aU, 0xfbfbfbfbU,
745
0x63636363U, 0xb8b8b8b8U, 0xddddddddU, 0xd4d4d4d4U,
746
0xe5e5e5e5U, 0xb3b3b3b3U, 0xc5c5c5c5U, 0xbebebebeU,
747
0xa9a9a9a9U, 0x88888888U, 0x0c0c0c0cU, 0xa2a2a2a2U,
748
0x39393939U, 0xdfdfdfdfU, 0x29292929U, 0xdadadadaU,
749
0x2b2b2b2bU, 0xa8a8a8a8U, 0xcbcbcbcbU, 0x4c4c4c4cU,
750
0x4b4b4b4bU, 0x22222222U, 0xaaaaaaaaU, 0x24242424U,
751
0x41414141U, 0x70707070U, 0xa6a6a6a6U, 0xf9f9f9f9U,
752
0x5a5a5a5aU, 0xe2e2e2e2U, 0xb0b0b0b0U, 0x36363636U,
753
0x7d7d7d7dU, 0xe4e4e4e4U, 0x33333333U, 0xffffffffU,
754
0x60606060U, 0x20202020U, 0x08080808U, 0x8b8b8b8bU,
755
0x5e5e5e5eU, 0xababababU, 0x7f7f7f7fU, 0x78787878U,
756
0x7c7c7c7cU, 0x2c2c2c2cU, 0x57575757U, 0xd2d2d2d2U,
757
0xdcdcdcdcU, 0x6d6d6d6dU, 0x7e7e7e7eU, 0x0d0d0d0dU,
758
0x53535353U, 0x94949494U, 0xc3c3c3c3U, 0x28282828U,
759
0x27272727U, 0x06060606U, 0x5f5f5f5fU, 0xadadadadU,
760
0x67676767U, 0x5c5c5c5cU, 0x55555555U, 0x48484848U,
761
0x0e0e0e0eU, 0x52525252U, 0xeaeaeaeaU, 0x42424242U,
762
0x5b5b5b5bU, 0x5d5d5d5dU, 0x30303030U, 0x58585858U,
763
0x51515151U, 0x59595959U, 0x3c3c3c3cU, 0x4e4e4e4eU,
764
0x38383838U, 0x8a8a8a8aU, 0x72727272U, 0x14141414U,
765
0xe7e7e7e7U, 0xc6c6c6c6U, 0xdedededeU, 0x50505050U,
766
0x8e8e8e8eU, 0x92929292U, 0xd1d1d1d1U, 0x77777777U,
767
0x93939393U, 0x45454545U, 0x9a9a9a9aU, 0xcecececeU,
768
0x2d2d2d2dU, 0x03030303U, 0x62626262U, 0xb6b6b6b6U,
769
0xb9b9b9b9U, 0xbfbfbfbfU, 0x96969696U, 0x6b6b6b6bU,
770
0x3f3f3f3fU, 0x07070707U, 0x12121212U, 0xaeaeaeaeU,
771
0x40404040U, 0x34343434U, 0x46464646U, 0x3e3e3e3eU,
772
0xdbdbdbdbU, 0xcfcfcfcfU, 0xececececU, 0xccccccccU,
773
0xc1c1c1c1U, 0xa1a1a1a1U, 0xc0c0c0c0U, 0xd6d6d6d6U,
774
0x1d1d1d1dU, 0xf4f4f4f4U, 0x61616161U, 0x3b3b3b3bU,
775
0x10101010U, 0xd8d8d8d8U, 0x68686868U, 0xa0a0a0a0U,
776
0xb1b1b1b1U, 0x0a0a0a0aU, 0x69696969U, 0x6c6c6c6cU,
777
0x49494949U, 0xfafafafaU, 0x76767676U, 0xc4c4c4c4U,
778
0x9e9e9e9eU, 0x9b9b9b9bU, 0x6e6e6e6eU, 0x99999999U,
779
0xc2c2c2c2U, 0xb7b7b7b7U, 0x98989898U, 0xbcbcbcbcU,
780
0x8f8f8f8fU, 0x85858585U, 0x1f1f1f1fU, 0xb4b4b4b4U,
781
0xf8f8f8f8U, 0x11111111U, 0x2e2e2e2eU, 0x00000000U,
782
0x25252525U, 0x1c1c1c1cU, 0x2a2a2a2aU, 0x3d3d3d3dU,
783
0x05050505U, 0x4f4f4f4fU, 0x7b7b7b7bU, 0xb2b2b2b2U,
784
0x32323232U, 0x90909090U, 0xafafafafU, 0x19191919U,
785
0xa3a3a3a3U, 0xf7f7f7f7U, 0x73737373U, 0x9d9d9d9dU,
786
0x15151515U, 0x74747474U, 0xeeeeeeeeU, 0xcacacacaU,
787
0x9f9f9f9fU, 0x0f0f0f0fU, 0x1b1b1b1bU, 0x75757575U,
788
0x86868686U, 0x84848484U, 0x9c9c9c9cU, 0x4a4a4a4aU,
789
0x97979797U, 0x1a1a1a1aU, 0x65656565U, 0xf6f6f6f6U,
790
0xededededU, 0x09090909U, 0xbbbbbbbbU, 0x26262626U,
791
0x83838383U, 0xebebebebU, 0x6f6f6f6fU, 0x81818181U,
792
0x04040404U, 0x6a6a6a6aU, 0x43434343U, 0x01010101U,
793
0x17171717U, 0xe1e1e1e1U, 0x87878787U, 0xf5f5f5f5U,
794
0x8d8d8d8dU, 0xe3e3e3e3U, 0x23232323U, 0x80808080U,
795
0x44444444U, 0x16161616U, 0x66666666U, 0x21212121U,
796
0xfefefefeU, 0xd5d5d5d5U, 0x31313131U, 0xd9d9d9d9U,
797
0x35353535U, 0x18181818U, 0x02020202U, 0x64646464U,
798
0xf2f2f2f2U, 0xf1f1f1f1U, 0x56565656U, 0xcdcdcdcdU,
799
0x82828282U, 0xc8c8c8c8U, 0xbabababaU, 0xf0f0f0f0U,
800
0xefefefefU, 0xe9e9e9e9U, 0xe8e8e8e8U, 0xfdfdfdfdU,
801
0x89898989U, 0xd7d7d7d7U, 0xc7c7c7c7U, 0xb5b5b5b5U,
802
0xa4a4a4a4U, 0x2f2f2f2fU, 0x95959595U, 0x13131313U,
803
0x0b0b0b0bU, 0xf3f3f3f3U, 0xe0e0e0e0U, 0x37373737U,
806
static const ulong32 T5[256] = {
807
0x00000000U, 0x01020608U, 0x02040c10U, 0x03060a18U,
808
0x04081820U, 0x050a1e28U, 0x060c1430U, 0x070e1238U,
809
0x08103040U, 0x09123648U, 0x0a143c50U, 0x0b163a58U,
810
0x0c182860U, 0x0d1a2e68U, 0x0e1c2470U, 0x0f1e2278U,
811
0x10206080U, 0x11226688U, 0x12246c90U, 0x13266a98U,
812
0x142878a0U, 0x152a7ea8U, 0x162c74b0U, 0x172e72b8U,
813
0x183050c0U, 0x193256c8U, 0x1a345cd0U, 0x1b365ad8U,
814
0x1c3848e0U, 0x1d3a4ee8U, 0x1e3c44f0U, 0x1f3e42f8U,
815
0x2040c01dU, 0x2142c615U, 0x2244cc0dU, 0x2346ca05U,
816
0x2448d83dU, 0x254ade35U, 0x264cd42dU, 0x274ed225U,
817
0x2850f05dU, 0x2952f655U, 0x2a54fc4dU, 0x2b56fa45U,
818
0x2c58e87dU, 0x2d5aee75U, 0x2e5ce46dU, 0x2f5ee265U,
819
0x3060a09dU, 0x3162a695U, 0x3264ac8dU, 0x3366aa85U,
820
0x3468b8bdU, 0x356abeb5U, 0x366cb4adU, 0x376eb2a5U,
821
0x387090ddU, 0x397296d5U, 0x3a749ccdU, 0x3b769ac5U,
822
0x3c7888fdU, 0x3d7a8ef5U, 0x3e7c84edU, 0x3f7e82e5U,
823
0x40809d3aU, 0x41829b32U, 0x4284912aU, 0x43869722U,
824
0x4488851aU, 0x458a8312U, 0x468c890aU, 0x478e8f02U,
825
0x4890ad7aU, 0x4992ab72U, 0x4a94a16aU, 0x4b96a762U,
826
0x4c98b55aU, 0x4d9ab352U, 0x4e9cb94aU, 0x4f9ebf42U,
827
0x50a0fdbaU, 0x51a2fbb2U, 0x52a4f1aaU, 0x53a6f7a2U,
828
0x54a8e59aU, 0x55aae392U, 0x56ace98aU, 0x57aeef82U,
829
0x58b0cdfaU, 0x59b2cbf2U, 0x5ab4c1eaU, 0x5bb6c7e2U,
830
0x5cb8d5daU, 0x5dbad3d2U, 0x5ebcd9caU, 0x5fbedfc2U,
831
0x60c05d27U, 0x61c25b2fU, 0x62c45137U, 0x63c6573fU,
832
0x64c84507U, 0x65ca430fU, 0x66cc4917U, 0x67ce4f1fU,
833
0x68d06d67U, 0x69d26b6fU, 0x6ad46177U, 0x6bd6677fU,
834
0x6cd87547U, 0x6dda734fU, 0x6edc7957U, 0x6fde7f5fU,
835
0x70e03da7U, 0x71e23bafU, 0x72e431b7U, 0x73e637bfU,
836
0x74e82587U, 0x75ea238fU, 0x76ec2997U, 0x77ee2f9fU,
837
0x78f00de7U, 0x79f20befU, 0x7af401f7U, 0x7bf607ffU,
838
0x7cf815c7U, 0x7dfa13cfU, 0x7efc19d7U, 0x7ffe1fdfU,
839
0x801d2774U, 0x811f217cU, 0x82192b64U, 0x831b2d6cU,
840
0x84153f54U, 0x8517395cU, 0x86113344U, 0x8713354cU,
841
0x880d1734U, 0x890f113cU, 0x8a091b24U, 0x8b0b1d2cU,
842
0x8c050f14U, 0x8d07091cU, 0x8e010304U, 0x8f03050cU,
843
0x903d47f4U, 0x913f41fcU, 0x92394be4U, 0x933b4decU,
844
0x94355fd4U, 0x953759dcU, 0x963153c4U, 0x973355ccU,
845
0x982d77b4U, 0x992f71bcU, 0x9a297ba4U, 0x9b2b7dacU,
846
0x9c256f94U, 0x9d27699cU, 0x9e216384U, 0x9f23658cU,
847
0xa05de769U, 0xa15fe161U, 0xa259eb79U, 0xa35bed71U,
848
0xa455ff49U, 0xa557f941U, 0xa651f359U, 0xa753f551U,
849
0xa84dd729U, 0xa94fd121U, 0xaa49db39U, 0xab4bdd31U,
850
0xac45cf09U, 0xad47c901U, 0xae41c319U, 0xaf43c511U,
851
0xb07d87e9U, 0xb17f81e1U, 0xb2798bf9U, 0xb37b8df1U,
852
0xb4759fc9U, 0xb57799c1U, 0xb67193d9U, 0xb77395d1U,
853
0xb86db7a9U, 0xb96fb1a1U, 0xba69bbb9U, 0xbb6bbdb1U,
854
0xbc65af89U, 0xbd67a981U, 0xbe61a399U, 0xbf63a591U,
855
0xc09dba4eU, 0xc19fbc46U, 0xc299b65eU, 0xc39bb056U,
856
0xc495a26eU, 0xc597a466U, 0xc691ae7eU, 0xc793a876U,
857
0xc88d8a0eU, 0xc98f8c06U, 0xca89861eU, 0xcb8b8016U,
858
0xcc85922eU, 0xcd879426U, 0xce819e3eU, 0xcf839836U,
859
0xd0bddaceU, 0xd1bfdcc6U, 0xd2b9d6deU, 0xd3bbd0d6U,
860
0xd4b5c2eeU, 0xd5b7c4e6U, 0xd6b1cefeU, 0xd7b3c8f6U,
861
0xd8adea8eU, 0xd9afec86U, 0xdaa9e69eU, 0xdbabe096U,
862
0xdca5f2aeU, 0xdda7f4a6U, 0xdea1febeU, 0xdfa3f8b6U,
863
0xe0dd7a53U, 0xe1df7c5bU, 0xe2d97643U, 0xe3db704bU,
864
0xe4d56273U, 0xe5d7647bU, 0xe6d16e63U, 0xe7d3686bU,
865
0xe8cd4a13U, 0xe9cf4c1bU, 0xeac94603U, 0xebcb400bU,
866
0xecc55233U, 0xedc7543bU, 0xeec15e23U, 0xefc3582bU,
867
0xf0fd1ad3U, 0xf1ff1cdbU, 0xf2f916c3U, 0xf3fb10cbU,
868
0xf4f502f3U, 0xf5f704fbU, 0xf6f10ee3U, 0xf7f308ebU,
869
0xf8ed2a93U, 0xf9ef2c9bU, 0xfae92683U, 0xfbeb208bU,
870
0xfce532b3U, 0xfde734bbU, 0xfee13ea3U, 0xffe338abU,
874
* The round constants.
876
static const ulong32 rc[] = {
877
0xa7d3e671U, 0xd0ac4d79U, 0x3ac991fcU, 0x1e4754bdU,
878
0x8ca57afbU, 0x63b8ddd4U, 0xe5b3c5beU, 0xa9880ca2U,
879
0x39df29daU, 0x2ba8cb4cU, 0x4b22aa24U, 0x4170a6f9U,
880
0x5ae2b036U, 0x7de433ffU, 0x6020088bU, 0x5eab7f78U,
881
0x7c2c57d2U, 0xdc6d7e0dU, 0x5394c328U,
887
Initialize the Anubis block cipher
888
@param key The symmetric key you wish to pass
889
@param keylen The key length in bytes
890
@param num_rounds The number of rounds desired (0 for default)
891
@param skey The key in as scheduled by this function.
892
@return CRYPT_OK if successful
895
static int _anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey)
897
int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey)
901
ulong32 kappa[MAX_N];
902
ulong32 inter[MAX_N];
903
ulong32 v, K0, K1, K2, K3;
905
LTC_ARGCHK(key != NULL);
906
LTC_ARGCHK(skey != NULL);
908
/* Valid sizes (in bytes) are 16, 20, 24, 28, 32, 36, and 40. */
909
if ((keylen & 3) || (keylen < 16) || (keylen > 40)) {
910
return CRYPT_INVALID_KEYSIZE;
912
skey->anubis.keyBits = keylen*8;
915
* determine the N length parameter:
916
* (N.B. it is assumed that the key length is valid!)
918
N = skey->anubis.keyBits >> 5;
921
* determine number of rounds from key size:
923
skey->anubis.R = R = 8 + N;
925
if (num_rounds != 0 && num_rounds != skey->anubis.R) {
926
return CRYPT_INVALID_ROUNDS;
930
* map cipher key to initial key state (mu):
932
for (i = 0, pos = 0; i < N; i++, pos += 4) {
935
(key[pos + 1] << 16) ^
936
(key[pos + 2] << 8) ^
941
* generate R + 1 round keys:
943
for (r = 0; r <= R; r++) {
945
* generate r-th round key K^r:
947
K0 = T4[(kappa[N - 1] >> 24) ];
948
K1 = T4[(kappa[N - 1] >> 16) & 0xff];
949
K2 = T4[(kappa[N - 1] >> 8) & 0xff];
950
K3 = T4[(kappa[N - 1] ) & 0xff];
951
for (i = N - 2; i >= 0; i--) {
952
K0 = T4[(kappa[i] >> 24) ] ^
953
(T5[(K0 >> 24) ] & 0xff000000U) ^
954
(T5[(K0 >> 16) & 0xff] & 0x00ff0000U) ^
955
(T5[(K0 >> 8) & 0xff] & 0x0000ff00U) ^
956
(T5[(K0 ) & 0xff] & 0x000000ffU);
957
K1 = T4[(kappa[i] >> 16) & 0xff] ^
958
(T5[(K1 >> 24) ] & 0xff000000U) ^
959
(T5[(K1 >> 16) & 0xff] & 0x00ff0000U) ^
960
(T5[(K1 >> 8) & 0xff] & 0x0000ff00U) ^
961
(T5[(K1 ) & 0xff] & 0x000000ffU);
962
K2 = T4[(kappa[i] >> 8) & 0xff] ^
963
(T5[(K2 >> 24) ] & 0xff000000U) ^
964
(T5[(K2 >> 16) & 0xff] & 0x00ff0000U) ^
965
(T5[(K2 >> 8) & 0xff] & 0x0000ff00U) ^
966
(T5[(K2 ) & 0xff] & 0x000000ffU);
967
K3 = T4[(kappa[i] ) & 0xff] ^
968
(T5[(K3 >> 24) ] & 0xff000000U) ^
969
(T5[(K3 >> 16) & 0xff] & 0x00ff0000U) ^
970
(T5[(K3 >> 8) & 0xff] & 0x0000ff00U) ^
971
(T5[(K3 ) & 0xff] & 0x000000ffU);
974
-- this is the code to use with the large U tables:
975
K0 = K1 = K2 = K3 = 0;
976
for (i = 0; i < N; i++) {
977
K0 ^= U[i][(kappa[i] >> 24) ];
978
K1 ^= U[i][(kappa[i] >> 16) & 0xff];
979
K2 ^= U[i][(kappa[i] >> 8) & 0xff];
980
K3 ^= U[i][(kappa[i] ) & 0xff];
983
skey->anubis.roundKeyEnc[r][0] = K0;
984
skey->anubis.roundKeyEnc[r][1] = K1;
985
skey->anubis.roundKeyEnc[r][2] = K2;
986
skey->anubis.roundKeyEnc[r][3] = K3;
989
* compute kappa^{r+1} from kappa^r:
994
for (i = 0; i < N; i++) {
996
inter[i] = T0[(kappa[j--] >> 24) ]; if (j < 0) j = N - 1;
997
inter[i] ^= T1[(kappa[j--] >> 16) & 0xff]; if (j < 0) j = N - 1;
998
inter[i] ^= T2[(kappa[j--] >> 8) & 0xff]; if (j < 0) j = N - 1;
999
inter[i] ^= T3[(kappa[j ] ) & 0xff];
1001
kappa[0] = inter[0] ^ rc[r];
1002
for (i = 1; i < N; i++) {
1003
kappa[i] = inter[i];
1008
* generate inverse key schedule: K'^0 = K^R, K'^R = K^0, K'^r = theta(K^{R-r}):
1010
for (i = 0; i < 4; i++) {
1011
skey->anubis.roundKeyDec[0][i] = skey->anubis.roundKeyEnc[R][i];
1012
skey->anubis.roundKeyDec[R][i] = skey->anubis.roundKeyEnc[0][i];
1014
for (r = 1; r < R; r++) {
1015
for (i = 0; i < 4; i++) {
1016
v = skey->anubis.roundKeyEnc[R - r][i];
1017
skey->anubis.roundKeyDec[r][i] =
1018
T0[T4[(v >> 24) ] & 0xff] ^
1019
T1[T4[(v >> 16) & 0xff] & 0xff] ^
1020
T2[T4[(v >> 8) & 0xff] & 0xff] ^
1021
T3[T4[(v ) & 0xff] & 0xff];
1029
int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey)
1032
err = _anubis_setup(key, keylen, num_rounds, skey);
1033
burn_stack(sizeof(int) * 5 + sizeof(ulong32) * (MAX_N + MAX_N + 5));
1039
static void anubis_crypt(const unsigned char *plaintext, unsigned char *ciphertext,
1040
ulong32 roundKey[18 + 1][4], int R) {
1046
* map plaintext block to cipher state (mu)
1047
* and add initial round key (sigma[K^0]):
1049
for (i = 0, pos = 0; i < 4; i++, pos += 4) {
1051
(plaintext[pos ] << 24) ^
1052
(plaintext[pos + 1] << 16) ^
1053
(plaintext[pos + 2] << 8) ^
1054
(plaintext[pos + 3] ) ^
1059
* R - 1 full rounds:
1061
for (r = 1; r < R; r++) {
1063
T0[(state[0] >> 24) ] ^
1064
T1[(state[1] >> 24) ] ^
1065
T2[(state[2] >> 24) ] ^
1066
T3[(state[3] >> 24) ] ^
1069
T0[(state[0] >> 16) & 0xff] ^
1070
T1[(state[1] >> 16) & 0xff] ^
1071
T2[(state[2] >> 16) & 0xff] ^
1072
T3[(state[3] >> 16) & 0xff] ^
1075
T0[(state[0] >> 8) & 0xff] ^
1076
T1[(state[1] >> 8) & 0xff] ^
1077
T2[(state[2] >> 8) & 0xff] ^
1078
T3[(state[3] >> 8) & 0xff] ^
1081
T0[(state[0] ) & 0xff] ^
1082
T1[(state[1] ) & 0xff] ^
1083
T2[(state[2] ) & 0xff] ^
1084
T3[(state[3] ) & 0xff] ^
1086
state[0] = inter[0];
1087
state[1] = inter[1];
1088
state[2] = inter[2];
1089
state[3] = inter[3];
1096
(T0[(state[0] >> 24) ] & 0xff000000U) ^
1097
(T1[(state[1] >> 24) ] & 0x00ff0000U) ^
1098
(T2[(state[2] >> 24) ] & 0x0000ff00U) ^
1099
(T3[(state[3] >> 24) ] & 0x000000ffU) ^
1102
(T0[(state[0] >> 16) & 0xff] & 0xff000000U) ^
1103
(T1[(state[1] >> 16) & 0xff] & 0x00ff0000U) ^
1104
(T2[(state[2] >> 16) & 0xff] & 0x0000ff00U) ^
1105
(T3[(state[3] >> 16) & 0xff] & 0x000000ffU) ^
1108
(T0[(state[0] >> 8) & 0xff] & 0xff000000U) ^
1109
(T1[(state[1] >> 8) & 0xff] & 0x00ff0000U) ^
1110
(T2[(state[2] >> 8) & 0xff] & 0x0000ff00U) ^
1111
(T3[(state[3] >> 8) & 0xff] & 0x000000ffU) ^
1114
(T0[(state[0] ) & 0xff] & 0xff000000U) ^
1115
(T1[(state[1] ) & 0xff] & 0x00ff0000U) ^
1116
(T2[(state[2] ) & 0xff] & 0x0000ff00U) ^
1117
(T3[(state[3] ) & 0xff] & 0x000000ffU) ^
1121
* map cipher state to ciphertext block (mu^{-1}):
1123
for (i = 0, pos = 0; i < 4; i++, pos += 4) {
1124
ulong32 w = inter[i];
1125
ciphertext[pos ] = (unsigned char)(w >> 24);
1126
ciphertext[pos + 1] = (unsigned char)(w >> 16);
1127
ciphertext[pos + 2] = (unsigned char)(w >> 8);
1128
ciphertext[pos + 3] = (unsigned char)(w );
1133
Encrypts a block of text with Anubis
1134
@param pt The input plaintext (16 bytes)
1135
@param ct The output ciphertext (16 bytes)
1136
@param skey The key as scheduled
1138
void anubis_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
1140
LTC_ARGCHK(pt != NULL);
1141
LTC_ARGCHK(ct != NULL);
1142
LTC_ARGCHK(skey != NULL);
1143
anubis_crypt(pt, ct, skey->anubis.roundKeyEnc, skey->anubis.R);
1147
Decrypts a block of text with Anubis
1148
@param ct The input ciphertext (16 bytes)
1149
@param pt The output plaintext (16 bytes)
1150
@param skey The key as scheduled
1152
void anubis_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
1154
LTC_ARGCHK(pt != NULL);
1155
LTC_ARGCHK(ct != NULL);
1156
LTC_ARGCHK(skey != NULL);
1157
anubis_crypt(ct, pt, skey->anubis.roundKeyDec, skey->anubis.R);
1161
Performs a self-test of the Anubis block cipher
1162
@return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled
1164
int anubis_test(void)
1166
#if !defined(LTC_TEST)
1169
static const struct test {
1171
unsigned char pt[16], ct[16], key[40];
1173
#ifndef ANUBIS_TWEAK
1174
/**** ORIGINAL ANUBIS ****/
1178
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1179
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1180
{ 0xF0, 0x68, 0x60, 0xFC, 0x67, 0x30, 0xE8, 0x18,
1181
0xF1, 0x32, 0xC7, 0x8A, 0xF4, 0x13, 0x2A, 0xFE },
1182
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1183
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1186
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1187
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1188
{ 0xA8, 0x66, 0x84, 0x80, 0x07, 0x74, 0x5C, 0x89,
1189
0xFC, 0x5E, 0xB5, 0xBA, 0xD4, 0xFE, 0x32, 0x6D },
1190
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1191
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1197
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1198
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1199
{ 0xBD, 0x5E, 0x32, 0xBE, 0x51, 0x67, 0xA8, 0xE2,
1200
0x72, 0xD7, 0x95, 0x0F, 0x83, 0xC6, 0x8C, 0x31 },
1201
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1202
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1203
0x00, 0x00, 0x00, 0x00 }
1206
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1207
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1208
{ 0x4C, 0x1F, 0x86, 0x2E, 0x11, 0xEB, 0xCE, 0xEB,
1209
0xFE, 0xB9, 0x73, 0xC9, 0xDF, 0xEF, 0x7A, 0xDB },
1210
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1211
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1212
0x00, 0x00, 0x00, 0x01 }
1218
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1219
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1220
{ 0x17, 0xAC, 0x57, 0x44, 0x9D, 0x59, 0x61, 0x66,
1221
0xD0, 0xC7, 0x9E, 0x04, 0x7C, 0xC7, 0x58, 0xF0 },
1222
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1223
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1224
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1227
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1228
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1229
{ 0x71, 0x52, 0xB4, 0xEB, 0x1D, 0xAA, 0x36, 0xFD,
1230
0x57, 0x14, 0x5F, 0x57, 0x04, 0x9F, 0x70, 0x74 },
1231
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1232
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1233
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1239
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1240
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1241
{ 0xA2, 0xF0, 0xA6, 0xB9, 0x17, 0x93, 0x2A, 0x3B,
1242
0xEF, 0x08, 0xE8, 0x7A, 0x58, 0xD6, 0xF8, 0x53 },
1243
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1244
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1245
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1246
0x00, 0x00, 0x00, 0x00 }
1249
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1250
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1251
{ 0xF0, 0xCA, 0xFC, 0x78, 0x8B, 0x4B, 0x4E, 0x53,
1252
0x8B, 0xC4, 0x32, 0x6A, 0xF5, 0xB9, 0x1B, 0x5F },
1253
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1254
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1255
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1256
0x00, 0x00, 0x00, 0x01 }
1262
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1263
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1264
{ 0xE0, 0x86, 0xAC, 0x45, 0x6B, 0x3C, 0xE5, 0x13,
1265
0xED, 0xF5, 0xDF, 0xDD, 0xD6, 0x3B, 0x71, 0x93 },
1266
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1267
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1268
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1269
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1272
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1273
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1274
{ 0x50, 0x01, 0xB9, 0xF5, 0x21, 0xC1, 0xC1, 0x29,
1275
0x00, 0xD5, 0xEC, 0x98, 0x2B, 0x9E, 0xE8, 0x21 },
1276
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1277
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1278
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1279
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1285
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1286
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1287
{ 0xE8, 0xF4, 0xAF, 0x2B, 0x21, 0xA0, 0x87, 0x9B,
1288
0x41, 0x95, 0xB9, 0x71, 0x75, 0x79, 0x04, 0x7C },
1289
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1290
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1291
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1292
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1293
0x00, 0x00, 0x00, 0x00 }
1296
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1297
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1298
{ 0xE6, 0xA6, 0xA5, 0xBC, 0x8B, 0x63, 0x6F, 0xE2,
1299
0xBD, 0xA7, 0xA7, 0x53, 0xAB, 0x40, 0x22, 0xE0 },
1300
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1301
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1302
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1303
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1304
0x00, 0x00, 0x00, 0x01 }
1310
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1311
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1312
{ 0x17, 0x04, 0xD7, 0x2C, 0xC6, 0x85, 0x76, 0x02,
1313
0x4B, 0xCC, 0x39, 0x80, 0xD8, 0x22, 0xEA, 0xA4 },
1314
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1315
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1316
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1317
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1318
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1321
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1322
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1323
{ 0x7A, 0x41, 0xE6, 0x7D, 0x4F, 0xD8, 0x64, 0xF0,
1324
0x44, 0xA8, 0x3C, 0x73, 0x81, 0x7E, 0x53, 0xD8 },
1325
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1326
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1327
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1328
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1329
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1332
/**** Tweaked ANUBIS ****/
1336
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1337
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1338
{ 0xB8, 0x35, 0xBD, 0xC3, 0x34, 0x82, 0x9D, 0x83,
1339
0x71, 0xBF, 0xA3, 0x71, 0xE4, 0xB3, 0xC4, 0xFD },
1340
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1341
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1344
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1345
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1346
{ 0xE6, 0x14, 0x1E, 0xAF, 0xEB, 0xE0, 0x59, 0x3C,
1347
0x48, 0xE1, 0xCD, 0xF2, 0x1B, 0xBA, 0xA1, 0x89 },
1348
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1349
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1355
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1356
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1357
{ 0x97, 0x59, 0x79, 0x4B, 0x5C, 0xA0, 0x70, 0x73,
1358
0x24, 0xEF, 0xB3, 0x58, 0x67, 0xCA, 0xD4, 0xB3 },
1359
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1360
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1361
0x00, 0x00, 0x00, 0x00 }
1364
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1365
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1366
{ 0xB8, 0x0D, 0xFB, 0x9B, 0xE4, 0xA1, 0x58, 0x87,
1367
0xB3, 0x76, 0xD5, 0x02, 0x18, 0x95, 0xC1, 0x2E },
1368
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1369
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1370
0x00, 0x00, 0x00, 0x01 }
1376
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1377
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1378
{ 0x7D, 0x62, 0x3B, 0x52, 0xC7, 0x4C, 0x64, 0xD8,
1379
0xEB, 0xC7, 0x2D, 0x57, 0x97, 0x85, 0x43, 0x8F },
1380
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1381
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1382
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1385
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1386
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1387
{ 0xB1, 0x0A, 0x59, 0xDD, 0x5D, 0x5D, 0x8D, 0x67,
1388
0xEC, 0xEE, 0x4A, 0xC4, 0xBE, 0x4F, 0xA8, 0x4F },
1389
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1390
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1391
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1397
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1398
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1399
{ 0x68, 0x9E, 0x05, 0x94, 0x6A, 0x94, 0x43, 0x8F,
1400
0xE7, 0x8E, 0x37, 0x3D, 0x24, 0x97, 0x92, 0xF5 },
1401
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1402
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1403
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1404
0x00, 0x00, 0x00, 0x00 }
1407
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1408
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1409
{ 0xDD, 0xB7, 0xB0, 0xB4, 0xE9, 0xB4, 0x9B, 0x9C,
1410
0x38, 0x20, 0x25, 0x0B, 0x47, 0xC2, 0x1F, 0x89 },
1411
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1412
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1413
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1414
0x00, 0x00, 0x00, 0x01 }
1420
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1421
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1422
{ 0x96, 0x00, 0xF0, 0x76, 0x91, 0x69, 0x29, 0x87,
1423
0xF5, 0xE5, 0x97, 0xDB, 0xDB, 0xAF, 0x1B, 0x0A },
1424
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1425
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1426
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1427
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1430
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1431
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1432
{ 0x69, 0x9C, 0xAF, 0xDD, 0x94, 0xC7, 0xBC, 0x60,
1433
0x44, 0xFE, 0x02, 0x05, 0x8A, 0x6E, 0xEF, 0xBD },
1434
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1435
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1436
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1437
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1443
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1444
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1445
{ 0x0F, 0xC7, 0xA2, 0xC0, 0x11, 0x17, 0xAC, 0x43,
1446
0x52, 0x5E, 0xDF, 0x6C, 0xF3, 0x96, 0x33, 0x6C },
1447
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1448
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1449
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1450
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1451
0x00, 0x00, 0x00, 0x00 }
1454
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1455
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1456
{ 0xAD, 0x08, 0x4F, 0xED, 0x55, 0xA6, 0x94, 0x3E,
1457
0x7E, 0x5E, 0xED, 0x05, 0xA1, 0x9D, 0x41, 0xB4 },
1458
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1459
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1460
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1461
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1462
0x00, 0x00, 0x00, 0x01 }
1468
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1469
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1470
{ 0xFE, 0xE2, 0x0E, 0x2A, 0x9D, 0xC5, 0x83, 0xBA,
1471
0xA3, 0xA6, 0xD6, 0xA6, 0xF2, 0xE8, 0x06, 0xA5 },
1472
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1473
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1474
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1475
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1476
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1479
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1480
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1481
{ 0x86, 0x3D, 0xCC, 0x4A, 0x60, 0x34, 0x9C, 0x28,
1482
0xA7, 0xDA, 0xA4, 0x3B, 0x0A, 0xD7, 0xFD, 0xC7 },
1483
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1484
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1485
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1486
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1487
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1492
unsigned char buf[2][16];
1495
for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) {
1496
anubis_setup(tests[x].key, tests[x].keylen, 0, &skey);
1497
anubis_ecb_encrypt(tests[x].pt, buf[0], &skey);
1498
anubis_ecb_decrypt(buf[0], buf[1], &skey);
1499
if (memcmp(buf[0], tests[x].ct, 16) || memcmp(buf[1], tests[x].pt, 16)) {
1500
return CRYPT_FAIL_TESTVECTOR;
1503
for (y = 0; y < 1000; y++) anubis_ecb_encrypt(buf[0], buf[0], &skey);
1504
for (y = 0; y < 1000; y++) anubis_ecb_decrypt(buf[0], buf[0], &skey);
1505
if (memcmp(buf[0], tests[x].ct, 16)) {
1506
return CRYPT_FAIL_TESTVECTOR;
1514
/** Terminate the context
1515
@param skey The scheduled key
1517
void anubis_done(symmetric_key *skey)
1522
Gets suitable key size
1523
@param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable.
1524
@return CRYPT_OK if the input key size is acceptable.
1526
int anubis_keysize(int *keysize)
1528
LTC_ARGCHK(keysize != NULL);
1529
if (*keysize >= 40) {
1531
} else if (*keysize >= 36) {
1533
} else if (*keysize >= 32) {
1535
} else if (*keysize >= 28) {
1537
} else if (*keysize >= 24) {
1539
} else if (*keysize >= 20) {
1541
} else if (*keysize >= 16) {
1544
return CRYPT_INVALID_KEYSIZE;
1
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
3
* LibTomCrypt is a library that provides various cryptographic
4
* algorithms in a highly modular and flexible manner.
6
* The library is free for all purposes without any express
9
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
14
Anubis implementation derived from public domain source
15
Authors: Paulo S.L.M. Barreto and Vincent Rijmen.
22
const struct ltc_cipher_descriptor anubis_desc = {
32
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
37
#define MIN_ROUNDS (8 + MIN_N)
38
#define MAX_ROUNDS (8 + MAX_N)
39
#define MIN_KEYSIZEB (4*MIN_N)
40
#define MAX_KEYSIZEB (4*MAX_N)
42
#define BLOCKSIZEB (BLOCKSIZE/8)
46
* Though Anubis is endianness-neutral, the encryption tables are listed
47
* in BIG-ENDIAN format, which is adopted throughout this implementation
48
* (but little-endian notation would be equally suitable if consistently
51
#if defined(ANUBIS_TWEAK)
53
static const ulong32 T0[256] = {
54
0xba69d2bbU, 0x54a84de5U, 0x2f5ebce2U, 0x74e8cd25U,
55
0x53a651f7U, 0xd3bb6bd0U, 0xd2b96fd6U, 0x4d9a29b3U,
56
0x50a05dfdU, 0xac458acfU, 0x8d070e09U, 0xbf63c6a5U,
57
0x70e0dd3dU, 0x52a455f1U, 0x9a29527bU, 0x4c982db5U,
58
0xeac98f46U, 0xd5b773c4U, 0x97336655U, 0xd1bf63dcU,
59
0x3366ccaaU, 0x51a259fbU, 0x5bb671c7U, 0xa651a2f3U,
60
0xdea15ffeU, 0x48903dadU, 0xa84d9ad7U, 0x992f5e71U,
61
0xdbab4be0U, 0x3264c8acU, 0xb773e695U, 0xfce5d732U,
62
0xe3dbab70U, 0x9e214263U, 0x913f7e41U, 0x9b2b567dU,
63
0xe2d9af76U, 0xbb6bd6bdU, 0x4182199bU, 0x6edca579U,
64
0xa557aef9U, 0xcb8b0b80U, 0x6bd6b167U, 0x95376e59U,
65
0xa15fbee1U, 0xf3fbeb10U, 0xb17ffe81U, 0x0204080cU,
66
0xcc851792U, 0xc49537a2U, 0x1d3a744eU, 0x14285078U,
67
0xc39b2bb0U, 0x63c69157U, 0xdaa94fe6U, 0x5dba69d3U,
68
0x5fbe61dfU, 0xdca557f2U, 0x7dfae913U, 0xcd871394U,
69
0x7ffee11fU, 0x5ab475c1U, 0x6cd8ad75U, 0x5cb86dd5U,
70
0xf7f3fb08U, 0x264c98d4U, 0xffe3db38U, 0xedc79354U,
71
0xe8cd874aU, 0x9d274e69U, 0x6fdea17fU, 0x8e010203U,
72
0x19326456U, 0xa05dbae7U, 0xf0fde71aU, 0x890f1e11U,
73
0x0f1e3c22U, 0x070e1c12U, 0xaf4386c5U, 0xfbebcb20U,
74
0x08102030U, 0x152a547eU, 0x0d1a342eU, 0x04081018U,
75
0x01020406U, 0x64c88d45U, 0xdfa35bf8U, 0x76ecc529U,
76
0x79f2f90bU, 0xdda753f4U, 0x3d7af48eU, 0x162c5874U,
77
0x3f7efc82U, 0x376edcb2U, 0x6ddaa973U, 0x3870e090U,
78
0xb96fdeb1U, 0x73e6d137U, 0xe9cf834cU, 0x356ad4beU,
79
0x55aa49e3U, 0x71e2d93bU, 0x7bf6f107U, 0x8c050a0fU,
80
0x72e4d531U, 0x880d1a17U, 0xf6f1ff0eU, 0x2a54a8fcU,
81
0x3e7cf884U, 0x5ebc65d9U, 0x274e9cd2U, 0x468c0589U,
82
0x0c183028U, 0x65ca8943U, 0x68d0bd6dU, 0x61c2995bU,
83
0x03060c0aU, 0xc19f23bcU, 0x57ae41efU, 0xd6b17fceU,
84
0xd9af43ecU, 0x58b07dcdU, 0xd8ad47eaU, 0x66cc8549U,
85
0xd7b37bc8U, 0x3a74e89cU, 0xc88d078aU, 0x3c78f088U,
86
0xfae9cf26U, 0x96316253U, 0xa753a6f5U, 0x982d5a77U,
87
0xecc59752U, 0xb86ddab7U, 0xc7933ba8U, 0xae4182c3U,
88
0x69d2b96bU, 0x4b9631a7U, 0xab4b96ddU, 0xa94f9ed1U,
89
0x67ce814fU, 0x0a14283cU, 0x478e018fU, 0xf2f9ef16U,
90
0xb577ee99U, 0x224488ccU, 0xe5d7b364U, 0xeec19f5eU,
91
0xbe61c2a3U, 0x2b56acfaU, 0x811f3e21U, 0x1224486cU,
92
0x831b362dU, 0x1b366c5aU, 0x0e1c3824U, 0x23468ccaU,
93
0xf5f7f304U, 0x458a0983U, 0x214284c6U, 0xce811f9eU,
94
0x499239abU, 0x2c58b0e8U, 0xf9efc32cU, 0xe6d1bf6eU,
95
0xb671e293U, 0x2850a0f0U, 0x172e5c72U, 0x8219322bU,
96
0x1a34685cU, 0x8b0b161dU, 0xfee1df3eU, 0x8a09121bU,
97
0x09122436U, 0xc98f038cU, 0x87132635U, 0x4e9c25b9U,
98
0xe1dfa37cU, 0x2e5cb8e4U, 0xe4d5b762U, 0xe0dda77aU,
99
0xebcb8b40U, 0x903d7a47U, 0xa455aaffU, 0x1e3c7844U,
100
0x85172e39U, 0x60c09d5dU, 0x00000000U, 0x254a94deU,
101
0xf4f5f702U, 0xf1ffe31cU, 0x94356a5fU, 0x0b162c3aU,
102
0xe7d3bb68U, 0x75eac923U, 0xefc39b58U, 0x3468d0b8U,
103
0x3162c4a6U, 0xd4b577c2U, 0xd0bd67daU, 0x86112233U,
104
0x7efce519U, 0xad478ec9U, 0xfde7d334U, 0x2952a4f6U,
105
0x3060c0a0U, 0x3b76ec9aU, 0x9f234665U, 0xf8edc72aU,
106
0xc6913faeU, 0x13264c6aU, 0x060c1814U, 0x050a141eU,
107
0xc59733a4U, 0x11224466U, 0x77eec12fU, 0x7cf8ed15U,
108
0x7af4f501U, 0x78f0fd0dU, 0x366cd8b4U, 0x1c387048U,
109
0x3972e496U, 0x59b279cbU, 0x18306050U, 0x56ac45e9U,
110
0xb37bf68dU, 0xb07dfa87U, 0x244890d8U, 0x204080c0U,
111
0xb279f28bU, 0x9239724bU, 0xa35bb6edU, 0xc09d27baU,
112
0x44880d85U, 0x62c49551U, 0x10204060U, 0xb475ea9fU,
113
0x84152a3fU, 0x43861197U, 0x933b764dU, 0xc2992fb6U,
114
0x4a9435a1U, 0xbd67cea9U, 0x8f030605U, 0x2d5ab4eeU,
115
0xbc65caafU, 0x9c254a6fU, 0x6ad4b561U, 0x40801d9dU,
116
0xcf831b98U, 0xa259b2ebU, 0x801d3a27U, 0x4f9e21bfU,
117
0x1f3e7c42U, 0xca890f86U, 0xaa4992dbU, 0x42841591U,
120
static const ulong32 T1[256] = {
121
0x69babbd2U, 0xa854e54dU, 0x5e2fe2bcU, 0xe87425cdU,
122
0xa653f751U, 0xbbd3d06bU, 0xb9d2d66fU, 0x9a4db329U,
123
0xa050fd5dU, 0x45accf8aU, 0x078d090eU, 0x63bfa5c6U,
124
0xe0703dddU, 0xa452f155U, 0x299a7b52U, 0x984cb52dU,
125
0xc9ea468fU, 0xb7d5c473U, 0x33975566U, 0xbfd1dc63U,
126
0x6633aaccU, 0xa251fb59U, 0xb65bc771U, 0x51a6f3a2U,
127
0xa1defe5fU, 0x9048ad3dU, 0x4da8d79aU, 0x2f99715eU,
128
0xabdbe04bU, 0x6432acc8U, 0x73b795e6U, 0xe5fc32d7U,
129
0xdbe370abU, 0x219e6342U, 0x3f91417eU, 0x2b9b7d56U,
130
0xd9e276afU, 0x6bbbbdd6U, 0x82419b19U, 0xdc6e79a5U,
131
0x57a5f9aeU, 0x8bcb800bU, 0xd66b67b1U, 0x3795596eU,
132
0x5fa1e1beU, 0xfbf310ebU, 0x7fb181feU, 0x04020c08U,
133
0x85cc9217U, 0x95c4a237U, 0x3a1d4e74U, 0x28147850U,
134
0x9bc3b02bU, 0xc6635791U, 0xa9dae64fU, 0xba5dd369U,
135
0xbe5fdf61U, 0xa5dcf257U, 0xfa7d13e9U, 0x87cd9413U,
136
0xfe7f1fe1U, 0xb45ac175U, 0xd86c75adU, 0xb85cd56dU,
137
0xf3f708fbU, 0x4c26d498U, 0xe3ff38dbU, 0xc7ed5493U,
138
0xcde84a87U, 0x279d694eU, 0xde6f7fa1U, 0x018e0302U,
139
0x32195664U, 0x5da0e7baU, 0xfdf01ae7U, 0x0f89111eU,
140
0x1e0f223cU, 0x0e07121cU, 0x43afc586U, 0xebfb20cbU,
141
0x10083020U, 0x2a157e54U, 0x1a0d2e34U, 0x08041810U,
142
0x02010604U, 0xc864458dU, 0xa3dff85bU, 0xec7629c5U,
143
0xf2790bf9U, 0xa7ddf453U, 0x7a3d8ef4U, 0x2c167458U,
144
0x7e3f82fcU, 0x6e37b2dcU, 0xda6d73a9U, 0x703890e0U,
145
0x6fb9b1deU, 0xe67337d1U, 0xcfe94c83U, 0x6a35bed4U,
146
0xaa55e349U, 0xe2713bd9U, 0xf67b07f1U, 0x058c0f0aU,
147
0xe47231d5U, 0x0d88171aU, 0xf1f60effU, 0x542afca8U,
148
0x7c3e84f8U, 0xbc5ed965U, 0x4e27d29cU, 0x8c468905U,
149
0x180c2830U, 0xca654389U, 0xd0686dbdU, 0xc2615b99U,
150
0x06030a0cU, 0x9fc1bc23U, 0xae57ef41U, 0xb1d6ce7fU,
151
0xafd9ec43U, 0xb058cd7dU, 0xadd8ea47U, 0xcc664985U,
152
0xb3d7c87bU, 0x743a9ce8U, 0x8dc88a07U, 0x783c88f0U,
153
0xe9fa26cfU, 0x31965362U, 0x53a7f5a6U, 0x2d98775aU,
154
0xc5ec5297U, 0x6db8b7daU, 0x93c7a83bU, 0x41aec382U,
155
0xd2696bb9U, 0x964ba731U, 0x4babdd96U, 0x4fa9d19eU,
156
0xce674f81U, 0x140a3c28U, 0x8e478f01U, 0xf9f216efU,
157
0x77b599eeU, 0x4422cc88U, 0xd7e564b3U, 0xc1ee5e9fU,
158
0x61bea3c2U, 0x562bfaacU, 0x1f81213eU, 0x24126c48U,
159
0x1b832d36U, 0x361b5a6cU, 0x1c0e2438U, 0x4623ca8cU,
160
0xf7f504f3U, 0x8a458309U, 0x4221c684U, 0x81ce9e1fU,
161
0x9249ab39U, 0x582ce8b0U, 0xeff92cc3U, 0xd1e66ebfU,
162
0x71b693e2U, 0x5028f0a0U, 0x2e17725cU, 0x19822b32U,
163
0x341a5c68U, 0x0b8b1d16U, 0xe1fe3edfU, 0x098a1b12U,
164
0x12093624U, 0x8fc98c03U, 0x13873526U, 0x9c4eb925U,
165
0xdfe17ca3U, 0x5c2ee4b8U, 0xd5e462b7U, 0xdde07aa7U,
166
0xcbeb408bU, 0x3d90477aU, 0x55a4ffaaU, 0x3c1e4478U,
167
0x1785392eU, 0xc0605d9dU, 0x00000000U, 0x4a25de94U,
168
0xf5f402f7U, 0xfff11ce3U, 0x35945f6aU, 0x160b3a2cU,
169
0xd3e768bbU, 0xea7523c9U, 0xc3ef589bU, 0x6834b8d0U,
170
0x6231a6c4U, 0xb5d4c277U, 0xbdd0da67U, 0x11863322U,
171
0xfc7e19e5U, 0x47adc98eU, 0xe7fd34d3U, 0x5229f6a4U,
172
0x6030a0c0U, 0x763b9aecU, 0x239f6546U, 0xedf82ac7U,
173
0x91c6ae3fU, 0x26136a4cU, 0x0c061418U, 0x0a051e14U,
174
0x97c5a433U, 0x22116644U, 0xee772fc1U, 0xf87c15edU,
175
0xf47a01f5U, 0xf0780dfdU, 0x6c36b4d8U, 0x381c4870U,
176
0x723996e4U, 0xb259cb79U, 0x30185060U, 0xac56e945U,
177
0x7bb38df6U, 0x7db087faU, 0x4824d890U, 0x4020c080U,
178
0x79b28bf2U, 0x39924b72U, 0x5ba3edb6U, 0x9dc0ba27U,
179
0x8844850dU, 0xc4625195U, 0x20106040U, 0x75b49feaU,
180
0x15843f2aU, 0x86439711U, 0x3b934d76U, 0x99c2b62fU,
181
0x944aa135U, 0x67bda9ceU, 0x038f0506U, 0x5a2deeb4U,
182
0x65bcafcaU, 0x259c6f4aU, 0xd46a61b5U, 0x80409d1dU,
183
0x83cf981bU, 0x59a2ebb2U, 0x1d80273aU, 0x9e4fbf21U,
184
0x3e1f427cU, 0x89ca860fU, 0x49aadb92U, 0x84429115U,
187
static const ulong32 T2[256] = {
188
0xd2bbba69U, 0x4de554a8U, 0xbce22f5eU, 0xcd2574e8U,
189
0x51f753a6U, 0x6bd0d3bbU, 0x6fd6d2b9U, 0x29b34d9aU,
190
0x5dfd50a0U, 0x8acfac45U, 0x0e098d07U, 0xc6a5bf63U,
191
0xdd3d70e0U, 0x55f152a4U, 0x527b9a29U, 0x2db54c98U,
192
0x8f46eac9U, 0x73c4d5b7U, 0x66559733U, 0x63dcd1bfU,
193
0xccaa3366U, 0x59fb51a2U, 0x71c75bb6U, 0xa2f3a651U,
194
0x5ffedea1U, 0x3dad4890U, 0x9ad7a84dU, 0x5e71992fU,
195
0x4be0dbabU, 0xc8ac3264U, 0xe695b773U, 0xd732fce5U,
196
0xab70e3dbU, 0x42639e21U, 0x7e41913fU, 0x567d9b2bU,
197
0xaf76e2d9U, 0xd6bdbb6bU, 0x199b4182U, 0xa5796edcU,
198
0xaef9a557U, 0x0b80cb8bU, 0xb1676bd6U, 0x6e599537U,
199
0xbee1a15fU, 0xeb10f3fbU, 0xfe81b17fU, 0x080c0204U,
200
0x1792cc85U, 0x37a2c495U, 0x744e1d3aU, 0x50781428U,
201
0x2bb0c39bU, 0x915763c6U, 0x4fe6daa9U, 0x69d35dbaU,
202
0x61df5fbeU, 0x57f2dca5U, 0xe9137dfaU, 0x1394cd87U,
203
0xe11f7ffeU, 0x75c15ab4U, 0xad756cd8U, 0x6dd55cb8U,
204
0xfb08f7f3U, 0x98d4264cU, 0xdb38ffe3U, 0x9354edc7U,
205
0x874ae8cdU, 0x4e699d27U, 0xa17f6fdeU, 0x02038e01U,
206
0x64561932U, 0xbae7a05dU, 0xe71af0fdU, 0x1e11890fU,
207
0x3c220f1eU, 0x1c12070eU, 0x86c5af43U, 0xcb20fbebU,
208
0x20300810U, 0x547e152aU, 0x342e0d1aU, 0x10180408U,
209
0x04060102U, 0x8d4564c8U, 0x5bf8dfa3U, 0xc52976ecU,
210
0xf90b79f2U, 0x53f4dda7U, 0xf48e3d7aU, 0x5874162cU,
211
0xfc823f7eU, 0xdcb2376eU, 0xa9736ddaU, 0xe0903870U,
212
0xdeb1b96fU, 0xd13773e6U, 0x834ce9cfU, 0xd4be356aU,
213
0x49e355aaU, 0xd93b71e2U, 0xf1077bf6U, 0x0a0f8c05U,
214
0xd53172e4U, 0x1a17880dU, 0xff0ef6f1U, 0xa8fc2a54U,
215
0xf8843e7cU, 0x65d95ebcU, 0x9cd2274eU, 0x0589468cU,
216
0x30280c18U, 0x894365caU, 0xbd6d68d0U, 0x995b61c2U,
217
0x0c0a0306U, 0x23bcc19fU, 0x41ef57aeU, 0x7fced6b1U,
218
0x43ecd9afU, 0x7dcd58b0U, 0x47ead8adU, 0x854966ccU,
219
0x7bc8d7b3U, 0xe89c3a74U, 0x078ac88dU, 0xf0883c78U,
220
0xcf26fae9U, 0x62539631U, 0xa6f5a753U, 0x5a77982dU,
221
0x9752ecc5U, 0xdab7b86dU, 0x3ba8c793U, 0x82c3ae41U,
222
0xb96b69d2U, 0x31a74b96U, 0x96ddab4bU, 0x9ed1a94fU,
223
0x814f67ceU, 0x283c0a14U, 0x018f478eU, 0xef16f2f9U,
224
0xee99b577U, 0x88cc2244U, 0xb364e5d7U, 0x9f5eeec1U,
225
0xc2a3be61U, 0xacfa2b56U, 0x3e21811fU, 0x486c1224U,
226
0x362d831bU, 0x6c5a1b36U, 0x38240e1cU, 0x8cca2346U,
227
0xf304f5f7U, 0x0983458aU, 0x84c62142U, 0x1f9ece81U,
228
0x39ab4992U, 0xb0e82c58U, 0xc32cf9efU, 0xbf6ee6d1U,
229
0xe293b671U, 0xa0f02850U, 0x5c72172eU, 0x322b8219U,
230
0x685c1a34U, 0x161d8b0bU, 0xdf3efee1U, 0x121b8a09U,
231
0x24360912U, 0x038cc98fU, 0x26358713U, 0x25b94e9cU,
232
0xa37ce1dfU, 0xb8e42e5cU, 0xb762e4d5U, 0xa77ae0ddU,
233
0x8b40ebcbU, 0x7a47903dU, 0xaaffa455U, 0x78441e3cU,
234
0x2e398517U, 0x9d5d60c0U, 0x00000000U, 0x94de254aU,
235
0xf702f4f5U, 0xe31cf1ffU, 0x6a5f9435U, 0x2c3a0b16U,
236
0xbb68e7d3U, 0xc92375eaU, 0x9b58efc3U, 0xd0b83468U,
237
0xc4a63162U, 0x77c2d4b5U, 0x67dad0bdU, 0x22338611U,
238
0xe5197efcU, 0x8ec9ad47U, 0xd334fde7U, 0xa4f62952U,
239
0xc0a03060U, 0xec9a3b76U, 0x46659f23U, 0xc72af8edU,
240
0x3faec691U, 0x4c6a1326U, 0x1814060cU, 0x141e050aU,
241
0x33a4c597U, 0x44661122U, 0xc12f77eeU, 0xed157cf8U,
242
0xf5017af4U, 0xfd0d78f0U, 0xd8b4366cU, 0x70481c38U,
243
0xe4963972U, 0x79cb59b2U, 0x60501830U, 0x45e956acU,
244
0xf68db37bU, 0xfa87b07dU, 0x90d82448U, 0x80c02040U,
245
0xf28bb279U, 0x724b9239U, 0xb6eda35bU, 0x27bac09dU,
246
0x0d854488U, 0x955162c4U, 0x40601020U, 0xea9fb475U,
247
0x2a3f8415U, 0x11974386U, 0x764d933bU, 0x2fb6c299U,
248
0x35a14a94U, 0xcea9bd67U, 0x06058f03U, 0xb4ee2d5aU,
249
0xcaafbc65U, 0x4a6f9c25U, 0xb5616ad4U, 0x1d9d4080U,
250
0x1b98cf83U, 0xb2eba259U, 0x3a27801dU, 0x21bf4f9eU,
251
0x7c421f3eU, 0x0f86ca89U, 0x92dbaa49U, 0x15914284U,
254
static const ulong32 T3[256] = {
255
0xbbd269baU, 0xe54da854U, 0xe2bc5e2fU, 0x25cde874U,
256
0xf751a653U, 0xd06bbbd3U, 0xd66fb9d2U, 0xb3299a4dU,
257
0xfd5da050U, 0xcf8a45acU, 0x090e078dU, 0xa5c663bfU,
258
0x3ddde070U, 0xf155a452U, 0x7b52299aU, 0xb52d984cU,
259
0x468fc9eaU, 0xc473b7d5U, 0x55663397U, 0xdc63bfd1U,
260
0xaacc6633U, 0xfb59a251U, 0xc771b65bU, 0xf3a251a6U,
261
0xfe5fa1deU, 0xad3d9048U, 0xd79a4da8U, 0x715e2f99U,
262
0xe04babdbU, 0xacc86432U, 0x95e673b7U, 0x32d7e5fcU,
263
0x70abdbe3U, 0x6342219eU, 0x417e3f91U, 0x7d562b9bU,
264
0x76afd9e2U, 0xbdd66bbbU, 0x9b198241U, 0x79a5dc6eU,
265
0xf9ae57a5U, 0x800b8bcbU, 0x67b1d66bU, 0x596e3795U,
266
0xe1be5fa1U, 0x10ebfbf3U, 0x81fe7fb1U, 0x0c080402U,
267
0x921785ccU, 0xa23795c4U, 0x4e743a1dU, 0x78502814U,
268
0xb02b9bc3U, 0x5791c663U, 0xe64fa9daU, 0xd369ba5dU,
269
0xdf61be5fU, 0xf257a5dcU, 0x13e9fa7dU, 0x941387cdU,
270
0x1fe1fe7fU, 0xc175b45aU, 0x75add86cU, 0xd56db85cU,
271
0x08fbf3f7U, 0xd4984c26U, 0x38dbe3ffU, 0x5493c7edU,
272
0x4a87cde8U, 0x694e279dU, 0x7fa1de6fU, 0x0302018eU,
273
0x56643219U, 0xe7ba5da0U, 0x1ae7fdf0U, 0x111e0f89U,
274
0x223c1e0fU, 0x121c0e07U, 0xc58643afU, 0x20cbebfbU,
275
0x30201008U, 0x7e542a15U, 0x2e341a0dU, 0x18100804U,
276
0x06040201U, 0x458dc864U, 0xf85ba3dfU, 0x29c5ec76U,
277
0x0bf9f279U, 0xf453a7ddU, 0x8ef47a3dU, 0x74582c16U,
278
0x82fc7e3fU, 0xb2dc6e37U, 0x73a9da6dU, 0x90e07038U,
279
0xb1de6fb9U, 0x37d1e673U, 0x4c83cfe9U, 0xbed46a35U,
280
0xe349aa55U, 0x3bd9e271U, 0x07f1f67bU, 0x0f0a058cU,
281
0x31d5e472U, 0x171a0d88U, 0x0efff1f6U, 0xfca8542aU,
282
0x84f87c3eU, 0xd965bc5eU, 0xd29c4e27U, 0x89058c46U,
283
0x2830180cU, 0x4389ca65U, 0x6dbdd068U, 0x5b99c261U,
284
0x0a0c0603U, 0xbc239fc1U, 0xef41ae57U, 0xce7fb1d6U,
285
0xec43afd9U, 0xcd7db058U, 0xea47add8U, 0x4985cc66U,
286
0xc87bb3d7U, 0x9ce8743aU, 0x8a078dc8U, 0x88f0783cU,
287
0x26cfe9faU, 0x53623196U, 0xf5a653a7U, 0x775a2d98U,
288
0x5297c5ecU, 0xb7da6db8U, 0xa83b93c7U, 0xc38241aeU,
289
0x6bb9d269U, 0xa731964bU, 0xdd964babU, 0xd19e4fa9U,
290
0x4f81ce67U, 0x3c28140aU, 0x8f018e47U, 0x16eff9f2U,
291
0x99ee77b5U, 0xcc884422U, 0x64b3d7e5U, 0x5e9fc1eeU,
292
0xa3c261beU, 0xfaac562bU, 0x213e1f81U, 0x6c482412U,
293
0x2d361b83U, 0x5a6c361bU, 0x24381c0eU, 0xca8c4623U,
294
0x04f3f7f5U, 0x83098a45U, 0xc6844221U, 0x9e1f81ceU,
295
0xab399249U, 0xe8b0582cU, 0x2cc3eff9U, 0x6ebfd1e6U,
296
0x93e271b6U, 0xf0a05028U, 0x725c2e17U, 0x2b321982U,
297
0x5c68341aU, 0x1d160b8bU, 0x3edfe1feU, 0x1b12098aU,
298
0x36241209U, 0x8c038fc9U, 0x35261387U, 0xb9259c4eU,
299
0x7ca3dfe1U, 0xe4b85c2eU, 0x62b7d5e4U, 0x7aa7dde0U,
300
0x408bcbebU, 0x477a3d90U, 0xffaa55a4U, 0x44783c1eU,
301
0x392e1785U, 0x5d9dc060U, 0x00000000U, 0xde944a25U,
302
0x02f7f5f4U, 0x1ce3fff1U, 0x5f6a3594U, 0x3a2c160bU,
303
0x68bbd3e7U, 0x23c9ea75U, 0x589bc3efU, 0xb8d06834U,
304
0xa6c46231U, 0xc277b5d4U, 0xda67bdd0U, 0x33221186U,
305
0x19e5fc7eU, 0xc98e47adU, 0x34d3e7fdU, 0xf6a45229U,
306
0xa0c06030U, 0x9aec763bU, 0x6546239fU, 0x2ac7edf8U,
307
0xae3f91c6U, 0x6a4c2613U, 0x14180c06U, 0x1e140a05U,
308
0xa43397c5U, 0x66442211U, 0x2fc1ee77U, 0x15edf87cU,
309
0x01f5f47aU, 0x0dfdf078U, 0xb4d86c36U, 0x4870381cU,
310
0x96e47239U, 0xcb79b259U, 0x50603018U, 0xe945ac56U,
311
0x8df67bb3U, 0x87fa7db0U, 0xd8904824U, 0xc0804020U,
312
0x8bf279b2U, 0x4b723992U, 0xedb65ba3U, 0xba279dc0U,
313
0x850d8844U, 0x5195c462U, 0x60402010U, 0x9fea75b4U,
314
0x3f2a1584U, 0x97118643U, 0x4d763b93U, 0xb62f99c2U,
315
0xa135944aU, 0xa9ce67bdU, 0x0506038fU, 0xeeb45a2dU,
316
0xafca65bcU, 0x6f4a259cU, 0x61b5d46aU, 0x9d1d8040U,
317
0x981b83cfU, 0xebb259a2U, 0x273a1d80U, 0xbf219e4fU,
318
0x427c3e1fU, 0x860f89caU, 0xdb9249aaU, 0x91158442U,
321
static const ulong32 T4[256] = {
322
0xbabababaU, 0x54545454U, 0x2f2f2f2fU, 0x74747474U,
323
0x53535353U, 0xd3d3d3d3U, 0xd2d2d2d2U, 0x4d4d4d4dU,
324
0x50505050U, 0xacacacacU, 0x8d8d8d8dU, 0xbfbfbfbfU,
325
0x70707070U, 0x52525252U, 0x9a9a9a9aU, 0x4c4c4c4cU,
326
0xeaeaeaeaU, 0xd5d5d5d5U, 0x97979797U, 0xd1d1d1d1U,
327
0x33333333U, 0x51515151U, 0x5b5b5b5bU, 0xa6a6a6a6U,
328
0xdedededeU, 0x48484848U, 0xa8a8a8a8U, 0x99999999U,
329
0xdbdbdbdbU, 0x32323232U, 0xb7b7b7b7U, 0xfcfcfcfcU,
330
0xe3e3e3e3U, 0x9e9e9e9eU, 0x91919191U, 0x9b9b9b9bU,
331
0xe2e2e2e2U, 0xbbbbbbbbU, 0x41414141U, 0x6e6e6e6eU,
332
0xa5a5a5a5U, 0xcbcbcbcbU, 0x6b6b6b6bU, 0x95959595U,
333
0xa1a1a1a1U, 0xf3f3f3f3U, 0xb1b1b1b1U, 0x02020202U,
334
0xccccccccU, 0xc4c4c4c4U, 0x1d1d1d1dU, 0x14141414U,
335
0xc3c3c3c3U, 0x63636363U, 0xdadadadaU, 0x5d5d5d5dU,
336
0x5f5f5f5fU, 0xdcdcdcdcU, 0x7d7d7d7dU, 0xcdcdcdcdU,
337
0x7f7f7f7fU, 0x5a5a5a5aU, 0x6c6c6c6cU, 0x5c5c5c5cU,
338
0xf7f7f7f7U, 0x26262626U, 0xffffffffU, 0xededededU,
339
0xe8e8e8e8U, 0x9d9d9d9dU, 0x6f6f6f6fU, 0x8e8e8e8eU,
340
0x19191919U, 0xa0a0a0a0U, 0xf0f0f0f0U, 0x89898989U,
341
0x0f0f0f0fU, 0x07070707U, 0xafafafafU, 0xfbfbfbfbU,
342
0x08080808U, 0x15151515U, 0x0d0d0d0dU, 0x04040404U,
343
0x01010101U, 0x64646464U, 0xdfdfdfdfU, 0x76767676U,
344
0x79797979U, 0xddddddddU, 0x3d3d3d3dU, 0x16161616U,
345
0x3f3f3f3fU, 0x37373737U, 0x6d6d6d6dU, 0x38383838U,
346
0xb9b9b9b9U, 0x73737373U, 0xe9e9e9e9U, 0x35353535U,
347
0x55555555U, 0x71717171U, 0x7b7b7b7bU, 0x8c8c8c8cU,
348
0x72727272U, 0x88888888U, 0xf6f6f6f6U, 0x2a2a2a2aU,
349
0x3e3e3e3eU, 0x5e5e5e5eU, 0x27272727U, 0x46464646U,
350
0x0c0c0c0cU, 0x65656565U, 0x68686868U, 0x61616161U,
351
0x03030303U, 0xc1c1c1c1U, 0x57575757U, 0xd6d6d6d6U,
352
0xd9d9d9d9U, 0x58585858U, 0xd8d8d8d8U, 0x66666666U,
353
0xd7d7d7d7U, 0x3a3a3a3aU, 0xc8c8c8c8U, 0x3c3c3c3cU,
354
0xfafafafaU, 0x96969696U, 0xa7a7a7a7U, 0x98989898U,
355
0xececececU, 0xb8b8b8b8U, 0xc7c7c7c7U, 0xaeaeaeaeU,
356
0x69696969U, 0x4b4b4b4bU, 0xababababU, 0xa9a9a9a9U,
357
0x67676767U, 0x0a0a0a0aU, 0x47474747U, 0xf2f2f2f2U,
358
0xb5b5b5b5U, 0x22222222U, 0xe5e5e5e5U, 0xeeeeeeeeU,
359
0xbebebebeU, 0x2b2b2b2bU, 0x81818181U, 0x12121212U,
360
0x83838383U, 0x1b1b1b1bU, 0x0e0e0e0eU, 0x23232323U,
361
0xf5f5f5f5U, 0x45454545U, 0x21212121U, 0xcecececeU,
362
0x49494949U, 0x2c2c2c2cU, 0xf9f9f9f9U, 0xe6e6e6e6U,
363
0xb6b6b6b6U, 0x28282828U, 0x17171717U, 0x82828282U,
364
0x1a1a1a1aU, 0x8b8b8b8bU, 0xfefefefeU, 0x8a8a8a8aU,
365
0x09090909U, 0xc9c9c9c9U, 0x87878787U, 0x4e4e4e4eU,
366
0xe1e1e1e1U, 0x2e2e2e2eU, 0xe4e4e4e4U, 0xe0e0e0e0U,
367
0xebebebebU, 0x90909090U, 0xa4a4a4a4U, 0x1e1e1e1eU,
368
0x85858585U, 0x60606060U, 0x00000000U, 0x25252525U,
369
0xf4f4f4f4U, 0xf1f1f1f1U, 0x94949494U, 0x0b0b0b0bU,
370
0xe7e7e7e7U, 0x75757575U, 0xefefefefU, 0x34343434U,
371
0x31313131U, 0xd4d4d4d4U, 0xd0d0d0d0U, 0x86868686U,
372
0x7e7e7e7eU, 0xadadadadU, 0xfdfdfdfdU, 0x29292929U,
373
0x30303030U, 0x3b3b3b3bU, 0x9f9f9f9fU, 0xf8f8f8f8U,
374
0xc6c6c6c6U, 0x13131313U, 0x06060606U, 0x05050505U,
375
0xc5c5c5c5U, 0x11111111U, 0x77777777U, 0x7c7c7c7cU,
376
0x7a7a7a7aU, 0x78787878U, 0x36363636U, 0x1c1c1c1cU,
377
0x39393939U, 0x59595959U, 0x18181818U, 0x56565656U,
378
0xb3b3b3b3U, 0xb0b0b0b0U, 0x24242424U, 0x20202020U,
379
0xb2b2b2b2U, 0x92929292U, 0xa3a3a3a3U, 0xc0c0c0c0U,
380
0x44444444U, 0x62626262U, 0x10101010U, 0xb4b4b4b4U,
381
0x84848484U, 0x43434343U, 0x93939393U, 0xc2c2c2c2U,
382
0x4a4a4a4aU, 0xbdbdbdbdU, 0x8f8f8f8fU, 0x2d2d2d2dU,
383
0xbcbcbcbcU, 0x9c9c9c9cU, 0x6a6a6a6aU, 0x40404040U,
384
0xcfcfcfcfU, 0xa2a2a2a2U, 0x80808080U, 0x4f4f4f4fU,
385
0x1f1f1f1fU, 0xcacacacaU, 0xaaaaaaaaU, 0x42424242U,
388
static const ulong32 T5[256] = {
389
0x00000000U, 0x01020608U, 0x02040c10U, 0x03060a18U,
390
0x04081820U, 0x050a1e28U, 0x060c1430U, 0x070e1238U,
391
0x08103040U, 0x09123648U, 0x0a143c50U, 0x0b163a58U,
392
0x0c182860U, 0x0d1a2e68U, 0x0e1c2470U, 0x0f1e2278U,
393
0x10206080U, 0x11226688U, 0x12246c90U, 0x13266a98U,
394
0x142878a0U, 0x152a7ea8U, 0x162c74b0U, 0x172e72b8U,
395
0x183050c0U, 0x193256c8U, 0x1a345cd0U, 0x1b365ad8U,
396
0x1c3848e0U, 0x1d3a4ee8U, 0x1e3c44f0U, 0x1f3e42f8U,
397
0x2040c01dU, 0x2142c615U, 0x2244cc0dU, 0x2346ca05U,
398
0x2448d83dU, 0x254ade35U, 0x264cd42dU, 0x274ed225U,
399
0x2850f05dU, 0x2952f655U, 0x2a54fc4dU, 0x2b56fa45U,
400
0x2c58e87dU, 0x2d5aee75U, 0x2e5ce46dU, 0x2f5ee265U,
401
0x3060a09dU, 0x3162a695U, 0x3264ac8dU, 0x3366aa85U,
402
0x3468b8bdU, 0x356abeb5U, 0x366cb4adU, 0x376eb2a5U,
403
0x387090ddU, 0x397296d5U, 0x3a749ccdU, 0x3b769ac5U,
404
0x3c7888fdU, 0x3d7a8ef5U, 0x3e7c84edU, 0x3f7e82e5U,
405
0x40809d3aU, 0x41829b32U, 0x4284912aU, 0x43869722U,
406
0x4488851aU, 0x458a8312U, 0x468c890aU, 0x478e8f02U,
407
0x4890ad7aU, 0x4992ab72U, 0x4a94a16aU, 0x4b96a762U,
408
0x4c98b55aU, 0x4d9ab352U, 0x4e9cb94aU, 0x4f9ebf42U,
409
0x50a0fdbaU, 0x51a2fbb2U, 0x52a4f1aaU, 0x53a6f7a2U,
410
0x54a8e59aU, 0x55aae392U, 0x56ace98aU, 0x57aeef82U,
411
0x58b0cdfaU, 0x59b2cbf2U, 0x5ab4c1eaU, 0x5bb6c7e2U,
412
0x5cb8d5daU, 0x5dbad3d2U, 0x5ebcd9caU, 0x5fbedfc2U,
413
0x60c05d27U, 0x61c25b2fU, 0x62c45137U, 0x63c6573fU,
414
0x64c84507U, 0x65ca430fU, 0x66cc4917U, 0x67ce4f1fU,
415
0x68d06d67U, 0x69d26b6fU, 0x6ad46177U, 0x6bd6677fU,
416
0x6cd87547U, 0x6dda734fU, 0x6edc7957U, 0x6fde7f5fU,
417
0x70e03da7U, 0x71e23bafU, 0x72e431b7U, 0x73e637bfU,
418
0x74e82587U, 0x75ea238fU, 0x76ec2997U, 0x77ee2f9fU,
419
0x78f00de7U, 0x79f20befU, 0x7af401f7U, 0x7bf607ffU,
420
0x7cf815c7U, 0x7dfa13cfU, 0x7efc19d7U, 0x7ffe1fdfU,
421
0x801d2774U, 0x811f217cU, 0x82192b64U, 0x831b2d6cU,
422
0x84153f54U, 0x8517395cU, 0x86113344U, 0x8713354cU,
423
0x880d1734U, 0x890f113cU, 0x8a091b24U, 0x8b0b1d2cU,
424
0x8c050f14U, 0x8d07091cU, 0x8e010304U, 0x8f03050cU,
425
0x903d47f4U, 0x913f41fcU, 0x92394be4U, 0x933b4decU,
426
0x94355fd4U, 0x953759dcU, 0x963153c4U, 0x973355ccU,
427
0x982d77b4U, 0x992f71bcU, 0x9a297ba4U, 0x9b2b7dacU,
428
0x9c256f94U, 0x9d27699cU, 0x9e216384U, 0x9f23658cU,
429
0xa05de769U, 0xa15fe161U, 0xa259eb79U, 0xa35bed71U,
430
0xa455ff49U, 0xa557f941U, 0xa651f359U, 0xa753f551U,
431
0xa84dd729U, 0xa94fd121U, 0xaa49db39U, 0xab4bdd31U,
432
0xac45cf09U, 0xad47c901U, 0xae41c319U, 0xaf43c511U,
433
0xb07d87e9U, 0xb17f81e1U, 0xb2798bf9U, 0xb37b8df1U,
434
0xb4759fc9U, 0xb57799c1U, 0xb67193d9U, 0xb77395d1U,
435
0xb86db7a9U, 0xb96fb1a1U, 0xba69bbb9U, 0xbb6bbdb1U,
436
0xbc65af89U, 0xbd67a981U, 0xbe61a399U, 0xbf63a591U,
437
0xc09dba4eU, 0xc19fbc46U, 0xc299b65eU, 0xc39bb056U,
438
0xc495a26eU, 0xc597a466U, 0xc691ae7eU, 0xc793a876U,
439
0xc88d8a0eU, 0xc98f8c06U, 0xca89861eU, 0xcb8b8016U,
440
0xcc85922eU, 0xcd879426U, 0xce819e3eU, 0xcf839836U,
441
0xd0bddaceU, 0xd1bfdcc6U, 0xd2b9d6deU, 0xd3bbd0d6U,
442
0xd4b5c2eeU, 0xd5b7c4e6U, 0xd6b1cefeU, 0xd7b3c8f6U,
443
0xd8adea8eU, 0xd9afec86U, 0xdaa9e69eU, 0xdbabe096U,
444
0xdca5f2aeU, 0xdda7f4a6U, 0xdea1febeU, 0xdfa3f8b6U,
445
0xe0dd7a53U, 0xe1df7c5bU, 0xe2d97643U, 0xe3db704bU,
446
0xe4d56273U, 0xe5d7647bU, 0xe6d16e63U, 0xe7d3686bU,
447
0xe8cd4a13U, 0xe9cf4c1bU, 0xeac94603U, 0xebcb400bU,
448
0xecc55233U, 0xedc7543bU, 0xeec15e23U, 0xefc3582bU,
449
0xf0fd1ad3U, 0xf1ff1cdbU, 0xf2f916c3U, 0xf3fb10cbU,
450
0xf4f502f3U, 0xf5f704fbU, 0xf6f10ee3U, 0xf7f308ebU,
451
0xf8ed2a93U, 0xf9ef2c9bU, 0xfae92683U, 0xfbeb208bU,
452
0xfce532b3U, 0xfde734bbU, 0xfee13ea3U, 0xffe338abU,
456
* The round constants.
458
static const ulong32 rc[] = {
459
0xba542f74U, 0x53d3d24dU, 0x50ac8dbfU, 0x70529a4cU,
460
0xead597d1U, 0x33515ba6U, 0xde48a899U, 0xdb32b7fcU,
461
0xe39e919bU, 0xe2bb416eU, 0xa5cb6b95U, 0xa1f3b102U,
462
0xccc41d14U, 0xc363da5dU, 0x5fdc7dcdU, 0x7f5a6c5cU,
463
0xf726ffedU, 0xe89d6f8eU, 0x19a0f089U,
471
static const ulong32 T0[256] = {
472
0xa753a6f5U, 0xd3bb6bd0U, 0xe6d1bf6eU, 0x71e2d93bU,
473
0xd0bd67daU, 0xac458acfU, 0x4d9a29b3U, 0x79f2f90bU,
474
0x3a74e89cU, 0xc98f038cU, 0x913f7e41U, 0xfce5d732U,
475
0x1e3c7844U, 0x478e018fU, 0x54a84de5U, 0xbd67cea9U,
476
0x8c050a0fU, 0xa557aef9U, 0x7af4f501U, 0xfbebcb20U,
477
0x63c69157U, 0xb86ddab7U, 0xdda753f4U, 0xd4b577c2U,
478
0xe5d7b364U, 0xb37bf68dU, 0xc59733a4U, 0xbe61c2a3U,
479
0xa94f9ed1U, 0x880d1a17U, 0x0c183028U, 0xa259b2ebU,
480
0x3972e496U, 0xdfa35bf8U, 0x2952a4f6U, 0xdaa94fe6U,
481
0x2b56acfaU, 0xa84d9ad7U, 0xcb8b0b80U, 0x4c982db5U,
482
0x4b9631a7U, 0x224488ccU, 0xaa4992dbU, 0x244890d8U,
483
0x4182199bU, 0x70e0dd3dU, 0xa651a2f3U, 0xf9efc32cU,
484
0x5ab475c1U, 0xe2d9af76U, 0xb07dfa87U, 0x366cd8b4U,
485
0x7dfae913U, 0xe4d5b762U, 0x3366ccaaU, 0xffe3db38U,
486
0x60c09d5dU, 0x204080c0U, 0x08102030U, 0x8b0b161dU,
487
0x5ebc65d9U, 0xab4b96ddU, 0x7ffee11fU, 0x78f0fd0dU,
488
0x7cf8ed15U, 0x2c58b0e8U, 0x57ae41efU, 0xd2b96fd6U,
489
0xdca557f2U, 0x6ddaa973U, 0x7efce519U, 0x0d1a342eU,
490
0x53a651f7U, 0x94356a5fU, 0xc39b2bb0U, 0x2850a0f0U,
491
0x274e9cd2U, 0x060c1814U, 0x5fbe61dfU, 0xad478ec9U,
492
0x67ce814fU, 0x5cb86dd5U, 0x55aa49e3U, 0x48903dadU,
493
0x0e1c3824U, 0x52a455f1U, 0xeac98f46U, 0x42841591U,
494
0x5bb671c7U, 0x5dba69d3U, 0x3060c0a0U, 0x58b07dcdU,
495
0x51a259fbU, 0x59b279cbU, 0x3c78f088U, 0x4e9c25b9U,
496
0x3870e090U, 0x8a09121bU, 0x72e4d531U, 0x14285078U,
497
0xe7d3bb68U, 0xc6913faeU, 0xdea15ffeU, 0x50a05dfdU,
498
0x8e010203U, 0x9239724bU, 0xd1bf63dcU, 0x77eec12fU,
499
0x933b764dU, 0x458a0983U, 0x9a29527bU, 0xce811f9eU,
500
0x2d5ab4eeU, 0x03060c0aU, 0x62c49551U, 0xb671e293U,
501
0xb96fdeb1U, 0xbf63c6a5U, 0x96316253U, 0x6bd6b167U,
502
0x3f7efc82U, 0x070e1c12U, 0x1224486cU, 0xae4182c3U,
503
0x40801d9dU, 0x3468d0b8U, 0x468c0589U, 0x3e7cf884U,
504
0xdbab4be0U, 0xcf831b98U, 0xecc59752U, 0xcc851792U,
505
0xc19f23bcU, 0xa15fbee1U, 0xc09d27baU, 0xd6b17fceU,
506
0x1d3a744eU, 0xf4f5f702U, 0x61c2995bU, 0x3b76ec9aU,
507
0x10204060U, 0xd8ad47eaU, 0x68d0bd6dU, 0xa05dbae7U,
508
0xb17ffe81U, 0x0a14283cU, 0x69d2b96bU, 0x6cd8ad75U,
509
0x499239abU, 0xfae9cf26U, 0x76ecc529U, 0xc49537a2U,
510
0x9e214263U, 0x9b2b567dU, 0x6edca579U, 0x992f5e71U,
511
0xc2992fb6U, 0xb773e695U, 0x982d5a77U, 0xbc65caafU,
512
0x8f030605U, 0x85172e39U, 0x1f3e7c42U, 0xb475ea9fU,
513
0xf8edc72aU, 0x11224466U, 0x2e5cb8e4U, 0x00000000U,
514
0x254a94deU, 0x1c387048U, 0x2a54a8fcU, 0x3d7af48eU,
515
0x050a141eU, 0x4f9e21bfU, 0x7bf6f107U, 0xb279f28bU,
516
0x3264c8acU, 0x903d7a47U, 0xaf4386c5U, 0x19326456U,
517
0xa35bb6edU, 0xf7f3fb08U, 0x73e6d137U, 0x9d274e69U,
518
0x152a547eU, 0x74e8cd25U, 0xeec19f5eU, 0xca890f86U,
519
0x9f234665U, 0x0f1e3c22U, 0x1b366c5aU, 0x75eac923U,
520
0x86112233U, 0x84152a3fU, 0x9c254a6fU, 0x4a9435a1U,
521
0x97336655U, 0x1a34685cU, 0x65ca8943U, 0xf6f1ff0eU,
522
0xedc79354U, 0x09122436U, 0xbb6bd6bdU, 0x264c98d4U,
523
0x831b362dU, 0xebcb8b40U, 0x6fdea17fU, 0x811f3e21U,
524
0x04081018U, 0x6ad4b561U, 0x43861197U, 0x01020406U,
525
0x172e5c72U, 0xe1dfa37cU, 0x87132635U, 0xf5f7f304U,
526
0x8d070e09U, 0xe3dbab70U, 0x23468ccaU, 0x801d3a27U,
527
0x44880d85U, 0x162c5874U, 0x66cc8549U, 0x214284c6U,
528
0xfee1df3eU, 0xd5b773c4U, 0x3162c4a6U, 0xd9af43ecU,
529
0x356ad4beU, 0x18306050U, 0x0204080cU, 0x64c88d45U,
530
0xf2f9ef16U, 0xf1ffe31cU, 0x56ac45e9U, 0xcd871394U,
531
0x8219322bU, 0xc88d078aU, 0xba69d2bbU, 0xf0fde71aU,
532
0xefc39b58U, 0xe9cf834cU, 0xe8cd874aU, 0xfde7d334U,
533
0x890f1e11U, 0xd7b37bc8U, 0xc7933ba8U, 0xb577ee99U,
534
0xa455aaffU, 0x2f5ebce2U, 0x95376e59U, 0x13264c6aU,
535
0x0b162c3aU, 0xf3fbeb10U, 0xe0dda77aU, 0x376edcb2U,
538
static const ulong32 T1[256] = {
539
0x53a7f5a6U, 0xbbd3d06bU, 0xd1e66ebfU, 0xe2713bd9U,
540
0xbdd0da67U, 0x45accf8aU, 0x9a4db329U, 0xf2790bf9U,
541
0x743a9ce8U, 0x8fc98c03U, 0x3f91417eU, 0xe5fc32d7U,
542
0x3c1e4478U, 0x8e478f01U, 0xa854e54dU, 0x67bda9ceU,
543
0x058c0f0aU, 0x57a5f9aeU, 0xf47a01f5U, 0xebfb20cbU,
544
0xc6635791U, 0x6db8b7daU, 0xa7ddf453U, 0xb5d4c277U,
545
0xd7e564b3U, 0x7bb38df6U, 0x97c5a433U, 0x61bea3c2U,
546
0x4fa9d19eU, 0x0d88171aU, 0x180c2830U, 0x59a2ebb2U,
547
0x723996e4U, 0xa3dff85bU, 0x5229f6a4U, 0xa9dae64fU,
548
0x562bfaacU, 0x4da8d79aU, 0x8bcb800bU, 0x984cb52dU,
549
0x964ba731U, 0x4422cc88U, 0x49aadb92U, 0x4824d890U,
550
0x82419b19U, 0xe0703dddU, 0x51a6f3a2U, 0xeff92cc3U,
551
0xb45ac175U, 0xd9e276afU, 0x7db087faU, 0x6c36b4d8U,
552
0xfa7d13e9U, 0xd5e462b7U, 0x6633aaccU, 0xe3ff38dbU,
553
0xc0605d9dU, 0x4020c080U, 0x10083020U, 0x0b8b1d16U,
554
0xbc5ed965U, 0x4babdd96U, 0xfe7f1fe1U, 0xf0780dfdU,
555
0xf87c15edU, 0x582ce8b0U, 0xae57ef41U, 0xb9d2d66fU,
556
0xa5dcf257U, 0xda6d73a9U, 0xfc7e19e5U, 0x1a0d2e34U,
557
0xa653f751U, 0x35945f6aU, 0x9bc3b02bU, 0x5028f0a0U,
558
0x4e27d29cU, 0x0c061418U, 0xbe5fdf61U, 0x47adc98eU,
559
0xce674f81U, 0xb85cd56dU, 0xaa55e349U, 0x9048ad3dU,
560
0x1c0e2438U, 0xa452f155U, 0xc9ea468fU, 0x84429115U,
561
0xb65bc771U, 0xba5dd369U, 0x6030a0c0U, 0xb058cd7dU,
562
0xa251fb59U, 0xb259cb79U, 0x783c88f0U, 0x9c4eb925U,
563
0x703890e0U, 0x098a1b12U, 0xe47231d5U, 0x28147850U,
564
0xd3e768bbU, 0x91c6ae3fU, 0xa1defe5fU, 0xa050fd5dU,
565
0x018e0302U, 0x39924b72U, 0xbfd1dc63U, 0xee772fc1U,
566
0x3b934d76U, 0x8a458309U, 0x299a7b52U, 0x81ce9e1fU,
567
0x5a2deeb4U, 0x06030a0cU, 0xc4625195U, 0x71b693e2U,
568
0x6fb9b1deU, 0x63bfa5c6U, 0x31965362U, 0xd66b67b1U,
569
0x7e3f82fcU, 0x0e07121cU, 0x24126c48U, 0x41aec382U,
570
0x80409d1dU, 0x6834b8d0U, 0x8c468905U, 0x7c3e84f8U,
571
0xabdbe04bU, 0x83cf981bU, 0xc5ec5297U, 0x85cc9217U,
572
0x9fc1bc23U, 0x5fa1e1beU, 0x9dc0ba27U, 0xb1d6ce7fU,
573
0x3a1d4e74U, 0xf5f402f7U, 0xc2615b99U, 0x763b9aecU,
574
0x20106040U, 0xadd8ea47U, 0xd0686dbdU, 0x5da0e7baU,
575
0x7fb181feU, 0x140a3c28U, 0xd2696bb9U, 0xd86c75adU,
576
0x9249ab39U, 0xe9fa26cfU, 0xec7629c5U, 0x95c4a237U,
577
0x219e6342U, 0x2b9b7d56U, 0xdc6e79a5U, 0x2f99715eU,
578
0x99c2b62fU, 0x73b795e6U, 0x2d98775aU, 0x65bcafcaU,
579
0x038f0506U, 0x1785392eU, 0x3e1f427cU, 0x75b49feaU,
580
0xedf82ac7U, 0x22116644U, 0x5c2ee4b8U, 0x00000000U,
581
0x4a25de94U, 0x381c4870U, 0x542afca8U, 0x7a3d8ef4U,
582
0x0a051e14U, 0x9e4fbf21U, 0xf67b07f1U, 0x79b28bf2U,
583
0x6432acc8U, 0x3d90477aU, 0x43afc586U, 0x32195664U,
584
0x5ba3edb6U, 0xf3f708fbU, 0xe67337d1U, 0x279d694eU,
585
0x2a157e54U, 0xe87425cdU, 0xc1ee5e9fU, 0x89ca860fU,
586
0x239f6546U, 0x1e0f223cU, 0x361b5a6cU, 0xea7523c9U,
587
0x11863322U, 0x15843f2aU, 0x259c6f4aU, 0x944aa135U,
588
0x33975566U, 0x341a5c68U, 0xca654389U, 0xf1f60effU,
589
0xc7ed5493U, 0x12093624U, 0x6bbbbdd6U, 0x4c26d498U,
590
0x1b832d36U, 0xcbeb408bU, 0xde6f7fa1U, 0x1f81213eU,
591
0x08041810U, 0xd46a61b5U, 0x86439711U, 0x02010604U,
592
0x2e17725cU, 0xdfe17ca3U, 0x13873526U, 0xf7f504f3U,
593
0x078d090eU, 0xdbe370abU, 0x4623ca8cU, 0x1d80273aU,
594
0x8844850dU, 0x2c167458U, 0xcc664985U, 0x4221c684U,
595
0xe1fe3edfU, 0xb7d5c473U, 0x6231a6c4U, 0xafd9ec43U,
596
0x6a35bed4U, 0x30185060U, 0x04020c08U, 0xc864458dU,
597
0xf9f216efU, 0xfff11ce3U, 0xac56e945U, 0x87cd9413U,
598
0x19822b32U, 0x8dc88a07U, 0x69babbd2U, 0xfdf01ae7U,
599
0xc3ef589bU, 0xcfe94c83U, 0xcde84a87U, 0xe7fd34d3U,
600
0x0f89111eU, 0xb3d7c87bU, 0x93c7a83bU, 0x77b599eeU,
601
0x55a4ffaaU, 0x5e2fe2bcU, 0x3795596eU, 0x26136a4cU,
602
0x160b3a2cU, 0xfbf310ebU, 0xdde07aa7U, 0x6e37b2dcU,
605
static const ulong32 T2[256] = {
606
0xa6f5a753U, 0x6bd0d3bbU, 0xbf6ee6d1U, 0xd93b71e2U,
607
0x67dad0bdU, 0x8acfac45U, 0x29b34d9aU, 0xf90b79f2U,
608
0xe89c3a74U, 0x038cc98fU, 0x7e41913fU, 0xd732fce5U,
609
0x78441e3cU, 0x018f478eU, 0x4de554a8U, 0xcea9bd67U,
610
0x0a0f8c05U, 0xaef9a557U, 0xf5017af4U, 0xcb20fbebU,
611
0x915763c6U, 0xdab7b86dU, 0x53f4dda7U, 0x77c2d4b5U,
612
0xb364e5d7U, 0xf68db37bU, 0x33a4c597U, 0xc2a3be61U,
613
0x9ed1a94fU, 0x1a17880dU, 0x30280c18U, 0xb2eba259U,
614
0xe4963972U, 0x5bf8dfa3U, 0xa4f62952U, 0x4fe6daa9U,
615
0xacfa2b56U, 0x9ad7a84dU, 0x0b80cb8bU, 0x2db54c98U,
616
0x31a74b96U, 0x88cc2244U, 0x92dbaa49U, 0x90d82448U,
617
0x199b4182U, 0xdd3d70e0U, 0xa2f3a651U, 0xc32cf9efU,
618
0x75c15ab4U, 0xaf76e2d9U, 0xfa87b07dU, 0xd8b4366cU,
619
0xe9137dfaU, 0xb762e4d5U, 0xccaa3366U, 0xdb38ffe3U,
620
0x9d5d60c0U, 0x80c02040U, 0x20300810U, 0x161d8b0bU,
621
0x65d95ebcU, 0x96ddab4bU, 0xe11f7ffeU, 0xfd0d78f0U,
622
0xed157cf8U, 0xb0e82c58U, 0x41ef57aeU, 0x6fd6d2b9U,
623
0x57f2dca5U, 0xa9736ddaU, 0xe5197efcU, 0x342e0d1aU,
624
0x51f753a6U, 0x6a5f9435U, 0x2bb0c39bU, 0xa0f02850U,
625
0x9cd2274eU, 0x1814060cU, 0x61df5fbeU, 0x8ec9ad47U,
626
0x814f67ceU, 0x6dd55cb8U, 0x49e355aaU, 0x3dad4890U,
627
0x38240e1cU, 0x55f152a4U, 0x8f46eac9U, 0x15914284U,
628
0x71c75bb6U, 0x69d35dbaU, 0xc0a03060U, 0x7dcd58b0U,
629
0x59fb51a2U, 0x79cb59b2U, 0xf0883c78U, 0x25b94e9cU,
630
0xe0903870U, 0x121b8a09U, 0xd53172e4U, 0x50781428U,
631
0xbb68e7d3U, 0x3faec691U, 0x5ffedea1U, 0x5dfd50a0U,
632
0x02038e01U, 0x724b9239U, 0x63dcd1bfU, 0xc12f77eeU,
633
0x764d933bU, 0x0983458aU, 0x527b9a29U, 0x1f9ece81U,
634
0xb4ee2d5aU, 0x0c0a0306U, 0x955162c4U, 0xe293b671U,
635
0xdeb1b96fU, 0xc6a5bf63U, 0x62539631U, 0xb1676bd6U,
636
0xfc823f7eU, 0x1c12070eU, 0x486c1224U, 0x82c3ae41U,
637
0x1d9d4080U, 0xd0b83468U, 0x0589468cU, 0xf8843e7cU,
638
0x4be0dbabU, 0x1b98cf83U, 0x9752ecc5U, 0x1792cc85U,
639
0x23bcc19fU, 0xbee1a15fU, 0x27bac09dU, 0x7fced6b1U,
640
0x744e1d3aU, 0xf702f4f5U, 0x995b61c2U, 0xec9a3b76U,
641
0x40601020U, 0x47ead8adU, 0xbd6d68d0U, 0xbae7a05dU,
642
0xfe81b17fU, 0x283c0a14U, 0xb96b69d2U, 0xad756cd8U,
643
0x39ab4992U, 0xcf26fae9U, 0xc52976ecU, 0x37a2c495U,
644
0x42639e21U, 0x567d9b2bU, 0xa5796edcU, 0x5e71992fU,
645
0x2fb6c299U, 0xe695b773U, 0x5a77982dU, 0xcaafbc65U,
646
0x06058f03U, 0x2e398517U, 0x7c421f3eU, 0xea9fb475U,
647
0xc72af8edU, 0x44661122U, 0xb8e42e5cU, 0x00000000U,
648
0x94de254aU, 0x70481c38U, 0xa8fc2a54U, 0xf48e3d7aU,
649
0x141e050aU, 0x21bf4f9eU, 0xf1077bf6U, 0xf28bb279U,
650
0xc8ac3264U, 0x7a47903dU, 0x86c5af43U, 0x64561932U,
651
0xb6eda35bU, 0xfb08f7f3U, 0xd13773e6U, 0x4e699d27U,
652
0x547e152aU, 0xcd2574e8U, 0x9f5eeec1U, 0x0f86ca89U,
653
0x46659f23U, 0x3c220f1eU, 0x6c5a1b36U, 0xc92375eaU,
654
0x22338611U, 0x2a3f8415U, 0x4a6f9c25U, 0x35a14a94U,
655
0x66559733U, 0x685c1a34U, 0x894365caU, 0xff0ef6f1U,
656
0x9354edc7U, 0x24360912U, 0xd6bdbb6bU, 0x98d4264cU,
657
0x362d831bU, 0x8b40ebcbU, 0xa17f6fdeU, 0x3e21811fU,
658
0x10180408U, 0xb5616ad4U, 0x11974386U, 0x04060102U,
659
0x5c72172eU, 0xa37ce1dfU, 0x26358713U, 0xf304f5f7U,
660
0x0e098d07U, 0xab70e3dbU, 0x8cca2346U, 0x3a27801dU,
661
0x0d854488U, 0x5874162cU, 0x854966ccU, 0x84c62142U,
662
0xdf3efee1U, 0x73c4d5b7U, 0xc4a63162U, 0x43ecd9afU,
663
0xd4be356aU, 0x60501830U, 0x080c0204U, 0x8d4564c8U,
664
0xef16f2f9U, 0xe31cf1ffU, 0x45e956acU, 0x1394cd87U,
665
0x322b8219U, 0x078ac88dU, 0xd2bbba69U, 0xe71af0fdU,
666
0x9b58efc3U, 0x834ce9cfU, 0x874ae8cdU, 0xd334fde7U,
667
0x1e11890fU, 0x7bc8d7b3U, 0x3ba8c793U, 0xee99b577U,
668
0xaaffa455U, 0xbce22f5eU, 0x6e599537U, 0x4c6a1326U,
669
0x2c3a0b16U, 0xeb10f3fbU, 0xa77ae0ddU, 0xdcb2376eU,
672
static const ulong32 T3[256] = {
673
0xf5a653a7U, 0xd06bbbd3U, 0x6ebfd1e6U, 0x3bd9e271U,
674
0xda67bdd0U, 0xcf8a45acU, 0xb3299a4dU, 0x0bf9f279U,
675
0x9ce8743aU, 0x8c038fc9U, 0x417e3f91U, 0x32d7e5fcU,
676
0x44783c1eU, 0x8f018e47U, 0xe54da854U, 0xa9ce67bdU,
677
0x0f0a058cU, 0xf9ae57a5U, 0x01f5f47aU, 0x20cbebfbU,
678
0x5791c663U, 0xb7da6db8U, 0xf453a7ddU, 0xc277b5d4U,
679
0x64b3d7e5U, 0x8df67bb3U, 0xa43397c5U, 0xa3c261beU,
680
0xd19e4fa9U, 0x171a0d88U, 0x2830180cU, 0xebb259a2U,
681
0x96e47239U, 0xf85ba3dfU, 0xf6a45229U, 0xe64fa9daU,
682
0xfaac562bU, 0xd79a4da8U, 0x800b8bcbU, 0xb52d984cU,
683
0xa731964bU, 0xcc884422U, 0xdb9249aaU, 0xd8904824U,
684
0x9b198241U, 0x3ddde070U, 0xf3a251a6U, 0x2cc3eff9U,
685
0xc175b45aU, 0x76afd9e2U, 0x87fa7db0U, 0xb4d86c36U,
686
0x13e9fa7dU, 0x62b7d5e4U, 0xaacc6633U, 0x38dbe3ffU,
687
0x5d9dc060U, 0xc0804020U, 0x30201008U, 0x1d160b8bU,
688
0xd965bc5eU, 0xdd964babU, 0x1fe1fe7fU, 0x0dfdf078U,
689
0x15edf87cU, 0xe8b0582cU, 0xef41ae57U, 0xd66fb9d2U,
690
0xf257a5dcU, 0x73a9da6dU, 0x19e5fc7eU, 0x2e341a0dU,
691
0xf751a653U, 0x5f6a3594U, 0xb02b9bc3U, 0xf0a05028U,
692
0xd29c4e27U, 0x14180c06U, 0xdf61be5fU, 0xc98e47adU,
693
0x4f81ce67U, 0xd56db85cU, 0xe349aa55U, 0xad3d9048U,
694
0x24381c0eU, 0xf155a452U, 0x468fc9eaU, 0x91158442U,
695
0xc771b65bU, 0xd369ba5dU, 0xa0c06030U, 0xcd7db058U,
696
0xfb59a251U, 0xcb79b259U, 0x88f0783cU, 0xb9259c4eU,
697
0x90e07038U, 0x1b12098aU, 0x31d5e472U, 0x78502814U,
698
0x68bbd3e7U, 0xae3f91c6U, 0xfe5fa1deU, 0xfd5da050U,
699
0x0302018eU, 0x4b723992U, 0xdc63bfd1U, 0x2fc1ee77U,
700
0x4d763b93U, 0x83098a45U, 0x7b52299aU, 0x9e1f81ceU,
701
0xeeb45a2dU, 0x0a0c0603U, 0x5195c462U, 0x93e271b6U,
702
0xb1de6fb9U, 0xa5c663bfU, 0x53623196U, 0x67b1d66bU,
703
0x82fc7e3fU, 0x121c0e07U, 0x6c482412U, 0xc38241aeU,
704
0x9d1d8040U, 0xb8d06834U, 0x89058c46U, 0x84f87c3eU,
705
0xe04babdbU, 0x981b83cfU, 0x5297c5ecU, 0x921785ccU,
706
0xbc239fc1U, 0xe1be5fa1U, 0xba279dc0U, 0xce7fb1d6U,
707
0x4e743a1dU, 0x02f7f5f4U, 0x5b99c261U, 0x9aec763bU,
708
0x60402010U, 0xea47add8U, 0x6dbdd068U, 0xe7ba5da0U,
709
0x81fe7fb1U, 0x3c28140aU, 0x6bb9d269U, 0x75add86cU,
710
0xab399249U, 0x26cfe9faU, 0x29c5ec76U, 0xa23795c4U,
711
0x6342219eU, 0x7d562b9bU, 0x79a5dc6eU, 0x715e2f99U,
712
0xb62f99c2U, 0x95e673b7U, 0x775a2d98U, 0xafca65bcU,
713
0x0506038fU, 0x392e1785U, 0x427c3e1fU, 0x9fea75b4U,
714
0x2ac7edf8U, 0x66442211U, 0xe4b85c2eU, 0x00000000U,
715
0xde944a25U, 0x4870381cU, 0xfca8542aU, 0x8ef47a3dU,
716
0x1e140a05U, 0xbf219e4fU, 0x07f1f67bU, 0x8bf279b2U,
717
0xacc86432U, 0x477a3d90U, 0xc58643afU, 0x56643219U,
718
0xedb65ba3U, 0x08fbf3f7U, 0x37d1e673U, 0x694e279dU,
719
0x7e542a15U, 0x25cde874U, 0x5e9fc1eeU, 0x860f89caU,
720
0x6546239fU, 0x223c1e0fU, 0x5a6c361bU, 0x23c9ea75U,
721
0x33221186U, 0x3f2a1584U, 0x6f4a259cU, 0xa135944aU,
722
0x55663397U, 0x5c68341aU, 0x4389ca65U, 0x0efff1f6U,
723
0x5493c7edU, 0x36241209U, 0xbdd66bbbU, 0xd4984c26U,
724
0x2d361b83U, 0x408bcbebU, 0x7fa1de6fU, 0x213e1f81U,
725
0x18100804U, 0x61b5d46aU, 0x97118643U, 0x06040201U,
726
0x725c2e17U, 0x7ca3dfe1U, 0x35261387U, 0x04f3f7f5U,
727
0x090e078dU, 0x70abdbe3U, 0xca8c4623U, 0x273a1d80U,
728
0x850d8844U, 0x74582c16U, 0x4985cc66U, 0xc6844221U,
729
0x3edfe1feU, 0xc473b7d5U, 0xa6c46231U, 0xec43afd9U,
730
0xbed46a35U, 0x50603018U, 0x0c080402U, 0x458dc864U,
731
0x16eff9f2U, 0x1ce3fff1U, 0xe945ac56U, 0x941387cdU,
732
0x2b321982U, 0x8a078dc8U, 0xbbd269baU, 0x1ae7fdf0U,
733
0x589bc3efU, 0x4c83cfe9U, 0x4a87cde8U, 0x34d3e7fdU,
734
0x111e0f89U, 0xc87bb3d7U, 0xa83b93c7U, 0x99ee77b5U,
735
0xffaa55a4U, 0xe2bc5e2fU, 0x596e3795U, 0x6a4c2613U,
736
0x3a2c160bU, 0x10ebfbf3U, 0x7aa7dde0U, 0xb2dc6e37U,
739
static const ulong32 T4[256] = {
740
0xa7a7a7a7U, 0xd3d3d3d3U, 0xe6e6e6e6U, 0x71717171U,
741
0xd0d0d0d0U, 0xacacacacU, 0x4d4d4d4dU, 0x79797979U,
742
0x3a3a3a3aU, 0xc9c9c9c9U, 0x91919191U, 0xfcfcfcfcU,
743
0x1e1e1e1eU, 0x47474747U, 0x54545454U, 0xbdbdbdbdU,
744
0x8c8c8c8cU, 0xa5a5a5a5U, 0x7a7a7a7aU, 0xfbfbfbfbU,
745
0x63636363U, 0xb8b8b8b8U, 0xddddddddU, 0xd4d4d4d4U,
746
0xe5e5e5e5U, 0xb3b3b3b3U, 0xc5c5c5c5U, 0xbebebebeU,
747
0xa9a9a9a9U, 0x88888888U, 0x0c0c0c0cU, 0xa2a2a2a2U,
748
0x39393939U, 0xdfdfdfdfU, 0x29292929U, 0xdadadadaU,
749
0x2b2b2b2bU, 0xa8a8a8a8U, 0xcbcbcbcbU, 0x4c4c4c4cU,
750
0x4b4b4b4bU, 0x22222222U, 0xaaaaaaaaU, 0x24242424U,
751
0x41414141U, 0x70707070U, 0xa6a6a6a6U, 0xf9f9f9f9U,
752
0x5a5a5a5aU, 0xe2e2e2e2U, 0xb0b0b0b0U, 0x36363636U,
753
0x7d7d7d7dU, 0xe4e4e4e4U, 0x33333333U, 0xffffffffU,
754
0x60606060U, 0x20202020U, 0x08080808U, 0x8b8b8b8bU,
755
0x5e5e5e5eU, 0xababababU, 0x7f7f7f7fU, 0x78787878U,
756
0x7c7c7c7cU, 0x2c2c2c2cU, 0x57575757U, 0xd2d2d2d2U,
757
0xdcdcdcdcU, 0x6d6d6d6dU, 0x7e7e7e7eU, 0x0d0d0d0dU,
758
0x53535353U, 0x94949494U, 0xc3c3c3c3U, 0x28282828U,
759
0x27272727U, 0x06060606U, 0x5f5f5f5fU, 0xadadadadU,
760
0x67676767U, 0x5c5c5c5cU, 0x55555555U, 0x48484848U,
761
0x0e0e0e0eU, 0x52525252U, 0xeaeaeaeaU, 0x42424242U,
762
0x5b5b5b5bU, 0x5d5d5d5dU, 0x30303030U, 0x58585858U,
763
0x51515151U, 0x59595959U, 0x3c3c3c3cU, 0x4e4e4e4eU,
764
0x38383838U, 0x8a8a8a8aU, 0x72727272U, 0x14141414U,
765
0xe7e7e7e7U, 0xc6c6c6c6U, 0xdedededeU, 0x50505050U,
766
0x8e8e8e8eU, 0x92929292U, 0xd1d1d1d1U, 0x77777777U,
767
0x93939393U, 0x45454545U, 0x9a9a9a9aU, 0xcecececeU,
768
0x2d2d2d2dU, 0x03030303U, 0x62626262U, 0xb6b6b6b6U,
769
0xb9b9b9b9U, 0xbfbfbfbfU, 0x96969696U, 0x6b6b6b6bU,
770
0x3f3f3f3fU, 0x07070707U, 0x12121212U, 0xaeaeaeaeU,
771
0x40404040U, 0x34343434U, 0x46464646U, 0x3e3e3e3eU,
772
0xdbdbdbdbU, 0xcfcfcfcfU, 0xececececU, 0xccccccccU,
773
0xc1c1c1c1U, 0xa1a1a1a1U, 0xc0c0c0c0U, 0xd6d6d6d6U,
774
0x1d1d1d1dU, 0xf4f4f4f4U, 0x61616161U, 0x3b3b3b3bU,
775
0x10101010U, 0xd8d8d8d8U, 0x68686868U, 0xa0a0a0a0U,
776
0xb1b1b1b1U, 0x0a0a0a0aU, 0x69696969U, 0x6c6c6c6cU,
777
0x49494949U, 0xfafafafaU, 0x76767676U, 0xc4c4c4c4U,
778
0x9e9e9e9eU, 0x9b9b9b9bU, 0x6e6e6e6eU, 0x99999999U,
779
0xc2c2c2c2U, 0xb7b7b7b7U, 0x98989898U, 0xbcbcbcbcU,
780
0x8f8f8f8fU, 0x85858585U, 0x1f1f1f1fU, 0xb4b4b4b4U,
781
0xf8f8f8f8U, 0x11111111U, 0x2e2e2e2eU, 0x00000000U,
782
0x25252525U, 0x1c1c1c1cU, 0x2a2a2a2aU, 0x3d3d3d3dU,
783
0x05050505U, 0x4f4f4f4fU, 0x7b7b7b7bU, 0xb2b2b2b2U,
784
0x32323232U, 0x90909090U, 0xafafafafU, 0x19191919U,
785
0xa3a3a3a3U, 0xf7f7f7f7U, 0x73737373U, 0x9d9d9d9dU,
786
0x15151515U, 0x74747474U, 0xeeeeeeeeU, 0xcacacacaU,
787
0x9f9f9f9fU, 0x0f0f0f0fU, 0x1b1b1b1bU, 0x75757575U,
788
0x86868686U, 0x84848484U, 0x9c9c9c9cU, 0x4a4a4a4aU,
789
0x97979797U, 0x1a1a1a1aU, 0x65656565U, 0xf6f6f6f6U,
790
0xededededU, 0x09090909U, 0xbbbbbbbbU, 0x26262626U,
791
0x83838383U, 0xebebebebU, 0x6f6f6f6fU, 0x81818181U,
792
0x04040404U, 0x6a6a6a6aU, 0x43434343U, 0x01010101U,
793
0x17171717U, 0xe1e1e1e1U, 0x87878787U, 0xf5f5f5f5U,
794
0x8d8d8d8dU, 0xe3e3e3e3U, 0x23232323U, 0x80808080U,
795
0x44444444U, 0x16161616U, 0x66666666U, 0x21212121U,
796
0xfefefefeU, 0xd5d5d5d5U, 0x31313131U, 0xd9d9d9d9U,
797
0x35353535U, 0x18181818U, 0x02020202U, 0x64646464U,
798
0xf2f2f2f2U, 0xf1f1f1f1U, 0x56565656U, 0xcdcdcdcdU,
799
0x82828282U, 0xc8c8c8c8U, 0xbabababaU, 0xf0f0f0f0U,
800
0xefefefefU, 0xe9e9e9e9U, 0xe8e8e8e8U, 0xfdfdfdfdU,
801
0x89898989U, 0xd7d7d7d7U, 0xc7c7c7c7U, 0xb5b5b5b5U,
802
0xa4a4a4a4U, 0x2f2f2f2fU, 0x95959595U, 0x13131313U,
803
0x0b0b0b0bU, 0xf3f3f3f3U, 0xe0e0e0e0U, 0x37373737U,
806
static const ulong32 T5[256] = {
807
0x00000000U, 0x01020608U, 0x02040c10U, 0x03060a18U,
808
0x04081820U, 0x050a1e28U, 0x060c1430U, 0x070e1238U,
809
0x08103040U, 0x09123648U, 0x0a143c50U, 0x0b163a58U,
810
0x0c182860U, 0x0d1a2e68U, 0x0e1c2470U, 0x0f1e2278U,
811
0x10206080U, 0x11226688U, 0x12246c90U, 0x13266a98U,
812
0x142878a0U, 0x152a7ea8U, 0x162c74b0U, 0x172e72b8U,
813
0x183050c0U, 0x193256c8U, 0x1a345cd0U, 0x1b365ad8U,
814
0x1c3848e0U, 0x1d3a4ee8U, 0x1e3c44f0U, 0x1f3e42f8U,
815
0x2040c01dU, 0x2142c615U, 0x2244cc0dU, 0x2346ca05U,
816
0x2448d83dU, 0x254ade35U, 0x264cd42dU, 0x274ed225U,
817
0x2850f05dU, 0x2952f655U, 0x2a54fc4dU, 0x2b56fa45U,
818
0x2c58e87dU, 0x2d5aee75U, 0x2e5ce46dU, 0x2f5ee265U,
819
0x3060a09dU, 0x3162a695U, 0x3264ac8dU, 0x3366aa85U,
820
0x3468b8bdU, 0x356abeb5U, 0x366cb4adU, 0x376eb2a5U,
821
0x387090ddU, 0x397296d5U, 0x3a749ccdU, 0x3b769ac5U,
822
0x3c7888fdU, 0x3d7a8ef5U, 0x3e7c84edU, 0x3f7e82e5U,
823
0x40809d3aU, 0x41829b32U, 0x4284912aU, 0x43869722U,
824
0x4488851aU, 0x458a8312U, 0x468c890aU, 0x478e8f02U,
825
0x4890ad7aU, 0x4992ab72U, 0x4a94a16aU, 0x4b96a762U,
826
0x4c98b55aU, 0x4d9ab352U, 0x4e9cb94aU, 0x4f9ebf42U,
827
0x50a0fdbaU, 0x51a2fbb2U, 0x52a4f1aaU, 0x53a6f7a2U,
828
0x54a8e59aU, 0x55aae392U, 0x56ace98aU, 0x57aeef82U,
829
0x58b0cdfaU, 0x59b2cbf2U, 0x5ab4c1eaU, 0x5bb6c7e2U,
830
0x5cb8d5daU, 0x5dbad3d2U, 0x5ebcd9caU, 0x5fbedfc2U,
831
0x60c05d27U, 0x61c25b2fU, 0x62c45137U, 0x63c6573fU,
832
0x64c84507U, 0x65ca430fU, 0x66cc4917U, 0x67ce4f1fU,
833
0x68d06d67U, 0x69d26b6fU, 0x6ad46177U, 0x6bd6677fU,
834
0x6cd87547U, 0x6dda734fU, 0x6edc7957U, 0x6fde7f5fU,
835
0x70e03da7U, 0x71e23bafU, 0x72e431b7U, 0x73e637bfU,
836
0x74e82587U, 0x75ea238fU, 0x76ec2997U, 0x77ee2f9fU,
837
0x78f00de7U, 0x79f20befU, 0x7af401f7U, 0x7bf607ffU,
838
0x7cf815c7U, 0x7dfa13cfU, 0x7efc19d7U, 0x7ffe1fdfU,
839
0x801d2774U, 0x811f217cU, 0x82192b64U, 0x831b2d6cU,
840
0x84153f54U, 0x8517395cU, 0x86113344U, 0x8713354cU,
841
0x880d1734U, 0x890f113cU, 0x8a091b24U, 0x8b0b1d2cU,
842
0x8c050f14U, 0x8d07091cU, 0x8e010304U, 0x8f03050cU,
843
0x903d47f4U, 0x913f41fcU, 0x92394be4U, 0x933b4decU,
844
0x94355fd4U, 0x953759dcU, 0x963153c4U, 0x973355ccU,
845
0x982d77b4U, 0x992f71bcU, 0x9a297ba4U, 0x9b2b7dacU,
846
0x9c256f94U, 0x9d27699cU, 0x9e216384U, 0x9f23658cU,
847
0xa05de769U, 0xa15fe161U, 0xa259eb79U, 0xa35bed71U,
848
0xa455ff49U, 0xa557f941U, 0xa651f359U, 0xa753f551U,
849
0xa84dd729U, 0xa94fd121U, 0xaa49db39U, 0xab4bdd31U,
850
0xac45cf09U, 0xad47c901U, 0xae41c319U, 0xaf43c511U,
851
0xb07d87e9U, 0xb17f81e1U, 0xb2798bf9U, 0xb37b8df1U,
852
0xb4759fc9U, 0xb57799c1U, 0xb67193d9U, 0xb77395d1U,
853
0xb86db7a9U, 0xb96fb1a1U, 0xba69bbb9U, 0xbb6bbdb1U,
854
0xbc65af89U, 0xbd67a981U, 0xbe61a399U, 0xbf63a591U,
855
0xc09dba4eU, 0xc19fbc46U, 0xc299b65eU, 0xc39bb056U,
856
0xc495a26eU, 0xc597a466U, 0xc691ae7eU, 0xc793a876U,
857
0xc88d8a0eU, 0xc98f8c06U, 0xca89861eU, 0xcb8b8016U,
858
0xcc85922eU, 0xcd879426U, 0xce819e3eU, 0xcf839836U,
859
0xd0bddaceU, 0xd1bfdcc6U, 0xd2b9d6deU, 0xd3bbd0d6U,
860
0xd4b5c2eeU, 0xd5b7c4e6U, 0xd6b1cefeU, 0xd7b3c8f6U,
861
0xd8adea8eU, 0xd9afec86U, 0xdaa9e69eU, 0xdbabe096U,
862
0xdca5f2aeU, 0xdda7f4a6U, 0xdea1febeU, 0xdfa3f8b6U,
863
0xe0dd7a53U, 0xe1df7c5bU, 0xe2d97643U, 0xe3db704bU,
864
0xe4d56273U, 0xe5d7647bU, 0xe6d16e63U, 0xe7d3686bU,
865
0xe8cd4a13U, 0xe9cf4c1bU, 0xeac94603U, 0xebcb400bU,
866
0xecc55233U, 0xedc7543bU, 0xeec15e23U, 0xefc3582bU,
867
0xf0fd1ad3U, 0xf1ff1cdbU, 0xf2f916c3U, 0xf3fb10cbU,
868
0xf4f502f3U, 0xf5f704fbU, 0xf6f10ee3U, 0xf7f308ebU,
869
0xf8ed2a93U, 0xf9ef2c9bU, 0xfae92683U, 0xfbeb208bU,
870
0xfce532b3U, 0xfde734bbU, 0xfee13ea3U, 0xffe338abU,
874
* The round constants.
876
static const ulong32 rc[] = {
877
0xa7d3e671U, 0xd0ac4d79U, 0x3ac991fcU, 0x1e4754bdU,
878
0x8ca57afbU, 0x63b8ddd4U, 0xe5b3c5beU, 0xa9880ca2U,
879
0x39df29daU, 0x2ba8cb4cU, 0x4b22aa24U, 0x4170a6f9U,
880
0x5ae2b036U, 0x7de433ffU, 0x6020088bU, 0x5eab7f78U,
881
0x7c2c57d2U, 0xdc6d7e0dU, 0x5394c328U,
887
Initialize the Anubis block cipher
888
@param key The symmetric key you wish to pass
889
@param keylen The key length in bytes
890
@param num_rounds The number of rounds desired (0 for default)
891
@param skey The key in as scheduled by this function.
892
@return CRYPT_OK if successful
894
#ifdef LTC_CLEAN_STACK
895
static int _anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey)
897
int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey)
901
ulong32 kappa[MAX_N];
902
ulong32 inter[MAX_N];
903
ulong32 v, K0, K1, K2, K3;
905
LTC_ARGCHK(key != NULL);
906
LTC_ARGCHK(skey != NULL);
908
/* Valid sizes (in bytes) are 16, 20, 24, 28, 32, 36, and 40. */
909
if ((keylen & 3) || (keylen < 16) || (keylen > 40)) {
910
return CRYPT_INVALID_KEYSIZE;
912
skey->anubis.keyBits = keylen*8;
915
* determine the N length parameter:
916
* (N.B. it is assumed that the key length is valid!)
918
N = skey->anubis.keyBits >> 5;
921
* determine number of rounds from key size:
923
skey->anubis.R = R = 8 + N;
925
if (num_rounds != 0 && num_rounds != skey->anubis.R) {
926
return CRYPT_INVALID_ROUNDS;
930
* map cipher key to initial key state (mu):
932
for (i = 0, pos = 0; i < N; i++, pos += 4) {
935
(key[pos + 1] << 16) ^
936
(key[pos + 2] << 8) ^
941
* generate R + 1 round keys:
943
for (r = 0; r <= R; r++) {
945
* generate r-th round key K^r:
947
K0 = T4[(kappa[N - 1] >> 24) & 0xff];
948
K1 = T4[(kappa[N - 1] >> 16) & 0xff];
949
K2 = T4[(kappa[N - 1] >> 8) & 0xff];
950
K3 = T4[(kappa[N - 1] ) & 0xff];
951
for (i = N - 2; i >= 0; i--) {
952
K0 = T4[(kappa[i] >> 24) & 0xff] ^
953
(T5[(K0 >> 24) & 0xff] & 0xff000000U) ^
954
(T5[(K0 >> 16) & 0xff] & 0x00ff0000U) ^
955
(T5[(K0 >> 8) & 0xff] & 0x0000ff00U) ^
956
(T5[(K0 ) & 0xff] & 0x000000ffU);
957
K1 = T4[(kappa[i] >> 16) & 0xff] ^
958
(T5[(K1 >> 24) & 0xff] & 0xff000000U) ^
959
(T5[(K1 >> 16) & 0xff] & 0x00ff0000U) ^
960
(T5[(K1 >> 8) & 0xff] & 0x0000ff00U) ^
961
(T5[(K1 ) & 0xff] & 0x000000ffU);
962
K2 = T4[(kappa[i] >> 8) & 0xff] ^
963
(T5[(K2 >> 24) & 0xff] & 0xff000000U) ^
964
(T5[(K2 >> 16) & 0xff] & 0x00ff0000U) ^
965
(T5[(K2 >> 8) & 0xff] & 0x0000ff00U) ^
966
(T5[(K2 ) & 0xff] & 0x000000ffU);
967
K3 = T4[(kappa[i] ) & 0xff] ^
968
(T5[(K3 >> 24) & 0xff] & 0xff000000U) ^
969
(T5[(K3 >> 16) & 0xff] & 0x00ff0000U) ^
970
(T5[(K3 >> 8) & 0xff] & 0x0000ff00U) ^
971
(T5[(K3 ) & 0xff] & 0x000000ffU);
974
-- this is the code to use with the large U tables:
975
K0 = K1 = K2 = K3 = 0;
976
for (i = 0; i < N; i++) {
977
K0 ^= U[i][(kappa[i] >> 24) & 0xff];
978
K1 ^= U[i][(kappa[i] >> 16) & 0xff];
979
K2 ^= U[i][(kappa[i] >> 8) & 0xff];
980
K3 ^= U[i][(kappa[i] ) & 0xff];
983
skey->anubis.roundKeyEnc[r][0] = K0;
984
skey->anubis.roundKeyEnc[r][1] = K1;
985
skey->anubis.roundKeyEnc[r][2] = K2;
986
skey->anubis.roundKeyEnc[r][3] = K3;
989
* compute kappa^{r+1} from kappa^r:
994
for (i = 0; i < N; i++) {
996
inter[i] = T0[(kappa[j--] >> 24) & 0xff]; if (j < 0) j = N - 1;
997
inter[i] ^= T1[(kappa[j--] >> 16) & 0xff]; if (j < 0) j = N - 1;
998
inter[i] ^= T2[(kappa[j--] >> 8) & 0xff]; if (j < 0) j = N - 1;
999
inter[i] ^= T3[(kappa[j ] ) & 0xff];
1001
kappa[0] = inter[0] ^ rc[r];
1002
for (i = 1; i < N; i++) {
1003
kappa[i] = inter[i];
1008
* generate inverse key schedule: K'^0 = K^R, K'^R = K^0, K'^r = theta(K^{R-r}):
1010
for (i = 0; i < 4; i++) {
1011
skey->anubis.roundKeyDec[0][i] = skey->anubis.roundKeyEnc[R][i];
1012
skey->anubis.roundKeyDec[R][i] = skey->anubis.roundKeyEnc[0][i];
1014
for (r = 1; r < R; r++) {
1015
for (i = 0; i < 4; i++) {
1016
v = skey->anubis.roundKeyEnc[R - r][i];
1017
skey->anubis.roundKeyDec[r][i] =
1018
T0[T4[(v >> 24) & 0xff] & 0xff] ^
1019
T1[T4[(v >> 16) & 0xff] & 0xff] ^
1020
T2[T4[(v >> 8) & 0xff] & 0xff] ^
1021
T3[T4[(v ) & 0xff] & 0xff];
1028
#ifdef LTC_CLEAN_STACK
1029
int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey)
1032
err = _anubis_setup(key, keylen, num_rounds, skey);
1033
burn_stack(sizeof(int) * 5 + sizeof(ulong32) * (MAX_N + MAX_N + 5));
1039
static void anubis_crypt(const unsigned char *plaintext, unsigned char *ciphertext,
1040
ulong32 roundKey[18 + 1][4], int R) {
1046
* map plaintext block to cipher state (mu)
1047
* and add initial round key (sigma[K^0]):
1049
for (i = 0, pos = 0; i < 4; i++, pos += 4) {
1051
(plaintext[pos ] << 24) ^
1052
(plaintext[pos + 1] << 16) ^
1053
(plaintext[pos + 2] << 8) ^
1054
(plaintext[pos + 3] ) ^
1059
* R - 1 full rounds:
1061
for (r = 1; r < R; r++) {
1063
T0[(state[0] >> 24) & 0xff] ^
1064
T1[(state[1] >> 24) & 0xff] ^
1065
T2[(state[2] >> 24) & 0xff] ^
1066
T3[(state[3] >> 24) & 0xff] ^
1069
T0[(state[0] >> 16) & 0xff] ^
1070
T1[(state[1] >> 16) & 0xff] ^
1071
T2[(state[2] >> 16) & 0xff] ^
1072
T3[(state[3] >> 16) & 0xff] ^
1075
T0[(state[0] >> 8) & 0xff] ^
1076
T1[(state[1] >> 8) & 0xff] ^
1077
T2[(state[2] >> 8) & 0xff] ^
1078
T3[(state[3] >> 8) & 0xff] ^
1081
T0[(state[0] ) & 0xff] ^
1082
T1[(state[1] ) & 0xff] ^
1083
T2[(state[2] ) & 0xff] ^
1084
T3[(state[3] ) & 0xff] ^
1086
state[0] = inter[0];
1087
state[1] = inter[1];
1088
state[2] = inter[2];
1089
state[3] = inter[3];
1096
(T0[(state[0] >> 24) & 0xff] & 0xff000000U) ^
1097
(T1[(state[1] >> 24) & 0xff] & 0x00ff0000U) ^
1098
(T2[(state[2] >> 24) & 0xff] & 0x0000ff00U) ^
1099
(T3[(state[3] >> 24) & 0xff] & 0x000000ffU) ^
1102
(T0[(state[0] >> 16) & 0xff] & 0xff000000U) ^
1103
(T1[(state[1] >> 16) & 0xff] & 0x00ff0000U) ^
1104
(T2[(state[2] >> 16) & 0xff] & 0x0000ff00U) ^
1105
(T3[(state[3] >> 16) & 0xff] & 0x000000ffU) ^
1108
(T0[(state[0] >> 8) & 0xff] & 0xff000000U) ^
1109
(T1[(state[1] >> 8) & 0xff] & 0x00ff0000U) ^
1110
(T2[(state[2] >> 8) & 0xff] & 0x0000ff00U) ^
1111
(T3[(state[3] >> 8) & 0xff] & 0x000000ffU) ^
1114
(T0[(state[0] ) & 0xff] & 0xff000000U) ^
1115
(T1[(state[1] ) & 0xff] & 0x00ff0000U) ^
1116
(T2[(state[2] ) & 0xff] & 0x0000ff00U) ^
1117
(T3[(state[3] ) & 0xff] & 0x000000ffU) ^
1121
* map cipher state to ciphertext block (mu^{-1}):
1123
for (i = 0, pos = 0; i < 4; i++, pos += 4) {
1124
ulong32 w = inter[i];
1125
ciphertext[pos ] = (unsigned char)(w >> 24);
1126
ciphertext[pos + 1] = (unsigned char)(w >> 16);
1127
ciphertext[pos + 2] = (unsigned char)(w >> 8);
1128
ciphertext[pos + 3] = (unsigned char)(w );
1133
Encrypts a block of text with Anubis
1134
@param pt The input plaintext (16 bytes)
1135
@param ct The output ciphertext (16 bytes)
1136
@param skey The key as scheduled
1137
@return CRYPT_OK if successful
1139
int anubis_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
1141
LTC_ARGCHK(pt != NULL);
1142
LTC_ARGCHK(ct != NULL);
1143
LTC_ARGCHK(skey != NULL);
1144
anubis_crypt(pt, ct, skey->anubis.roundKeyEnc, skey->anubis.R);
1149
Decrypts a block of text with Anubis
1150
@param ct The input ciphertext (16 bytes)
1151
@param pt The output plaintext (16 bytes)
1152
@param skey The key as scheduled
1153
@return CRYPT_OK if successful
1155
int anubis_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
1157
LTC_ARGCHK(pt != NULL);
1158
LTC_ARGCHK(ct != NULL);
1159
LTC_ARGCHK(skey != NULL);
1160
anubis_crypt(ct, pt, skey->anubis.roundKeyDec, skey->anubis.R);
1165
Performs a self-test of the Anubis block cipher
1166
@return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled
1168
int anubis_test(void)
1170
#if !defined(LTC_TEST)
1173
static const struct test {
1175
unsigned char pt[16], ct[16], key[40];
1177
#ifndef ANUBIS_TWEAK
1178
/**** ORIGINAL ANUBIS ****/
1182
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1183
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1184
{ 0xF0, 0x68, 0x60, 0xFC, 0x67, 0x30, 0xE8, 0x18,
1185
0xF1, 0x32, 0xC7, 0x8A, 0xF4, 0x13, 0x2A, 0xFE },
1186
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1187
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1190
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1191
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1192
{ 0xA8, 0x66, 0x84, 0x80, 0x07, 0x74, 0x5C, 0x89,
1193
0xFC, 0x5E, 0xB5, 0xBA, 0xD4, 0xFE, 0x32, 0x6D },
1194
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1195
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1201
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1202
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1203
{ 0xBD, 0x5E, 0x32, 0xBE, 0x51, 0x67, 0xA8, 0xE2,
1204
0x72, 0xD7, 0x95, 0x0F, 0x83, 0xC6, 0x8C, 0x31 },
1205
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1206
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1207
0x00, 0x00, 0x00, 0x00 }
1210
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1211
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1212
{ 0x4C, 0x1F, 0x86, 0x2E, 0x11, 0xEB, 0xCE, 0xEB,
1213
0xFE, 0xB9, 0x73, 0xC9, 0xDF, 0xEF, 0x7A, 0xDB },
1214
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1215
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1216
0x00, 0x00, 0x00, 0x01 }
1222
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1223
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1224
{ 0x17, 0xAC, 0x57, 0x44, 0x9D, 0x59, 0x61, 0x66,
1225
0xD0, 0xC7, 0x9E, 0x04, 0x7C, 0xC7, 0x58, 0xF0 },
1226
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1227
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1228
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1231
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1232
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1233
{ 0x71, 0x52, 0xB4, 0xEB, 0x1D, 0xAA, 0x36, 0xFD,
1234
0x57, 0x14, 0x5F, 0x57, 0x04, 0x9F, 0x70, 0x74 },
1235
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1236
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1237
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1243
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1244
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1245
{ 0xA2, 0xF0, 0xA6, 0xB9, 0x17, 0x93, 0x2A, 0x3B,
1246
0xEF, 0x08, 0xE8, 0x7A, 0x58, 0xD6, 0xF8, 0x53 },
1247
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1248
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1249
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1250
0x00, 0x00, 0x00, 0x00 }
1253
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1254
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1255
{ 0xF0, 0xCA, 0xFC, 0x78, 0x8B, 0x4B, 0x4E, 0x53,
1256
0x8B, 0xC4, 0x32, 0x6A, 0xF5, 0xB9, 0x1B, 0x5F },
1257
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1258
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1259
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1260
0x00, 0x00, 0x00, 0x01 }
1266
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1267
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1268
{ 0xE0, 0x86, 0xAC, 0x45, 0x6B, 0x3C, 0xE5, 0x13,
1269
0xED, 0xF5, 0xDF, 0xDD, 0xD6, 0x3B, 0x71, 0x93 },
1270
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1271
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1272
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1273
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1276
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1277
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1278
{ 0x50, 0x01, 0xB9, 0xF5, 0x21, 0xC1, 0xC1, 0x29,
1279
0x00, 0xD5, 0xEC, 0x98, 0x2B, 0x9E, 0xE8, 0x21 },
1280
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1281
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1282
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1283
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1289
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1290
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1291
{ 0xE8, 0xF4, 0xAF, 0x2B, 0x21, 0xA0, 0x87, 0x9B,
1292
0x41, 0x95, 0xB9, 0x71, 0x75, 0x79, 0x04, 0x7C },
1293
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1294
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1295
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1296
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1297
0x00, 0x00, 0x00, 0x00 }
1300
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1301
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1302
{ 0xE6, 0xA6, 0xA5, 0xBC, 0x8B, 0x63, 0x6F, 0xE2,
1303
0xBD, 0xA7, 0xA7, 0x53, 0xAB, 0x40, 0x22, 0xE0 },
1304
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1305
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1306
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1307
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1308
0x00, 0x00, 0x00, 0x01 }
1314
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1315
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1316
{ 0x17, 0x04, 0xD7, 0x2C, 0xC6, 0x85, 0x76, 0x02,
1317
0x4B, 0xCC, 0x39, 0x80, 0xD8, 0x22, 0xEA, 0xA4 },
1318
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1319
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1320
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1321
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1322
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1325
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1326
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1327
{ 0x7A, 0x41, 0xE6, 0x7D, 0x4F, 0xD8, 0x64, 0xF0,
1328
0x44, 0xA8, 0x3C, 0x73, 0x81, 0x7E, 0x53, 0xD8 },
1329
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1330
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1331
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1332
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1333
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1336
/**** Tweaked ANUBIS ****/
1340
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1341
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1342
{ 0xB8, 0x35, 0xBD, 0xC3, 0x34, 0x82, 0x9D, 0x83,
1343
0x71, 0xBF, 0xA3, 0x71, 0xE4, 0xB3, 0xC4, 0xFD },
1344
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1345
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1348
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1349
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1350
{ 0xE6, 0x14, 0x1E, 0xAF, 0xEB, 0xE0, 0x59, 0x3C,
1351
0x48, 0xE1, 0xCD, 0xF2, 0x1B, 0xBA, 0xA1, 0x89 },
1352
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1353
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1359
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1360
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1361
{ 0x97, 0x59, 0x79, 0x4B, 0x5C, 0xA0, 0x70, 0x73,
1362
0x24, 0xEF, 0xB3, 0x58, 0x67, 0xCA, 0xD4, 0xB3 },
1363
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1364
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1365
0x00, 0x00, 0x00, 0x00 }
1368
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1369
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1370
{ 0xB8, 0x0D, 0xFB, 0x9B, 0xE4, 0xA1, 0x58, 0x87,
1371
0xB3, 0x76, 0xD5, 0x02, 0x18, 0x95, 0xC1, 0x2E },
1372
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1373
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1374
0x00, 0x00, 0x00, 0x01 }
1380
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1381
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1382
{ 0x7D, 0x62, 0x3B, 0x52, 0xC7, 0x4C, 0x64, 0xD8,
1383
0xEB, 0xC7, 0x2D, 0x57, 0x97, 0x85, 0x43, 0x8F },
1384
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1385
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1386
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1389
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1390
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1391
{ 0xB1, 0x0A, 0x59, 0xDD, 0x5D, 0x5D, 0x8D, 0x67,
1392
0xEC, 0xEE, 0x4A, 0xC4, 0xBE, 0x4F, 0xA8, 0x4F },
1393
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1394
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1395
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1401
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1402
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1403
{ 0x68, 0x9E, 0x05, 0x94, 0x6A, 0x94, 0x43, 0x8F,
1404
0xE7, 0x8E, 0x37, 0x3D, 0x24, 0x97, 0x92, 0xF5 },
1405
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1406
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1407
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1408
0x00, 0x00, 0x00, 0x00 }
1411
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1412
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1413
{ 0xDD, 0xB7, 0xB0, 0xB4, 0xE9, 0xB4, 0x9B, 0x9C,
1414
0x38, 0x20, 0x25, 0x0B, 0x47, 0xC2, 0x1F, 0x89 },
1415
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1416
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1417
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1418
0x00, 0x00, 0x00, 0x01 }
1424
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1425
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1426
{ 0x96, 0x00, 0xF0, 0x76, 0x91, 0x69, 0x29, 0x87,
1427
0xF5, 0xE5, 0x97, 0xDB, 0xDB, 0xAF, 0x1B, 0x0A },
1428
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1429
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1430
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1431
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1434
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1435
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1436
{ 0x69, 0x9C, 0xAF, 0xDD, 0x94, 0xC7, 0xBC, 0x60,
1437
0x44, 0xFE, 0x02, 0x05, 0x8A, 0x6E, 0xEF, 0xBD },
1438
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1439
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1440
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1441
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1447
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1448
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1449
{ 0x0F, 0xC7, 0xA2, 0xC0, 0x11, 0x17, 0xAC, 0x43,
1450
0x52, 0x5E, 0xDF, 0x6C, 0xF3, 0x96, 0x33, 0x6C },
1451
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1452
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1453
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1454
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1455
0x00, 0x00, 0x00, 0x00 }
1458
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1459
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1460
{ 0xAD, 0x08, 0x4F, 0xED, 0x55, 0xA6, 0x94, 0x3E,
1461
0x7E, 0x5E, 0xED, 0x05, 0xA1, 0x9D, 0x41, 0xB4 },
1462
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1463
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1464
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1465
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1466
0x00, 0x00, 0x00, 0x01 }
1472
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1473
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1474
{ 0xFE, 0xE2, 0x0E, 0x2A, 0x9D, 0xC5, 0x83, 0xBA,
1475
0xA3, 0xA6, 0xD6, 0xA6, 0xF2, 0xE8, 0x06, 0xA5 },
1476
{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1477
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1478
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1479
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1480
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1483
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1484
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1485
{ 0x86, 0x3D, 0xCC, 0x4A, 0x60, 0x34, 0x9C, 0x28,
1486
0xA7, 0xDA, 0xA4, 0x3B, 0x0A, 0xD7, 0xFD, 0xC7 },
1487
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1488
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1489
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1490
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1491
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1496
unsigned char buf[2][16];
1499
for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) {
1500
anubis_setup(tests[x].key, tests[x].keylen, 0, &skey);
1501
anubis_ecb_encrypt(tests[x].pt, buf[0], &skey);
1502
anubis_ecb_decrypt(buf[0], buf[1], &skey);
1503
if (XMEMCMP(buf[0], tests[x].ct, 16) || XMEMCMP(buf[1], tests[x].pt, 16)) {
1504
return CRYPT_FAIL_TESTVECTOR;
1507
for (y = 0; y < 1000; y++) anubis_ecb_encrypt(buf[0], buf[0], &skey);
1508
for (y = 0; y < 1000; y++) anubis_ecb_decrypt(buf[0], buf[0], &skey);
1509
if (XMEMCMP(buf[0], tests[x].ct, 16)) {
1510
return CRYPT_FAIL_TESTVECTOR;
1518
/** Terminate the context
1519
@param skey The scheduled key
1521
void anubis_done(symmetric_key *skey)
1526
Gets suitable key size
1527
@param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable.
1528
@return CRYPT_OK if the input key size is acceptable.
1530
int anubis_keysize(int *keysize)
1532
LTC_ARGCHK(keysize != NULL);
1533
if (*keysize >= 40) {
1535
} else if (*keysize >= 36) {
1537
} else if (*keysize >= 32) {
1539
} else if (*keysize >= 28) {
1541
} else if (*keysize >= 24) {
1543
} else if (*keysize >= 20) {
1545
} else if (*keysize >= 16) {
1548
return CRYPT_INVALID_KEYSIZE;
1552
1556
/* $Source: /cvs/libtom/libtomcrypt/src/ciphers/anubis.c,v $ */
1553
/* $Revision: 1.7 $ */
1554
/* $Date: 2005/05/05 14:35:58 $ */
1557
/* $Revision: 1.15 $ */
1558
/* $Date: 2006/11/15 12:41:28 $ */