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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cryptmis.c

?? 提供了很多種加密算法和CA認(rèn)證及相關(guān)服務(wù)如CMP、OCSP等的開發(fā)
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
/****************************************************************************
*																			*
*							cryptlib Misc Routines							*
*						Copyright Peter Gutmann 1992-2002					*
*																			*
****************************************************************************/

/* NSA motto: In God we trust... all others we monitor.
														-- Stanley Miller */
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "crypt.h"
#ifdef INC_ALL
  #include "md2.h"
  #include "md4.h"
  #include "md5.h"
  #include "ripemd.h"
  #include "sha.h"
  #include "stream.h"
#else
  #include "hash/md2.h"
  #include "hash/md4.h"
  #include "hash/md5.h"
  #include "hash/ripemd.h"
  #include "hash/sha.h"
  #include "keymgmt/stream.h"
#endif /* Compiler-specific includes */

/****************************************************************************
*																			*
*								Internal API Functions						*
*																			*
****************************************************************************/

/* Determine the parameters for a particular hash algorithm */

void getHashParameters( const CRYPT_ALGO hashAlgorithm,
						HASHFUNCTION *hashFunction, int *hashSize )
	{
	void md2HashBuffer( void *hashInfo, BYTE *outBuffer, 
						const BYTE *inBuffer, const int length, 
						const HASH_STATE hashState );
	void md5HashBuffer( void *hashInfo, BYTE *outBuffer, 
						const BYTE *inBuffer, const int length, 
						const HASH_STATE hashState );
	void ripemd160HashBuffer( void *hashInfo, BYTE *outBuffer, 
							  const BYTE *inBuffer, const int length, 
							  const HASH_STATE hashState );
	void shaHashBuffer( void *hashInfo, BYTE *outBuffer, 
						const BYTE *inBuffer, const int length, 
						const HASH_STATE hashState );
	void sha2HashBuffer( void *hashInfo, BYTE *outBuffer, 
						 const BYTE *inBuffer, const int length, 
						 const HASH_STATE hashState );

	switch( hashAlgorithm )
		{
		case CRYPT_ALGO_MD2:
			*hashFunction = md2HashBuffer;
			*hashSize = MD2_DIGESTSIZE;
			return;

		case CRYPT_ALGO_MD5:
			*hashFunction = md5HashBuffer;
			*hashSize = MD5_DIGEST_LENGTH;
			return;

		case CRYPT_ALGO_RIPEMD160:
			*hashFunction = ripemd160HashBuffer;
			*hashSize = RIPEMD160_DIGESTSIZE;
			return;

		case CRYPT_ALGO_SHA:
			*hashFunction = shaHashBuffer;
			*hashSize = SHA_DIGEST_LENGTH;
			return;
		}

	assert( NOTREACHED );
	}

/* Byte-reverse an array of 16- and 32-bit words to/from network byte order
   to account for processor endianness.  These routines assume the given
   count is a multiple of 16 or 32 bits.  They are safe even for CPU's with
   a word size > 32 bits since on a little-endian CPU the important 32 bits
   are stored first, so that by zeroizing the first 32 bits and oring the
   reversed value back in we don't need to rely on the processor only writing
   32 bits into memory */

void longReverse( LONG *buffer, int count )
	{
#if defined( _BIG_WORDS )
	BYTE *bufPtr = ( BYTE * ) buffer, temp;

	count /= 4;		/* sizeof( LONG ) != 4 */
	while( count-- )
		{
  #if 0
		LONG temp;

		/* This code is cursed */
		temp = value = *buffer & 0xFFFFFFFFUL;
		value = ( ( value & 0xFF00FF00UL ) >> 8  ) | \
				( ( value & 0x00FF00FFUL ) << 8 );
		value = ( ( value << 16 ) | ( value >> 16 ) ) ^ temp;
		*buffer ^= value;
		buffer = ( LONG * ) ( ( BYTE * ) buffer + 4 );
  #endif /* 0 */
		/* There's really no nice way to do this - the above code generates
		   misaligned accesses on processors with a word size > 32 bits, so
		   we have to work at the byte level (either that or turn misaligned
		   access warnings off by trapping the signal the access corresponds
		   to.  However a context switch per memory access is probably
		   somewhat slower than the current byte-twiddling mess) */
		temp = bufPtr[ 3 ];
		bufPtr[ 3 ] = bufPtr[ 0 ];
		bufPtr[ 0 ] = temp;
		temp = bufPtr[ 2 ];
		bufPtr[ 2 ] = bufPtr[ 1 ];
		bufPtr[ 1 ] = temp;
		bufPtr += 4;
		}
#elif defined( __WIN32__ )
	/* The following code which makes use of bswap is significantly faster
	   than what the compiler would otherwise generate.  This code is used
	   such a lot that it's worth the effort */
__asm {
	mov ecx, count
	mov edx, buffer
	shr ecx, 2
swapLoop:
	mov eax, [edx]
	bswap eax
	mov [edx], eax
	add edx, 4
	dec ecx
	jnz swapLoop
	}
#else
	LONG value;

	count /= sizeof( LONG );
	while( count-- )
		{
		value = *buffer;
		value = ( ( value & 0xFF00FF00UL ) >> 8  ) | \
				( ( value & 0x00FF00FFUL ) << 8 );
		*buffer++ = ( value << 16 ) | ( value >> 16 );
		}
#endif /* _BIG_WORDS */
	}

