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