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 // 17 TPM_RC 18 TPM2_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