blob: 6ca72c328023978083be325152aa385683ef2e05 [file] [log] [blame]
Vadim Bendebury56797522015-05-20 10:32:25 -07001// 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}