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