⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oiaposap.c

📁 IBM开发的TPM的驱动, 有少量的例子可以供参考
💻 C
字号:
/****************************************************************************//*                                                                          *//*                             OAIP/OSAP protocols                          *//*                                                                          *//*                           Written by J. Kravitz                          *//*                                                                          *//*                     IBM Thomas J. Watson Research Center                 *//*                                                                          *//*                               Version 1.1                                *//*                                                                          *//*                         Last Revision 24 Apr 2003                        *//*                                                                          *//*                           Copyright (C) 2004 IBM                         *//*                                                                          *//****************************************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <netinet/in.h>#include <tpm.h>#include <tpmutil.h>#include <hmac.h>#include <oiaposap.h>/****************************************************************************//*                                                                          *//* Open an OIAP session                                                     *//*                                                                          *//****************************************************************************/uint32_t TSS_OIAPopen(uint32_t * handle, char *enonce){	unsigned char oiap_open_fmt[] = "00 C1 T 00 00 00 0A";	unsigned char tpmdata[TPM_MAX_BUFF_SIZE];	uint32_t ret;	uint32_t size;	/* check input arguments */	if (handle == NULL || enonce == NULL)		return ERR_NULL_ARG;	/* build request buffer */	ret = TSS_buildbuff(oiap_open_fmt, tpmdata);	if ((ret & ERR_MASK) != 0)		return ret;	/* transmit request to TPM and get result */	ret = TPM_Transmit(tpmdata, "OIAP");	if (ret != 0)		return ret;	size = TSS_getsize(tpmdata);	*handle = LOAD32N(tpmdata, TPM_DATA_OFFSET);	memcpy(enonce, &tpmdata[TPM_DATA_OFFSET + TPM_U32_SIZE],	       TPM_NONCE_SIZE);	return 0;}/****************************************************************************//*                                                                          *//* Close an OIAP session                                                    *//*                                                                          *//****************************************************************************/uint32_t TSS_OIAPclose(uint32_t handle){	return TSS_HANDclose(handle);}/****************************************************************************//*                                                                          *//* Open an OSAP session                                                     *//*                                                                          *//****************************************************************************/uint32_t TSS_OSAPopen(osapsess * sess, unsigned char *key, uint16_t etype,		      uint32_t evalue){	unsigned char osap_open_fmt[] = "00 C1 T 00 00 00 0B S L %";	unsigned char tpmdata[TPM_MAX_BUFF_SIZE];	uint32_t ret;	/* check input arguments */	if (key == NULL || sess == NULL)		return ERR_NULL_ARG;	TSS_gennonce(sess->ononceOSAP);	ret =	    TSS_buildbuff(osap_open_fmt, tpmdata, etype, evalue,			  TPM_NONCE_SIZE, sess->ononceOSAP);	if ((ret & ERR_MASK) != 0)		return ret;	ret = TPM_Transmit(tpmdata, "OSAP");	if (ret != 0)		return ret;	sess->handle = LOAD32N(tpmdata, TPM_DATA_OFFSET);	memcpy(sess->enonce, &(tpmdata[TPM_DATA_OFFSET + TPM_U32_SIZE]),	       TPM_NONCE_SIZE);	memcpy(sess->enonceOSAP,	       &(tpmdata[TPM_DATA_OFFSET + TPM_U32_SIZE + TPM_NONCE_SIZE]),	       TPM_NONCE_SIZE);	ret =	    TSS_rawhmac(sess->ssecret, key, TPM_HASH_SIZE, TPM_NONCE_SIZE,			sess->enonceOSAP, TPM_NONCE_SIZE, sess->ononceOSAP,			0, 0);	if (ret != 0)		return ret;	return 0;}/****************************************************************************//*                                                                          *//* Close an OSAP session                                                    *//*                                                                          *//****************************************************************************/uint32_t TSS_OSAPclose(osapsess * sess){	uint32_t ret;	if (sess == NULL)		return ERR_NULL_ARG;	ret = TSS_HANDclose(sess->handle);	return ret;}/****************************************************************************//*                                                                          *//* Terminate the Handle Opened by TPM_OIAPOpen, or TPM_OSAPOpen             *//*                                                                          *//****************************************************************************/uint32_t TSS_HANDclose(uint32_t handle){	unsigned char hand_close_fmt[] = "00 C1 T 00 00 00 96 l";	unsigned char tpmdata[TPM_MAX_BUFF_SIZE];	uint32_t ret;	ret = TSS_buildbuff(hand_close_fmt, tpmdata, handle);	if ((ret & ERR_MASK) != 0)		return ret;	ret = TPM_Transmit(tpmdata, "Terminate Handle");	if (ret != 0)		return ret;	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -