Crypto++  5.6.3
Free C++ class library of cryptographic schemes
camellia.cpp
1 // camellia.cpp - by Kevin Springle, 2003
2 // This code is hereby placed in the public domain.
3 
4 /*
5 Optimisations and defense against timing attacks added in Jan 2007 by Wei Dai.
6 
7 The first 2 rounds and the last round seem especially vulnerable to timing
8 attacks. The protection is similar to what was implemented for Rijndael.
9 See comments at top of rijndael.cpp for more details.
10 */
11 
12 #include "pch.h"
13 #include "config.h"
14 
15 #if CRYPTOPP_MSC_VERSION
16 # pragma warning(disable: 4456 6246)
17 #endif
18 
19 #include "camellia.h"
20 #include "misc.h"
21 #include "cpu.h"
22 
23 NAMESPACE_BEGIN(CryptoPP)
24 
25 // round implementation that uses a small table for protection against timing attacks
26 #define SLOW_ROUND(lh, ll, rh, rl, kh, kl) { \
27  word32 zr = ll ^ kl; \
28  word32 zl = lh ^ kh; \
29  zr= rotlFixed(s1[GETBYTE(zr, 3)], 1) | \
30  (rotrFixed(s1[GETBYTE(zr, 2)], 1) << 24) | \
31  (s1[rotlFixed(CRYPTOPP_GET_BYTE_AS_BYTE(zr, 1),1)] << 16) | \
32  (s1[GETBYTE(zr, 0)] << 8); \
33  zl= (s1[GETBYTE(zl, 3)] << 24) | \
34  (rotlFixed(s1[GETBYTE(zl, 2)], 1) << 16) | \
35  (rotrFixed(s1[GETBYTE(zl, 1)], 1) << 8) | \
36  s1[rotlFixed(CRYPTOPP_GET_BYTE_AS_BYTE(zl, 0), 1)]; \
37  zl ^= zr; \
38  zr = zl ^ rotlFixed(zr, 8); \
39  zl = zr ^ rotrFixed(zl, 8); \
40  rh ^= rotlFixed(zr, 16); \
41  rh ^= zl; \
42  rl ^= rotlFixed(zl, 8); \
43  }
44 
45 // normal round - same output as above but using larger tables for faster speed
46 #define ROUND(lh, ll, rh, rl, kh, kl) { \
47  word32 th = lh ^ kh; \
48  word32 tl = ll ^ kl; \
49  word32 d = SP[0][GETBYTE(tl,0)] ^ SP[1][GETBYTE(tl,3)] ^ SP[2][GETBYTE(tl,2)] ^ SP[3][GETBYTE(tl,1)]; \
50  word32 u = SP[0][GETBYTE(th,3)] ^ SP[1][GETBYTE(th,2)] ^ SP[2][GETBYTE(th,1)] ^ SP[3][GETBYTE(th,0)]; \
51  d ^= u; \
52  rh ^= d; \
53  rl ^= d; \
54  rl ^= rotrFixed(u, 8);}
55 
56 #define DOUBLE_ROUND(lh, ll, rh, rl, k0, k1, k2, k3) \
57  ROUND(lh, ll, rh, rl, k0, k1) \
58  ROUND(rh, rl, lh, ll, k2, k3)
59 
60 #ifdef IS_LITTLE_ENDIAN
61 #define EFI(i) (1-(i))
62 #else
63 #define EFI(i) (i)
64 #endif
65 
66 void Camellia::Base::UncheckedSetKey(const byte *key, unsigned int keylen, const NameValuePairs &)
67 {
68  m_rounds = (keylen >= 24) ? 4 : 3;
69  unsigned int kslen = (8 * m_rounds + 2);
70  m_key.New(kslen*2);
71  word32 *ks32 = m_key.data();
72  int m=0, a=0;
73  if (!IsForwardTransformation())
74  m = -1, a = kslen-1;
75 
76  word32 kl0, kl1, kl2, kl3;
77  GetBlock<word32, BigEndian> getBlock(key);
78  getBlock(kl0)(kl1)(kl2)(kl3);
79  word32 k0=kl0, k1=kl1, k2=kl2, k3=kl3;
80 
81 #define CALC_ADDR2(base, i, j) ((byte *)(base)+8*(i)+4*(j)+((-16*(i))&m))
82 #define CALC_ADDR(base, i) CALC_ADDR2(base, i, 0)
83 
84 #if 1
85  word64 kwl, kwr;
86  ks32 += 2*a;
87 #define PREPARE_KS_ROUNDS \
88  kwl = (word64(k0) << 32) | k1; \
89  kwr = (word64(k2) << 32) | k3
90 #define KS_ROUND_0(i) \
91  *(word64*)CALC_ADDR(ks32, i+EFI(0)) = kwl; \
92  *(word64*)CALC_ADDR(ks32, i+EFI(1)) = kwr
93 #define KS_ROUND(i, r, which) \
94  if (which & (1<<int(r<64))) *(word64*)CALC_ADDR(ks32, i+EFI(r<64)) = (kwr << (r%64)) | (kwl >> (64 - (r%64))); \
95  if (which & (1<<int(r>64))) *(word64*)CALC_ADDR(ks32, i+EFI(r>64)) = (kwl << (r%64)) | (kwr >> (64 - (r%64)))
96 #else
97  // SSE2 version is 30% faster on Intel Core 2. Doesn't seem worth the hassle of maintenance, but left here
98  // #if'd out in case someone needs it.
99  __m128i kw, kw2;
100  __m128i *ks128 = (__m128i *)ks32+a/2;
101  ks32 += 2*a;
102 #define PREPARE_KS_ROUNDS \
103  kw = _mm_set_epi32(k0, k1, k2, k3); \
104  if (m) kw2 = kw, kw = _mm_shuffle_epi32(kw, _MM_SHUFFLE(1, 0, 3, 2)); \
105  else kw2 = _mm_shuffle_epi32(kw, _MM_SHUFFLE(1, 0, 3, 2))
106 #define KS_ROUND_0(i) \
107  _mm_store_si128((__m128i *)CALC_ADDR(ks128, i), kw)
108 #define KS_ROUND(i, r, which) { \
109  __m128i temp; \
110  if (r<64 && (which!=1 || m)) temp = _mm_or_si128(_mm_slli_epi64(kw, r%64), _mm_srli_epi64(kw2, 64-r%64)); \
111  else temp = _mm_or_si128(_mm_slli_epi64(kw2, r%64), _mm_srli_epi64(kw, 64-r%64)); \
112  if (which & 2) _mm_store_si128((__m128i *)CALC_ADDR(ks128, i), temp); \
113  else _mm_storel_epi64((__m128i*)CALC_ADDR(ks32, i+EFI(0)), temp); \
114  }
115 #endif
116 
117  if (keylen == 16)
118  {
119  // KL
120  PREPARE_KS_ROUNDS;
121  KS_ROUND_0(0);
122  KS_ROUND(4, 15, 3);
123  KS_ROUND(10, 45, 3);
124  KS_ROUND(12, 60, 2);
125  KS_ROUND(16, 77, 3);
126  KS_ROUND(18, 94, 3);
127  KS_ROUND(22, 111, 3);
128 
129  // KA
130  k0=kl0, k1=kl1, k2=kl2, k3=kl3;
131  DOUBLE_ROUND(k0, k1, k2, k3, 0xA09E667Ful, 0x3BCC908Bul, 0xB67AE858ul, 0x4CAA73B2ul);
132  k0^=kl0, k1^=kl1, k2^=kl2, k3^=kl3;
133  DOUBLE_ROUND(k0, k1, k2, k3, 0xC6EF372Ful, 0xE94F82BEul, 0x54FF53A5ul, 0xF1D36F1Cul);
134 
135  PREPARE_KS_ROUNDS;
136  KS_ROUND_0(2);
137  KS_ROUND(6, 15, 3);
138  KS_ROUND(8, 30, 3);
139  KS_ROUND(12, 45, 1);
140  KS_ROUND(14, 60, 3);
141  KS_ROUND(20, 94, 3);
142  KS_ROUND(24, 47, 3);
143  }
144  else
145  {
146  // KL
147  PREPARE_KS_ROUNDS;
148  KS_ROUND_0(0);
149  KS_ROUND(12, 45, 3);
150  KS_ROUND(16, 60, 3);
151  KS_ROUND(22, 77, 3);
152  KS_ROUND(30, 111, 3);
153 
154  // KR
155  word32 kr0, kr1, kr2, kr3;
156  GetBlock<word32, BigEndian>(key+16)(kr0)(kr1);
157  if (keylen == 24)
158  kr2 = ~kr0, kr3 = ~kr1;
159  else
160  GetBlock<word32, BigEndian>(key+24)(kr2)(kr3);
161  k0=kr0, k1=kr1, k2=kr2, k3=kr3;
162 
163  PREPARE_KS_ROUNDS;
164  KS_ROUND(4, 15, 3);
165  KS_ROUND(8, 30, 3);
166  KS_ROUND(18, 60, 3);
167  KS_ROUND(26, 94, 3);
168 
169  // KA
170  k0^=kl0, k1^=kl1, k2^=kl2, k3^=kl3;
171  DOUBLE_ROUND(k0, k1, k2, k3, 0xA09E667Ful, 0x3BCC908Bul, 0xB67AE858ul, 0x4CAA73B2ul);
172  k0^=kl0, k1^=kl1, k2^=kl2, k3^=kl3;
173  DOUBLE_ROUND(k0, k1, k2, k3, 0xC6EF372Ful, 0xE94F82BEul, 0x54FF53A5ul, 0xF1D36F1Cul);
174 
175  PREPARE_KS_ROUNDS;
176  KS_ROUND(6, 15, 3);
177  KS_ROUND(14, 45, 3);
178  KS_ROUND(24, 77, 3);
179  KS_ROUND(28, 94, 3);
180 
181  // KB
182  k0^=kr0, k1^=kr1, k2^=kr2, k3^=kr3;
183  DOUBLE_ROUND(k0, k1, k2, k3, 0x10E527FAul, 0xDE682D1Dul, 0xB05688C2ul, 0xB3E6C1FDul);
184 
185  PREPARE_KS_ROUNDS;
186  KS_ROUND_0(2);
187  KS_ROUND(10, 30, 3);
188  KS_ROUND(20, 60, 3);
189  KS_ROUND(32, 47, 3);
190  }
191 }
192 
193 void Camellia::Base::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const
194 {
195 #define KS(i, j) ks[i*4 + EFI(j/2)*2 + EFI(j%2)]
196 
197 #define FL(klh, kll, krh, krl) \
198  ll ^= rotlFixed(lh & klh, 1); \
199  lh ^= (ll | kll); \
200  rh ^= (rl | krl); \
201  rl ^= rotlFixed(rh & krh, 1);
202 
203  word32 lh, ll, rh, rl;
205  Block::Get(inBlock)(lh)(ll)(rh)(rl);
206  const word32 *ks = m_key.data();
207  lh ^= KS(0,0);
208  ll ^= KS(0,1);
209  rh ^= KS(0,2);
210  rl ^= KS(0,3);
211 
212  // timing attack countermeasure. see comments at top for more details
213  const int cacheLineSize = GetCacheLineSize();
214  unsigned int i;
215  word32 u = 0;
216  for (i=0; i<256; i+=cacheLineSize)
217  u &= *(const word32 *)(s1+i);
218  u &= *(const word32 *)(s1+252);
219  lh |= u; ll |= u;
220 
221  SLOW_ROUND(lh, ll, rh, rl, KS(1,0), KS(1,1))
222  SLOW_ROUND(rh, rl, lh, ll, KS(1,2), KS(1,3))
223  for (i = m_rounds-1; i > 0; --i)
224  {
225  DOUBLE_ROUND(lh, ll, rh, rl, KS(2,0), KS(2,1), KS(2,2), KS(2,3))
226  DOUBLE_ROUND(lh, ll, rh, rl, KS(3,0), KS(3,1), KS(3,2), KS(3,3))
227  FL(KS(4,0), KS(4,1), KS(4,2), KS(4,3));
228  DOUBLE_ROUND(lh, ll, rh, rl, KS(5,0), KS(5,1), KS(5,2), KS(5,3))
229  ks += 16;
230  }
231  DOUBLE_ROUND(lh, ll, rh, rl, KS(2,0), KS(2,1), KS(2,2), KS(2,3))
232  ROUND(lh, ll, rh, rl, KS(3,0), KS(3,1))
233  SLOW_ROUND(rh, rl, lh, ll, KS(3,2), KS(3,3))
234  lh ^= KS(4,0);
235  ll ^= KS(4,1);
236  rh ^= KS(4,2);
237  rl ^= KS(4,3);
238  Block::Put(xorBlock, outBlock)(rh)(rl)(lh)(ll);
239 }
240 
241 // The Camellia s-boxes
242 
243 const byte Camellia::Base::s1[256] =
244 {
245  112,130,44,236,179,39,192,229,228,133,87,53,234,12,174,65,
246  35,239,107,147,69,25,165,33,237,14,79,78,29,101,146,189,
247  134,184,175,143,124,235,31,206,62,48,220,95,94,197,11,26,
248  166,225,57,202,213,71,93,61,217,1,90,214,81,86,108,77,
249  139,13,154,102,251,204,176,45,116,18,43,32,240,177,132,153,
250  223,76,203,194,52,126,118,5,109,183,169,49,209,23,4,215,
251  20,88,58,97,222,27,17,28,50,15,156,22,83,24,242,34,
252  254,68,207,178,195,181,122,145,36,8,232,168,96,252,105,80,
253  170,208,160,125,161,137,98,151,84,91,30,149,224,255,100,210,
254  16,196,0,72,163,247,117,219,138,3,230,218,9,63,221,148,
255  135,92,131,2,205,74,144,51,115,103,246,243,157,127,191,226,
256  82,155,216,38,200,55,198,59,129,150,111,75,19,190,99,46,
257  233,121,167,140,159,110,188,142,41,245,249,182,47,253,180,89,
258  120,152,6,106,231,70,113,186,212,37,171,66,136,162,141,250,
259  114,7,185,85,248,238,172,10,54,73,42,104,60,56,241,164,
260  64,40,211,123,187,201,67,193,21,227,173,244,119,199,128,158
261 };
262 
263 const word32 Camellia::Base::SP[4][256] = {
264  {
265  0x70707000, 0x82828200, 0x2c2c2c00, 0xececec00,
266  0xb3b3b300, 0x27272700, 0xc0c0c000, 0xe5e5e500,
267  0xe4e4e400, 0x85858500, 0x57575700, 0x35353500,
268  0xeaeaea00, 0x0c0c0c00, 0xaeaeae00, 0x41414100,
269  0x23232300, 0xefefef00, 0x6b6b6b00, 0x93939300,
270  0x45454500, 0x19191900, 0xa5a5a500, 0x21212100,
271  0xededed00, 0x0e0e0e00, 0x4f4f4f00, 0x4e4e4e00,
272  0x1d1d1d00, 0x65656500, 0x92929200, 0xbdbdbd00,
273  0x86868600, 0xb8b8b800, 0xafafaf00, 0x8f8f8f00,
274  0x7c7c7c00, 0xebebeb00, 0x1f1f1f00, 0xcecece00,
275  0x3e3e3e00, 0x30303000, 0xdcdcdc00, 0x5f5f5f00,
276  0x5e5e5e00, 0xc5c5c500, 0x0b0b0b00, 0x1a1a1a00,
277  0xa6a6a600, 0xe1e1e100, 0x39393900, 0xcacaca00,
278  0xd5d5d500, 0x47474700, 0x5d5d5d00, 0x3d3d3d00,
279  0xd9d9d900, 0x01010100, 0x5a5a5a00, 0xd6d6d600,
280  0x51515100, 0x56565600, 0x6c6c6c00, 0x4d4d4d00,
281  0x8b8b8b00, 0x0d0d0d00, 0x9a9a9a00, 0x66666600,
282  0xfbfbfb00, 0xcccccc00, 0xb0b0b000, 0x2d2d2d00,
283  0x74747400, 0x12121200, 0x2b2b2b00, 0x20202000,
284  0xf0f0f000, 0xb1b1b100, 0x84848400, 0x99999900,
285  0xdfdfdf00, 0x4c4c4c00, 0xcbcbcb00, 0xc2c2c200,
286  0x34343400, 0x7e7e7e00, 0x76767600, 0x05050500,
287  0x6d6d6d00, 0xb7b7b700, 0xa9a9a900, 0x31313100,
288  0xd1d1d100, 0x17171700, 0x04040400, 0xd7d7d700,
289  0x14141400, 0x58585800, 0x3a3a3a00, 0x61616100,
290  0xdedede00, 0x1b1b1b00, 0x11111100, 0x1c1c1c00,
291  0x32323200, 0x0f0f0f00, 0x9c9c9c00, 0x16161600,
292  0x53535300, 0x18181800, 0xf2f2f200, 0x22222200,
293  0xfefefe00, 0x44444400, 0xcfcfcf00, 0xb2b2b200,
294  0xc3c3c300, 0xb5b5b500, 0x7a7a7a00, 0x91919100,
295  0x24242400, 0x08080800, 0xe8e8e800, 0xa8a8a800,
296  0x60606000, 0xfcfcfc00, 0x69696900, 0x50505000,
297  0xaaaaaa00, 0xd0d0d000, 0xa0a0a000, 0x7d7d7d00,
298  0xa1a1a100, 0x89898900, 0x62626200, 0x97979700,
299  0x54545400, 0x5b5b5b00, 0x1e1e1e00, 0x95959500,
300  0xe0e0e000, 0xffffff00, 0x64646400, 0xd2d2d200,
301  0x10101000, 0xc4c4c400, 0x00000000, 0x48484800,
302  0xa3a3a300, 0xf7f7f700, 0x75757500, 0xdbdbdb00,
303  0x8a8a8a00, 0x03030300, 0xe6e6e600, 0xdadada00,
304  0x09090900, 0x3f3f3f00, 0xdddddd00, 0x94949400,
305  0x87878700, 0x5c5c5c00, 0x83838300, 0x02020200,
306  0xcdcdcd00, 0x4a4a4a00, 0x90909000, 0x33333300,
307  0x73737300, 0x67676700, 0xf6f6f600, 0xf3f3f300,
308  0x9d9d9d00, 0x7f7f7f00, 0xbfbfbf00, 0xe2e2e200,
309  0x52525200, 0x9b9b9b00, 0xd8d8d800, 0x26262600,
310  0xc8c8c800, 0x37373700, 0xc6c6c600, 0x3b3b3b00,
311  0x81818100, 0x96969600, 0x6f6f6f00, 0x4b4b4b00,
312  0x13131300, 0xbebebe00, 0x63636300, 0x2e2e2e00,
313  0xe9e9e900, 0x79797900, 0xa7a7a700, 0x8c8c8c00,
314  0x9f9f9f00, 0x6e6e6e00, 0xbcbcbc00, 0x8e8e8e00,
315  0x29292900, 0xf5f5f500, 0xf9f9f900, 0xb6b6b600,
316  0x2f2f2f00, 0xfdfdfd00, 0xb4b4b400, 0x59595900,
317  0x78787800, 0x98989800, 0x06060600, 0x6a6a6a00,
318  0xe7e7e700, 0x46464600, 0x71717100, 0xbababa00,
319  0xd4d4d400, 0x25252500, 0xababab00, 0x42424200,
320  0x88888800, 0xa2a2a200, 0x8d8d8d00, 0xfafafa00,
321  0x72727200, 0x07070700, 0xb9b9b900, 0x55555500,
322  0xf8f8f800, 0xeeeeee00, 0xacacac00, 0x0a0a0a00,
323  0x36363600, 0x49494900, 0x2a2a2a00, 0x68686800,
324  0x3c3c3c00, 0x38383800, 0xf1f1f100, 0xa4a4a400,
325  0x40404000, 0x28282800, 0xd3d3d300, 0x7b7b7b00,
326  0xbbbbbb00, 0xc9c9c900, 0x43434300, 0xc1c1c100,
327  0x15151500, 0xe3e3e300, 0xadadad00, 0xf4f4f400,
328  0x77777700, 0xc7c7c700, 0x80808000, 0x9e9e9e00
329  },
330  {
331  0x00e0e0e0, 0x00050505, 0x00585858, 0x00d9d9d9,
332  0x00676767, 0x004e4e4e, 0x00818181, 0x00cbcbcb,
333  0x00c9c9c9, 0x000b0b0b, 0x00aeaeae, 0x006a6a6a,
334  0x00d5d5d5, 0x00181818, 0x005d5d5d, 0x00828282,
335  0x00464646, 0x00dfdfdf, 0x00d6d6d6, 0x00272727,
336  0x008a8a8a, 0x00323232, 0x004b4b4b, 0x00424242,
337  0x00dbdbdb, 0x001c1c1c, 0x009e9e9e, 0x009c9c9c,
338  0x003a3a3a, 0x00cacaca, 0x00252525, 0x007b7b7b,
339  0x000d0d0d, 0x00717171, 0x005f5f5f, 0x001f1f1f,
340  0x00f8f8f8, 0x00d7d7d7, 0x003e3e3e, 0x009d9d9d,
341  0x007c7c7c, 0x00606060, 0x00b9b9b9, 0x00bebebe,
342  0x00bcbcbc, 0x008b8b8b, 0x00161616, 0x00343434,
343  0x004d4d4d, 0x00c3c3c3, 0x00727272, 0x00959595,
344  0x00ababab, 0x008e8e8e, 0x00bababa, 0x007a7a7a,
345  0x00b3b3b3, 0x00020202, 0x00b4b4b4, 0x00adadad,
346  0x00a2a2a2, 0x00acacac, 0x00d8d8d8, 0x009a9a9a,
347  0x00171717, 0x001a1a1a, 0x00353535, 0x00cccccc,
348  0x00f7f7f7, 0x00999999, 0x00616161, 0x005a5a5a,
349  0x00e8e8e8, 0x00242424, 0x00565656, 0x00404040,
350  0x00e1e1e1, 0x00636363, 0x00090909, 0x00333333,
351  0x00bfbfbf, 0x00989898, 0x00979797, 0x00858585,
352  0x00686868, 0x00fcfcfc, 0x00ececec, 0x000a0a0a,
353  0x00dadada, 0x006f6f6f, 0x00535353, 0x00626262,
354  0x00a3a3a3, 0x002e2e2e, 0x00080808, 0x00afafaf,
355  0x00282828, 0x00b0b0b0, 0x00747474, 0x00c2c2c2,
356  0x00bdbdbd, 0x00363636, 0x00222222, 0x00383838,
357  0x00646464, 0x001e1e1e, 0x00393939, 0x002c2c2c,
358  0x00a6a6a6, 0x00303030, 0x00e5e5e5, 0x00444444,
359  0x00fdfdfd, 0x00888888, 0x009f9f9f, 0x00656565,
360  0x00878787, 0x006b6b6b, 0x00f4f4f4, 0x00232323,
361  0x00484848, 0x00101010, 0x00d1d1d1, 0x00515151,
362  0x00c0c0c0, 0x00f9f9f9, 0x00d2d2d2, 0x00a0a0a0,
363  0x00555555, 0x00a1a1a1, 0x00414141, 0x00fafafa,
364  0x00434343, 0x00131313, 0x00c4c4c4, 0x002f2f2f,
365  0x00a8a8a8, 0x00b6b6b6, 0x003c3c3c, 0x002b2b2b,
366  0x00c1c1c1, 0x00ffffff, 0x00c8c8c8, 0x00a5a5a5,
367  0x00202020, 0x00898989, 0x00000000, 0x00909090,
368  0x00474747, 0x00efefef, 0x00eaeaea, 0x00b7b7b7,
369  0x00151515, 0x00060606, 0x00cdcdcd, 0x00b5b5b5,
370  0x00121212, 0x007e7e7e, 0x00bbbbbb, 0x00292929,
371  0x000f0f0f, 0x00b8b8b8, 0x00070707, 0x00040404,
372  0x009b9b9b, 0x00949494, 0x00212121, 0x00666666,
373  0x00e6e6e6, 0x00cecece, 0x00ededed, 0x00e7e7e7,
374  0x003b3b3b, 0x00fefefe, 0x007f7f7f, 0x00c5c5c5,
375  0x00a4a4a4, 0x00373737, 0x00b1b1b1, 0x004c4c4c,
376  0x00919191, 0x006e6e6e, 0x008d8d8d, 0x00767676,
377  0x00030303, 0x002d2d2d, 0x00dedede, 0x00969696,
378  0x00262626, 0x007d7d7d, 0x00c6c6c6, 0x005c5c5c,
379  0x00d3d3d3, 0x00f2f2f2, 0x004f4f4f, 0x00191919,
380  0x003f3f3f, 0x00dcdcdc, 0x00797979, 0x001d1d1d,
381  0x00525252, 0x00ebebeb, 0x00f3f3f3, 0x006d6d6d,
382  0x005e5e5e, 0x00fbfbfb, 0x00696969, 0x00b2b2b2,
383  0x00f0f0f0, 0x00313131, 0x000c0c0c, 0x00d4d4d4,
384  0x00cfcfcf, 0x008c8c8c, 0x00e2e2e2, 0x00757575,
385  0x00a9a9a9, 0x004a4a4a, 0x00575757, 0x00848484,
386  0x00111111, 0x00454545, 0x001b1b1b, 0x00f5f5f5,
387  0x00e4e4e4, 0x000e0e0e, 0x00737373, 0x00aaaaaa,
388  0x00f1f1f1, 0x00dddddd, 0x00595959, 0x00141414,
389  0x006c6c6c, 0x00929292, 0x00545454, 0x00d0d0d0,
390  0x00787878, 0x00707070, 0x00e3e3e3, 0x00494949,
391  0x00808080, 0x00505050, 0x00a7a7a7, 0x00f6f6f6,
392  0x00777777, 0x00939393, 0x00868686, 0x00838383,
393  0x002a2a2a, 0x00c7c7c7, 0x005b5b5b, 0x00e9e9e9,
394  0x00eeeeee, 0x008f8f8f, 0x00010101, 0x003d3d3d
395  },
396  {
397  0x38003838, 0x41004141, 0x16001616, 0x76007676,
398  0xd900d9d9, 0x93009393, 0x60006060, 0xf200f2f2,
399  0x72007272, 0xc200c2c2, 0xab00abab, 0x9a009a9a,
400  0x75007575, 0x06000606, 0x57005757, 0xa000a0a0,
401  0x91009191, 0xf700f7f7, 0xb500b5b5, 0xc900c9c9,
402  0xa200a2a2, 0x8c008c8c, 0xd200d2d2, 0x90009090,
403  0xf600f6f6, 0x07000707, 0xa700a7a7, 0x27002727,
404  0x8e008e8e, 0xb200b2b2, 0x49004949, 0xde00dede,
405  0x43004343, 0x5c005c5c, 0xd700d7d7, 0xc700c7c7,
406  0x3e003e3e, 0xf500f5f5, 0x8f008f8f, 0x67006767,
407  0x1f001f1f, 0x18001818, 0x6e006e6e, 0xaf00afaf,
408  0x2f002f2f, 0xe200e2e2, 0x85008585, 0x0d000d0d,
409  0x53005353, 0xf000f0f0, 0x9c009c9c, 0x65006565,
410  0xea00eaea, 0xa300a3a3, 0xae00aeae, 0x9e009e9e,
411  0xec00ecec, 0x80008080, 0x2d002d2d, 0x6b006b6b,
412  0xa800a8a8, 0x2b002b2b, 0x36003636, 0xa600a6a6,
413  0xc500c5c5, 0x86008686, 0x4d004d4d, 0x33003333,
414  0xfd00fdfd, 0x66006666, 0x58005858, 0x96009696,
415  0x3a003a3a, 0x09000909, 0x95009595, 0x10001010,
416  0x78007878, 0xd800d8d8, 0x42004242, 0xcc00cccc,
417  0xef00efef, 0x26002626, 0xe500e5e5, 0x61006161,
418  0x1a001a1a, 0x3f003f3f, 0x3b003b3b, 0x82008282,
419  0xb600b6b6, 0xdb00dbdb, 0xd400d4d4, 0x98009898,
420  0xe800e8e8, 0x8b008b8b, 0x02000202, 0xeb00ebeb,
421  0x0a000a0a, 0x2c002c2c, 0x1d001d1d, 0xb000b0b0,
422  0x6f006f6f, 0x8d008d8d, 0x88008888, 0x0e000e0e,
423  0x19001919, 0x87008787, 0x4e004e4e, 0x0b000b0b,
424  0xa900a9a9, 0x0c000c0c, 0x79007979, 0x11001111,
425  0x7f007f7f, 0x22002222, 0xe700e7e7, 0x59005959,
426  0xe100e1e1, 0xda00dada, 0x3d003d3d, 0xc800c8c8,
427  0x12001212, 0x04000404, 0x74007474, 0x54005454,
428  0x30003030, 0x7e007e7e, 0xb400b4b4, 0x28002828,
429  0x55005555, 0x68006868, 0x50005050, 0xbe00bebe,
430  0xd000d0d0, 0xc400c4c4, 0x31003131, 0xcb00cbcb,
431  0x2a002a2a, 0xad00adad, 0x0f000f0f, 0xca00caca,
432  0x70007070, 0xff00ffff, 0x32003232, 0x69006969,
433  0x08000808, 0x62006262, 0x00000000, 0x24002424,
434  0xd100d1d1, 0xfb00fbfb, 0xba00baba, 0xed00eded,
435  0x45004545, 0x81008181, 0x73007373, 0x6d006d6d,
436  0x84008484, 0x9f009f9f, 0xee00eeee, 0x4a004a4a,
437  0xc300c3c3, 0x2e002e2e, 0xc100c1c1, 0x01000101,
438  0xe600e6e6, 0x25002525, 0x48004848, 0x99009999,
439  0xb900b9b9, 0xb300b3b3, 0x7b007b7b, 0xf900f9f9,
440  0xce00cece, 0xbf00bfbf, 0xdf00dfdf, 0x71007171,
441  0x29002929, 0xcd00cdcd, 0x6c006c6c, 0x13001313,
442  0x64006464, 0x9b009b9b, 0x63006363, 0x9d009d9d,
443  0xc000c0c0, 0x4b004b4b, 0xb700b7b7, 0xa500a5a5,
444  0x89008989, 0x5f005f5f, 0xb100b1b1, 0x17001717,
445  0xf400f4f4, 0xbc00bcbc, 0xd300d3d3, 0x46004646,
446  0xcf00cfcf, 0x37003737, 0x5e005e5e, 0x47004747,
447  0x94009494, 0xfa00fafa, 0xfc00fcfc, 0x5b005b5b,
448  0x97009797, 0xfe00fefe, 0x5a005a5a, 0xac00acac,
449  0x3c003c3c, 0x4c004c4c, 0x03000303, 0x35003535,
450  0xf300f3f3, 0x23002323, 0xb800b8b8, 0x5d005d5d,
451  0x6a006a6a, 0x92009292, 0xd500d5d5, 0x21002121,
452  0x44004444, 0x51005151, 0xc600c6c6, 0x7d007d7d,
453  0x39003939, 0x83008383, 0xdc00dcdc, 0xaa00aaaa,
454  0x7c007c7c, 0x77007777, 0x56005656, 0x05000505,
455  0x1b001b1b, 0xa400a4a4, 0x15001515, 0x34003434,
456  0x1e001e1e, 0x1c001c1c, 0xf800f8f8, 0x52005252,
457  0x20002020, 0x14001414, 0xe900e9e9, 0xbd00bdbd,
458  0xdd00dddd, 0xe400e4e4, 0xa100a1a1, 0xe000e0e0,
459  0x8a008a8a, 0xf100f1f1, 0xd600d6d6, 0x7a007a7a,
460  0xbb00bbbb, 0xe300e3e3, 0x40004040, 0x4f004f4f
461  },
462  {
463  0x70700070, 0x2c2c002c, 0xb3b300b3, 0xc0c000c0,
464  0xe4e400e4, 0x57570057, 0xeaea00ea, 0xaeae00ae,
465  0x23230023, 0x6b6b006b, 0x45450045, 0xa5a500a5,
466  0xeded00ed, 0x4f4f004f, 0x1d1d001d, 0x92920092,
467  0x86860086, 0xafaf00af, 0x7c7c007c, 0x1f1f001f,
468  0x3e3e003e, 0xdcdc00dc, 0x5e5e005e, 0x0b0b000b,
469  0xa6a600a6, 0x39390039, 0xd5d500d5, 0x5d5d005d,
470  0xd9d900d9, 0x5a5a005a, 0x51510051, 0x6c6c006c,
471  0x8b8b008b, 0x9a9a009a, 0xfbfb00fb, 0xb0b000b0,
472  0x74740074, 0x2b2b002b, 0xf0f000f0, 0x84840084,
473  0xdfdf00df, 0xcbcb00cb, 0x34340034, 0x76760076,
474  0x6d6d006d, 0xa9a900a9, 0xd1d100d1, 0x04040004,
475  0x14140014, 0x3a3a003a, 0xdede00de, 0x11110011,
476  0x32320032, 0x9c9c009c, 0x53530053, 0xf2f200f2,
477  0xfefe00fe, 0xcfcf00cf, 0xc3c300c3, 0x7a7a007a,
478  0x24240024, 0xe8e800e8, 0x60600060, 0x69690069,
479  0xaaaa00aa, 0xa0a000a0, 0xa1a100a1, 0x62620062,
480  0x54540054, 0x1e1e001e, 0xe0e000e0, 0x64640064,
481  0x10100010, 0x00000000, 0xa3a300a3, 0x75750075,
482  0x8a8a008a, 0xe6e600e6, 0x09090009, 0xdddd00dd,
483  0x87870087, 0x83830083, 0xcdcd00cd, 0x90900090,
484  0x73730073, 0xf6f600f6, 0x9d9d009d, 0xbfbf00bf,
485  0x52520052, 0xd8d800d8, 0xc8c800c8, 0xc6c600c6,
486  0x81810081, 0x6f6f006f, 0x13130013, 0x63630063,
487  0xe9e900e9, 0xa7a700a7, 0x9f9f009f, 0xbcbc00bc,
488  0x29290029, 0xf9f900f9, 0x2f2f002f, 0xb4b400b4,
489  0x78780078, 0x06060006, 0xe7e700e7, 0x71710071,
490  0xd4d400d4, 0xabab00ab, 0x88880088, 0x8d8d008d,
491  0x72720072, 0xb9b900b9, 0xf8f800f8, 0xacac00ac,
492  0x36360036, 0x2a2a002a, 0x3c3c003c, 0xf1f100f1,
493  0x40400040, 0xd3d300d3, 0xbbbb00bb, 0x43430043,
494  0x15150015, 0xadad00ad, 0x77770077, 0x80800080,
495  0x82820082, 0xecec00ec, 0x27270027, 0xe5e500e5,
496  0x85850085, 0x35350035, 0x0c0c000c, 0x41410041,
497  0xefef00ef, 0x93930093, 0x19190019, 0x21210021,
498  0x0e0e000e, 0x4e4e004e, 0x65650065, 0xbdbd00bd,
499  0xb8b800b8, 0x8f8f008f, 0xebeb00eb, 0xcece00ce,
500  0x30300030, 0x5f5f005f, 0xc5c500c5, 0x1a1a001a,
501  0xe1e100e1, 0xcaca00ca, 0x47470047, 0x3d3d003d,
502  0x01010001, 0xd6d600d6, 0x56560056, 0x4d4d004d,
503  0x0d0d000d, 0x66660066, 0xcccc00cc, 0x2d2d002d,
504  0x12120012, 0x20200020, 0xb1b100b1, 0x99990099,
505  0x4c4c004c, 0xc2c200c2, 0x7e7e007e, 0x05050005,
506  0xb7b700b7, 0x31310031, 0x17170017, 0xd7d700d7,
507  0x58580058, 0x61610061, 0x1b1b001b, 0x1c1c001c,
508  0x0f0f000f, 0x16160016, 0x18180018, 0x22220022,
509  0x44440044, 0xb2b200b2, 0xb5b500b5, 0x91910091,
510  0x08080008, 0xa8a800a8, 0xfcfc00fc, 0x50500050,
511  0xd0d000d0, 0x7d7d007d, 0x89890089, 0x97970097,
512  0x5b5b005b, 0x95950095, 0xffff00ff, 0xd2d200d2,
513  0xc4c400c4, 0x48480048, 0xf7f700f7, 0xdbdb00db,
514  0x03030003, 0xdada00da, 0x3f3f003f, 0x94940094,
515  0x5c5c005c, 0x02020002, 0x4a4a004a, 0x33330033,
516  0x67670067, 0xf3f300f3, 0x7f7f007f, 0xe2e200e2,
517  0x9b9b009b, 0x26260026, 0x37370037, 0x3b3b003b,
518  0x96960096, 0x4b4b004b, 0xbebe00be, 0x2e2e002e,
519  0x79790079, 0x8c8c008c, 0x6e6e006e, 0x8e8e008e,
520  0xf5f500f5, 0xb6b600b6, 0xfdfd00fd, 0x59590059,
521  0x98980098, 0x6a6a006a, 0x46460046, 0xbaba00ba,
522  0x25250025, 0x42420042, 0xa2a200a2, 0xfafa00fa,
523  0x07070007, 0x55550055, 0xeeee00ee, 0x0a0a000a,
524  0x49490049, 0x68680068, 0x38380038, 0xa4a400a4,
525  0x28280028, 0x7b7b007b, 0xc9c900c9, 0xc1c100c1,
526  0xe3e300e3, 0xf4f400f4, 0xc7c700c7, 0x9e9e009e
527  }};
528 
529 NAMESPACE_END
Utility functions for the Crypto++ library.
Library configuration file.
Classes for the Cameliia block cipher.
Camellia
Definition: camellia.h:25
Classes, functions, intrinsics and features for X86, X32 nd X64 assembly.
Crypto++ library namespace.
Interface for retrieving values given their names.
Definition: cryptlib.h:261