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

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

?? tspps.c

?? TCG軟件棧 linux系統上使用 為可信應用軟件提供和 TPM通信的 接口 其網站上有很多關于使用此軟件的測試用例
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Licensed Materials - Property of IBM * * trousers - An open source TCG Software Stack * * (C) Copyright International Business Machines Corp. 2004-2006 * */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <errno.h>#include <pwd.h>#include <sys/types.h>#include <sys/file.h>#include <sys/stat.h>#include <assert.h>#include "trousers/tss.h"#include "trousers/trousers.h"#include "trousers_types.h"#include "tcs_tsp.h"#include "spi_utils.h"#include "tspps.h"#include "tsplog.h"static int user_ps_fd = -1;static MUTEX_DECLARE_INIT(user_ps_lock);/* * Determine the default path to the persistent storage file and create it if it doesn't exist. */TSS_RESULTget_user_ps_path(char **file){	TSS_RESULT result = TSPERR(TSS_E_INTERNAL_ERROR);	char *file_name = NULL, *home_dir = NULL;	struct passwd pw, *pwp;	struct stat stat_buf;	char buf[PASSWD_BUFSIZE];	uid_t euid;	int rc;	if ((file_name = getenv("TSS_USER_PS_FILE"))) {		*file = strdup(file_name);		return (*file) ? TSS_SUCCESS : TSPERR(TSS_E_OUTOFMEMORY);	}	euid = geteuid();	setpwent();	while (1) {		rc = getpwent_r(&pw, buf, PASSWD_BUFSIZE, &pwp);		if (rc) {			LogDebugFn("USER PS: Error getting path to home directory: getpwent_r: %s",				   strerror(rc));			endpwent();			return TSPERR(TSS_E_INTERNAL_ERROR);		}		if (euid == pwp->pw_uid) {			home_dir = strdup(pwp->pw_dir);			break;		}	}	endpwent();	if (!home_dir)		return TSPERR(TSS_E_OUTOFMEMORY);	/* Tack on TSS_USER_PS_DIR and see if it exists */	rc = snprintf(buf, PASSWD_BUFSIZE, "%s/%s", home_dir, TSS_USER_PS_DIR);	if (rc == PASSWD_BUFSIZE) {		LogDebugFn("USER PS: Path to file too long! (> %d bytes)", PASSWD_BUFSIZE);		goto done;	}	errno = 0;	if ((rc = stat(buf, &stat_buf)) == -1) {		if (errno == ENOENT) {			errno = 0;			/* Create the base directory, $HOME/.trousers */			if ((rc = mkdir(buf, 0700)) == -1) {				LogDebugFn("USER PS: Error creating dir: %s: %s", buf,					   strerror(errno));				goto done;			}		} else {			LogDebugFn("USER PS: Error stating dir: %s: %s", buf, strerror(errno));			goto done;		}	}	/* Directory exists or has been created, return the path to the file */	rc = snprintf(buf, PASSWD_BUFSIZE, "%s/%s/%s", home_dir, TSS_USER_PS_DIR,		      TSS_USER_PS_FILE);	if (rc == PASSWD_BUFSIZE) {		LogDebugFn("USER PS: Path to file too long! (> %d bytes)", PASSWD_BUFSIZE);	} else		*file = strdup(buf);	result = (*file) ? TSS_SUCCESS : TSPERR(TSS_E_OUTOFMEMORY);done:	free(home_dir);	return result;}TSS_RESULTget_file(int *fd){	TSS_RESULT result;	int rc = 0;	char *file_name = NULL;	MUTEX_LOCK(user_ps_lock);	/* check the global file handle first.  If it exists, lock it and return */	if (user_ps_fd != -1) {		if ((rc = flock(user_ps_fd, LOCK_EX))) {			LogDebug("USER PS: failed to lock file: %s", strerror(errno));			MUTEX_UNLOCK(user_ps_lock);			return TSPERR(TSS_E_INTERNAL_ERROR);		}		*fd = user_ps_fd;		return TSS_SUCCESS;	}	/* open and lock the file */	if ((result = get_user_ps_path(&file_name))) {		LogDebugFn("USER PS: error getting file path");		MUTEX_UNLOCK(user_ps_lock);		return result;	}	user_ps_fd = open(file_name, O_CREAT|O_RDWR, 0600);	if (user_ps_fd < 0) {		LogDebug("USER PS: open of %s failed: %s", file_name, strerror(errno));		free(file_name);		MUTEX_UNLOCK(user_ps_lock);		return TSPERR(TSS_E_INTERNAL_ERROR);	}	if ((rc = flock(user_ps_fd, LOCK_EX))) {		LogDebug("USER PS: failed to get lock of %s: %s", file_name, strerror(errno));		free(file_name);		close(user_ps_fd);		user_ps_fd = -1;		MUTEX_UNLOCK(user_ps_lock);		return TSPERR(TSS_E_INTERNAL_ERROR);	}	*fd = user_ps_fd;	free(file_name);	return TSS_SUCCESS;}intput_file(int fd){	int rc = 0;	fsync(fd);	/* release the file lock */	if ((rc = flock(fd, LOCK_UN))) {		LogDebug("USER PS: failed to unlock file: %s", strerror(errno));		rc = -1;	}	MUTEX_UNLOCK(user_ps_lock);	return rc;}voidpsfile_close(int fd){	close(fd);	user_ps_fd = -1;	MUTEX_UNLOCK(user_ps_lock);}TSS_RESULTpsfile_is_key_registered(int fd, TSS_UUID *uuid, TSS_BOOL *answer){        TSS_RESULT result;        struct key_disk_cache tmp;	if ((result = psfile_get_cache_entry_by_uuid(fd, uuid, &tmp)) == TSS_SUCCESS)		*answer = TRUE;	else if (result == TSPERR(TSS_E_PS_KEY_NOTFOUND))		*answer = FALSE;        else                return result;        return TSS_SUCCESS;}TSS_RESULTpsfile_get_parent_uuid_by_uuid(int fd, TSS_UUID *uuid, TSS_UUID *ret_uuid){	TSS_RESULT result;        struct key_disk_cache tmp;	if ((result = psfile_get_cache_entry_by_uuid(fd, uuid, &tmp)))		return result;	memcpy(ret_uuid, &tmp.parent_uuid, sizeof(TSS_UUID));        return TSS_SUCCESS;}TSS_RESULTpsfile_get_parent_ps_type(int fd, TSS_UUID *uuid, UINT32 *type){	TSS_RESULT result;        struct key_disk_cache tmp;	if ((result = psfile_get_cache_entry_by_uuid(fd, uuid, &tmp)))		return result;	if (tmp.flags & CACHE_FLAG_PARENT_PS_SYSTEM)		*type = TSS_PS_TYPE_SYSTEM;	else		*type = TSS_PS_TYPE_USER;        return TSS_SUCCESS;}/* * return a key struct from PS given a uuid */TSS_RESULTpsfile_get_key_by_uuid(int fd, TSS_UUID *uuid, BYTE *key){        int rc;	TSS_RESULT result;        off_t file_offset;        struct key_disk_cache tmp;	BYTE buf[4096];	if ((result = psfile_get_cache_entry_by_uuid(fd, uuid, &tmp)))		return result;	/* jump to the location of the key blob */	file_offset = TSSPS_BLOB_DATA_OFFSET(&tmp);	rc = lseek(fd, file_offset, SEEK_SET);	if (rc == ((off_t)-1)) {		LogDebugFn("lseek: %s", strerror(errno));		return TSPERR(TSS_E_INTERNAL_ERROR);	}	if ((rc = read_data(fd, buf, tmp.blob_size))) {		LogDebugFn("Blob read from disk failed.");		return rc;	}	memcpy(key, buf, tmp.blob_size);	return TSS_SUCCESS;}/* * return a key struct from PS given a public key */TSS_RESULTpsfile_get_key_by_pub(int fd, TSS_UUID *uuid, UINT32 pub_size, BYTE *pub, BYTE *key){        int rc;	TSS_RESULT result;        off_t file_offset;        struct key_disk_cache tmp;	BYTE buf[4096];	if ((result = psfile_get_cache_entry_by_pub(fd, pub_size, pub, &tmp)))		return result;	/* jump to the location of the key blob */	file_offset = TSSPS_BLOB_DATA_OFFSET(&tmp);	rc = lseek(fd, file_offset, SEEK_SET);	if (rc == ((off_t)-1)) {		LogDebugFn("lseek: %s", strerror(errno));		return TSPERR(TSS_E_INTERNAL_ERROR);	}	if ((result = read_data(fd, buf, tmp.blob_size))) {		LogDebugFn("Blob read from disk failed.");		return result;	}	memcpy(key, buf, tmp.blob_size);	memcpy(uuid, &tmp.uuid, sizeof(TSS_UUID));	return TSS_SUCCESS;}TSS_RESULTpsfile_get_uuid_by_pub(int fd, UINT32 pub_size, BYTE *pub, TSS_UUID *uuid){	TSS_RESULT result;        struct key_disk_cache tmp;	if ((result = psfile_get_cache_entry_by_pub(fd, pub_size, pub, &tmp)))		return result;	memcpy(uuid, &tmp.uuid, sizeof(TSS_UUID));        return TSS_SUCCESS;}TSS_RESULTpsfile_change_num_keys(int fd, BYTE increment){	int rc;	TSS_RESULT result;	UINT32 num_keys;	rc = lseek(fd, TSSPS_NUM_KEYS_OFFSET, SEEK_SET);	if (rc == ((off_t)-1)) {		LogDebug("lseek: %s", strerror(errno));		return TSPERR(TSS_E_INTERNAL_ERROR);	}	rc = read(fd, &num_keys, sizeof(UINT32));	if (rc != sizeof(UINT32)) {		LogDebug("read of %zd bytes: %s", sizeof(UINT32), strerror(errno));		return TSPERR(TSS_E_INTERNAL_ERROR);	}	if (increment)		num_keys++;	else		num_keys--;	rc = lseek(fd, TSSPS_NUM_KEYS_OFFSET, SEEK_SET);	if (rc == ((off_t)-1)) {		LogDebug("lseek: %s", strerror(errno));		return TSPERR(TSS_E_INTERNAL_ERROR);	}	if ((result = write_data(fd, (void *)&num_keys, sizeof(UINT32)))) {		LogDebug("%s", __FUNCTION__);		return result;	}	return TSS_SUCCESS;}/* Write the initial header (number of keys and PS version) to initialize a new file */TSS_RESULTpsfile_write_key_header(int fd){	int rc;	TSS_RESULT result;	UINT32 i;	rc = lseek(fd, TSSPS_VERSION_OFFSET, SEEK_SET);	if (rc == ((off_t)-1)) {		LogDebug("lseek: %s", strerror(errno));		return TSPERR(TSS_E_INTERNAL_ERROR);	}	i = TSSPS_VERSION;        if ((result = write_data(fd, &i, sizeof(BYTE)))) {		LogDebug("%s", __FUNCTION__);		return result;	}	rc = lseek(fd, TSSPS_NUM_KEYS_OFFSET, SEEK_SET);	if (rc == ((off_t)-1)) {		LogDebug("lseek: %s", strerror(errno));		return TSPERR(TSS_E_INTERNAL_ERROR);	}	i = 0;        if ((result = write_data(fd, &i, sizeof(UINT32)))) {		LogDebug("%s", __FUNCTION__);		return result;	}	return TSS_SUCCESS;}/* * disk store format: * * TrouSerS 0.2.1+ * Version 1:                  cached? * [BYTE     PS version = '\1'] * [UINT32   num_keys_on_disk ] * [TSS_UUID uuid0            ] yes * [TSS_UUID uuid_parent0     ] yes * [UINT16   pub_data_size0   ] yes * [UINT16   blob_size0       ] yes * [UINT32   vendor_data_size0] yes * [UINT16   cache_flags0     ] yes * [BYTE[]   pub_data0        ] * [BYTE[]   blob0            ] * [BYTE[]   vendor_data0     ] * [...] * */TSS_RESULTpsfile_write_key(int fd,		 TSS_UUID *uuid,		 TSS_UUID *parent_uuid,		 UINT32 parent_ps,		 BYTE *key_blob,		 UINT16 key_blob_size){	TSS_RESULT result;	TSS_KEY key;	UINT32 zero = 0;	UINT64 offset;	UINT16 pub_key_size, cache_flags = 0;	struct stat stat_buf;	int rc, file_offset;	/* leaving the cache flag for parent ps type as 0 implies TSS_PS_TYPE_USER */	if (parent_ps == TSS_PS_TYPE_SYSTEM)		cache_flags |= CACHE_FLAG_PARENT_PS_SYSTEM;	if ((rc = fstat(fd, &stat_buf)) == -1) {		LogDebugFn("stat failed: %s", strerror(errno));		return TSPERR(TSS_E_INTERNAL_ERROR);	}	file_offset = stat_buf.st_size;	if (file_offset < (int)TSSPS_KEYS_OFFSET) {		if ((result = psfile_write_key_header(fd)))			return result;		file_offset = TSSPS_KEYS_OFFSET;	}	rc = lseek(fd, file_offset, SEEK_SET);	if (rc == ((off_t)-1)) {		LogDebug("lseek: %s", strerror(errno));		return TSPERR(TSS_E_INTERNAL_ERROR);	}	/* Unload the blob to get the public key */	offset = 0;	if ((result = UnloadBlob_TSS_KEY(&offset, key_blob, &key)))		return result;	pub_key_size = key.pubKey.keyLength;	/* [TSS_UUID uuid0           ] yes */        if ((result = write_data(fd, (void *)uuid, sizeof(TSS_UUID)))) {		LogDebug("%s", __FUNCTION__);		goto done;	}	/* [TSS_UUID uuid_parent0    ] yes */        if ((result = write_data(fd, (void *)parent_uuid, sizeof(TSS_UUID)))) {		LogDebug("%s", __FUNCTION__);		goto done;	}	/* [UINT16   pub_data_size0  ] yes */        if ((result = write_data(fd, &pub_key_size, sizeof(UINT16)))) {		LogDebug("%s", __FUNCTION__);		goto done;	}	/* [UINT16   blob_size0      ] yes */        if ((result = write_data(fd, &key_blob_size, sizeof(UINT16)))) {		LogDebug("%s", __FUNCTION__);		goto done;	}	/* [UINT32   vendor_data_size0 ] yes */        if ((result = write_data(fd, &zero, sizeof(UINT32)))) {		LogDebug("%s", __FUNCTION__);		goto done;	}	/* [UINT16   cache_flags0    ] yes */        if ((result = write_data(fd, &cache_flags, sizeof(UINT16)))) {		LogDebug("%s", __FUNCTION__);		goto done;	}	/* [BYTE[]   pub_data0       ] no */        if ((result = write_data(fd, (void *)key.pubKey.key, pub_key_size))) {		LogDebug("%s", __FUNCTION__);		goto done;	}	/* [BYTE[]   blob0           ] no */        if ((result = write_data(fd, (void *)key_blob, key_blob_size))) {		LogDebug("%s", __FUNCTION__);		goto done;	}	if ((result = psfile_change_num_keys(fd, TSS_PSFILE_INCREMENT_NUM_KEYS))) {		LogDebug("%s", __FUNCTION__);		goto done;	}done:	free_key_refs(&key);        return result;}TSS_RESULTpsfile_remove_key(int fd, TSS_UUID *uuid){        TSS_RESULT result;        UINT32 head_offset = 0, tail_offset;	int rc, size = 0;	struct key_disk_cache c;	BYTE buf[4096];	if ((result = psfile_get_cache_entry_by_uuid(fd, uuid, &c)))		return result;	/* head_offset is the offset the beginning of the key */	head_offset = TSSPS_UUID_OFFSET(&c);	/* tail_offset is the offset the beginning of the next key */	tail_offset = TSSPS_VENDOR_DATA_OFFSET(&c) + c.vendor_data_size;	rc = lseek(fd, tail_offset, SEEK_SET);	if (rc == ((off_t)-1)) {		LogDebug("lseek: %s", strerror(errno));		return TSPERR(TSS_E_INTERNAL_ERROR);	}	/* read in from tail, write out to head to fill the gap */	while ((rc = read(fd, buf, sizeof(buf))) > 0) {		size = rc;		tail_offset += size;		/* set the file pointer to where we want to write */		rc = lseek(fd, head_offset, SEEK_SET);		if (rc == ((off_t)-1)) {			LogDebug("lseek: %s", strerror(errno));			return TSPERR(TSS_E_INTERNAL_ERROR);		}		/* write the data */		if ((result = write_data(fd, (void *)buf, size))) {			LogDebug("%s", __FUNCTION__);			return result;		}		head_offset += size;		/* set the file pointer to where we want to read in the next		 * loop */		rc = lseek(fd, tail_offset, SEEK_SET);		if (rc == ((off_t)-1)) {			LogDebug("lseek: %s", strerror(errno));			return TSPERR(TSS_E_INTERNAL_ERROR);		}	}	if (rc < 0) {		LogDebug("read: %s", strerror(errno));		return TSPERR(TSS_E_INTERNAL_ERROR);	}	/* set the file pointer to where we want to write */	rc = lseek(fd, head_offset, SEEK_SET);	if (rc == ((off_t)-1)) {		LogDebug("lseek: %s", strerror(errno));		return TSPERR(TSS_E_INTERNAL_ERROR);	}	/* head_offset now contains a pointer to where we want to truncate the	 * file. Zero out the old tail end of the file and truncate it. */	memset(buf, 0, sizeof(buf));	/* Zero out the old tail end of the file */	if ((result = write_data(fd, (void *)buf, tail_offset - head_offset))) {		LogDebug("%s", __FUNCTION__);		return result;	}	if ((rc = ftruncate(fd, head_offset)) < 0) {		LogDebug("ftruncate: %s", strerror(errno));		return TSPERR(TSS_E_INTERNAL_ERROR);	}	/* we succeeded in removing a key from the disk. Decrement the number	 * of keys in the file */	if ((result = psfile_change_num_keys(fd, TSS_PSFILE_DECREMENT_NUM_KEYS)))		return result;	return TSS_SUCCESS;}TSS_RESULTpsfile_get_all_cache_entries(int fd, UINT32 *size, struct key_disk_cache **c){	UINT32 i, num_keys = psfile_get_num_keys(fd);	int offset;	TSS_RESULT result;	struct key_disk_cache *tmp = NULL;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品午夜一区二区三区在线观看| 男女性色大片免费观看一区二区 | 亚洲精品免费电影| 日韩福利视频网| 96av麻豆蜜桃一区二区| 日韩女同互慰一区二区| 一区二区三区在线视频免费观看| 国产福利不卡视频| 波多野结衣中文一区| 国产精品久久久爽爽爽麻豆色哟哟 | 成人免费看视频| 在线播放国产精品二区一二区四区| 三级一区在线视频先锋 | 日韩成人精品在线| 成人h动漫精品一区二| 欧美精品一区在线观看| 蜜臀av亚洲一区中文字幕| 欧美日韩一区二区三区四区| 中文字幕日本乱码精品影院| 国产福利一区在线| 精品成人佐山爱一区二区| 欧美aaaaa成人免费观看视频| 欧美少妇bbb| 亚洲一区二区在线视频| 91麻豆自制传媒国产之光| 国产人久久人人人人爽| 国产成人小视频| 久久综合狠狠综合久久综合88 | 水蜜桃久久夜色精品一区的特点 | 9i在线看片成人免费| 日本一区二区三区久久久久久久久不| 久久国产麻豆精品| 91精品国产一区二区三区| 亚洲第四色夜色| 欧美三级欧美一级| 一个色妞综合视频在线观看| 色一情一伦一子一伦一区| 亚洲日本乱码在线观看| 色琪琪一区二区三区亚洲区| 亚洲另类在线视频| 在线一区二区三区四区| 亚洲精品乱码久久久久久黑人| 97国产一区二区| 亚洲日本成人在线观看| 色综合色狠狠综合色| 亚洲免费av在线| 欧日韩精品视频| 婷婷国产v国产偷v亚洲高清| 91精品国产入口在线| 裸体一区二区三区| 久久综合九色综合欧美就去吻| 国产毛片一区二区| 中文字幕一区不卡| 色av综合在线| 视频一区二区三区在线| 91精品国产色综合久久ai换脸| 久久国产乱子精品免费女| 久久久久久综合| 成人av在线资源网站| 亚洲视频免费看| 欧美午夜精品久久久久久超碰 | 亚洲嫩草精品久久| 欧美午夜精品电影| 久久精品久久综合| 国产亚洲欧洲997久久综合 | 九九精品视频在线看| 久久久一区二区三区捆绑**| 成人精品视频一区| 亚洲精品视频免费观看| 9191精品国产综合久久久久久| 玖玖九九国产精品| 国产精品久久久久永久免费观看 | 国产呦精品一区二区三区网站| 久久久久97国产精华液好用吗| 99热这里都是精品| 午夜精品久久久久久久| 欧美videos大乳护士334| 成人高清伦理免费影院在线观看| 亚洲影院久久精品| 欧美成人女星排行榜| fc2成人免费人成在线观看播放 | 国产精品福利影院| 欧美视频你懂的| 国产精品羞羞答答xxdd| 亚洲欧美综合网| 欧美肥胖老妇做爰| 成人在线视频一区| 亚洲va欧美va人人爽| 久久精品在线免费观看| 欧美亚洲国产一区在线观看网站| 久久精品噜噜噜成人av农村| 亚洲男人的天堂在线观看| 91精品国产综合久久精品麻豆 | 日韩国产欧美在线播放| 国产亚洲精品超碰| 精品污污网站免费看| 国产精品1024久久| 一区二区三区在线观看视频| 精品久久久久久亚洲综合网| 91欧美一区二区| 国产在线播放一区| 午夜视频一区在线观看| 中文字幕乱码久久午夜不卡 | 国产一区二区免费看| 亚洲精品一二三| 国产亚洲午夜高清国产拍精品| 欧美吞精做爰啪啪高潮| 国产成人在线电影| 奇米综合一区二区三区精品视频| 国产精品成人网| 精品av综合导航| 欧美日韩黄色一区二区| 99免费精品在线观看| 国产一区二区三区四区五区美女 | 中文字幕一区二区三区在线播放 | 欧美在线高清视频| 国产91在线看| 精品一区精品二区高清| 亚洲成人免费电影| 亚洲免费在线播放| 亚洲国产成人午夜在线一区| 日韩欧美电影一区| 欧美日韩黄色一区二区| 色综合激情五月| 成人一区二区在线观看| 另类人妖一区二区av| 日韩精品国产精品| 亚洲综合清纯丝袜自拍| 国产精品久久久久久妇女6080| 亚洲精品一区二区三区99| 欧美精品在线一区二区| 在线中文字幕一区二区| 97超碰欧美中文字幕| 成人app网站| 福利一区福利二区| 国产精品一级在线| 激情五月播播久久久精品| 青青国产91久久久久久| 午夜精品影院在线观看| 亚洲综合久久久| 伊人色综合久久天天人手人婷| 中文字幕一区二区三区四区| 国产精品伦一区二区三级视频| 国产日韩欧美a| 国产欧美精品在线观看| 久久综合色婷婷| 精品国产一区二区三区四区四| 欧美一级免费大片| 欧美一级久久久| 欧美一区二区三区日韩| 制服丝袜亚洲精品中文字幕| 欧美精品 日韩| 51午夜精品国产| 制服丝袜一区二区三区| 在线91免费看| 日韩你懂的在线播放| 精品日韩在线一区| 欧美精品一区二区三区一线天视频| 日韩欧美国产三级| 亚洲精品在线网站| 国产欧美一区视频| 日本一二三不卡| 亚洲欧洲精品一区二区三区 | 国产亚洲精久久久久久| 国产三级一区二区| 国产精品色呦呦| 综合久久一区二区三区| 亚洲黄色性网站| 亚洲国产精品久久一线不卡| 丝袜诱惑制服诱惑色一区在线观看 | 日韩三级高清在线| 26uuu另类欧美| 久久久久9999亚洲精品| 国产精品短视频| 亚洲精品老司机| 婷婷久久综合九色综合伊人色| 免费欧美在线视频| 国产精品亚洲视频| 97久久超碰国产精品| 欧美久久一二三四区| 日韩精品资源二区在线| 国产日韩欧美精品一区| 亚洲欧美日韩国产一区二区三区| 亚洲成人久久影院| 麻豆成人在线观看| 顶级嫩模精品视频在线看| 91色porny在线视频| 7777精品伊人久久久大香线蕉的| 精品国产一区二区三区av性色| 国产日韩精品视频一区| 一区二区高清免费观看影视大全| 日韩成人一区二区三区在线观看| 激情综合色播五月| 99久久综合色| 欧美精品xxxxbbbb| 久久嫩草精品久久久久| 亚洲欧洲精品天堂一级 | 亚洲成av人片一区二区三区| 美日韩一级片在线观看| www.成人在线|