亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? camellia.cpp

?? 此壓縮包內有cast、blowfish、simple、des、cryptlib、rsa、mqueue、xtrcrypt、gf256、base32,base64、modexppc、network等一些的
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// camellia.cpp - by Kevin Springle, 2003
// This code is hereby placed in the public domain.

/*
Optimisations and defense against timing attacks added in Jan 2007 by Wei Dai.

The first 2 rounds and the last round seem especially vulnerable to timing
attacks. The protection is similar to what was implemented for Rijndael.
See comments at top of rijndael.cpp for more details.
*/

#include "pch.h"

#include "camellia.h"
#include "misc.h"
#include "cpu.h"

NAMESPACE_BEGIN(CryptoPP)

// round implementation that uses a small table for protection against timing attacks
#define SLOW_ROUND(lh, ll, rh, rl, kh, kl)	{							\
	word32 zr = ll ^ kl;												\
	word32 zl = lh ^ kh;												\
	zr=	rotlFixed(s1[GETBYTE(zr, 3)], 1) |								\
		(rotrFixed(s1[GETBYTE(zr, 2)], 1) << 24) |						\
		(s1[rotlFixed(CRYPTOPP_GET_BYTE_AS_BYTE(zr, 1),1)] << 16) |		\
		(s1[GETBYTE(zr, 0)] << 8);										\
	zl=	(s1[GETBYTE(zl, 3)] << 24) |									\
		(rotlFixed(s1[GETBYTE(zl, 2)], 1) << 16) |						\
		(rotrFixed(s1[GETBYTE(zl, 1)], 1) << 8) |						\
		s1[rotlFixed(CRYPTOPP_GET_BYTE_AS_BYTE(zl, 0), 1)];				\
	zl ^= zr;															\
	zr = zl ^ rotlFixed(zr, 8);											\
	zl = zr ^ rotrFixed(zl, 8);											\
	rh ^= rotlFixed(zr, 16);											\
	rh ^= zl;															\
	rl ^= rotlFixed(zl, 8);												\
	}

// normal round - same output as above but using larger tables for faster speed
#define ROUND(lh, ll, rh, rl, kh, kl)	{	\
	word32 th = lh ^ kh;					\
	word32 tl = ll ^ kl;					\
	word32 d = SP[0][GETBYTE(tl,0)] ^ SP[1][GETBYTE(tl,3)] ^ SP[2][GETBYTE(tl,2)] ^ SP[3][GETBYTE(tl,1)];	\
	word32 u = SP[0][GETBYTE(th,3)] ^ SP[1][GETBYTE(th,2)] ^ SP[2][GETBYTE(th,1)] ^ SP[3][GETBYTE(th,0)];	\
	d ^= u;									\
	rh ^= d;								\
	rl ^= d;								\
	rl ^= rotrFixed(u, 8);}

#define DOUBLE_ROUND(lh, ll, rh, rl, k0, k1, k2, k3)	\
	ROUND(lh, ll, rh, rl, k0, k1)						\
	ROUND(rh, rl, lh, ll, k2, k3)

#ifdef IS_LITTLE_ENDIAN
#define EFI(i) (1-(i))
#else
#define EFI(i) (i)
#endif