void wordReverse( WORD *buffer, int count )
	{
	WORD value;

	count /= sizeof( WORD );
	while( count-- )
		{
		value = *buffer;
		*buffer++ = ( value << 8 ) | ( value >> 8 );
		}
	}

/* Get a random (but not necessarily unpredictable) nonce.  It doesn't matter
   much what it is, as long as it's completely different for each call */

void getNonce( void *nonce, int nonceLength )
	{
	static BOOLEAN nonceDataInitialised = FALSE;
	static BYTE nonceData[ CRYPT_MAX_HASHSIZE ];
	static HASHFUNCTION hashFunction;
	BYTE *noncePtr = nonce;
	static int hashSize;

	enterMutex( MUTEX_NONCE );

	/* Get the hash algorithm information and seed the nonce data with a 
	   value which is guaranteed to be different each time (unless the entire 
	   program is rerun more than twice a second, which is doubtful) */
	if( !nonceDataInitialised )
		{
		getHashParameters( CRYPT_ALGO_SHA, &hashFunction, &hashSize );
		time( ( time_t * ) nonceData );
		nonceDataInitialised = TRUE;
		}

	/* Shuffle the pool and copy it to the output buffer until it's full */
	while( nonceLength > 0 )
		{
		const int count = ( nonceLength > hashSize ) ? hashSize : nonceLength;

		/* Hash the data and copy the appropriate amount of data to the output
		   buffer */
		hashFunction( NULL, nonceData, nonceData, hashSize, HASH_ALL );
		memcpy( noncePtr, nonceData, count );

		/* Move on to the next block of the output buffer */
		noncePtr += hashSize;
		nonceLength -= hashSize;
		}
	
	exitMutex( MUTEX_NONCE );
	}

/* Perform the FIPS-140 statistical checks which are feasible on a byte 
   string.  The full suite of tests assumes an infinite source of values (and
   time) is available, the following is a scaled-down version used to sanity-
   check keys and other short random data blocks.  Note that this check
   requires at least 64 bits of data in order to produce useful results */

BOOLEAN checkEntropy( const BYTE *data, const int dataLength )
	{
	const int delta = ( dataLength < 16 ) ? 1 : 0;
	int bitCount[ 4 ] = { 0 }, noOnes, i;

	for( i = 0; i < dataLength; i++ )
		{
		const int value = data[ i ];

		bitCount[ value & 3 ]++;
		bitCount[ ( value >> 2 ) & 3 ]++;
		bitCount[ ( value >> 4 ) & 3 ]++;
		bitCount[ value >> 6 ]++;
		}

	/* Monobit test: Make sure at least 1/4 of the bits are ones and 1/4 are
	   zeroes */
	noOnes = bitCount[ 1 ] + bitCount[ 2 ] + ( 2 * bitCount[ 3 ] );
	if( noOnes < dataLength * 2 || noOnes > dataLength * 6 )
		return( FALSE );

	/* Poker test (almost): Make sure each bit pair is present at least 
	   1/16 of the time.  The FIPS 140 version uses 4-bit values, but the
	   numer of samples available from the keys is far too small for this.

	   This isn't precisely 1/16, for short samples (< 128 bits) we adjust
	   the count by one because of the small sample size, and for odd-length 
	   data we're getting four more samples so the actual figure is slightly
	   less than 1/16 */
	if( ( bitCount[ 0 ] + delta < dataLength / 2 ) || \
		( bitCount[ 1 ] + delta < dataLength / 2 ) || \
		( bitCount[ 2 ] + delta < dataLength / 2 ) || \
		( bitCount[ 3 ] + delta < dataLength / 2 ) )
		return( FALSE );

	return( TRUE );
	}

