Mercurial > dropbear
comparison libtomcrypt/src/ciphers/anubis.c @ 285:1b9e69c058d2
propagate from branch 'au.asn.ucc.matt.ltc.dropbear' (head 20dccfc09627970a312d77fb41dc2970b62689c3)
to branch 'au.asn.ucc.matt.dropbear' (head fdf4a7a3b97ae5046139915de7e40399cceb2c01)
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Wed, 08 Mar 2006 13:23:58 +0000 |
parents | |
children | 0cbe8f6dbf9e |
comparison
equal
deleted
inserted
replaced
281:997e6f7dc01e | 285:1b9e69c058d2 |
---|---|
1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis | |
2 * | |
3 * LibTomCrypt is a library that provides various cryptographic | |
4 * algorithms in a highly modular and flexible manner. | |
5 * | |
6 * The library is free for all purposes without any express | |
7 * guarantee it works. | |
8 * | |
9 * Tom St Denis, [email protected], http://libtomcrypt.org | |
10 */ | |
11 | |
12 /** | |
13 @file anubis.c | |
14 Anubis implementation derived from public domain source | |
15 Authors: Paulo S.L.M. Barreto and Vincent Rijmen. | |
16 */ | |
17 | |
18 #include "tomcrypt.h" | |
19 | |
20 #ifdef ANUBIS | |
21 | |
22 const struct ltc_cipher_descriptor anubis_desc = { | |
23 "anubis", | |
24 19, | |
25 16, 40, 16, 12, | |
26 &anubis_setup, | |
27 &anubis_ecb_encrypt, | |
28 &anubis_ecb_decrypt, | |
29 &anubis_test, | |
30 &anubis_done, | |
31 &anubis_keysize, | |
32 NULL, NULL, NULL, NULL, NULL, NULL, NULL | |
33 }; | |
34 | |
35 #define MIN_N 4 | |
36 #define MAX_N 10 | |
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) | |
41 #define BLOCKSIZE 128 | |
42 #define BLOCKSIZEB (BLOCKSIZE/8) | |
43 | |
44 | |
45 /* | |
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 | |
49 * employed). | |
50 */ | |
51 #if defined(ANUBIS_TWEAK) | |
52 | |
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, | |
118 }; | |
119 | |
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, | |
185 }; | |
186 | |
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, | |
252 }; | |
253 | |
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, | |
319 }; | |
320 | |
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, | |
386 }; | |
387 | |
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, | |
453 }; | |
454 | |
455 /** | |
456 * The round constants. | |
457 */ | |
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, | |
464 }; | |
465 | |
466 | |
467 | |
468 #else | |
469 | |
470 | |
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, | |
536 }; | |
537 | |
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, | |
603 }; | |
604 | |
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, | |
670 }; | |
671 | |
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, | |
737 }; | |
738 | |
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, | |
804 }; | |
805 | |
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, | |
871 }; | |
872 | |
873 /** | |
874 * The round constants. | |
875 */ | |
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, | |
882 }; | |
883 | |
884 #endif | |
885 | |
886 /** | |
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 | |
893 */ | |
894 #ifdef CLEAN_STACK | |
895 static int _anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) | |
896 #else | |
897 int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) | |
898 #endif | |
899 { | |
900 int N, R, i, pos, r; | |
901 ulong32 kappa[MAX_N]; | |
902 ulong32 inter[MAX_N]; | |
903 ulong32 v, K0, K1, K2, K3; | |
904 | |
905 LTC_ARGCHK(key != NULL); | |
906 LTC_ARGCHK(skey != NULL); | |
907 | |
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; | |
911 } | |
912 skey->anubis.keyBits = keylen*8; | |
913 | |
914 /* | |
915 * determine the N length parameter: | |
916 * (N.B. it is assumed that the key length is valid!) | |
917 */ | |
918 N = skey->anubis.keyBits >> 5; | |
919 | |
920 /* | |
921 * determine number of rounds from key size: | |
922 */ | |
923 skey->anubis.R = R = 8 + N; | |
924 | |
925 if (num_rounds != 0 && num_rounds != skey->anubis.R) { | |
926 return CRYPT_INVALID_ROUNDS; | |
927 } | |
928 | |
929 /* | |
930 * map cipher key to initial key state (mu): | |
931 */ | |
932 for (i = 0, pos = 0; i < N; i++, pos += 4) { | |
933 kappa[i] = | |
934 (key[pos ] << 24) ^ | |
935 (key[pos + 1] << 16) ^ | |
936 (key[pos + 2] << 8) ^ | |
937 (key[pos + 3] ); | |
938 } | |
939 | |
940 /* | |
941 * generate R + 1 round keys: | |
942 */ | |
943 for (r = 0; r <= R; r++) { | |
944 /* | |
945 * generate r-th round key K^r: | |
946 */ | |
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); | |
972 } | |
973 /* | |
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]; | |
981 } | |
982 */ | |
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; | |
987 | |
988 /* | |
989 * compute kappa^{r+1} from kappa^r: | |
990 */ | |
991 if (r == R) { | |
992 break; | |
993 } | |
994 for (i = 0; i < N; i++) { | |
995 int j = 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]; | |
1000 } | |
1001 kappa[0] = inter[0] ^ rc[r]; | |
1002 for (i = 1; i < N; i++) { | |
1003 kappa[i] = inter[i]; | |
1004 } | |
1005 } | |
1006 | |
1007 /* | |
1008 * generate inverse key schedule: K'^0 = K^R, K'^R = K^0, K'^r = theta(K^{R-r}): | |
1009 */ | |
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]; | |
1013 } | |
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]; | |
1022 } | |
1023 } | |
1024 | |
1025 return CRYPT_OK; | |
1026 } | |
1027 | |
1028 #ifdef CLEAN_STACK | |
1029 int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) | |
1030 { | |
1031 int err; | |
1032 err = _anubis_setup(key, keylen, num_rounds, skey); | |
1033 burn_stack(sizeof(int) * 5 + sizeof(ulong32) * (MAX_N + MAX_N + 5)); | |
1034 return err; | |
1035 } | |
1036 #endif | |
1037 | |
1038 | |
1039 static void anubis_crypt(const unsigned char *plaintext, unsigned char *ciphertext, | |
1040 ulong32 roundKey[18 + 1][4], int R) { | |
1041 int i, pos, r; | |
1042 ulong32 state[4]; | |
1043 ulong32 inter[4]; | |
1044 | |
1045 /* | |
1046 * map plaintext block to cipher state (mu) | |
1047 * and add initial round key (sigma[K^0]): | |
1048 */ | |
1049 for (i = 0, pos = 0; i < 4; i++, pos += 4) { | |
1050 state[i] = | |
1051 (plaintext[pos ] << 24) ^ | |
1052 (plaintext[pos + 1] << 16) ^ | |
1053 (plaintext[pos + 2] << 8) ^ | |
1054 (plaintext[pos + 3] ) ^ | |
1055 roundKey[0][i]; | |
1056 } | |
1057 | |
1058 /* | |
1059 * R - 1 full rounds: | |
1060 */ | |
1061 for (r = 1; r < R; r++) { | |
1062 inter[0] = | |
1063 T0[(state[0] >> 24) ] ^ | |
1064 T1[(state[1] >> 24) ] ^ | |
1065 T2[(state[2] >> 24) ] ^ | |
1066 T3[(state[3] >> 24) ] ^ | |
1067 roundKey[r][0]; | |
1068 inter[1] = | |
1069 T0[(state[0] >> 16) & 0xff] ^ | |
1070 T1[(state[1] >> 16) & 0xff] ^ | |
1071 T2[(state[2] >> 16) & 0xff] ^ | |
1072 T3[(state[3] >> 16) & 0xff] ^ | |
1073 roundKey[r][1]; | |
1074 inter[2] = | |
1075 T0[(state[0] >> 8) & 0xff] ^ | |
1076 T1[(state[1] >> 8) & 0xff] ^ | |
1077 T2[(state[2] >> 8) & 0xff] ^ | |
1078 T3[(state[3] >> 8) & 0xff] ^ | |
1079 roundKey[r][2]; | |
1080 inter[3] = | |
1081 T0[(state[0] ) & 0xff] ^ | |
1082 T1[(state[1] ) & 0xff] ^ | |
1083 T2[(state[2] ) & 0xff] ^ | |
1084 T3[(state[3] ) & 0xff] ^ | |
1085 roundKey[r][3]; | |
1086 state[0] = inter[0]; | |
1087 state[1] = inter[1]; | |
1088 state[2] = inter[2]; | |
1089 state[3] = inter[3]; | |
1090 } | |
1091 | |
1092 /* | |
1093 * last round: | |
1094 */ | |
1095 inter[0] = | |
1096 (T0[(state[0] >> 24) ] & 0xff000000U) ^ | |
1097 (T1[(state[1] >> 24) ] & 0x00ff0000U) ^ | |
1098 (T2[(state[2] >> 24) ] & 0x0000ff00U) ^ | |
1099 (T3[(state[3] >> 24) ] & 0x000000ffU) ^ | |
1100 roundKey[R][0]; | |
1101 inter[1] = | |
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) ^ | |
1106 roundKey[R][1]; | |
1107 inter[2] = | |
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) ^ | |
1112 roundKey[R][2]; | |
1113 inter[3] = | |
1114 (T0[(state[0] ) & 0xff] & 0xff000000U) ^ | |
1115 (T1[(state[1] ) & 0xff] & 0x00ff0000U) ^ | |
1116 (T2[(state[2] ) & 0xff] & 0x0000ff00U) ^ | |
1117 (T3[(state[3] ) & 0xff] & 0x000000ffU) ^ | |
1118 roundKey[R][3]; | |
1119 | |
1120 /* | |
1121 * map cipher state to ciphertext block (mu^{-1}): | |
1122 */ | |
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 ); | |
1129 } | |
1130 } | |
1131 | |
1132 /** | |
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 */ | |
1138 void anubis_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) | |
1139 { | |
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); | |
1144 } | |
1145 | |
1146 /** | |
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 | |
1151 */ | |
1152 void anubis_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) | |
1153 { | |
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); | |
1158 } | |
1159 | |
1160 /** | |
1161 Performs a self-test of the Anubis block cipher | |
1162 @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled | |
1163 */ | |
1164 int anubis_test(void) | |
1165 { | |
1166 #if !defined(LTC_TEST) | |
1167 return CRYPT_NOP; | |
1168 #else | |
1169 static const struct test { | |
1170 int keylen; | |
1171 unsigned char pt[16], ct[16], key[40]; | |
1172 } tests[] = { | |
1173 #ifndef ANUBIS_TWEAK | |
1174 /**** ORIGINAL ANUBIS ****/ | |
1175 /* 128 bit keys */ | |
1176 { | |
1177 16, | |
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 } | |
1184 }, { | |
1185 16, | |
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 } | |
1192 }, | |
1193 | |
1194 /* 160-bit keys */ | |
1195 { | |
1196 20, | |
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 } | |
1204 }, { | |
1205 20, | |
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 } | |
1213 }, | |
1214 | |
1215 /* 192-bit keys */ | |
1216 { | |
1217 24, | |
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 } | |
1225 }, { | |
1226 24, | |
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 } | |
1234 }, | |
1235 | |
1236 /* 224-bit keys */ | |
1237 { | |
1238 28, | |
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 } | |
1247 }, { | |
1248 28, | |
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 } | |
1257 }, | |
1258 | |
1259 /* 256-bit keys */ | |
1260 { | |
1261 32, | |
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 } | |
1270 }, { | |
1271 32, | |
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 } | |
1280 }, | |
1281 | |
1282 /* 288-bit keys */ | |
1283 { | |
1284 36, | |
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 } | |
1294 }, { | |
1295 36, | |
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 } | |
1305 }, | |
1306 | |
1307 /* 320-bit keys */ | |
1308 { | |
1309 40, | |
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 } | |
1319 }, { | |
1320 40, | |
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 } | |
1330 } | |
1331 #else | |
1332 /**** Tweaked ANUBIS ****/ | |
1333 /* 128 bit keys */ | |
1334 { | |
1335 16, | |
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 } | |
1342 }, { | |
1343 16, | |
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 } | |
1350 }, | |
1351 | |
1352 /* 160-bit keys */ | |
1353 { | |
1354 20, | |
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 } | |
1362 }, { | |
1363 20, | |
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 } | |
1371 }, | |
1372 | |
1373 /* 192-bit keys */ | |
1374 { | |
1375 24, | |
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 } | |
1383 }, { | |
1384 24, | |
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 } | |
1392 }, | |
1393 | |
1394 /* 224-bit keys */ | |
1395 { | |
1396 28, | |
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 } | |
1405 }, { | |
1406 28, | |
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 } | |
1415 }, | |
1416 | |
1417 /* 256-bit keys */ | |
1418 { | |
1419 32, | |
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 } | |
1428 }, { | |
1429 32, | |
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 } | |
1438 }, | |
1439 | |
1440 /* 288-bit keys */ | |
1441 { | |
1442 36, | |
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 } | |
1452 }, { | |
1453 36, | |
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 } | |
1463 }, | |
1464 | |
1465 /* 320-bit keys */ | |
1466 { | |
1467 40, | |
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 } | |
1477 }, { | |
1478 40, | |
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 } | |
1488 } | |
1489 #endif | |
1490 }; | |
1491 int x, y; | |
1492 unsigned char buf[2][16]; | |
1493 symmetric_key skey; | |
1494 | |
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; | |
1501 } | |
1502 | |
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; | |
1507 } | |
1508 | |
1509 } | |
1510 return CRYPT_OK; | |
1511 #endif | |
1512 } | |
1513 | |
1514 /** Terminate the context | |
1515 @param skey The scheduled key | |
1516 */ | |
1517 void anubis_done(symmetric_key *skey) | |
1518 { | |
1519 } | |
1520 | |
1521 /** | |
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. | |
1525 */ | |
1526 int anubis_keysize(int *keysize) | |
1527 { | |
1528 LTC_ARGCHK(keysize != NULL); | |
1529 if (*keysize >= 40) { | |
1530 *keysize = 40; | |
1531 } else if (*keysize >= 36) { | |
1532 *keysize = 36; | |
1533 } else if (*keysize >= 32) { | |
1534 *keysize = 32; | |
1535 } else if (*keysize >= 28) { | |
1536 *keysize = 28; | |
1537 } else if (*keysize >= 24) { | |
1538 *keysize = 24; | |
1539 } else if (*keysize >= 20) { | |
1540 *keysize = 20; | |
1541 } else if (*keysize >= 16) { | |
1542 *keysize = 16; | |
1543 } else { | |
1544 return CRYPT_INVALID_KEYSIZE; | |
1545 } | |
1546 return CRYPT_OK; | |
1547 } | |
1548 | |
1549 #endif | |
1550 | |
1551 | |
1552 /* $Source: /cvs/libtom/libtomcrypt/src/ciphers/anubis.c,v $ */ | |
1553 /* $Revision: 1.7 $ */ | |
1554 /* $Date: 2005/05/05 14:35:58 $ */ |