aboutsummaryrefslogtreecommitdiffstats
ModeNameSize
-rw-r--r--.gitattributes203logstatsplain
d---------.github / workflows36logstatsplain
-rw-r--r--.gitignore331logstatsplain
-rw-r--r--82802ab.c6430logstatsplain
-rw-r--r--COPYING17987logstatsplain
d---------Documentation95logstatsplain
-rw-r--r--Doxyfile105702logstatsplain
-rw-r--r--MAINTAINERS5416logstatsplain
-rw-r--r--Makefile34180logstatsplain
d---------Makefile.d467logstatsplain
-rw-r--r--Makefile.include2022logstatsplain
-rw-r--r--README6521logstatsplain
-rw-r--r--amd_imc.c3199logstatsplain
-rw-r--r--at45db.c19419logstatsplain
-rw-r--r--atahpt.c3315logstatsplain
-rw-r--r--atapromise.c6060logstatsplain
-rw-r--r--atavia.c5765logstatsplain
d---------bindings / rust31logstatsplain
-rw-r--r--bitbang_spi.c5708logstatsplain
-rw-r--r--board_enable.c97910logstatsplain
-rw-r--r--buspirate_spi.c21342logstatsplain
-rw-r--r--cbtable.c10838logstatsplain
-rw-r--r--ch341a_spi.c16546logstatsplain
-rw-r--r--chipset_enable.c85215logstatsplain
-rw-r--r--cli_classic.c33695logstatsplain
-rw-r--r--cli_common.c3028logstatsplain
-rw-r--r--cli_output.c3420logstatsplain
-rw-r--r--custom_baud.c935logstatsplain
-rw-r--r--custom_baud_linux.c1554logstatsplain
-rw-r--r--dediprog.c38990logstatsplain
-rw-r--r--developerbox_spi.c5714logstatsplain
-rw-r--r--digilent_spi.c12196logstatsplain
-rw-r--r--dmi.c13021logstatsplain
-rw-r--r--drkaiser.c3449logstatsplain
-rw-r--r--dummyflasher.c42133logstatsplain
-rw-r--r--edi.c11015logstatsplain
-rw-r--r--en29lv640b.c2439logstatsplain
-rw-r--r--flashchips.c533707logstatsplain
-rw-r--r--flashrom.8.tmpl61257logstatsplain
-rw-r--r--flashrom.c63378logstatsplain
-rw-r--r--fmap.c9939logstatsplain
-rw-r--r--ft2232_spi.c20592logstatsplain
-rw-r--r--gfxnvidia.c4400logstatsplain
-rw-r--r--helpers.c2863logstatsplain
-rw-r--r--hwaccess_physmap.c15823logstatsplain
-rw-r--r--hwaccess_x86_io.c8725logstatsplain
-rw-r--r--hwaccess_x86_msr.c7402logstatsplain
-rw-r--r--i2c_helper_linux.c3581logstatsplain
-rw-r--r--ich_descriptors.c48390logstatsplain
-rw-r--r--ichspi.c71773logstatsplain
d---------include829logstatsplain
-rw-r--r--internal.c9798logstatsplain
-rw-r--r--it8212.c3004logstatsplain
-rw-r--r--it87spi.c13290logstatsplain
-rw-r--r--jedec.c23482logstatsplain
-rw-r--r--jlink_spi.c13017logstatsplain
-rw-r--r--layout.c9809logstatsplain
-rw-r--r--libflashrom.c14224logstatsplain
-rw-r--r--libflashrom.map1334logstatsplain
-rw-r--r--linux_mtd.c15050logstatsplain
-rw-r--r--linux_spi.c7313logstatsplain
-rw-r--r--mcp6x_spi.c5464logstatsplain
-rw-r--r--mediatek_i2c_spi.c13809logstatsplain
-rw-r--r--meson.build13914logstatsplain
-rw-r--r--meson_options.txt4376logstatsplain
-rw-r--r--mstarddc_spi.c7102logstatsplain
-rw-r--r--ni845x_spi.c19755logstatsplain
-rw-r--r--nic3com.c5372logstatsplain
-rw-r--r--nicintel.c4195logstatsplain
-rw-r--r--nicintel_eeprom.c13319logstatsplain
-rw-r--r--nicintel_spi.c10530logstatsplain
-rw-r--r--nicnatsemi.c4077logstatsplain
-rw-r--r--nicrealtek.c4252logstatsplain
-rw-r--r--ogp_spi.c4929logstatsplain
-rw-r--r--opaque.c2053logstatsplain
-rw-r--r--parade_lspcon.c15189logstatsplain
-rw-r--r--pcidev.c11600logstatsplain
-rw-r--r--pickit2_spi.c13430logstatsplain
d---------platform161logstatsplain
-rw-r--r--pony_spi.c6054logstatsplain
-rw-r--r--print.c90491logstatsplain
-rw-r--r--print_wiki.c15801logstatsplain
-rw-r--r--processor_enable.c2316logstatsplain
-rw-r--r--programmer.c3901logstatsplain
-rw-r--r--programmer_table.c3110logstatsplain
-rw-r--r--raiden_debug_spi.c54382logstatsplain
-rw-r--r--rayer_spi.c8331logstatsplain
-rw-r--r--realtek_mst_i2c_spi.c15647logstatsplain
-rw-r--r--s25f.c10036logstatsplain
-rw-r--r--satamv.c6538logstatsplain
-rw-r--r--satasii.c4452logstatsplain
-rw-r--r--sb600spi.c28409logstatsplain
-rw-r--r--serial.c16110logstatsplain
-rw-r--r--serprog.c30405logstatsplain
-rw-r--r--sfdp.c10910logstatsplain
-rw-r--r--spi.c5005logstatsplain
-rw-r--r--spi25.c25272logstatsplain
-rw-r--r--spi25_statusreg.c29075logstatsplain
-rw-r--r--spi95.c2281logstatsplain
-rw-r--r--sst28sf040.c3322logstatsplain
-rw-r--r--sst49lfxxxc.c1136logstatsplain
-rw-r--r--sst_fwhub.c2460logstatsplain
-rw-r--r--stlinkv3_spi.c15291logstatsplain
-rw-r--r--stm50.c2103logstatsplain
-rwxr-xr-xtest_build.sh1181logstatsplain
d---------tests1098logstatsplain
-rw-r--r--udelay.c6920logstatsplain
-rw-r--r--usb_device.c9758logstatsplain
-rw-r--r--usbblaster_spi.c6446logstatsplain
-rw-r--r--usbdev.c4742logstatsplain
d---------util480logstatsplain
-rw-r--r--w29ee011.c2163logstatsplain
-rw-r--r--w39.c5603logstatsplain
-rw-r--r--wbsio_spi.c6229logstatsplain
-rw-r--r--writeprotect.c14854logstatsplain
-rw-r--r--writeprotect_ranges.c2679logstatsplain
s="n">pContextHandle = LookupContext(hContext); if (pContextHandle != NULL && ppMemPtr != NULL) { *ppMemPtr = (BYTE *)AddMemBlock(pContextHandle, MemSize); returnCode = TPM_SUCCESS; } return returnCode; } TPM_RESULT TCS_FreeMemory( TCS_CONTEXT_HANDLE hContext, // in BYTE* pMemory) { // in TPM_RESULT returnCode = TPM_FAIL; CONTEXT_HANDLE* pContextHandle = LookupContext(hContext); if ( (pContextHandle != NULL && pMemory != NULL) && (DeleteMemBlock(pContextHandle, pMemory) == TRUE) ) returnCode = TPM_SUCCESS; return returnCode; } TPM_RESULT TCS_OpenContext(TCS_CONTEXT_HANDLE* hContext) { // out TPM_RESULT returnCode = TPM_FAIL; TCS_CONTEXT_HANDLE *newContext; vtpmloginfo(VTPM_LOG_TCS, "Calling TCS_OpenContext:\n"); if (hContext) { CONTEXT_HANDLE* pContextHandle = (CONTEXT_HANDLE *) malloc(sizeof(CONTEXT_HANDLE)); if (pContextHandle == NULL) return TPM_SIZE; // initialize to 0 pContextHandle->nBlockCount = 0; pContextHandle->pTopBlock = NULL; pContextHandle->pHandleList = NULL; // Create New Block AddMemBlock(pContextHandle, BLOCK_SIZE); newContext = (TCS_CONTEXT_HANDLE *) malloc(sizeof(TCS_CONTEXT_HANDLE)); *newContext = (TCS_CONTEXT_HANDLE) (((uintptr_t) pContextHandle >> 2) & 0xffffffff); if (hashtable_search(context_ht, &newContext) !=NULL) *newContext += 1; pContextHandle->handle = *newContext; if (!hashtable_insert(context_ht, newContext, pContextHandle)) { free(newContext); free(pContextHandle); returnCode = TPM_FAIL; } else { *hContext = *newContext; returnCode = TPM_SUCCESS; } } return(returnCode); } TPM_RESULT TCS_CloseContext(TCS_CONTEXT_HANDLE hContext) {// in //FIXME: TCS SHOULD Track failed auths and make sure //we don't try and re-free them here. TPM_RESULT returnCode = TPM_FAIL; CONTEXT_HANDLE* pContextHandle = LookupContext(hContext); if(pContextHandle != NULL) { // Print test info vtpmloginfo(VTPM_LOG_TCS, "Calling TCS_CloseContext.\n"); // free memory for all the blocks DeleteMemBlock(pContextHandle, NULL ); pContextHandle->pTopBlock = NULL; FreeHandleList(pContextHandle); if (pContextHandle->pHandleList != NULL) vtpmlogerror(VTPM_LOG_TCS, "Not all handles evicted from TPM.\n"); // Release the TPM's resources if (hashtable_remove(context_ht, &hContext) == NULL) vtpmlogerror(VTPM_LOG_TCS, "Not all handles evicted from TPM.\n"); free(pContextHandle); returnCode = TPM_SUCCESS; } vtpmloginfo(VTPM_LOG_TCS_DEEP, "Finished closing context\n"); return(returnCode); } // ------------------------------------------------------------------ // Internal Functions // ------------------------------------------------------------------ int packAuth(BYTE* dst, TCS_AUTH* auth) { // CHECK: according to the command specs, the outgoing auth params are: // nonceEven // nonceOdd // continueAuthSession // auth digest for return params // // this is a bit different than this code... return BSG_PackList(dst, 4, BSG_TYPE_UINT32, &(auth->AuthHandle), BSG_TPM_NONCE, &(auth->NonceOdd), BSG_TYPE_BOOL, &(auth->fContinueAuthSession), BSG_TPM_AUTHDATA, &(auth->HMAC)); } int unpackAuth(TCS_AUTH* auth, BYTE* src) { return BSG_UnpackList(src, 3, BSG_TPM_NONCE, &(auth->NonceEven), BSG_TYPE_BOOL, &(auth->fContinueAuthSession), BSG_TPM_AUTHDATA, &(auth->HMAC)); } // ------------------------------------------------------------------ // Authorization Commands // ------------------------------------------------------------------ TPM_RESULT TCSP_OIAP(TCS_CONTEXT_HANDLE hContext, // in TCS_AUTHHANDLE* authHandle, // out TPM_NONCE* nonce0) // out { // setup input/output parameters block TPM_TAG tag = TPM_TAG_RQU_COMMAND; TPM_COMMAND_CODE ordinal = TPM_ORD_OIAP; UINT32 paramSize = 0; TPM_RESULT returnCode = TPM_SUCCESS; // setup the TPM driver input and output buffers TDDL_RESULT hRes = TDDL_E_FAIL; TDDL_UINT32 InLength = TCPA_MAX_BUFFER_LENGTH; TDDL_UINT32 OutLength = TCPA_MAX_BUFFER_LENGTH; // check input params if (authHandle == NULL || nonce0 == NULL) return TPM_BAD_PARAMETER; // Convert Byte Input parameter in the input byte stream InBuf InLength = BSG_PackList(InBuf, 3, BSG_TPM_TAG, &tag, BSG_TYPE_UINT32, &paramSize, BSG_TPM_COMMAND_CODE, &ordinal); // fill paramSize again as we now have the correct size BSG_Pack(BSG_TYPE_UINT32, &InLength, InBuf+2); vtpmloginfo(VTPM_LOG_TCS_DEEP, "Sending paramSize = %d\n", InLength); // call the TPM driver if ((hRes = TDDL_TransmitData(InBuf, InLength, OutBuf, &OutLength)) == TDDL_SUCCESS) { // unpack to get the tag, paramSize, & returnCode int i = BSG_UnpackList( OutBuf, 3, BSG_TPM_TAG, &tag, BSG_TYPE_UINT32, &paramSize, BSG_TPM_COMMAND_CODE, &returnCode); if (returnCode == TPM_SUCCESS && tag == TPM_TAG_RSP_COMMAND) { // Extract the remaining output parameters BSG_UnpackList(OutBuf+i, 2, BSG_TYPE_UINT32, authHandle, BSG_TPM_NONCE, nonce0); if (!AddHandleToList(hContext, TPM_RT_AUTH, *authHandle)) vtpmlogerror(VTPM_LOG_TCS, "New AuthHandle not recorded\n"); vtpmloginfo(VTPM_LOG_TCS_DEEP, "Received paramSize : %d\n", paramSize); } else vtpmlogerror(VTPM_LOG_TCS, "Failed with return code %s\n", tpm_get_error_name(returnCode)); } return(returnCode); } TPM_RESULT TCSP_OSAP(TCS_CONTEXT_HANDLE hContext, // in TPM_ENTITY_TYPE entityType, // in UINT32 entityValue, // in TPM_NONCE nonceOddOSAP, // in TCS_AUTHHANDLE* authHandle, // out TPM_NONCE* nonceEven, // out TPM_NONCE* nonceEvenOSAP) // out { // setup input/output parameters block TPM_TAG tag = TPM_TAG_RQU_COMMAND; UINT32 paramSize = 0; TPM_COMMAND_CODE ordinal = TPM_ORD_OSAP; TPM_RESULT returnCode = TPM_SUCCESS; // setup the TPM driver input and output buffers TDDL_RESULT hRes = TDDL_E_FAIL; TDDL_UINT32 InLength = TCPA_MAX_BUFFER_LENGTH; TDDL_UINT32 OutLength = TCPA_MAX_BUFFER_LENGTH; // check input params if (authHandle == NULL || nonceEven == NULL || nonceEvenOSAP == NULL) return TPM_BAD_PARAMETER; // Convert Byte Input parameter in the input byte stream InBuf InLength = BSG_PackList(InBuf, 6, BSG_TPM_TAG, &tag, BSG_TYPE_UINT32, &paramSize, BSG_TPM_COMMAND_CODE, &ordinal, BSG_TYPE_UINT16, &entityType, BSG_TYPE_UINT32, &entityValue, BSG_TPM_NONCE, &nonceOddOSAP); // fill paramSize again as we now have the correct size BSG_Pack(BSG_TYPE_UINT32, &InLength, InBuf+2); vtpmloginfo(VTPM_LOG_TCS_DEEP, "Sending paramSize = %d\n", InLength); // call the TPM driver if ((hRes = TDDL_TransmitData(InBuf, InLength, OutBuf, &OutLength)) == TDDL_SUCCESS) { // unpack to get the tag, paramSize, & returnCode int i = BSG_UnpackList(OutBuf, 3, BSG_TPM_TAG, &tag, BSG_TYPE_UINT32, &paramSize, BSG_TPM_COMMAND_CODE, &returnCode); if (returnCode == TPM_SUCCESS && tag == TPM_TAG_RSP_COMMAND) { // Extract the remaining output parameters BSG_UnpackList(OutBuf+i, 3, BSG_TYPE_UINT32, authHandle, BSG_TPM_NONCE, nonceEven, BSG_TPM_NONCE, nonceEvenOSAP); if (!AddHandleToList(hContext, TPM_RT_AUTH, *authHandle)) { vtpmlogerror(VTPM_LOG_TCS, "New AuthHandle not recorded\n"); } vtpmloginfo(VTPM_LOG_TCS_DEEP, "Received paramSize : %d\n", paramSize); } else vtpmlogerror(VTPM_LOG_TCS, "Failed with return code %s\n", tpm_get_error_name(returnCode)); } return(returnCode); } TPM_RESULT TCSP_TakeOwnership(TCS_CONTEXT_HANDLE hContext, // in UINT16 protocolID, // in UINT32 encOwnerAuthSize, // in BYTE* encOwnerAuth, // in UINT32 encSrkAuthSize, // in BYTE* encSrkAuth, // in UINT32* SrkSize, // in, out BYTE** Srk, // in, out TCS_AUTH* ownerAuth) // in, out { // setup input/output parameters block TPM_TAG tag = TPM_TAG_RQU_AUTH1_COMMAND; UINT32 paramSize = 0; TPM_COMMAND_CODE ordinal = TPM_ORD_TakeOwnership; TPM_RESULT returnCode = TPM_SUCCESS; // setup the TPM driver input and output buffers TDDL_RESULT hRes = TDDL_E_FAIL; TDDL_UINT32 InLength = TCPA_MAX_BUFFER_LENGTH; TDDL_UINT32 OutLength = TCPA_MAX_BUFFER_LENGTH; // check input params if (encOwnerAuth == NULL || encSrkAuth == NULL || SrkSize == NULL || *Srk == NULL) return TPM_BAD_PARAMETER; // Convert Byte Input parameter in the input byte stream InBuf InLength = BSG_PackList(InBuf, 5, BSG_TPM_TAG, &tag, BSG_TYPE_UINT32, &paramSize, BSG_TPM_COMMAND_CODE, &ordinal, BSG_TYPE_UINT16, &protocolID, BSG_TYPE_UINT32, &encOwnerAuthSize); memcpy(InBuf+InLength, encOwnerAuth, encOwnerAuthSize); InLength += encOwnerAuthSize; InLength += BSG_Pack( BSG_TYPE_UINT32, &encSrkAuthSize, InBuf+InLength); memcpy(InBuf+InLength, encSrkAuth, encSrkAuthSize); InLength += encSrkAuthSize; memcpy(InBuf+InLength, *Srk, *SrkSize); InLength += *SrkSize; InLength += packAuth(InBuf+InLength, ownerAuth); // fill paramSize again as we now have the correct size BSG_Pack(BSG_TYPE_UINT32, &InLength, InBuf+2); vtpmloginfo(VTPM_LOG_TCS_DEEP, "Sending paramSize = %d\n", InLength); // call the TPM driver if ((hRes = TDDL_TransmitData(InBuf, InLength, OutBuf, &OutLength)) == TDDL_SUCCESS){ // unpack to get the tag, paramSize, & returnCode int i = BSG_UnpackList( OutBuf, 3, BSG_TPM_TAG, &tag, BSG_TYPE_UINT32, &paramSize, BSG_TPM_COMMAND_CODE, &returnCode); if (returnCode == TPM_SUCCESS && tag == TPM_TAG_RSP_AUTH1_COMMAND) { // Extract the remaining output parameters TPM_KEY srkPub; i += BSG_Unpack(BSG_TPM_KEY, OutBuf+i, &srkPub); unpackAuth(ownerAuth, OutBuf+i); // fill output params BYTE tempBuf[1024]; *SrkSize = BSG_Pack(BSG_TPM_KEY, &srkPub, tempBuf); if (TCS_Malloc(hContext, *SrkSize, Srk) == TPM_FAIL) { return(TPM_SIZE); } memcpy(*Srk, tempBuf, *SrkSize); vtpmloginfo(VTPM_LOG_TCS_DEEP, "Received paramSize : %d", paramSize); } else vtpmlogerror(VTPM_LOG_TCS, "TCSP_TakeOwnership Failed with return code %s\n", tpm_get_error_name(returnCode)); } return(returnCode); } TPM_RESULT TCSP_DisablePubekRead ( TCS_CONTEXT_HANDLE hContext, // in TCS_AUTH* ownerAuth) { // in, out // setup input/output parameters block TPM_TAG tag = TPM_TAG_RQU_AUTH1_COMMAND; UINT32 paramSize = 0; TPM_COMMAND_CODE ordinal = TPM_ORD_DisablePubekRead; TPM_RESULT returnCode = TPM_SUCCESS; // setup the TPM driver input and output buffers TDDL_RESULT hRes = TDDL_E_FAIL; TDDL_UINT32 InLength = TCPA_MAX_BUFFER_LENGTH; TDDL_UINT32 OutLength = TCPA_MAX_BUFFER_LENGTH; // Convert Byte Input parameter in the input byte stream InBuf InLength = BSG_PackList(InBuf, 3, BSG_TPM_TAG, &tag, BSG_TYPE_UINT32, &paramSize, BSG_TPM_COMMAND_CODE, &ordinal); InLength += packAuth(InBuf+InLength, ownerAuth); // fill paramSize again as we now have the correct size BSG_Pack(BSG_TYPE_UINT32, &InLength, InBuf+2); vtpmloginfo(VTPM_LOG_TCS_DEEP, "Sending paramSize = %d\n", InLength); // call the TPM driver if ((hRes = TDDL_TransmitData(InBuf, InLength, OutBuf, &OutLength)) == TDDL_SUCCESS){ // unpack to get the tag, paramSize, & returnCode int i = BSG_UnpackList( OutBuf, 3, BSG_TPM_TAG, &tag, BSG_TYPE_UINT32, &paramSize, BSG_TPM_COMMAND_CODE, &returnCode); if (returnCode == TPM_SUCCESS && tag == TPM_TAG_RSP_AUTH1_COMMAND) { // Extract the remaining output parameters unpackAuth(ownerAuth, OutBuf+i); } else vtpmlogerror(VTPM_LOG_TCS, "TCSP_DisablePubekRead Failed with return code %s\n", tpm_get_error_name(returnCode)); } return(returnCode); } TPM_RESULT TCSP_TerminateHandle(TCS_CONTEXT_HANDLE hContext, // in TCS_AUTHHANDLE handle) // in { // setup input/output parameters block TPM_TAG tag = TPM_TAG_RQU_COMMAND; UINT32 paramSize = 0; TPM_COMMAND_CODE ordinal = TPM_ORD_Terminate_Handle; TPM_RESULT returnCode = TPM_SUCCESS; // setup the TPM driver input and output buffers TDDL_RESULT hRes = TDDL_E_FAIL; TDDL_UINT32 InLength = TCPA_MAX_BUFFER_LENGTH; TDDL_UINT32 OutLength = TCPA_MAX_BUFFER_LENGTH; // Convert Byte Input parameter in the input byte stream InBuf InLength = BSG_PackList(InBuf, 4, BSG_TPM_TAG, &tag, BSG_TYPE_UINT32, &paramSize, BSG_TPM_COMMAND_CODE, &ordinal, BSG_TYPE_UINT32, &handle); // fill paramSize again as we now have the correct size BSG_Pack(BSG_TYPE_UINT32, &InLength, InBuf+2); // call the TPM driver if ((hRes = TDDL_TransmitData(InBuf, InLength, OutBuf, &OutLength)) == TDDL_SUCCESS) { // unpack to get the tag, paramSize, & returnCode BSG_UnpackList(OutBuf, 3, BSG_TPM_TAG, &tag, BSG_TYPE_UINT32, &paramSize, BSG_TPM_COMMAND_CODE, &returnCode); if (!DeleteHandleFromList(hContext, handle)) vtpmlogerror(VTPM_LOG_TCS, "KeyHandle not removed from list\n"); if (returnCode == TPM_SUCCESS && tag == TPM_TAG_RSP_COMMAND) { // Print debug info vtpmloginfo(VTPM_LOG_TCS_DEEP, "Received paramSize : %d", paramSize); } else vtpmlogerror(VTPM_LOG_TCS, "TCSP_TerminateHandle Failed with return code %s\n", tpm_get_error_name(returnCode)); } return(returnCode); } // TPM Mandatory TPM_RESULT TCSP_Extend( TCS_CONTEXT_HANDLE hContext, // in TPM_PCRINDEX pcrNum, // in TPM_DIGEST inDigest, // in TPM_PCRVALUE* outDigest) // out { // setup input/output parameters block TPM_TAG tag = TPM_TAG_RQU_COMMAND; UINT32 paramSize = 0; TPM_COMMAND_CODE ordinal = TPM_ORD_Extend; TPM_RESULT returnCode = TPM_SUCCESS; // setup the TPM driver input and output buffers TDDL_RESULT hRes = TDDL_E_FAIL; TDDL_UINT32 InLength = TCPA_MAX_BUFFER_LENGTH; TDDL_UINT32 OutLength = TCPA_MAX_BUFFER_LENGTH; // Convert Byte Input parameter in the input byte stream InBuf InLength = BSG_PackList(InBuf, 5, BSG_TPM_TAG, &tag, BSG_TYPE_UINT32, &paramSize, BSG_TPM_COMMAND_CODE, &ordinal, BSG_TYPE_UINT32, &pcrNum, BSG_TPM_DIGEST, &inDigest); // fill paramSize again as we now have the correct size BSG_Pack(BSG_TYPE_UINT32, &InLength, InBuf+2); vtpmloginfo(VTPM_LOG_TCS_DEEP, "Sending paramSize = %d\n", InLength); // call the TPM driver if ((hRes = TDDL_TransmitData(InBuf, InLength, OutBuf, &OutLength)) == TDDL_SUCCESS) { // unpack to get the tag, paramSize, & returnCode int i = BSG_UnpackList(OutBuf, 3, BSG_TPM_TAG, &tag, BSG_TYPE_UINT32, &paramSize, BSG_TPM_COMMAND_CODE, &returnCode); if (returnCode == TPM_SUCCESS && tag == TPM_TAG_RSP_COMMAND){ // Extract the remaining output parameters BSG_Unpack(BSG_TPM_PCRVALUE, OutBuf+i, outDigest); vtpmloginfo(VTPM_LOG_TCS_DEEP, "Received paramSize : %d\n", paramSize); } else vtpmlogerror(VTPM_LOG_TCS, "TCSP_Extend Failed with return code %s\n", tpm_get_error_name(returnCode)); } return(returnCode); } TPM_RESULT TCSP_Seal( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE keyHandle, // in TPM_ENCAUTH encAuth, // in UINT32 pcrInfoSize, // in BYTE* PcrInfo, // in UINT32 inDataSize, // in BYTE* inData, // in TCS_AUTH* pubAuth, // in, out UINT32* SealedDataSize, // out