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

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

?? blowfish.c

?? 一個加密庫代碼
?? C
字號:
/*
 * Copyright 1997-2005 Markus Hahn 
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "Blowfish.h"

// include the boxes init. data
#include "BlowfishBoxes.h"


// Blowfish work context


typedef struct 
{
	// the boxes
	WORD32 boxes[BOXES_SIZE];

	// session CBC IV
	WORD32 lCBCLo;
	WORD32 lCBCHi;

	BYTEBOOL blLegacy;
} 
BLOWFISHCTX;



// prototypes of the support routines
void __KeySetup(BLOWFISHCTX*, const WORD8*, WORD32);
void _BlowfishEncipher(BLOWFISHCTX*, WORD32*, WORD32*);
void _BlowfishDecipher(BLOWFISHCTX*, WORD32*, WORD32*);
BYTEBOOL _isWeakKey(BLOWFISHCTX*);


// box access constants
#define PBOX_POS    0
#define SBOX1_POS   PBOX_SIZE
#define SBOX2_POS   (PBOX_SIZE + SBOX_SIZE)
#define SBOX3_POS   (PBOX_SIZE + 2 * SBOX_SIZE)
#define SBOX4_POS   (PBOX_SIZE + 3 * SBOX_SIZE)



WORD32 Blowfish_GetCipherInfo
(CIPHERINFOBLOCK* pInfo) 
{
	WORD32 lI;
	WORD8* pSrc;
	WORD8* pDst;
	CIPHERINFOBLOCK tempinfo;

	// prepare the information context
	tempinfo.lSizeOf = pInfo->lSizeOf;
	tempinfo.lBlockSize = BLOWFISH_BLOCKSIZE;
	tempinfo.lKeySize = BLOWFISH_KEYSIZE; 
	tempinfo.blOwnHasher = BOOL_FALSE;
	tempinfo.lInitDataSize = BLOWFISH_BLOCKSIZE;
	tempinfo.lContextSize = sizeof(BLOWFISHCTX);
	tempinfo.bCipherIs = CIPHER_IS_BLOCKLINK;

	// copy as many bytes of the information block as possible
	pSrc = (WORD8*) &tempinfo;
	pDst = (WORD8*) pInfo;

	for (lI = 0; lI < tempinfo.lSizeOf; lI++)
		*pDst++ = *pSrc++;

	return CIPHER_ERROR_NOERROR;
}



WORD32 Blowfish_SelfTest 
(void* pTestContext) 
{
	// test the cipher for correct encryption and decryption
	BLOWFISHCTX* testCtx = (BLOWFISHCTX*) pTestContext;

	// test vector #1 (check for the signed bug)
	WORD8 testKey1[8] = { 0x1c, 0x58, 0x7f, 0x1c, 0x13, 0x92, 0x4f, 0xef };
	WORD32 tv_p1[2] = { 0x30553228, 0x6d6f295a };
	WORD32 tv_c1[2] = { 0x55cb3774, 0xd13ef201 };
	WORD32 tv_t1[2] = { 0x00000000, 0x00000000 };

	// test vector #2 (offical vector by Bruce Schneier)
	WORD8* testKey2 = (WORD8*) "Who is John Galt?";
	WORD32 tv_p2[2] = { 0xfedcba98, 0x76543210 };
	WORD32 tv_c2[2] = { 0xcc91732b, 0x8022f684 };
	WORD32 tv_t2[2] = { 0x00000000, 0x00000000 };

	// test vector #3 (from a newer release of Counterpane),
	// also test correct memory handling
	WORD8 testKey3[8] = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 };
	WORD32 tv_p3[2] = { 0x01234567, 0x89abcdef };	
	WORD32 tv_c3[2] = { 0x0aceab0f, 0xc6a0a28d };
	WORD32 tv_t3[2] = { 0x00000000, 0x00000000 };

	// (the legacy flag actually does not matter in this test)
	testCtx->blLegacy = BOOL_FALSE;

	// test pass #1
	__KeySetup(testCtx, testKey1, 8);
	_BlowfishEncipher(testCtx, tv_p1, tv_t1);
	if ((tv_c1[0] != tv_t1[0]) || (tv_c1[1] != tv_t1[1])) 
		return CIPHER_ERROR_INVALID;
	_BlowfishDecipher(testCtx, tv_t1, tv_t1);
	if ((tv_p1[0] != tv_t1[0]) || (tv_p1[1] != tv_t1[1]))
		return CIPHER_ERROR_INVALID;

	// test pass #2
	__KeySetup(testCtx, testKey2, 17);
	_BlowfishEncipher(testCtx, tv_p2, tv_t2);
	if ((tv_c2[0] != tv_t2[0]) || (tv_c2[1] != tv_t2[1]))
		return CIPHER_ERROR_INVALID;
	_BlowfishDecipher(testCtx, tv_t2, tv_t2);
	if ((tv_p2[0] != tv_t2[0]) || (tv_p2[1] != tv_t2[1])) 
		return CIPHER_ERROR_INVALID;

	// test pass #3 (make sure we are compatible to the standard since
	// we read out of the memory bytewise)
	__KeySetup(testCtx, testKey3, 8);
	_BlowfishEncipher(testCtx, tv_p3, tv_t3);
	if ((tv_c3[0] != tv_t3[0]) || (tv_c3[1] != tv_t3[1]))
		return CIPHER_ERROR_INVALID;
	_BlowfishDecipher(testCtx, tv_t3, tv_t3);
	if ((tv_p3[0] != tv_t3[0]) || (tv_p3[1] != tv_t3[1])) 
		return CIPHER_ERROR_INVALID;

	// all tests passed
	return CIPHER_ERROR_NOERROR;
}



WORD32 Blowfish_CreateWorkContext
(void* pContext,
 const WORD8* pKey,
 WORD32 lKeyLen,
 WORD32 lMode,
 void* pInitData,
 Cipher_RandomGenerator GetRndBytes,
 const void* pRndGenData) 
{
	BLOWFISHCTX* pCtx = (BLOWFISHCTX*) pContext;
	WORD8* pbInit;

	// legacy or standard?
	pCtx->blLegacy = (CIPHER_GETFLAGS(lMode) & CIPHER_MODE_FLAG_LEGACY) ? BOOL_TRUE : BOOL_FALSE;

	// do the key setup (we ignore the passed key length now)
	__KeySetup(pCtx, pKey, BLOWFISH_KEYSIZE);

	// for encryption create a CBC IV
	pbInit = (WORD8*) pInitData;
	if (CIPHER_GETMODE(lMode) == CIPHER_MODE_ENCRYPT)
	{
		GetRndBytes(pbInit, BLOWFISH_BLOCKSIZE, pRndGenData);
	}

	// set the CBC IV
	if (pCtx->blLegacy)
	{
		pCtx->lCBCLo = BYTES_TO_WORD32_X86(pbInit);
		pCtx->lCBCHi = BYTES_TO_WORD32_X86(pbInit + 4);
	}
	else
	{
		pCtx->lCBCHi = BYTES_TO_WORD32(pbInit);
		pCtx->lCBCLo = BYTES_TO_WORD32(pbInit + 4);
	}

	// check for weak keys and quit
	return (_isWeakKey(pCtx) == BOOL_TRUE) ? CIPHER_ERROR_WEAKKEY : CIPHER_ERROR_NOERROR;
}


void Blowfish_ResetWorkContext
(void* pContext,
 WORD32 lMode,
 void* pInitData,
 Cipher_RandomGenerator GetRndBytes,
 const void* pRndGenData) 
{
	BLOWFISHCTX* pCtx = (BLOWFISHCTX*) pContext;

	// just reset the CBC IV 
	WORD8* pbInit = (WORD8*) pInitData;
	if (CIPHER_GETMODE(lMode) == CIPHER_MODE_ENCRYPT) 
		GetRndBytes(pbInit, 8, pRndGenData);

	if (pCtx->blLegacy)
	{
		pCtx->lCBCLo = BYTES_TO_WORD32_X86(pbInit);
		pCtx->lCBCHi = BYTES_TO_WORD32_X86(pbInit + 4);
	}
	else
	{
		pCtx->lCBCHi = BYTES_TO_WORD32(pbInit);
		pCtx->lCBCLo = BYTES_TO_WORD32(pbInit + 4);
	}
}



WORD32 Blowfish_DestroyWorkContext
(void* pContext) 
{
	// clear the context
	int nI;
	WORD8* clearIt = (WORD8*) pContext;
	for (nI = 0; nI < sizeof(BLOWFISHCTX); nI++) clearIt[nI] = 0x00;
	return CIPHER_ERROR_NOERROR;
}



void Blowfish_EncryptBuffer
(void* pContext,
 const void* pSource,
 void* pTarget,
 WORD32 lNumOfBytes) 
{
	WORD32 lI;
	WORD8* pbIn = (WORD8*) pSource;
	WORD8* pbOut = (WORD8*) pTarget;
	WORD32 blk[2];
	BLOWFISHCTX* pCtx = (BLOWFISHCTX*) pContext;

	// anything to encrypt?
	if (0 == (lNumOfBytes &= ~7)) return;

	// work through all blocks... 
	for (lI = 0; lI < lNumOfBytes; lI += 8) 
	{
		// get and chain the block
		if (pCtx->blLegacy)
		{
			blk[0] = BYTES_TO_WORD32_X86(pbIn) ^ pCtx->lCBCLo;
			blk[1] = BYTES_TO_WORD32_X86(pbIn + 4) ^ pCtx->lCBCHi;
		}
		else
		{
			blk[0] = BYTES_TO_WORD32(pbIn)  ^ pCtx->lCBCHi;
			blk[1] = BYTES_TO_WORD32(pbIn + 4) ^ pCtx->lCBCLo;
		}
		pbIn += 8;

		// encrypt the block
		_BlowfishEncipher(pCtx, blk, blk);

		// copy it back and set the new CBC IV
		if (pCtx->blLegacy)
		{
			WORD32_TO_BYTES_X86(blk[0], pbOut)
			WORD32_TO_BYTES_X86(blk[1], pbOut + 4)

			pCtx->lCBCLo = blk[0];
			pCtx->lCBCHi = blk[1];
		}
		else
		{
			WORD32_TO_BYTES(blk[0], pbOut)
			WORD32_TO_BYTES(blk[1], pbOut + 4)
			
			pCtx->lCBCHi = blk[0];
			pCtx->lCBCLo = blk[1];
		}

		pbOut += 8;
	}
}


void Blowfish_DecryptBuffer
(void* pContext,
 const void* pSource,
 void* pTarget, 
 WORD32 lNumOfBytes,
 const void* pPreviousBlock) 
{
	WORD32 lI;
	WORD32 blk[2];
	WORD32 saveIV[2];
	WORD8* pbIn = (WORD8*) pSource;
	WORD8* pbOut = (WORD8*) pTarget;
	WORD8* pbPrev = (WORD8*) pPreviousBlock;
	BLOWFISHCTX* pCtx = (BLOWFISHCTX*) pContext;

	// anything to decrypt?
	if (0 == (lNumOfBytes &= ~7)) return;

	// load a new CBC IV, if necessary 
	if (CIPHER_NULL != pbPrev)  
	{
		if (pCtx->blLegacy)
		{
			pCtx->lCBCLo = BYTES_TO_WORD32_X86(pbPrev);
			pCtx->lCBCHi = BYTES_TO_WORD32_X86(pbPrev + 4);
		}
		else
		{
			pCtx->lCBCHi = BYTES_TO_WORD32(pbPrev);
			pCtx->lCBCLo = BYTES_TO_WORD32(pbPrev + 4);
		}
	}

	// work through all blocks... 
	for (lI = 0; lI < lNumOfBytes; lI += 8) 
	{
		// load the current block
		if (pCtx->blLegacy)
		{
			blk[0] = BYTES_TO_WORD32_X86(pbIn);
			blk[1] = BYTES_TO_WORD32_X86(pbIn + 4);
		}
		else
		{
			blk[0] = BYTES_TO_WORD32(pbIn);
			blk[1] = BYTES_TO_WORD32(pbIn + 4);
		}
		pbIn += 8;

		// save the recent CBC IV 
		saveIV[0] = blk[0];
		saveIV[1] = blk[1];

		// decrypt the block 
		_BlowfishDecipher(pCtx, blk, blk);

		// unchain, store back the recent block and set the new IV
		if (pCtx->blLegacy)
		{
			blk[0] ^= pCtx->lCBCLo;
			blk[1] ^= pCtx->lCBCHi;
			
			WORD32_TO_BYTES_X86(blk[0], pbOut)
			WORD32_TO_BYTES_X86(blk[1], pbOut + 4)

			pCtx->lCBCLo = saveIV[0];
			pCtx->lCBCHi = saveIV[1];
		}
		else
		{
			blk[0] ^= pCtx->lCBCHi;
			blk[1] ^= pCtx->lCBCLo;
			
			WORD32_TO_BYTES(blk[0], pbOut)
			WORD32_TO_BYTES(blk[1], pbOut + 4)

			pCtx->lCBCHi = saveIV[0];
			pCtx->lCBCLo = saveIV[1];
		}

		pbOut += 8;
	}
}


// support routines...


// to setup a key (was extracted for an easier selftest implementation)
void __KeySetup
(BLOWFISHCTX* pCtx,
 const WORD8* pKey,
 WORD32 lKeyLen) 
{ 
	int nI;
	int nJ;
	WORD32 lKeyPos = 0;
	WORD32 lBuf = 0;
	WORD32 zerostr[2];

	// copy the init. data to the context
	for (nI = 0; nI < BOXES_SIZE; nI++) pCtx->boxes[nI] = boxes_init[nI];

	// we accept zero keys 
	if (lKeyLen == 0) return;

	// xor the key over the p-boxes, warp around
	for (nI = 0; nI < PBOX_SIZE; nI++) 
	{
		for (nJ = 0; nJ < 4; nJ++) 
		{
			if (lKeyPos == lKeyLen) lKeyPos = 0;
			lBuf <<= 8;
			lBuf |= (WORD32)(pKey[lKeyPos++] & 0x0ff);
		}
		pCtx->boxes[nI] ^= lBuf;
	}

	// now encrypt the all zero string and replace all boxes...
	zerostr[0] = zerostr[1] = 0x00000000;

	// encrypt the p- and the s-boxes (all together using the base pointer)
	for (nI = 0; nI < BOXES_SIZE; nI += 2) 
	{
		_BlowfishEncipher(pCtx, zerostr, zerostr);
		pCtx->boxes[nI]   = zerostr[0];
		pCtx->boxes[nI+1] = zerostr[1];
	}
}


// one encryption loop (swapable)
#define ENC_LOOP(LOOPNUM, LEFT, RIGHT)	\
	LEFT ^= pbox[LOOPNUM];				\
	RIGHT ^= ((sbox1[ LEFT >> 24] +		\
	sbox2[(LEFT >> 16) & 0x0ff]) ^		\
	sbox3[(LEFT >> 8) & 0x0ff]) +		\
	sbox4[ LEFT & 0x0ff];


// the encryption routine
void _BlowfishEncipher
(BLOWFISHCTX* pCtx,
 WORD32* srcbuf,
 WORD32* targetbuf) 
{
	// create box pointers for faster access   
	WORD32* pbox = &pCtx->boxes[PBOX_POS];
	WORD32* sbox1 = &pCtx->boxes[SBOX1_POS];
	WORD32* sbox2 = &pCtx->boxes[SBOX2_POS];
	WORD32* sbox3 = &pCtx->boxes[SBOX3_POS];
	WORD32* sbox4 = &pCtx->boxes[SBOX4_POS];

	// get the block
	WORD32 lLeft = srcbuf[0];
	WORD32 lRight = srcbuf[1];

	// the encryption loop (unrolled) */
	ENC_LOOP(0, lLeft, lRight)  
		ENC_LOOP(1, lRight, lLeft)  
		ENC_LOOP(2, lLeft, lRight)  
		ENC_LOOP(3, lRight, lLeft)  
		ENC_LOOP(4, lLeft, lRight)  
		ENC_LOOP(5, lRight, lLeft)  
		ENC_LOOP(6, lLeft, lRight)  
		ENC_LOOP(7, lRight, lLeft)  
		ENC_LOOP(8, lLeft, lRight)  
		ENC_LOOP(9, lRight, lLeft)  
		ENC_LOOP(10, lLeft, lRight)  
		ENC_LOOP(11, lRight, lLeft)  
		ENC_LOOP(12, lLeft, lRight)  
		ENC_LOOP(13, lRight, lLeft)  
		ENC_LOOP(14, lLeft, lRight)  
		ENC_LOOP(15, lRight, lLeft)  

	// swap, finalize and store the block back
	targetbuf[1] = lLeft ^ pbox[16];
	targetbuf[0] = lRight ^ pbox[17];
}


