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 "PCR_SetAuthPolicy_fp.h" 10// 11// 12// Error Returns Meaning 13// 14// TPM_RC_SIZE size of authPolicy is not the size of a digest produced by policyDigest 15// TPM_RC_VALUE PCR referenced by pcrNum is not a member of a PCR policy group 16// 17TPM_RC 18TPM2_PCR_SetAuthPolicy( 19 PCR_SetAuthPolicy_In *in // IN: input parameter list 20 ) 21{ 22 UINT32 groupIndex; 23 24 TPM_RC result; 25 26 // The command needs NV update. Check if NV is available. 27 // A TPM_RC_NV_UNAVAILABLE or TPM_RC_NV_RATE error may be returned at 28 // this point 29 result = NvIsAvailable(); 30 if(result != TPM_RC_SUCCESS) return result; 31 32// Input Validation: 33 34 // Check the authPolicy consistent with hash algorithm 35 if(in->authPolicy.t.size != CryptGetHashDigestSize(in->hashAlg)) 36 return TPM_RC_SIZE + RC_PCR_SetAuthPolicy_authPolicy; 37 38 // If PCR does not belong to a policy group, return TPM_RC_VALUE 39 if(!PCRBelongsPolicyGroup(in->pcrNum, &groupIndex)) 40 return TPM_RC_VALUE + RC_PCR_SetAuthPolicy_pcrNum; 41 42// Internal Data Update 43 44 // Set PCR policy 45 gp.pcrPolicies.hashAlg[groupIndex] = in->hashAlg; 46 gp.pcrPolicies.policy[groupIndex] = in->authPolicy; 47 48 // Save new policy to NV 49 NvWriteReserved(NV_PCR_POLICIES, &gp.pcrPolicies); 50 51 return TPM_RC_SUCCESS; 52} 53