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

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

?? vmac.cpp

?? 利用VC編寫的加解密算法程序,包括DES、RSA等多個算法
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// vmac.cpp - written and placed in the public domain by Wei Dai
// based on Ted Krovetz's public domain vmac.c and draft-krovetz-vmac-01.txt

#include "pch.h"
#include "vmac.h"
#include "argnames.h"
#include "cpu.h"

NAMESPACE_BEGIN(CryptoPP)

#if defined(_MSC_VER) && !defined(CRYPTOPP_SLOW_WORD64)
#include <intrin.h>
#endif

#define VMAC_BOOL_WORD128 (defined(CRYPTOPP_WORD128_AVAILABLE) && !defined(CRYPTOPP_X64_ASM_AVAILABLE))
#ifdef __BORLANDC__
#define const	// Turbo C++ 2006 workaround
#endif
static const word64 p64   = W64LIT(0xfffffffffffffeff);  /* 2^64 - 257 prime  */
static const word64 m62   = W64LIT(0x3fffffffffffffff);  /* 62-bit mask       */
static const word64 m63   = W64LIT(0x7fffffffffffffff);  /* 63-bit mask       */
static const word64 m64   = W64LIT(0xffffffffffffffff);  /* 64-bit mask       */
static const word64 mpoly = W64LIT(0x1fffffff1fffffff);  /* Poly key mask     */
#ifdef __BORLANDC__
#undef const
#endif
#if VMAC_BOOL_WORD128
static const word128 m126 = (word128(m62)<<64)|m64;		 /* 126-bit mask      */
#endif

void VMAC_Base::UncheckedSetKey(const byte *userKey, unsigned int keylength, const NameValuePairs &params)
{
	int digestLength = params.GetIntValueWithDefault(Name::DigestSize(), DefaultDigestSize());
	if (digestLength != 8 && digestLength != 16)
		throw InvalidArgument("VMAC: DigestSize must be 8 or 16");
	m_is128 = digestLength == 16;

	m_L1KeyLength = params.GetIntValueWithDefault(Name::L1KeyLength(), 128);
	if (m_L1KeyLength <= 0 || m_L1KeyLength % 128 != 0)
		throw InvalidArgument("VMAC: L1KeyLength must be a positive multiple of 128");

	AllocateBlocks();

	BlockCipher &cipher = AccessCipher();
	cipher.SetKey(userKey, keylength, params);
	unsigned int blockSize = cipher.BlockSize();
	unsigned int blockSizeInWords = blockSize / sizeof(word64);
	SecBlock<word64> out(blockSizeInWords);
	SecByteBlock in;
	in.CleanNew(blockSize);
	size_t i;

	/* Fill nh key */
	in[0] = 0x80; 
	for (i = 0; i < m_nhKeySize()*sizeof(word64); i += blockSize)
	{
		cipher.ProcessBlock(in, out.BytePtr());
		ConditionalByteReverse(BIG_ENDIAN_ORDER, m_nhKey()+i/sizeof(word64), out.begin(), blockSize);
		in[15]++;
	}

	/* Fill poly key */
	in[0] = 0xC0;
	in[15] = 0;
	for (i = 0; i <= (size_t)m_is128; i++)
	{
		cipher.ProcessBlock(in, out.BytePtr());
		m_polyState()[i*4+2] = GetWord<word64>(true, BIG_ENDIAN_ORDER, out.BytePtr()) & mpoly;
		m_polyState()[i*4+3]  = GetWord<word64>(true, BIG_ENDIAN_ORDER, out.BytePtr()+8) & mpoly;
		in[15]++;
	}

	/* Fill ip key */
	in[0] = 0xE0;
	in[15] = 0;
	word64 *l3Key = m_l3Key();
	for (i = 0; i <= (size_t)m_is128; i++)
		do
		{
			cipher.ProcessBlock(in, out.BytePtr());
			l3Key[i*2+0] = GetWord<word64>(true, BIG_ENDIAN_ORDER, out.BytePtr());
			l3Key[i*2+1] = GetWord<word64>(true, BIG_ENDIAN_ORDER, out.BytePtr()+8);
			in[15]++;
		} while ((l3Key[i*2+0] >= p64) || (l3Key[i*2+1] >= p64));

	m_padCached = false;
	Resynchronize(GetIVAndThrowIfInvalid(params));
}