void Camellia::Base::UncheckedSetKey(const byte *key, unsigned int keylen, const NameValuePairs &)
{
	m_rounds = (keylen >= 24) ? 4 : 3;
	unsigned int kslen = (8 * m_rounds + 2);
	m_key.New(kslen*2);
	word32 *ks32 = m_key.data();
	int m=0, a=0;
	if (!IsForwardTransformation())
		m = -1, a = kslen-1;

	word32 kl0, kl1, kl2, kl3;
	GetBlock<word32, BigEndian, false> getBlock(key);
	getBlock(kl0)(kl1)(kl2)(kl3);
	word32 k0=kl0, k1=kl1, k2=kl2, k3=kl3;

#define CALC_ADDR2(base, i, j)	((byte *)(base)+8*(i)+4*(j)+((-16*(i))&m))
#define CALC_ADDR(base, i)	CALC_ADDR2(base, i, 0)

#if !defined(WORD64_AVAILABLE)
	ks32 += 2*a;
#define PREPARE_KS_ROUNDS
#define KS_ROUND_0(i)									\
	*(word32*)CALC_ADDR2(ks32, i+EFI(0), EFI(0)) = k0;	\
	*(word32*)CALC_ADDR2(ks32, i+EFI(0), EFI(1)) = k1;	\
	*(word32*)CALC_ADDR2(ks32, i+EFI(1), EFI(0)) = k2;	\
	*(word32*)CALC_ADDR2(ks32, i+EFI(1), EFI(1)) = k3
#define KS_ROUND(i, r, which)																												\
	if (which & (1<<((7-r/32)%4/2))) *(word32*)CALC_ADDR2(ks32, i+EFI((7-r/32)%4/2), EFI((7-r/32)%2)) = (k3 << (r%32)) | (k0 >> (32-r%32));	\
	if (which & (1<<((6-r/32)%4/2))) *(word32*)CALC_ADDR2(ks32, i+EFI((6-r/32)%4/2), EFI((6-r/32)%2)) = (k2 << (r%32)) | (k3 >> (32-r%32));	\
	if (which & (1<<((5-r/32)%4/2))) *(word32*)CALC_ADDR2(ks32, i+EFI((5-r/32)%4/2), EFI((5-r/32)%2)) = (k1 << (r%32)) | (k2 >> (32-r%32));	\
	if (which & (1<<((4-r/32)%4/2))) *(word32*)CALC_ADDR2(ks32, i+EFI((4-r/32)%4/2), EFI((4-r/32)%2)) = (k0 << (r%32)) | (k1 >> (32-r%32))
#elif 1
	word64 kwl, kwr;
	ks32 += 2*a;
#define PREPARE_KS_ROUNDS			\
	kwl = (word64(k0) << 32) | k1;	\
	kwr = (word64(k2) << 32) | k3
#define KS_ROUND_0(i)							\
	*(word64*)CALC_ADDR(ks32, i+EFI(0)) = kwl;	\
	*(word64*)CALC_ADDR(ks32, i+EFI(1)) = kwr
#define KS_ROUND(i, r, which)																						\
	if (which & (1<<int(r<64))) *(word64*)CALC_ADDR(ks32, i+EFI(r<64)) = (kwr << (r%64)) | (kwl >> (64 - (r%64)));	\
	if (which & (1<<int(r>64))) *(word64*)CALC_ADDR(ks32, i+EFI(r>64)) = (kwl << (r%64)) | (kwr >> (64 - (r%64)))
#else
	// SSE2 version is 30% faster on Intel Core 2. Doesn't seem worth the hassle of maintenance, but left here
	// #if'd out in case someone needs it.
	__m128i kw, kw2;
	__m128i *ks128 = (__m128i *)ks32+a/2;
	ks32 += 2*a;
#define PREPARE_KS_ROUNDS													\
	kw = _mm_set_epi32(k0, k1, k2, k3);										\
	if (m) kw2 = kw, kw = _mm_shuffle_epi32(kw, _MM_SHUFFLE(1, 0, 3, 2));	\
	else kw2 = _mm_shuffle_epi32(kw, _MM_SHUFFLE(1, 0, 3, 2))
#define KS_ROUND_0(i)										\
	_mm_store_si128((__m128i *)CALC_ADDR(ks128, i), kw)
#define KS_ROUND(i, r, which)	{																				\
	__m128i temp;																								\
	if (r<64 && (which!=1 || m)) temp = _mm_or_si128(_mm_slli_epi64(kw, r%64), _mm_srli_epi64(kw2, 64-r%64));	\
	else temp = _mm_or_si128(_mm_slli_epi64(kw2, r%64), _mm_srli_epi64(kw, 64-r%64));							\
	if (which & 2) _mm_store_si128((__m128i *)CALC_ADDR(ks128, i), temp);										\
	else _mm_storel_epi64((__m128i*)CALC_ADDR(ks32, i+EFI(0)), temp);											\
	}
