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