void VMAC_Base::GetNextIV(RandomNumberGenerator &rng, byte *IV)
{
	SimpleKeyingInterface::GetNextIV(rng, IV);
	IV[0] &= 0x7f;
}

void VMAC_Base::Resynchronize(const byte *IV)
{
	int s = IVSize();
	if (m_is128)
	{
		memcpy(m_nonce(), IV, s);
		AccessCipher().ProcessBlock(m_nonce(), m_pad());
	}
	else
	{
		m_padCached = m_padCached && (m_nonce()[s-1] | 1) == (IV[s-1] | 1) && memcmp(m_nonce(), IV, s-1) == 0;
		if (!m_padCached)
		{
			memcpy(m_nonce(), IV, s);
			m_nonce()[s-1] &= 0xfe;
			AccessCipher().ProcessBlock(m_nonce(), m_pad());
			m_padCached = true;
		}
		m_nonce()[s-1] = IV[s-1];
	}
	m_isFirstBlock = true;
	Restart();
}

void VMAC_Base::HashEndianCorrectedBlock(const word64 *data)
{
	assert(false);
}

#if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE && CRYPTOPP_BOOL_X86
#pragma warning(disable: 4731)	// frame pointer register 'ebp' modified by inline assembly code
void
#ifdef __GNUC__
__attribute__ ((noinline))		// Intel Compiler 9.1 workaround
#endif
VMAC_Base::VHASH_Update_SSE2(const word64 *data, size_t blocksRemainingInWord64, int tagPart)
{
	const word64 *nhK = m_nhKey();
	word64 *polyS = m_polyState();

#ifdef __GNUC__
	word32 temp;
	__asm__ __volatile__
	(
	AS2(	mov		%%ebx, %0)
	AS2(	mov		%1, %%ebx)
	".intel_syntax noprefix;"
#else
	#if _MSC_VER < 1300 || defined(__INTEL_COMPILER)
	word32 L1KeyLength = m_L1KeyLength;
	char isFirstBlock = m_isFirstBlock;
	AS2(	mov		ebx, [L1KeyLength])
	AS2(	mov		dl, [isFirstBlock])
	#else
	AS2(	mov		ecx, this)
	AS2(	mov		ebx, [ecx+m_L1KeyLength])
	AS2(	mov		dl, [ecx+m_isFirstBlock])
	#endif
	AS2(	mov		eax, tagPart)
	AS2(	shl		eax, 4)
	AS2(	mov		edi, nhK)
	AS2(	add		edi, eax)
	AS2(	add		eax, eax)
	AS2(	add		eax, polyS)

	AS2(	mov		esi, data)
	AS2(	mov		ecx, blocksRemainingInWord64)
#endif

	AS2(	shr		ebx, 3)
	AS1(	push	ebp)
	AS2(	sub		esp, 12)
	ASL(4)
	AS2(	mov		ebp, ebx)
	AS2(	cmp		ecx, ebx)
	AS2(	cmovl	ebp, ecx)
	AS2(	sub		ecx, ebp)
	AS2(	lea		ebp, [edi+8*ebp])	// end of nhK
	AS2(	movq	mm6, [esi])
	AS2(	paddq	mm6, [edi])
	AS2(	movq	mm5, [esi+8])
	AS2(	paddq	mm5, [edi+8])
	AS2(	add		esi, 16)
	AS2(	add		edi, 16)
	AS2(	movq	mm4, mm6)
	ASS(	pshufw	mm2, mm6, 1, 0, 3, 2)
	AS2(	pmuludq	mm6, mm5)
	ASS(	pshufw	mm3, mm5, 1, 0, 3, 2)
	AS2(	pmuludq	mm5, mm2)
	AS2(	pmuludq	mm2, mm3)
	AS2(	pmuludq	mm3, mm4)
	AS2(	pxor	mm7, mm7)
	AS2(	movd	[esp], mm6)
	AS2(	psrlq	mm6, 32)
	AS2(	movd	[esp+4], mm5)
	AS2(	psrlq	mm5, 32)
	AS2(	cmp		edi, ebp)
	ASJ(	je,		1, f)
	ASL(0)
	AS2(	movq	mm0, [esi])
	AS2(	paddq	mm0, [edi])
	AS2(	movq	mm1, [esi+8])
	AS2(	paddq	mm1, [edi+8])
	AS2(	add		esi, 16)
	AS2(	add		edi, 16)
	AS2(	movq	mm4, mm0)
	AS2(	paddq	mm5, mm2)
	ASS(	pshufw	mm2, mm0, 1, 0, 3, 2)
	AS2(	pmuludq	mm0, mm1)
	AS2(	movd	[esp+8], mm3)
	AS2(	psrlq	mm3, 32)
	AS2(	paddq	mm5, mm3)
	ASS(	pshufw	mm3, mm1, 1, 0, 3, 2)
	AS2(	pmuludq	mm1, mm2)
	AS2(	pmuludq	mm2, mm3)
	AS2(	pmuludq	mm3, mm4)
	AS2(	movd	mm4, [esp])
	AS2(	paddq	mm7, mm4)
	AS2(	movd	mm4, [esp+4])
	AS2(	paddq	mm6, mm4)
	AS2(	movd	mm4, [esp+8])
	AS2(	paddq	mm6, mm4)
	AS2(	movd	[esp], mm0)
	AS2(	psrlq	mm0, 32)
	AS2(	paddq	mm6, mm0)
	AS2(	movd	[esp+4], mm1)
	AS2(	psrlq	mm1, 32)
	AS2(	paddq	mm5, mm1)
	AS2(	cmp		edi, ebp)
	ASJ(	jne,	0, b)
	ASL(1)
	AS2(	paddq	mm5, mm2)
	AS2(	movd	[esp+8], mm3)
	AS2(	psrlq	mm3, 32)
	AS2(	paddq	mm5, mm3)
	AS2(	movd	mm4, [esp])
	AS2(	paddq	mm7, mm4)
	AS2(	movd	mm4, [esp+4])
	AS2(	paddq	mm6, mm4)
	AS2(	movd	mm4, [esp+8])
	AS2(	paddq	mm6, mm4)
	AS2(	lea		ebp, [8*ebx])
	AS2(	sub		edi, ebp)		// reset edi to start of nhK

	AS2(	movd	[esp], mm7)
	AS2(	psrlq	mm7, 32)
	AS2(	paddq	mm6, mm7)
	AS2(	movd	[esp+4], mm6)
	AS2(	psrlq	mm6, 32)
	AS2(	paddq	mm5, mm6)
	AS2(	psllq	mm5, 2)
	AS2(	psrlq	mm5, 2)

#define a0 [eax+2*4]
#define a1 [eax+3*4]
#define a2 [eax+0*4]
#define a3 [eax+1*4]
#define k0 [eax+2*8+2*4]
#define k1 [eax+2*8+3*4]
#define k2 [eax+2*8+0*4]
#define k3 [eax+2*8+1*4]
	AS2(	test	dl, dl)
	ASJ(	jz,		2, f)
	AS2(	movd	mm1, k0)
	AS2(	movd	mm0, [esp])
	AS2(	paddq	mm0, mm1)
	AS2(	movd	a0, mm0)
	AS2(	psrlq	mm0, 32)
	AS2(	movd	mm1, k1)
	AS2(	movd	mm2, [esp+4])
	AS2(	paddq	mm1, mm2)
	AS2(	paddq	mm0, mm1)
	AS2(	movd	a1, mm0)
	AS2(	psrlq	mm0, 32)
	AS2(	paddq	mm5, k2)
	AS2(	paddq	mm0, mm5)
	AS2(	movq	a2, mm0)
	AS2(	xor		edx, edx)
	ASJ(	jmp,	3, f)
	ASL(2)
	AS2(	movd	mm0, a3)
	AS2(	movq	mm4, mm0)
	AS2(	pmuludq	mm0, k3)		// a3*k3
	AS2(	movd	mm1, a0)
	AS2(	pmuludq	mm1, k2)		// a0*k2
	AS2(	movd	mm2, a1)
	AS2(	movd	mm6, k1)
	AS2(	pmuludq	mm2, mm6)		// a1*k1
	AS2(	movd	mm3, a2)
	AS2(	psllq	mm0, 1)
	AS2(	paddq	mm0, mm5)
	AS2(	movq	mm5, mm3)
	AS2(	movd	mm7, k0)
	AS2(	pmuludq	mm3, mm7)		// a2*k0
	AS2(	pmuludq	mm4, mm7)		// a3*k0
	AS2(	pmuludq	mm5, mm6)		// a2*k1
	AS2(	paddq	mm0, mm1)
	AS2(	movd	mm1, a1)
	AS2(	paddq	mm4, mm5)
	AS2(	movq	mm5, mm1)
	AS2(	pmuludq	mm1, k2)		// a1*k2
	AS2(	paddq	mm0, mm2)
	AS2(	movd	mm2, a0)
	AS2(	paddq	mm0, mm3)
	AS2(	movq	mm3, mm2)
	AS2(	pmuludq	mm2, k3)		// a0*k3
	AS2(	pmuludq	mm3, mm7)		// a0*k0
	AS2(	movd	[esp+8], mm0)
	AS2(	psrlq	mm0, 32)
	AS2(	pmuludq	mm7, mm5)		// a1*k0
	AS2(	pmuludq	mm5, k3)		// a1*k3
	AS2(	paddq	mm0, mm1)
	AS2(	movd	mm1, a2)
	AS2(	pmuludq	mm1, k2)		// a2*k2
	AS2(	paddq	mm0, mm2)
	AS2(	paddq	mm0, mm4)
	AS2(	movq	mm4, mm0)
	AS2(	movd	mm2, a3)
	AS2(	pmuludq	mm2, mm6)		// a3*k1
	AS2(	pmuludq	mm6, a0)		// a0*k1
	AS2(	psrlq	mm0, 31)
	AS2(	paddq	mm0, mm3)
	AS2(	movd	mm3, [esp])
	AS2(	paddq	mm0, mm3)
	AS2(	movd	mm3, a2)
	AS2(	pmuludq	mm3, k3)		// a2*k3
	AS2(	paddq	mm5, mm1)
	AS2(	movd	mm1, a3)
	AS2(	pmuludq	mm1, k2)		// a3*k2
	AS2(	paddq	mm5, mm2)
	AS2(	movd	mm2, [esp+4])
	AS2(	psllq	mm5, 1)
	AS2(	paddq	mm0, mm5)
	AS2(	psllq	mm4, 33)
	AS2(	movd	a0, mm0)
	AS2(	psrlq	mm0, 32)
	AS2(	paddq	mm6, mm7)
	AS2(	movd	mm7, [esp+8])
	AS2(	paddq	mm0, mm6)
	AS2(	paddq	mm0, mm2)
	AS2(	paddq	mm3, mm1)
	AS2(	psllq	mm3, 1)
	AS2(	paddq	mm0, mm3)
	AS2(	psrlq	mm4, 1)
	AS2(	movd	a1, mm0)
	AS2(	psrlq	mm0, 32)
	AS2(	por		mm4, mm7)
	AS2(	paddq	mm0, mm4)
	AS2(	movq	a2, mm0)
#undef a0
#undef a1
#undef a2
#undef a3
#undef k0
#undef k1
#undef k2
#undef k3

	ASL(3)
	AS2(	test	ecx, ecx)
	ASJ(	jnz,	4, b)

	AS2(	add		esp, 12)
	AS1(	pop		ebp)
	AS1(	emms)
#ifdef __GNUC__
	".att_syntax prefix;"
	AS2(	mov	%0, %%ebx)
		: "=m" (temp)
		: "m" (m_L1KeyLength), "c" (blocksRemainingInWord64), "S" (data), "D" (nhK+tagPart*2), "d" (m_isFirstBlock), "a" (polyS+tagPart*4)
		: "memory", "cc"
	);
#endif
}
#endif