#endif

	if (keylen == 16)
	{
		// KL
		PREPARE_KS_ROUNDS;
		KS_ROUND_0(0);
		KS_ROUND(4, 15, 3);
		KS_ROUND(10, 45, 3);
		KS_ROUND(12, 60, 2);
		KS_ROUND(16, 77, 3);
		KS_ROUND(18, 94, 3);
		KS_ROUND(22, 111, 3);

		// KA
		k0=kl0, k1=kl1, k2=kl2, k3=kl3;
		DOUBLE_ROUND(k0, k1, k2, k3, 0xA09E667Ful, 0x3BCC908Bul, 0xB67AE858ul, 0x4CAA73B2ul);
		k0^=kl0, k1^=kl1, k2^=kl2, k3^=kl3;
		DOUBLE_ROUND(k0, k1, k2, k3, 0xC6EF372Ful, 0xE94F82BEul, 0x54FF53A5ul, 0xF1D36F1Cul);

		PREPARE_KS_ROUNDS;
		KS_ROUND_0(2);
		KS_ROUND(6, 15, 3);
		KS_ROUND(8, 30, 3);
		KS_ROUND(12, 45, 1);
		KS_ROUND(14, 60, 3);
		KS_ROUND(20, 94, 3);
		KS_ROUND(24, 47, 3);
	}
	else
	{
		// KL
		PREPARE_KS_ROUNDS;
		KS_ROUND_0(0);
		KS_ROUND(12, 45, 3);
		KS_ROUND(16, 60, 3);
		KS_ROUND(22, 77, 3);
		KS_ROUND(30, 111, 3);

		// KR
		word32 kr0, kr1, kr2, kr3;
		GetBlock<word32, BigEndian, false>(key+16)(kr0)(kr1);
		if (keylen == 24)
			kr2 = ~kr0, kr3 = ~kr1;
		else
			GetBlock<word32, BigEndian, false>(key+24)(kr2)(kr3);
		k0=kr0, k1=kr1, k2=kr2, k3=kr3;

		PREPARE_KS_ROUNDS;
		KS_ROUND(4, 15, 3);
		KS_ROUND(8, 30, 3);
		KS_ROUND(18, 60, 3);
		KS_ROUND(26, 94, 3);

		// KA
		k0^=kl0, k1^=kl1, k2^=kl2, k3^=kl3;
		DOUBLE_ROUND(k0, k1, k2, k3, 0xA09E667Ful, 0x3BCC908Bul, 0xB67AE858ul, 0x4CAA73B2ul);
		k0^=kl0, k1^=kl1, k2^=kl2, k3^=kl3;
		DOUBLE_ROUND(k0, k1, k2, k3, 0xC6EF372Ful, 0xE94F82BEul, 0x54FF53A5ul, 0xF1D36F1Cul);

		PREPARE_KS_ROUNDS;
		KS_ROUND(6, 15, 3);
		KS_ROUND(14, 45, 3);
		KS_ROUND(24, 77, 3);
		KS_ROUND(28, 94, 3);

		// KB
		k0^=kr0, k1^=kr1, k2^=kr2, k3^=kr3;
		DOUBLE_ROUND(k0, k1, k2, k3, 0x10E527FAul, 0xDE682D1Dul, 0xB05688C2ul, 0xB3E6C1FDul);

		PREPARE_KS_ROUNDS;
		KS_ROUND_0(2);
		KS_ROUND(10, 30, 3);
		KS_ROUND(20, 60, 3);
		KS_ROUND(32, 47, 3);
	}
}

void Camellia::Base::ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const
{
#define KS(i, j) ks[i*4 + EFI(j/2)*2 + EFI(j%2)]

#define FL(klh, kll, krh, krl)		\
	ll ^= rotlFixed(lh & klh, 1);	\
	lh ^= (ll | kll);				\
	rh ^= (rl | krl);				\
	rl ^= rotlFixed(rh & krh, 1);

	word32 lh, ll, rh, rl;
	typedef BlockGetAndPut<word32, BigEndian> Block;
	Block::Get(inBlock)(lh)(ll)(rh)(rl);
	const word32 *ks = m_key.data();
	lh ^= KS(0,0);
	ll ^= KS(0,1);
	rh ^= KS(0,2);
	rl ^= KS(0,3);

	// timing attack countermeasure. see comments at top for more details
	const int cacheLineSize = GetCacheLineSize();
	unsigned int i;
	word32 u = 0;
	for (i=0; i<256; i+=cacheLineSize)
		u &= *(const word32 *)(s1+i);
	u &= *(const word32 *)(s1+252);
	lh |= u; ll |= u;

	SLOW_ROUND(lh, ll, rh, rl, KS(1,0), KS(1,1))
	SLOW_ROUND(rh, rl, lh, ll, KS(1,2), KS(1,3))
	for (i = m_rounds-1; i > 0; --i)
	{
		DOUBLE_ROUND(lh, ll, rh, rl, KS(2,0), KS(2,1), KS(2,2), KS(2,3))
		DOUBLE_ROUND(lh, ll, rh, rl, KS(3,0), KS(3,1), KS(3,2), KS(3,3))
		FL(KS(4,0), KS(4,1), KS(4,2), KS(4,3));
		DOUBLE_ROUND(lh, ll, rh, rl, KS(5,0), KS(5,1), KS(5,2), KS(5,3))
		ks += 16;
	}
	DOUBLE_ROUND(lh, ll, rh, rl, KS(2,0), KS(2,1), KS(2,2), KS(2,3))
	ROUND(lh, ll, rh, rl, KS(3,0), KS(3,1))
	SLOW_ROUND(rh, rl, lh, ll, KS(3,2), KS(3,3))
	lh ^= KS(4,0);
	ll ^= KS(4,1);
	rh ^= KS(4,2);
	rl ^= KS(4,3);
	Block::Put(xorBlock, outBlock)(rh)(rl)(lh)(ll);
}

