Path: blob/main/sys/contrib/edk2/Include/IndustryStandard/Tpm20.h
96339 views
/** @file1TPM2.0 Specification data structures2(Trusted Platform Module Library Specification, Family "2.0", Level 00, Revision 00.96,3@http://www.trustedcomputinggroup.org/resources/tpm_library_specification)45Check http://trustedcomputinggroup.org for latest specification updates.67Copyright (c) 2013 - 2015, Intel Corporation. All rights reserved. <BR>8SPDX-License-Identifier: BSD-2-Clause-Patent910**/1112#ifndef _TPM20_H_13#define _TPM20_H_1415#include <IndustryStandard/Tpm12.h>1617#pragma pack (1)1819// Annex A Algorithm Constants2021// Table 205 - Defines for SHA1 Hash Values22#define SHA1_DIGEST_SIZE 2023#define SHA1_BLOCK_SIZE 642425// Table 206 - Defines for SHA256 Hash Values26#define SHA256_DIGEST_SIZE 3227#define SHA256_BLOCK_SIZE 642829// Table 207 - Defines for SHA384 Hash Values30#define SHA384_DIGEST_SIZE 4831#define SHA384_BLOCK_SIZE 1283233// Table 208 - Defines for SHA512 Hash Values34#define SHA512_DIGEST_SIZE 6435#define SHA512_BLOCK_SIZE 1283637// Table 209 - Defines for SM3_256 Hash Values38#define SM3_256_DIGEST_SIZE 3239#define SM3_256_BLOCK_SIZE 644041// Table 210 - Defines for Architectural Limits Values42#define MAX_SESSION_NUMBER 34344// Annex B Implementation Definitions4546// Table 211 - Defines for Logic Values47#define YES 148#define NO 049#define SET 150#define CLEAR 05152// Table 215 - Defines for RSA Algorithm Constants53#define MAX_RSA_KEY_BITS 204854#define MAX_RSA_KEY_BYTES ((MAX_RSA_KEY_BITS + 7) / 8)5556// Table 216 - Defines for ECC Algorithm Constants57#define MAX_ECC_KEY_BITS 25658#define MAX_ECC_KEY_BYTES ((MAX_ECC_KEY_BITS + 7) / 8)5960// Table 217 - Defines for AES Algorithm Constants61#define MAX_AES_KEY_BITS 12862#define MAX_AES_BLOCK_SIZE_BYTES 1663#define MAX_AES_KEY_BYTES ((MAX_AES_KEY_BITS + 7) / 8)6465// Table 218 - Defines for SM4 Algorithm Constants66#define MAX_SM4_KEY_BITS 12867#define MAX_SM4_BLOCK_SIZE_BYTES 1668#define MAX_SM4_KEY_BYTES ((MAX_SM4_KEY_BITS + 7) / 8)6970// Table 219 - Defines for Symmetric Algorithm Constants71#define MAX_SYM_KEY_BITS MAX_AES_KEY_BITS72#define MAX_SYM_KEY_BYTES MAX_AES_KEY_BYTES73#define MAX_SYM_BLOCK_SIZE MAX_AES_BLOCK_SIZE_BYTES7475// Table 220 - Defines for Implementation Values76typedef UINT16 BSIZE;77#define BUFFER_ALIGNMENT 478#define IMPLEMENTATION_PCR 2479#define PLATFORM_PCR 2480#define DRTM_PCR 1781#define NUM_LOCALITIES 582#define MAX_HANDLE_NUM 383#define MAX_ACTIVE_SESSIONS 6484typedef UINT16 CONTEXT_SLOT;85typedef UINT64 CONTEXT_COUNTER;86#define MAX_LOADED_SESSIONS 387#define MAX_SESSION_NUM 388#define MAX_LOADED_OBJECTS 389#define MIN_EVICT_OBJECTS 290#define PCR_SELECT_MIN ((PLATFORM_PCR + 7) / 8)91#define PCR_SELECT_MAX ((IMPLEMENTATION_PCR + 7) / 8)92#define NUM_POLICY_PCR_GROUP 193#define NUM_AUTHVALUE_PCR_GROUP 194#define MAX_CONTEXT_SIZE 400095#define MAX_DIGEST_BUFFER 102496#define MAX_NV_INDEX_SIZE 102497#define MAX_CAP_BUFFER 102498#define NV_MEMORY_SIZE 1638499#define NUM_STATIC_PCR 16100#define MAX_ALG_LIST_SIZE 64101#define TIMER_PRESCALE 100000102#define PRIMARY_SEED_SIZE 32103#define CONTEXT_ENCRYPT_ALG TPM_ALG_AES104#define CONTEXT_ENCRYPT_KEY_BITS MAX_SYM_KEY_BITS105#define CONTEXT_ENCRYPT_KEY_BYTES ((CONTEXT_ENCRYPT_KEY_BITS + 7) / 8)106#define CONTEXT_INTEGRITY_HASH_ALG TPM_ALG_SHA256107#define CONTEXT_INTEGRITY_HASH_SIZE SHA256_DIGEST_SIZE108#define PROOF_SIZE CONTEXT_INTEGRITY_HASH_SIZE109#define NV_CLOCK_UPDATE_INTERVAL 12110#define NUM_POLICY_PCR 1111#define MAX_COMMAND_SIZE 4096112#define MAX_RESPONSE_SIZE 4096113#define ORDERLY_BITS 8114#define MAX_ORDERLY_COUNT ((1 << ORDERLY_BITS) - 1)115#define ALG_ID_FIRST TPM_ALG_FIRST116#define ALG_ID_LAST TPM_ALG_LAST117#define MAX_SYM_DATA 128118#define MAX_RNG_ENTROPY_SIZE 64119#define RAM_INDEX_SPACE 512120#define RSA_DEFAULT_PUBLIC_EXPONENT 0x00010001121#define CRT_FORMAT_RSA YES122#define PRIVATE_VENDOR_SPECIFIC_BYTES ((MAX_RSA_KEY_BYTES / 2) * ( 3 + CRT_FORMAT_RSA * 2))123124// Capability related MAX_ value125#define MAX_CAP_DATA (MAX_CAP_BUFFER - sizeof(TPM_CAP) - sizeof(UINT32))126#define MAX_CAP_ALGS (MAX_CAP_DATA / sizeof(TPMS_ALG_PROPERTY))127#define MAX_CAP_HANDLES (MAX_CAP_DATA / sizeof(TPM_HANDLE))128#define MAX_CAP_CC (MAX_CAP_DATA / sizeof(TPM_CC))129#define MAX_TPM_PROPERTIES (MAX_CAP_DATA / sizeof(TPMS_TAGGED_PROPERTY))130#define MAX_PCR_PROPERTIES (MAX_CAP_DATA / sizeof(TPMS_TAGGED_PCR_SELECT))131#define MAX_ECC_CURVES (MAX_CAP_DATA / sizeof(TPM_ECC_CURVE))132133//134// Always set 5 here, because we want to support all hash algo in BIOS.135//136#define HASH_COUNT 5137138// 5 Base Types139140// Table 3 - Definition of Base Types141typedef UINT8 BYTE;142143// Table 4 - Definition of Types for Documentation Clarity144//145// NOTE: Comment because it has same name as TPM1.2 (value is same, so not runtime issue)146//147// typedef UINT32 TPM_ALGORITHM_ID;148// typedef UINT32 TPM_MODIFIER_INDICATOR;149typedef UINT32 TPM_AUTHORIZATION_SIZE;150typedef UINT32 TPM_PARAMETER_SIZE;151typedef UINT16 TPM_KEY_SIZE;152typedef UINT16 TPM_KEY_BITS;153154// 6 Constants155156// Table 6 - TPM_GENERATED Constants157typedef UINT32 TPM_GENERATED;158#define TPM_GENERATED_VALUE (TPM_GENERATED)(0xff544347)159160// Table 7 - TPM_ALG_ID Constants161typedef UINT16 TPM_ALG_ID;162//163// NOTE: Comment some algo which has same name as TPM1.2 (value is same, so not runtime issue)164//165#define TPM_ALG_ERROR (TPM_ALG_ID)(0x0000)166#define TPM_ALG_FIRST (TPM_ALG_ID)(0x0001)167// #define TPM_ALG_RSA (TPM_ALG_ID)(0x0001)168// #define TPM_ALG_SHA (TPM_ALG_ID)(0x0004)169#define TPM_ALG_SHA1 (TPM_ALG_ID)(0x0004)170// #define TPM_ALG_HMAC (TPM_ALG_ID)(0x0005)171#define TPM_ALG_AES (TPM_ALG_ID)(0x0006)172// #define TPM_ALG_MGF1 (TPM_ALG_ID)(0x0007)173#define TPM_ALG_KEYEDHASH (TPM_ALG_ID)(0x0008)174// #define TPM_ALG_XOR (TPM_ALG_ID)(0x000A)175#define TPM_ALG_SHA256 (TPM_ALG_ID)(0x000B)176#define TPM_ALG_SHA384 (TPM_ALG_ID)(0x000C)177#define TPM_ALG_SHA512 (TPM_ALG_ID)(0x000D)178#define TPM_ALG_NULL (TPM_ALG_ID)(0x0010)179#define TPM_ALG_SM3_256 (TPM_ALG_ID)(0x0012)180#define TPM_ALG_SM4 (TPM_ALG_ID)(0x0013)181#define TPM_ALG_RSASSA (TPM_ALG_ID)(0x0014)182#define TPM_ALG_RSAES (TPM_ALG_ID)(0x0015)183#define TPM_ALG_RSAPSS (TPM_ALG_ID)(0x0016)184#define TPM_ALG_OAEP (TPM_ALG_ID)(0x0017)185#define TPM_ALG_ECDSA (TPM_ALG_ID)(0x0018)186#define TPM_ALG_ECDH (TPM_ALG_ID)(0x0019)187#define TPM_ALG_ECDAA (TPM_ALG_ID)(0x001A)188#define TPM_ALG_SM2 (TPM_ALG_ID)(0x001B)189#define TPM_ALG_ECSCHNORR (TPM_ALG_ID)(0x001C)190#define TPM_ALG_ECMQV (TPM_ALG_ID)(0x001D)191#define TPM_ALG_KDF1_SP800_56a (TPM_ALG_ID)(0x0020)192#define TPM_ALG_KDF2 (TPM_ALG_ID)(0x0021)193#define TPM_ALG_KDF1_SP800_108 (TPM_ALG_ID)(0x0022)194#define TPM_ALG_ECC (TPM_ALG_ID)(0x0023)195#define TPM_ALG_SYMCIPHER (TPM_ALG_ID)(0x0025)196#define TPM_ALG_CTR (TPM_ALG_ID)(0x0040)197#define TPM_ALG_OFB (TPM_ALG_ID)(0x0041)198#define TPM_ALG_CBC (TPM_ALG_ID)(0x0042)199#define TPM_ALG_CFB (TPM_ALG_ID)(0x0043)200#define TPM_ALG_ECB (TPM_ALG_ID)(0x0044)201#define TPM_ALG_LAST (TPM_ALG_ID)(0x0044)202203// Table 8 - TPM_ECC_CURVE Constants204typedef UINT16 TPM_ECC_CURVE;205#define TPM_ECC_NONE (TPM_ECC_CURVE)(0x0000)206#define TPM_ECC_NIST_P192 (TPM_ECC_CURVE)(0x0001)207#define TPM_ECC_NIST_P224 (TPM_ECC_CURVE)(0x0002)208#define TPM_ECC_NIST_P256 (TPM_ECC_CURVE)(0x0003)209#define TPM_ECC_NIST_P384 (TPM_ECC_CURVE)(0x0004)210#define TPM_ECC_NIST_P521 (TPM_ECC_CURVE)(0x0005)211#define TPM_ECC_BN_P256 (TPM_ECC_CURVE)(0x0010)212#define TPM_ECC_BN_P638 (TPM_ECC_CURVE)(0x0011)213#define TPM_ECC_SM2_P256 (TPM_ECC_CURVE)(0x0020)214#define TPM_ECC_BP_P512_R1 (TPM_ECC_CURVE)(0x0032)215216// Table 11 - TPM_CC Constants (Numeric Order)217typedef UINT32 TPM_CC;218#define TPM_CC_FIRST (TPM_CC)(0x0000011F)219#define TPM_CC_PP_FIRST (TPM_CC)(0x0000011F)220#define TPM_CC_NV_UndefineSpaceSpecial (TPM_CC)(0x0000011F)221#define TPM_CC_EvictControl (TPM_CC)(0x00000120)222#define TPM_CC_HierarchyControl (TPM_CC)(0x00000121)223#define TPM_CC_NV_UndefineSpace (TPM_CC)(0x00000122)224#define TPM_CC_ChangeEPS (TPM_CC)(0x00000124)225#define TPM_CC_ChangePPS (TPM_CC)(0x00000125)226#define TPM_CC_Clear (TPM_CC)(0x00000126)227#define TPM_CC_ClearControl (TPM_CC)(0x00000127)228#define TPM_CC_ClockSet (TPM_CC)(0x00000128)229#define TPM_CC_HierarchyChangeAuth (TPM_CC)(0x00000129)230#define TPM_CC_NV_DefineSpace (TPM_CC)(0x0000012A)231#define TPM_CC_PCR_Allocate (TPM_CC)(0x0000012B)232#define TPM_CC_PCR_SetAuthPolicy (TPM_CC)(0x0000012C)233#define TPM_CC_PP_Commands (TPM_CC)(0x0000012D)234#define TPM_CC_SetPrimaryPolicy (TPM_CC)(0x0000012E)235#define TPM_CC_FieldUpgradeStart (TPM_CC)(0x0000012F)236#define TPM_CC_ClockRateAdjust (TPM_CC)(0x00000130)237#define TPM_CC_CreatePrimary (TPM_CC)(0x00000131)238#define TPM_CC_NV_GlobalWriteLock (TPM_CC)(0x00000132)239#define TPM_CC_PP_LAST (TPM_CC)(0x00000132)240#define TPM_CC_GetCommandAuditDigest (TPM_CC)(0x00000133)241#define TPM_CC_NV_Increment (TPM_CC)(0x00000134)242#define TPM_CC_NV_SetBits (TPM_CC)(0x00000135)243#define TPM_CC_NV_Extend (TPM_CC)(0x00000136)244#define TPM_CC_NV_Write (TPM_CC)(0x00000137)245#define TPM_CC_NV_WriteLock (TPM_CC)(0x00000138)246#define TPM_CC_DictionaryAttackLockReset (TPM_CC)(0x00000139)247#define TPM_CC_DictionaryAttackParameters (TPM_CC)(0x0000013A)248#define TPM_CC_NV_ChangeAuth (TPM_CC)(0x0000013B)249#define TPM_CC_PCR_Event (TPM_CC)(0x0000013C)250#define TPM_CC_PCR_Reset (TPM_CC)(0x0000013D)251#define TPM_CC_SequenceComplete (TPM_CC)(0x0000013E)252#define TPM_CC_SetAlgorithmSet (TPM_CC)(0x0000013F)253#define TPM_CC_SetCommandCodeAuditStatus (TPM_CC)(0x00000140)254#define TPM_CC_FieldUpgradeData (TPM_CC)(0x00000141)255#define TPM_CC_IncrementalSelfTest (TPM_CC)(0x00000142)256#define TPM_CC_SelfTest (TPM_CC)(0x00000143)257#define TPM_CC_Startup (TPM_CC)(0x00000144)258#define TPM_CC_Shutdown (TPM_CC)(0x00000145)259#define TPM_CC_StirRandom (TPM_CC)(0x00000146)260#define TPM_CC_ActivateCredential (TPM_CC)(0x00000147)261#define TPM_CC_Certify (TPM_CC)(0x00000148)262#define TPM_CC_PolicyNV (TPM_CC)(0x00000149)263#define TPM_CC_CertifyCreation (TPM_CC)(0x0000014A)264#define TPM_CC_Duplicate (TPM_CC)(0x0000014B)265#define TPM_CC_GetTime (TPM_CC)(0x0000014C)266#define TPM_CC_GetSessionAuditDigest (TPM_CC)(0x0000014D)267#define TPM_CC_NV_Read (TPM_CC)(0x0000014E)268#define TPM_CC_NV_ReadLock (TPM_CC)(0x0000014F)269#define TPM_CC_ObjectChangeAuth (TPM_CC)(0x00000150)270#define TPM_CC_PolicySecret (TPM_CC)(0x00000151)271#define TPM_CC_Rewrap (TPM_CC)(0x00000152)272#define TPM_CC_Create (TPM_CC)(0x00000153)273#define TPM_CC_ECDH_ZGen (TPM_CC)(0x00000154)274#define TPM_CC_HMAC (TPM_CC)(0x00000155)275#define TPM_CC_Import (TPM_CC)(0x00000156)276#define TPM_CC_Load (TPM_CC)(0x00000157)277#define TPM_CC_Quote (TPM_CC)(0x00000158)278#define TPM_CC_RSA_Decrypt (TPM_CC)(0x00000159)279#define TPM_CC_HMAC_Start (TPM_CC)(0x0000015B)280#define TPM_CC_SequenceUpdate (TPM_CC)(0x0000015C)281#define TPM_CC_Sign (TPM_CC)(0x0000015D)282#define TPM_CC_Unseal (TPM_CC)(0x0000015E)283#define TPM_CC_PolicySigned (TPM_CC)(0x00000160)284#define TPM_CC_ContextLoad (TPM_CC)(0x00000161)285#define TPM_CC_ContextSave (TPM_CC)(0x00000162)286#define TPM_CC_ECDH_KeyGen (TPM_CC)(0x00000163)287#define TPM_CC_EncryptDecrypt (TPM_CC)(0x00000164)288#define TPM_CC_FlushContext (TPM_CC)(0x00000165)289#define TPM_CC_LoadExternal (TPM_CC)(0x00000167)290#define TPM_CC_MakeCredential (TPM_CC)(0x00000168)291#define TPM_CC_NV_ReadPublic (TPM_CC)(0x00000169)292#define TPM_CC_PolicyAuthorize (TPM_CC)(0x0000016A)293#define TPM_CC_PolicyAuthValue (TPM_CC)(0x0000016B)294#define TPM_CC_PolicyCommandCode (TPM_CC)(0x0000016C)295#define TPM_CC_PolicyCounterTimer (TPM_CC)(0x0000016D)296#define TPM_CC_PolicyCpHash (TPM_CC)(0x0000016E)297#define TPM_CC_PolicyLocality (TPM_CC)(0x0000016F)298#define TPM_CC_PolicyNameHash (TPM_CC)(0x00000170)299#define TPM_CC_PolicyOR (TPM_CC)(0x00000171)300#define TPM_CC_PolicyTicket (TPM_CC)(0x00000172)301#define TPM_CC_ReadPublic (TPM_CC)(0x00000173)302#define TPM_CC_RSA_Encrypt (TPM_CC)(0x00000174)303#define TPM_CC_StartAuthSession (TPM_CC)(0x00000176)304#define TPM_CC_VerifySignature (TPM_CC)(0x00000177)305#define TPM_CC_ECC_Parameters (TPM_CC)(0x00000178)306#define TPM_CC_FirmwareRead (TPM_CC)(0x00000179)307#define TPM_CC_GetCapability (TPM_CC)(0x0000017A)308#define TPM_CC_GetRandom (TPM_CC)(0x0000017B)309#define TPM_CC_GetTestResult (TPM_CC)(0x0000017C)310#define TPM_CC_Hash (TPM_CC)(0x0000017D)311#define TPM_CC_PCR_Read (TPM_CC)(0x0000017E)312#define TPM_CC_PolicyPCR (TPM_CC)(0x0000017F)313#define TPM_CC_PolicyRestart (TPM_CC)(0x00000180)314#define TPM_CC_ReadClock (TPM_CC)(0x00000181)315#define TPM_CC_PCR_Extend (TPM_CC)(0x00000182)316#define TPM_CC_PCR_SetAuthValue (TPM_CC)(0x00000183)317#define TPM_CC_NV_Certify (TPM_CC)(0x00000184)318#define TPM_CC_EventSequenceComplete (TPM_CC)(0x00000185)319#define TPM_CC_HashSequenceStart (TPM_CC)(0x00000186)320#define TPM_CC_PolicyPhysicalPresence (TPM_CC)(0x00000187)321#define TPM_CC_PolicyDuplicationSelect (TPM_CC)(0x00000188)322#define TPM_CC_PolicyGetDigest (TPM_CC)(0x00000189)323#define TPM_CC_TestParms (TPM_CC)(0x0000018A)324#define TPM_CC_Commit (TPM_CC)(0x0000018B)325#define TPM_CC_PolicyPassword (TPM_CC)(0x0000018C)326#define TPM_CC_ZGen_2Phase (TPM_CC)(0x0000018D)327#define TPM_CC_EC_Ephemeral (TPM_CC)(0x0000018E)328#define TPM_CC_LAST (TPM_CC)(0x0000018E)329330// Table 15 - TPM_RC Constants (Actions)331typedef UINT32 TPM_RC;332#define TPM_RC_SUCCESS (TPM_RC)(0x000)333#define TPM_RC_BAD_TAG (TPM_RC)(0x030)334#define RC_VER1 (TPM_RC)(0x100)335#define TPM_RC_INITIALIZE (TPM_RC)(RC_VER1 + 0x000)336#define TPM_RC_FAILURE (TPM_RC)(RC_VER1 + 0x001)337#define TPM_RC_SEQUENCE (TPM_RC)(RC_VER1 + 0x003)338#define TPM_RC_PRIVATE (TPM_RC)(RC_VER1 + 0x00B)339#define TPM_RC_HMAC (TPM_RC)(RC_VER1 + 0x019)340#define TPM_RC_DISABLED (TPM_RC)(RC_VER1 + 0x020)341#define TPM_RC_EXCLUSIVE (TPM_RC)(RC_VER1 + 0x021)342#define TPM_RC_AUTH_TYPE (TPM_RC)(RC_VER1 + 0x024)343#define TPM_RC_AUTH_MISSING (TPM_RC)(RC_VER1 + 0x025)344#define TPM_RC_POLICY (TPM_RC)(RC_VER1 + 0x026)345#define TPM_RC_PCR (TPM_RC)(RC_VER1 + 0x027)346#define TPM_RC_PCR_CHANGED (TPM_RC)(RC_VER1 + 0x028)347#define TPM_RC_UPGRADE (TPM_RC)(RC_VER1 + 0x02D)348#define TPM_RC_TOO_MANY_CONTEXTS (TPM_RC)(RC_VER1 + 0x02E)349#define TPM_RC_AUTH_UNAVAILABLE (TPM_RC)(RC_VER1 + 0x02F)350#define TPM_RC_REBOOT (TPM_RC)(RC_VER1 + 0x030)351#define TPM_RC_UNBALANCED (TPM_RC)(RC_VER1 + 0x031)352#define TPM_RC_COMMAND_SIZE (TPM_RC)(RC_VER1 + 0x042)353#define TPM_RC_COMMAND_CODE (TPM_RC)(RC_VER1 + 0x043)354#define TPM_RC_AUTHSIZE (TPM_RC)(RC_VER1 + 0x044)355#define TPM_RC_AUTH_CONTEXT (TPM_RC)(RC_VER1 + 0x045)356#define TPM_RC_NV_RANGE (TPM_RC)(RC_VER1 + 0x046)357#define TPM_RC_NV_SIZE (TPM_RC)(RC_VER1 + 0x047)358#define TPM_RC_NV_LOCKED (TPM_RC)(RC_VER1 + 0x048)359#define TPM_RC_NV_AUTHORIZATION (TPM_RC)(RC_VER1 + 0x049)360#define TPM_RC_NV_UNINITIALIZED (TPM_RC)(RC_VER1 + 0x04A)361#define TPM_RC_NV_SPACE (TPM_RC)(RC_VER1 + 0x04B)362#define TPM_RC_NV_DEFINED (TPM_RC)(RC_VER1 + 0x04C)363#define TPM_RC_BAD_CONTEXT (TPM_RC)(RC_VER1 + 0x050)364#define TPM_RC_CPHASH (TPM_RC)(RC_VER1 + 0x051)365#define TPM_RC_PARENT (TPM_RC)(RC_VER1 + 0x052)366#define TPM_RC_NEEDS_TEST (TPM_RC)(RC_VER1 + 0x053)367#define TPM_RC_NO_RESULT (TPM_RC)(RC_VER1 + 0x054)368#define TPM_RC_SENSITIVE (TPM_RC)(RC_VER1 + 0x055)369#define RC_MAX_FM0 (TPM_RC)(RC_VER1 + 0x07F)370#define RC_FMT1 (TPM_RC)(0x080)371#define TPM_RC_ASYMMETRIC (TPM_RC)(RC_FMT1 + 0x001)372#define TPM_RC_ATTRIBUTES (TPM_RC)(RC_FMT1 + 0x002)373#define TPM_RC_HASH (TPM_RC)(RC_FMT1 + 0x003)374#define TPM_RC_VALUE (TPM_RC)(RC_FMT1 + 0x004)375#define TPM_RC_HIERARCHY (TPM_RC)(RC_FMT1 + 0x005)376#define TPM_RC_KEY_SIZE (TPM_RC)(RC_FMT1 + 0x007)377#define TPM_RC_MGF (TPM_RC)(RC_FMT1 + 0x008)378#define TPM_RC_MODE (TPM_RC)(RC_FMT1 + 0x009)379#define TPM_RC_TYPE (TPM_RC)(RC_FMT1 + 0x00A)380#define TPM_RC_HANDLE (TPM_RC)(RC_FMT1 + 0x00B)381#define TPM_RC_KDF (TPM_RC)(RC_FMT1 + 0x00C)382#define TPM_RC_RANGE (TPM_RC)(RC_FMT1 + 0x00D)383#define TPM_RC_AUTH_FAIL (TPM_RC)(RC_FMT1 + 0x00E)384#define TPM_RC_NONCE (TPM_RC)(RC_FMT1 + 0x00F)385#define TPM_RC_PP (TPM_RC)(RC_FMT1 + 0x010)386#define TPM_RC_SCHEME (TPM_RC)(RC_FMT1 + 0x012)387#define TPM_RC_SIZE (TPM_RC)(RC_FMT1 + 0x015)388#define TPM_RC_SYMMETRIC (TPM_RC)(RC_FMT1 + 0x016)389#define TPM_RC_TAG (TPM_RC)(RC_FMT1 + 0x017)390#define TPM_RC_SELECTOR (TPM_RC)(RC_FMT1 + 0x018)391#define TPM_RC_INSUFFICIENT (TPM_RC)(RC_FMT1 + 0x01A)392#define TPM_RC_SIGNATURE (TPM_RC)(RC_FMT1 + 0x01B)393#define TPM_RC_KEY (TPM_RC)(RC_FMT1 + 0x01C)394#define TPM_RC_POLICY_FAIL (TPM_RC)(RC_FMT1 + 0x01D)395#define TPM_RC_INTEGRITY (TPM_RC)(RC_FMT1 + 0x01F)396#define TPM_RC_TICKET (TPM_RC)(RC_FMT1 + 0x020)397#define TPM_RC_RESERVED_BITS (TPM_RC)(RC_FMT1 + 0x021)398#define TPM_RC_BAD_AUTH (TPM_RC)(RC_FMT1 + 0x022)399#define TPM_RC_EXPIRED (TPM_RC)(RC_FMT1 + 0x023)400#define TPM_RC_POLICY_CC (TPM_RC)(RC_FMT1 + 0x024 )401#define TPM_RC_BINDING (TPM_RC)(RC_FMT1 + 0x025)402#define TPM_RC_CURVE (TPM_RC)(RC_FMT1 + 0x026)403#define TPM_RC_ECC_POINT (TPM_RC)(RC_FMT1 + 0x027)404#define RC_WARN (TPM_RC)(0x900)405#define TPM_RC_CONTEXT_GAP (TPM_RC)(RC_WARN + 0x001)406#define TPM_RC_OBJECT_MEMORY (TPM_RC)(RC_WARN + 0x002)407#define TPM_RC_SESSION_MEMORY (TPM_RC)(RC_WARN + 0x003)408#define TPM_RC_MEMORY (TPM_RC)(RC_WARN + 0x004)409#define TPM_RC_SESSION_HANDLES (TPM_RC)(RC_WARN + 0x005)410#define TPM_RC_OBJECT_HANDLES (TPM_RC)(RC_WARN + 0x006)411#define TPM_RC_LOCALITY (TPM_RC)(RC_WARN + 0x007)412#define TPM_RC_YIELDED (TPM_RC)(RC_WARN + 0x008)413#define TPM_RC_CANCELED (TPM_RC)(RC_WARN + 0x009)414#define TPM_RC_TESTING (TPM_RC)(RC_WARN + 0x00A)415#define TPM_RC_REFERENCE_H0 (TPM_RC)(RC_WARN + 0x010)416#define TPM_RC_REFERENCE_H1 (TPM_RC)(RC_WARN + 0x011)417#define TPM_RC_REFERENCE_H2 (TPM_RC)(RC_WARN + 0x012)418#define TPM_RC_REFERENCE_H3 (TPM_RC)(RC_WARN + 0x013)419#define TPM_RC_REFERENCE_H4 (TPM_RC)(RC_WARN + 0x014)420#define TPM_RC_REFERENCE_H5 (TPM_RC)(RC_WARN + 0x015)421#define TPM_RC_REFERENCE_H6 (TPM_RC)(RC_WARN + 0x016)422#define TPM_RC_REFERENCE_S0 (TPM_RC)(RC_WARN + 0x018)423#define TPM_RC_REFERENCE_S1 (TPM_RC)(RC_WARN + 0x019)424#define TPM_RC_REFERENCE_S2 (TPM_RC)(RC_WARN + 0x01A)425#define TPM_RC_REFERENCE_S3 (TPM_RC)(RC_WARN + 0x01B)426#define TPM_RC_REFERENCE_S4 (TPM_RC)(RC_WARN + 0x01C)427#define TPM_RC_REFERENCE_S5 (TPM_RC)(RC_WARN + 0x01D)428#define TPM_RC_REFERENCE_S6 (TPM_RC)(RC_WARN + 0x01E)429#define TPM_RC_NV_RATE (TPM_RC)(RC_WARN + 0x020)430#define TPM_RC_LOCKOUT (TPM_RC)(RC_WARN + 0x021)431#define TPM_RC_RETRY (TPM_RC)(RC_WARN + 0x022)432#define TPM_RC_NV_UNAVAILABLE (TPM_RC)(RC_WARN + 0x023)433#define TPM_RC_NOT_USED (TPM_RC)(RC_WARN + 0x7F)434#define TPM_RC_H (TPM_RC)(0x000)435#define TPM_RC_P (TPM_RC)(0x040)436#define TPM_RC_S (TPM_RC)(0x800)437#define TPM_RC_1 (TPM_RC)(0x100)438#define TPM_RC_2 (TPM_RC)(0x200)439#define TPM_RC_3 (TPM_RC)(0x300)440#define TPM_RC_4 (TPM_RC)(0x400)441#define TPM_RC_5 (TPM_RC)(0x500)442#define TPM_RC_6 (TPM_RC)(0x600)443#define TPM_RC_7 (TPM_RC)(0x700)444#define TPM_RC_8 (TPM_RC)(0x800)445#define TPM_RC_9 (TPM_RC)(0x900)446#define TPM_RC_A (TPM_RC)(0xA00)447#define TPM_RC_B (TPM_RC)(0xB00)448#define TPM_RC_C (TPM_RC)(0xC00)449#define TPM_RC_D (TPM_RC)(0xD00)450#define TPM_RC_E (TPM_RC)(0xE00)451#define TPM_RC_F (TPM_RC)(0xF00)452#define TPM_RC_N_MASK (TPM_RC)(0xF00)453454// Table 16 - TPM_CLOCK_ADJUST Constants455typedef INT8 TPM_CLOCK_ADJUST;456#define TPM_CLOCK_COARSE_SLOWER (TPM_CLOCK_ADJUST)(-3)457#define TPM_CLOCK_MEDIUM_SLOWER (TPM_CLOCK_ADJUST)(-2)458#define TPM_CLOCK_FINE_SLOWER (TPM_CLOCK_ADJUST)(-1)459#define TPM_CLOCK_NO_CHANGE (TPM_CLOCK_ADJUST)(0)460#define TPM_CLOCK_FINE_FASTER (TPM_CLOCK_ADJUST)(1)461#define TPM_CLOCK_MEDIUM_FASTER (TPM_CLOCK_ADJUST)(2)462#define TPM_CLOCK_COARSE_FASTER (TPM_CLOCK_ADJUST)(3)463464// Table 17 - TPM_EO Constants465typedef UINT16 TPM_EO;466#define TPM_EO_EQ (TPM_EO)(0x0000)467#define TPM_EO_NEQ (TPM_EO)(0x0001)468#define TPM_EO_SIGNED_GT (TPM_EO)(0x0002)469#define TPM_EO_UNSIGNED_GT (TPM_EO)(0x0003)470#define TPM_EO_SIGNED_LT (TPM_EO)(0x0004)471#define TPM_EO_UNSIGNED_LT (TPM_EO)(0x0005)472#define TPM_EO_SIGNED_GE (TPM_EO)(0x0006)473#define TPM_EO_UNSIGNED_GE (TPM_EO)(0x0007)474#define TPM_EO_SIGNED_LE (TPM_EO)(0x0008)475#define TPM_EO_UNSIGNED_LE (TPM_EO)(0x0009)476#define TPM_EO_BITSET (TPM_EO)(0x000A)477#define TPM_EO_BITCLEAR (TPM_EO)(0x000B)478479// Table 18 - TPM_ST Constants480typedef UINT16 TPM_ST;481#define TPM_ST_RSP_COMMAND (TPM_ST)(0x00C4)482#define TPM_ST_NULL (TPM_ST)(0X8000)483#define TPM_ST_NO_SESSIONS (TPM_ST)(0x8001)484#define TPM_ST_SESSIONS (TPM_ST)(0x8002)485#define TPM_ST_ATTEST_NV (TPM_ST)(0x8014)486#define TPM_ST_ATTEST_COMMAND_AUDIT (TPM_ST)(0x8015)487#define TPM_ST_ATTEST_SESSION_AUDIT (TPM_ST)(0x8016)488#define TPM_ST_ATTEST_CERTIFY (TPM_ST)(0x8017)489#define TPM_ST_ATTEST_QUOTE (TPM_ST)(0x8018)490#define TPM_ST_ATTEST_TIME (TPM_ST)(0x8019)491#define TPM_ST_ATTEST_CREATION (TPM_ST)(0x801A)492#define TPM_ST_CREATION (TPM_ST)(0x8021)493#define TPM_ST_VERIFIED (TPM_ST)(0x8022)494#define TPM_ST_AUTH_SECRET (TPM_ST)(0x8023)495#define TPM_ST_HASHCHECK (TPM_ST)(0x8024)496#define TPM_ST_AUTH_SIGNED (TPM_ST)(0x8025)497#define TPM_ST_FU_MANIFEST (TPM_ST)(0x8029)498499// Table 19 - TPM_SU Constants500typedef UINT16 TPM_SU;501#define TPM_SU_CLEAR (TPM_SU)(0x0000)502#define TPM_SU_STATE (TPM_SU)(0x0001)503504// Table 20 - TPM_SE Constants505typedef UINT8 TPM_SE;506#define TPM_SE_HMAC (TPM_SE)(0x00)507#define TPM_SE_POLICY (TPM_SE)(0x01)508#define TPM_SE_TRIAL (TPM_SE)(0x03)509510// Table 21 - TPM_CAP Constants511typedef UINT32 TPM_CAP;512#define TPM_CAP_FIRST (TPM_CAP)(0x00000000)513#define TPM_CAP_ALGS (TPM_CAP)(0x00000000)514#define TPM_CAP_HANDLES (TPM_CAP)(0x00000001)515#define TPM_CAP_COMMANDS (TPM_CAP)(0x00000002)516#define TPM_CAP_PP_COMMANDS (TPM_CAP)(0x00000003)517#define TPM_CAP_AUDIT_COMMANDS (TPM_CAP)(0x00000004)518#define TPM_CAP_PCRS (TPM_CAP)(0x00000005)519#define TPM_CAP_TPM_PROPERTIES (TPM_CAP)(0x00000006)520#define TPM_CAP_PCR_PROPERTIES (TPM_CAP)(0x00000007)521#define TPM_CAP_ECC_CURVES (TPM_CAP)(0x00000008)522#define TPM_CAP_LAST (TPM_CAP)(0x00000008)523#define TPM_CAP_VENDOR_PROPERTY (TPM_CAP)(0x00000100)524525// Table 22 - TPM_PT Constants526typedef UINT32 TPM_PT;527#define TPM_PT_NONE (TPM_PT)(0x00000000)528#define PT_GROUP (TPM_PT)(0x00000100)529#define PT_FIXED (TPM_PT)(PT_GROUP * 1)530#define TPM_PT_FAMILY_INDICATOR (TPM_PT)(PT_FIXED + 0)531#define TPM_PT_LEVEL (TPM_PT)(PT_FIXED + 1)532#define TPM_PT_REVISION (TPM_PT)(PT_FIXED + 2)533#define TPM_PT_DAY_OF_YEAR (TPM_PT)(PT_FIXED + 3)534#define TPM_PT_YEAR (TPM_PT)(PT_FIXED + 4)535#define TPM_PT_MANUFACTURER (TPM_PT)(PT_FIXED + 5)536#define TPM_PT_VENDOR_STRING_1 (TPM_PT)(PT_FIXED + 6)537#define TPM_PT_VENDOR_STRING_2 (TPM_PT)(PT_FIXED + 7)538#define TPM_PT_VENDOR_STRING_3 (TPM_PT)(PT_FIXED + 8)539#define TPM_PT_VENDOR_STRING_4 (TPM_PT)(PT_FIXED + 9)540#define TPM_PT_VENDOR_TPM_TYPE (TPM_PT)(PT_FIXED + 10)541#define TPM_PT_FIRMWARE_VERSION_1 (TPM_PT)(PT_FIXED + 11)542#define TPM_PT_FIRMWARE_VERSION_2 (TPM_PT)(PT_FIXED + 12)543#define TPM_PT_INPUT_BUFFER (TPM_PT)(PT_FIXED + 13)544#define TPM_PT_HR_TRANSIENT_MIN (TPM_PT)(PT_FIXED + 14)545#define TPM_PT_HR_PERSISTENT_MIN (TPM_PT)(PT_FIXED + 15)546#define TPM_PT_HR_LOADED_MIN (TPM_PT)(PT_FIXED + 16)547#define TPM_PT_ACTIVE_SESSIONS_MAX (TPM_PT)(PT_FIXED + 17)548#define TPM_PT_PCR_COUNT (TPM_PT)(PT_FIXED + 18)549#define TPM_PT_PCR_SELECT_MIN (TPM_PT)(PT_FIXED + 19)550#define TPM_PT_CONTEXT_GAP_MAX (TPM_PT)(PT_FIXED + 20)551#define TPM_PT_NV_COUNTERS_MAX (TPM_PT)(PT_FIXED + 22)552#define TPM_PT_NV_INDEX_MAX (TPM_PT)(PT_FIXED + 23)553#define TPM_PT_MEMORY (TPM_PT)(PT_FIXED + 24)554#define TPM_PT_CLOCK_UPDATE (TPM_PT)(PT_FIXED + 25)555#define TPM_PT_CONTEXT_HASH (TPM_PT)(PT_FIXED + 26)556#define TPM_PT_CONTEXT_SYM (TPM_PT)(PT_FIXED + 27)557#define TPM_PT_CONTEXT_SYM_SIZE (TPM_PT)(PT_FIXED + 28)558#define TPM_PT_ORDERLY_COUNT (TPM_PT)(PT_FIXED + 29)559#define TPM_PT_MAX_COMMAND_SIZE (TPM_PT)(PT_FIXED + 30)560#define TPM_PT_MAX_RESPONSE_SIZE (TPM_PT)(PT_FIXED + 31)561#define TPM_PT_MAX_DIGEST (TPM_PT)(PT_FIXED + 32)562#define TPM_PT_MAX_OBJECT_CONTEXT (TPM_PT)(PT_FIXED + 33)563#define TPM_PT_MAX_SESSION_CONTEXT (TPM_PT)(PT_FIXED + 34)564#define TPM_PT_PS_FAMILY_INDICATOR (TPM_PT)(PT_FIXED + 35)565#define TPM_PT_PS_LEVEL (TPM_PT)(PT_FIXED + 36)566#define TPM_PT_PS_REVISION (TPM_PT)(PT_FIXED + 37)567#define TPM_PT_PS_DAY_OF_YEAR (TPM_PT)(PT_FIXED + 38)568#define TPM_PT_PS_YEAR (TPM_PT)(PT_FIXED + 39)569#define TPM_PT_SPLIT_MAX (TPM_PT)(PT_FIXED + 40)570#define TPM_PT_TOTAL_COMMANDS (TPM_PT)(PT_FIXED + 41)571#define TPM_PT_LIBRARY_COMMANDS (TPM_PT)(PT_FIXED + 42)572#define TPM_PT_VENDOR_COMMANDS (TPM_PT)(PT_FIXED + 43)573#define PT_VAR (TPM_PT)(PT_GROUP * 2)574#define TPM_PT_PERMANENT (TPM_PT)(PT_VAR + 0)575#define TPM_PT_STARTUP_CLEAR (TPM_PT)(PT_VAR + 1)576#define TPM_PT_HR_NV_INDEX (TPM_PT)(PT_VAR + 2)577#define TPM_PT_HR_LOADED (TPM_PT)(PT_VAR + 3)578#define TPM_PT_HR_LOADED_AVAIL (TPM_PT)(PT_VAR + 4)579#define TPM_PT_HR_ACTIVE (TPM_PT)(PT_VAR + 5)580#define TPM_PT_HR_ACTIVE_AVAIL (TPM_PT)(PT_VAR + 6)581#define TPM_PT_HR_TRANSIENT_AVAIL (TPM_PT)(PT_VAR + 7)582#define TPM_PT_HR_PERSISTENT (TPM_PT)(PT_VAR + 8)583#define TPM_PT_HR_PERSISTENT_AVAIL (TPM_PT)(PT_VAR + 9)584#define TPM_PT_NV_COUNTERS (TPM_PT)(PT_VAR + 10)585#define TPM_PT_NV_COUNTERS_AVAIL (TPM_PT)(PT_VAR + 11)586#define TPM_PT_ALGORITHM_SET (TPM_PT)(PT_VAR + 12)587#define TPM_PT_LOADED_CURVES (TPM_PT)(PT_VAR + 13)588#define TPM_PT_LOCKOUT_COUNTER (TPM_PT)(PT_VAR + 14)589#define TPM_PT_MAX_AUTH_FAIL (TPM_PT)(PT_VAR + 15)590#define TPM_PT_LOCKOUT_INTERVAL (TPM_PT)(PT_VAR + 16)591#define TPM_PT_LOCKOUT_RECOVERY (TPM_PT)(PT_VAR + 17)592#define TPM_PT_NV_WRITE_RECOVERY (TPM_PT)(PT_VAR + 18)593#define TPM_PT_AUDIT_COUNTER_0 (TPM_PT)(PT_VAR + 19)594#define TPM_PT_AUDIT_COUNTER_1 (TPM_PT)(PT_VAR + 20)595596// Table 23 - TPM_PT_PCR Constants597typedef UINT32 TPM_PT_PCR;598#define TPM_PT_PCR_FIRST (TPM_PT_PCR)(0x00000000)599#define TPM_PT_PCR_SAVE (TPM_PT_PCR)(0x00000000)600#define TPM_PT_PCR_EXTEND_L0 (TPM_PT_PCR)(0x00000001)601#define TPM_PT_PCR_RESET_L0 (TPM_PT_PCR)(0x00000002)602#define TPM_PT_PCR_EXTEND_L1 (TPM_PT_PCR)(0x00000003)603#define TPM_PT_PCR_RESET_L1 (TPM_PT_PCR)(0x00000004)604#define TPM_PT_PCR_EXTEND_L2 (TPM_PT_PCR)(0x00000005)605#define TPM_PT_PCR_RESET_L2 (TPM_PT_PCR)(0x00000006)606#define TPM_PT_PCR_EXTEND_L3 (TPM_PT_PCR)(0x00000007)607#define TPM_PT_PCR_RESET_L3 (TPM_PT_PCR)(0x00000008)608#define TPM_PT_PCR_EXTEND_L4 (TPM_PT_PCR)(0x00000009)609#define TPM_PT_PCR_RESET_L4 (TPM_PT_PCR)(0x0000000A)610#define TPM_PT_PCR_NO_INCREMENT (TPM_PT_PCR)(0x00000011)611#define TPM_PT_PCR_DRTM_RESET (TPM_PT_PCR)(0x00000012)612#define TPM_PT_PCR_POLICY (TPM_PT_PCR)(0x00000013)613#define TPM_PT_PCR_AUTH (TPM_PT_PCR)(0x00000014)614#define TPM_PT_PCR_LAST (TPM_PT_PCR)(0x00000014)615616// Table 24 - TPM_PS Constants617typedef UINT32 TPM_PS;618#define TPM_PS_MAIN (TPM_PS)(0x00000000)619#define TPM_PS_PC (TPM_PS)(0x00000001)620#define TPM_PS_PDA (TPM_PS)(0x00000002)621#define TPM_PS_CELL_PHONE (TPM_PS)(0x00000003)622#define TPM_PS_SERVER (TPM_PS)(0x00000004)623#define TPM_PS_PERIPHERAL (TPM_PS)(0x00000005)624#define TPM_PS_TSS (TPM_PS)(0x00000006)625#define TPM_PS_STORAGE (TPM_PS)(0x00000007)626#define TPM_PS_AUTHENTICATION (TPM_PS)(0x00000008)627#define TPM_PS_EMBEDDED (TPM_PS)(0x00000009)628#define TPM_PS_HARDCOPY (TPM_PS)(0x0000000A)629#define TPM_PS_INFRASTRUCTURE (TPM_PS)(0x0000000B)630#define TPM_PS_VIRTUALIZATION (TPM_PS)(0x0000000C)631#define TPM_PS_TNC (TPM_PS)(0x0000000D)632#define TPM_PS_MULTI_TENANT (TPM_PS)(0x0000000E)633#define TPM_PS_TC (TPM_PS)(0x0000000F)634635// 7 Handles636637// Table 25 - Handles Types638//639// NOTE: Comment because it has same name as TPM1.2 (value is same, so not runtime issue)640//641// typedef UINT32 TPM_HANDLE;642643// Table 26 - TPM_HT Constants644typedef UINT8 TPM_HT;645#define TPM_HT_PCR (TPM_HT)(0x00)646#define TPM_HT_NV_INDEX (TPM_HT)(0x01)647#define TPM_HT_HMAC_SESSION (TPM_HT)(0x02)648#define TPM_HT_LOADED_SESSION (TPM_HT)(0x02)649#define TPM_HT_POLICY_SESSION (TPM_HT)(0x03)650#define TPM_HT_ACTIVE_SESSION (TPM_HT)(0x03)651#define TPM_HT_PERMANENT (TPM_HT)(0x40)652#define TPM_HT_TRANSIENT (TPM_HT)(0x80)653#define TPM_HT_PERSISTENT (TPM_HT)(0x81)654655// Table 27 - TPM_RH Constants656typedef UINT32 TPM_RH;657#define TPM_RH_FIRST (TPM_RH)(0x40000000)658#define TPM_RH_SRK (TPM_RH)(0x40000000)659#define TPM_RH_OWNER (TPM_RH)(0x40000001)660#define TPM_RH_REVOKE (TPM_RH)(0x40000002)661#define TPM_RH_TRANSPORT (TPM_RH)(0x40000003)662#define TPM_RH_OPERATOR (TPM_RH)(0x40000004)663#define TPM_RH_ADMIN (TPM_RH)(0x40000005)664#define TPM_RH_EK (TPM_RH)(0x40000006)665#define TPM_RH_NULL (TPM_RH)(0x40000007)666#define TPM_RH_UNASSIGNED (TPM_RH)(0x40000008)667#define TPM_RS_PW (TPM_RH)(0x40000009)668#define TPM_RH_LOCKOUT (TPM_RH)(0x4000000A)669#define TPM_RH_ENDORSEMENT (TPM_RH)(0x4000000B)670#define TPM_RH_PLATFORM (TPM_RH)(0x4000000C)671#define TPM_RH_PLATFORM_NV (TPM_RH)(0x4000000D)672#define TPM_RH_AUTH_00 (TPM_RH)(0x40000010)673#define TPM_RH_AUTH_FF (TPM_RH)(0x4000010F)674#define TPM_RH_LAST (TPM_RH)(0x4000010F)675676// Table 28 - TPM_HC Constants677typedef TPM_HANDLE TPM_HC;678#define HR_HANDLE_MASK (TPM_HC)(0x00FFFFFF)679#define HR_RANGE_MASK (TPM_HC)(0xFF000000)680#define HR_SHIFT (TPM_HC)(24)681#define HR_PCR (TPM_HC)((TPM_HC)TPM_HT_PCR << HR_SHIFT)682#define HR_HMAC_SESSION (TPM_HC)((TPM_HC)TPM_HT_HMAC_SESSION << HR_SHIFT)683#define HR_POLICY_SESSION (TPM_HC)((TPM_HC)TPM_HT_POLICY_SESSION << HR_SHIFT)684#define HR_TRANSIENT (TPM_HC)((TPM_HC)TPM_HT_TRANSIENT << HR_SHIFT)685#define HR_PERSISTENT (TPM_HC)((TPM_HC)TPM_HT_PERSISTENT << HR_SHIFT)686#define HR_NV_INDEX (TPM_HC)((TPM_HC)TPM_HT_NV_INDEX << HR_SHIFT)687#define HR_PERMANENT (TPM_HC)((TPM_HC)TPM_HT_PERMANENT << HR_SHIFT)688#define PCR_FIRST (TPM_HC)(HR_PCR + 0)689#define PCR_LAST (TPM_HC)(PCR_FIRST + IMPLEMENTATION_PCR - 1)690#define HMAC_SESSION_FIRST (TPM_HC)(HR_HMAC_SESSION + 0)691#define HMAC_SESSION_LAST (TPM_HC)(HMAC_SESSION_FIRST + MAX_ACTIVE_SESSIONS - 1)692#define LOADED_SESSION_FIRST (TPM_HC)(HMAC_SESSION_FIRST)693#define LOADED_SESSION_LAST (TPM_HC)(HMAC_SESSION_LAST)694#define POLICY_SESSION_FIRST (TPM_HC)(HR_POLICY_SESSION + 0)695#define POLICY_SESSION_LAST (TPM_HC)(POLICY_SESSION_FIRST + MAX_ACTIVE_SESSIONS - 1)696#define TRANSIENT_FIRST (TPM_HC)(HR_TRANSIENT + 0)697#define ACTIVE_SESSION_FIRST (TPM_HC)(POLICY_SESSION_FIRST)698#define ACTIVE_SESSION_LAST (TPM_HC)(POLICY_SESSION_LAST)699#define TRANSIENT_LAST (TPM_HC)(TRANSIENT_FIRST+MAX_LOADED_OBJECTS - 1)700#define PERSISTENT_FIRST (TPM_HC)(HR_PERSISTENT + 0)701#define PERSISTENT_LAST (TPM_HC)(PERSISTENT_FIRST + 0x00FFFFFF)702#define PLATFORM_PERSISTENT (TPM_HC)(PERSISTENT_FIRST + 0x00800000)703#define NV_INDEX_FIRST (TPM_HC)(HR_NV_INDEX + 0)704#define NV_INDEX_LAST (TPM_HC)(NV_INDEX_FIRST + 0x00FFFFFF)705#define PERMANENT_FIRST (TPM_HC)(TPM_RH_FIRST)706#define PERMANENT_LAST (TPM_HC)(TPM_RH_LAST)707708// 8 Attribute Structures709710// Table 29 - TPMA_ALGORITHM Bits711typedef struct {712UINT32 asymmetric : 1;713UINT32 symmetric : 1;714UINT32 hash : 1;715UINT32 object : 1;716UINT32 reserved4_7 : 4;717UINT32 signing : 1;718UINT32 encrypting : 1;719UINT32 method : 1;720UINT32 reserved11_31 : 21;721} TPMA_ALGORITHM;722723// Table 30 - TPMA_OBJECT Bits724typedef struct {725UINT32 reserved1 : 1;726UINT32 fixedTPM : 1;727UINT32 stClear : 1;728UINT32 reserved4 : 1;729UINT32 fixedParent : 1;730UINT32 sensitiveDataOrigin : 1;731UINT32 userWithAuth : 1;732UINT32 adminWithPolicy : 1;733UINT32 reserved8_9 : 2;734UINT32 noDA : 1;735UINT32 encryptedDuplication : 1;736UINT32 reserved12_15 : 4;737UINT32 restricted : 1;738UINT32 decrypt : 1;739UINT32 sign : 1;740UINT32 reserved19_31 : 13;741} TPMA_OBJECT;742743// Table 31 - TPMA_SESSION Bits744typedef struct {745UINT8 continueSession : 1;746UINT8 auditExclusive : 1;747UINT8 auditReset : 1;748UINT8 reserved3_4 : 2;749UINT8 decrypt : 1;750UINT8 encrypt : 1;751UINT8 audit : 1;752} TPMA_SESSION;753754// Table 32 - TPMA_LOCALITY Bits755//756// NOTE: Use low case here to resolve conflict757//758typedef struct {759UINT8 locZero : 1;760UINT8 locOne : 1;761UINT8 locTwo : 1;762UINT8 locThree : 1;763UINT8 locFour : 1;764UINT8 Extended : 3;765} TPMA_LOCALITY;766767// Table 33 - TPMA_PERMANENT Bits768typedef struct {769UINT32 ownerAuthSet : 1;770UINT32 endorsementAuthSet : 1;771UINT32 lockoutAuthSet : 1;772UINT32 reserved3_7 : 5;773UINT32 disableClear : 1;774UINT32 inLockout : 1;775UINT32 tpmGeneratedEPS : 1;776UINT32 reserved11_31 : 21;777} TPMA_PERMANENT;778779// Table 34 - TPMA_STARTUP_CLEAR Bits780typedef struct {781UINT32 phEnable : 1;782UINT32 shEnable : 1;783UINT32 ehEnable : 1;784UINT32 reserved3_30 : 28;785UINT32 orderly : 1;786} TPMA_STARTUP_CLEAR;787788// Table 35 - TPMA_MEMORY Bits789typedef struct {790UINT32 sharedRAM : 1;791UINT32 sharedNV : 1;792UINT32 objectCopiedToRam : 1;793UINT32 reserved3_31 : 29;794} TPMA_MEMORY;795796// Table 36 - TPMA_CC Bits797typedef struct {798UINT32 commandIndex : 16;799UINT32 reserved16_21 : 6;800UINT32 nv : 1;801UINT32 extensive : 1;802UINT32 flushed : 1;803UINT32 cHandles : 3;804UINT32 rHandle : 1;805UINT32 V : 1;806UINT32 Res : 2;807} TPMA_CC;808809// 9 Interface Types810811// Table 37 - TPMI_YES_NO Type812typedef BYTE TPMI_YES_NO;813814// Table 38 - TPMI_DH_OBJECT Type815typedef TPM_HANDLE TPMI_DH_OBJECT;816817// Table 39 - TPMI_DH_PERSISTENT Type818typedef TPM_HANDLE TPMI_DH_PERSISTENT;819820// Table 40 - TPMI_DH_ENTITY Type821typedef TPM_HANDLE TPMI_DH_ENTITY;822823// Table 41 - TPMI_DH_PCR Type824typedef TPM_HANDLE TPMI_DH_PCR;825826// Table 42 - TPMI_SH_AUTH_SESSION Type827typedef TPM_HANDLE TPMI_SH_AUTH_SESSION;828829// Table 43 - TPMI_SH_HMAC Type830typedef TPM_HANDLE TPMI_SH_HMAC;831832// Table 44 - TPMI_SH_POLICY Type833typedef TPM_HANDLE TPMI_SH_POLICY;834835// Table 45 - TPMI_DH_CONTEXT Type836typedef TPM_HANDLE TPMI_DH_CONTEXT;837838// Table 46 - TPMI_RH_HIERARCHY Type839typedef TPM_HANDLE TPMI_RH_HIERARCHY;840841// Table 47 - TPMI_RH_HIERARCHY_AUTH Type842typedef TPM_HANDLE TPMI_RH_HIERARCHY_AUTH;843844// Table 48 - TPMI_RH_PLATFORM Type845typedef TPM_HANDLE TPMI_RH_PLATFORM;846847// Table 49 - TPMI_RH_OWNER Type848typedef TPM_HANDLE TPMI_RH_OWNER;849850// Table 50 - TPMI_RH_ENDORSEMENT Type851typedef TPM_HANDLE TPMI_RH_ENDORSEMENT;852853// Table 51 - TPMI_RH_PROVISION Type854typedef TPM_HANDLE TPMI_RH_PROVISION;855856// Table 52 - TPMI_RH_CLEAR Type857typedef TPM_HANDLE TPMI_RH_CLEAR;858859// Table 53 - TPMI_RH_NV_AUTH Type860typedef TPM_HANDLE TPMI_RH_NV_AUTH;861862// Table 54 - TPMI_RH_LOCKOUT Type863typedef TPM_HANDLE TPMI_RH_LOCKOUT;864865// Table 55 - TPMI_RH_NV_INDEX Type866typedef TPM_HANDLE TPMI_RH_NV_INDEX;867868// Table 56 - TPMI_ALG_HASH Type869typedef TPM_ALG_ID TPMI_ALG_HASH;870871// Table 57 - TPMI_ALG_ASYM Type872typedef TPM_ALG_ID TPMI_ALG_ASYM;873874// Table 58 - TPMI_ALG_SYM Type875typedef TPM_ALG_ID TPMI_ALG_SYM;876877// Table 59 - TPMI_ALG_SYM_OBJECT Type878typedef TPM_ALG_ID TPMI_ALG_SYM_OBJECT;879880// Table 60 - TPMI_ALG_SYM_MODE Type881typedef TPM_ALG_ID TPMI_ALG_SYM_MODE;882883// Table 61 - TPMI_ALG_KDF Type884typedef TPM_ALG_ID TPMI_ALG_KDF;885886// Table 62 - TPMI_ALG_SIG_SCHEME Type887typedef TPM_ALG_ID TPMI_ALG_SIG_SCHEME;888889// Table 63 - TPMI_ECC_KEY_EXCHANGE Type890typedef TPM_ALG_ID TPMI_ECC_KEY_EXCHANGE;891892// Table 64 - TPMI_ST_COMMAND_TAG Type893typedef TPM_ST TPMI_ST_COMMAND_TAG;894895// 10 Structure Definitions896897// Table 65 - TPMS_ALGORITHM_DESCRIPTION Structure898typedef struct {899TPM_ALG_ID alg;900TPMA_ALGORITHM attributes;901} TPMS_ALGORITHM_DESCRIPTION;902903// Table 66 - TPMU_HA Union904typedef union {905BYTE sha1[SHA1_DIGEST_SIZE];906BYTE sha256[SHA256_DIGEST_SIZE];907BYTE sm3_256[SM3_256_DIGEST_SIZE];908BYTE sha384[SHA384_DIGEST_SIZE];909BYTE sha512[SHA512_DIGEST_SIZE];910} TPMU_HA;911912// Table 67 - TPMT_HA Structure913typedef struct {914TPMI_ALG_HASH hashAlg;915TPMU_HA digest;916} TPMT_HA;917918// Table 68 - TPM2B_DIGEST Structure919typedef struct {920UINT16 size;921BYTE buffer[sizeof (TPMU_HA)];922} TPM2B_DIGEST;923924// Table 69 - TPM2B_DATA Structure925typedef struct {926UINT16 size;927BYTE buffer[sizeof (TPMT_HA)];928} TPM2B_DATA;929930// Table 70 - TPM2B_NONCE Types931typedef TPM2B_DIGEST TPM2B_NONCE;932933// Table 71 - TPM2B_AUTH Types934typedef TPM2B_DIGEST TPM2B_AUTH;935936// Table 72 - TPM2B_OPERAND Types937typedef TPM2B_DIGEST TPM2B_OPERAND;938939// Table 73 - TPM2B_EVENT Structure940typedef struct {941UINT16 size;942BYTE buffer[1024];943} TPM2B_EVENT;944945// Table 74 - TPM2B_MAX_BUFFER Structure946typedef struct {947UINT16 size;948BYTE buffer[MAX_DIGEST_BUFFER];949} TPM2B_MAX_BUFFER;950951// Table 75 - TPM2B_MAX_NV_BUFFER Structure952typedef struct {953UINT16 size;954BYTE buffer[MAX_NV_INDEX_SIZE];955} TPM2B_MAX_NV_BUFFER;956957// Table 76 - TPM2B_TIMEOUT Structure958typedef struct {959UINT16 size;960BYTE buffer[sizeof (UINT64)];961} TPM2B_TIMEOUT;962963// Table 77 -- TPM2B_IV Structure <I/O>964typedef struct {965UINT16 size;966BYTE buffer[MAX_SYM_BLOCK_SIZE];967} TPM2B_IV;968969// Table 78 - TPMU_NAME Union970typedef union {971TPMT_HA digest;972TPM_HANDLE handle;973} TPMU_NAME;974975// Table 79 - TPM2B_NAME Structure976typedef struct {977UINT16 size;978BYTE name[sizeof (TPMU_NAME)];979} TPM2B_NAME;980981// Table 80 - TPMS_PCR_SELECT Structure982typedef struct {983UINT8 sizeofSelect;984BYTE pcrSelect[PCR_SELECT_MAX];985} TPMS_PCR_SELECT;986987// Table 81 - TPMS_PCR_SELECTION Structure988typedef struct {989TPMI_ALG_HASH hash;990UINT8 sizeofSelect;991BYTE pcrSelect[PCR_SELECT_MAX];992} TPMS_PCR_SELECTION;993994// Table 84 - TPMT_TK_CREATION Structure995typedef struct {996TPM_ST tag;997TPMI_RH_HIERARCHY hierarchy;998TPM2B_DIGEST digest;999} TPMT_TK_CREATION;10001001// Table 85 - TPMT_TK_VERIFIED Structure1002typedef struct {1003TPM_ST tag;1004TPMI_RH_HIERARCHY hierarchy;1005TPM2B_DIGEST digest;1006} TPMT_TK_VERIFIED;10071008// Table 86 - TPMT_TK_AUTH Structure1009typedef struct {1010TPM_ST tag;1011TPMI_RH_HIERARCHY hierarchy;1012TPM2B_DIGEST digest;1013} TPMT_TK_AUTH;10141015// Table 87 - TPMT_TK_HASHCHECK Structure1016typedef struct {1017TPM_ST tag;1018TPMI_RH_HIERARCHY hierarchy;1019TPM2B_DIGEST digest;1020} TPMT_TK_HASHCHECK;10211022// Table 88 - TPMS_ALG_PROPERTY Structure1023typedef struct {1024TPM_ALG_ID alg;1025TPMA_ALGORITHM algProperties;1026} TPMS_ALG_PROPERTY;10271028// Table 89 - TPMS_TAGGED_PROPERTY Structure1029typedef struct {1030TPM_PT property;1031UINT32 value;1032} TPMS_TAGGED_PROPERTY;10331034// Table 90 - TPMS_TAGGED_PCR_SELECT Structure1035typedef struct {1036TPM_PT tag;1037UINT8 sizeofSelect;1038BYTE pcrSelect[PCR_SELECT_MAX];1039} TPMS_TAGGED_PCR_SELECT;10401041// Table 91 - TPML_CC Structure1042typedef struct {1043UINT32 count;1044TPM_CC commandCodes[MAX_CAP_CC];1045} TPML_CC;10461047// Table 92 - TPML_CCA Structure1048typedef struct {1049UINT32 count;1050TPMA_CC commandAttributes[MAX_CAP_CC];1051} TPML_CCA;10521053// Table 93 - TPML_ALG Structure1054typedef struct {1055UINT32 count;1056TPM_ALG_ID algorithms[MAX_ALG_LIST_SIZE];1057} TPML_ALG;10581059// Table 94 - TPML_HANDLE Structure1060typedef struct {1061UINT32 count;1062TPM_HANDLE handle[MAX_CAP_HANDLES];1063} TPML_HANDLE;10641065// Table 95 - TPML_DIGEST Structure1066typedef struct {1067UINT32 count;1068TPM2B_DIGEST digests[8];1069} TPML_DIGEST;10701071// Table 96 -- TPML_DIGEST_VALUES Structure <I/O>1072typedef struct {1073UINT32 count;1074TPMT_HA digests[HASH_COUNT];1075} TPML_DIGEST_VALUES;10761077// Table 97 - TPM2B_DIGEST_VALUES Structure1078typedef struct {1079UINT16 size;1080BYTE buffer[sizeof (TPML_DIGEST_VALUES)];1081} TPM2B_DIGEST_VALUES;10821083// Table 98 - TPML_PCR_SELECTION Structure1084typedef struct {1085UINT32 count;1086TPMS_PCR_SELECTION pcrSelections[HASH_COUNT];1087} TPML_PCR_SELECTION;10881089// Table 99 - TPML_ALG_PROPERTY Structure1090typedef struct {1091UINT32 count;1092TPMS_ALG_PROPERTY algProperties[MAX_CAP_ALGS];1093} TPML_ALG_PROPERTY;10941095// Table 100 - TPML_TAGGED_TPM_PROPERTY Structure1096typedef struct {1097UINT32 count;1098TPMS_TAGGED_PROPERTY tpmProperty[MAX_TPM_PROPERTIES];1099} TPML_TAGGED_TPM_PROPERTY;11001101// Table 101 - TPML_TAGGED_PCR_PROPERTY Structure1102typedef struct {1103UINT32 count;1104TPMS_TAGGED_PCR_SELECT pcrProperty[MAX_PCR_PROPERTIES];1105} TPML_TAGGED_PCR_PROPERTY;11061107// Table 102 - TPML_ECC_CURVE Structure1108typedef struct {1109UINT32 count;1110TPM_ECC_CURVE eccCurves[MAX_ECC_CURVES];1111} TPML_ECC_CURVE;11121113// Table 103 - TPMU_CAPABILITIES Union1114typedef union {1115TPML_ALG_PROPERTY algorithms;1116TPML_HANDLE handles;1117TPML_CCA command;1118TPML_CC ppCommands;1119TPML_CC auditCommands;1120TPML_PCR_SELECTION assignedPCR;1121TPML_TAGGED_TPM_PROPERTY tpmProperties;1122TPML_TAGGED_PCR_PROPERTY pcrProperties;1123TPML_ECC_CURVE eccCurves;1124} TPMU_CAPABILITIES;11251126// Table 104 - TPMS_CAPABILITY_DATA Structure1127typedef struct {1128TPM_CAP capability;1129TPMU_CAPABILITIES data;1130} TPMS_CAPABILITY_DATA;11311132// Table 105 - TPMS_CLOCK_INFO Structure1133typedef struct {1134UINT64 clock;1135UINT32 resetCount;1136UINT32 restartCount;1137TPMI_YES_NO safe;1138} TPMS_CLOCK_INFO;11391140// Table 106 - TPMS_TIME_INFO Structure1141typedef struct {1142UINT64 time;1143TPMS_CLOCK_INFO clockInfo;1144} TPMS_TIME_INFO;11451146// Table 107 - TPMS_TIME_ATTEST_INFO Structure1147typedef struct {1148TPMS_TIME_INFO time;1149UINT64 firmwareVersion;1150} TPMS_TIME_ATTEST_INFO;11511152// Table 108 - TPMS_CERTIFY_INFO Structure1153typedef struct {1154TPM2B_NAME name;1155TPM2B_NAME qualifiedName;1156} TPMS_CERTIFY_INFO;11571158// Table 109 - TPMS_QUOTE_INFO Structure1159typedef struct {1160TPML_PCR_SELECTION pcrSelect;1161TPM2B_DIGEST pcrDigest;1162} TPMS_QUOTE_INFO;11631164// Table 110 - TPMS_COMMAND_AUDIT_INFO Structure1165typedef struct {1166UINT64 auditCounter;1167TPM_ALG_ID digestAlg;1168TPM2B_DIGEST auditDigest;1169TPM2B_DIGEST commandDigest;1170} TPMS_COMMAND_AUDIT_INFO;11711172// Table 111 - TPMS_SESSION_AUDIT_INFO Structure1173typedef struct {1174TPMI_YES_NO exclusiveSession;1175TPM2B_DIGEST sessionDigest;1176} TPMS_SESSION_AUDIT_INFO;11771178// Table 112 - TPMS_CREATION_INFO Structure1179typedef struct {1180TPM2B_NAME objectName;1181TPM2B_DIGEST creationHash;1182} TPMS_CREATION_INFO;11831184// Table 113 - TPMS_NV_CERTIFY_INFO Structure1185typedef struct {1186TPM2B_NAME indexName;1187UINT16 offset;1188TPM2B_MAX_NV_BUFFER nvContents;1189} TPMS_NV_CERTIFY_INFO;11901191// Table 114 - TPMI_ST_ATTEST Type1192typedef TPM_ST TPMI_ST_ATTEST;11931194// Table 115 - TPMU_ATTEST Union1195typedef union {1196TPMS_CERTIFY_INFO certify;1197TPMS_CREATION_INFO creation;1198TPMS_QUOTE_INFO quote;1199TPMS_COMMAND_AUDIT_INFO commandAudit;1200TPMS_SESSION_AUDIT_INFO sessionAudit;1201TPMS_TIME_ATTEST_INFO time;1202TPMS_NV_CERTIFY_INFO nv;1203} TPMU_ATTEST;12041205// Table 116 - TPMS_ATTEST Structure1206typedef struct {1207TPM_GENERATED magic;1208TPMI_ST_ATTEST type;1209TPM2B_NAME qualifiedSigner;1210TPM2B_DATA extraData;1211TPMS_CLOCK_INFO clockInfo;1212UINT64 firmwareVersion;1213TPMU_ATTEST attested;1214} TPMS_ATTEST;12151216// Table 117 - TPM2B_ATTEST Structure1217typedef struct {1218UINT16 size;1219BYTE attestationData[sizeof (TPMS_ATTEST)];1220} TPM2B_ATTEST;12211222// Table 118 - TPMS_AUTH_COMMAND Structure1223typedef struct {1224TPMI_SH_AUTH_SESSION sessionHandle;1225TPM2B_NONCE nonce;1226TPMA_SESSION sessionAttributes;1227TPM2B_AUTH hmac;1228} TPMS_AUTH_COMMAND;12291230// Table 119 - TPMS_AUTH_RESPONSE Structure1231typedef struct {1232TPM2B_NONCE nonce;1233TPMA_SESSION sessionAttributes;1234TPM2B_AUTH hmac;1235} TPMS_AUTH_RESPONSE;12361237// 11 Algorithm Parameters and Structures12381239// Table 120 - TPMI_AES_KEY_BITS Type1240typedef TPM_KEY_BITS TPMI_AES_KEY_BITS;12411242// Table 121 - TPMI_SM4_KEY_BITS Type1243typedef TPM_KEY_BITS TPMI_SM4_KEY_BITS;12441245// Table 122 - TPMU_SYM_KEY_BITS Union1246typedef union {1247TPMI_AES_KEY_BITS aes;1248TPMI_SM4_KEY_BITS SM4;1249TPM_KEY_BITS sym;1250TPMI_ALG_HASH xor_;1251} TPMU_SYM_KEY_BITS;12521253// Table 123 - TPMU_SYM_MODE Union1254typedef union {1255TPMI_ALG_SYM_MODE aes;1256TPMI_ALG_SYM_MODE SM4;1257TPMI_ALG_SYM_MODE sym;1258} TPMU_SYM_MODE;12591260// Table 125 - TPMT_SYM_DEF Structure1261typedef struct {1262TPMI_ALG_SYM algorithm;1263TPMU_SYM_KEY_BITS keyBits;1264TPMU_SYM_MODE mode;1265} TPMT_SYM_DEF;12661267// Table 126 - TPMT_SYM_DEF_OBJECT Structure1268typedef struct {1269TPMI_ALG_SYM_OBJECT algorithm;1270TPMU_SYM_KEY_BITS keyBits;1271TPMU_SYM_MODE mode;1272} TPMT_SYM_DEF_OBJECT;12731274// Table 127 - TPM2B_SYM_KEY Structure1275typedef struct {1276UINT16 size;1277BYTE buffer[MAX_SYM_KEY_BYTES];1278} TPM2B_SYM_KEY;12791280// Table 128 - TPMS_SYMCIPHER_PARMS Structure1281typedef struct {1282TPMT_SYM_DEF_OBJECT sym;1283} TPMS_SYMCIPHER_PARMS;12841285// Table 129 - TPM2B_SENSITIVE_DATA Structure1286typedef struct {1287UINT16 size;1288BYTE buffer[MAX_SYM_DATA];1289} TPM2B_SENSITIVE_DATA;12901291// Table 130 - TPMS_SENSITIVE_CREATE Structure1292typedef struct {1293TPM2B_AUTH userAuth;1294TPM2B_SENSITIVE_DATA data;1295} TPMS_SENSITIVE_CREATE;12961297// Table 131 - TPM2B_SENSITIVE_CREATE Structure1298typedef struct {1299UINT16 size;1300TPMS_SENSITIVE_CREATE sensitive;1301} TPM2B_SENSITIVE_CREATE;13021303// Table 132 - TPMS_SCHEME_SIGHASH Structure1304typedef struct {1305TPMI_ALG_HASH hashAlg;1306} TPMS_SCHEME_SIGHASH;13071308// Table 133 - TPMI_ALG_KEYEDHASH_SCHEME Type1309typedef TPM_ALG_ID TPMI_ALG_KEYEDHASH_SCHEME;13101311// Table 134 - HMAC_SIG_SCHEME Types1312typedef TPMS_SCHEME_SIGHASH TPMS_SCHEME_HMAC;13131314// Table 135 - TPMS_SCHEME_XOR Structure1315typedef struct {1316TPMI_ALG_HASH hashAlg;1317TPMI_ALG_KDF kdf;1318} TPMS_SCHEME_XOR;13191320// Table 136 - TPMU_SCHEME_KEYEDHASH Union1321typedef union {1322TPMS_SCHEME_HMAC hmac;1323TPMS_SCHEME_XOR xor_;1324} TPMU_SCHEME_KEYEDHASH;13251326// Table 137 - TPMT_KEYEDHASH_SCHEME Structure1327typedef struct {1328TPMI_ALG_KEYEDHASH_SCHEME scheme;1329TPMU_SCHEME_KEYEDHASH details;1330} TPMT_KEYEDHASH_SCHEME;13311332// Table 138 - RSA_SIG_SCHEMES Types1333typedef TPMS_SCHEME_SIGHASH TPMS_SCHEME_RSASSA;1334typedef TPMS_SCHEME_SIGHASH TPMS_SCHEME_RSAPSS;13351336// Table 139 - ECC_SIG_SCHEMES Types1337typedef TPMS_SCHEME_SIGHASH TPMS_SCHEME_ECDSA;1338typedef TPMS_SCHEME_SIGHASH TPMS_SCHEME_SM2;1339typedef TPMS_SCHEME_SIGHASH TPMS_SCHEME_ECSCHNORR;13401341// Table 140 - TPMS_SCHEME_ECDAA Structure1342typedef struct {1343TPMI_ALG_HASH hashAlg;1344UINT16 count;1345} TPMS_SCHEME_ECDAA;13461347// Table 141 - TPMU_SIG_SCHEME Union1348typedef union {1349TPMS_SCHEME_RSASSA rsassa;1350TPMS_SCHEME_RSAPSS rsapss;1351TPMS_SCHEME_ECDSA ecdsa;1352TPMS_SCHEME_ECDAA ecdaa;1353TPMS_SCHEME_ECSCHNORR ecSchnorr;1354TPMS_SCHEME_HMAC hmac;1355TPMS_SCHEME_SIGHASH any;1356} TPMU_SIG_SCHEME;13571358// Table 142 - TPMT_SIG_SCHEME Structure1359typedef struct {1360TPMI_ALG_SIG_SCHEME scheme;1361TPMU_SIG_SCHEME details;1362} TPMT_SIG_SCHEME;13631364// Table 143 - TPMS_SCHEME_OAEP Structure1365typedef struct {1366TPMI_ALG_HASH hashAlg;1367} TPMS_SCHEME_OAEP;13681369// Table 144 - TPMS_SCHEME_ECDH Structure1370typedef struct {1371TPMI_ALG_HASH hashAlg;1372} TPMS_SCHEME_ECDH;13731374// Table 145 - TPMS_SCHEME_MGF1 Structure1375typedef struct {1376TPMI_ALG_HASH hashAlg;1377} TPMS_SCHEME_MGF1;13781379// Table 146 - TPMS_SCHEME_KDF1_SP800_56a Structure1380typedef struct {1381TPMI_ALG_HASH hashAlg;1382} TPMS_SCHEME_KDF1_SP800_56a;13831384// Table 147 - TPMS_SCHEME_KDF2 Structure1385typedef struct {1386TPMI_ALG_HASH hashAlg;1387} TPMS_SCHEME_KDF2;13881389// Table 148 - TPMS_SCHEME_KDF1_SP800_108 Structure1390typedef struct {1391TPMI_ALG_HASH hashAlg;1392} TPMS_SCHEME_KDF1_SP800_108;13931394// Table 149 - TPMU_KDF_SCHEME Union1395typedef union {1396TPMS_SCHEME_MGF1 mgf1;1397TPMS_SCHEME_KDF1_SP800_56a kdf1_SP800_56a;1398TPMS_SCHEME_KDF2 kdf2;1399TPMS_SCHEME_KDF1_SP800_108 kdf1_sp800_108;1400} TPMU_KDF_SCHEME;14011402// Table 150 - TPMT_KDF_SCHEME Structure1403typedef struct {1404TPMI_ALG_KDF scheme;1405TPMU_KDF_SCHEME details;1406} TPMT_KDF_SCHEME;14071408// Table 151 - TPMI_ALG_ASYM_SCHEME Type1409typedef TPM_ALG_ID TPMI_ALG_ASYM_SCHEME;14101411// Table 152 - TPMU_ASYM_SCHEME Union1412typedef union {1413TPMS_SCHEME_RSASSA rsassa;1414TPMS_SCHEME_RSAPSS rsapss;1415TPMS_SCHEME_OAEP oaep;1416TPMS_SCHEME_ECDSA ecdsa;1417TPMS_SCHEME_ECDAA ecdaa;1418TPMS_SCHEME_ECSCHNORR ecSchnorr;1419TPMS_SCHEME_SIGHASH anySig;1420} TPMU_ASYM_SCHEME;14211422// Table 153 - TPMT_ASYM_SCHEME Structure1423typedef struct {1424TPMI_ALG_ASYM_SCHEME scheme;1425TPMU_ASYM_SCHEME details;1426} TPMT_ASYM_SCHEME;14271428// Table 154 - TPMI_ALG_RSA_SCHEME Type1429typedef TPM_ALG_ID TPMI_ALG_RSA_SCHEME;14301431// Table 155 - TPMT_RSA_SCHEME Structure1432typedef struct {1433TPMI_ALG_RSA_SCHEME scheme;1434TPMU_ASYM_SCHEME details;1435} TPMT_RSA_SCHEME;14361437// Table 156 - TPMI_ALG_RSA_DECRYPT Type1438typedef TPM_ALG_ID TPMI_ALG_RSA_DECRYPT;14391440// Table 157 - TPMT_RSA_DECRYPT Structure1441typedef struct {1442TPMI_ALG_RSA_DECRYPT scheme;1443TPMU_ASYM_SCHEME details;1444} TPMT_RSA_DECRYPT;14451446// Table 158 - TPM2B_PUBLIC_KEY_RSA Structure1447typedef struct {1448UINT16 size;1449BYTE buffer[MAX_RSA_KEY_BYTES];1450} TPM2B_PUBLIC_KEY_RSA;14511452// Table 159 - TPMI_RSA_KEY_BITS Type1453typedef TPM_KEY_BITS TPMI_RSA_KEY_BITS;14541455// Table 160 - TPM2B_PRIVATE_KEY_RSA Structure1456typedef struct {1457UINT16 size;1458BYTE buffer[MAX_RSA_KEY_BYTES/2];1459} TPM2B_PRIVATE_KEY_RSA;14601461// Table 161 - TPM2B_ECC_PARAMETER Structure1462typedef struct {1463UINT16 size;1464BYTE buffer[MAX_ECC_KEY_BYTES];1465} TPM2B_ECC_PARAMETER;14661467// Table 162 - TPMS_ECC_POINT Structure1468typedef struct {1469TPM2B_ECC_PARAMETER x;1470TPM2B_ECC_PARAMETER y;1471} TPMS_ECC_POINT;14721473// Table 163 -- TPM2B_ECC_POINT Structure <I/O>1474typedef struct {1475UINT16 size;1476TPMS_ECC_POINT point;1477} TPM2B_ECC_POINT;14781479// Table 164 - TPMI_ALG_ECC_SCHEME Type1480typedef TPM_ALG_ID TPMI_ALG_ECC_SCHEME;14811482// Table 165 - TPMI_ECC_CURVE Type1483typedef TPM_ECC_CURVE TPMI_ECC_CURVE;14841485// Table 166 - TPMT_ECC_SCHEME Structure1486typedef struct {1487TPMI_ALG_ECC_SCHEME scheme;1488TPMU_SIG_SCHEME details;1489} TPMT_ECC_SCHEME;14901491// Table 167 - TPMS_ALGORITHM_DETAIL_ECC Structure1492typedef struct {1493TPM_ECC_CURVE curveID;1494UINT16 keySize;1495TPMT_KDF_SCHEME kdf;1496TPMT_ECC_SCHEME sign;1497TPM2B_ECC_PARAMETER p;1498TPM2B_ECC_PARAMETER a;1499TPM2B_ECC_PARAMETER b;1500TPM2B_ECC_PARAMETER gX;1501TPM2B_ECC_PARAMETER gY;1502TPM2B_ECC_PARAMETER n;1503TPM2B_ECC_PARAMETER h;1504} TPMS_ALGORITHM_DETAIL_ECC;15051506// Table 168 - TPMS_SIGNATURE_RSASSA Structure1507typedef struct {1508TPMI_ALG_HASH hash;1509TPM2B_PUBLIC_KEY_RSA sig;1510} TPMS_SIGNATURE_RSASSA;15111512// Table 169 - TPMS_SIGNATURE_RSAPSS Structure1513typedef struct {1514TPMI_ALG_HASH hash;1515TPM2B_PUBLIC_KEY_RSA sig;1516} TPMS_SIGNATURE_RSAPSS;15171518// Table 170 - TPMS_SIGNATURE_ECDSA Structure1519typedef struct {1520TPMI_ALG_HASH hash;1521TPM2B_ECC_PARAMETER signatureR;1522TPM2B_ECC_PARAMETER signatureS;1523} TPMS_SIGNATURE_ECDSA;15241525// Table 171 - TPMU_SIGNATURE Union1526typedef union {1527TPMS_SIGNATURE_RSASSA rsassa;1528TPMS_SIGNATURE_RSAPSS rsapss;1529TPMS_SIGNATURE_ECDSA ecdsa;1530TPMS_SIGNATURE_ECDSA sm2;1531TPMS_SIGNATURE_ECDSA ecdaa;1532TPMS_SIGNATURE_ECDSA ecschnorr;1533TPMT_HA hmac;1534TPMS_SCHEME_SIGHASH any;1535} TPMU_SIGNATURE;15361537// Table 172 - TPMT_SIGNATURE Structure1538typedef struct {1539TPMI_ALG_SIG_SCHEME sigAlg;1540TPMU_SIGNATURE signature;1541} TPMT_SIGNATURE;15421543// Table 173 - TPMU_ENCRYPTED_SECRET Union1544typedef union {1545BYTE ecc[sizeof (TPMS_ECC_POINT)];1546BYTE rsa[MAX_RSA_KEY_BYTES];1547BYTE symmetric[sizeof (TPM2B_DIGEST)];1548BYTE keyedHash[sizeof (TPM2B_DIGEST)];1549} TPMU_ENCRYPTED_SECRET;15501551// Table 174 - TPM2B_ENCRYPTED_SECRET Structure1552typedef struct {1553UINT16 size;1554BYTE secret[sizeof (TPMU_ENCRYPTED_SECRET)];1555} TPM2B_ENCRYPTED_SECRET;15561557// 12 Key/Object Complex15581559// Table 175 - TPMI_ALG_PUBLIC Type1560typedef TPM_ALG_ID TPMI_ALG_PUBLIC;15611562// Table 176 - TPMU_PUBLIC_ID Union1563typedef union {1564TPM2B_DIGEST keyedHash;1565TPM2B_DIGEST sym;1566TPM2B_PUBLIC_KEY_RSA rsa;1567TPMS_ECC_POINT ecc;1568} TPMU_PUBLIC_ID;15691570// Table 177 - TPMS_KEYEDHASH_PARMS Structure1571typedef struct {1572TPMT_KEYEDHASH_SCHEME scheme;1573} TPMS_KEYEDHASH_PARMS;15741575// Table 178 - TPMS_ASYM_PARMS Structure1576typedef struct {1577TPMT_SYM_DEF_OBJECT symmetric;1578TPMT_ASYM_SCHEME scheme;1579} TPMS_ASYM_PARMS;15801581// Table 179 - TPMS_RSA_PARMS Structure1582typedef struct {1583TPMT_SYM_DEF_OBJECT symmetric;1584TPMT_RSA_SCHEME scheme;1585TPMI_RSA_KEY_BITS keyBits;1586UINT32 exponent;1587} TPMS_RSA_PARMS;15881589// Table 180 - TPMS_ECC_PARMS Structure1590typedef struct {1591TPMT_SYM_DEF_OBJECT symmetric;1592TPMT_ECC_SCHEME scheme;1593TPMI_ECC_CURVE curveID;1594TPMT_KDF_SCHEME kdf;1595} TPMS_ECC_PARMS;15961597// Table 181 - TPMU_PUBLIC_PARMS Union1598typedef union {1599TPMS_KEYEDHASH_PARMS keyedHashDetail;1600TPMT_SYM_DEF_OBJECT symDetail;1601TPMS_RSA_PARMS rsaDetail;1602TPMS_ECC_PARMS eccDetail;1603TPMS_ASYM_PARMS asymDetail;1604} TPMU_PUBLIC_PARMS;16051606// Table 182 - TPMT_PUBLIC_PARMS Structure1607typedef struct {1608TPMI_ALG_PUBLIC type;1609TPMU_PUBLIC_PARMS parameters;1610} TPMT_PUBLIC_PARMS;16111612// Table 183 - TPMT_PUBLIC Structure1613typedef struct {1614TPMI_ALG_PUBLIC type;1615TPMI_ALG_HASH nameAlg;1616TPMA_OBJECT objectAttributes;1617TPM2B_DIGEST authPolicy;1618TPMU_PUBLIC_PARMS parameters;1619TPMU_PUBLIC_ID unique;1620} TPMT_PUBLIC;16211622// Table 184 - TPM2B_PUBLIC Structure1623typedef struct {1624UINT16 size;1625TPMT_PUBLIC publicArea;1626} TPM2B_PUBLIC;16271628// Table 185 - TPM2B_PRIVATE_VENDOR_SPECIFIC Structure1629typedef struct {1630UINT16 size;1631BYTE buffer[PRIVATE_VENDOR_SPECIFIC_BYTES];1632} TPM2B_PRIVATE_VENDOR_SPECIFIC;16331634// Table 186 - TPMU_SENSITIVE_COMPOSITE Union1635typedef union {1636TPM2B_PRIVATE_KEY_RSA rsa;1637TPM2B_ECC_PARAMETER ecc;1638TPM2B_SENSITIVE_DATA bits;1639TPM2B_SYM_KEY sym;1640TPM2B_PRIVATE_VENDOR_SPECIFIC any;1641} TPMU_SENSITIVE_COMPOSITE;16421643// Table 187 - TPMT_SENSITIVE Structure1644typedef struct {1645TPMI_ALG_PUBLIC sensitiveType;1646TPM2B_AUTH authValue;1647TPM2B_DIGEST seedValue;1648TPMU_SENSITIVE_COMPOSITE sensitive;1649} TPMT_SENSITIVE;16501651// Table 188 - TPM2B_SENSITIVE Structure1652typedef struct {1653UINT16 size;1654TPMT_SENSITIVE sensitiveArea;1655} TPM2B_SENSITIVE;16561657// Table 189 - _PRIVATE Structure1658typedef struct {1659TPM2B_DIGEST integrityOuter;1660TPM2B_DIGEST integrityInner;1661TPMT_SENSITIVE sensitive;1662} _PRIVATE;16631664// Table 190 - TPM2B_PRIVATE Structure1665typedef struct {1666UINT16 size;1667BYTE buffer[sizeof (_PRIVATE)];1668} TPM2B_PRIVATE;16691670// Table 191 - _ID_OBJECT Structure1671typedef struct {1672TPM2B_DIGEST integrityHMAC;1673TPM2B_DIGEST encIdentity;1674} _ID_OBJECT;16751676// Table 192 - TPM2B_ID_OBJECT Structure1677typedef struct {1678UINT16 size;1679BYTE credential[sizeof (_ID_OBJECT)];1680} TPM2B_ID_OBJECT;16811682// 13 NV Storage Structures16831684// Table 193 - TPM_NV_INDEX Bits1685//1686// NOTE: Comment here to resolve conflict1687//1688// typedef struct {1689// UINT32 index : 22;1690// UINT32 space : 2;1691// UINT32 RH_NV : 8;1692// } TPM_NV_INDEX;16931694// Table 195 - TPMA_NV Bits1695typedef struct {1696UINT32 TPMA_NV_PPWRITE : 1;1697UINT32 TPMA_NV_OWNERWRITE : 1;1698UINT32 TPMA_NV_AUTHWRITE : 1;1699UINT32 TPMA_NV_POLICYWRITE : 1;1700UINT32 TPMA_NV_COUNTER : 1;1701UINT32 TPMA_NV_BITS : 1;1702UINT32 TPMA_NV_EXTEND : 1;1703UINT32 reserved7_9 : 3;1704UINT32 TPMA_NV_POLICY_DELETE : 1;1705UINT32 TPMA_NV_WRITELOCKED : 1;1706UINT32 TPMA_NV_WRITEALL : 1;1707UINT32 TPMA_NV_WRITEDEFINE : 1;1708UINT32 TPMA_NV_WRITE_STCLEAR : 1;1709UINT32 TPMA_NV_GLOBALLOCK : 1;1710UINT32 TPMA_NV_PPREAD : 1;1711UINT32 TPMA_NV_OWNERREAD : 1;1712UINT32 TPMA_NV_AUTHREAD : 1;1713UINT32 TPMA_NV_POLICYREAD : 1;1714UINT32 reserved20_24 : 5;1715UINT32 TPMA_NV_NO_DA : 1;1716UINT32 TPMA_NV_ORDERLY : 1;1717UINT32 TPMA_NV_CLEAR_STCLEAR : 1;1718UINT32 TPMA_NV_READLOCKED : 1;1719UINT32 TPMA_NV_WRITTEN : 1;1720UINT32 TPMA_NV_PLATFORMCREATE : 1;1721UINT32 TPMA_NV_READ_STCLEAR : 1;1722} TPMA_NV;17231724// Table 196 - TPMS_NV_PUBLIC Structure1725typedef struct {1726TPMI_RH_NV_INDEX nvIndex;1727TPMI_ALG_HASH nameAlg;1728TPMA_NV attributes;1729TPM2B_DIGEST authPolicy;1730UINT16 dataSize;1731} TPMS_NV_PUBLIC;17321733// Table 197 - TPM2B_NV_PUBLIC Structure1734typedef struct {1735UINT16 size;1736TPMS_NV_PUBLIC nvPublic;1737} TPM2B_NV_PUBLIC;17381739// 14 Context Data17401741// Table 198 - TPM2B_CONTEXT_SENSITIVE Structure1742typedef struct {1743UINT16 size;1744BYTE buffer[MAX_CONTEXT_SIZE];1745} TPM2B_CONTEXT_SENSITIVE;17461747// Table 199 - TPMS_CONTEXT_DATA Structure1748typedef struct {1749TPM2B_DIGEST integrity;1750TPM2B_CONTEXT_SENSITIVE encrypted;1751} TPMS_CONTEXT_DATA;17521753// Table 200 - TPM2B_CONTEXT_DATA Structure1754typedef struct {1755UINT16 size;1756BYTE buffer[sizeof (TPMS_CONTEXT_DATA)];1757} TPM2B_CONTEXT_DATA;17581759// Table 201 - TPMS_CONTEXT Structure1760typedef struct {1761UINT64 sequence;1762TPMI_DH_CONTEXT savedHandle;1763TPMI_RH_HIERARCHY hierarchy;1764TPM2B_CONTEXT_DATA contextBlob;1765} TPMS_CONTEXT;17661767// 15 Creation Data17681769// Table 203 - TPMS_CREATION_DATA Structure1770typedef struct {1771TPML_PCR_SELECTION pcrSelect;1772TPM2B_DIGEST pcrDigest;1773TPMA_LOCALITY locality;1774TPM_ALG_ID parentNameAlg;1775TPM2B_NAME parentName;1776TPM2B_NAME parentQualifiedName;1777TPM2B_DATA outsideInfo;1778} TPMS_CREATION_DATA;17791780// Table 204 - TPM2B_CREATION_DATA Structure1781typedef struct {1782UINT16 size;1783TPMS_CREATION_DATA creationData;1784} TPM2B_CREATION_DATA;17851786//1787// Command Header1788//1789typedef struct {1790TPM_ST tag;1791UINT32 paramSize;1792TPM_CC commandCode;1793} TPM2_COMMAND_HEADER;17941795typedef struct {1796TPM_ST tag;1797UINT32 paramSize;1798TPM_RC responseCode;1799} TPM2_RESPONSE_HEADER;18001801#pragma pack ()18021803//1804// TCG Algorithm Registry1805//1806#define HASH_ALG_SHA1 0x000000011807#define HASH_ALG_SHA256 0x000000021808#define HASH_ALG_SHA384 0x000000041809#define HASH_ALG_SHA512 0x000000081810#define HASH_ALG_SM3_256 0x0000001018111812#endif181318141815