1// This file was extracted from the TCG Published
2// Trusted Platform Module Library
3// Part 3: Commands
4// Family "2.0"
5// Level 00 Revision 01.16
6// October 30, 2014
7
8#include "InternalRoutines.h"
9#include "PolicyPhysicalPresence_fp.h"
10TPM_RC
11TPM2_PolicyPhysicalPresence(
12   PolicyPhysicalPresence_In   *in             // IN: input parameter list
13   )
14{
15   SESSION      *session;
16   TPM_CC       commandCode = TPM_CC_PolicyPhysicalPresence;
17   HASH_STATE   hashState;
18
19// Internal Data Update
20
21   // Get pointer to the session structure
22   session = SessionGet(in->policySession);
23
24   // Update policy hash
25   // policyDigestnew = hash(policyDigestold || TPM_CC_PolicyPhysicalPresence)
26   // Start hash
27   CryptStartHash(session->authHashAlg, &hashState);
28
29   // add old digest
30   CryptUpdateDigest2B(&hashState, &session->u2.policyDigest.b);
31
32   // add commandCode
33   CryptUpdateDigestInt(&hashState, sizeof(TPM_CC), &commandCode);
34
35   // complete the digest
36   CryptCompleteHash2B(&hashState, &session->u2.policyDigest.b);
37
38   // update session attribute
39   session->attributes.isPPRequired = SET;
40
41   return TPM_RC_SUCCESS;
42}
43