/* Copy a string attribute to external storage, with various range checks
   to follow the cryptlib semantics */

int attributeCopy( RESOURCE_DATA *msgData, const void *attribute, 
				   const int attributeLength )
	{
	if( attributeLength == 0 )
		{
		msgData->length = 0;
		return( CRYPT_ERROR_NOTFOUND );
		}
	if( msgData->data != NULL )
		{
		assert( attribute != NULL );
		assert( attributeLength > 0 );

		if( attributeLength > msgData->length || \
			checkBadPtrWrite( msgData->data, attributeLength ) )
			return( CRYPT_ARGERROR_STR1 );
		memcpy( msgData->data, attribute, attributeLength );
		}
	msgData->length = attributeLength;

	return( CRYPT_OK );
	}

int attributePtrCopy( void *dest, int *destLength, const void *attribute, 
					  const int attributeLength )
	{
	if( dest != NULL )
		{
		assert( attribute != NULL );
		assert( attributeLength > 0 );

		if( attributeLength > *destLength || \
			checkBadPtrWrite( dest, attributeLength ) )
			return( CRYPT_ARGERROR_STR1 );
		memcpy( dest, attribute, attributeLength );
		}
	*destLength = attributeLength;

	return( CRYPT_OK );
	}

/* Check whether a given algorithm is available */

BOOLEAN algoAvailable( const CRYPT_ALGO cryptAlgo )
	{
	CRYPT_QUERY_INFO queryInfo;

	return( cryptStatusOK( krnlSendMessage( SYSTEM_OBJECT_HANDLE,
								RESOURCE_IMESSAGE_DEV_QUERYCAPABILITY,
								&queryInfo, cryptAlgo ) ) ? TRUE : FALSE );
	}

/****************************************************************************
*																			*
*								Extended libc Functions						*
*																			*
****************************************************************************/

/* Match a given substring against a string in a case-insensitive manner */

#if defined( __UNIX__ )

int strnicmp( const char *src, const char *dest, const int length )
	{
	return( strncasecmp( src, dest, length ) );
	}

int stricmp( const char *src, const char *dest )
	{
	return( strcasecmp( src, dest ) );
	}

#elif !( defined( __WINDOWS__ ) || defined( __MSDOS__ ) || \
		 defined( __OS2__ ) || defined( __IBM4758__ ) || \
		 defined( __TANDEM__ ) ) || defined( NT_DRIVER )

int strnicmp( const char *src, const char *dest, int length )
	{
	char srcCh, destCh;

	while( length-- )
		{
		/* Need to be careful with toupper() side-effects */
		srcCh = *src++;
		srcCh = toupper( srcCh );
		destCh = *dest++;
		destCh = toupper( destCh );

		if( srcCh != destCh )
			return( srcCh - destCh );
		}

	return( 0 );
	}

int stricmp( const char *src, const char *dest )
	{
	int length = strlen( src );

	if( length != strlen( dest ) )
		return( 1 );	/* Lengths differ */
	return( strnicmp( src, dest, length ) );
	}
#endif /* OS-specific case-insensitive string compares */

/****************************************************************************
*																			*
*							OS-specific Helper Functions					*
*																			*
****************************************************************************/

#if defined( __SCO_VERSION__ ) && defined( USE_THREADS )

int createThread( void *( *function )( void * ), void *arg )
	{
	pthread_attr_t attr;
	pthread_t dummy;
	int status;

	/* Create the thread, setting the stack size to a sensible value
	   rather than the default used by SCO */
	pthread_attr_init( &attr );
	pthread_attr_setstacksize( &attr, 32768 );
	status = pthread_create( &dummy, &attr, function, arg ); 
    pthread_attr_destroy( &attr );
    
    return( status );
	}
#endif /* UnixWare/SCO with threading */

/****************************************************************************
*																			*
*							Base64 En/Decoding Functions					*
*																			*
****************************************************************************/

/* Some interfaces can't handle binary data, so we base64-encode it using the
   following encode/decode tables (from RFC 1113) */

#define BPAD		'='		/* Padding for odd-sized output */
#define BERR		0xFF	/* Illegal char marker */
#define BEOF		0x7F	/* EOF marker (padding char or EOL) */

static const char binToAscii[] = \
	"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
