3 * SBOX tables used by both encryption and key setup.
6 /* Copyright (C) 2006,2007
7 * NTT (Nippon Telegraph and Telephone Corporation).
9 * Copyright (C) 2010 Niels Möller
11 * This library is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Lesser General Public
13 * License as published by the Free Software Foundation; either
14 * version 2.1 of the License, or (at your option) any later version.
16 * This library is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Lesser General Public License for more details.
21 * You should have received a copy of the GNU Lesser General Public
22 * License along with this library; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
27 * Algorithm Specification
28 * http://info.isl.ntt.co.jp/crypt/eng/camellia/specifications.html
31 /* Based on camellia.c ver 1.2.0, see
32 http://info.isl.ntt.co.jp/crypt/eng/camellia/dl/camellia-LGPL-1.2.0.tar.gz.
39 #include "camellia-internal.h"
41 const struct camellia_table _camellia_table
= {
44 0x70707000,0x82828200,0x2c2c2c00,0xececec00,
45 0xb3b3b300,0x27272700,0xc0c0c000,0xe5e5e500,
46 0xe4e4e400,0x85858500,0x57575700,0x35353500,
47 0xeaeaea00,0x0c0c0c00,0xaeaeae00,0x41414100,
48 0x23232300,0xefefef00,0x6b6b6b00,0x93939300,
49 0x45454500,0x19191900,0xa5a5a500,0x21212100,
50 0xededed00,0x0e0e0e00,0x4f4f4f00,0x4e4e4e00,
51 0x1d1d1d00,0x65656500,0x92929200,0xbdbdbd00,
52 0x86868600,0xb8b8b800,0xafafaf00,0x8f8f8f00,
53 0x7c7c7c00,0xebebeb00,0x1f1f1f00,0xcecece00,
54 0x3e3e3e00,0x30303000,0xdcdcdc00,0x5f5f5f00,
55 0x5e5e5e00,0xc5c5c500,0x0b0b0b00,0x1a1a1a00,
56 0xa6a6a600,0xe1e1e100,0x39393900,0xcacaca00,
57 0xd5d5d500,0x47474700,0x5d5d5d00,0x3d3d3d00,
58 0xd9d9d900,0x01010100,0x5a5a5a00,0xd6d6d600,
59 0x51515100,0x56565600,0x6c6c6c00,0x4d4d4d00,
60 0x8b8b8b00,0x0d0d0d00,0x9a9a9a00,0x66666600,
61 0xfbfbfb00,0xcccccc00,0xb0b0b000,0x2d2d2d00,
62 0x74747400,0x12121200,0x2b2b2b00,0x20202000,
63 0xf0f0f000,0xb1b1b100,0x84848400,0x99999900,
64 0xdfdfdf00,0x4c4c4c00,0xcbcbcb00,0xc2c2c200,
65 0x34343400,0x7e7e7e00,0x76767600,0x05050500,
66 0x6d6d6d00,0xb7b7b700,0xa9a9a900,0x31313100,
67 0xd1d1d100,0x17171700,0x04040400,0xd7d7d700,
68 0x14141400,0x58585800,0x3a3a3a00,0x61616100,
69 0xdedede00,0x1b1b1b00,0x11111100,0x1c1c1c00,
70 0x32323200,0x0f0f0f00,0x9c9c9c00,0x16161600,
71 0x53535300,0x18181800,0xf2f2f200,0x22222200,
72 0xfefefe00,0x44444400,0xcfcfcf00,0xb2b2b200,
73 0xc3c3c300,0xb5b5b500,0x7a7a7a00,0x91919100,
74 0x24242400,0x08080800,0xe8e8e800,0xa8a8a800,
75 0x60606000,0xfcfcfc00,0x69696900,0x50505000,
76 0xaaaaaa00,0xd0d0d000,0xa0a0a000,0x7d7d7d00,
77 0xa1a1a100,0x89898900,0x62626200,0x97979700,
78 0x54545400,0x5b5b5b00,0x1e1e1e00,0x95959500,
79 0xe0e0e000,0xffffff00,0x64646400,0xd2d2d200,
80 0x10101000,0xc4c4c400,0x00000000,0x48484800,
81 0xa3a3a300,0xf7f7f700,0x75757500,0xdbdbdb00,
82 0x8a8a8a00,0x03030300,0xe6e6e600,0xdadada00,
83 0x09090900,0x3f3f3f00,0xdddddd00,0x94949400,
84 0x87878700,0x5c5c5c00,0x83838300,0x02020200,
85 0xcdcdcd00,0x4a4a4a00,0x90909000,0x33333300,
86 0x73737300,0x67676700,0xf6f6f600,0xf3f3f300,
87 0x9d9d9d00,0x7f7f7f00,0xbfbfbf00,0xe2e2e200,
88 0x52525200,0x9b9b9b00,0xd8d8d800,0x26262600,
89 0xc8c8c800,0x37373700,0xc6c6c600,0x3b3b3b00,
90 0x81818100,0x96969600,0x6f6f6f00,0x4b4b4b00,
91 0x13131300,0xbebebe00,0x63636300,0x2e2e2e00,
92 0xe9e9e900,0x79797900,0xa7a7a700,0x8c8c8c00,
93 0x9f9f9f00,0x6e6e6e00,0xbcbcbc00,0x8e8e8e00,
94 0x29292900,0xf5f5f500,0xf9f9f900,0xb6b6b600,
95 0x2f2f2f00,0xfdfdfd00,0xb4b4b400,0x59595900,
96 0x78787800,0x98989800,0x06060600,0x6a6a6a00,
97 0xe7e7e700,0x46464600,0x71717100,0xbababa00,
98 0xd4d4d400,0x25252500,0xababab00,0x42424200,
99 0x88888800,0xa2a2a200,0x8d8d8d00,0xfafafa00,
100 0x72727200,0x07070700,0xb9b9b900,0x55555500,
101 0xf8f8f800,0xeeeeee00,0xacacac00,0x0a0a0a00,
102 0x36363600,0x49494900,0x2a2a2a00,0x68686800,
103 0x3c3c3c00,0x38383800,0xf1f1f100,0xa4a4a400,
104 0x40404000,0x28282800,0xd3d3d300,0x7b7b7b00,
105 0xbbbbbb00,0xc9c9c900,0x43434300,0xc1c1c100,
106 0x15151500,0xe3e3e300,0xadadad00,0xf4f4f400,
107 0x77777700,0xc7c7c700,0x80808000,0x9e9e9e00,
111 0x00e0e0e0,0x00050505,0x00585858,0x00d9d9d9,
112 0x00676767,0x004e4e4e,0x00818181,0x00cbcbcb,
113 0x00c9c9c9,0x000b0b0b,0x00aeaeae,0x006a6a6a,
114 0x00d5d5d5,0x00181818,0x005d5d5d,0x00828282,
115 0x00464646,0x00dfdfdf,0x00d6d6d6,0x00272727,
116 0x008a8a8a,0x00323232,0x004b4b4b,0x00424242,
117 0x00dbdbdb,0x001c1c1c,0x009e9e9e,0x009c9c9c,
118 0x003a3a3a,0x00cacaca,0x00252525,0x007b7b7b,
119 0x000d0d0d,0x00717171,0x005f5f5f,0x001f1f1f,
120 0x00f8f8f8,0x00d7d7d7,0x003e3e3e,0x009d9d9d,
121 0x007c7c7c,0x00606060,0x00b9b9b9,0x00bebebe,
122 0x00bcbcbc,0x008b8b8b,0x00161616,0x00343434,
123 0x004d4d4d,0x00c3c3c3,0x00727272,0x00959595,
124 0x00ababab,0x008e8e8e,0x00bababa,0x007a7a7a,
125 0x00b3b3b3,0x00020202,0x00b4b4b4,0x00adadad,
126 0x00a2a2a2,0x00acacac,0x00d8d8d8,0x009a9a9a,
127 0x00171717,0x001a1a1a,0x00353535,0x00cccccc,
128 0x00f7f7f7,0x00999999,0x00616161,0x005a5a5a,
129 0x00e8e8e8,0x00242424,0x00565656,0x00404040,
130 0x00e1e1e1,0x00636363,0x00090909,0x00333333,
131 0x00bfbfbf,0x00989898,0x00979797,0x00858585,
132 0x00686868,0x00fcfcfc,0x00ececec,0x000a0a0a,
133 0x00dadada,0x006f6f6f,0x00535353,0x00626262,
134 0x00a3a3a3,0x002e2e2e,0x00080808,0x00afafaf,
135 0x00282828,0x00b0b0b0,0x00747474,0x00c2c2c2,
136 0x00bdbdbd,0x00363636,0x00222222,0x00383838,
137 0x00646464,0x001e1e1e,0x00393939,0x002c2c2c,
138 0x00a6a6a6,0x00303030,0x00e5e5e5,0x00444444,
139 0x00fdfdfd,0x00888888,0x009f9f9f,0x00656565,
140 0x00878787,0x006b6b6b,0x00f4f4f4,0x00232323,
141 0x00484848,0x00101010,0x00d1d1d1,0x00515151,
142 0x00c0c0c0,0x00f9f9f9,0x00d2d2d2,0x00a0a0a0,
143 0x00555555,0x00a1a1a1,0x00414141,0x00fafafa,
144 0x00434343,0x00131313,0x00c4c4c4,0x002f2f2f,
145 0x00a8a8a8,0x00b6b6b6,0x003c3c3c,0x002b2b2b,
146 0x00c1c1c1,0x00ffffff,0x00c8c8c8,0x00a5a5a5,
147 0x00202020,0x00898989,0x00000000,0x00909090,
148 0x00474747,0x00efefef,0x00eaeaea,0x00b7b7b7,
149 0x00151515,0x00060606,0x00cdcdcd,0x00b5b5b5,
150 0x00121212,0x007e7e7e,0x00bbbbbb,0x00292929,
151 0x000f0f0f,0x00b8b8b8,0x00070707,0x00040404,
152 0x009b9b9b,0x00949494,0x00212121,0x00666666,
153 0x00e6e6e6,0x00cecece,0x00ededed,0x00e7e7e7,
154 0x003b3b3b,0x00fefefe,0x007f7f7f,0x00c5c5c5,
155 0x00a4a4a4,0x00373737,0x00b1b1b1,0x004c4c4c,
156 0x00919191,0x006e6e6e,0x008d8d8d,0x00767676,
157 0x00030303,0x002d2d2d,0x00dedede,0x00969696,
158 0x00262626,0x007d7d7d,0x00c6c6c6,0x005c5c5c,
159 0x00d3d3d3,0x00f2f2f2,0x004f4f4f,0x00191919,
160 0x003f3f3f,0x00dcdcdc,0x00797979,0x001d1d1d,
161 0x00525252,0x00ebebeb,0x00f3f3f3,0x006d6d6d,
162 0x005e5e5e,0x00fbfbfb,0x00696969,0x00b2b2b2,
163 0x00f0f0f0,0x00313131,0x000c0c0c,0x00d4d4d4,
164 0x00cfcfcf,0x008c8c8c,0x00e2e2e2,0x00757575,
165 0x00a9a9a9,0x004a4a4a,0x00575757,0x00848484,
166 0x00111111,0x00454545,0x001b1b1b,0x00f5f5f5,
167 0x00e4e4e4,0x000e0e0e,0x00737373,0x00aaaaaa,
168 0x00f1f1f1,0x00dddddd,0x00595959,0x00141414,
169 0x006c6c6c,0x00929292,0x00545454,0x00d0d0d0,
170 0x00787878,0x00707070,0x00e3e3e3,0x00494949,
171 0x00808080,0x00505050,0x00a7a7a7,0x00f6f6f6,
172 0x00777777,0x00939393,0x00868686,0x00838383,
173 0x002a2a2a,0x00c7c7c7,0x005b5b5b,0x00e9e9e9,
174 0x00eeeeee,0x008f8f8f,0x00010101,0x003d3d3d,
178 0x38003838,0x41004141,0x16001616,0x76007676,
179 0xd900d9d9,0x93009393,0x60006060,0xf200f2f2,
180 0x72007272,0xc200c2c2,0xab00abab,0x9a009a9a,
181 0x75007575,0x06000606,0x57005757,0xa000a0a0,
182 0x91009191,0xf700f7f7,0xb500b5b5,0xc900c9c9,
183 0xa200a2a2,0x8c008c8c,0xd200d2d2,0x90009090,
184 0xf600f6f6,0x07000707,0xa700a7a7,0x27002727,
185 0x8e008e8e,0xb200b2b2,0x49004949,0xde00dede,
186 0x43004343,0x5c005c5c,0xd700d7d7,0xc700c7c7,
187 0x3e003e3e,0xf500f5f5,0x8f008f8f,0x67006767,
188 0x1f001f1f,0x18001818,0x6e006e6e,0xaf00afaf,
189 0x2f002f2f,0xe200e2e2,0x85008585,0x0d000d0d,
190 0x53005353,0xf000f0f0,0x9c009c9c,0x65006565,
191 0xea00eaea,0xa300a3a3,0xae00aeae,0x9e009e9e,
192 0xec00ecec,0x80008080,0x2d002d2d,0x6b006b6b,
193 0xa800a8a8,0x2b002b2b,0x36003636,0xa600a6a6,
194 0xc500c5c5,0x86008686,0x4d004d4d,0x33003333,
195 0xfd00fdfd,0x66006666,0x58005858,0x96009696,
196 0x3a003a3a,0x09000909,0x95009595,0x10001010,
197 0x78007878,0xd800d8d8,0x42004242,0xcc00cccc,
198 0xef00efef,0x26002626,0xe500e5e5,0x61006161,
199 0x1a001a1a,0x3f003f3f,0x3b003b3b,0x82008282,
200 0xb600b6b6,0xdb00dbdb,0xd400d4d4,0x98009898,
201 0xe800e8e8,0x8b008b8b,0x02000202,0xeb00ebeb,
202 0x0a000a0a,0x2c002c2c,0x1d001d1d,0xb000b0b0,
203 0x6f006f6f,0x8d008d8d,0x88008888,0x0e000e0e,
204 0x19001919,0x87008787,0x4e004e4e,0x0b000b0b,
205 0xa900a9a9,0x0c000c0c,0x79007979,0x11001111,
206 0x7f007f7f,0x22002222,0xe700e7e7,0x59005959,
207 0xe100e1e1,0xda00dada,0x3d003d3d,0xc800c8c8,
208 0x12001212,0x04000404,0x74007474,0x54005454,
209 0x30003030,0x7e007e7e,0xb400b4b4,0x28002828,
210 0x55005555,0x68006868,0x50005050,0xbe00bebe,
211 0xd000d0d0,0xc400c4c4,0x31003131,0xcb00cbcb,
212 0x2a002a2a,0xad00adad,0x0f000f0f,0xca00caca,
213 0x70007070,0xff00ffff,0x32003232,0x69006969,
214 0x08000808,0x62006262,0x00000000,0x24002424,
215 0xd100d1d1,0xfb00fbfb,0xba00baba,0xed00eded,
216 0x45004545,0x81008181,0x73007373,0x6d006d6d,
217 0x84008484,0x9f009f9f,0xee00eeee,0x4a004a4a,
218 0xc300c3c3,0x2e002e2e,0xc100c1c1,0x01000101,
219 0xe600e6e6,0x25002525,0x48004848,0x99009999,
220 0xb900b9b9,0xb300b3b3,0x7b007b7b,0xf900f9f9,
221 0xce00cece,0xbf00bfbf,0xdf00dfdf,0x71007171,
222 0x29002929,0xcd00cdcd,0x6c006c6c,0x13001313,
223 0x64006464,0x9b009b9b,0x63006363,0x9d009d9d,
224 0xc000c0c0,0x4b004b4b,0xb700b7b7,0xa500a5a5,
225 0x89008989,0x5f005f5f,0xb100b1b1,0x17001717,
226 0xf400f4f4,0xbc00bcbc,0xd300d3d3,0x46004646,
227 0xcf00cfcf,0x37003737,0x5e005e5e,0x47004747,
228 0x94009494,0xfa00fafa,0xfc00fcfc,0x5b005b5b,
229 0x97009797,0xfe00fefe,0x5a005a5a,0xac00acac,
230 0x3c003c3c,0x4c004c4c,0x03000303,0x35003535,
231 0xf300f3f3,0x23002323,0xb800b8b8,0x5d005d5d,
232 0x6a006a6a,0x92009292,0xd500d5d5,0x21002121,
233 0x44004444,0x51005151,0xc600c6c6,0x7d007d7d,
234 0x39003939,0x83008383,0xdc00dcdc,0xaa00aaaa,
235 0x7c007c7c,0x77007777,0x56005656,0x05000505,
236 0x1b001b1b,0xa400a4a4,0x15001515,0x34003434,
237 0x1e001e1e,0x1c001c1c,0xf800f8f8,0x52005252,
238 0x20002020,0x14001414,0xe900e9e9,0xbd00bdbd,
239 0xdd00dddd,0xe400e4e4,0xa100a1a1,0xe000e0e0,
240 0x8a008a8a,0xf100f1f1,0xd600d6d6,0x7a007a7a,
241 0xbb00bbbb,0xe300e3e3,0x40004040,0x4f004f4f,
245 0x70700070,0x2c2c002c,0xb3b300b3,0xc0c000c0,
246 0xe4e400e4,0x57570057,0xeaea00ea,0xaeae00ae,
247 0x23230023,0x6b6b006b,0x45450045,0xa5a500a5,
248 0xeded00ed,0x4f4f004f,0x1d1d001d,0x92920092,
249 0x86860086,0xafaf00af,0x7c7c007c,0x1f1f001f,
250 0x3e3e003e,0xdcdc00dc,0x5e5e005e,0x0b0b000b,
251 0xa6a600a6,0x39390039,0xd5d500d5,0x5d5d005d,
252 0xd9d900d9,0x5a5a005a,0x51510051,0x6c6c006c,
253 0x8b8b008b,0x9a9a009a,0xfbfb00fb,0xb0b000b0,
254 0x74740074,0x2b2b002b,0xf0f000f0,0x84840084,
255 0xdfdf00df,0xcbcb00cb,0x34340034,0x76760076,
256 0x6d6d006d,0xa9a900a9,0xd1d100d1,0x04040004,
257 0x14140014,0x3a3a003a,0xdede00de,0x11110011,
258 0x32320032,0x9c9c009c,0x53530053,0xf2f200f2,
259 0xfefe00fe,0xcfcf00cf,0xc3c300c3,0x7a7a007a,
260 0x24240024,0xe8e800e8,0x60600060,0x69690069,
261 0xaaaa00aa,0xa0a000a0,0xa1a100a1,0x62620062,
262 0x54540054,0x1e1e001e,0xe0e000e0,0x64640064,
263 0x10100010,0x00000000,0xa3a300a3,0x75750075,
264 0x8a8a008a,0xe6e600e6,0x09090009,0xdddd00dd,
265 0x87870087,0x83830083,0xcdcd00cd,0x90900090,
266 0x73730073,0xf6f600f6,0x9d9d009d,0xbfbf00bf,
267 0x52520052,0xd8d800d8,0xc8c800c8,0xc6c600c6,
268 0x81810081,0x6f6f006f,0x13130013,0x63630063,
269 0xe9e900e9,0xa7a700a7,0x9f9f009f,0xbcbc00bc,
270 0x29290029,0xf9f900f9,0x2f2f002f,0xb4b400b4,
271 0x78780078,0x06060006,0xe7e700e7,0x71710071,
272 0xd4d400d4,0xabab00ab,0x88880088,0x8d8d008d,
273 0x72720072,0xb9b900b9,0xf8f800f8,0xacac00ac,
274 0x36360036,0x2a2a002a,0x3c3c003c,0xf1f100f1,
275 0x40400040,0xd3d300d3,0xbbbb00bb,0x43430043,
276 0x15150015,0xadad00ad,0x77770077,0x80800080,
277 0x82820082,0xecec00ec,0x27270027,0xe5e500e5,
278 0x85850085,0x35350035,0x0c0c000c,0x41410041,
279 0xefef00ef,0x93930093,0x19190019,0x21210021,
280 0x0e0e000e,0x4e4e004e,0x65650065,0xbdbd00bd,
281 0xb8b800b8,0x8f8f008f,0xebeb00eb,0xcece00ce,
282 0x30300030,0x5f5f005f,0xc5c500c5,0x1a1a001a,
283 0xe1e100e1,0xcaca00ca,0x47470047,0x3d3d003d,
284 0x01010001,0xd6d600d6,0x56560056,0x4d4d004d,
285 0x0d0d000d,0x66660066,0xcccc00cc,0x2d2d002d,
286 0x12120012,0x20200020,0xb1b100b1,0x99990099,
287 0x4c4c004c,0xc2c200c2,0x7e7e007e,0x05050005,
288 0xb7b700b7,0x31310031,0x17170017,0xd7d700d7,
289 0x58580058,0x61610061,0x1b1b001b,0x1c1c001c,
290 0x0f0f000f,0x16160016,0x18180018,0x22220022,
291 0x44440044,0xb2b200b2,0xb5b500b5,0x91910091,
292 0x08080008,0xa8a800a8,0xfcfc00fc,0x50500050,
293 0xd0d000d0,0x7d7d007d,0x89890089,0x97970097,
294 0x5b5b005b,0x95950095,0xffff00ff,0xd2d200d2,
295 0xc4c400c4,0x48480048,0xf7f700f7,0xdbdb00db,
296 0x03030003,0xdada00da,0x3f3f003f,0x94940094,
297 0x5c5c005c,0x02020002,0x4a4a004a,0x33330033,
298 0x67670067,0xf3f300f3,0x7f7f007f,0xe2e200e2,
299 0x9b9b009b,0x26260026,0x37370037,0x3b3b003b,
300 0x96960096,0x4b4b004b,0xbebe00be,0x2e2e002e,
301 0x79790079,0x8c8c008c,0x6e6e006e,0x8e8e008e,
302 0xf5f500f5,0xb6b600b6,0xfdfd00fd,0x59590059,
303 0x98980098,0x6a6a006a,0x46460046,0xbaba00ba,
304 0x25250025,0x42420042,0xa2a200a2,0xfafa00fa,
305 0x07070007,0x55550055,0xeeee00ee,0x0a0a000a,
306 0x49490049,0x68680068,0x38380038,0xa4a400a4,
307 0x28280028,0x7b7b007b,0xc9c900c9,0xc1c100c1,
308 0xe3e300e3,0xf4f400f4,0xc7c700c7,0x9e9e009e,