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

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

?? bio_ok.c

?? openssl包含TLS
?? C
字號:
/* crypto/evp/bio_ok.c *//* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. *  * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to.  The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code.  The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). *  * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *    "This product includes cryptographic software written by *     Eric Young (eay@cryptsoft.com)" *    The word 'cryptographic' can be left out if the rouines from the library *    being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from  *    the apps directory (application code) you must include an acknowledgement: *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" *  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. *  * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed.  i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] *//*	From: Arne Ansper <arne@cyber.ee>	Why BIO_f_reliable?	I wrote function which took BIO* as argument, read data from it	and processed it. Then I wanted to store the input file in 	encrypted form. OK I pushed BIO_f_cipher to the BIO stack	and everything was OK. BUT if user types wrong password 	BIO_f_cipher outputs only garbage and my function crashes. Yes	I can and I should fix my function, but BIO_f_cipher is 	easy way to add encryption support to many existing applications	and it's hard to debug and fix them all. 	So I wanted another BIO which would catch the incorrect passwords and	file damages which cause garbage on BIO_f_cipher's output. 	The easy way is to push the BIO_f_md and save the checksum at 	the end of the file. However there are several problems with this	approach:	1) you must somehow separate checksum from actual data. 	2) you need lot's of memory when reading the file, because you 	must read to the end of the file and verify the checksum before	letting the application to read the data. 		BIO_f_reliable tries to solve both problems, so that you can 	read and write arbitrary long streams using only fixed amount	of memory.	BIO_f_reliable splits data stream into blocks. Each block is prefixed	with it's length and suffixed with it's digest. So you need only 	several Kbytes of memory to buffer single block before verifying 	it's digest. 	BIO_f_reliable goes further and adds several important capabilities:	1) the digest of the block is computed over the whole stream 	-- so nobody can rearrange the blocks or remove or replace them.	2) to detect invalid passwords right at the start BIO_f_reliable 	adds special prefix to the stream. In order to avoid known plain-text	attacks this prefix is generated as follows:		*) digest is initialized with random seed instead of 		standardized one.		*) same seed is written to output		*) well-known text is then hashed and the output 		of the digest is also written to output.	reader can now read the seed from stream, hash the same string	and then compare the digest output.	Bad things: BIO_f_reliable knows what's going on in EVP_Digest. I 	initially wrote and tested this code on x86 machine and wrote the	digests out in machine-dependent order :( There are people using	this code and I cannot change this easily without making existing	data files unreadable.*/#include <stdio.h>#include <errno.h>#include "cryptlib.h"#include <openssl/buffer.h>#include <openssl/bio.h>#include <openssl/evp.h>#include <openssl/rand.h>static int ok_write(BIO *h, const char *buf, int num);static int ok_read(BIO *h, char *buf, int size);static long ok_ctrl(BIO *h, int cmd, long arg1, void *arg2);static int ok_new(BIO *h);static int ok_free(BIO *data);static long ok_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp);static void sig_out(BIO* b);static void sig_in(BIO* b);static void block_out(BIO* b);static void block_in(BIO* b);#define OK_BLOCK_SIZE	(1024*4)#define OK_BLOCK_BLOCK	4#define IOBS		(OK_BLOCK_SIZE+ OK_BLOCK_BLOCK+ 3*EVP_MAX_MD_SIZE)#define WELLKNOWN "The quick brown fox jumped over the lazy dog's back."#ifndef L_ENDIAN#define swapem(x) \	((unsigned long int)((((unsigned long int)(x) & 0x000000ffU) << 24) | \			     (((unsigned long int)(x) & 0x0000ff00U) <<  8) | \			     (((unsigned long int)(x) & 0x00ff0000U) >>  8) | \			     (((unsigned long int)(x) & 0xff000000U) >> 24)))#else#define swapem(x) (x)#endiftypedef struct ok_struct	{	int buf_len;	int buf_off;	int buf_len_save;	int buf_off_save;	int cont;		/* <= 0 when finished */	int finished;	EVP_MD_CTX md;	int blockout;		/* output block is ready */ 	int sigio;		/* must process signature */	unsigned char buf[IOBS];	} BIO_OK_CTX;static BIO_METHOD methods_ok=	{	BIO_TYPE_CIPHER,"reliable",	ok_write,	ok_read,	NULL, /* ok_puts, */	NULL, /* ok_gets, */	ok_ctrl,	ok_new,	ok_free,	ok_callback_ctrl,	};BIO_METHOD *BIO_f_reliable(void)	{	return(&methods_ok);	}static int ok_new(BIO *bi)	{	BIO_OK_CTX *ctx;	ctx=(BIO_OK_CTX *)OPENSSL_malloc(sizeof(BIO_OK_CTX));	if (ctx == NULL) return(0);	ctx->buf_len=0;	ctx->buf_off=0;	ctx->buf_len_save=0;	ctx->buf_off_save=0;	ctx->cont=1;	ctx->finished=0;	ctx->blockout= 0;	ctx->sigio=1;	EVP_MD_CTX_init(&ctx->md);	bi->init=0;	bi->ptr=(char *)ctx;	bi->flags=0;	return(1);	}static int ok_free(BIO *a)	{	if (a == NULL) return(0);	EVP_MD_CTX_cleanup(&((BIO_OK_CTX *)a->ptr)->md);	OPENSSL_cleanse(a->ptr,sizeof(BIO_OK_CTX));	OPENSSL_free(a->ptr);	a->ptr=NULL;	a->init=0;	a->flags=0;	return(1);	}	static int ok_read(BIO *b, char *out, int outl)	{	int ret=0,i,n;	BIO_OK_CTX *ctx;	if (out == NULL) return(0);	ctx=(BIO_OK_CTX *)b->ptr;	if ((ctx == NULL) || (b->next_bio == NULL) || (b->init == 0)) return(0);	while(outl > 0)		{		/* copy clean bytes to output buffer */		if (ctx->blockout)			{			i=ctx->buf_len-ctx->buf_off;			if (i > outl) i=outl;			memcpy(out,&(ctx->buf[ctx->buf_off]),i);			ret+=i;			out+=i;			outl-=i;			ctx->buf_off+=i;			/* all clean bytes are out */			if (ctx->buf_len == ctx->buf_off)				{				ctx->buf_off=0;				/* copy start of the next block into proper place */				if(ctx->buf_len_save- ctx->buf_off_save > 0)					{					ctx->buf_len= ctx->buf_len_save- ctx->buf_off_save;					memmove(ctx->buf, &(ctx->buf[ctx->buf_off_save]),							ctx->buf_len);					}				else					{					ctx->buf_len=0;					}				ctx->blockout= 0;				}			}			/* output buffer full -- cancel */		if (outl == 0) break;		/* no clean bytes in buffer -- fill it */		n=IOBS- ctx->buf_len;		i=BIO_read(b->next_bio,&(ctx->buf[ctx->buf_len]),n);		if (i <= 0) break;	/* nothing new */		ctx->buf_len+= i;		/* no signature yet -- check if we got one */		if (ctx->sigio == 1) sig_in(b);		/* signature ok -- check if we got block */		if (ctx->sigio == 0) block_in(b);		/* invalid block -- cancel */		if (ctx->cont <= 0) break;		}	BIO_clear_retry_flags(b);	BIO_copy_next_retry(b);	return(ret);	}static int ok_write(BIO *b, const char *in, int inl)	{	int ret=0,n,i;	BIO_OK_CTX *ctx;	ctx=(BIO_OK_CTX *)b->ptr;	ret=inl;	if ((ctx == NULL) || (b->next_bio == NULL) || (b->init == 0)) return(0);	if(ctx->sigio) sig_out(b);	do{		BIO_clear_retry_flags(b);		n=ctx->buf_len-ctx->buf_off;		while (ctx->blockout && n > 0)			{			i=BIO_write(b->next_bio,&(ctx->buf[ctx->buf_off]),n);			if (i <= 0)				{				BIO_copy_next_retry(b);				if(!BIO_should_retry(b))					ctx->cont= 0;				return(i);				}			ctx->buf_off+=i;			n-=i;			}		/* at this point all pending data has been written */		ctx->blockout= 0;		if (ctx->buf_len == ctx->buf_off)			{			ctx->buf_len=OK_BLOCK_BLOCK;			ctx->buf_off=0;			}			if ((in == NULL) || (inl <= 0)) return(0);		n= (inl+ ctx->buf_len > OK_BLOCK_SIZE+ OK_BLOCK_BLOCK) ? 				OK_BLOCK_SIZE+ OK_BLOCK_BLOCK- ctx->buf_len : inl;		memcpy((unsigned char *)(&(ctx->buf[ctx->buf_len])),(unsigned char *)in,n);		ctx->buf_len+= n;		inl-=n;		in+=n;		if(ctx->buf_len >= OK_BLOCK_SIZE+ OK_BLOCK_BLOCK)			{			block_out(b);			}	}while(inl > 0);	BIO_clear_retry_flags(b);	BIO_copy_next_retry(b);	return(ret);	}static long ok_ctrl(BIO *b, int cmd, long num, void *ptr)	{	BIO_OK_CTX *ctx;	EVP_MD *md;	const EVP_MD **ppmd;	long ret=1;	int i;	ctx=b->ptr;	switch (cmd)		{	case BIO_CTRL_RESET:		ctx->buf_len=0;		ctx->buf_off=0;		ctx->buf_len_save=0;		ctx->buf_off_save=0;		ctx->cont=1;		ctx->finished=0;		ctx->blockout= 0;		ctx->sigio=1;		ret=BIO_ctrl(b->next_bio,cmd,num,ptr);		break;	case BIO_CTRL_EOF:	/* More to read */		if (ctx->cont <= 0)			ret=1;		else			ret=BIO_ctrl(b->next_bio,cmd,num,ptr);		break;	case BIO_CTRL_PENDING: /* More to read in buffer */	case BIO_CTRL_WPENDING: /* More to read in buffer */		ret=ctx->blockout ? ctx->buf_len-ctx->buf_off : 0;		if (ret <= 0)			ret=BIO_ctrl(b->next_bio,cmd,num,ptr);		break;	case BIO_CTRL_FLUSH:		/* do a final write */		if(ctx->blockout == 0)			block_out(b);		while (ctx->blockout)			{			i=ok_write(b,NULL,0);			if (i < 0)				{				ret=i;				break;				}			}		ctx->finished=1;		ctx->buf_off=ctx->buf_len=0;		ctx->cont=(int)ret;				/* Finally flush the underlying BIO */		ret=BIO_ctrl(b->next_bio,cmd,num,ptr);		break;	case BIO_C_DO_STATE_MACHINE:		BIO_clear_retry_flags(b);		ret=BIO_ctrl(b->next_bio,cmd,num,ptr);		BIO_copy_next_retry(b);		break;	case BIO_CTRL_INFO:		ret=(long)ctx->cont;		break;	case BIO_C_SET_MD:		md=ptr;		EVP_DigestInit_ex(&ctx->md, md, NULL);		b->init=1;		break;	case BIO_C_GET_MD:		if (b->init)			{			ppmd=ptr;			*ppmd=ctx->md.digest;			}		else			ret=0;		break;	default:		ret=BIO_ctrl(b->next_bio,cmd,num,ptr);		break;		}	return(ret);	}static long ok_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp)	{	long ret=1;	if (b->next_bio == NULL) return(0);	switch (cmd)		{	default:		ret=BIO_callback_ctrl(b->next_bio,cmd,fp);		break;		}	return(ret);	}static void longswap(void *_ptr, int len){#ifndef L_ENDIAN	int i;	char *ptr=_ptr;	for(i= 0;i < len;i+= 4){		*((unsigned long *)&(ptr[i]))= swapem(*((unsigned long *)&(ptr[i])));	}#endif}static void sig_out(BIO* b)	{	BIO_OK_CTX *ctx;	EVP_MD_CTX *md;	ctx=b->ptr;	md=&ctx->md;	if(ctx->buf_len+ 2* md->digest->md_size > OK_BLOCK_SIZE) return;	EVP_DigestInit_ex(md, md->digest, NULL);	/* FIXME: there's absolutely no guarantee this makes any sense at all,	 * particularly now EVP_MD_CTX has been restructured.	 */	RAND_pseudo_bytes(md->md_data, md->digest->md_size);	memcpy(&(ctx->buf[ctx->buf_len]), md->md_data, md->digest->md_size);	longswap(&(ctx->buf[ctx->buf_len]), md->digest->md_size);	ctx->buf_len+= md->digest->md_size;	EVP_DigestUpdate(md, WELLKNOWN, strlen(WELLKNOWN));	EVP_DigestFinal_ex(md, &(ctx->buf[ctx->buf_len]), NULL);	ctx->buf_len+= md->digest->md_size;	ctx->blockout= 1;	ctx->sigio= 0;	}static void sig_in(BIO* b)	{	BIO_OK_CTX *ctx;	EVP_MD_CTX *md;	unsigned char tmp[EVP_MAX_MD_SIZE];	int ret= 0;	ctx=b->ptr;	md=&ctx->md;	if(ctx->buf_len- ctx->buf_off < 2* md->digest->md_size) return;	EVP_DigestInit_ex(md, md->digest, NULL);	memcpy(md->md_data, &(ctx->buf[ctx->buf_off]), md->digest->md_size);	longswap(md->md_data, md->digest->md_size);	ctx->buf_off+= md->digest->md_size;	EVP_DigestUpdate(md, WELLKNOWN, strlen(WELLKNOWN));	EVP_DigestFinal_ex(md, tmp, NULL);	ret= memcmp(&(ctx->buf[ctx->buf_off]), tmp, md->digest->md_size) == 0;	ctx->buf_off+= md->digest->md_size;	if(ret == 1)		{		ctx->sigio= 0;		if(ctx->buf_len != ctx->buf_off)			{			memmove(ctx->buf, &(ctx->buf[ctx->buf_off]), ctx->buf_len- ctx->buf_off);			}		ctx->buf_len-= ctx->buf_off;		ctx->buf_off= 0;		}	else		{		ctx->cont= 0;		}	}static void block_out(BIO* b)	{	BIO_OK_CTX *ctx;	EVP_MD_CTX *md;	unsigned long tl;	ctx=b->ptr;	md=&ctx->md;	tl= ctx->buf_len- OK_BLOCK_BLOCK;	tl= swapem(tl);	memcpy(ctx->buf, &tl, OK_BLOCK_BLOCK);	tl= swapem(tl);	EVP_DigestUpdate(md, (unsigned char*) &(ctx->buf[OK_BLOCK_BLOCK]), tl);	EVP_DigestFinal_ex(md, &(ctx->buf[ctx->buf_len]), NULL);	ctx->buf_len+= md->digest->md_size;	ctx->blockout= 1;	}static void block_in(BIO* b)	{	BIO_OK_CTX *ctx;	EVP_MD_CTX *md;	long tl= 0;	unsigned char tmp[EVP_MAX_MD_SIZE];	ctx=b->ptr;	md=&ctx->md;	memcpy(&tl, ctx->buf, OK_BLOCK_BLOCK);	tl= swapem(tl);	if (ctx->buf_len < tl+ OK_BLOCK_BLOCK+ md->digest->md_size) return; 	EVP_DigestUpdate(md, (unsigned char*) &(ctx->buf[OK_BLOCK_BLOCK]), tl);	EVP_DigestFinal_ex(md, tmp, NULL);	if(memcmp(&(ctx->buf[tl+ OK_BLOCK_BLOCK]), tmp, md->digest->md_size) == 0)		{		/* there might be parts from next block lurking around ! */		ctx->buf_off_save= tl+ OK_BLOCK_BLOCK+ md->digest->md_size;		ctx->buf_len_save= ctx->buf_len;		ctx->buf_off= OK_BLOCK_BLOCK;		ctx->buf_len= tl+ OK_BLOCK_BLOCK;		ctx->blockout= 1;		}	else		{		ctx->cont= 0;		}	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av一区二区三区| 欧美中文字幕一区| 色呦呦日韩精品| 制服丝袜亚洲色图| 亚洲欧洲成人精品av97| 奇米色一区二区三区四区| 91小视频在线免费看| 精品国产sm最大网站免费看| 亚洲国产精品自拍| 成人黄色软件下载| 精品成人一区二区| 奇米色一区二区三区四区| 亚洲欧美日韩中文播放| 日韩手机在线导航| 久久老女人爱爱| 91在线精品一区二区| 一区二区不卡在线视频 午夜欧美不卡在| 一本色道亚洲精品aⅴ| 亚洲成在人线免费| 久久久夜色精品亚洲| 99国产精品久久久久| 亚洲成人www| 欧美一三区三区四区免费在线看 | 蜜桃在线一区二区三区| www国产亚洲精品久久麻豆| 国产成人99久久亚洲综合精品| 亚洲少妇30p| 欧美zozozo| 色综合一个色综合亚洲| 老司机精品视频导航| 亚洲欧洲日韩在线| 日韩欧美的一区二区| 99免费精品视频| 日韩高清欧美激情| 日韩理论在线观看| 日韩精品影音先锋| 91九色最新地址| 国产成人一区在线| 天天操天天干天天综合网| 欧美国产综合色视频| 欧美日韩精品久久久| 国产·精品毛片| 免费成人在线观看视频| 亚洲精品视频在线| 欧美国产激情一区二区三区蜜月| 欧美日韩精品福利| 色综合激情五月| 国产精品69久久久久水密桃| 午夜精品久久久久久久99樱桃| 国产精品每日更新在线播放网址| 日韩欧美久久久| 欧美丝袜丝交足nylons图片| 成人激情免费视频| 狠狠网亚洲精品| 日产国产欧美视频一区精品| 亚洲激情五月婷婷| 最新日韩在线视频| 国产日韩精品久久久| 日韩欧美亚洲国产精品字幕久久久| 欧美综合在线视频| 色婷婷久久久综合中文字幕 | 蜜臀av性久久久久av蜜臀妖精| 亚洲男同性视频| 亚洲欧洲日产国码二区| 国产日韩欧美精品电影三级在线| 欧美一区二区黄| 538在线一区二区精品国产| 色天天综合色天天久久| 99精品在线观看视频| 国产成人免费9x9x人网站视频| 裸体一区二区三区| 轻轻草成人在线| 亚洲18色成人| 亚洲韩国精品一区| 亚洲国产一区二区视频| 亚洲最快最全在线视频| 一级特黄大欧美久久久| 一区二区三区在线影院| 亚洲毛片av在线| 一区二区在线电影| 亚洲国产精品欧美一二99| 亚洲福利国产精品| 日日欢夜夜爽一区| 天堂午夜影视日韩欧美一区二区| 五月婷婷综合激情| 美洲天堂一区二卡三卡四卡视频| 日韩av电影免费观看高清完整版在线观看 | 在线免费观看日本一区| 精品视频在线免费看| 欧美三区在线视频| 欧美一区二区三区系列电影| 日韩区在线观看| 国产日韩欧美在线一区| 国产精品人成在线观看免费 | 欧美成人aa大片| 久久综合国产精品| 国产精品情趣视频| 亚洲精品乱码久久久久久| 天堂一区二区在线免费观看| 麻豆久久一区二区| 不卡高清视频专区| 欧美日韩精品免费观看视频| 欧美大片一区二区三区| 日本一区二区成人在线| 一区二区三区高清在线| 日韩电影在线一区| 国产91色综合久久免费分享| 日本乱人伦一区| 日韩欧美一级在线播放| 国产精品乱码一区二三区小蝌蚪| 亚洲精品精品亚洲| 欧美a级理论片| 成人午夜在线播放| 欧美图片一区二区三区| 久久综合色一综合色88| 亚洲精品水蜜桃| 国内精品久久久久影院薰衣草 | 色哦色哦哦色天天综合| 日韩欧美亚洲国产精品字幕久久久| 亚洲国产精品高清| 日韩在线观看一区二区| 成人激情开心网| 欧美一级二级三级蜜桃| 亚洲欧美日本韩国| 精品午夜一区二区三区在线观看 | 色婷婷香蕉在线一区二区| 欧美成人一区二区三区片免费| 成人欧美一区二区三区小说| 老司机精品视频线观看86 | 欧美精品一级二级三级| 亚洲精品老司机| 国产成a人亚洲精品| 欧美日韩精品一区二区三区| 国产精品入口麻豆原神| 国内精品免费**视频| 欧美日韩高清一区二区不卡| 国产精品三级av在线播放| 另类中文字幕网| 欧美久久久久久久久久| 中文字幕在线不卡一区| 国产一区在线观看麻豆| 91精品国产综合久久久蜜臀图片| 国产精品美女久久久久久久久久久 | 在线精品亚洲一区二区不卡| 久久精品视频免费观看| 奇米在线7777在线精品| 欧美日韩一级片在线观看| 中文字幕日韩av资源站| 国产高清亚洲一区| 日韩你懂的在线播放| 亚洲国产精品视频| 日本高清无吗v一区| 国产精品久久久久久久第一福利| 国产麻豆午夜三级精品| 日韩美女视频一区二区在线观看| 日韩影院免费视频| 欧美性三三影院| 一区二区三区不卡在线观看 | www久久精品| 青青草国产精品97视觉盛宴| 欧美色国产精品| 亚洲国产综合91精品麻豆| 在线日韩av片| 亚洲一区二区五区| 欧美午夜宅男影院| 亚洲午夜一区二区| 欧美理论在线播放| 99国产精品久久久久久久久久 | 日本中文字幕一区二区视频 | 色综合中文字幕| 亚洲免费在线播放| 色综合视频一区二区三区高清| 国产精品久久久久桃色tv| av午夜精品一区二区三区| 成人免费在线视频观看| 色一情一乱一乱一91av| 一区二区三区四区国产精品| 在线视频欧美精品| 日韩黄色在线观看| 日韩精品一区二区三区蜜臀| 国内精品久久久久影院色| 久久久不卡影院| eeuss鲁片一区二区三区在线看| 国产精品福利av| 欧美亚洲一区二区三区四区| 午夜激情一区二区三区| 日韩手机在线导航| 国产激情视频一区二区三区欧美 | 久久激情五月婷婷| 久久亚洲综合色一区二区三区 | 国产精品无码永久免费888| 成人激情文学综合网| 一区二区三区在线播| 7777精品伊人久久久大香线蕉完整版 | 欧美一激情一区二区三区| 黑人巨大精品欧美黑白配亚洲| 欧美极品xxx| 欧美色图激情小说| 国内精品伊人久久久久影院对白| 欧美国产亚洲另类动漫|