15679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// This file was extracted from the TCG Published 25679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Trusted Platform Module Library 35679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Part 3: Commands 45679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Family "2.0" 55679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Level 00 Revision 01.16 65679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// October 30, 2014 75679752bf24c21135884e987c4077e2f7184897Vadim Bendebury 85679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "InternalRoutines.h" 95679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "Platform.h" 105679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "PCR_fp.h" 115679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 125679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// This function is called to process a _TPM_Hash_Data() indication. 135679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// 145679752bf24c21135884e987c4077e2f7184897Vadim Bendeburyvoid 155679752bf24c21135884e987c4077e2f7184897Vadim Bendebury_TPM_Hash_Data( 165679752bf24c21135884e987c4077e2f7184897Vadim Bendebury UINT32 dataSize, // IN: size of data to be extend 175679752bf24c21135884e987c4077e2f7184897Vadim Bendebury BYTE *data // IN: data buffer 185679752bf24c21135884e987c4077e2f7184897Vadim Bendebury ) 195679752bf24c21135884e987c4077e2f7184897Vadim Bendebury{ 205679752bf24c21135884e987c4077e2f7184897Vadim Bendebury UINT32 i; 215679752bf24c21135884e987c4077e2f7184897Vadim Bendebury HASH_OBJECT *hashObject; 225679752bf24c21135884e987c4077e2f7184897Vadim Bendebury TPMI_DH_PCR pcrHandle = TPMIsStarted() 235679752bf24c21135884e987c4077e2f7184897Vadim Bendebury ? PCR_FIRST + DRTM_PCR : PCR_FIRST + HCRTM_PCR; 245679752bf24c21135884e987c4077e2f7184897Vadim Bendebury 255679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // If there is no DRTM sequence object, then _TPM_Hash_Start 265679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // was not called so this function returns without doing 275679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // anything. 285679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if(g_DRTMHandle == TPM_RH_UNASSIGNED) 295679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return; 305679752bf24c21135884e987c4077e2f7184897Vadim Bendebury 315679752bf24c21135884e987c4077e2f7184897Vadim Bendebury hashObject = (HASH_OBJECT *)ObjectGet(g_DRTMHandle); 325679752bf24c21135884e987c4077e2f7184897Vadim Bendebury pAssert(hashObject->attributes.eventSeq); 335679752bf24c21135884e987c4077e2f7184897Vadim Bendebury 345679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // For each of the implemented hash algorithms, update the digest with the 355679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // data provided. 365679752bf24c21135884e987c4077e2f7184897Vadim Bendebury for(i = 0; i < HASH_COUNT; i++) 375679752bf24c21135884e987c4077e2f7184897Vadim Bendebury { 385679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // make sure that the PCR is implemented for this algorithm 395679752bf24c21135884e987c4077e2f7184897Vadim Bendebury if(PcrIsAllocated(pcrHandle, 405679752bf24c21135884e987c4077e2f7184897Vadim Bendebury hashObject->state.hashState[i].state.hashAlg)) 415679752bf24c21135884e987c4077e2f7184897Vadim Bendebury // Update sequence object 425679752bf24c21135884e987c4077e2f7184897Vadim Bendebury CryptUpdateDigest(&hashObject->state.hashState[i], dataSize, data); 435679752bf24c21135884e987c4077e2f7184897Vadim Bendebury } 445679752bf24c21135884e987c4077e2f7184897Vadim Bendebury 455679752bf24c21135884e987c4077e2f7184897Vadim Bendebury return; 465679752bf24c21135884e987c4077e2f7184897Vadim Bendebury} 47