// This file was extracted from the TCG Published
// Trusted Platform Module Library
// Part 3: Commands
// Family "2.0"
// Level 00 Revision 01.16
// October 30, 2014

#include "InternalRoutines.h"
#include "Platform.h"
#include "PCR_fp.h"
//
//     This function is called to process a _TPM_Hash_Data() indication.
//
void
_TPM_Hash_Data(
   UINT32             dataSize,        // IN: size of data to be extend
   BYTE              *data             // IN: data buffer
   )
{
   UINT32             i;
   HASH_OBJECT       *hashObject;
   TPMI_DH_PCR        pcrHandle = TPMIsStarted()
                                 ? PCR_FIRST + DRTM_PCR : PCR_FIRST + HCRTM_PCR;

   // If there is no DRTM sequence object, then _TPM_Hash_Start
   // was not called so this function returns without doing
   // anything.
   if(g_DRTMHandle == TPM_RH_UNASSIGNED)
       return;

   hashObject = (HASH_OBJECT *)ObjectGet(g_DRTMHandle);
   pAssert(hashObject->attributes.eventSeq);

   // For each of the implemented hash algorithms, update the digest with the
   // data provided.
   for(i = 0; i < HASH_COUNT; i++)
   {
       // make sure that the PCR is implemented for this algorithm
       if(PcrIsAllocated(pcrHandle,
                           hashObject->state.hashState[i].state.hashAlg))
           // Update sequence object
           CryptUpdateDigest(&hashObject->state.hashState[i], dataSize, data);
   }

   return;
}