blob: 9495cf63a1656436ace278d5b635bcd06fd7e544 [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 "ChangePPS_fp.h"
10TPM_RC
11TPM2_ChangePPS(
12 ChangePPS_In *in // IN: input parameter list
13 )
14{
15 UINT32 i;
16 TPM_RC result;
17
18 // Check if NV is available. A TPM_RC_NV_UNAVAILABLE or TPM_RC_NV_RATE
19 // error may be returned at this point
20 result = NvIsAvailable();
21 if(result != TPM_RC_SUCCESS) return result;
22
23 // Input parameter is not reference in command action
24 in = NULL;
25
26// Internal Data Update
27
28 // Reset platform hierarchy seed from RNG
29 CryptGenerateRandom(PRIMARY_SEED_SIZE, gp.PPSeed.t.buffer);
30
31 // Create a new phProof value from RNG to prevent the saved platform
32 // hierarchy contexts being loaded
33 CryptGenerateRandom(PROOF_SIZE, gp.phProof.t.buffer);
34
35 // Set platform authPolicy to null
36 gc.platformAlg = TPM_ALG_NULL;
37 gc.platformPolicy.t.size = 0;
38
39 // Flush loaded object in platform hierarchy
40 ObjectFlushHierarchy(TPM_RH_PLATFORM);
41
42 // Flush platform evict object and index in NV
43 NvFlushHierarchy(TPM_RH_PLATFORM);
44
45 // Save hierarchy changes to NV
46 NvWriteReserved(NV_PP_SEED, &gp.PPSeed);
47 NvWriteReserved(NV_PH_PROOF, &gp.phProof);
48
49 // Re-initialize PCR policies
50 for(i = 0; i < NUM_POLICY_PCR_GROUP; i++)
51 {
52 gp.pcrPolicies.hashAlg[i] = TPM_ALG_NULL;
53 gp.pcrPolicies.policy[i].t.size = 0;
54 }
55 NvWriteReserved(NV_PCR_POLICIES, &gp.pcrPolicies);
56
57 // orderly state should be cleared because of the update to state clear data
58 g_clearOrderly = TRUE;
59
60 return TPM_RC_SUCCESS;
61}