// The Camellia s-boxes

const byte Camellia::Base::s1[256] =
{
	112,130,44,236,179,39,192,229,228,133,87,53,234,12,174,65,
	35,239,107,147,69,25,165,33,237,14,79,78,29,101,146,189,
	134,184,175,143,124,235,31,206,62,48,220,95,94,197,11,26,
	166,225,57,202,213,71,93,61,217,1,90,214,81,86,108,77,
	139,13,154,102,251,204,176,45,116,18,43,32,240,177,132,153,
	223,76,203,194,52,126,118,5,109,183,169,49,209,23,4,215,
	20,88,58,97,222,27,17,28,50,15,156,22,83,24,242,34,
	254,68,207,178,195,181,122,145,36,8,232,168,96,252,105,80,
	170,208,160,125,161,137,98,151,84,91,30,149,224,255,100,210,
	16,196,0,72,163,247,117,219,138,3,230,218,9,63,221,148,
	135,92,131,2,205,74,144,51,115,103,246,243,157,127,191,226,
	82,155,216,38,200,55,198,59,129,150,111,75,19,190,99,46,
	233,121,167,140,159,110,188,142,41,245,249,182,47,253,180,89,
	120,152,6,106,231,70,113,186,212,37,171,66,136,162,141,250,
	114,7,185,85,248,238,172,10,54,73,42,104,60,56,241,164,
	64,40,211,123,187,201,67,193,21,227,173,244,119,199,128,158
};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日本一道本| 久久免费精品国产久精品久久久久| 91麻豆精品视频| 日韩无一区二区| 亚洲私人影院在线观看| 美女看a上一区| 欧美午夜精品久久久久久孕妇| 日韩欧美一级片| 性欧美疯狂xxxxbbbb| 高清av一区二区| 精品少妇一区二区三区免费观看 | 亚洲精品一二三| 美女脱光内衣内裤视频久久网站| 一本色道亚洲精品aⅴ| 久久精子c满五个校花| 视频在线观看91| 欧美在线免费视屏| 日韩伦理av电影| 国产成人鲁色资源国产91色综| 日韩一区二区麻豆国产| 亚洲一区二区三区在线看| 92精品国产成人观看免费 | 久久99精品久久久| 欧美色区777第一页| 中文字幕中文字幕在线一区| 国产一区二区三区在线观看免费 | 一区二区久久久久久| 国产成人在线影院| 久久亚洲精精品中文字幕早川悠里| 日韩av二区在线播放| 欧美四级电影在线观看| 亚洲资源中文字幕| 色诱亚洲精品久久久久久| 《视频一区视频二区| 国产成人精品午夜视频免费| 精品福利在线导航| 国产精品一二三区| 26uuu国产一区二区三区| 久久99日本精品| 久久婷婷国产综合精品青草 | 久久综合久久综合九色| 久久99久久99| 久久婷婷久久一区二区三区| 国产在线播放一区二区三区| 亚洲精品一线二线三线| 国产成人午夜精品影院观看视频 | 欧美午夜理伦三级在线观看| 一区二区三区四区亚洲| 色猫猫国产区一区二在线视频| 一区二区三区资源| 欧美日韩高清一区| 免费成人在线视频观看| 欧美va在线播放| 成人高清免费观看| 亚洲一区二区三区在线| 在线电影欧美成精品| 麻豆成人久久精品二区三区红 | 91国内精品野花午夜精品| 亚洲成人免费在线| 精品日韩欧美一区二区| 成人激情午夜影院| 亚洲一区在线视频| 精品国产三级a在线观看| 高清国产一区二区| 亚洲一区二区三区视频在线播放| 欧美精品第1页| 国产成人精品免费视频网站| 亚洲欧美另类久久久精品2019| 777午夜精品免费视频| 国产老妇另类xxxxx| 一区二区三区日韩精品| 欧美成人综合网站| 91色.com| 国产一区二区在线看| 亚洲免费观看高清完整版在线观看熊| 欧美高清一级片在线| 成人免费视频视频| 偷偷要91色婷婷| 国产精品国产三级国产aⅴ无密码| 在线免费不卡视频| 国产91精品欧美| 日一区二区三区| 日韩码欧中文字| 久久久美女毛片| 欧美精品乱码久久久久久按摩 | 91偷拍与自偷拍精品| 日韩高清不卡一区| 亚洲黄色录像片| 国产日韩欧美不卡在线| 欧美肥妇bbw| 欧洲一区在线电影| 成人黄色小视频| 紧缚捆绑精品一区二区| 亚洲国产精品精华液网站| 中文字幕不卡在线| 久久奇米777| 欧美一区二区在线看| 欧美亚洲日本一区| va亚洲va日韩不卡在线观看| 国产一区二区毛片| 理论片日本一区| 日韩和的一区二区| 亚洲午夜精品久久久久久久久| 国产精品蜜臀在线观看| 精品久久久久久无| 日韩午夜电影av| 91精品国产综合久久国产大片| 色欧美乱欧美15图片| 99在线视频精品| 国产高清不卡一区| 国模冰冰炮一区二区| 免费观看在线综合| 免费成人在线影院| 蜜桃视频在线一区| 蜜桃在线一区二区三区| 日韩电影在线观看一区| 三级欧美在线一区| 免费人成精品欧美精品| 日本午夜一本久久久综合| 亚洲成人第一页| 日韩电影在线一区二区三区| 五月婷婷另类国产| 青青青爽久久午夜综合久久午夜| 首页欧美精品中文字幕| 日韩精品1区2区3区| 免费看日韩精品| 蜜臀a∨国产成人精品| 男女性色大片免费观看一区二区| 免费的成人av| 国产一区二区导航在线播放| 国产精品亚洲专一区二区三区| 国产高清不卡一区二区| 99热精品一区二区| 欧美日韩中文一区| 欧美一级黄色大片| 久久人人爽爽爽人久久久| 国产精品私人自拍| 亚洲一卡二卡三卡四卡无卡久久| 亚洲一区二区偷拍精品| 捆绑变态av一区二区三区| 国产精品亚洲第一| 91蜜桃网址入口| 777xxx欧美| 久久精品日产第一区二区三区高清版| 亚洲国产精品v| 亚洲香蕉伊在人在线观| 久久电影网电视剧免费观看| 国产成人aaa| 欧美亚洲精品一区| 久久蜜桃一区二区| 一区二区三区在线观看网站| 水野朝阳av一区二区三区| 国产精品一卡二| 色8久久人人97超碰香蕉987| 91精品国产综合久久蜜臀| 久久久不卡影院| 洋洋成人永久网站入口| 奇米影视一区二区三区小说| 成人av中文字幕| 欧美精品视频www在线观看| 国产精品午夜在线| 日韩精品一级中文字幕精品视频免费观看 | 亚洲va欧美va天堂v国产综合| 久久精品99国产精品日本| 91亚洲资源网| 欧美videossexotv100| 亚洲综合色丁香婷婷六月图片| 精品中文字幕一区二区小辣椒 | 91官网在线观看| 久久婷婷国产综合精品青草 | 精品视频在线免费| 国产日韩欧美一区二区三区综合| 偷偷要91色婷婷| 91同城在线观看| 中文字幕 久热精品 视频在线| 亚洲aaa精品| 97精品视频在线观看自产线路二| 538在线一区二区精品国产| 日韩理论片一区二区| 国产福利精品一区| 日韩欧美一区二区视频| 亚洲一区电影777| 色综合天天综合网国产成人综合天 | 久久免费精品国产久精品久久久久| 亚洲精品视频免费看| 国产伦精品一区二区三区视频青涩 | 国产高清无密码一区二区三区| 欧美猛男超大videosgay| 亚洲欧美福利一区二区| 国产99久久精品| www激情久久| 久久精品国产99久久6| 69av一区二区三区| 亚洲成人精品一区| 欧美亚洲图片小说| 有码一区二区三区| 色94色欧美sute亚洲13| 亚洲免费在线播放| 日本高清成人免费播放| 国产精品乱码久久久久久|