~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/x86/crypto/camellia_glue.c

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/x86/crypto/camellia_glue.c (Version linux-6.11-rc3) and /arch/i386/crypto/camellia_glue.c (Version linux-3.10.108)


  1 // SPDX-License-Identifier: GPL-2.0-or-later        1 
  2 /*                                                
  3  * Glue Code for assembler optimized version o    
  4  *                                                
  5  * Copyright (c) 2012 Jussi Kivilinna <jussi.k    
  6  *                                                
  7  * Camellia parts based on code by:               
  8  *  Copyright (C) 2006 NTT (Nippon Telegraph a    
  9  */                                               
 10                                                   
 11 #include <asm/unaligned.h>                        
 12 #include <linux/crypto.h>                         
 13 #include <linux/init.h>                           
 14 #include <linux/module.h>                         
 15 #include <linux/types.h>                          
 16 #include <crypto/algapi.h>                        
 17                                                   
 18 #include "camellia.h"                             
 19 #include "ecb_cbc_helpers.h"                      
 20                                                   
 21 /* regular block cipher functions */              
 22 asmlinkage void __camellia_enc_blk(const void     
 23                                    bool xor);     
 24 EXPORT_SYMBOL_GPL(__camellia_enc_blk);            
 25 asmlinkage void camellia_dec_blk(const void *c    
 26 EXPORT_SYMBOL_GPL(camellia_dec_blk);              
 27                                                   
 28 /* 2-way parallel cipher functions */             
 29 asmlinkage void __camellia_enc_blk_2way(const     
 30                                         bool x    
 31 EXPORT_SYMBOL_GPL(__camellia_enc_blk_2way);       
 32 asmlinkage void camellia_dec_blk_2way(const vo    
 33 EXPORT_SYMBOL_GPL(camellia_dec_blk_2way);         
 34                                                   
 35 static void camellia_encrypt(struct crypto_tfm    
 36 {                                                 
 37         camellia_enc_blk(crypto_tfm_ctx(tfm),     
 38 }                                                 
 39                                                   
 40 static void camellia_decrypt(struct crypto_tfm    
 41 {                                                 
 42         camellia_dec_blk(crypto_tfm_ctx(tfm),     
 43 }                                                 
 44                                                   
 45 /* camellia sboxes */                             
 46 __visible const u64 camellia_sp10011110[256] =    
 47         0x7000007070707000ULL, 0x8200008282828    
 48         0xec0000ecececec00ULL, 0xb30000b3b3b3b    
 49         0xc00000c0c0c0c000ULL, 0xe50000e5e5e5e    
 50         0x8500008585858500ULL, 0x5700005757575    
 51         0xea0000eaeaeaea00ULL, 0x0c00000c0c0c0    
 52         0x4100004141414100ULL, 0x2300002323232    
 53         0x6b00006b6b6b6b00ULL, 0x9300009393939    
 54         0x1900001919191900ULL, 0xa50000a5a5a5a    
 55         0xed0000edededed00ULL, 0x0e00000e0e0e0    
 56         0x4e00004e4e4e4e00ULL, 0x1d00001d1d1d1    
 57         0x9200009292929200ULL, 0xbd0000bdbdbdb    
 58         0xb80000b8b8b8b800ULL, 0xaf0000afafafa    
 59         0x7c00007c7c7c7c00ULL, 0xeb0000ebebebe    
 60         0xce0000cececece00ULL, 0x3e00003e3e3e3    
 61         0xdc0000dcdcdcdc00ULL, 0x5f00005f5f5f5    
 62         0xc50000c5c5c5c500ULL, 0x0b00000b0b0b0    
 63         0xa60000a6a6a6a600ULL, 0xe10000e1e1e1e    
 64         0xca0000cacacaca00ULL, 0xd50000d5d5d5d    
 65         0x5d00005d5d5d5d00ULL, 0x3d00003d3d3d3    
 66         0x0100000101010100ULL, 0x5a00005a5a5a5    
 67         0x5100005151515100ULL, 0x5600005656565    
 68         0x4d00004d4d4d4d00ULL, 0x8b00008b8b8b8    
 69         0x9a00009a9a9a9a00ULL, 0x6600006666666    
 70         0xcc0000cccccccc00ULL, 0xb00000b0b0b0b    
 71         0x7400007474747400ULL, 0x1200001212121    
 72         0x2000002020202000ULL, 0xf00000f0f0f0f    
 73         0x8400008484848400ULL, 0x9900009999999    
 74         0x4c00004c4c4c4c00ULL, 0xcb0000cbcbcbc    
 75         0x3400003434343400ULL, 0x7e00007e7e7e7    
 76         0x0500000505050500ULL, 0x6d00006d6d6d6    
 77         0xa90000a9a9a9a900ULL, 0x3100003131313    
 78         0x1700001717171700ULL, 0x0400000404040    
 79         0x1400001414141400ULL, 0x5800005858585    
 80         0x6100006161616100ULL, 0xde0000dededed    
 81         0x1100001111111100ULL, 0x1c00001c1c1c1    
 82         0x0f00000f0f0f0f00ULL, 0x9c00009c9c9c9    
 83         0x5300005353535300ULL, 0x1800001818181    
 84         0x2200002222222200ULL, 0xfe0000fefefef    
 85         0xcf0000cfcfcfcf00ULL, 0xb20000b2b2b2b    
 86         0xb50000b5b5b5b500ULL, 0x7a00007a7a7a7    
 87         0x2400002424242400ULL, 0x0800000808080    
 88         0xa80000a8a8a8a800ULL, 0x6000006060606    
 89         0x6900006969696900ULL, 0x5000005050505    
 90         0xd00000d0d0d0d000ULL, 0xa00000a0a0a0a    
 91         0xa10000a1a1a1a100ULL, 0x8900008989898    
 92         0x9700009797979700ULL, 0x5400005454545    
 93         0x1e00001e1e1e1e00ULL, 0x9500009595959    
 94         0xff0000ffffffff00ULL, 0x6400006464646    
 95         0x1000001010101000ULL, 0xc40000c4c4c4c    
 96         0x4800004848484800ULL, 0xa30000a3a3a3a    
 97         0x7500007575757500ULL, 0xdb0000dbdbdbd    
 98         0x0300000303030300ULL, 0xe60000e6e6e6e    
 99         0x0900000909090900ULL, 0x3f00003f3f3f3    
100         0x9400009494949400ULL, 0x8700008787878    
101         0x8300008383838300ULL, 0x0200000202020    
102         0x4a00004a4a4a4a00ULL, 0x9000009090909    
103         0x7300007373737300ULL, 0x6700006767676    
104         0xf30000f3f3f3f300ULL, 0x9d00009d9d9d9    
105         0xbf0000bfbfbfbf00ULL, 0xe20000e2e2e2e    
106         0x9b00009b9b9b9b00ULL, 0xd80000d8d8d8d    
107         0xc80000c8c8c8c800ULL, 0x3700003737373    
108         0x3b00003b3b3b3b00ULL, 0x8100008181818    
109         0x6f00006f6f6f6f00ULL, 0x4b00004b4b4b4    
110         0xbe0000bebebebe00ULL, 0x6300006363636    
111         0xe90000e9e9e9e900ULL, 0x7900007979797    
112         0x8c00008c8c8c8c00ULL, 0x9f00009f9f9f9    
113         0xbc0000bcbcbcbc00ULL, 0x8e00008e8e8e8    
114         0xf50000f5f5f5f500ULL, 0xf90000f9f9f9f    
115         0x2f00002f2f2f2f00ULL, 0xfd0000fdfdfdf    
116         0x5900005959595900ULL, 0x7800007878787    
117         0x0600000606060600ULL, 0x6a00006a6a6a6    
118         0x4600004646464600ULL, 0x7100007171717    
119         0xd40000d4d4d4d400ULL, 0x2500002525252    
120         0x4200004242424200ULL, 0x8800008888888    
121         0x8d00008d8d8d8d00ULL, 0xfa0000fafafaf    
122         0x0700000707070700ULL, 0xb90000b9b9b9b    
123         0xf80000f8f8f8f800ULL, 0xee0000eeeeeee    
124         0x0a00000a0a0a0a00ULL, 0x3600003636363    
125         0x2a00002a2a2a2a00ULL, 0x6800006868686    
126         0x3800003838383800ULL, 0xf10000f1f1f1f    
127         0x4000004040404000ULL, 0x2800002828282    
128         0x7b00007b7b7b7b00ULL, 0xbb0000bbbbbbb    
129         0x4300004343434300ULL, 0xc10000c1c1c1c    
130         0xe30000e3e3e3e300ULL, 0xad0000adadada    
131         0x7700007777777700ULL, 0xc70000c7c7c7c    
132         0x9e00009e9e9e9e00ULL,                    
133 };                                                
134                                                   
135 __visible const u64 camellia_sp22000222[256] =    
136         0xe0e0000000e0e0e0ULL, 0x0505000000050    
137         0xd9d9000000d9d9d9ULL, 0x6767000000676    
138         0x8181000000818181ULL, 0xcbcb000000cbc    
139         0x0b0b0000000b0b0bULL, 0xaeae000000aea    
140         0xd5d5000000d5d5d5ULL, 0x1818000000181    
141         0x8282000000828282ULL, 0x4646000000464    
142         0xd6d6000000d6d6d6ULL, 0x2727000000272    
143         0x3232000000323232ULL, 0x4b4b0000004b4    
144         0xdbdb000000dbdbdbULL, 0x1c1c0000001c1    
145         0x9c9c0000009c9c9cULL, 0x3a3a0000003a3    
146         0x2525000000252525ULL, 0x7b7b0000007b7    
147         0x7171000000717171ULL, 0x5f5f0000005f5    
148         0xf8f8000000f8f8f8ULL, 0xd7d7000000d7d    
149         0x9d9d0000009d9d9dULL, 0x7c7c0000007c7    
150         0xb9b9000000b9b9b9ULL, 0xbebe000000beb    
151         0x8b8b0000008b8b8bULL, 0x1616000000161    
152         0x4d4d0000004d4d4dULL, 0xc3c3000000c3c    
153         0x9595000000959595ULL, 0xabab000000aba    
154         0xbaba000000bababaULL, 0x7a7a0000007a7    
155         0x0202000000020202ULL, 0xb4b4000000b4b    
156         0xa2a2000000a2a2a2ULL, 0xacac000000aca    
157         0x9a9a0000009a9a9aULL, 0x1717000000171    
158         0x3535000000353535ULL, 0xcccc000000ccc    
159         0x9999000000999999ULL, 0x6161000000616    
160         0xe8e8000000e8e8e8ULL, 0x2424000000242    
161         0x4040000000404040ULL, 0xe1e1000000e1e    
162         0x0909000000090909ULL, 0x3333000000333    
163         0x9898000000989898ULL, 0x9797000000979    
164         0x6868000000686868ULL, 0xfcfc000000fcf    
165         0x0a0a0000000a0a0aULL, 0xdada000000dad    
166         0x5353000000535353ULL, 0x6262000000626    
167         0x2e2e0000002e2e2eULL, 0x0808000000080    
168         0x2828000000282828ULL, 0xb0b0000000b0b    
169         0xc2c2000000c2c2c2ULL, 0xbdbd000000bdb    
170         0x2222000000222222ULL, 0x3838000000383    
171         0x1e1e0000001e1e1eULL, 0x3939000000393    
172         0xa6a6000000a6a6a6ULL, 0x3030000000303    
173         0x4444000000444444ULL, 0xfdfd000000fdf    
174         0x9f9f0000009f9f9fULL, 0x6565000000656    
175         0x6b6b0000006b6b6bULL, 0xf4f4000000f4f    
176         0x4848000000484848ULL, 0x1010000000101    
177         0x5151000000515151ULL, 0xc0c0000000c0c    
178         0xd2d2000000d2d2d2ULL, 0xa0a0000000a0a    
179         0xa1a1000000a1a1a1ULL, 0x4141000000414    
180         0x4343000000434343ULL, 0x1313000000131    
181         0x2f2f0000002f2f2fULL, 0xa8a8000000a8a    
182         0x3c3c0000003c3c3cULL, 0x2b2b0000002b2    
183         0xffff000000ffffffULL, 0xc8c8000000c8c    
184         0x2020000000202020ULL, 0x8989000000898    
185         0x9090000000909090ULL, 0x4747000000474    
186         0xeaea000000eaeaeaULL, 0xb7b7000000b7b    
187         0x0606000000060606ULL, 0xcdcd000000cdc    
188         0x1212000000121212ULL, 0x7e7e0000007e7    
189         0x2929000000292929ULL, 0x0f0f0000000f0    
190         0x0707000000070707ULL, 0x0404000000040    
191         0x9494000000949494ULL, 0x2121000000212    
192         0xe6e6000000e6e6e6ULL, 0xcece000000cec    
193         0xe7e7000000e7e7e7ULL, 0x3b3b0000003b3    
194         0x7f7f0000007f7f7fULL, 0xc5c5000000c5c    
195         0x3737000000373737ULL, 0xb1b1000000b1b    
196         0x9191000000919191ULL, 0x6e6e0000006e6    
197         0x7676000000767676ULL, 0x0303000000030    
198         0xdede000000dededeULL, 0x9696000000969    
199         0x7d7d0000007d7d7dULL, 0xc6c6000000c6c    
200         0xd3d3000000d3d3d3ULL, 0xf2f2000000f2f    
201         0x1919000000191919ULL, 0x3f3f0000003f3    
202         0x7979000000797979ULL, 0x1d1d0000001d1    
203         0xebeb000000ebebebULL, 0xf3f3000000f3f    
204         0x5e5e0000005e5e5eULL, 0xfbfb000000fbf    
205         0xb2b2000000b2b2b2ULL, 0xf0f0000000f0f    
206         0x0c0c0000000c0c0cULL, 0xd4d4000000d4d    
207         0x8c8c0000008c8c8cULL, 0xe2e2000000e2e    
208         0xa9a9000000a9a9a9ULL, 0x4a4a0000004a4    
209         0x8484000000848484ULL, 0x1111000000111    
210         0x1b1b0000001b1b1bULL, 0xf5f5000000f5f    
211         0x0e0e0000000e0e0eULL, 0x7373000000737    
212         0xf1f1000000f1f1f1ULL, 0xdddd000000ddd    
213         0x1414000000141414ULL, 0x6c6c0000006c6    
214         0x5454000000545454ULL, 0xd0d0000000d0d    
215         0x7070000000707070ULL, 0xe3e3000000e3e    
216         0x8080000000808080ULL, 0x5050000000505    
217         0xf6f6000000f6f6f6ULL, 0x7777000000777    
218         0x8686000000868686ULL, 0x8383000000838    
219         0xc7c7000000c7c7c7ULL, 0x5b5b0000005b5    
220         0xeeee000000eeeeeeULL, 0x8f8f0000008f8    
221         0x3d3d0000003d3d3dULL,                    
222 };                                                
223                                                   
224 __visible const u64 camellia_sp03303033[256] =    
225         0x0038380038003838ULL, 0x0041410041004    
226         0x0076760076007676ULL, 0x00d9d900d900d    
227         0x0060600060006060ULL, 0x00f2f200f200f    
228         0x00c2c200c200c2c2ULL, 0x00abab00ab00a    
229         0x0075750075007575ULL, 0x0006060006000    
230         0x00a0a000a000a0a0ULL, 0x0091910091009    
231         0x00b5b500b500b5b5ULL, 0x00c9c900c900c    
232         0x008c8c008c008c8cULL, 0x00d2d200d200d    
233         0x00f6f600f600f6f6ULL, 0x0007070007000    
234         0x0027270027002727ULL, 0x008e8e008e008    
235         0x0049490049004949ULL, 0x00dede00de00d    
236         0x005c5c005c005c5cULL, 0x00d7d700d700d    
237         0x003e3e003e003e3eULL, 0x00f5f500f500f    
238         0x0067670067006767ULL, 0x001f1f001f001    
239         0x006e6e006e006e6eULL, 0x00afaf00af00a    
240         0x00e2e200e200e2e2ULL, 0x0085850085008    
241         0x0053530053005353ULL, 0x00f0f000f000f    
242         0x0065650065006565ULL, 0x00eaea00ea00e    
243         0x00aeae00ae00aeaeULL, 0x009e9e009e009    
244         0x0080800080008080ULL, 0x002d2d002d002    
245         0x00a8a800a800a8a8ULL, 0x002b2b002b002    
246         0x00a6a600a600a6a6ULL, 0x00c5c500c500c    
247         0x004d4d004d004d4dULL, 0x0033330033003    
248         0x0066660066006666ULL, 0x0058580058005    
249         0x003a3a003a003a3aULL, 0x0009090009000    
250         0x0010100010001010ULL, 0x0078780078007    
251         0x0042420042004242ULL, 0x00cccc00cc00c    
252         0x0026260026002626ULL, 0x00e5e500e500e    
253         0x001a1a001a001a1aULL, 0x003f3f003f003    
254         0x0082820082008282ULL, 0x00b6b600b600b    
255         0x00d4d400d400d4d4ULL, 0x0098980098009    
256         0x008b8b008b008b8bULL, 0x0002020002000    
257         0x000a0a000a000a0aULL, 0x002c2c002c002    
258         0x00b0b000b000b0b0ULL, 0x006f6f006f006    
259         0x0088880088008888ULL, 0x000e0e000e000    
260         0x0087870087008787ULL, 0x004e4e004e004    
261         0x00a9a900a900a9a9ULL, 0x000c0c000c000    
262         0x0011110011001111ULL, 0x007f7f007f007    
263         0x00e7e700e700e7e7ULL, 0x0059590059005    
264         0x00dada00da00dadaULL, 0x003d3d003d003    
265         0x0012120012001212ULL, 0x0004040004000    
266         0x0054540054005454ULL, 0x0030300030003    
267         0x00b4b400b400b4b4ULL, 0x0028280028002    
268         0x0068680068006868ULL, 0x0050500050005    
269         0x00d0d000d000d0d0ULL, 0x00c4c400c400c    
270         0x00cbcb00cb00cbcbULL, 0x002a2a002a002    
271         0x000f0f000f000f0fULL, 0x00caca00ca00c    
272         0x00ffff00ff00ffffULL, 0x0032320032003    
273         0x0008080008000808ULL, 0x0062620062006    
274         0x0024240024002424ULL, 0x00d1d100d100d    
275         0x00baba00ba00babaULL, 0x00eded00ed00e    
276         0x0081810081008181ULL, 0x0073730073007    
277         0x0084840084008484ULL, 0x009f9f009f009    
278         0x004a4a004a004a4aULL, 0x00c3c300c300c    
279         0x00c1c100c100c1c1ULL, 0x0001010001000    
280         0x0025250025002525ULL, 0x0048480048004    
281         0x00b9b900b900b9b9ULL, 0x00b3b300b300b    
282         0x00f9f900f900f9f9ULL, 0x00cece00ce00c    
283         0x00dfdf00df00dfdfULL, 0x0071710071007    
284         0x00cdcd00cd00cdcdULL, 0x006c6c006c006    
285         0x0064640064006464ULL, 0x009b9b009b009    
286         0x009d9d009d009d9dULL, 0x00c0c000c000c    
287         0x00b7b700b700b7b7ULL, 0x00a5a500a500a    
288         0x005f5f005f005f5fULL, 0x00b1b100b100b    
289         0x00f4f400f400f4f4ULL, 0x00bcbc00bc00b    
290         0x0046460046004646ULL, 0x00cfcf00cf00c    
291         0x005e5e005e005e5eULL, 0x0047470047004    
292         0x00fafa00fa00fafaULL, 0x00fcfc00fc00f    
293         0x0097970097009797ULL, 0x00fefe00fe00f    
294         0x00acac00ac00acacULL, 0x003c3c003c003    
295         0x0003030003000303ULL, 0x0035350035003    
296         0x0023230023002323ULL, 0x00b8b800b800b    
297         0x006a6a006a006a6aULL, 0x0092920092009    
298         0x0021210021002121ULL, 0x0044440044004    
299         0x00c6c600c600c6c6ULL, 0x007d7d007d007    
300         0x0083830083008383ULL, 0x00dcdc00dc00d    
301         0x007c7c007c007c7cULL, 0x0077770077007    
302         0x0005050005000505ULL, 0x001b1b001b001    
303         0x0015150015001515ULL, 0x0034340034003    
304         0x001c1c001c001c1cULL, 0x00f8f800f800f    
305         0x0020200020002020ULL, 0x0014140014001    
306         0x00bdbd00bd00bdbdULL, 0x00dddd00dd00d    
307         0x00a1a100a100a1a1ULL, 0x00e0e000e000e    
308         0x00f1f100f100f1f1ULL, 0x00d6d600d600d    
309         0x00bbbb00bb00bbbbULL, 0x00e3e300e300e    
310         0x004f4f004f004f4fULL,                    
311 };                                                
312                                                   
313 __visible const u64 camellia_sp00444404[256] =    
314         0x0000707070700070ULL, 0x00002c2c2c2c0    
315         0x0000c0c0c0c000c0ULL, 0x0000e4e4e4e40    
316         0x0000eaeaeaea00eaULL, 0x0000aeaeaeae0    
317         0x00006b6b6b6b006bULL, 0x0000454545450    
318         0x0000edededed00edULL, 0x00004f4f4f4f0    
319         0x0000929292920092ULL, 0x0000868686860    
320         0x00007c7c7c7c007cULL, 0x00001f1f1f1f0    
321         0x0000dcdcdcdc00dcULL, 0x00005e5e5e5e0    
322         0x0000a6a6a6a600a6ULL, 0x0000393939390    
323         0x00005d5d5d5d005dULL, 0x0000d9d9d9d90    
324         0x0000515151510051ULL, 0x00006c6c6c6c0    
325         0x00009a9a9a9a009aULL, 0x0000fbfbfbfb0    
326         0x0000747474740074ULL, 0x00002b2b2b2b0    
327         0x0000848484840084ULL, 0x0000dfdfdfdf0    
328         0x0000343434340034ULL, 0x0000767676760    
329         0x0000a9a9a9a900a9ULL, 0x0000d1d1d1d10    
330         0x0000141414140014ULL, 0x00003a3a3a3a0    
331         0x0000111111110011ULL, 0x0000323232320    
332         0x0000535353530053ULL, 0x0000f2f2f2f20    
333         0x0000cfcfcfcf00cfULL, 0x0000c3c3c3c30    
334         0x0000242424240024ULL, 0x0000e8e8e8e80    
335         0x0000696969690069ULL, 0x0000aaaaaaaa0    
336         0x0000a1a1a1a100a1ULL, 0x0000626262620    
337         0x00001e1e1e1e001eULL, 0x0000e0e0e0e00    
338         0x0000101010100010ULL, 0x0000000000000    
339         0x0000757575750075ULL, 0x00008a8a8a8a0    
340         0x0000090909090009ULL, 0x0000dddddddd0    
341         0x0000838383830083ULL, 0x0000cdcdcdcd0    
342         0x0000737373730073ULL, 0x0000f6f6f6f60    
343         0x0000bfbfbfbf00bfULL, 0x0000525252520    
344         0x0000c8c8c8c800c8ULL, 0x0000c6c6c6c60    
345         0x00006f6f6f6f006fULL, 0x0000131313130    
346         0x0000e9e9e9e900e9ULL, 0x0000a7a7a7a70    
347         0x0000bcbcbcbc00bcULL, 0x0000292929290    
348         0x00002f2f2f2f002fULL, 0x0000b4b4b4b40    
349         0x0000060606060006ULL, 0x0000e7e7e7e70    
350         0x0000d4d4d4d400d4ULL, 0x0000abababab0    
351         0x00008d8d8d8d008dULL, 0x0000727272720    
352         0x0000f8f8f8f800f8ULL, 0x0000acacacac0    
353         0x00002a2a2a2a002aULL, 0x00003c3c3c3c0    
354         0x0000404040400040ULL, 0x0000d3d3d3d30    
355         0x0000434343430043ULL, 0x0000151515150    
356         0x0000777777770077ULL, 0x0000808080800    
357         0x0000ecececec00ecULL, 0x0000272727270    
358         0x0000858585850085ULL, 0x0000353535350    
359         0x0000414141410041ULL, 0x0000efefefef0    
360         0x0000191919190019ULL, 0x0000212121210    
361         0x00004e4e4e4e004eULL, 0x0000656565650    
362         0x0000b8b8b8b800b8ULL, 0x00008f8f8f8f0    
363         0x0000cececece00ceULL, 0x0000303030300    
364         0x0000c5c5c5c500c5ULL, 0x00001a1a1a1a0    
365         0x0000cacacaca00caULL, 0x0000474747470    
366         0x0000010101010001ULL, 0x0000d6d6d6d60    
367         0x00004d4d4d4d004dULL, 0x00000d0d0d0d0    
368         0x0000cccccccc00ccULL, 0x00002d2d2d2d0    
369         0x0000202020200020ULL, 0x0000b1b1b1b10    
370         0x00004c4c4c4c004cULL, 0x0000c2c2c2c20    
371         0x0000050505050005ULL, 0x0000b7b7b7b70    
372         0x0000171717170017ULL, 0x0000d7d7d7d70    
373         0x0000616161610061ULL, 0x00001b1b1b1b0    
374         0x00000f0f0f0f000fULL, 0x0000161616160    
375         0x0000222222220022ULL, 0x0000444444440    
376         0x0000b5b5b5b500b5ULL, 0x0000919191910    
377         0x0000a8a8a8a800a8ULL, 0x0000fcfcfcfc0    
378         0x0000d0d0d0d000d0ULL, 0x00007d7d7d7d0    
379         0x0000979797970097ULL, 0x00005b5b5b5b0    
380         0x0000ffffffff00ffULL, 0x0000d2d2d2d20    
381         0x0000484848480048ULL, 0x0000f7f7f7f70    
382         0x0000030303030003ULL, 0x0000dadadada0    
383         0x0000949494940094ULL, 0x00005c5c5c5c0    
384         0x00004a4a4a4a004aULL, 0x0000333333330    
385         0x0000f3f3f3f300f3ULL, 0x00007f7f7f7f0    
386         0x00009b9b9b9b009bULL, 0x0000262626260    
387         0x00003b3b3b3b003bULL, 0x0000969696960    
388         0x0000bebebebe00beULL, 0x00002e2e2e2e0    
389         0x00008c8c8c8c008cULL, 0x00006e6e6e6e0    
390         0x0000f5f5f5f500f5ULL, 0x0000b6b6b6b60    
391         0x0000595959590059ULL, 0x0000989898980    
392         0x0000464646460046ULL, 0x0000babababa0    
393         0x0000424242420042ULL, 0x0000a2a2a2a20    
394         0x0000070707070007ULL, 0x0000555555550    
395         0x00000a0a0a0a000aULL, 0x0000494949490    
396         0x0000383838380038ULL, 0x0000a4a4a4a40    
397         0x00007b7b7b7b007bULL, 0x0000c9c9c9c90    
398         0x0000e3e3e3e300e3ULL, 0x0000f4f4f4f40    
399         0x00009e9e9e9e009eULL,                    
400 };                                                
401                                                   
402 __visible const u64 camellia_sp02220222[256] =    
403         0x00e0e0e000e0e0e0ULL, 0x0005050500050    
404         0x00d9d9d900d9d9d9ULL, 0x0067676700676    
405         0x0081818100818181ULL, 0x00cbcbcb00cbc    
406         0x000b0b0b000b0b0bULL, 0x00aeaeae00aea    
407         0x00d5d5d500d5d5d5ULL, 0x0018181800181    
408         0x0082828200828282ULL, 0x0046464600464    
409         0x00d6d6d600d6d6d6ULL, 0x0027272700272    
410         0x0032323200323232ULL, 0x004b4b4b004b4    
411         0x00dbdbdb00dbdbdbULL, 0x001c1c1c001c1    
412         0x009c9c9c009c9c9cULL, 0x003a3a3a003a3    
413         0x0025252500252525ULL, 0x007b7b7b007b7    
414         0x0071717100717171ULL, 0x005f5f5f005f5    
415         0x00f8f8f800f8f8f8ULL, 0x00d7d7d700d7d    
416         0x009d9d9d009d9d9dULL, 0x007c7c7c007c7    
417         0x00b9b9b900b9b9b9ULL, 0x00bebebe00beb    
418         0x008b8b8b008b8b8bULL, 0x0016161600161    
419         0x004d4d4d004d4d4dULL, 0x00c3c3c300c3c    
420         0x0095959500959595ULL, 0x00ababab00aba    
421         0x00bababa00bababaULL, 0x007a7a7a007a7    
422         0x0002020200020202ULL, 0x00b4b4b400b4b    
423         0x00a2a2a200a2a2a2ULL, 0x00acacac00aca    
424         0x009a9a9a009a9a9aULL, 0x0017171700171    
425         0x0035353500353535ULL, 0x00cccccc00ccc    
426         0x0099999900999999ULL, 0x0061616100616    
427         0x00e8e8e800e8e8e8ULL, 0x0024242400242    
428         0x0040404000404040ULL, 0x00e1e1e100e1e    
429         0x0009090900090909ULL, 0x0033333300333    
430         0x0098989800989898ULL, 0x0097979700979    
431         0x0068686800686868ULL, 0x00fcfcfc00fcf    
432         0x000a0a0a000a0a0aULL, 0x00dadada00dad    
433         0x0053535300535353ULL, 0x0062626200626    
434         0x002e2e2e002e2e2eULL, 0x0008080800080    
435         0x0028282800282828ULL, 0x00b0b0b000b0b    
436         0x00c2c2c200c2c2c2ULL, 0x00bdbdbd00bdb    
437         0x0022222200222222ULL, 0x0038383800383    
438         0x001e1e1e001e1e1eULL, 0x0039393900393    
439         0x00a6a6a600a6a6a6ULL, 0x0030303000303    
440         0x0044444400444444ULL, 0x00fdfdfd00fdf    
441         0x009f9f9f009f9f9fULL, 0x0065656500656    
442         0x006b6b6b006b6b6bULL, 0x00f4f4f400f4f    
443         0x0048484800484848ULL, 0x0010101000101    
444         0x0051515100515151ULL, 0x00c0c0c000c0c    
445         0x00d2d2d200d2d2d2ULL, 0x00a0a0a000a0a    
446         0x00a1a1a100a1a1a1ULL, 0x0041414100414    
447         0x0043434300434343ULL, 0x0013131300131    
448         0x002f2f2f002f2f2fULL, 0x00a8a8a800a8a    
449         0x003c3c3c003c3c3cULL, 0x002b2b2b002b2    
450         0x00ffffff00ffffffULL, 0x00c8c8c800c8c    
451         0x0020202000202020ULL, 0x0089898900898    
452         0x0090909000909090ULL, 0x0047474700474    
453         0x00eaeaea00eaeaeaULL, 0x00b7b7b700b7b    
454         0x0006060600060606ULL, 0x00cdcdcd00cdc    
455         0x0012121200121212ULL, 0x007e7e7e007e7    
456         0x0029292900292929ULL, 0x000f0f0f000f0    
457         0x0007070700070707ULL, 0x0004040400040    
458         0x0094949400949494ULL, 0x0021212100212    
459         0x00e6e6e600e6e6e6ULL, 0x00cecece00cec    
460         0x00e7e7e700e7e7e7ULL, 0x003b3b3b003b3    
461         0x007f7f7f007f7f7fULL, 0x00c5c5c500c5c    
462         0x0037373700373737ULL, 0x00b1b1b100b1b    
463         0x0091919100919191ULL, 0x006e6e6e006e6    
464         0x0076767600767676ULL, 0x0003030300030    
465         0x00dedede00dededeULL, 0x0096969600969    
466         0x007d7d7d007d7d7dULL, 0x00c6c6c600c6c    
467         0x00d3d3d300d3d3d3ULL, 0x00f2f2f200f2f    
468         0x0019191900191919ULL, 0x003f3f3f003f3    
469         0x0079797900797979ULL, 0x001d1d1d001d1    
470         0x00ebebeb00ebebebULL, 0x00f3f3f300f3f    
471         0x005e5e5e005e5e5eULL, 0x00fbfbfb00fbf    
472         0x00b2b2b200b2b2b2ULL, 0x00f0f0f000f0f    
473         0x000c0c0c000c0c0cULL, 0x00d4d4d400d4d    
474         0x008c8c8c008c8c8cULL, 0x00e2e2e200e2e    
475         0x00a9a9a900a9a9a9ULL, 0x004a4a4a004a4    
476         0x0084848400848484ULL, 0x0011111100111    
477         0x001b1b1b001b1b1bULL, 0x00f5f5f500f5f    
478         0x000e0e0e000e0e0eULL, 0x0073737300737    
479         0x00f1f1f100f1f1f1ULL, 0x00dddddd00ddd    
480         0x0014141400141414ULL, 0x006c6c6c006c6    
481         0x0054545400545454ULL, 0x00d0d0d000d0d    
482         0x0070707000707070ULL, 0x00e3e3e300e3e    
483         0x0080808000808080ULL, 0x0050505000505    
484         0x00f6f6f600f6f6f6ULL, 0x0077777700777    
485         0x0086868600868686ULL, 0x0083838300838    
486         0x00c7c7c700c7c7c7ULL, 0x005b5b5b005b5    
487         0x00eeeeee00eeeeeeULL, 0x008f8f8f008f8    
488         0x003d3d3d003d3d3dULL,                    
489 };                                                
490                                                   
491 __visible const u64 camellia_sp30333033[256] =    
492         0x3800383838003838ULL, 0x4100414141004    
493         0x7600767676007676ULL, 0xd900d9d9d900d    
494         0x6000606060006060ULL, 0xf200f2f2f200f    
495         0xc200c2c2c200c2c2ULL, 0xab00ababab00a    
496         0x7500757575007575ULL, 0x0600060606000    
497         0xa000a0a0a000a0a0ULL, 0x9100919191009    
498         0xb500b5b5b500b5b5ULL, 0xc900c9c9c900c    
499         0x8c008c8c8c008c8cULL, 0xd200d2d2d200d    
500         0xf600f6f6f600f6f6ULL, 0x0700070707000    
501         0x2700272727002727ULL, 0x8e008e8e8e008    
502         0x4900494949004949ULL, 0xde00dedede00d    
503         0x5c005c5c5c005c5cULL, 0xd700d7d7d700d    
504         0x3e003e3e3e003e3eULL, 0xf500f5f5f500f    
505         0x6700676767006767ULL, 0x1f001f1f1f001    
506         0x6e006e6e6e006e6eULL, 0xaf00afafaf00a    
507         0xe200e2e2e200e2e2ULL, 0x8500858585008    
508         0x5300535353005353ULL, 0xf000f0f0f000f    
509         0x6500656565006565ULL, 0xea00eaeaea00e    
510         0xae00aeaeae00aeaeULL, 0x9e009e9e9e009    
511         0x8000808080008080ULL, 0x2d002d2d2d002    
512         0xa800a8a8a800a8a8ULL, 0x2b002b2b2b002    
513         0xa600a6a6a600a6a6ULL, 0xc500c5c5c500c    
514         0x4d004d4d4d004d4dULL, 0x3300333333003    
515         0x6600666666006666ULL, 0x5800585858005    
516         0x3a003a3a3a003a3aULL, 0x0900090909000    
517         0x1000101010001010ULL, 0x7800787878007    
518         0x4200424242004242ULL, 0xcc00cccccc00c    
519         0x2600262626002626ULL, 0xe500e5e5e500e    
520         0x1a001a1a1a001a1aULL, 0x3f003f3f3f003    
521         0x8200828282008282ULL, 0xb600b6b6b600b    
522         0xd400d4d4d400d4d4ULL, 0x9800989898009    
523         0x8b008b8b8b008b8bULL, 0x0200020202000    
524         0x0a000a0a0a000a0aULL, 0x2c002c2c2c002    
525         0xb000b0b0b000b0b0ULL, 0x6f006f6f6f006    
526         0x8800888888008888ULL, 0x0e000e0e0e000    
527         0x8700878787008787ULL, 0x4e004e4e4e004    
528         0xa900a9a9a900a9a9ULL, 0x0c000c0c0c000    
529         0x1100111111001111ULL, 0x7f007f7f7f007    
530         0xe700e7e7e700e7e7ULL, 0x5900595959005    
531         0xda00dadada00dadaULL, 0x3d003d3d3d003    
532         0x1200121212001212ULL, 0x0400040404000    
533         0x5400545454005454ULL, 0x3000303030003    
534         0xb400b4b4b400b4b4ULL, 0x2800282828002    
535         0x6800686868006868ULL, 0x5000505050005    
536         0xd000d0d0d000d0d0ULL, 0xc400c4c4c400c    
537         0xcb00cbcbcb00cbcbULL, 0x2a002a2a2a002    
538         0x0f000f0f0f000f0fULL, 0xca00cacaca00c    
539         0xff00ffffff00ffffULL, 0x3200323232003    
540         0x0800080808000808ULL, 0x6200626262006    
541         0x2400242424002424ULL, 0xd100d1d1d100d    
542         0xba00bababa00babaULL, 0xed00ededed00e    
543         0x8100818181008181ULL, 0x7300737373007    
544         0x8400848484008484ULL, 0x9f009f9f9f009    
545         0x4a004a4a4a004a4aULL, 0xc300c3c3c300c    
546         0xc100c1c1c100c1c1ULL, 0x0100010101000    
547         0x2500252525002525ULL, 0x4800484848004    
548         0xb900b9b9b900b9b9ULL, 0xb300b3b3b300b    
549         0xf900f9f9f900f9f9ULL, 0xce00cecece00c    
550         0xdf00dfdfdf00dfdfULL, 0x7100717171007    
551         0xcd00cdcdcd00cdcdULL, 0x6c006c6c6c006    
552         0x6400646464006464ULL, 0x9b009b9b9b009    
553         0x9d009d9d9d009d9dULL, 0xc000c0c0c000c    
554         0xb700b7b7b700b7b7ULL, 0xa500a5a5a500a    
555         0x5f005f5f5f005f5fULL, 0xb100b1b1b100b    
556         0xf400f4f4f400f4f4ULL, 0xbc00bcbcbc00b    
557         0x4600464646004646ULL, 0xcf00cfcfcf00c    
558         0x5e005e5e5e005e5eULL, 0x4700474747004    
559         0xfa00fafafa00fafaULL, 0xfc00fcfcfc00f    
560         0x9700979797009797ULL, 0xfe00fefefe00f    
561         0xac00acacac00acacULL, 0x3c003c3c3c003    
562         0x0300030303000303ULL, 0x3500353535003    
563         0x2300232323002323ULL, 0xb800b8b8b800b    
564         0x6a006a6a6a006a6aULL, 0x9200929292009    
565         0x2100212121002121ULL, 0x4400444444004    
566         0xc600c6c6c600c6c6ULL, 0x7d007d7d7d007    
567         0x8300838383008383ULL, 0xdc00dcdcdc00d    
568         0x7c007c7c7c007c7cULL, 0x7700777777007    
569         0x0500050505000505ULL, 0x1b001b1b1b001    
570         0x1500151515001515ULL, 0x3400343434003    
571         0x1c001c1c1c001c1cULL, 0xf800f8f8f800f    
572         0x2000202020002020ULL, 0x1400141414001    
573         0xbd00bdbdbd00bdbdULL, 0xdd00dddddd00d    
574         0xa100a1a1a100a1a1ULL, 0xe000e0e0e000e    
575         0xf100f1f1f100f1f1ULL, 0xd600d6d6d600d    
576         0xbb00bbbbbb00bbbbULL, 0xe300e3e3e300e    
577         0x4f004f4f4f004f4fULL,                    
578 };                                                
579                                                   
580 __visible const u64 camellia_sp44044404[256] =    
581         0x7070007070700070ULL, 0x2c2c002c2c2c0    
582         0xc0c000c0c0c000c0ULL, 0xe4e400e4e4e40    
583         0xeaea00eaeaea00eaULL, 0xaeae00aeaeae0    
584         0x6b6b006b6b6b006bULL, 0x4545004545450    
585         0xeded00ededed00edULL, 0x4f4f004f4f4f0    
586         0x9292009292920092ULL, 0x8686008686860    
587         0x7c7c007c7c7c007cULL, 0x1f1f001f1f1f0    
588         0xdcdc00dcdcdc00dcULL, 0x5e5e005e5e5e0    
589         0xa6a600a6a6a600a6ULL, 0x3939003939390    
590         0x5d5d005d5d5d005dULL, 0xd9d900d9d9d90    
591         0x5151005151510051ULL, 0x6c6c006c6c6c0    
592         0x9a9a009a9a9a009aULL, 0xfbfb00fbfbfb0    
593         0x7474007474740074ULL, 0x2b2b002b2b2b0    
594         0x8484008484840084ULL, 0xdfdf00dfdfdf0    
595         0x3434003434340034ULL, 0x7676007676760    
596         0xa9a900a9a9a900a9ULL, 0xd1d100d1d1d10    
597         0x1414001414140014ULL, 0x3a3a003a3a3a0    
598         0x1111001111110011ULL, 0x3232003232320    
599         0x5353005353530053ULL, 0xf2f200f2f2f20    
600         0xcfcf00cfcfcf00cfULL, 0xc3c300c3c3c30    
601         0x2424002424240024ULL, 0xe8e800e8e8e80    
602         0x6969006969690069ULL, 0xaaaa00aaaaaa0    
603         0xa1a100a1a1a100a1ULL, 0x6262006262620    
604         0x1e1e001e1e1e001eULL, 0xe0e000e0e0e00    
605         0x1010001010100010ULL, 0x0000000000000    
606         0x7575007575750075ULL, 0x8a8a008a8a8a0    
607         0x0909000909090009ULL, 0xdddd00dddddd0    
608         0x8383008383830083ULL, 0xcdcd00cdcdcd0    
609         0x7373007373730073ULL, 0xf6f600f6f6f60    
610         0xbfbf00bfbfbf00bfULL, 0x5252005252520    
611         0xc8c800c8c8c800c8ULL, 0xc6c600c6c6c60    
612         0x6f6f006f6f6f006fULL, 0x1313001313130    
613         0xe9e900e9e9e900e9ULL, 0xa7a700a7a7a70    
614         0xbcbc00bcbcbc00bcULL, 0x2929002929290    
615         0x2f2f002f2f2f002fULL, 0xb4b400b4b4b40    
616         0x0606000606060006ULL, 0xe7e700e7e7e70    
617         0xd4d400d4d4d400d4ULL, 0xabab00ababab0    
618         0x8d8d008d8d8d008dULL, 0x7272007272720    
619         0xf8f800f8f8f800f8ULL, 0xacac00acacac0    
620         0x2a2a002a2a2a002aULL, 0x3c3c003c3c3c0    
621         0x4040004040400040ULL, 0xd3d300d3d3d30    
622         0x4343004343430043ULL, 0x1515001515150    
623         0x7777007777770077ULL, 0x8080008080800    
624         0xecec00ececec00ecULL, 0x2727002727270    
625         0x8585008585850085ULL, 0x3535003535350    
626         0x4141004141410041ULL, 0xefef00efefef0    
627         0x1919001919190019ULL, 0x2121002121210    
628         0x4e4e004e4e4e004eULL, 0x6565006565650    
629         0xb8b800b8b8b800b8ULL, 0x8f8f008f8f8f0    
630         0xcece00cecece00ceULL, 0x3030003030300    
631         0xc5c500c5c5c500c5ULL, 0x1a1a001a1a1a0    
632         0xcaca00cacaca00caULL, 0x4747004747470    
633         0x0101000101010001ULL, 0xd6d600d6d6d60    
634         0x4d4d004d4d4d004dULL, 0x0d0d000d0d0d0    
635         0xcccc00cccccc00ccULL, 0x2d2d002d2d2d0    
636         0x2020002020200020ULL, 0xb1b100b1b1b10    
637         0x4c4c004c4c4c004cULL, 0xc2c200c2c2c20    
638         0x0505000505050005ULL, 0xb7b700b7b7b70    
639         0x1717001717170017ULL, 0xd7d700d7d7d70    
640         0x6161006161610061ULL, 0x1b1b001b1b1b0    
641         0x0f0f000f0f0f000fULL, 0x1616001616160    
642         0x2222002222220022ULL, 0x4444004444440    
643         0xb5b500b5b5b500b5ULL, 0x9191009191910    
644         0xa8a800a8a8a800a8ULL, 0xfcfc00fcfcfc0    
645         0xd0d000d0d0d000d0ULL, 0x7d7d007d7d7d0    
646         0x9797009797970097ULL, 0x5b5b005b5b5b0    
647         0xffff00ffffff00ffULL, 0xd2d200d2d2d20    
648         0x4848004848480048ULL, 0xf7f700f7f7f70    
649         0x0303000303030003ULL, 0xdada00dadada0    
650         0x9494009494940094ULL, 0x5c5c005c5c5c0    
651         0x4a4a004a4a4a004aULL, 0x3333003333330    
652         0xf3f300f3f3f300f3ULL, 0x7f7f007f7f7f0    
653         0x9b9b009b9b9b009bULL, 0x2626002626260    
654         0x3b3b003b3b3b003bULL, 0x9696009696960    
655         0xbebe00bebebe00beULL, 0x2e2e002e2e2e0    
656         0x8c8c008c8c8c008cULL, 0x6e6e006e6e6e0    
657         0xf5f500f5f5f500f5ULL, 0xb6b600b6b6b60    
658         0x5959005959590059ULL, 0x9898009898980    
659         0x4646004646460046ULL, 0xbaba00bababa0    
660         0x4242004242420042ULL, 0xa2a200a2a2a20    
661         0x0707000707070007ULL, 0x5555005555550    
662         0x0a0a000a0a0a000aULL, 0x4949004949490    
663         0x3838003838380038ULL, 0xa4a400a4a4a40    
664         0x7b7b007b7b7b007bULL, 0xc9c900c9c9c90    
665         0xe3e300e3e3e300e3ULL, 0xf4f400f4f4f40    
666         0x9e9e009e9e9e009eULL,                    
667 };                                                
668                                                   
669 __visible const u64 camellia_sp11101110[256] =    
670         0x7070700070707000ULL, 0x8282820082828    
671         0xececec00ececec00ULL, 0xb3b3b300b3b3b    
672         0xc0c0c000c0c0c000ULL, 0xe5e5e500e5e5e    
673         0x8585850085858500ULL, 0x5757570057575    
674         0xeaeaea00eaeaea00ULL, 0x0c0c0c000c0c0    
675         0x4141410041414100ULL, 0x2323230023232    
676         0x6b6b6b006b6b6b00ULL, 0x9393930093939    
677         0x1919190019191900ULL, 0xa5a5a500a5a5a    
678         0xededed00ededed00ULL, 0x0e0e0e000e0e0    
679         0x4e4e4e004e4e4e00ULL, 0x1d1d1d001d1d1    
680         0x9292920092929200ULL, 0xbdbdbd00bdbdb    
681         0xb8b8b800b8b8b800ULL, 0xafafaf00afafa    
682         0x7c7c7c007c7c7c00ULL, 0xebebeb00ebebe    
683         0xcecece00cecece00ULL, 0x3e3e3e003e3e3    
684         0xdcdcdc00dcdcdc00ULL, 0x5f5f5f005f5f5    
685         0xc5c5c500c5c5c500ULL, 0x0b0b0b000b0b0    
686         0xa6a6a600a6a6a600ULL, 0xe1e1e100e1e1e    
687         0xcacaca00cacaca00ULL, 0xd5d5d500d5d5d    
688         0x5d5d5d005d5d5d00ULL, 0x3d3d3d003d3d3    
689         0x0101010001010100ULL, 0x5a5a5a005a5a5    
690         0x5151510051515100ULL, 0x5656560056565    
691         0x4d4d4d004d4d4d00ULL, 0x8b8b8b008b8b8    
692         0x9a9a9a009a9a9a00ULL, 0x6666660066666    
693         0xcccccc00cccccc00ULL, 0xb0b0b000b0b0b    
694         0x7474740074747400ULL, 0x1212120012121    
695         0x2020200020202000ULL, 0xf0f0f000f0f0f    
696         0x8484840084848400ULL, 0x9999990099999    
697         0x4c4c4c004c4c4c00ULL, 0xcbcbcb00cbcbc    
698         0x3434340034343400ULL, 0x7e7e7e007e7e7    
699         0x0505050005050500ULL, 0x6d6d6d006d6d6    
700         0xa9a9a900a9a9a900ULL, 0x3131310031313    
701         0x1717170017171700ULL, 0x0404040004040    
702         0x1414140014141400ULL, 0x5858580058585    
703         0x6161610061616100ULL, 0xdedede00deded    
704         0x1111110011111100ULL, 0x1c1c1c001c1c1    
705         0x0f0f0f000f0f0f00ULL, 0x9c9c9c009c9c9    
706         0x5353530053535300ULL, 0x1818180018181    
707         0x2222220022222200ULL, 0xfefefe00fefef    
708         0xcfcfcf00cfcfcf00ULL, 0xb2b2b200b2b2b    
709         0xb5b5b500b5b5b500ULL, 0x7a7a7a007a7a7    
710         0x2424240024242400ULL, 0x0808080008080    
711         0xa8a8a800a8a8a800ULL, 0x6060600060606    
712         0x6969690069696900ULL, 0x5050500050505    
713         0xd0d0d000d0d0d000ULL, 0xa0a0a000a0a0a    
714         0xa1a1a100a1a1a100ULL, 0x8989890089898    
715         0x9797970097979700ULL, 0x5454540054545    
716         0x1e1e1e001e1e1e00ULL, 0x9595950095959    
717         0xffffff00ffffff00ULL, 0x6464640064646    
718         0x1010100010101000ULL, 0xc4c4c400c4c4c    
719         0x4848480048484800ULL, 0xa3a3a300a3a3a    
720         0x7575750075757500ULL, 0xdbdbdb00dbdbd    
721         0x0303030003030300ULL, 0xe6e6e600e6e6e    
722         0x0909090009090900ULL, 0x3f3f3f003f3f3    
723         0x9494940094949400ULL, 0x8787870087878    
724         0x8383830083838300ULL, 0x0202020002020    
725         0x4a4a4a004a4a4a00ULL, 0x9090900090909    
726         0x7373730073737300ULL, 0x6767670067676    
727         0xf3f3f300f3f3f300ULL, 0x9d9d9d009d9d9    
728         0xbfbfbf00bfbfbf00ULL, 0xe2e2e200e2e2e    
729         0x9b9b9b009b9b9b00ULL, 0xd8d8d800d8d8d    
730         0xc8c8c800c8c8c800ULL, 0x3737370037373    
731         0x3b3b3b003b3b3b00ULL, 0x8181810081818    
732         0x6f6f6f006f6f6f00ULL, 0x4b4b4b004b4b4    
733         0xbebebe00bebebe00ULL, 0x6363630063636    
734         0xe9e9e900e9e9e900ULL, 0x7979790079797    
735         0x8c8c8c008c8c8c00ULL, 0x9f9f9f009f9f9    
736         0xbcbcbc00bcbcbc00ULL, 0x8e8e8e008e8e8    
737         0xf5f5f500f5f5f500ULL, 0xf9f9f900f9f9f    
738         0x2f2f2f002f2f2f00ULL, 0xfdfdfd00fdfdf    
739         0x5959590059595900ULL, 0x7878780078787    
740         0x0606060006060600ULL, 0x6a6a6a006a6a6    
741         0x4646460046464600ULL, 0x7171710071717    
742         0xd4d4d400d4d4d400ULL, 0x2525250025252    
743         0x4242420042424200ULL, 0x8888880088888    
744         0x8d8d8d008d8d8d00ULL, 0xfafafa00fafaf    
745         0x0707070007070700ULL, 0xb9b9b900b9b9b    
746         0xf8f8f800f8f8f800ULL, 0xeeeeee00eeeee    
747         0x0a0a0a000a0a0a00ULL, 0x3636360036363    
748         0x2a2a2a002a2a2a00ULL, 0x6868680068686    
749         0x3838380038383800ULL, 0xf1f1f100f1f1f    
750         0x4040400040404000ULL, 0x2828280028282    
751         0x7b7b7b007b7b7b00ULL, 0xbbbbbb00bbbbb    
752         0x4343430043434300ULL, 0xc1c1c100c1c1c    
753         0xe3e3e300e3e3e300ULL, 0xadadad00adada    
754         0x7777770077777700ULL, 0xc7c7c700c7c7c    
755         0x9e9e9e009e9e9e00ULL,                    
756 };                                                
757                                                   
758 /* key constants */                               
759 #define CAMELLIA_SIGMA1L (0xA09E667FL)            
760 #define CAMELLIA_SIGMA1R (0x3BCC908BL)            
761 #define CAMELLIA_SIGMA2L (0xB67AE858L)            
762 #define CAMELLIA_SIGMA2R (0x4CAA73B2L)            
763 #define CAMELLIA_SIGMA3L (0xC6EF372FL)            
764 #define CAMELLIA_SIGMA3R (0xE94F82BEL)            
765 #define CAMELLIA_SIGMA4L (0x54FF53A5L)            
766 #define CAMELLIA_SIGMA4R (0xF1D36F1CL)            
767 #define CAMELLIA_SIGMA5L (0x10E527FAL)            
768 #define CAMELLIA_SIGMA5R (0xDE682D1DL)            
769 #define CAMELLIA_SIGMA6L (0xB05688C2L)            
770 #define CAMELLIA_SIGMA6R (0xB3E6C1FDL)            
771                                                   
772 /* macros */                                      
773 #define ROLDQ(l, r, bits) ({ \                    
774         u64 t = l;                                
775         l = (l << bits) | (r >> (64 - bits));     
776         r = (r << bits) | (t >> (64 - bits));     
777 })                                                
778                                                   
779 #define CAMELLIA_F(x, kl, kr, y) ({ \             
780         u64 ii = x ^ (((u64)kl << 32) | kr);      
781         y = camellia_sp11101110[(uint8_t)ii];     
782         y ^= camellia_sp44044404[(uint8_t)(ii     
783         ii >>= 16;                                
784         y ^= camellia_sp30333033[(uint8_t)ii];    
785         y ^= camellia_sp02220222[(uint8_t)(ii     
786         ii >>= 16;                                
787         y ^= camellia_sp00444404[(uint8_t)ii];    
788         y ^= camellia_sp03303033[(uint8_t)(ii     
789         ii >>= 16;                                
790         y ^= camellia_sp22000222[(uint8_t)ii];    
791         y ^= camellia_sp10011110[(uint8_t)(ii     
792         y = ror64(y, 32);                         
793 })                                                
794                                                   
795 #define SET_SUBKEY_LR(INDEX, sRL) (subkey[(IND    
796                                                   
797 static void camellia_setup_tail(u64 *subkey, u    
798 {                                                 
799         u64 kw4, tt;                              
800         u32 dw, tl, tr;                           
801                                                   
802         /* absorb kw2 to other subkeys */         
803         /* round 2 */                             
804         subRL[3] ^= subRL[1];                     
805         /* round 4 */                             
806         subRL[5] ^= subRL[1];                     
807         /* round 6 */                             
808         subRL[7] ^= subRL[1];                     
809                                                   
810         subRL[1] ^= (subRL[1] & ~subRL[9]) <<     
811         /* modified for FLinv(kl2) */             
812         dw = (subRL[1] & subRL[9]) >> 32;         
813         subRL[1] ^= rol32(dw, 1);                 
814                                                   
815         /* round 8 */                             
816         subRL[11] ^= subRL[1];                    
817         /* round 10 */                            
818         subRL[13] ^= subRL[1];                    
819         /* round 12 */                            
820         subRL[15] ^= subRL[1];                    
821                                                   
822         subRL[1] ^= (subRL[1] & ~subRL[17]) <<    
823         /* modified for FLinv(kl4) */             
824         dw = (subRL[1] & subRL[17]) >> 32;        
825         subRL[1] ^= rol32(dw, 1);                 
826                                                   
827         /* round 14 */                            
828         subRL[19] ^= subRL[1];                    
829         /* round 16 */                            
830         subRL[21] ^= subRL[1];                    
831         /* round 18 */                            
832         subRL[23] ^= subRL[1];                    
833                                                   
834         if (max == 24) {                          
835                 /* kw3 */                         
836                 subRL[24] ^= subRL[1];            
837                                                   
838                 /* absorb kw4 to other subkeys    
839                 kw4 = subRL[25];                  
840         } else {                                  
841                 subRL[1] ^= (subRL[1] & ~subRL    
842                 /* modified for FLinv(kl6) */     
843                 dw = (subRL[1] & subRL[25]) >>    
844                 subRL[1] ^= rol32(dw, 1);         
845                                                   
846                 /* round 20 */                    
847                 subRL[27] ^= subRL[1];            
848                 /* round 22 */                    
849                 subRL[29] ^= subRL[1];            
850                 /* round 24 */                    
851                 subRL[31] ^= subRL[1];            
852                 /* kw3 */                         
853                 subRL[32] ^= subRL[1];            
854                                                   
855                 /* absorb kw4 to other subkeys    
856                 kw4 = subRL[33];                  
857                 /* round 23 */                    
858                 subRL[30] ^= kw4;                 
859                 /* round 21 */                    
860                 subRL[28] ^= kw4;                 
861                 /* round 19 */                    
862                 subRL[26] ^= kw4;                 
863                                                   
864                 kw4 ^= (kw4 & ~subRL[24]) << 3    
865                 /* modified for FL(kl5) */        
866                 dw = (kw4 & subRL[24]) >> 32;     
867                 kw4 ^= rol32(dw, 1);              
868         }                                         
869                                                   
870         /* round 17 */                            
871         subRL[22] ^= kw4;                         
872         /* round 15 */                            
873         subRL[20] ^= kw4;                         
874         /* round 13 */                            
875         subRL[18] ^= kw4;                         
876                                                   
877         kw4 ^= (kw4 & ~subRL[16]) << 32;          
878         /* modified for FL(kl3) */                
879         dw = (kw4 & subRL[16]) >> 32;             
880         kw4 ^= rol32(dw, 1);                      
881                                                   
882         /* round 11 */                            
883         subRL[14] ^= kw4;                         
884         /* round 9 */                             
885         subRL[12] ^= kw4;                         
886         /* round 7 */                             
887         subRL[10] ^= kw4;                         
888                                                   
889         kw4 ^= (kw4 & ~subRL[8]) << 32;           
890         /* modified for FL(kl1) */                
891         dw = (kw4 & subRL[8]) >> 32;              
892         kw4 ^= rol32(dw, 1);                      
893                                                   
894         /* round 5 */                             
895         subRL[6] ^= kw4;                          
896         /* round 3 */                             
897         subRL[4] ^= kw4;                          
898         /* round 1 */                             
899         subRL[2] ^= kw4;                          
900         /* kw1 */                                 
901         subRL[0] ^= kw4;                          
902                                                   
903         /* key XOR is end of F-function */        
904         SET_SUBKEY_LR(0, subRL[0] ^ subRL[2]);    
905         SET_SUBKEY_LR(2, subRL[3]);               
906         SET_SUBKEY_LR(3, subRL[2] ^ subRL[4]);    
907         SET_SUBKEY_LR(4, subRL[3] ^ subRL[5]);    
908         SET_SUBKEY_LR(5, subRL[4] ^ subRL[6]);    
909         SET_SUBKEY_LR(6, subRL[5] ^ subRL[7]);    
910                                                   
911         tl = (subRL[10] >> 32) ^ (subRL[10] &     
912         dw = tl & (subRL[8] >> 32);               
913         tr = subRL[10] ^ rol32(dw, 1);            
914         tt = (tr | ((u64)tl << 32));              
915                                                   
916         SET_SUBKEY_LR(7, subRL[6] ^ tt);          
917         SET_SUBKEY_LR(8, subRL[8]);               
918         SET_SUBKEY_LR(9, subRL[9]);               
919                                                   
920         tl = (subRL[7] >> 32) ^ (subRL[7] & ~s    
921         dw = tl & (subRL[9] >> 32);               
922         tr = subRL[7] ^ rol32(dw, 1);             
923         tt = (tr | ((u64)tl << 32));              
924                                                   
925         SET_SUBKEY_LR(10, subRL[11] ^ tt);        
926         SET_SUBKEY_LR(11, subRL[10] ^ subRL[12    
927         SET_SUBKEY_LR(12, subRL[11] ^ subRL[13    
928         SET_SUBKEY_LR(13, subRL[12] ^ subRL[14    
929         SET_SUBKEY_LR(14, subRL[13] ^ subRL[15    
930                                                   
931         tl = (subRL[18] >> 32) ^ (subRL[18] &     
932         dw = tl & (subRL[16] >> 32);              
933         tr = subRL[18] ^ rol32(dw, 1);            
934         tt = (tr | ((u64)tl << 32));              
935                                                   
936         SET_SUBKEY_LR(15, subRL[14] ^ tt);        
937         SET_SUBKEY_LR(16, subRL[16]);             
938         SET_SUBKEY_LR(17, subRL[17]);             
939                                                   
940         tl = (subRL[15] >> 32) ^ (subRL[15] &     
941         dw = tl & (subRL[17] >> 32);              
942         tr = subRL[15] ^ rol32(dw, 1);            
943         tt = (tr | ((u64)tl << 32));              
944                                                   
945         SET_SUBKEY_LR(18, subRL[19] ^ tt);        
946         SET_SUBKEY_LR(19, subRL[18] ^ subRL[20    
947         SET_SUBKEY_LR(20, subRL[19] ^ subRL[21    
948         SET_SUBKEY_LR(21, subRL[20] ^ subRL[22    
949         SET_SUBKEY_LR(22, subRL[21] ^ subRL[23    
950                                                   
951         if (max == 24) {                          
952                 SET_SUBKEY_LR(23, subRL[22]);     
953                 SET_SUBKEY_LR(24, subRL[24] ^     
954         } else {                                  
955                 tl = (subRL[26] >> 32) ^ (subR    
956                 dw = tl & (subRL[24] >> 32);      
957                 tr = subRL[26] ^ rol32(dw, 1);    
958                 tt = (tr | ((u64)tl << 32));      
959                                                   
960                 SET_SUBKEY_LR(23, subRL[22] ^     
961                 SET_SUBKEY_LR(24, subRL[24]);     
962                 SET_SUBKEY_LR(25, subRL[25]);     
963                                                   
964                 tl = (subRL[23] >> 32) ^ (subR    
965                 dw = tl & (subRL[25] >> 32);      
966                 tr = subRL[23] ^ rol32(dw, 1);    
967                 tt = (tr | ((u64)tl << 32));      
968                                                   
969                 SET_SUBKEY_LR(26, subRL[27] ^     
970                 SET_SUBKEY_LR(27, subRL[26] ^     
971                 SET_SUBKEY_LR(28, subRL[27] ^     
972                 SET_SUBKEY_LR(29, subRL[28] ^     
973                 SET_SUBKEY_LR(30, subRL[29] ^     
974                 SET_SUBKEY_LR(31, subRL[30]);     
975                 SET_SUBKEY_LR(32, subRL[32] ^     
976         }                                         
977 }                                                 
978                                                   
979 static void camellia_setup128(const unsigned c    
980 {                                                 
981         u64 kl, kr, ww;                           
982         u64 subRL[26];                            
983                                                   
984         /**                                       
985          *  k == kl || kr (|| is concatenation    
986          */                                       
987         kl = get_unaligned_be64(key);             
988         kr = get_unaligned_be64(key + 8);         
989                                                   
990         /* generate KL dependent subkeys */       
991         /* kw1 */                                 
992         subRL[0] = kl;                            
993         /* kw2 */                                 
994         subRL[1] = kr;                            
995                                                   
996         /* rotation left shift 15bit */           
997         ROLDQ(kl, kr, 15);                        
998                                                   
999         /* k3 */                                  
1000         subRL[4] = kl;                           
1001         /* k4 */                                 
1002         subRL[5] = kr;                           
1003                                                  
1004         /* rotation left shift 15+30bit */       
1005         ROLDQ(kl, kr, 30);                       
1006                                                  
1007         /* k7 */                                 
1008         subRL[10] = kl;                          
1009         /* k8 */                                 
1010         subRL[11] = kr;                          
1011                                                  
1012         /* rotation left shift 15+30+15bit */    
1013         ROLDQ(kl, kr, 15);                       
1014                                                  
1015         /* k10 */                                
1016         subRL[13] = kr;                          
1017         /* rotation left shift 15+30+15+17 bi    
1018         ROLDQ(kl, kr, 17);                       
1019                                                  
1020         /* kl3 */                                
1021         subRL[16] = kl;                          
1022         /* kl4 */                                
1023         subRL[17] = kr;                          
1024                                                  
1025         /* rotation left shift 15+30+15+17+17    
1026         ROLDQ(kl, kr, 17);                       
1027                                                  
1028         /* k13 */                                
1029         subRL[18] = kl;                          
1030         /* k14 */                                
1031         subRL[19] = kr;                          
1032                                                  
1033         /* rotation left shift 15+30+15+17+17    
1034         ROLDQ(kl, kr, 17);                       
1035                                                  
1036         /* k17 */                                
1037         subRL[22] = kl;                          
1038         /* k18 */                                
1039         subRL[23] = kr;                          
1040                                                  
1041         /* generate KA */                        
1042         kl = subRL[0];                           
1043         kr = subRL[1];                           
1044         CAMELLIA_F(kl, CAMELLIA_SIGMA1L, CAME    
1045         kr ^= ww;                                
1046         CAMELLIA_F(kr, CAMELLIA_SIGMA2L, CAME    
1047                                                  
1048         /* current status == (kll, klr, w0, w    
1049         CAMELLIA_F(kl, CAMELLIA_SIGMA3L, CAME    
1050         kr ^= ww;                                
1051         CAMELLIA_F(kr, CAMELLIA_SIGMA4L, CAME    
1052         kl ^= ww;                                
1053                                                  
1054         /* generate KA dependent subkeys */      
1055         /* k1, k2 */                             
1056         subRL[2] = kl;                           
1057         subRL[3] = kr;                           
1058         ROLDQ(kl, kr, 15);                       
1059         /* k5,k6 */                              
1060         subRL[6] = kl;                           
1061         subRL[7] = kr;                           
1062         ROLDQ(kl, kr, 15);                       
1063         /* kl1, kl2 */                           
1064         subRL[8] = kl;                           
1065         subRL[9] = kr;                           
1066         ROLDQ(kl, kr, 15);                       
1067         /* k9 */                                 
1068         subRL[12] = kl;                          
1069         ROLDQ(kl, kr, 15);                       
1070         /* k11, k12 */                           
1071         subRL[14] = kl;                          
1072         subRL[15] = kr;                          
1073         ROLDQ(kl, kr, 34);                       
1074         /* k15, k16 */                           
1075         subRL[20] = kl;                          
1076         subRL[21] = kr;                          
1077         ROLDQ(kl, kr, 17);                       
1078         /* kw3, kw4 */                           
1079         subRL[24] = kl;                          
1080         subRL[25] = kr;                          
1081                                                  
1082         camellia_setup_tail(subkey, subRL, 24    
1083 }                                                
1084                                                  
1085 static void camellia_setup256(const unsigned     
1086 {                                                
1087         u64 kl, kr;                     /* le    
1088         u64 krl, krr;                   /* ri    
1089         u64 ww;                         /* te    
1090         u64 subRL[34];                           
1091                                                  
1092         /**                                      
1093          *  key = (kl || kr || krl || krr) (|    
1094          */                                      
1095         kl = get_unaligned_be64(key);            
1096         kr = get_unaligned_be64(key + 8);        
1097         krl = get_unaligned_be64(key + 16);      
1098         krr = get_unaligned_be64(key + 24);      
1099                                                  
1100         /* generate KL dependent subkeys */      
1101         /* kw1 */                                
1102         subRL[0] = kl;                           
1103         /* kw2 */                                
1104         subRL[1] = kr;                           
1105         ROLDQ(kl, kr, 45);                       
1106         /* k9 */                                 
1107         subRL[12] = kl;                          
1108         /* k10 */                                
1109         subRL[13] = kr;                          
1110         ROLDQ(kl, kr, 15);                       
1111         /* kl3 */                                
1112         subRL[16] = kl;                          
1113         /* kl4 */                                
1114         subRL[17] = kr;                          
1115         ROLDQ(kl, kr, 17);                       
1116         /* k17 */                                
1117         subRL[22] = kl;                          
1118         /* k18 */                                
1119         subRL[23] = kr;                          
1120         ROLDQ(kl, kr, 34);                       
1121         /* k23 */                                
1122         subRL[30] = kl;                          
1123         /* k24 */                                
1124         subRL[31] = kr;                          
1125                                                  
1126         /* generate KR dependent subkeys */      
1127         ROLDQ(krl, krr, 15);                     
1128         /* k3 */                                 
1129         subRL[4] = krl;                          
1130         /* k4 */                                 
1131         subRL[5] = krr;                          
1132         ROLDQ(krl, krr, 15);                     
1133         /* kl1 */                                
1134         subRL[8] = krl;                          
1135         /* kl2 */                                
1136         subRL[9] = krr;                          
1137         ROLDQ(krl, krr, 30);                     
1138         /* k13 */                                
1139         subRL[18] = krl;                         
1140         /* k14 */                                
1141         subRL[19] = krr;                         
1142         ROLDQ(krl, krr, 34);                     
1143         /* k19 */                                
1144         subRL[26] = krl;                         
1145         /* k20 */                                
1146         subRL[27] = krr;                         
1147         ROLDQ(krl, krr, 34);                     
1148                                                  
1149         /* generate KA */                        
1150         kl = subRL[0] ^ krl;                     
1151         kr = subRL[1] ^ krr;                     
1152                                                  
1153         CAMELLIA_F(kl, CAMELLIA_SIGMA1L, CAME    
1154         kr ^= ww;                                
1155         CAMELLIA_F(kr, CAMELLIA_SIGMA2L, CAME    
1156         kl ^= krl;                               
1157         CAMELLIA_F(kl, CAMELLIA_SIGMA3L, CAME    
1158         kr ^= ww ^ krr;                          
1159         CAMELLIA_F(kr, CAMELLIA_SIGMA4L, CAME    
1160         kl ^= ww;                                
1161                                                  
1162         /* generate KB */                        
1163         krl ^= kl;                               
1164         krr ^= kr;                               
1165         CAMELLIA_F(krl, CAMELLIA_SIGMA5L, CAM    
1166         krr ^= ww;                               
1167         CAMELLIA_F(krr, CAMELLIA_SIGMA6L, CAM    
1168         krl ^= ww;                               
1169                                                  
1170         /* generate KA dependent subkeys */      
1171         ROLDQ(kl, kr, 15);                       
1172         /* k5 */                                 
1173         subRL[6] = kl;                           
1174         /* k6 */                                 
1175         subRL[7] = kr;                           
1176         ROLDQ(kl, kr, 30);                       
1177         /* k11 */                                
1178         subRL[14] = kl;                          
1179         /* k12 */                                
1180         subRL[15] = kr;                          
1181         /* rotation left shift 32bit */          
1182         ROLDQ(kl, kr, 32);                       
1183         /* kl5 */                                
1184         subRL[24] = kl;                          
1185         /* kl6 */                                
1186         subRL[25] = kr;                          
1187         /* rotation left shift 17 from k11,k1    
1188         ROLDQ(kl, kr, 17);                       
1189         /* k21 */                                
1190         subRL[28] = kl;                          
1191         /* k22 */                                
1192         subRL[29] = kr;                          
1193                                                  
1194         /* generate KB dependent subkeys */      
1195         /* k1 */                                 
1196         subRL[2] = krl;                          
1197         /* k2 */                                 
1198         subRL[3] = krr;                          
1199         ROLDQ(krl, krr, 30);                     
1200         /* k7 */                                 
1201         subRL[10] = krl;                         
1202         /* k8 */                                 
1203         subRL[11] = krr;                         
1204         ROLDQ(krl, krr, 30);                     
1205         /* k15 */                                
1206         subRL[20] = krl;                         
1207         /* k16 */                                
1208         subRL[21] = krr;                         
1209         ROLDQ(krl, krr, 51);                     
1210         /* kw3 */                                
1211         subRL[32] = krl;                         
1212         /* kw4 */                                
1213         subRL[33] = krr;                         
1214                                                  
1215         camellia_setup_tail(subkey, subRL, 32    
1216 }                                                
1217                                                  
1218 static void camellia_setup192(const unsigned     
1219 {                                                
1220         unsigned char kk[32];                    
1221         u64 krl, krr;                            
1222                                                  
1223         memcpy(kk, key, 24);                     
1224         memcpy((unsigned char *)&krl, key+16,    
1225         krr = ~krl;                              
1226         memcpy(kk+24, (unsigned char *)&krr,     
1227         camellia_setup256(kk, subkey);           
1228 }                                                
1229                                                  
1230 int __camellia_setkey(struct camellia_ctx *cc    
1231                       unsigned int key_len)      
1232 {                                                
1233         if (key_len != 16 && key_len != 24 &&    
1234                 return -EINVAL;                  
1235                                                  
1236         cctx->key_length = key_len;              
1237                                                  
1238         switch (key_len) {                       
1239         case 16:                                 
1240                 camellia_setup128(key, cctx->    
1241                 break;                           
1242         case 24:                                 
1243                 camellia_setup192(key, cctx->    
1244                 break;                           
1245         case 32:                                 
1246                 camellia_setup256(key, cctx->    
1247                 break;                           
1248         }                                        
1249                                                  
1250         return 0;                                
1251 }                                                
1252 EXPORT_SYMBOL_GPL(__camellia_setkey);            
1253                                                  
1254 static int camellia_setkey(struct crypto_tfm     
1255                            unsigned int key_l    
1256 {                                                
1257         return __camellia_setkey(crypto_tfm_c    
1258 }                                                
1259                                                  
1260 static int camellia_setkey_skcipher(struct cr    
1261                                     unsigned     
1262 {                                                
1263         return camellia_setkey(&tfm->base, ke    
1264 }                                                
1265                                                  
1266 void camellia_decrypt_cbc_2way(const void *ct    
1267 {                                                
1268         u8 buf[CAMELLIA_BLOCK_SIZE];             
1269         const u8 *iv = src;                      
1270                                                  
1271         if (dst == src)                          
1272                 iv = memcpy(buf, iv, sizeof(b    
1273         camellia_dec_blk_2way(ctx, dst, src);    
1274         crypto_xor(dst + CAMELLIA_BLOCK_SIZE,    
1275 }                                                
1276 EXPORT_SYMBOL_GPL(camellia_decrypt_cbc_2way);    
1277                                                  
1278 static int ecb_encrypt(struct skcipher_reques    
1279 {                                                
1280         ECB_WALK_START(req, CAMELLIA_BLOCK_SI    
1281         ECB_BLOCK(2, camellia_enc_blk_2way);     
1282         ECB_BLOCK(1, camellia_enc_blk);          
1283         ECB_WALK_END();                          
1284 }                                                
1285                                                  
1286 static int ecb_decrypt(struct skcipher_reques    
1287 {                                                
1288         ECB_WALK_START(req, CAMELLIA_BLOCK_SI    
1289         ECB_BLOCK(2, camellia_dec_blk_2way);     
1290         ECB_BLOCK(1, camellia_dec_blk);          
1291         ECB_WALK_END();                          
1292 }                                                
1293                                                  
1294 static int cbc_encrypt(struct skcipher_reques    
1295 {                                                
1296         CBC_WALK_START(req, CAMELLIA_BLOCK_SI    
1297         CBC_ENC_BLOCK(camellia_enc_blk);         
1298         CBC_WALK_END();                          
1299 }                                                
1300                                                  
1301 static int cbc_decrypt(struct skcipher_reques    
1302 {                                                
1303         CBC_WALK_START(req, CAMELLIA_BLOCK_SI    
1304         CBC_DEC_BLOCK(2, camellia_decrypt_cbc    
1305         CBC_DEC_BLOCK(1, camellia_dec_blk);      
1306         CBC_WALK_END();                          
1307 }                                                
1308                                                  
1309 static struct crypto_alg camellia_cipher_alg     
1310         .cra_name               = "camellia",    
1311         .cra_driver_name        = "camellia-a    
1312         .cra_priority           = 200,           
1313         .cra_flags              = CRYPTO_ALG_    
1314         .cra_blocksize          = CAMELLIA_BL    
1315         .cra_ctxsize            = sizeof(stru    
1316         .cra_alignmask          = 0,             
1317         .cra_module             = THIS_MODULE    
1318         .cra_u                  = {              
1319                 .cipher = {                      
1320                         .cia_min_keysize = CA    
1321                         .cia_max_keysize = CA    
1322                         .cia_setkey      = ca    
1323                         .cia_encrypt     = ca    
1324                         .cia_decrypt     = ca    
1325                 }                                
1326         }                                        
1327 };                                               
1328                                                  
1329 static struct skcipher_alg camellia_skcipher_    
1330         {                                        
1331                 .base.cra_name          = "ec    
1332                 .base.cra_driver_name   = "ec    
1333                 .base.cra_priority      = 300    
1334                 .base.cra_blocksize     = CAM    
1335                 .base.cra_ctxsize       = siz    
1336                 .base.cra_module        = THI    
1337                 .min_keysize            = CAM    
1338                 .max_keysize            = CAM    
1339                 .setkey                 = cam    
1340                 .encrypt                = ecb    
1341                 .decrypt                = ecb    
1342         }, {                                     
1343                 .base.cra_name          = "cb    
1344                 .base.cra_driver_name   = "cb    
1345                 .base.cra_priority      = 300    
1346                 .base.cra_blocksize     = CAM    
1347                 .base.cra_ctxsize       = siz    
1348                 .base.cra_module        = THI    
1349                 .min_keysize            = CAM    
1350                 .max_keysize            = CAM    
1351                 .ivsize                 = CAM    
1352                 .setkey                 = cam    
1353                 .encrypt                = cbc    
1354                 .decrypt                = cbc    
1355         }                                        
1356 };                                               
1357                                                  
1358 static bool is_blacklisted_cpu(void)             
1359 {                                                
1360         if (boot_cpu_data.x86_vendor != X86_V    
1361                 return false;                    
1362                                                  
1363         if (boot_cpu_data.x86 == 0x0f) {         
1364                 /*                               
1365                  * On Pentium 4, camellia-asm    
1366                  * implementation because exc    
1367                  * left-shifts (which are rea    
1368                  * handle 128bit block in two    
1369                  */                              
1370                 return true;                     
1371         }                                        
1372                                                  
1373         return false;                            
1374 }                                                
1375                                                  
1376 static int force;                                
1377 module_param(force, int, 0);                     
1378 MODULE_PARM_DESC(force, "Force module load, i    
1379                                                  
1380 static int __init camellia_init(void)            
1381 {                                                
1382         int err;                                 
1383                                                  
1384         if (!force && is_blacklisted_cpu()) {    
1385                 printk(KERN_INFO                 
1386                         "camellia-x86_64: per    
1387                         "would be suboptimal:    
1388                         "camellia-x86_64.\n")    
1389                 return -ENODEV;                  
1390         }                                        
1391                                                  
1392         err = crypto_register_alg(&camellia_c    
1393         if (err)                                 
1394                 return err;                      
1395                                                  
1396         err = crypto_register_skciphers(camel    
1397                                         ARRAY    
1398         if (err)                                 
1399                 crypto_unregister_alg(&camell    
1400                                                  
1401         return err;                              
1402 }                                                
1403                                                  
1404 static void __exit camellia_fini(void)           
1405 {                                                
1406         crypto_unregister_alg(&camellia_ciphe    
1407         crypto_unregister_skciphers(camellia_    
1408                                     ARRAY_SIZ    
1409 }                                                
1410                                                  
1411 module_init(camellia_init);                      
1412 module_exit(camellia_fini);                      
1413                                                  
1414 MODULE_LICENSE("GPL");                           
1415 MODULE_DESCRIPTION("Camellia Cipher Algorithm    
1416 MODULE_ALIAS_CRYPTO("camellia");                 
1417 MODULE_ALIAS_CRYPTO("camellia-asm");             
1418                                                  

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php