#if 'A' == 0x41				/* ASCII */
  static const BYTE asciiToBin[] =
	{ BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BEOF, BERR, BERR, BEOF, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, 0x3E, BERR, BERR, BERR, 0x3F,
	  0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B,
	  0x3C, 0x3D, BERR, BERR, BERR, BEOF, BERR, BERR,
	  BERR, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
	  0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
	  0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
	  0x17, 0x18, 0x19, BERR, BERR, BERR, BERR, BERR,
	  BERR, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20,
	  0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
	  0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30,
	  0x31, 0x32, 0x33, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR
	};
#elif 'A' == 0xC1			/* EBCDIC */
  /* EBCDIC character mappings:
		A-I C1-C9
		J-R D1-D9
		S-Z E2-E9
		a-i 81-89
		j-r 91-99
		s-z A2-A9
		0-9 F0-F9
		+   4E
		/   61
		=   7E  Uses BEOF in table */   
static const BYTE asciiToBin[] =
	{ BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,	/*00*/
	  BERR, BERR, BEOF, BERR, BERR, BEOF, BERR, BERR,	/* CR, LF */
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,	/*10*/
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,	/*20*/
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,	/*30*/
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,	/*40*/
	  BERR, BERR, BERR, BERR, BERR, BERR, 0x3E, BERR,	/* + */
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,	/*50*/
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, 0x3F, BERR, BERR, BERR, BERR, BERR, BERR,	/*60*/	/* / */
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,	/*70*/
	  BERR, BERR, BERR, BERR, BERR, BERR, BEOF, BERR,			/* = */
	  BERR, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20,	/*80*/	/* a-i */
	  0x21, 0x22, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29,	/*90*/	/* j-r */
	  0x2A, 0x2B, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31,	/*A0*/	/* s-z */
	  0x32, 0x33, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR,	/*B0*/
	  BERR, BERR, BERR, BERR, BERR, BERR, BERR, BERR
	  BERR, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,	/*C0*/	/* A-I */
	  0x07, 0x08, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,	/*D0*/	/* J-R */
	  0x10, 0x11, BERR, BERR, BERR, BERR, BERR, BERR,
	  BERR, BERR, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,	/*E0*/	/* S-Z */
	  0x18, x019, BERR, BERR, BERR, BERR, BERR, BERR,
	  0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B,	/*F0*/	/* 0-9 */
	  0x3C, 0x3D, BERR, BERR, BERR, BERR, BERR, BERR
	};
#else
  #error System is neither ASCII nor EBCDIC
#endif /* Different character code mappings */

/* The size of lines for PEM-type formatting.  This is only used for encoding,
   for decoding we adjust to whatever size the sender has used */

