Skip to content
Stefan Berger edited this page Mar 22, 2018 · 5 revisions

Volatile State:

Type Field Marshaled File
ALGORITHM_VECTOR g_implementedAlgorithms no [1] Global.{h,c}
ALGORITHM_VECTOR g_toTest no [2] Global.{h,c}
UINT16 g_rcIndex no [3] Global.{h,c}
TPM_HANDLE g_exclusiveAuditSession v1 Global.{h,c}
UINT64 g_time v1 Global.{h,c}
CLOCK_NONCE g_timeEpoch no [4] Global.{h,c}
BOOL g_phEnable v1 Global.{h,c}
BOOL g_pcrReConfig v1 Global.{h,c}
TPMI_DH_OBJECT g_DRTMHandle v1 Global.{h,c}
BOOL g_DrtmPreStartup v1 Global.{h,c}
BOOL g_StartupLocality3 v1 Global.{h,c}
BOOL g_daUsed v1 Global.{h,c}
UPDATE_TYPE g_updateNV no [5] Global.{h,c}
BOOL g_powerWasLost v1 Global.{h,c}
BOOL g_clearOrderly no [6] Global.{h,c}
TPM_SU g_prevOrderlyState v1 Global.{h,c}
BOOL g_nvOk v1 Global.{h,c}
TPM_RC g_NvStatus no [7] Global.{h,c}
TPM2B_AUTH g_platformUniqueAuthorities no [8] Global.h
TPM2B_AUTH g_platformUniqueDetails v1 Global.{h,c}
ORDERLY_DATA go v1 Global.{h,c}
STATE_CLEAR_DATA gc v1 Global.{h,c}
STATE_RESET_DATA gr v1 Global.{h,c}
BOOL g_manufactured v1 Global.{h,c}
BOOL g_initialized v1 Global.{h,c}
TPM_HANDLE s_sessionHandles[] v1 Global.{h,c}
TMA_SESSION s_attributes[] v1 Global.{h,c}
TPM_HANDLE s_associatedHandles[] v1 Global.{h,c}
TPM2B_NONCE s_nonceCaller[] v1 Global.{h,c}
TPM2B_AUTH s_inputAuthValues[] v1 Global.{h,c}
SESSION *s_usedSessions[] no [9] Global.{h,c}
UINT32 s_encryptSessionIndex v1 Global.{h,c}
UINT32 s_decryptSessionIndex v1 Global.{h,c}
UINT32 s_auditSessionIndex v1 Global.{h,c}
TPM2B_DIGEST s_cpHashForCommandAudit v1 Global.{h,c}
BOOL s_DAPendingOnNV v1 Global.{h,c}
UINT64 s_selfHealTimer v1 Global.{h,c}
UINT64 s_lockoutTimer v1 Global.{h,c}
NV_REF s_evictNvEnd v1 Global.{h,c}
BYTE s_indexOrderlyRam[] v1 Global.{h,c}
UINT64 s_maxCounter v1 Global.{h,c}
NV_INDEX s_cachedNvIndex no [10] Global.{h,c}
NV_REF s_cachedNvRef no [10] Global.{h,c}
BYTE *s_cachedNvRamRef no [10] Global.{h,c}
OBJECT s_objects[] v1 Global.{h,c}
PCR s_pcrs[] v1 Global.{h,c}
SESSION s_sessions[] v1 Global.{h,c}
UINT32 s_oldestSavedSession v1 Global.{h,c}
int s_freeSessionSlots v1 Global.{h,c}
UINT32 s_actionInputBuffer[] no [10] Global.{h,c}
UINT32 s_actionOutputBuffer[] no [10] Global.{h,c}
BOOL g_inFailureMode v1 Global.{h,c}
BOOL g_forceFailureMode no [11] Global.{h,c}
UINT32 s_failFunction v1 [12] Global.{h,c}
UINT32 s_failLine v1 Global.{h,c}
UINT32 s_failCode v1 Global.{h,c}
int s_isCanceled no [13] PlatformData.{h,c}
clock_t s_realTimePrevious v1 PlatformData.{h,c}
clock_t s_tpmTime v1 PlatformData.{h,c}
BOOL s_timerReset v1 PlatformData.{h,c}
BOOL s_timerStopped v1 PlatformData.{h,c}
uint64_t s_initClock no [8] PlatformData.h
unsigned int s_adjustRate v2 PlatformData.{h,c}
unsigned char s_locality no [14] PlatformData.{h,c}
FILE *s_NVFile no [14] PlatformData.{h,c}
BOOL s_NvIsAvailable no [15] PlatformData.{h,c}
BOOL s_NV_unrecoverable no [16] PlatformData.{h,c}
BOOL s_NV_recoverable no [16] PlatformData.{h,c}
BOOL s_physicalPresence no [17] PlatformData.{h,c}
BOOL s_powerLost no PlatformData.{h,c}
uint32_t lastEntropy no [18] PlatformData.{h,c}
int firstValue no [18] PlatformData.{h,c}

