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

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

?? ps_utils.c

?? TCG軟件棧 linux系統上使用 為可信應用軟件提供和 TPM通信的 接口 其網站上有很多關于使用此軟件的測試用例
?? C
字號:
/* * Licensed Materials - Property of IBM * * trousers - An open source TCG Software Stack * * (C) Copyright International Business Machines Corp. 2004 * */#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <string.h>#include <limits.h>#include <assert.h>#include <errno.h>#include "trousers/tss.h"#include "trousers_types.h"#include "tcs_int_literals.h"#include "tcsps.h"#include "tcs_tsp.h"#include "tcs_utils.h"#include "tcslog.h"struct key_disk_cache *key_disk_cache_head = NULL;inline TSS_RESULTread_data(int fd, void *data, UINT32 size){	int rc;	rc = read(fd, data, size);	if (rc == -1) {		LogError("read of %d bytes: %s", size, strerror(errno));		return TCSERR(TSS_E_INTERNAL_ERROR);	} else if ((unsigned)rc != size) {		LogError("read of %d bytes (only %d read)", size, rc);		return TCSERR(TSS_E_INTERNAL_ERROR);	}	return TSS_SUCCESS;}inline TSS_RESULTwrite_data(int fd, void *data, UINT32 size){	int rc;	rc = write(fd, data, size);	if (rc == -1) {		LogError("write of %d bytes: %s", size, strerror(errno));		return TCSERR(TSS_E_INTERNAL_ERROR);	} else if ((unsigned)rc != size) {		LogError("write of %d bytes (only %d written)", size, rc);		return TCSERR(TSS_E_INTERNAL_ERROR);	}	return TSS_SUCCESS;}/* * called by write_key_init to find the next available location in the PS file to * write a new key to. */intfind_write_offset(UINT32 pub_data_size, UINT32 blob_size, UINT32 vendor_data_size){	struct key_disk_cache *tmp;	unsigned int offset;	MUTEX_LOCK(disk_cache_lock);	tmp = key_disk_cache_head;	while (tmp) {		/* if we find a deleted key of the right size, return its offset */		if (!(tmp->flags & CACHE_FLAG_VALID) &&		    tmp->pub_data_size == pub_data_size &&		    tmp->blob_size == blob_size &&		    tmp->vendor_data_size == vendor_data_size) {			offset = tmp->offset;			MUTEX_UNLOCK(disk_cache_lock);			return offset;		}		tmp = tmp->next;	}	MUTEX_UNLOCK(disk_cache_lock);	/* no correctly sized holes */	return -1;}/* * move the file pointer to the point where the next key can be written and return * that offset */intwrite_key_init(int fd, UINT32 pub_data_size, UINT32 blob_size, UINT32 vendor_data_size){	UINT32 num_keys;	BYTE version;	int rc, offset;	/* seek to the PS version */	rc = lseek(fd, TSSPS_VERSION_OFFSET, SEEK_SET);	if (rc == ((off_t) - 1)) {		LogError("lseek: %s", strerror(errno));		return -1;	}	/* go to NUM_KEYS */	rc = lseek(fd, TSSPS_NUM_KEYS_OFFSET, SEEK_SET);	if (rc == ((off_t) - 1)) {		LogError("lseek: %s", strerror(errno));		return -1;	}	/* read the number of keys */	rc = read(fd, &num_keys, sizeof(UINT32));	if (rc == -1) {		LogError("read of %zd bytes: %s", sizeof(UINT32), strerror(errno));		return -1;	} else if (rc == 0) {		/* This is the first key being written */		num_keys = 1;		version = 1;		/* seek to the PS version */		rc = lseek(fd, TSSPS_VERSION_OFFSET, SEEK_SET);		if (rc == ((off_t) - 1)) {			LogError("lseek: %s", strerror(errno));			return -1;		}		/* write out the version info byte */		if ((rc = write_data(fd, &version, sizeof(BYTE)))) {			LogError("%s", __FUNCTION__);			return rc;		}		rc = lseek(fd, TSSPS_NUM_KEYS_OFFSET, SEEK_SET);		if (rc == ((off_t) - 1)) {			LogError("lseek: %s", strerror(errno));			return -1;		}		if ((rc = write_data(fd, &num_keys, sizeof(UINT32)))) {			LogError("%s", __FUNCTION__);			return rc;		}		/* return the offset */		return (TSSPS_NUM_KEYS_OFFSET + sizeof(UINT32));	}	/* if there is a hole in the file we can write to, find it */	offset = find_write_offset(pub_data_size, blob_size, vendor_data_size);	if (offset != -1) {		/* we found a hole, seek to it and don't increment the # of keys on disk */		rc = lseek(fd, offset, SEEK_SET);	} else {		/* we didn't find a hole, increment the number of keys on disk and seek		 * to the end of the file		 */		num_keys++;		/* go to the beginning */		rc = lseek(fd, TSSPS_NUM_KEYS_OFFSET, SEEK_SET);		if (rc == ((off_t) - 1)) {			LogError("lseek: %s", strerror(errno));			return -1;		}		if ((rc = write_data(fd, &num_keys, sizeof(UINT32)))) {			LogError("%s", __FUNCTION__);			return rc;		}		rc = lseek(fd, 0, SEEK_END);	}	if (rc == ((off_t) - 1)) {		LogError("lseek: %s", strerror(errno));		return -1;	}	/* lseek returns the number of bytes of offset from the beginning of the file */	return rc;}/* * add a new cache entry for a written key */TSS_RESULTcache_key(UINT32 offset, UINT16 flags,		TSS_UUID *uuid, TSS_UUID *parent_uuid,		UINT16 pub_data_size, UINT32 blob_size,		UINT32 vendor_data_size){	struct key_disk_cache *tmp;	MUTEX_LOCK(disk_cache_lock);	tmp = key_disk_cache_head;	for (; tmp; tmp = tmp->next) {		/* reuse an invalidated key cache entry */		if (!(tmp->flags & CACHE_FLAG_VALID))			goto fill_cache_entry;	}	tmp = malloc(sizeof(struct key_disk_cache));	if (tmp == NULL) {		LogError("malloc of %zd bytes failed.", sizeof(struct key_disk_cache));		MUTEX_UNLOCK(disk_cache_lock);		return TCSERR(TSS_E_OUTOFMEMORY);	}	tmp->next = key_disk_cache_head;	key_disk_cache_head = tmp;fill_cache_entry:	tmp->offset = offset;#ifdef TSS_DEBUG	if (offset == 0)		LogDebug("Storing key with file offset==0!!!");#endif	tmp->flags = flags;	tmp->blob_size = blob_size;	tmp->pub_data_size = pub_data_size;	tmp->vendor_data_size = vendor_data_size;	memcpy(&tmp->uuid, uuid, sizeof(TSS_UUID));	memcpy(&tmp->parent_uuid, parent_uuid, sizeof(TSS_UUID));	MUTEX_UNLOCK(disk_cache_lock);	return TSS_SUCCESS;}/* * read into the PS file and return the number of keys */intget_num_keys_in_file(int fd){	UINT32 num_keys;	int rc;	/* go to the number of keys */	rc = lseek(fd, TSSPS_NUM_KEYS_OFFSET, SEEK_SET);	if (rc == ((off_t) - 1)) {		LogError("lseek: %s", strerror(errno));		return 0;	}	rc = read(fd, &num_keys, sizeof(UINT32));	if (rc < 0) {		LogError("read of %zd bytes: %s", sizeof(UINT32), strerror(errno));		return 0;	} else if ((unsigned)rc < sizeof(UINT32)) {		num_keys = 0;	}	return num_keys;}/* * count the number of valid keys in the cache */intget_num_keys(){	int num_keys = 0;	struct key_disk_cache *tmp;	MUTEX_LOCK(disk_cache_lock);	tmp = key_disk_cache_head;	for (; tmp; tmp = tmp->next) {		if (tmp->flags & CACHE_FLAG_VALID)			num_keys++;	}	MUTEX_UNLOCK(disk_cache_lock);	return num_keys;}/* * disk store format: * * TrouSerS 0.2.0 and before: * Version 0:                  cached? * [UINT32   num_keys_on_disk] * [TSS_UUID uuid0           ] yes * [TSS_UUID uuid_parent0    ] yes * [UINT16   pub_data_size0  ] yes * [UINT16   blob_size0      ] yes * [UINT16   cache_flags0    ] yes * [BYTE[]   pub_data0       ] * [BYTE[]   blob0           ] * [...] * * 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     ] * [...] * *//* * read the PS file pointed to by fd and create a cache based on it */intinit_disk_cache(int fd){	UINT32 num_keys = get_num_keys_in_file(fd);	UINT16 i;	UINT64 tmp_offset;	int rc = 0, offset;	struct key_disk_cache *tmp, *prev = NULL;	BYTE srk_blob[2048];	TSS_KEY srk_key;#ifdef TSS_DEBUG	int valid_keys = 0;#endif	MUTEX_LOCK(disk_cache_lock);	if (num_keys == 0) {		key_disk_cache_head = NULL;		MUTEX_UNLOCK(disk_cache_lock);		return 0;	} else {		key_disk_cache_head = tmp = calloc(1, sizeof(struct key_disk_cache));		if (tmp == NULL) {			LogError("malloc of %zd bytes failed.",						sizeof(struct key_disk_cache));			rc = -1;			goto err_exit;		}	}	/* make sure the file pointer is where we expect, just after the number	 * of keys on disk at the head of the file	 */	offset = lseek(fd, TSSPS_KEYS_OFFSET, SEEK_SET);	if (offset == ((off_t) - 1)) {		LogError("lseek: %s", strerror(errno));		rc = -1;		goto err_exit;	}	for (i=0; i<num_keys; i++) {		offset = lseek(fd, 0, SEEK_CUR);		if (offset == ((off_t) - 1)) {			LogError("lseek: %s", strerror(errno));			rc = -1;			goto err_exit;		}		tmp->offset = offset;#ifdef TSS_DEBUG		if (offset == 0)			LogDebug("Storing key with file offset==0!!!");#endif		/* read UUID */		if ((rc = read_data(fd, (void *)&tmp->uuid, sizeof(TSS_UUID)))) {			LogError("%s", __FUNCTION__);			goto err_exit;		}		/* read parent UUID */		if ((rc = read_data(fd, (void *)&tmp->parent_uuid, sizeof(TSS_UUID)))) {			LogError("%s", __FUNCTION__);			goto err_exit;		}		/* pub data size */		if ((rc = read_data(fd, &tmp->pub_data_size, sizeof(UINT16)))) {			LogError("%s", __FUNCTION__);			goto err_exit;		}		DBG_ASSERT(tmp->pub_data_size <= 2048 && tmp->pub_data_size > 0);		/* blob size */		if ((rc = read_data(fd, &tmp->blob_size, sizeof(UINT16)))) {			LogError("%s", __FUNCTION__);			goto err_exit;		}		DBG_ASSERT(tmp->blob_size <= 4096 && tmp->blob_size > 0);		/* vendor data size */		if ((rc = read_data(fd, &tmp->vendor_data_size, sizeof(UINT32)))) {			LogError("%s", __FUNCTION__);			goto err_exit;		}		/* cache flags */		if ((rc = read_data(fd, &tmp->flags, sizeof(UINT16)))) {			LogError("%s", __FUNCTION__);			goto err_exit;		}#ifdef TSS_DEBUG		if (tmp->flags & CACHE_FLAG_VALID)			valid_keys++;#endif		/* fast forward over the pub key */		offset = lseek(fd, tmp->pub_data_size, SEEK_CUR);		if (offset == ((off_t) - 1)) {			LogError("lseek: %s", strerror(errno));			rc = -1;			goto err_exit;		}		/* if this is the SRK, load it into memory, since its already loaded in		 * the chip */		if (!memcmp(&SRK_UUID, &tmp->uuid, sizeof(TSS_UUID))) {			/* read SRK blob from disk */			if ((rc = read_data(fd, srk_blob, tmp->blob_size))) {				LogError("%s", __FUNCTION__);				goto err_exit;			}			tmp_offset = 0;			if ((rc = UnloadBlob_TSS_KEY(&tmp_offset, srk_blob, &srk_key)))				goto err_exit;			/* add to the mem cache */			if ((rc = mc_add_entry_init(SRK_TPM_HANDLE, SRK_TPM_HANDLE, &srk_key,						    &SRK_UUID))) {				LogError("Error adding SRK to mem cache.");				destroy_key_refs(&srk_key);				goto err_exit;			}			destroy_key_refs(&srk_key);		} else {			/* fast forward over the blob */			offset = lseek(fd, tmp->blob_size, SEEK_CUR);			if (offset == ((off_t) - 1)) {				LogError("lseek: %s", strerror(errno));				rc = -1;				goto err_exit;			}			/* fast forward over the vendor data */			offset = lseek(fd, tmp->vendor_data_size, SEEK_CUR);			if (offset == ((off_t) - 1)) {				LogError("lseek: %s", strerror(errno));				rc = -1;				goto err_exit;			}		}		tmp->next = calloc(1, sizeof(struct key_disk_cache));		if (tmp->next == NULL) {			LogError("malloc of %zd bytes failed.",					sizeof(struct key_disk_cache));			rc = -1;			goto err_exit;		}		prev = tmp;		tmp = tmp->next;	}	/* delete the dangling, unfilled cache entry */	free(tmp);	prev->next = NULL;	rc = 0;	LogDebug("%s: found %d valid key(s) on disk.\n", __FUNCTION__, valid_keys);err_exit:	MUTEX_UNLOCK(disk_cache_lock);	return rc;}intclose_disk_cache(int fd){	struct key_disk_cache *tmp, *tmp_next;	if (key_disk_cache_head == NULL)		return 0;	MUTEX_LOCK(disk_cache_lock);	tmp = key_disk_cache_head;	do {		tmp_next = tmp->next;		free(tmp);		tmp = tmp_next;	} while (tmp);	MUTEX_UNLOCK(disk_cache_lock);	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀av性久久久久蜜臀av麻豆| 国产成人超碰人人澡人人澡| 成人免费高清在线观看| 欧美色网站导航| 亚洲国产va精品久久久不卡综合| 99视频一区二区| 亚洲视频每日更新| 色妞www精品视频| 伊人性伊人情综合网| eeuss鲁片一区二区三区在线观看| 国产调教视频一区| k8久久久一区二区三区| 一区二区三区在线视频免费| 97久久超碰国产精品| 亚洲国产精品人人做人人爽| 在线观看区一区二| 男男成人高潮片免费网站| 欧美一三区三区四区免费在线看| 蜜桃精品视频在线| 日韩毛片在线免费观看| 欧美在线综合视频| 狠狠网亚洲精品| 亚洲国产精品一区二区久久恐怖片| 欧美久久久久久久久中文字幕| 蜜桃av一区二区| 亚洲高清在线视频| 中日韩免费视频中文字幕| 69堂精品视频| 欧美自拍丝袜亚洲| caoporen国产精品视频| 欧美a级理论片| 亚洲视频免费在线| 久久嫩草精品久久久精品一| 欧美曰成人黄网| 成人永久免费视频| 日韩中文字幕区一区有砖一区| 午夜视频在线观看一区二区| 精品国产a毛片| 日韩亚洲欧美一区二区三区| 欧美性猛交xxxxxxxx| 成人高清视频在线| 国产精品影视在线观看| 麻豆精品蜜桃视频网站| 亚洲国产成人高清精品| 亚洲欧美一区二区久久 | 午夜日韩在线电影| 一区二区成人在线视频| 亚洲欧美另类小说视频| 亚洲乱码中文字幕综合| 亚洲免费观看高清完整| 亚洲精品国产a| 亚洲国产aⅴ天堂久久| 美腿丝袜亚洲色图| 国内精品国产三级国产a久久| 狂野欧美性猛交blacked| 精品一区二区日韩| 国产精品中文字幕欧美| 国产成人超碰人人澡人人澡| av电影在线观看一区| 欧美系列一区二区| 欧美剧在线免费观看网站| 制服视频三区第一页精品| 欧美大片免费久久精品三p| 久久综合久久综合九色| 国产精品成人免费在线| 亚洲男女一区二区三区| 国产欧美日韩另类视频免费观看| 在线播放欧美女士性生活| 精品福利av导航| 亚洲一线二线三线视频| 蜜桃av一区二区三区电影| 美女一区二区视频| 日本丶国产丶欧美色综合| 成人av影院在线| 欧美日韩日本视频| 2023国产精品视频| 国产成人免费视频| 捆绑调教美女网站视频一区| 国产精品888| 日韩精品一区二区在线观看| 视频一区视频二区中文字幕| 欧美日韩成人一区| 悠悠色在线精品| 国产一区视频网站| 欧美高清精品3d| 亚洲裸体在线观看| 国产高清不卡二三区| 亚洲精品乱码久久久久久日本蜜臀| 亚洲第一主播视频| 99re视频精品| 国产精品久久午夜夜伦鲁鲁| 青椒成人免费视频| 91麻豆国产香蕉久久精品| 久久精品视频在线看| 精品综合免费视频观看| 6080国产精品一区二区| 日本vs亚洲vs韩国一区三区| 国产日产欧美一区| 国产一区二区剧情av在线| 国产欧美日韩视频在线观看| 免费久久精品视频| 宅男噜噜噜66一区二区66| 亚洲午夜成aⅴ人片| 91精品办公室少妇高潮对白| 亚洲影院免费观看| 欧美日韩三级视频| 久色婷婷小香蕉久久| 欧美va在线播放| 国产伦精一区二区三区| 久久久精品tv| 日本福利一区二区| 日韩国产成人精品| 精品国产乱码久久久久久蜜臀| 激情六月婷婷综合| 奇米色777欧美一区二区| 日本一区二区三区高清不卡| 麻豆成人在线观看| 成人动漫视频在线| 欧美精品一区二区三区蜜桃视频| 91在线精品一区二区| 精品国产髙清在线看国产毛片| 日韩高清一区二区| 欧美视频日韩视频| 日韩欧美不卡一区| 91色porny蝌蚪| 国产成人亚洲综合a∨婷婷| 亚洲一区二区精品久久av| 综合电影一区二区三区| 国产亚洲成aⅴ人片在线观看| 欧美精品xxxxbbbb| 欧美一区二区三区在线看| 亚洲天堂2016| 色综合天天综合在线视频| 久久一区二区三区国产精品| 青青草91视频| 亚洲国产高清在线观看视频| 日韩国产欧美在线播放| 在线不卡中文字幕| 毛片基地黄久久久久久天堂| 久久久99精品久久| 欧美在线观看你懂的| 奇米精品一区二区三区在线观看| 亚洲国产成人自拍| 欧美三片在线视频观看| 成人a免费在线看| 亚洲一二三区不卡| 欧美图区在线视频| 日产国产高清一区二区三区| 欧美经典三级视频一区二区三区| 91香蕉视频在线| 亚洲精品美腿丝袜| 国产精品自拍网站| 亚洲视频在线一区| 在线影视一区二区三区| 91福利国产精品| 五月天久久比比资源色| 日本乱码高清不卡字幕| 亚洲午夜免费福利视频| 91精品国产综合久久小美女| 一区二区三区在线不卡| 26uuu亚洲综合色欧美 | 日韩欧美亚洲另类制服综合在线| 欧洲精品一区二区| 日韩欧美在线网站| 国产精品动漫网站| 美女视频一区在线观看| 伊人婷婷欧美激情| 欧美日韩五月天| 欧洲av一区二区嗯嗯嗯啊| 91搞黄在线观看| 国产91丝袜在线播放九色| 久久久九九九九| 中文字幕精品在线不卡| 亚洲丝袜制服诱惑| 中文字幕一区二区三区不卡在线 | 欧美日韩三级一区| 尤物视频一区二区| 久久夜色精品国产噜噜av| 91日韩在线专区| 国产成人h网站| 99re66热这里只有精品3直播| 国产在线播放一区二区三区| 青娱乐精品在线视频| 国产精品激情偷乱一区二区∴| 一级女性全黄久久生活片免费| 亚洲最新在线观看| 国产精品美女一区二区| 欧美一区二区三区免费| 久久蜜桃一区二区| 日韩美女一区二区三区四区| 国产精品国产三级国产三级人妇 | 欧美一区午夜精品| 国产精品久久久久毛片软件| 五月综合激情网| 精品一区二区在线看| 色综合色综合色综合| 欧美白人最猛性xxxxx69交| 亚洲欧洲美洲综合色网| 狠狠久久亚洲欧美| 精品久久国产97色综合|