#define TEXT_LINESIZE	64

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91激情在线视频| 91精品在线一区二区| 视频一区欧美精品| 久久久久久久久一| 欧美视频在线观看一区二区| 国产盗摄一区二区| 日韩高清一区二区| 亚洲主播在线播放| 欧美国产激情二区三区| 欧美高清一级片在线| 97精品国产97久久久久久久久久久久| 精品无人码麻豆乱码1区2区 | 蜜桃av一区二区在线观看| 国产精品久久久久影视| 精品精品国产高清一毛片一天堂| 欧美揉bbbbb揉bbbbb| 99久久免费国产| 丁香桃色午夜亚洲一区二区三区| 久久精品噜噜噜成人av农村| 亚洲国产日产av| 亚洲激情在线激情| 中文字幕一区二| 国产精品久久一级| 国产网站一区二区| 久久精品视频在线免费观看| 欧美一级欧美一级在线播放| 在线电影一区二区三区| 欧美性大战xxxxx久久久| 日本黄色一区二区| 色综合av在线| 一本色道久久综合狠狠躁的推荐| 成人精品电影在线观看| 国产黄色成人av| 国产精品18久久久久久久网站| 免费不卡在线观看| 日本va欧美va瓶| 奇米一区二区三区| 秋霞午夜av一区二区三区| 琪琪久久久久日韩精品| 日韩激情视频网站| 久久精品国产精品亚洲综合| 久久精品国产免费看久久精品| 麻豆一区二区99久久久久| 精品一区在线看| 国产一区二区三区四区五区美女| 精品一区二区三区在线观看| 国产在线视频一区二区三区| 国产精品夜夜爽| 国产成人自拍网| av电影在线观看一区| 91网页版在线| 欧美系列在线观看| 日韩一区二区在线看| 日韩美女在线视频| 久久精品一级爱片| 日韩美女视频一区| 亚洲自拍偷拍图区| 日韩电影免费在线看| 国产一区啦啦啦在线观看| 国产成人亚洲综合a∨婷婷图片| 成人毛片老司机大片| 91久久奴性调教| 91精品国模一区二区三区| 亚洲精品在线免费观看视频| 中文字幕在线一区| 亚洲午夜视频在线观看| 看片的网站亚洲| 99久久精品国产网站| 精品视频在线视频| 亚洲精品在线免费观看视频| 亚洲色图第一区| 琪琪久久久久日韩精品| 成人动漫一区二区| 欧美日韩国产综合一区二区三区 | 色视频成人在线观看免| 欧美人体做爰大胆视频| 国产亚洲一区二区三区在线观看| 中文字幕亚洲在| 毛片一区二区三区| caoporen国产精品视频| 4438成人网| 国产精品看片你懂得 | 白白色 亚洲乱淫| 在线不卡中文字幕播放| 国产视频在线观看一区二区三区| 自拍偷拍欧美激情| 国内精品视频一区二区三区八戒| 91在线一区二区三区| 日韩免费观看高清完整版| 亚洲男同性恋视频| 极品美女销魂一区二区三区| 91麻豆精品在线观看| 久久免费看少妇高潮| 亚洲二区在线视频| 不卡的看片网站| 精品国产乱码久久久久久久久 | 不卡影院免费观看| 在线电影院国产精品| 亚洲日本乱码在线观看| 国产在线视频不卡二| 欧美喷水一区二区| 亚洲视频电影在线| 国产91精品免费| 亚洲国产精品一区二区尤物区| 国产不卡视频在线播放| 欧美电影免费观看高清完整版在线观看 | 国产精品一卡二| 欧美一区二区三区啪啪| 亚洲人成人一区二区在线观看| 国产一区二区三区国产| 日韩一区二区三区在线| 亚洲一区在线观看网站| 91蜜桃网址入口| 国产精品欧美一级免费| 国内精品嫩模私拍在线| 欧美一二三区在线观看| 手机精品视频在线观看| 欧美人与禽zozo性伦| 亚洲福中文字幕伊人影院| av一区二区三区| 欧美国产乱子伦 | av成人免费在线观看| 国产亚洲一区字幕| 国产在线精品一区二区三区不卡| 欧美精品 国产精品| 亚洲a一区二区| 欧美精品第1页| 性做久久久久久久久| 欧美在线播放高清精品| 中文字幕在线一区| av亚洲精华国产精华精华| 国产精品视频在线看| 国产suv精品一区二区883| 久久久不卡网国产精品二区| 国产一区二区0| 精品99999| 国产v综合v亚洲欧| 亚洲欧美一区二区视频| 99v久久综合狠狠综合久久| 1区2区3区欧美| 色欧美片视频在线观看在线视频| 亚洲男同性恋视频| 欧美情侣在线播放| 看电视剧不卡顿的网站| 国产婷婷一区二区| 成人不卡免费av| 亚洲欧美激情一区二区| 欧美亚洲动漫精品| 青青草国产成人av片免费| 精品捆绑美女sm三区| 国产精品一区二区x88av| 国产精品久久看| 欧美日韩亚洲综合| 精品一区二区三区免费观看| 国产欧美精品区一区二区三区| 成人精品gif动图一区| 亚洲欧美日韩小说| 欧美日韩成人一区二区| 看片网站欧美日韩| 国产精品免费久久久久| 色狠狠av一区二区三区| 全国精品久久少妇| 中文av一区二区| 欧美色图一区二区三区| 久久精品国产第一区二区三区| 国产欧美日产一区| 日本韩国一区二区三区视频| 免费成人你懂的| 中文字幕 久热精品 视频在线 | 欧美亚洲图片小说| 麻豆精品一区二区综合av| 欧美国产一区二区| 精品视频在线看| 国产成人免费网站| 亚洲成人福利片| 日本一区二区三区视频视频| 在线视频综合导航| 国产一区二区久久| 一区二区三区高清不卡| 三级欧美韩日大片在线看| 国产三级一区二区| 欧美日韩国产高清一区| 国产一区二区三区最好精华液| 一区二区三区美女| 国产亚洲综合av| 91精品综合久久久久久| a4yy欧美一区二区三区| 美国十次了思思久久精品导航| 国产精品灌醉下药二区| 精品国产自在久精品国产| 91激情五月电影| 成人免费的视频| 久久99国产精品久久99 | 亚洲国产成人tv| 国产精品人成在线观看免费 | 日韩欧美在线123| 一本色道久久综合亚洲aⅴ蜜桃 | 国产欧美精品一区aⅴ影院| 7777精品久久久大香线蕉| av在线一区二区三区|