#if VMAC_BOOL_WORD128
	#define DeclareNH(a) word128 a=0
	#define MUL64(rh,rl,i1,i2) {word128 p = word128(i1)*(i2); rh = word64(p>>64); rl = word64(p);}
	#define AccumulateNH(a, b, c) a += word128(b)*(c)
	#define Multiply128(r, i1, i2) r = word128(word64(i1)) * word64(i2)
#else
	#if _MSC_VER >= 1400 && !defined(__INTEL_COMPILER)
		#define MUL32(a, b) __emulu(word32(a), word32(b))
	#else
		#define MUL32(a, b) ((word64)((word32)(a)) * (word32)(b))
	#endif
	#if defined(CRYPTOPP_X64_ASM_AVAILABLE)
		#define DeclareNH(a)			word64 a##0=0, a##1=0
		#define MUL64(rh,rl,i1,i2)		asm ("mulq %3" : "=a"(rl), "=d"(rh) : "a"(i1), "g"(i2) : "cc");
		#define AccumulateNH(a, b, c)	asm ("mulq %3; addq %%rax, %0; adcq %%rdx, %1" : "+r"(a##0), "+r"(a##1) : "a"(b), "g"(c) : "%rdx", "cc");
		#define ADD128(rh,rl,ih,il)     asm ("addq %3, %1; adcq %2, %0" : "+r"(rh),"+r"(rl) : "r"(ih),"r"(il) : "cc");
	#elif defined(_MSC_VER) && !defined(CRYPTOPP_SLOW_WORD64)
		#define DeclareNH(a) word64 a##0=0, a##1=0
		#define MUL64(rh,rl,i1,i2)   (rl) = _umul128(i1,i2,&(rh));
		#define AccumulateNH(a, b, c)	{\
			word64 ph, pl;\
			pl = _umul128(b,c,&ph);\
			a##0 += pl;\
			a##1 += ph + (a##0 < pl);}
	#else
		#define VMAC_BOOL_32BIT 1
		#define DeclareNH(a) word64 a##0=0, a##1=0, a##2=0
		#define MUL64(rh,rl,i1,i2)                                               \
			{   word64 _i1 = (i1), _i2 = (i2);                                 \
				word64 m1= MUL32(_i1,_i2>>32);                                 \
				word64 m2= MUL32(_i1>>32,_i2);                                 \
				rh         = MUL32(_i1>>32,_i2>>32);                             \
				rl         = MUL32(_i1,_i2);                                     \
				ADD128(rh,rl,(m1 >> 32),(m1 << 32));                             \
				ADD128(rh,rl,(m2 >> 32),(m2 << 32));                             \
			}
		#define AccumulateNH(a, b, c)	{\
			word64 p = MUL32(b, c);\
			a##1 += word32((p)>>32);\
			a##0 += word32(p);\

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品综合免费视频观看| 亚洲国产精品麻豆| 91麻豆国产在线观看| 日韩午夜精品视频| 91麻豆.com| 免费看欧美女人艹b| 国产农村妇女毛片精品久久麻豆| 91丨porny丨最新| 蜜臀91精品一区二区三区| 777亚洲妇女| 成人av网站免费| 日韩激情一二三区| 亚洲欧洲另类国产综合| 在线不卡中文字幕播放| 99久久免费精品高清特色大片| 亚洲成av人影院在线观看网| 久久综合色8888| 色成年激情久久综合| 日韩影院精彩在线| 成人免费小视频| 欧美va亚洲va在线观看蝴蝶网| av综合在线播放| 日韩精品一级中文字幕精品视频免费观看 | 国产伦精品一区二区三区免费迷| 亚洲国产成人在线| 日韩一二在线观看| 97se亚洲国产综合自在线不卡| 狠狠色狠狠色综合系列| 一区免费观看视频| 国产精品久久久久久一区二区三区 | av成人免费在线观看| 婷婷久久综合九色国产成人| 国产精品免费视频网站| 欧美白人最猛性xxxxx69交| 波多野结衣精品在线| 粉嫩aⅴ一区二区三区四区五区| 亚洲五月六月丁香激情| 国产精品电影院| 久久美女艺术照精彩视频福利播放| 免费黄网站欧美| 免费观看一级欧美片| 亚洲123区在线观看| 亚洲欧美另类久久久精品2019| 久久亚洲综合色| 日韩精品一区二区在线| 欧美美女一区二区| 91成人在线观看喷潮| 91视频在线观看| 国产精品456露脸| 国产夫妻精品视频| 国产一区二区三区四区在线观看| 日本欧美在线观看| 亚洲国产精品综合小说图片区| 亚洲一线二线三线久久久| 中文字幕精品一区二区精品绿巨人 | 视频一区国产视频| 亚洲自拍偷拍网站| 丝袜亚洲另类丝袜在线| 亚洲国产成人av网| 亚洲第一二三四区| 亚洲v中文字幕| 一区二区三区欧美在线观看| 亚洲成人av一区二区| 亚洲国产成人tv| 日日夜夜免费精品| 日本伊人精品一区二区三区观看方式| 日本va欧美va欧美va精品| 日韩av中文字幕一区二区| 日韩影院免费视频| 九九国产精品视频| 国产成人精品综合在线观看 | 色伊人久久综合中文字幕| 91免费小视频| 欧美午夜精品理论片a级按摩| 在线日韩国产精品| 欧美色精品在线视频| 欧美丰满少妇xxxbbb| 欧美一级免费观看| 亚洲在线免费播放| 亚洲欧美区自拍先锋| 蜜桃91丨九色丨蝌蚪91桃色| 久久99精品国产91久久来源| 国产在线精品不卡| 播五月开心婷婷综合| 成人午夜精品一区二区三区| 99麻豆久久久国产精品免费优播| 777亚洲妇女| 中文字幕在线观看不卡| 三级成人在线视频| k8久久久一区二区三区 | 欧美日本韩国一区| 久久网站最新地址| 亚洲国产sm捆绑调教视频| 国产伦精一区二区三区| 欧美日韩精品专区| 国产精品久久久久久久久免费樱桃 | 成人高清免费观看| 欧美日韩一区二区三区在线 | 国产日韩欧美不卡在线| 午夜精品福利在线| 91亚洲国产成人精品一区二三| 日韩一区二区电影网| 亚洲美女屁股眼交3| 国产呦萝稀缺另类资源| 欧美欧美欧美欧美首页| 亚洲欧美综合色| 久久97超碰色| 91精品国产一区二区人妖| 亚洲黄色免费网站| 成人免费看黄yyy456| 欧美精品一区二| 男女男精品网站| 欧美日韩免费观看一区二区三区| 中文字幕不卡在线播放| 国内成+人亚洲+欧美+综合在线| 欧美日韩在线播放三区| 亚洲欧美日韩久久| 成人精品免费网站| 国产三级精品在线| 国产精品资源网| 精品国产1区二区| 免费一级欧美片在线观看| 欧美日本一区二区| 亚洲午夜电影在线观看| 欧洲激情一区二区| 一区二区三区四区av| 成人福利视频网站| 国产精品青草久久| 不卡一区二区在线| 中文字幕在线观看不卡视频| 成人中文字幕在线| 亚洲国产精品t66y| 成人黄色在线网站| 中文字幕一区二区三区精华液 | 亚洲尤物视频在线| 欧美中文字幕一二三区视频| 亚洲免费观看高清完整版在线 | 高清不卡一二三区| 国产女人18毛片水真多成人如厕| 国产成人免费9x9x人网站视频| 国产亚洲欧美一区在线观看| 国产精品一区专区| 国产精品乱人伦中文| www.av精品| 亚洲欧美韩国综合色| 欧美亚洲一区三区| 亚洲成av人片在线| 日韩欧美亚洲一区二区| 精品一区二区日韩| 国产欧美日本一区二区三区| 粉嫩蜜臀av国产精品网站| 国产精品高潮呻吟| 在线观看视频91| 日韩精品一区第一页| 久久久影视传媒| 91丝袜美腿高跟国产极品老师 | 欧美精品一区二区三区在线 | 成人欧美一区二区三区小说| 欧美日本免费一区二区三区| 三级精品在线观看| 精品国产制服丝袜高跟| www.日韩精品| 午夜一区二区三区视频| 日韩亚洲电影在线| 国产成人免费网站| 亚洲国产一区视频| 精品国产麻豆免费人成网站| 风间由美性色一区二区三区| 亚洲精品国产品国语在线app| 欧美日韩午夜精品| 国产在线精品一区在线观看麻豆| 国产精品日韩成人| 欧美色综合影院| 国产一区二区三区免费| 亚洲欧洲日产国码二区| 欧美精品aⅴ在线视频| 国产美女精品在线| 亚洲一区二区三区精品在线| www欧美成人18+| 色94色欧美sute亚洲13| 韩国一区二区视频| 一个色综合av| 国产午夜精品一区二区三区四区 | 久久精品在线观看| 欧美天天综合网| 国产精品996| 日韩激情在线观看| 自拍视频在线观看一区二区| 欧美福利视频一区| 91老司机福利 在线| 精品夜夜嗨av一区二区三区| 亚洲精品日产精品乱码不卡| 精品剧情在线观看| 欧美日韩国产综合一区二区| 粉嫩一区二区三区在线看| 麻豆视频一区二区| 亚洲一区中文在线| 国产精品久久毛片av大全日韩| 欧美一区二区精品| 欧美亚洲综合在线|