[1]: Dependent on configuration; we allow some changes to reconfiguration, so may not use this one for testing
[2]: Copy of g_implementedAlgorithms
[3]: Array of constants
[4]: Not available unless CLOCK_STOPS is #defined
[5]: Valid only during execution of a single command. ExecuteCommand() initializes it and tests it near end.
[6]: Valid only during execution of a single command. ExecuteCommand() initializes it and tests it near end.
[7]: valid only during execution of a single command. ExecuteCommand() initializes it.
[8]: Not used anywhere
[9]: Not used anywhere
[10]: valid only during execution of a single command. ExecuteCommand() initializes it.
[11]: Not used; only used if SIMULATION is #defined
[12]: s_failFunction is currently not used
[13]: we reset the cancel signal before execution of every command
[14]: not needed
[15]: Not supporting turning off NVRAM
[16]: not used
[17]: Physical Presence signal must be continuously asserted without interruption by migration
[18]: only there to check whether the RNG isn't producing anything good


Permanent State

PERSISTENT_DATA (Global.h)

Type Field
NvHeader nvHeader
BOOL disableClear
TPMI_ALG_HASH ownerAlg
TPMI_ALG_HASH endorsementAlg
TPMI_ALG_HASH lockoutAlg
TPM2B_DIGEST ownerPolicy
TPM2B_DIGEST endorsementPolicy
TPM2B_DIGEST lockoutPolicy
TPM2B_AUTH ownerAuth
TPM2B_AUTH endorsementAuth
TPM2B_AUTH lockoutAuth
TPM2B_SEED EPSeed
TPM2B_SEED SPSeed
TPM2B_SEED PPSeed
TPM2B_PROOF phProof
TPM2B_PROOF shProof
TPM2B_PROOF ehProof
UINT32 _pad1
UINT64 totalResetCount
UINT32 resetCount
PCR_POLICY pcrPolicies
TPML_PCR_SELECTION pcrAllocated
BYTE ppList
UINT32 failedTries
UINT32 maxTries
UINT32 recoveryTime
UINT32 lockoutRecovery
BOOL lockoutAuthEnabled
TPM_SU orderlyState
BYTE auditCommands
TPMI_ALG_HASH auditHashAlg
UINT64 auditCounter
UINT32 algorithmSet
UINT32 firmwareV1
UINT32 firmwareV2
CLOCK_NONCE timeEpoch

ORDERLY_DATA

Type Field
NvHeader nvHeader
UINT64 clock
TPMI_YES_NO clockSafe
UINT32 _pad1
DRBG_STATE drbgState
UINT64 selfHealTimer
UINT64 lockoutTimer
UINT64 time

STATE_CLEAR_DATA

Type Field
NvHeader nvHeader
BOOL shEnable
BOOL ehEnable
BOOL phEnableNV
TPMI_ALG_HASH platformAlg
TPM2B_DIGEST platformPolicy
TPM2B_AUTH platformAuth
PCR_SAVE pcrSave
PCR_AUTHVALUE pcrAuthValues

STATE_RESET_DATA

Type Field
NvHeader nvHeader
TPM2B_PROOF nullProof
TPM2B_SEED nullSeed
UINT32 clearCount
UINT64 objectContextID
BYTE contextArray[]
CONTEXT_COUNTER contextCounter
TPM2B_DIGEST commandAuditDigest
UINT32 restartCount
UINT32 pcrCounter
UINT32 _pad2
UINT64 commitCounter
TPM2B_NONCE commitNonce
BYTE commitArray[16]