// the decryption routine
void _BlowfishDecipher
(BLOWFISHCTX* pCtx,
 WORD32* srcbuf,
 WORD32* targetbuf) 
{
	// create box pointers for faster access   
	WORD32* pbox = &pCtx->boxes[PBOX_POS];
	WORD32* sbox1 = &pCtx->boxes[SBOX1_POS];
	WORD32* sbox2 = &pCtx->boxes[SBOX2_POS];
	WORD32* sbox3 = &pCtx->boxes[SBOX3_POS];
	WORD32* sbox4 = &pCtx->boxes[SBOX4_POS];

	// get the block
	WORD32 lLeft = srcbuf[0];
	WORD32 lRight = srcbuf[1];

	// the decryption loop (unrolled)
	ENC_LOOP(17, lLeft, lRight)  
		ENC_LOOP(16, lRight, lLeft)  
		ENC_LOOP(15, lLeft, lRight)  
		ENC_LOOP(14, lRight, lLeft)  
		ENC_LOOP(13, lLeft, lRight)  
		ENC_LOOP(12, lRight, lLeft)  
		ENC_LOOP(11, lLeft, lRight)  
		ENC_LOOP(10, lRight, lLeft)  
		ENC_LOOP(9, lLeft, lRight)  
		ENC_LOOP(8, lRight, lLeft)  
		ENC_LOOP(7, lLeft, lRight)  
		ENC_LOOP(6, lRight, lLeft)  
		ENC_LOOP(5, lLeft, lRight)  
		ENC_LOOP(4, lRight, lLeft)  
		ENC_LOOP(3, lLeft, lRight)  
		ENC_LOOP(2, lRight, lLeft)

	// swap, finalize and store the block back
	targetbuf[1] = lLeft ^ pbox[1];
	targetbuf[0] = lRight ^ pbox[0];
}


