6 * The Anubis algorithm was developed by Paulo S. L. M. Barreto and
11 * P.S.L.M. Barreto, V. Rijmen,
12 * ``The Anubis block cipher,''
13 * NESSIE submission, 2000.
15 * This software implements the "tweaked" version of Anubis.
16 * Only the S-box and (consequently) the rounds constants have been
19 * The original authors have disclaimed all copyright interest in this
20 * code and thus put it in the public domain. The subsequent authors
21 * have put this under the GNU General Public License.
23 * By Aaron Grothe ajgrothe@yahoo.com, October 28, 2004
25 * This program is free software; you can redistribute it and/or modify
26 * it under the terms of the GNU General Public License as published by
27 * the Free Software Foundation; either version 2 of the License, or
28 * (at your option) any later version.
32 #include <linux/init.h>
33 #include <linux/module.h>
35 #include <asm/byteorder.h>
36 #include <linux/crypto.h>
37 #include <linux/types.h>
39 #define ANUBIS_MIN_KEY_SIZE 16
40 #define ANUBIS_MAX_KEY_SIZE 40
41 #define ANUBIS_BLOCK_SIZE 16
42 #define ANUBIS_MAX_N 10
43 #define ANUBIS_MAX_ROUNDS (8 + ANUBIS_MAX_N)
46 int key_len
; // in bits
48 u32 E
[ANUBIS_MAX_ROUNDS
+ 1][4];
49 u32 D
[ANUBIS_MAX_ROUNDS
+ 1][4];
52 static const u32 T0
[256] = {
53 0xba69d2bbU
, 0x54a84de5U
, 0x2f5ebce2U
, 0x74e8cd25U
,
54 0x53a651f7U
, 0xd3bb6bd0U
, 0xd2b96fd6U
, 0x4d9a29b3U
,
55 0x50a05dfdU
, 0xac458acfU
, 0x8d070e09U
, 0xbf63c6a5U
,
56 0x70e0dd3dU
, 0x52a455f1U
, 0x9a29527bU
, 0x4c982db5U
,
57 0xeac98f46U
, 0xd5b773c4U
, 0x97336655U
, 0xd1bf63dcU
,
58 0x3366ccaaU
, 0x51a259fbU
, 0x5bb671c7U
, 0xa651a2f3U
,
59 0xdea15ffeU
, 0x48903dadU
, 0xa84d9ad7U
, 0x992f5e71U
,
60 0xdbab4be0U
, 0x3264c8acU
, 0xb773e695U
, 0xfce5d732U
,
61 0xe3dbab70U
, 0x9e214263U
, 0x913f7e41U
, 0x9b2b567dU
,
62 0xe2d9af76U
, 0xbb6bd6bdU
, 0x4182199bU
, 0x6edca579U
,
63 0xa557aef9U
, 0xcb8b0b80U
, 0x6bd6b167U
, 0x95376e59U
,
64 0xa15fbee1U
, 0xf3fbeb10U
, 0xb17ffe81U
, 0x0204080cU
,
65 0xcc851792U
, 0xc49537a2U
, 0x1d3a744eU
, 0x14285078U
,
66 0xc39b2bb0U
, 0x63c69157U
, 0xdaa94fe6U
, 0x5dba69d3U
,
67 0x5fbe61dfU
, 0xdca557f2U
, 0x7dfae913U
, 0xcd871394U
,
68 0x7ffee11fU
, 0x5ab475c1U
, 0x6cd8ad75U
, 0x5cb86dd5U
,
69 0xf7f3fb08U
, 0x264c98d4U
, 0xffe3db38U
, 0xedc79354U
,
70 0xe8cd874aU
, 0x9d274e69U
, 0x6fdea17fU
, 0x8e010203U
,
71 0x19326456U
, 0xa05dbae7U
, 0xf0fde71aU
, 0x890f1e11U
,
72 0x0f1e3c22U
, 0x070e1c12U
, 0xaf4386c5U
, 0xfbebcb20U
,
73 0x08102030U
, 0x152a547eU
, 0x0d1a342eU
, 0x04081018U
,
74 0x01020406U
, 0x64c88d45U
, 0xdfa35bf8U
, 0x76ecc529U
,
75 0x79f2f90bU
, 0xdda753f4U
, 0x3d7af48eU
, 0x162c5874U
,
76 0x3f7efc82U
, 0x376edcb2U
, 0x6ddaa973U
, 0x3870e090U
,
77 0xb96fdeb1U
, 0x73e6d137U
, 0xe9cf834cU
, 0x356ad4beU
,
78 0x55aa49e3U
, 0x71e2d93bU
, 0x7bf6f107U
, 0x8c050a0fU
,
79 0x72e4d531U
, 0x880d1a17U
, 0xf6f1ff0eU
, 0x2a54a8fcU
,
80 0x3e7cf884U
, 0x5ebc65d9U
, 0x274e9cd2U
, 0x468c0589U
,
81 0x0c183028U
, 0x65ca8943U
, 0x68d0bd6dU
, 0x61c2995bU
,
82 0x03060c0aU
, 0xc19f23bcU
, 0x57ae41efU
, 0xd6b17fceU
,
83 0xd9af43ecU
, 0x58b07dcdU
, 0xd8ad47eaU
, 0x66cc8549U
,
84 0xd7b37bc8U
, 0x3a74e89cU
, 0xc88d078aU
, 0x3c78f088U
,
85 0xfae9cf26U
, 0x96316253U
, 0xa753a6f5U
, 0x982d5a77U
,
86 0xecc59752U
, 0xb86ddab7U
, 0xc7933ba8U
, 0xae4182c3U
,
87 0x69d2b96bU
, 0x4b9631a7U
, 0xab4b96ddU
, 0xa94f9ed1U
,
88 0x67ce814fU
, 0x0a14283cU
, 0x478e018fU
, 0xf2f9ef16U
,
89 0xb577ee99U
, 0x224488ccU
, 0xe5d7b364U
, 0xeec19f5eU
,
90 0xbe61c2a3U
, 0x2b56acfaU
, 0x811f3e21U
, 0x1224486cU
,
91 0x831b362dU
, 0x1b366c5aU
, 0x0e1c3824U
, 0x23468ccaU
,
92 0xf5f7f304U
, 0x458a0983U
, 0x214284c6U
, 0xce811f9eU
,
93 0x499239abU
, 0x2c58b0e8U
, 0xf9efc32cU
, 0xe6d1bf6eU
,
94 0xb671e293U
, 0x2850a0f0U
, 0x172e5c72U
, 0x8219322bU
,
95 0x1a34685cU
, 0x8b0b161dU
, 0xfee1df3eU
, 0x8a09121bU
,
96 0x09122436U
, 0xc98f038cU
, 0x87132635U
, 0x4e9c25b9U
,
97 0xe1dfa37cU
, 0x2e5cb8e4U
, 0xe4d5b762U
, 0xe0dda77aU
,
98 0xebcb8b40U
, 0x903d7a47U
, 0xa455aaffU
, 0x1e3c7844U
,
99 0x85172e39U
, 0x60c09d5dU
, 0x00000000U
, 0x254a94deU
,
100 0xf4f5f702U
, 0xf1ffe31cU
, 0x94356a5fU
, 0x0b162c3aU
,
101 0xe7d3bb68U
, 0x75eac923U
, 0xefc39b58U
, 0x3468d0b8U
,
102 0x3162c4a6U
, 0xd4b577c2U
, 0xd0bd67daU
, 0x86112233U
,
103 0x7efce519U
, 0xad478ec9U
, 0xfde7d334U
, 0x2952a4f6U
,
104 0x3060c0a0U
, 0x3b76ec9aU
, 0x9f234665U
, 0xf8edc72aU
,
105 0xc6913faeU
, 0x13264c6aU
, 0x060c1814U
, 0x050a141eU
,
106 0xc59733a4U
, 0x11224466U
, 0x77eec12fU
, 0x7cf8ed15U
,
107 0x7af4f501U
, 0x78f0fd0dU
, 0x366cd8b4U
, 0x1c387048U
,
108 0x3972e496U
, 0x59b279cbU
, 0x18306050U
, 0x56ac45e9U
,
109 0xb37bf68dU
, 0xb07dfa87U
, 0x244890d8U
, 0x204080c0U
,
110 0xb279f28bU
, 0x9239724bU
, 0xa35bb6edU
, 0xc09d27baU
,
111 0x44880d85U
, 0x62c49551U
, 0x10204060U
, 0xb475ea9fU
,
112 0x84152a3fU
, 0x43861197U
, 0x933b764dU
, 0xc2992fb6U
,
113 0x4a9435a1U
, 0xbd67cea9U
, 0x8f030605U
, 0x2d5ab4eeU
,
114 0xbc65caafU
, 0x9c254a6fU
, 0x6ad4b561U
, 0x40801d9dU
,
115 0xcf831b98U
, 0xa259b2ebU
, 0x801d3a27U
, 0x4f9e21bfU
,
116 0x1f3e7c42U
, 0xca890f86U
, 0xaa4992dbU
, 0x42841591U
,
119 static const u32 T1
[256] = {
120 0x69babbd2U
, 0xa854e54dU
, 0x5e2fe2bcU
, 0xe87425cdU
,
121 0xa653f751U
, 0xbbd3d06bU
, 0xb9d2d66fU
, 0x9a4db329U
,
122 0xa050fd5dU
, 0x45accf8aU
, 0x078d090eU
, 0x63bfa5c6U
,
123 0xe0703dddU
, 0xa452f155U
, 0x299a7b52U
, 0x984cb52dU
,
124 0xc9ea468fU
, 0xb7d5c473U
, 0x33975566U
, 0xbfd1dc63U
,
125 0x6633aaccU
, 0xa251fb59U
, 0xb65bc771U
, 0x51a6f3a2U
,
126 0xa1defe5fU
, 0x9048ad3dU
, 0x4da8d79aU
, 0x2f99715eU
,
127 0xabdbe04bU
, 0x6432acc8U
, 0x73b795e6U
, 0xe5fc32d7U
,
128 0xdbe370abU
, 0x219e6342U
, 0x3f91417eU
, 0x2b9b7d56U
,
129 0xd9e276afU
, 0x6bbbbdd6U
, 0x82419b19U
, 0xdc6e79a5U
,
130 0x57a5f9aeU
, 0x8bcb800bU
, 0xd66b67b1U
, 0x3795596eU
,
131 0x5fa1e1beU
, 0xfbf310ebU
, 0x7fb181feU
, 0x04020c08U
,
132 0x85cc9217U
, 0x95c4a237U
, 0x3a1d4e74U
, 0x28147850U
,
133 0x9bc3b02bU
, 0xc6635791U
, 0xa9dae64fU
, 0xba5dd369U
,
134 0xbe5fdf61U
, 0xa5dcf257U
, 0xfa7d13e9U
, 0x87cd9413U
,
135 0xfe7f1fe1U
, 0xb45ac175U
, 0xd86c75adU
, 0xb85cd56dU
,
136 0xf3f708fbU
, 0x4c26d498U
, 0xe3ff38dbU
, 0xc7ed5493U
,
137 0xcde84a87U
, 0x279d694eU
, 0xde6f7fa1U
, 0x018e0302U
,
138 0x32195664U
, 0x5da0e7baU
, 0xfdf01ae7U
, 0x0f89111eU
,
139 0x1e0f223cU
, 0x0e07121cU
, 0x43afc586U
, 0xebfb20cbU
,
140 0x10083020U
, 0x2a157e54U
, 0x1a0d2e34U
, 0x08041810U
,
141 0x02010604U
, 0xc864458dU
, 0xa3dff85bU
, 0xec7629c5U
,
142 0xf2790bf9U
, 0xa7ddf453U
, 0x7a3d8ef4U
, 0x2c167458U
,
143 0x7e3f82fcU
, 0x6e37b2dcU
, 0xda6d73a9U
, 0x703890e0U
,
144 0x6fb9b1deU
, 0xe67337d1U
, 0xcfe94c83U
, 0x6a35bed4U
,
145 0xaa55e349U
, 0xe2713bd9U
, 0xf67b07f1U
, 0x058c0f0aU
,
146 0xe47231d5U
, 0x0d88171aU
, 0xf1f60effU
, 0x542afca8U
,
147 0x7c3e84f8U
, 0xbc5ed965U
, 0x4e27d29cU
, 0x8c468905U
,
148 0x180c2830U
, 0xca654389U
, 0xd0686dbdU
, 0xc2615b99U
,
149 0x06030a0cU
, 0x9fc1bc23U
, 0xae57ef41U
, 0xb1d6ce7fU
,
150 0xafd9ec43U
, 0xb058cd7dU
, 0xadd8ea47U
, 0xcc664985U
,
151 0xb3d7c87bU
, 0x743a9ce8U
, 0x8dc88a07U
, 0x783c88f0U
,
152 0xe9fa26cfU
, 0x31965362U
, 0x53a7f5a6U
, 0x2d98775aU
,
153 0xc5ec5297U
, 0x6db8b7daU
, 0x93c7a83bU
, 0x41aec382U
,
154 0xd2696bb9U
, 0x964ba731U
, 0x4babdd96U
, 0x4fa9d19eU
,
155 0xce674f81U
, 0x140a3c28U
, 0x8e478f01U
, 0xf9f216efU
,
156 0x77b599eeU
, 0x4422cc88U
, 0xd7e564b3U
, 0xc1ee5e9fU
,
157 0x61bea3c2U
, 0x562bfaacU
, 0x1f81213eU
, 0x24126c48U
,
158 0x1b832d36U
, 0x361b5a6cU
, 0x1c0e2438U
, 0x4623ca8cU
,
159 0xf7f504f3U
, 0x8a458309U
, 0x4221c684U
, 0x81ce9e1fU
,
160 0x9249ab39U
, 0x582ce8b0U
, 0xeff92cc3U
, 0xd1e66ebfU
,
161 0x71b693e2U
, 0x5028f0a0U
, 0x2e17725cU
, 0x19822b32U
,
162 0x341a5c68U
, 0x0b8b1d16U
, 0xe1fe3edfU
, 0x098a1b12U
,
163 0x12093624U
, 0x8fc98c03U
, 0x13873526U
, 0x9c4eb925U
,
164 0xdfe17ca3U
, 0x5c2ee4b8U
, 0xd5e462b7U
, 0xdde07aa7U
,
165 0xcbeb408bU
, 0x3d90477aU
, 0x55a4ffaaU
, 0x3c1e4478U
,
166 0x1785392eU
, 0xc0605d9dU
, 0x00000000U
, 0x4a25de94U
,
167 0xf5f402f7U
, 0xfff11ce3U
, 0x35945f6aU
, 0x160b3a2cU
,
168 0xd3e768bbU
, 0xea7523c9U
, 0xc3ef589bU
, 0x6834b8d0U
,
169 0x6231a6c4U
, 0xb5d4c277U
, 0xbdd0da67U
, 0x11863322U
,
170 0xfc7e19e5U
, 0x47adc98eU
, 0xe7fd34d3U
, 0x5229f6a4U
,
171 0x6030a0c0U
, 0x763b9aecU
, 0x239f6546U
, 0xedf82ac7U
,
172 0x91c6ae3fU
, 0x26136a4cU
, 0x0c061418U
, 0x0a051e14U
,
173 0x97c5a433U
, 0x22116644U
, 0xee772fc1U
, 0xf87c15edU
,
174 0xf47a01f5U
, 0xf0780dfdU
, 0x6c36b4d8U
, 0x381c4870U
,
175 0x723996e4U
, 0xb259cb79U
, 0x30185060U
, 0xac56e945U
,
176 0x7bb38df6U
, 0x7db087faU
, 0x4824d890U
, 0x4020c080U
,
177 0x79b28bf2U
, 0x39924b72U
, 0x5ba3edb6U
, 0x9dc0ba27U
,
178 0x8844850dU
, 0xc4625195U
, 0x20106040U
, 0x75b49feaU
,
179 0x15843f2aU
, 0x86439711U
, 0x3b934d76U
, 0x99c2b62fU
,
180 0x944aa135U
, 0x67bda9ceU
, 0x038f0506U
, 0x5a2deeb4U
,
181 0x65bcafcaU
, 0x259c6f4aU
, 0xd46a61b5U
, 0x80409d1dU
,
182 0x83cf981bU
, 0x59a2ebb2U
, 0x1d80273aU
, 0x9e4fbf21U
,
183 0x3e1f427cU
, 0x89ca860fU
, 0x49aadb92U
, 0x84429115U
,
186 static const u32 T2
[256] = {
187 0xd2bbba69U
, 0x4de554a8U
, 0xbce22f5eU
, 0xcd2574e8U
,
188 0x51f753a6U
, 0x6bd0d3bbU
, 0x6fd6d2b9U
, 0x29b34d9aU
,
189 0x5dfd50a0U
, 0x8acfac45U
, 0x0e098d07U
, 0xc6a5bf63U
,
190 0xdd3d70e0U
, 0x55f152a4U
, 0x527b9a29U
, 0x2db54c98U
,
191 0x8f46eac9U
, 0x73c4d5b7U
, 0x66559733U
, 0x63dcd1bfU
,
192 0xccaa3366U
, 0x59fb51a2U
, 0x71c75bb6U
, 0xa2f3a651U
,
193 0x5ffedea1U
, 0x3dad4890U
, 0x9ad7a84dU
, 0x5e71992fU
,
194 0x4be0dbabU
, 0xc8ac3264U
, 0xe695b773U
, 0xd732fce5U
,
195 0xab70e3dbU
, 0x42639e21U
, 0x7e41913fU
, 0x567d9b2bU
,
196 0xaf76e2d9U
, 0xd6bdbb6bU
, 0x199b4182U
, 0xa5796edcU
,
197 0xaef9a557U
, 0x0b80cb8bU
, 0xb1676bd6U
, 0x6e599537U
,
198 0xbee1a15fU
, 0xeb10f3fbU
, 0xfe81b17fU
, 0x080c0204U
,
199 0x1792cc85U
, 0x37a2c495U
, 0x744e1d3aU
, 0x50781428U
,
200 0x2bb0c39bU
, 0x915763c6U
, 0x4fe6daa9U
, 0x69d35dbaU
,
201 0x61df5fbeU
, 0x57f2dca5U
, 0xe9137dfaU
, 0x1394cd87U
,
202 0xe11f7ffeU
, 0x75c15ab4U
, 0xad756cd8U
, 0x6dd55cb8U
,
203 0xfb08f7f3U
, 0x98d4264cU
, 0xdb38ffe3U
, 0x9354edc7U
,
204 0x874ae8cdU
, 0x4e699d27U
, 0xa17f6fdeU
, 0x02038e01U
,
205 0x64561932U
, 0xbae7a05dU
, 0xe71af0fdU
, 0x1e11890fU
,
206 0x3c220f1eU
, 0x1c12070eU
, 0x86c5af43U
, 0xcb20fbebU
,
207 0x20300810U
, 0x547e152aU
, 0x342e0d1aU
, 0x10180408U
,
208 0x04060102U
, 0x8d4564c8U
, 0x5bf8dfa3U
, 0xc52976ecU
,
209 0xf90b79f2U
, 0x53f4dda7U
, 0xf48e3d7aU
, 0x5874162cU
,
210 0xfc823f7eU
, 0xdcb2376eU
, 0xa9736ddaU
, 0xe0903870U
,
211 0xdeb1b96fU
, 0xd13773e6U
, 0x834ce9cfU
, 0xd4be356aU
,
212 0x49e355aaU
, 0xd93b71e2U
, 0xf1077bf6U
, 0x0a0f8c05U
,
213 0xd53172e4U
, 0x1a17880dU
, 0xff0ef6f1U
, 0xa8fc2a54U
,
214 0xf8843e7cU
, 0x65d95ebcU
, 0x9cd2274eU
, 0x0589468cU
,
215 0x30280c18U
, 0x894365caU
, 0xbd6d68d0U
, 0x995b61c2U
,
216 0x0c0a0306U
, 0x23bcc19fU
, 0x41ef57aeU
, 0x7fced6b1U
,
217 0x43ecd9afU
, 0x7dcd58b0U
, 0x47ead8adU
, 0x854966ccU
,
218 0x7bc8d7b3U
, 0xe89c3a74U
, 0x078ac88dU
, 0xf0883c78U
,
219 0xcf26fae9U
, 0x62539631U
, 0xa6f5a753U
, 0x5a77982dU
,
220 0x9752ecc5U
, 0xdab7b86dU
, 0x3ba8c793U
, 0x82c3ae41U
,
221 0xb96b69d2U
, 0x31a74b96U
, 0x96ddab4bU
, 0x9ed1a94fU
,
222 0x814f67ceU
, 0x283c0a14U
, 0x018f478eU
, 0xef16f2f9U
,
223 0xee99b577U
, 0x88cc2244U
, 0xb364e5d7U
, 0x9f5eeec1U
,
224 0xc2a3be61U
, 0xacfa2b56U
, 0x3e21811fU
, 0x486c1224U
,
225 0x362d831bU
, 0x6c5a1b36U
, 0x38240e1cU
, 0x8cca2346U
,
226 0xf304f5f7U
, 0x0983458aU
, 0x84c62142U
, 0x1f9ece81U
,
227 0x39ab4992U
, 0xb0e82c58U
, 0xc32cf9efU
, 0xbf6ee6d1U
,
228 0xe293b671U
, 0xa0f02850U
, 0x5c72172eU
, 0x322b8219U
,
229 0x685c1a34U
, 0x161d8b0bU
, 0xdf3efee1U
, 0x121b8a09U
,
230 0x24360912U
, 0x038cc98fU
, 0x26358713U
, 0x25b94e9cU
,
231 0xa37ce1dfU
, 0xb8e42e5cU
, 0xb762e4d5U
, 0xa77ae0ddU
,
232 0x8b40ebcbU
, 0x7a47903dU
, 0xaaffa455U
, 0x78441e3cU
,
233 0x2e398517U
, 0x9d5d60c0U
, 0x00000000U
, 0x94de254aU
,
234 0xf702f4f5U
, 0xe31cf1ffU
, 0x6a5f9435U
, 0x2c3a0b16U
,
235 0xbb68e7d3U
, 0xc92375eaU
, 0x9b58efc3U
, 0xd0b83468U
,
236 0xc4a63162U
, 0x77c2d4b5U
, 0x67dad0bdU
, 0x22338611U
,
237 0xe5197efcU
, 0x8ec9ad47U
, 0xd334fde7U
, 0xa4f62952U
,
238 0xc0a03060U
, 0xec9a3b76U
, 0x46659f23U
, 0xc72af8edU
,
239 0x3faec691U
, 0x4c6a1326U
, 0x1814060cU
, 0x141e050aU
,
240 0x33a4c597U
, 0x44661122U
, 0xc12f77eeU
, 0xed157cf8U
,
241 0xf5017af4U
, 0xfd0d78f0U
, 0xd8b4366cU
, 0x70481c38U
,
242 0xe4963972U
, 0x79cb59b2U
, 0x60501830U
, 0x45e956acU
,
243 0xf68db37bU
, 0xfa87b07dU
, 0x90d82448U
, 0x80c02040U
,
244 0xf28bb279U
, 0x724b9239U
, 0xb6eda35bU
, 0x27bac09dU
,
245 0x0d854488U
, 0x955162c4U
, 0x40601020U
, 0xea9fb475U
,
246 0x2a3f8415U
, 0x11974386U
, 0x764d933bU
, 0x2fb6c299U
,
247 0x35a14a94U
, 0xcea9bd67U
, 0x06058f03U
, 0xb4ee2d5aU
,
248 0xcaafbc65U
, 0x4a6f9c25U
, 0xb5616ad4U
, 0x1d9d4080U
,
249 0x1b98cf83U
, 0xb2eba259U
, 0x3a27801dU
, 0x21bf4f9eU
,
250 0x7c421f3eU
, 0x0f86ca89U
, 0x92dbaa49U
, 0x15914284U
,
253 static const u32 T3
[256] = {
254 0xbbd269baU
, 0xe54da854U
, 0xe2bc5e2fU
, 0x25cde874U
,
255 0xf751a653U
, 0xd06bbbd3U
, 0xd66fb9d2U
, 0xb3299a4dU
,
256 0xfd5da050U
, 0xcf8a45acU
, 0x090e078dU
, 0xa5c663bfU
,
257 0x3ddde070U
, 0xf155a452U
, 0x7b52299aU
, 0xb52d984cU
,
258 0x468fc9eaU
, 0xc473b7d5U
, 0x55663397U
, 0xdc63bfd1U
,
259 0xaacc6633U
, 0xfb59a251U
, 0xc771b65bU
, 0xf3a251a6U
,
260 0xfe5fa1deU
, 0xad3d9048U
, 0xd79a4da8U
, 0x715e2f99U
,
261 0xe04babdbU
, 0xacc86432U
, 0x95e673b7U
, 0x32d7e5fcU
,
262 0x70abdbe3U
, 0x6342219eU
, 0x417e3f91U
, 0x7d562b9bU
,
263 0x76afd9e2U
, 0xbdd66bbbU
, 0x9b198241U
, 0x79a5dc6eU
,
264 0xf9ae57a5U
, 0x800b8bcbU
, 0x67b1d66bU
, 0x596e3795U
,
265 0xe1be5fa1U
, 0x10ebfbf3U
, 0x81fe7fb1U
, 0x0c080402U
,
266 0x921785ccU
, 0xa23795c4U
, 0x4e743a1dU
, 0x78502814U
,
267 0xb02b9bc3U
, 0x5791c663U
, 0xe64fa9daU
, 0xd369ba5dU
,
268 0xdf61be5fU
, 0xf257a5dcU
, 0x13e9fa7dU
, 0x941387cdU
,
269 0x1fe1fe7fU
, 0xc175b45aU
, 0x75add86cU
, 0xd56db85cU
,
270 0x08fbf3f7U
, 0xd4984c26U
, 0x38dbe3ffU
, 0x5493c7edU
,
271 0x4a87cde8U
, 0x694e279dU
, 0x7fa1de6fU
, 0x0302018eU
,
272 0x56643219U
, 0xe7ba5da0U
, 0x1ae7fdf0U
, 0x111e0f89U
,
273 0x223c1e0fU
, 0x121c0e07U
, 0xc58643afU
, 0x20cbebfbU
,
274 0x30201008U
, 0x7e542a15U
, 0x2e341a0dU
, 0x18100804U
,
275 0x06040201U
, 0x458dc864U
, 0xf85ba3dfU
, 0x29c5ec76U
,
276 0x0bf9f279U
, 0xf453a7ddU
, 0x8ef47a3dU
, 0x74582c16U
,
277 0x82fc7e3fU
, 0xb2dc6e37U
, 0x73a9da6dU
, 0x90e07038U
,
278 0xb1de6fb9U
, 0x37d1e673U
, 0x4c83cfe9U
, 0xbed46a35U
,
279 0xe349aa55U
, 0x3bd9e271U
, 0x07f1f67bU
, 0x0f0a058cU
,
280 0x31d5e472U
, 0x171a0d88U
, 0x0efff1f6U
, 0xfca8542aU
,
281 0x84f87c3eU
, 0xd965bc5eU
, 0xd29c4e27U
, 0x89058c46U
,
282 0x2830180cU
, 0x4389ca65U
, 0x6dbdd068U
, 0x5b99c261U
,
283 0x0a0c0603U
, 0xbc239fc1U
, 0xef41ae57U
, 0xce7fb1d6U
,
284 0xec43afd9U
, 0xcd7db058U
, 0xea47add8U
, 0x4985cc66U
,
285 0xc87bb3d7U
, 0x9ce8743aU
, 0x8a078dc8U
, 0x88f0783cU
,
286 0x26cfe9faU
, 0x53623196U
, 0xf5a653a7U
, 0x775a2d98U
,
287 0x5297c5ecU
, 0xb7da6db8U
, 0xa83b93c7U
, 0xc38241aeU
,
288 0x6bb9d269U
, 0xa731964bU
, 0xdd964babU
, 0xd19e4fa9U
,
289 0x4f81ce67U
, 0x3c28140aU
, 0x8f018e47U
, 0x16eff9f2U
,
290 0x99ee77b5U
, 0xcc884422U
, 0x64b3d7e5U
, 0x5e9fc1eeU
,
291 0xa3c261beU
, 0xfaac562bU
, 0x213e1f81U
, 0x6c482412U
,
292 0x2d361b83U
, 0x5a6c361bU
, 0x24381c0eU
, 0xca8c4623U
,
293 0x04f3f7f5U
, 0x83098a45U
, 0xc6844221U
, 0x9e1f81ceU
,
294 0xab399249U
, 0xe8b0582cU
, 0x2cc3eff9U
, 0x6ebfd1e6U
,
295 0x93e271b6U
, 0xf0a05028U
, 0x725c2e17U
, 0x2b321982U
,
296 0x5c68341aU
, 0x1d160b8bU
, 0x3edfe1feU
, 0x1b12098aU
,
297 0x36241209U
, 0x8c038fc9U
, 0x35261387U
, 0xb9259c4eU
,
298 0x7ca3dfe1U
, 0xe4b85c2eU
, 0x62b7d5e4U
, 0x7aa7dde0U
,
299 0x408bcbebU
, 0x477a3d90U
, 0xffaa55a4U
, 0x44783c1eU
,
300 0x392e1785U
, 0x5d9dc060U
, 0x00000000U
, 0xde944a25U
,
301 0x02f7f5f4U
, 0x1ce3fff1U
, 0x5f6a3594U
, 0x3a2c160bU
,
302 0x68bbd3e7U
, 0x23c9ea75U
, 0x589bc3efU
, 0xb8d06834U
,
303 0xa6c46231U
, 0xc277b5d4U
, 0xda67bdd0U
, 0x33221186U
,
304 0x19e5fc7eU
, 0xc98e47adU
, 0x34d3e7fdU
, 0xf6a45229U
,
305 0xa0c06030U
, 0x9aec763bU
, 0x6546239fU
, 0x2ac7edf8U
,
306 0xae3f91c6U
, 0x6a4c2613U
, 0x14180c06U
, 0x1e140a05U
,
307 0xa43397c5U
, 0x66442211U
, 0x2fc1ee77U
, 0x15edf87cU
,
308 0x01f5f47aU
, 0x0dfdf078U
, 0xb4d86c36U
, 0x4870381cU
,
309 0x96e47239U
, 0xcb79b259U
, 0x50603018U
, 0xe945ac56U
,
310 0x8df67bb3U
, 0x87fa7db0U
, 0xd8904824U
, 0xc0804020U
,
311 0x8bf279b2U
, 0x4b723992U
, 0xedb65ba3U
, 0xba279dc0U
,
312 0x850d8844U
, 0x5195c462U
, 0x60402010U
, 0x9fea75b4U
,
313 0x3f2a1584U
, 0x97118643U
, 0x4d763b93U
, 0xb62f99c2U
,
314 0xa135944aU
, 0xa9ce67bdU
, 0x0506038fU
, 0xeeb45a2dU
,
315 0xafca65bcU
, 0x6f4a259cU
, 0x61b5d46aU
, 0x9d1d8040U
,
316 0x981b83cfU
, 0xebb259a2U
, 0x273a1d80U
, 0xbf219e4fU
,
317 0x427c3e1fU
, 0x860f89caU
, 0xdb9249aaU
, 0x91158442U
,
320 static const u32 T4
[256] = {
321 0xbabababaU
, 0x54545454U
, 0x2f2f2f2fU
, 0x74747474U
,
322 0x53535353U
, 0xd3d3d3d3U
, 0xd2d2d2d2U
, 0x4d4d4d4dU
,
323 0x50505050U
, 0xacacacacU
, 0x8d8d8d8dU
, 0xbfbfbfbfU
,
324 0x70707070U
, 0x52525252U
, 0x9a9a9a9aU
, 0x4c4c4c4cU
,
325 0xeaeaeaeaU
, 0xd5d5d5d5U
, 0x97979797U
, 0xd1d1d1d1U
,
326 0x33333333U
, 0x51515151U
, 0x5b5b5b5bU
, 0xa6a6a6a6U
,
327 0xdedededeU
, 0x48484848U
, 0xa8a8a8a8U
, 0x99999999U
,
328 0xdbdbdbdbU
, 0x32323232U
, 0xb7b7b7b7U
, 0xfcfcfcfcU
,
329 0xe3e3e3e3U
, 0x9e9e9e9eU
, 0x91919191U
, 0x9b9b9b9bU
,
330 0xe2e2e2e2U
, 0xbbbbbbbbU
, 0x41414141U
, 0x6e6e6e6eU
,
331 0xa5a5a5a5U
, 0xcbcbcbcbU
, 0x6b6b6b6bU
, 0x95959595U
,
332 0xa1a1a1a1U
, 0xf3f3f3f3U
, 0xb1b1b1b1U
, 0x02020202U
,
333 0xccccccccU
, 0xc4c4c4c4U
, 0x1d1d1d1dU
, 0x14141414U
,
334 0xc3c3c3c3U
, 0x63636363U
, 0xdadadadaU
, 0x5d5d5d5dU
,
335 0x5f5f5f5fU
, 0xdcdcdcdcU
, 0x7d7d7d7dU
, 0xcdcdcdcdU
,
336 0x7f7f7f7fU
, 0x5a5a5a5aU
, 0x6c6c6c6cU
, 0x5c5c5c5cU
,
337 0xf7f7f7f7U
, 0x26262626U
, 0xffffffffU
, 0xededededU
,
338 0xe8e8e8e8U
, 0x9d9d9d9dU
, 0x6f6f6f6fU
, 0x8e8e8e8eU
,
339 0x19191919U
, 0xa0a0a0a0U
, 0xf0f0f0f0U
, 0x89898989U
,
340 0x0f0f0f0fU
, 0x07070707U
, 0xafafafafU
, 0xfbfbfbfbU
,
341 0x08080808U
, 0x15151515U
, 0x0d0d0d0dU
, 0x04040404U
,
342 0x01010101U
, 0x64646464U
, 0xdfdfdfdfU
, 0x76767676U
,
343 0x79797979U
, 0xddddddddU
, 0x3d3d3d3dU
, 0x16161616U
,
344 0x3f3f3f3fU
, 0x37373737U
, 0x6d6d6d6dU
, 0x38383838U
,
345 0xb9b9b9b9U
, 0x73737373U
, 0xe9e9e9e9U
, 0x35353535U
,
346 0x55555555U
, 0x71717171U
, 0x7b7b7b7bU
, 0x8c8c8c8cU
,
347 0x72727272U
, 0x88888888U
, 0xf6f6f6f6U
, 0x2a2a2a2aU
,
348 0x3e3e3e3eU
, 0x5e5e5e5eU
, 0x27272727U
, 0x46464646U
,
349 0x0c0c0c0cU
, 0x65656565U
, 0x68686868U
, 0x61616161U
,
350 0x03030303U
, 0xc1c1c1c1U
, 0x57575757U
, 0xd6d6d6d6U
,
351 0xd9d9d9d9U
, 0x58585858U
, 0xd8d8d8d8U
, 0x66666666U
,
352 0xd7d7d7d7U
, 0x3a3a3a3aU
, 0xc8c8c8c8U
, 0x3c3c3c3cU
,
353 0xfafafafaU
, 0x96969696U
, 0xa7a7a7a7U
, 0x98989898U
,
354 0xececececU
, 0xb8b8b8b8U
, 0xc7c7c7c7U
, 0xaeaeaeaeU
,
355 0x69696969U
, 0x4b4b4b4bU
, 0xababababU
, 0xa9a9a9a9U
,
356 0x67676767U
, 0x0a0a0a0aU
, 0x47474747U
, 0xf2f2f2f2U
,
357 0xb5b5b5b5U
, 0x22222222U
, 0xe5e5e5e5U
, 0xeeeeeeeeU
,
358 0xbebebebeU
, 0x2b2b2b2bU
, 0x81818181U
, 0x12121212U
,
359 0x83838383U
, 0x1b1b1b1bU
, 0x0e0e0e0eU
, 0x23232323U
,
360 0xf5f5f5f5U
, 0x45454545U
, 0x21212121U
, 0xcecececeU
,
361 0x49494949U
, 0x2c2c2c2cU
, 0xf9f9f9f9U
, 0xe6e6e6e6U
,
362 0xb6b6b6b6U
, 0x28282828U
, 0x17171717U
, 0x82828282U
,
363 0x1a1a1a1aU
, 0x8b8b8b8bU
, 0xfefefefeU
, 0x8a8a8a8aU
,
364 0x09090909U
, 0xc9c9c9c9U
, 0x87878787U
, 0x4e4e4e4eU
,
365 0xe1e1e1e1U
, 0x2e2e2e2eU
, 0xe4e4e4e4U
, 0xe0e0e0e0U
,
366 0xebebebebU
, 0x90909090U
, 0xa4a4a4a4U
, 0x1e1e1e1eU
,
367 0x85858585U
, 0x60606060U
, 0x00000000U
, 0x25252525U
,
368 0xf4f4f4f4U
, 0xf1f1f1f1U
, 0x94949494U
, 0x0b0b0b0bU
,
369 0xe7e7e7e7U
, 0x75757575U
, 0xefefefefU
, 0x34343434U
,
370 0x31313131U
, 0xd4d4d4d4U
, 0xd0d0d0d0U
, 0x86868686U
,
371 0x7e7e7e7eU
, 0xadadadadU
, 0xfdfdfdfdU
, 0x29292929U
,
372 0x30303030U
, 0x3b3b3b3bU
, 0x9f9f9f9fU
, 0xf8f8f8f8U
,
373 0xc6c6c6c6U
, 0x13131313U
, 0x06060606U
, 0x05050505U
,
374 0xc5c5c5c5U
, 0x11111111U
, 0x77777777U
, 0x7c7c7c7cU
,
375 0x7a7a7a7aU
, 0x78787878U
, 0x36363636U
, 0x1c1c1c1cU
,
376 0x39393939U
, 0x59595959U
, 0x18181818U
, 0x56565656U
,
377 0xb3b3b3b3U
, 0xb0b0b0b0U
, 0x24242424U
, 0x20202020U
,
378 0xb2b2b2b2U
, 0x92929292U
, 0xa3a3a3a3U
, 0xc0c0c0c0U
,
379 0x44444444U
, 0x62626262U
, 0x10101010U
, 0xb4b4b4b4U
,
380 0x84848484U
, 0x43434343U
, 0x93939393U
, 0xc2c2c2c2U
,
381 0x4a4a4a4aU
, 0xbdbdbdbdU
, 0x8f8f8f8fU
, 0x2d2d2d2dU
,
382 0xbcbcbcbcU
, 0x9c9c9c9cU
, 0x6a6a6a6aU
, 0x40404040U
,
383 0xcfcfcfcfU
, 0xa2a2a2a2U
, 0x80808080U
, 0x4f4f4f4fU
,
384 0x1f1f1f1fU
, 0xcacacacaU
, 0xaaaaaaaaU
, 0x42424242U
,
387 static const u32 T5
[256] = {
388 0x00000000U
, 0x01020608U
, 0x02040c10U
, 0x03060a18U
,
389 0x04081820U
, 0x050a1e28U
, 0x060c1430U
, 0x070e1238U
,
390 0x08103040U
, 0x09123648U
, 0x0a143c50U
, 0x0b163a58U
,
391 0x0c182860U
, 0x0d1a2e68U
, 0x0e1c2470U
, 0x0f1e2278U
,
392 0x10206080U
, 0x11226688U
, 0x12246c90U
, 0x13266a98U
,
393 0x142878a0U
, 0x152a7ea8U
, 0x162c74b0U
, 0x172e72b8U
,
394 0x183050c0U
, 0x193256c8U
, 0x1a345cd0U
, 0x1b365ad8U
,
395 0x1c3848e0U
, 0x1d3a4ee8U
, 0x1e3c44f0U
, 0x1f3e42f8U
,
396 0x2040c01dU
, 0x2142c615U
, 0x2244cc0dU
, 0x2346ca05U
,
397 0x2448d83dU
, 0x254ade35U
, 0x264cd42dU
, 0x274ed225U
,
398 0x2850f05dU
, 0x2952f655U
, 0x2a54fc4dU
, 0x2b56fa45U
,
399 0x2c58e87dU
, 0x2d5aee75U
, 0x2e5ce46dU
, 0x2f5ee265U
,
400 0x3060a09dU
, 0x3162a695U
, 0x3264ac8dU
, 0x3366aa85U
,
401 0x3468b8bdU
, 0x356abeb5U
, 0x366cb4adU
, 0x376eb2a5U
,
402 0x387090ddU
, 0x397296d5U
, 0x3a749ccdU
, 0x3b769ac5U
,
403 0x3c7888fdU
, 0x3d7a8ef5U
, 0x3e7c84edU
, 0x3f7e82e5U
,
404 0x40809d3aU
, 0x41829b32U
, 0x4284912aU
, 0x43869722U
,
405 0x4488851aU
, 0x458a8312U
, 0x468c890aU
, 0x478e8f02U
,
406 0x4890ad7aU
, 0x4992ab72U
, 0x4a94a16aU
, 0x4b96a762U
,
407 0x4c98b55aU
, 0x4d9ab352U
, 0x4e9cb94aU
, 0x4f9ebf42U
,
408 0x50a0fdbaU
, 0x51a2fbb2U
, 0x52a4f1aaU
, 0x53a6f7a2U
,
409 0x54a8e59aU
, 0x55aae392U
, 0x56ace98aU
, 0x57aeef82U
,
410 0x58b0cdfaU
, 0x59b2cbf2U
, 0x5ab4c1eaU
, 0x5bb6c7e2U
,
411 0x5cb8d5daU
, 0x5dbad3d2U
, 0x5ebcd9caU
, 0x5fbedfc2U
,
412 0x60c05d27U
, 0x61c25b2fU
, 0x62c45137U
, 0x63c6573fU
,
413 0x64c84507U
, 0x65ca430fU
, 0x66cc4917U
, 0x67ce4f1fU
,
414 0x68d06d67U
, 0x69d26b6fU
, 0x6ad46177U
, 0x6bd6677fU
,
415 0x6cd87547U
, 0x6dda734fU
, 0x6edc7957U
, 0x6fde7f5fU
,
416 0x70e03da7U
, 0x71e23bafU
, 0x72e431b7U
, 0x73e637bfU
,
417 0x74e82587U
, 0x75ea238fU
, 0x76ec2997U
, 0x77ee2f9fU
,
418 0x78f00de7U
, 0x79f20befU
, 0x7af401f7U
, 0x7bf607ffU
,
419 0x7cf815c7U
, 0x7dfa13cfU
, 0x7efc19d7U
, 0x7ffe1fdfU
,
420 0x801d2774U
, 0x811f217cU
, 0x82192b64U
, 0x831b2d6cU
,
421 0x84153f54U
, 0x8517395cU
, 0x86113344U
, 0x8713354cU
,
422 0x880d1734U
, 0x890f113cU
, 0x8a091b24U
, 0x8b0b1d2cU
,
423 0x8c050f14U
, 0x8d07091cU
, 0x8e010304U
, 0x8f03050cU
,
424 0x903d47f4U
, 0x913f41fcU
, 0x92394be4U
, 0x933b4decU
,
425 0x94355fd4U
, 0x953759dcU
, 0x963153c4U
, 0x973355ccU
,
426 0x982d77b4U
, 0x992f71bcU
, 0x9a297ba4U
, 0x9b2b7dacU
,
427 0x9c256f94U
, 0x9d27699cU
, 0x9e216384U
, 0x9f23658cU
,
428 0xa05de769U
, 0xa15fe161U
, 0xa259eb79U
, 0xa35bed71U
,
429 0xa455ff49U
, 0xa557f941U
, 0xa651f359U
, 0xa753f551U
,
430 0xa84dd729U
, 0xa94fd121U
, 0xaa49db39U
, 0xab4bdd31U
,
431 0xac45cf09U
, 0xad47c901U
, 0xae41c319U
, 0xaf43c511U
,
432 0xb07d87e9U
, 0xb17f81e1U
, 0xb2798bf9U
, 0xb37b8df1U
,
433 0xb4759fc9U
, 0xb57799c1U
, 0xb67193d9U
, 0xb77395d1U
,
434 0xb86db7a9U
, 0xb96fb1a1U
, 0xba69bbb9U
, 0xbb6bbdb1U
,
435 0xbc65af89U
, 0xbd67a981U
, 0xbe61a399U
, 0xbf63a591U
,
436 0xc09dba4eU
, 0xc19fbc46U
, 0xc299b65eU
, 0xc39bb056U
,
437 0xc495a26eU
, 0xc597a466U
, 0xc691ae7eU
, 0xc793a876U
,
438 0xc88d8a0eU
, 0xc98f8c06U
, 0xca89861eU
, 0xcb8b8016U
,
439 0xcc85922eU
, 0xcd879426U
, 0xce819e3eU
, 0xcf839836U
,
440 0xd0bddaceU
, 0xd1bfdcc6U
, 0xd2b9d6deU
, 0xd3bbd0d6U
,
441 0xd4b5c2eeU
, 0xd5b7c4e6U
, 0xd6b1cefeU
, 0xd7b3c8f6U
,
442 0xd8adea8eU
, 0xd9afec86U
, 0xdaa9e69eU
, 0xdbabe096U
,
443 0xdca5f2aeU
, 0xdda7f4a6U
, 0xdea1febeU
, 0xdfa3f8b6U
,
444 0xe0dd7a53U
, 0xe1df7c5bU
, 0xe2d97643U
, 0xe3db704bU
,
445 0xe4d56273U
, 0xe5d7647bU
, 0xe6d16e63U
, 0xe7d3686bU
,
446 0xe8cd4a13U
, 0xe9cf4c1bU
, 0xeac94603U
, 0xebcb400bU
,
447 0xecc55233U
, 0xedc7543bU
, 0xeec15e23U
, 0xefc3582bU
,
448 0xf0fd1ad3U
, 0xf1ff1cdbU
, 0xf2f916c3U
, 0xf3fb10cbU
,
449 0xf4f502f3U
, 0xf5f704fbU
, 0xf6f10ee3U
, 0xf7f308ebU
,
450 0xf8ed2a93U
, 0xf9ef2c9bU
, 0xfae92683U
, 0xfbeb208bU
,
451 0xfce532b3U
, 0xfde734bbU
, 0xfee13ea3U
, 0xffe338abU
,
454 static const u32 rc
[] = {
455 0xba542f74U
, 0x53d3d24dU
, 0x50ac8dbfU
, 0x70529a4cU
,
456 0xead597d1U
, 0x33515ba6U
, 0xde48a899U
, 0xdb32b7fcU
,
457 0xe39e919bU
, 0xe2bb416eU
, 0xa5cb6b95U
, 0xa1f3b102U
,
458 0xccc41d14U
, 0xc363da5dU
, 0x5fdc7dcdU
, 0x7f5a6c5cU
,
459 0xf726ffedU
, 0xe89d6f8eU
, 0x19a0f089U
,
462 static int anubis_setkey(struct crypto_tfm
*tfm
, const u8
*in_key
,
463 unsigned int key_len
)
465 struct anubis_ctx
*ctx
= crypto_tfm_ctx(tfm
);
466 const __be32
*key
= (const __be32
*)in_key
;
467 u32
*flags
= &tfm
->crt_flags
;
469 u32 kappa
[ANUBIS_MAX_N
];
470 u32 inter
[ANUBIS_MAX_N
];
473 case 16: case 20: case 24: case 28:
474 case 32: case 36: case 40:
477 *flags
|= CRYPTO_TFM_RES_BAD_KEY_LEN
;
481 ctx
->key_len
= key_len
* 8;
482 N
= ctx
->key_len
>> 5;
485 /* * map cipher key to initial key state (mu): */
486 for (i
= 0; i
< N
; i
++)
487 kappa
[i
] = be32_to_cpu(key
[i
]);
490 * generate R + 1 round keys:
492 for (r
= 0; r
<= R
; r
++) {
495 * generate r-th round key K^r:
497 K0
= T4
[(kappa
[N
- 1] >> 24) ];
498 K1
= T4
[(kappa
[N
- 1] >> 16) & 0xff];
499 K2
= T4
[(kappa
[N
- 1] >> 8) & 0xff];
500 K3
= T4
[(kappa
[N
- 1] ) & 0xff];
501 for (i
= N
- 2; i
>= 0; i
--) {
502 K0
= T4
[(kappa
[i
] >> 24) ] ^
503 (T5
[(K0
>> 24) ] & 0xff000000U
) ^
504 (T5
[(K0
>> 16) & 0xff] & 0x00ff0000U
) ^
505 (T5
[(K0
>> 8) & 0xff] & 0x0000ff00U
) ^
506 (T5
[(K0
) & 0xff] & 0x000000ffU
);
507 K1
= T4
[(kappa
[i
] >> 16) & 0xff] ^
508 (T5
[(K1
>> 24) ] & 0xff000000U
) ^
509 (T5
[(K1
>> 16) & 0xff] & 0x00ff0000U
) ^
510 (T5
[(K1
>> 8) & 0xff] & 0x0000ff00U
) ^
511 (T5
[(K1
) & 0xff] & 0x000000ffU
);
512 K2
= T4
[(kappa
[i
] >> 8) & 0xff] ^
513 (T5
[(K2
>> 24) ] & 0xff000000U
) ^
514 (T5
[(K2
>> 16) & 0xff] & 0x00ff0000U
) ^
515 (T5
[(K2
>> 8) & 0xff] & 0x0000ff00U
) ^
516 (T5
[(K2
) & 0xff] & 0x000000ffU
);
517 K3
= T4
[(kappa
[i
] ) & 0xff] ^
518 (T5
[(K3
>> 24) ] & 0xff000000U
) ^
519 (T5
[(K3
>> 16) & 0xff] & 0x00ff0000U
) ^
520 (T5
[(K3
>> 8) & 0xff] & 0x0000ff00U
) ^
521 (T5
[(K3
) & 0xff] & 0x000000ffU
);
530 * compute kappa^{r+1} from kappa^r:
534 for (i
= 0; i
< N
; i
++) {
536 inter
[i
] = T0
[(kappa
[j
--] >> 24) ];
539 inter
[i
] ^= T1
[(kappa
[j
--] >> 16) & 0xff];
542 inter
[i
] ^= T2
[(kappa
[j
--] >> 8) & 0xff];
545 inter
[i
] ^= T3
[(kappa
[j
] ) & 0xff];
547 kappa
[0] = inter
[0] ^ rc
[r
];
548 for (i
= 1; i
< N
; i
++)
553 * generate inverse key schedule: K'^0 = K^R, K'^R =
554 * K^0, K'^r = theta(K^{R-r}):
556 for (i
= 0; i
< 4; i
++) {
557 ctx
->D
[0][i
] = ctx
->E
[R
][i
];
558 ctx
->D
[R
][i
] = ctx
->E
[0][i
];
560 for (r
= 1; r
< R
; r
++) {
561 for (i
= 0; i
< 4; i
++) {
562 u32 v
= ctx
->E
[R
- r
][i
];
564 T0
[T4
[(v
>> 24) ] & 0xff] ^
565 T1
[T4
[(v
>> 16) & 0xff] & 0xff] ^
566 T2
[T4
[(v
>> 8) & 0xff] & 0xff] ^
567 T3
[T4
[(v
) & 0xff] & 0xff];
574 static void anubis_crypt(u32 roundKey
[ANUBIS_MAX_ROUNDS
+ 1][4],
575 u8
*ciphertext
, const u8
*plaintext
, const int R
)
577 const __be32
*src
= (const __be32
*)plaintext
;
578 __be32
*dst
= (__be32
*)ciphertext
;
584 * map plaintext block to cipher state (mu)
585 * and add initial round key (sigma[K^0]):
587 for (i
= 0; i
< 4; i
++)
588 state
[i
] = be32_to_cpu(src
[i
]) ^ roundKey
[0][i
];
594 for (r
= 1; r
< R
; r
++) {
596 T0
[(state
[0] >> 24) ] ^
597 T1
[(state
[1] >> 24) ] ^
598 T2
[(state
[2] >> 24) ] ^
599 T3
[(state
[3] >> 24) ] ^
602 T0
[(state
[0] >> 16) & 0xff] ^
603 T1
[(state
[1] >> 16) & 0xff] ^
604 T2
[(state
[2] >> 16) & 0xff] ^
605 T3
[(state
[3] >> 16) & 0xff] ^
608 T0
[(state
[0] >> 8) & 0xff] ^
609 T1
[(state
[1] >> 8) & 0xff] ^
610 T2
[(state
[2] >> 8) & 0xff] ^
611 T3
[(state
[3] >> 8) & 0xff] ^
614 T0
[(state
[0] ) & 0xff] ^
615 T1
[(state
[1] ) & 0xff] ^
616 T2
[(state
[2] ) & 0xff] ^
617 T3
[(state
[3] ) & 0xff] ^
630 (T0
[(state
[0] >> 24) ] & 0xff000000U
) ^
631 (T1
[(state
[1] >> 24) ] & 0x00ff0000U
) ^
632 (T2
[(state
[2] >> 24) ] & 0x0000ff00U
) ^
633 (T3
[(state
[3] >> 24) ] & 0x000000ffU
) ^
636 (T0
[(state
[0] >> 16) & 0xff] & 0xff000000U
) ^
637 (T1
[(state
[1] >> 16) & 0xff] & 0x00ff0000U
) ^
638 (T2
[(state
[2] >> 16) & 0xff] & 0x0000ff00U
) ^
639 (T3
[(state
[3] >> 16) & 0xff] & 0x000000ffU
) ^
642 (T0
[(state
[0] >> 8) & 0xff] & 0xff000000U
) ^
643 (T1
[(state
[1] >> 8) & 0xff] & 0x00ff0000U
) ^
644 (T2
[(state
[2] >> 8) & 0xff] & 0x0000ff00U
) ^
645 (T3
[(state
[3] >> 8) & 0xff] & 0x000000ffU
) ^
648 (T0
[(state
[0] ) & 0xff] & 0xff000000U
) ^
649 (T1
[(state
[1] ) & 0xff] & 0x00ff0000U
) ^
650 (T2
[(state
[2] ) & 0xff] & 0x0000ff00U
) ^
651 (T3
[(state
[3] ) & 0xff] & 0x000000ffU
) ^
655 * map cipher state to ciphertext block (mu^{-1}):
658 for (i
= 0; i
< 4; i
++)
659 dst
[i
] = cpu_to_be32(inter
[i
]);
662 static void anubis_encrypt(struct crypto_tfm
*tfm
, u8
*dst
, const u8
*src
)
664 struct anubis_ctx
*ctx
= crypto_tfm_ctx(tfm
);
665 anubis_crypt(ctx
->E
, dst
, src
, ctx
->R
);
668 static void anubis_decrypt(struct crypto_tfm
*tfm
, u8
*dst
, const u8
*src
)
670 struct anubis_ctx
*ctx
= crypto_tfm_ctx(tfm
);
671 anubis_crypt(ctx
->D
, dst
, src
, ctx
->R
);
674 static struct crypto_alg anubis_alg
= {
675 .cra_name
= "anubis",
676 .cra_driver_name
= "anubis-generic",
677 .cra_flags
= CRYPTO_ALG_TYPE_CIPHER
,
678 .cra_blocksize
= ANUBIS_BLOCK_SIZE
,
679 .cra_ctxsize
= sizeof (struct anubis_ctx
),
681 .cra_module
= THIS_MODULE
,
682 .cra_u
= { .cipher
= {
683 .cia_min_keysize
= ANUBIS_MIN_KEY_SIZE
,
684 .cia_max_keysize
= ANUBIS_MAX_KEY_SIZE
,
685 .cia_setkey
= anubis_setkey
,
686 .cia_encrypt
= anubis_encrypt
,
687 .cia_decrypt
= anubis_decrypt
} }
690 static int __init
anubis_mod_init(void)
694 ret
= crypto_register_alg(&anubis_alg
);
698 static void __exit
anubis_mod_fini(void)
700 crypto_unregister_alg(&anubis_alg
);
703 subsys_initcall(anubis_mod_init
);
704 module_exit(anubis_mod_fini
);
706 MODULE_LICENSE("GPL");
707 MODULE_DESCRIPTION("Anubis Cryptographic Algorithm");
708 MODULE_ALIAS_CRYPTO("anubis");