63 lines
1.8 KiB
C
63 lines
1.8 KiB
C
// This file was extracted from the TCG Published
|
|
// Trusted Platform Module Library
|
|
// Part 3: Commands
|
|
// Family "2.0"
|
|
// Level 00 Revision 01.16
|
|
// October 30, 2014
|
|
|
|
#include "InternalRoutines.h"
|
|
#include "ChangeEPS_fp.h"
|
|
TPM_RC
|
|
TPM2_ChangeEPS(
|
|
ChangeEPS_In *in // IN: input parameter list
|
|
)
|
|
{
|
|
TPM_RC result;
|
|
|
|
// The command needs NV update. Check if NV is available.
|
|
// A TPM_RC_NV_UNAVAILABLE or TPM_RC_NV_RATE error may be returned at
|
|
// this point
|
|
result = NvIsAvailable();
|
|
if(result != TPM_RC_SUCCESS) return result;
|
|
|
|
// Input parameter is not reference in command action
|
|
in = NULL;
|
|
|
|
// Internal Data Update
|
|
|
|
// Reset endorsement hierarchy seed from RNG
|
|
CryptGenerateRandom(PRIMARY_SEED_SIZE, gp.EPSeed.t.buffer);
|
|
|
|
// Create new ehProof value from RNG
|
|
CryptGenerateRandom(PROOF_SIZE, gp.ehProof.t.buffer);
|
|
|
|
// Enable endorsement hierarchy
|
|
gc.ehEnable = TRUE;
|
|
|
|
// set authValue buffer to zeros
|
|
MemorySet(gp.endorsementAuth.t.buffer, 0, gp.endorsementAuth.t.size);
|
|
// Set endorsement authValue to null
|
|
gp.endorsementAuth.t.size = 0;
|
|
|
|
// Set endorsement authPolicy to null
|
|
gp.endorsementAlg = TPM_ALG_NULL;
|
|
gp.endorsementPolicy.t.size = 0;
|
|
|
|
// Flush loaded object in endorsement hierarchy
|
|
ObjectFlushHierarchy(TPM_RH_ENDORSEMENT);
|
|
|
|
// Flush evict object of endorsement hierarchy stored in NV
|
|
NvFlushHierarchy(TPM_RH_ENDORSEMENT);
|
|
|
|
// Save hierarchy changes to NV
|
|
NvWriteReserved(NV_EP_SEED, &gp.EPSeed);
|
|
NvWriteReserved(NV_EH_PROOF, &gp.ehProof);
|
|
NvWriteReserved(NV_ENDORSEMENT_AUTH, &gp.endorsementAuth);
|
|
NvWriteReserved(NV_ENDORSEMENT_ALG, &gp.endorsementAlg);
|
|
NvWriteReserved(NV_ENDORSEMENT_POLICY, &gp.endorsementPolicy);
|
|
|
|
// orderly state should be cleared because of the update to state clear data
|
|
g_clearOrderly = TRUE;
|
|
|
|
return TPM_RC_SUCCESS;
|
|
}
|