// to check for a weak key (equal s-box entries)
BYTEBOOL _isWeakKey
(BLOWFISHCTX* pCtx) 
{
	int nI, nJ;
	for (nI = 0; nI < 255; nI++) 
	{
		for (nJ = nI + 1; nJ < 256; nJ++) 
		{
			if (pCtx->boxes[SBOX1_POS + nI] == pCtx->boxes[SBOX1_POS + nJ]) return BOOL_TRUE;   
			if (pCtx->boxes[SBOX2_POS + nI] == pCtx->boxes[SBOX2_POS + nJ]) return BOOL_TRUE;   
			if (pCtx->boxes[SBOX3_POS + nI] == pCtx->boxes[SBOX3_POS + nJ]) return BOOL_TRUE;   
			if (pCtx->boxes[SBOX4_POS + nI] == pCtx->boxes[SBOX4_POS + nJ]) return BOOL_TRUE;   
		}
	}

	// no weak key detected
	return BOOL_FALSE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品电影一区二区三区| 狠狠色丁香久久婷婷综| 中文字幕一区二区三区在线不卡 | 精品国产乱码久久久久久蜜臀| 欧美日韩一区小说| 日本乱码高清不卡字幕| 91在线观看美女| 91网页版在线| 91在线云播放| 91论坛在线播放| 91丝袜美女网| 91福利在线观看| 欧美亚洲高清一区| 欧美日韩精品系列| 欧美一区中文字幕| 欧美刺激脚交jootjob| 日韩欧美综合在线| 久久先锋影音av| 亚洲国产精品精华液2区45| 欧美国产97人人爽人人喊| 中文字幕第一区第二区| 一区二区三区在线观看欧美| 偷拍亚洲欧洲综合| 久久国产精品无码网站| 国产精一品亚洲二区在线视频| 国产成人亚洲综合a∨婷婷| 成人av资源下载| 一本一本大道香蕉久在线精品| 成人免费看的视频| 欧美一区二区三区日韩视频| 在线观看亚洲专区| 久久99在线观看| 国产成人小视频| heyzo一本久久综合| 91成人免费在线| 亚洲国产日韩在线一区模特| 亚洲成人av中文| 精品一区二区三区久久| 成人av第一页| 欧美丝袜丝交足nylons图片| 欧美一区二区黄| 久久久www成人免费毛片麻豆| 国产精品萝li| 亚洲成人av在线电影| 国产中文一区二区三区| 91色九色蝌蚪| 日韩视频免费观看高清在线视频| 国产人成亚洲第一网站在线播放 | 日韩视频在线一区二区| 日韩视频国产视频| 国产精品18久久久久久久久| 丁香婷婷深情五月亚洲| 欧洲亚洲精品在线| 欧美成人a视频| 亚洲欧美偷拍卡通变态| 美女爽到高潮91| 99国产精品国产精品久久| 欧美精品免费视频| 日韩一区二区视频在线观看| 99久久精品久久久久久清纯| 麻豆传媒一区二区三区| 国产精品亲子伦对白| 亚洲国产综合91精品麻豆| 亚洲电影激情视频网站| 成人永久免费视频| 91精品国产高清一区二区三区 | 色欧美88888久久久久久影院| 欧美一区二区三区免费在线看| 国产精品久久一卡二卡| 免费看精品久久片| 91高清在线观看| 国产精品毛片久久久久久久| 蜜臀久久久99精品久久久久久| 一本久久综合亚洲鲁鲁五月天| 亚洲精品一区二区三区香蕉| 亚洲国产视频a| 99在线精品视频| 99久久精品国产导航| 国产精品夜夜爽| 欧美精品乱人伦久久久久久| 亚洲精品视频在线看| 国产精品自拍av| 欧美电影免费观看高清完整版在线 | 欧美日韩精品一区二区三区蜜桃| 国产精品免费观看视频| 极品美女销魂一区二区三区免费| 欧美日本在线播放| 一区二区三区av电影| 成熟亚洲日本毛茸茸凸凹| 久久亚洲精精品中文字幕早川悠里| 日韩电影在线一区二区三区| 欧洲激情一区二区| 亚洲四区在线观看| 99精品黄色片免费大全| 日本一区二区不卡视频| 国产精品亚洲午夜一区二区三区 | 日精品一区二区| 欧美色老头old∨ideo| 一区二区三区免费网站| 亚洲午夜av在线| 综合分类小说区另类春色亚洲小说欧美| 日韩欧美在线影院| 亚洲第一会所有码转帖| 在线欧美日韩精品| 亚洲精品免费在线观看| 色网综合在线观看| 亚洲欧美区自拍先锋| 99热在这里有精品免费| 成人av在线一区二区三区| 成人a免费在线看| 激情欧美一区二区| 51午夜精品国产| 日韩精品高清不卡| 欧美一区二区女人| 蜜臀av性久久久久蜜臀aⅴ流畅| 91麻豆精品国产| 免费高清成人在线| 精品久久久久久最新网址| 国产一区二区三区精品视频| 久久久久久久久久久黄色| 国产精品亚洲第一区在线暖暖韩国 | 欧美性受极品xxxx喷水| 亚洲6080在线| 日韩欧美不卡在线观看视频| 狠狠久久亚洲欧美| 欧美激情一区二区三区四区| 97久久精品人人做人人爽50路| 亚洲精品免费在线观看| 欧美人妖巨大在线| 久久精品国产精品亚洲综合| 26uuu另类欧美亚洲曰本| 国产白丝网站精品污在线入口| 国产精品久久久久久久久图文区| 91一区二区三区在线观看| 亚洲国产欧美另类丝袜| 日韩一区国产二区欧美三区| 国产一区视频网站| 中文子幕无线码一区tr| 日本韩国欧美一区| 麻豆国产欧美日韩综合精品二区| 久久久国产精品不卡| 91在线免费视频观看| 欧美日韩视频在线观看一区二区三区| 奇米888四色在线精品| 中文字幕乱码久久午夜不卡| 在线观看免费亚洲| 韩国精品一区二区| 亚洲天堂av老司机| 欧美大黄免费观看| 91欧美一区二区| 另类专区欧美蜜桃臀第一页| 中文欧美字幕免费| 在线不卡欧美精品一区二区三区| 国产一区二区三区| 亚洲一区二区在线观看视频| 精品噜噜噜噜久久久久久久久试看 | 男女激情视频一区| **欧美大码日韩| 日韩一级视频免费观看在线| 暴力调教一区二区三区| 蜜桃在线一区二区三区| 成人欧美一区二区三区黑人麻豆| 欧美一级一区二区| 91美女片黄在线观看| 激情综合色播激情啊| 一区二区三区自拍| 久久精品亚洲一区二区三区浴池 | 欧美成人免费网站| 在线观看一区二区视频| 高清久久久久久| 奇米精品一区二区三区在线观看 | 亚洲一区二区三区在线| 欧美—级在线免费片| 日韩亚洲欧美综合| 色婷婷精品久久二区二区蜜臂av | 免费观看91视频大全| 一区二区三区高清| 国产精品久久久久影院亚瑟| 精品日本一线二线三线不卡| 色八戒一区二区三区| 成人一区二区三区在线观看| 美国三级日本三级久久99| 亚洲第一会所有码转帖| 亚洲日本在线天堂| 中文字幕不卡在线| 337p日本欧洲亚洲大胆色噜噜| 欧美日韩不卡一区二区| 在线免费精品视频| 91小视频在线观看| 成人免费看的视频| 国产91精品欧美| 国产福利一区二区三区在线视频| 免费在线观看一区二区三区| 亚洲国产精品久久久男人的天堂| 成人免费在线播放视频| 国产精品二三区| 国产精品国产精品国产专区不片| 国产亚洲人成网站| 国产丝袜在线精品| 久久久久久久久久看片|