]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Foundation/Include/IndustryStandard/Tpm12.h
EdkCompatibilityPkg: Remove EdkCompatibilityPkg
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Include / IndustryStandard / Tpm12.h
diff --git a/EdkCompatibilityPkg/Foundation/Include/IndustryStandard/Tpm12.h b/EdkCompatibilityPkg/Foundation/Include/IndustryStandard/Tpm12.h
deleted file mode 100644 (file)
index aa54b38..0000000
+++ /dev/null
@@ -1,1966 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:\r
-\r
-  Tpm12.h\r
-\r
-Abstract:\r
-\r
-  TPM Specification data structures (TCG TPM Specification Version 1.2 Revision 103)\r
-\r
-  See http://trustedcomputinggroup.org for latest specification updates\r
-\r
---*/\r
-\r
-#ifndef _TPM12_H_\r
-#define _TPM12_H_\r
-\r
-//\r
-// Structures are all packed on 1-byte alignment\r
-//\r
-\r
-#ifndef __GNUC__\r
-#pragma pack (push)\r
-#pragma pack (1)\r
-#endif\r
-\r
-//\r
-// Part 2, section 2.2: Basic types & Helper redefinitions\r
-//\r
-typedef UINT8                       TPM_AUTH_DATA_USAGE;\r
-typedef UINT8                       TPM_PAYLOAD_TYPE;\r
-typedef UINT8                       TPM_VERSION_BYTE;\r
-typedef UINT8                       TPM_DA_STATE;\r
-typedef UINT16                      TPM_TAG;\r
-typedef UINT16                      TPM_PROTOCOL_ID;\r
-typedef UINT16                      TPM_STARTUP_TYPE;\r
-typedef UINT16                      TPM_ENC_SCHEME;\r
-typedef UINT16                      TPM_SIG_SCHEME;\r
-typedef UINT16                      TPM_MIGRATE_SCHEME;\r
-typedef UINT16                      TPM_PHYSICAL_PRESENCE;\r
-typedef UINT16                      TPM_ENTITY_TYPE;\r
-typedef UINT16                      TPM_KEY_USAGE;\r
-typedef UINT16                      TPM_EK_TYPE;\r
-typedef UINT16                      TPM_STRUCTURE_TAG;\r
-typedef UINT16                      TPM_PLATFORM_SPECIFIC;\r
-typedef UINT32                      TPM_COMMAND_CODE;\r
-typedef UINT32                      TPM_CAPABILITY_AREA;\r
-typedef UINT32                      TPM_KEY_FLAGS;\r
-typedef UINT32                      TPM_ALGORITHM_ID;\r
-typedef UINT32                      TPM_MODIFIER_INDICATOR;\r
-typedef UINT32                      TPM_ACTUAL_COUNT;\r
-typedef UINT32                      TPM_TRANSPORT_ATTRIBUTES;\r
-typedef UINT32                      TPM_AUTHHANDLE;\r
-typedef UINT32                      TPM_DIRINDEX;\r
-typedef UINT32                      TPM_KEY_HANDLE;\r
-typedef UINT32                      TPM_PCRINDEX;\r
-typedef UINT32                      TPM_RESULT;\r
-typedef UINT32                      TPM_RESOURCE_TYPE;\r
-typedef UINT32                      TPM_KEY_CONTROL;\r
-typedef UINT32                      TPM_NV_INDEX;\r
-typedef UINT32                      TPM_FAMILY_ID;\r
-typedef UINT32                      TPM_FAMILY_VERIFICATION;\r
-typedef UINT32                      TPM_STARTUP_EFFECTS;\r
-typedef UINT32                      TPM_SYM_MODE;\r
-typedef UINT32                      TPM_FAMILY_FLAGS;\r
-typedef UINT32                      TPM_DELEGATE_INDEX;\r
-typedef UINT32                      TPM_CMK_DELEGATE;\r
-typedef UINT32                      TPM_COUNT_ID;\r
-typedef UINT32                      TPM_REDIT_COMMAND;\r
-typedef UINT32                      TPM_TRANSHANDLE;\r
-typedef UINT32                      TPM_HANDLE;\r
-typedef UINT32                      TPM_FAMILY_OPERATION;\r
-\r
-//\r
-// Part 2, section 2.2.4: Vendor specific\r
-// The following defines allow for the quick specification of a\r
-// vendor specific item.\r
-//\r
-#define TPM_Vendor_Specific32       ((UINT32) 0x00000400)\r
-#define TPM_Vendor_Specific8        ((UINT8) 0x80)\r
-\r
-//\r
-// Part 2, section 3.1: Structure TAGs\r
-//\r
-#define TPM_TAG_CONTEXTBLOB         ((TPM_STRUCTURE_TAG) 0x0001)\r
-#define TPM_TAG_CONTEXT_SENSITIVE   ((TPM_STRUCTURE_TAG) 0x0002)\r
-#define TPM_TAG_CONTEXTPOINTER      ((TPM_STRUCTURE_TAG) 0x0003)\r
-#define TPM_TAG_CONTEXTLIST         ((TPM_STRUCTURE_TAG) 0x0004)\r
-#define TPM_TAG_SIGNINFO            ((TPM_STRUCTURE_TAG) 0x0005)\r
-#define TPM_TAG_PCR_INFO_LONG       ((TPM_STRUCTURE_TAG) 0x0006)\r
-#define TPM_TAG_PERSISTENT_FLAGS    ((TPM_STRUCTURE_TAG) 0x0007)\r
-#define TPM_TAG_VOLATILE_FLAGS      ((TPM_STRUCTURE_TAG) 0x0008)\r
-#define TPM_TAG_PERSISTENT_DATA     ((TPM_STRUCTURE_TAG) 0x0009)\r
-#define TPM_TAG_VOLATILE_DATA       ((TPM_STRUCTURE_TAG) 0x000A)\r
-#define TPM_TAG_SV_DATA             ((TPM_STRUCTURE_TAG) 0x000B)\r
-#define TPM_TAG_EK_BLOB             ((TPM_STRUCTURE_TAG) 0x000C)\r
-#define TPM_TAG_EK_BLOB_AUTH        ((TPM_STRUCTURE_TAG) 0x000D)\r
-#define TPM_TAG_COUNTER_VALUE       ((TPM_STRUCTURE_TAG) 0x000E)\r
-#define TPM_TAG_TRANSPORT_INTERNAL  ((TPM_STRUCTURE_TAG) 0x000F)\r
-#define TPM_TAG_TRANSPORT_LOG_IN    ((TPM_STRUCTURE_TAG) 0x0010)\r
-#define TPM_TAG_TRANSPORT_LOG_OUT   ((TPM_STRUCTURE_TAG) 0x0011)\r
-#define TPM_TAG_AUDIT_EVENT_IN      ((TPM_STRUCTURE_TAG) 0x0012)\r
-#define TPM_TAG_AUDIT_EVENT_OUT     ((TPM_STRUCTURE_TAG) 0x0013)\r
-#define TPM_TAG_CURRENT_TICKS       ((TPM_STRUCTURE_TAG) 0x0014)\r
-#define TPM_TAG_KEY                 ((TPM_STRUCTURE_TAG) 0x0015)\r
-#define TPM_TAG_STORED_DATA12       ((TPM_STRUCTURE_TAG) 0x0016)\r
-#define TPM_TAG_NV_ATTRIBUTES       ((TPM_STRUCTURE_TAG) 0x0017)\r
-#define TPM_TAG_NV_DATA_PUBLIC      ((TPM_STRUCTURE_TAG) 0x0018)\r
-#define TPM_TAG_NV_DATA_SENSITIVE   ((TPM_STRUCTURE_TAG) 0x0019)\r
-#define TPM_TAG_DELEGATIONS         ((TPM_STRUCTURE_TAG) 0x001A)\r
-#define TPM_TAG_DELEGATE_PUBLIC     ((TPM_STRUCTURE_TAG) 0x001B)\r
-#define TPM_TAG_DELEGATE_TABLE_ROW  ((TPM_STRUCTURE_TAG) 0x001C)\r
-#define TPM_TAG_TRANSPORT_AUTH      ((TPM_STRUCTURE_TAG) 0x001D)\r
-#define TPM_TAG_TRANSPORT_PUBLIC    ((TPM_STRUCTURE_TAG) 0x001E)\r
-#define TPM_TAG_PERMANENT_FLAGS     ((TPM_STRUCTURE_TAG) 0x001F)\r
-#define TPM_TAG_STCLEAR_FLAGS       ((TPM_STRUCTURE_TAG) 0x0020)\r
-#define TPM_TAG_STANY_FLAGS         ((TPM_STRUCTURE_TAG) 0x0021)\r
-#define TPM_TAG_PERMANENT_DATA      ((TPM_STRUCTURE_TAG) 0x0022)\r
-#define TPM_TAG_STCLEAR_DATA        ((TPM_STRUCTURE_TAG) 0x0023)\r
-#define TPM_TAG_STANY_DATA          ((TPM_STRUCTURE_TAG) 0x0024)\r
-#define TPM_TAG_FAMILY_TABLE_ENTRY  ((TPM_STRUCTURE_TAG) 0x0025)\r
-#define TPM_TAG_DELEGATE_SENSITIVE  ((TPM_STRUCTURE_TAG) 0x0026)\r
-#define TPM_TAG_DELG_KEY_BLOB       ((TPM_STRUCTURE_TAG) 0x0027)\r
-#define TPM_TAG_KEY12               ((TPM_STRUCTURE_TAG) 0x0028)\r
-#define TPM_TAG_CERTIFY_INFO2       ((TPM_STRUCTURE_TAG) 0x0029)\r
-#define TPM_TAG_DELEGATE_OWNER_BLOB ((TPM_STRUCTURE_TAG) 0x002A)\r
-#define TPM_TAG_EK_BLOB_ACTIVATE    ((TPM_STRUCTURE_TAG) 0x002B)\r
-#define TPM_TAG_DAA_BLOB            ((TPM_STRUCTURE_TAG) 0x002C)\r
-#define TPM_TAG_DAA_CONTEXT         ((TPM_STRUCTURE_TAG) 0x002D)\r
-#define TPM_TAG_DAA_ENFORCE         ((TPM_STRUCTURE_TAG) 0x002E)\r
-#define TPM_TAG_DAA_ISSUER          ((TPM_STRUCTURE_TAG) 0x002F)\r
-#define TPM_TAG_CAP_VERSION_INFO    ((TPM_STRUCTURE_TAG) 0x0030)\r
-#define TPM_TAG_DAA_SENSITIVE       ((TPM_STRUCTURE_TAG) 0x0031)\r
-#define TPM_TAG_DAA_TPM             ((TPM_STRUCTURE_TAG) 0x0032)\r
-#define TPM_TAG_CMK_MIGAUTH         ((TPM_STRUCTURE_TAG) 0x0033)\r
-#define TPM_TAG_CMK_SIGTICKET       ((TPM_STRUCTURE_TAG) 0x0034)\r
-#define TPM_TAG_CMK_MA_APPROVAL     ((TPM_STRUCTURE_TAG) 0x0035)\r
-#define TPM_TAG_QUOTE_INFO2         ((TPM_STRUCTURE_TAG) 0x0036)\r
-#define TPM_TAG_DA_INFO             ((TPM_STRUCTURE_TAG) 0x0037)\r
-#define TPM_TAG_DA_LIMITED          ((TPM_STRUCTURE_TAG) 0x0038)\r
-#define TPM_TAG_DA_ACTION_TYPE      ((TPM_STRUCTURE_TAG) 0x0039)\r
-\r
-//\r
-// Part 2, section 4: TPM Types\r
-//\r
-\r
-//\r
-// Part 2, section 4.1: TPM_RESOURCE_TYPE\r
-//\r
-#define TPM_RT_KEY                  ((TPM_RESOURCE_TYPE) 0x00000001) // The handle is a key handle and is the result of a LoadKey type operation\r
-#define TPM_RT_AUTH                 ((TPM_RESOURCE_TYPE) 0x00000002) // The handle is an authorization handle. Auth handles come from TPM_OIAP, TPM_OSAP and TPM_DSAP\r
-#define TPM_RT_HASH                 ((TPM_RESOURCE_TYPE) 0x00000003) // Reserved for hashes\r
-#define TPM_RT_TRANS                ((TPM_RESOURCE_TYPE) 0x00000004) // The handle is for a transport session. Transport handles come from TPM_EstablishTransport\r
-#define TPM_RT_CONTEXT              ((TPM_RESOURCE_TYPE) 0x00000005) // Resource wrapped and held outside the TPM using the context save/restore commands\r
-#define TPM_RT_COUNTER              ((TPM_RESOURCE_TYPE) 0x00000006) // Reserved for counters\r
-#define TPM_RT_DELEGATE             ((TPM_RESOURCE_TYPE) 0x00000007) // The handle is for a delegate row. These are the internal rows held in NV storage by the TPM\r
-#define TPM_RT_DAA_TPM              ((TPM_RESOURCE_TYPE) 0x00000008) // The value is a DAA TPM specific blob\r
-#define TPM_RT_DAA_V0               ((TPM_RESOURCE_TYPE) 0x00000009) // The value is a DAA V0 parameter\r
-#define TPM_RT_DAA_V1               ((TPM_RESOURCE_TYPE) 0x0000000A) // The value is a DAA V1 parameter\r
-\r
-//\r
-// Part 2, section 4.2: TPM_PAYLOAD_TYPE\r
-//\r
-#define TPM_PT_ASYM                 ((TPM_PAYLOAD_TYPE) 0x01) // The entity is an asymmetric key\r
-#define TPM_PT_BIND                 ((TPM_PAYLOAD_TYPE) 0x02) // The entity is bound data\r
-#define TPM_PT_MIGRATE              ((TPM_PAYLOAD_TYPE) 0x03) // The entity is a migration blob\r
-#define TPM_PT_MAINT                ((TPM_PAYLOAD_TYPE) 0x04) // The entity is a maintenance blob\r
-#define TPM_PT_SEAL                 ((TPM_PAYLOAD_TYPE) 0x05) // The entity is sealed data\r
-#define TPM_PT_MIGRATE_RESTRICTED   ((TPM_PAYLOAD_TYPE) 0x06) // The entity is a restricted-migration asymmetric key\r
-#define TPM_PT_MIGRATE_EXTERNAL     ((TPM_PAYLOAD_TYPE) 0x07) // The entity is a external migratable key\r
-#define TPM_PT_CMK_MIGRATE          ((TPM_PAYLOAD_TYPE) 0x08) // The entity is a CMK migratable blob\r
-#define TPM_PT_VENDOR_SPECIFIC      ((TPM_PAYLOAD_TYPE) 0x80) // 0x80 - 0xFF Vendor specific payloads\r
-\r
-//\r
-// Part 2, section 4.3: TPM_ENTIRY_TYPE\r
-//\r
-#define TPM_ET_KEYHANDLE            ((UINT16) 0x0001) // The entity is a keyHandle or key\r
-#define TPM_ET_OWNER                ((UINT16) 0x0002) // The entity is the TPM Owner\r
-#define TPM_ET_DATA                 ((UINT16) 0x0003) // The entity is some data\r
-#define TPM_ET_SRK                  ((UINT16) 0x0004) // The entity is the SRK\r
-#define TPM_ET_KEY                  ((UINT16) 0x0005) // The entity is a key or keyHandle\r
-#define TPM_ET_REVOKE               ((UINT16) 0x0006) // The entity is the RevokeTrust value\r
-#define TPM_ET_DEL_OWNER_BLOB       ((UINT16) 0x0007) // The entity is a delegate owner blob\r
-#define TPM_ET_DEL_ROW              ((UINT16) 0x0008) // The entity is a delegate row\r
-#define TPM_ET_DEL_KEY_BLOB         ((UINT16) 0x0009) // The entity is a delegate key blob\r
-#define TPM_ET_COUNTER              ((UINT16) 0x000A) // The entity is a counter\r
-#define TPM_ET_NV                   ((UINT16) 0x000B) // The entity is a NV index\r
-#define TPM_ET_OPERATOR             ((UINT16) 0x000C) // The entity is the operator\r
-#define TPM_ET_RESERVED_HANDLE      ((UINT16) 0x0040) // Reserved. This value avoids collisions with the handle MSB setting.\r
-//\r
-// TPM_ENTITY_TYPE MSB Values: The MSB is used to indicate the ADIP encryption sheme when applicable\r
-//\r
-#define TPM_ET_XOR                  ((UINT16) 0x0000) // ADIP encryption scheme: XOR\r
-#define TPM_ET_AES128               ((UINT16) 0x0006) // ADIP encryption scheme: AES 128 bits\r
-\r
-//\r
-// Part 2, section 4.4.1: Reserved Key Handles\r
-//\r
-#define TPM_KH_SRK                  ((TPM_KEY_HANDLE) 0x40000000) // The handle points to the SRK\r
-#define TPM_KH_OWNER                ((TPM_KEY_HANDLE) 0x40000001) // The handle points to the TPM Owner\r
-#define TPM_KH_REVOKE               ((TPM_KEY_HANDLE) 0x40000002) // The handle points to the RevokeTrust value\r
-#define TPM_KH_TRANSPORT            ((TPM_KEY_HANDLE) 0x40000003) // The handle points to the EstablishTransport static authorization\r
-#define TPM_KH_OPERATOR             ((TPM_KEY_HANDLE) 0x40000004) // The handle points to the Operator auth\r
-#define TPM_KH_ADMIN                ((TPM_KEY_HANDLE) 0x40000005) // The handle points to the delegation administration auth\r
-#define TPM_KH_EK                   ((TPM_KEY_HANDLE) 0x40000006) // The handle points to the PUBEK, only usable with TPM_OwnerReadInternalPub\r
-\r
-//\r
-// Part 2, section 4.5: TPM_STARTUP_TYPE\r
-//\r
-#define TPM_ST_CLEAR                ((TPM_STARTUP_TYPE) 0x0001) // The TPM is starting up from a clean state\r
-#define TPM_ST_STATE                ((TPM_STARTUP_TYPE) 0x0002) // The TPM is starting up from a saved state\r
-#define TPM_ST_DEACTIVATED          ((TPM_STARTUP_TYPE) 0x0003) // The TPM is to startup and set the deactivated flag to TRUE\r
-\r
-//\r
-// Part 2, section 4.6: TPM_STATUP_EFFECTS\r
-// The table makeup is still an open issue.\r
-//\r
-\r
-//\r
-// Part 2, section 4.7: TPM_PROTOCOL_ID\r
-//\r
-#define TPM_PID_OIAP                ((TPM_PROTOCOL_ID) 0x0001) // The OIAP protocol.\r
-#define TPM_PID_OSAP                ((TPM_PROTOCOL_ID) 0x0002) // The OSAP protocol.\r
-#define TPM_PID_ADIP                ((TPM_PROTOCOL_ID) 0x0003) // The ADIP protocol.\r
-#define TPM_PID_ADCP                ((TPM_PROTOCOL_ID) 0x0004) // The ADCP protocol.\r
-#define TPM_PID_OWNER               ((TPM_PROTOCOL_ID) 0x0005) // The protocol for taking ownership of a TPM.\r
-#define TPM_PID_DSAP                ((TPM_PROTOCOL_ID) 0x0006) // The DSAP protocol\r
-#define TPM_PID_TRANSPORT           ((TPM_PROTOCOL_ID) 0x0007) // The transport protocol\r
-\r
-//\r
-// Part 2, section 4.8: TPM_ALGORITHM_ID\r
-//   The TPM MUST support the algorithms TPM_ALG_RSA, TPM_ALG_SHA, TPM_ALG_HMAC,\r
-//   TPM_ALG_MGF1\r
-//\r
-#define TPM_ALG_RSA                 ((TPM_ALGORITHM_ID) 0x00000001) // The RSA algorithm.\r
-#define TPM_ALG_DES                 ((TPM_ALGORITHM_ID) 0x00000002) // The DES algorithm\r
-#define TPM_ALG_3DES                ((TPM_ALGORITHM_ID) 0x00000003) // The 3DES algorithm in EDE mode\r
-#define TPM_ALG_SHA                 ((TPM_ALGORITHM_ID) 0x00000004) // The SHA1 algorithm\r
-#define TPM_ALG_HMAC                ((TPM_ALGORITHM_ID) 0x00000005) // The RFC 2104 HMAC algorithm\r
-#define TPM_ALG_AES128              ((TPM_ALGORITHM_ID) 0x00000006) // The AES algorithm, key size 128\r
-#define TPM_ALG_MGF1                ((TPM_ALGORITHM_ID) 0x00000007) // The XOR algorithm using MGF1 to create a string the size of the encrypted block\r
-#define TPM_ALG_AES192              ((TPM_ALGORITHM_ID) 0x00000008) // AES, key size 192\r
-#define TPM_ALG_AES256              ((TPM_ALGORITHM_ID) 0x00000009) // AES, key size 256\r
-#define TPM_ALG_XOR                 ((TPM_ALGORITHM_ID) 0x0000000A) // XOR using the rolling nonces\r
-\r
-//\r
-// Part 2, section 4.9: TPM_PHYSICAL_PRESENCE\r
-//\r
-#define TPM_PHYSICAL_PRESENCE_HW_DISABLE    ((TPM_PHYSICAL_PRESENCE) 0x0200) // Sets the physicalPresenceHWEnable to FALSE\r
-#define TPM_PHYSICAL_PRESENCE_CMD_DISABLE   ((TPM_PHYSICAL_PRESENCE) 0x0100) // Sets the physicalPresenceCMDEnable to FALSE\r
-#define TPM_PHYSICAL_PRESENCE_LIFETIME_LOCK ((TPM_PHYSICAL_PRESENCE) 0x0080) // Sets the physicalPresenceLifetimeLock to TRUE\r
-#define TPM_PHYSICAL_PRESENCE_HW_ENABLE     ((TPM_PHYSICAL_PRESENCE) 0x0040) // Sets the physicalPresenceHWEnable to TRUE\r
-#define TPM_PHYSICAL_PRESENCE_CMD_ENABLE    ((TPM_PHYSICAL_PRESENCE) 0x0020) // Sets the physicalPresenceCMDEnable to TRUE\r
-#define TPM_PHYSICAL_PRESENCE_NOTPRESENT    ((TPM_PHYSICAL_PRESENCE) 0x0010) // Sets PhysicalPresence = FALSE\r
-#define TPM_PHYSICAL_PRESENCE_PRESENT       ((TPM_PHYSICAL_PRESENCE) 0x0008) // Sets PhysicalPresence = TRUE\r
-#define TPM_PHYSICAL_PRESENCE_LOCK          ((TPM_PHYSICAL_PRESENCE) 0x0004) // Sets PhysicalPresenceLock = TRUE\r
-\r
-//\r
-// Part 2, section 4.10: TPM_MIGRATE_SCHEME\r
-//\r
-#define TPM_MS_MIGRATE                      ((TPM_MIGRATE_SCHEME) 0x0001) // A public key that can be used with all TPM migration commands other than 'ReWrap' mode.\r
-#define TPM_MS_REWRAP                       ((TPM_MIGRATE_SCHEME) 0x0002) // A public key that can be used for the ReWrap mode of TPM_CreateMigrationBlob.\r
-#define TPM_MS_MAINT                        ((TPM_MIGRATE_SCHEME) 0x0003) // A public key that can be used for the Maintenance commands\r
-#define TPM_MS_RESTRICT_MIGRATE             ((TPM_MIGRATE_SCHEME) 0x0004) // The key is to be migrated to a Migration Authority.\r
-#define TPM_MS_RESTRICT_APPROVE_DOUBLE      ((TPM_MIGRATE_SCHEME) 0x0005) // The key is to be migrated to an entity approved by a Migration Authority using double wrapping\r
-\r
-//\r
-// Part 2, section 4.11: TPM_EK_TYPE\r
-//\r
-#define TPM_EK_TYPE_ACTIVATE        ((TPM_EK_TYPE) 0x0001) // The blob MUST be TPM_EK_BLOB_ACTIVATE\r
-#define TPM_EK_TYPE_AUTH            ((TPM_EK_TYPE) 0x0002) // The blob MUST be TPM_EK_BLOB_AUTH\r
-\r
-//\r
-// Part 2, section 4.12: TPM_PLATFORM_SPECIFIC\r
-//\r
-#define TPM_PS_PC_11                ((TPM_PLATFORM_SPECIFIC) 0x0001) // PC Specific version 1.1\r
-#define TPM_PS_PC_12                ((TPM_PLATFORM_SPECIFIC) 0x0002) // PC Specific version 1.2\r
-#define TPM_PS_PDA_12               ((TPM_PLATFORM_SPECIFIC) 0x0003) // PDA Specific version 1.2\r
-#define TPM_PS_Server_12            ((TPM_PLATFORM_SPECIFIC) 0x0004) // Server Specific version 1.2\r
-#define TPM_PS_Mobile_12            ((TPM_PLATFORM_SPECIFIC) 0x0005) // Mobil Specific version 1.2\r
-\r
-//\r
-// Part 2, section 5: Basic Structures\r
-//\r
-\r
-//\r
-// Part 2, section 5.1: TPM_STRUCT_VER\r
-//\r
-typedef struct tdTPM_STRUCT_VER {\r
-  UINT8                             major;\r
-  UINT8                             minor;\r
-  UINT8                             revMajor;\r
-  UINT8                             revMinor;\r
-} TPM_STRUCT_VER;\r
-\r
-//\r
-// Part 2, section 5.3: TPM_VERSION\r
-//\r
-typedef struct tdTPM_VERSION {\r
-  TPM_VERSION_BYTE                  major;\r
-  TPM_VERSION_BYTE                  minor;\r
-  UINT8                             revMajor;\r
-  UINT8                             revMinor;\r
-} TPM_VERSION;\r
-\r
-//\r
-// Part 2, section 5.4: TPM_DIGEST\r
-//\r
-#define TPM_SHA1_160_HASH_LEN       0x14\r
-#define TPM_SHA1BASED_NONCE_LEN     TPM_SHA1_160_HASH_LEN\r
-\r
-typedef struct tdTPM_DIGEST{\r
-  UINT8                             digest[TPM_SHA1_160_HASH_LEN];\r
-} TPM_DIGEST;\r
-\r
-typedef TPM_DIGEST                  TPM_CHOSENID_HASH; // This SHALL be the digest of the chosen identityLabel and privacyCA for a new TPM identity.\r
-typedef TPM_DIGEST                  TPM_COMPOSITE_HASH; // This SHALL be the hash of a list of PCR indexes and PCR values that a key or data is bound to.\r
-typedef TPM_DIGEST                  TPM_DIRVALUE; // This SHALL be the value of a DIR register\r
-typedef TPM_DIGEST                  TPM_HMAC;\r
-typedef TPM_DIGEST                  TPM_PCRVALUE; // The value inside of the PCR\r
-typedef TPM_DIGEST                  TPM_AUDITDIGEST; // This SHALL be the value of the current internal audit state\r
-\r
-//\r
-// Part 2, section 5.5: TPM_NONCE\r
-//\r
-typedef struct tdTPM_NONCE{\r
-  UINT8                             nonce[20];\r
-} TPM_NONCE;\r
-\r
-typedef TPM_NONCE                  TPM_DAA_TPM_SEED; // This SHALL be a random value generated by a TPM immediately after the EK is installed in that TPM, whenever an EK is installed in that TPM\r
-typedef TPM_NONCE                  TPM_DAA_CONTEXT_SEED; // This SHALL be a random value\r
-\r
-//\r
-// Part 2, section 5.6: TPM_AUTHDATA\r
-//\r
-typedef UINT8                       tdTPM_AUTHDATA[20];\r
-typedef tdTPM_AUTHDATA              TPM_AUTHDATA;\r
-typedef TPM_AUTHDATA                TPM_SECRET;\r
-typedef TPM_AUTHDATA                TPM_ENCAUTH;\r
-\r
-//\r
-// Part 2, section 5.7: TPM_KEY_HANDLE_LIST\r
-// Size of handle is loaded * sizeof(TPM_KEY_HANDLE)\r
-//\r
-typedef struct tdTPM_KEY_HANDLE_LIST {\r
-  UINT16                            loaded;\r
-  TPM_KEY_HANDLE                    handle[1];\r
-} TPM_KEY_HANDLE_LIST;\r
-\r
-//\r
-// Part 2, section 5.8: TPM_KEY_USAGE values\r
-//\r
-\r
-#define TPM_KEY_SIGNING             ((UINT16) 0x0010)\r
-// TPM_KEY_SIGNING SHALL indicate a signing key. The [private] key SHALL be\r
-// used for signing operations, only. This means that it MUST be a leaf of the\r
-// Protected Storage key hierarchy.\r
-\r
-#define TPM_KEY_STORAGE             ((UINT16) 0x0011)\r
-// TPM_KEY_STORAGE SHALL indicate a storage key. The key SHALL be used to wrap\r
-// and unwrap other keys in the Protected Storage hierarchy\r
-\r
-#define TPM_KEY_IDENTITY            ((UINT16) 0x0012)\r
-// TPM_KEY_IDENTITY SHALL indicate an identity key. The key SHALL be used for\r
-// operations that require a TPM identity, only.\r
-\r
-#define TPM_KEY_AUTHCHANGE          ((UINT16) 0x0013)\r
-// TPM_KEY_AUTHCHANGE SHALL indicate an ephemeral key that is in use during\r
-// the ChangeAuthAsym process, only.\r
-\r
-#define TPM_KEY_BIND                ((UINT16) 0x0014)\r
-// TPM_KEY_BIND SHALL indicate a key that can be used for TPM_Bind and\r
-// TPM_Unbind operations only.\r
-\r
-#define TPM_KEY_LEGACY              ((UINT16) 0x0015)\r
-// TPM_KEY_LEGACY SHALL indicate a key that can perform signing and binding\r
-// operations. The key MAY be used for both signing and binding operations.\r
-// The TPM_KEY_LEGACY key type is to allow for use by applications where both\r
-// signing and encryption operations occur with the same key. The use of this\r
-// key type is not recommended TPM_KEY_MIGRATE 0x0016 This SHALL indicate a\r
-// key in use for TPM_MigrateKey\r
-\r
-#define TPM_KEY_MIGRATE             ((UINT16) 0x0016)\r
-// TPM_KEY_MIGRAGE SHALL indicate a key in use for TPM_MigrateKey\r
-\r
-//\r
-// Part 2, section 5.8.1: Encryption/Signature schemes\r
-//\r
-\r
-#define TPM_ES_NONE                 ((TPM_ENC_SCHEME) 0x0001)\r
-#define TPM_ES_RSAESPKCSv15         ((TPM_ENC_SCHEME) 0x0002)\r
-#define TPM_ES_RSAESOAEP_SHA1_MGF1  ((TPM_ENC_SCHEME) 0x0003)\r
-#define TPM_ES_SYM_CNT              ((TPM_ENC_SCHEME) 0x0004)  // rev94 defined\r
-#define TPM_ES_SYM_CTR              ((TPM_ENC_SCHEME) 0x0004)\r
-#define TPM_ES_SYM_OFB              ((TPM_ENC_SCHEME) 0x0005)\r
-\r
-#define TPM_SS_NONE                 ((TPM_SIG_SCHEME) 0x0001)\r
-#define TPM_SS_RSASSAPKCS1v15_SHA1  ((TPM_SIG_SCHEME) 0x0002)\r
-#define TPM_SS_RSASSAPKCS1v15_DER   ((TPM_SIG_SCHEME) 0x0003)\r
-#define TPM_SS_RSASSAPKCS1v15_INFO  ((TPM_SIG_SCHEME) 0x0004)\r
-\r
-//\r
-// Part 2, section 5.9: TPM_AUTH_DATA_USAGE values\r
-//\r
-#define TPM_AUTH_NEVER              ((TPM_AUTH_DATA_USAGE) 0x00)\r
-#define TPM_AUTH_ALWAYS             ((TPM_AUTH_DATA_USAGE) 0x01)\r
-#define TPM_AUTH_PRIV_USE_ONLY      ((TPM_AUTH_DATA_USAGE) 0x03)\r
-\r
-//\r
-// Part 2, section 5.10: TPM_KEY_FLAGS\r
-//\r
-enum tdTPM_KEY_FLAGS {\r
-  redirection                       = 0x00000001,\r
-  migratable                        = 0x00000002,\r
-  isVolatile                        = 0x00000004,\r
-  pcrIgnoredOnRead                  = 0x00000008,\r
-  migrateAuthority                  = 0x00000010\r
-};\r
-\r
-//\r
-// Part 2, section 5.11: TPM_CHANGEAUTH_VALIDATE\r
-//\r
-typedef struct tdTPM_CHANGEAUTH_VALIDATE {\r
-  TPM_SECRET                        newAuthSecret;\r
-  TPM_NONCE                         n1;\r
-} TPM_CHANGEAUTH_VALIDATE;\r
-\r
-//\r
-// Part 2, section 5.12: TPM_MIGRATIONKEYAUTH\r
-//   decalared after section 10 to catch declaration of TPM_PUBKEY\r
-//\r
-// Part 2 section 10.1: TPM_KEY_PARMS\r
-//   [size_is(parmSize)] BYTE* parms;\r
-//\r
-typedef struct tdTPM_KEY_PARMS {\r
-  TPM_ALGORITHM_ID                  algorithmID;\r
-  TPM_ENC_SCHEME                    encScheme;\r
-  TPM_SIG_SCHEME                    sigScheme;\r
-  UINT32                            parmSize;\r
-  UINT8                             *parms;\r
-} TPM_KEY_PARMS;\r
-\r
-//\r
-// Part 2, section 10.4: TPM_STORE_PUBKEY\r
-//\r
-typedef struct tdTPM_STORE_PUBKEY {\r
-  UINT32                            keyLength;\r
-  UINT8                             key[1];\r
-} TPM_STORE_PUBKEY;\r
-\r
-//\r
-// Part 2, section 10.5: TPM_PUBKEY\r
-//\r
-typedef struct tdTPM_PUBKEY{\r
-  TPM_KEY_PARMS                     algorithmParms;\r
-  TPM_STORE_PUBKEY                  pubKey;\r
-} TPM_PUBKEY;\r
-\r
-//\r
-// Part 2, section 5.12: TPM_MIGRATIONKEYAUTH\r
-//\r
-typedef struct tdTPM_MIGRATIONKEYAUTH{\r
-  TPM_PUBKEY                        migrationKey;\r
-  TPM_MIGRATE_SCHEME                migrationScheme;\r
-  TPM_DIGEST                        digest;\r
-} TPM_MIGRATIONKEYAUTH;\r
-\r
-//\r
-// Part 2, section 5.13: TPM_COUNTER_VALUE\r
-//\r
-typedef struct tdTPM_COUNTER_VALUE{\r
-  TPM_STRUCTURE_TAG                 tag;\r
-  UINT8                             label[4];\r
-  TPM_ACTUAL_COUNT                  counter;\r
-} TPM_COUNTER_VALUE;\r
-\r
-//\r
-// Part 2, section 5.14: TPM_SIGN_INFO\r
-//   Size of data indicated by dataLen\r
-//\r
-typedef struct tdTPM_SIGN_INFO {\r
-  TPM_STRUCTURE_TAG                 tag;\r
-  UINT8                             fixed[4];\r
-  TPM_NONCE                         replay;\r
-  UINT32                            dataLen;\r
-  UINT8                             *data;\r
-} TPM_SIGN_INFO;\r
-\r
-//\r
-// Part 2, section 5.15: TPM_MSA_COMPOSITE\r
-//   Number of migAuthDigest indicated by MSAlist\r
-//\r
-typedef struct tdTPM_MSA_COMPOSITE {\r
-  UINT32                            MSAlist;\r
-  TPM_DIGEST                        migAuthDigest[1];\r
-} TPM_MSA_COMPOSITE;\r
-\r
-//\r
-// Part 2, section 5.16: TPM_CMK_AUTH\r
-//\r
-typedef struct tdTPM_CMK_AUTH{\r
-  TPM_DIGEST                        migrationAuthorityDigest;\r
-  TPM_DIGEST                        destinationKeyDigest;\r
-  TPM_DIGEST                        sourceKeyDigest;\r
-} TPM_CMK_AUTH;\r
-\r
-//\r
-// Part 2, section 5.17: TPM_CMK_DELEGATE\r
-//\r
-#define TPM_CMK_DELEGATE_SIGNING    (((TPM_CMK_DELEGATE)1) << 31)\r
-#define TPM_CMK_DELEGATE_STORAGE    (((TPM_CMK_DELEGATE)1) << 30)\r
-#define TPM_CMK_DELEGATE_BIND       (((TPM_CMK_DELEGATE)1) << 29)\r
-#define TPM_CMK_DELEGATE_LEGACY     (((TPM_CMK_DELEGATE)1) << 28)\r
-#define TPM_CMK_DELEGATE_MIGRATE    (((TPM_CMK_DELEGATE)1) << 27)\r
-\r
-//\r
-// Part 2, section 5.18: TPM_SELECT_SIZE\r
-//\r
-typedef struct tdTPM_SELECT_SIZE {\r
-  UINT8                             major;\r
-  UINT8                             minor;\r
-  UINT16                            reqSize;\r
-} TPM_SELECT_SIZE;\r
-\r
-//\r
-// Part 2, section 5,19: TPM_CMK_MIGAUTH\r
-//\r
-typedef struct tdTPM_CMK_MIGAUTH{\r
-  TPM_STRUCTURE_TAG                 tag;\r
-  TPM_DIGEST                        msaDigest;\r
-  TPM_DIGEST                        pubKeyDigest;\r
-} TPM_CMK_MIGAUTH;\r
-\r
-//\r
-// Part 2, section 5.20: TPM_CMK_SIGTICKET\r
-//\r
-typedef struct tdTPM_CMK_SIGTICKET{\r
-  TPM_STRUCTURE_TAG                 tag;\r
-  TPM_DIGEST                        verKeyDigest;\r
-  TPM_DIGEST                        signedData;\r
-} TPM_CMK_SIGTICKET;\r
-\r
-//\r
-// Part 2, section 5.21: TPM_CMK_MA_APPROVAL\r
-//\r
-typedef struct tdTPM_CMK_MA_APPROVAL{\r
-  TPM_STRUCTURE_TAG                 tag;\r
-  TPM_DIGEST                        migrationAuthorityDigest;\r
-} TPM_CMK_MA_APPROVAL;\r
-\r
-//\r
-// Part 2, section 6: Command Tags\r
-//\r
-#define TPM_TAG_RQU_COMMAND         ((TPM_STRUCTURE_TAG) 0x00C1)\r
-#define TPM_TAG_RQU_AUTH1_COMMAND   ((TPM_STRUCTURE_TAG) 0x00C2)\r
-#define TPM_TAG_RQU_AUTH2_COMMAND   ((TPM_STRUCTURE_TAG) 0x00C3)\r
-#define TPM_TAG_RSP_COMMAND         ((TPM_STRUCTURE_TAG) 0x00C4)\r
-#define TPM_TAG_RSP_AUTH1_COMMAND   ((TPM_STRUCTURE_TAG) 0x00C5)\r
-#define TPM_TAG_RSP_AUTH2_COMMAND   ((TPM_STRUCTURE_TAG) 0x00C6)\r
-\r
-//\r
-// Part 2, section 7.1: TPM_PERMANENT_FLAGS\r
-//\r
-typedef struct tdTPM_PERMANENT_FLAGS{\r
-  TPM_STRUCTURE_TAG                 tag;\r
-  BOOLEAN                           disable;\r
-  BOOLEAN                           ownership;\r
-  BOOLEAN                           deactivated;\r
-  BOOLEAN                           readPubek;\r
-  BOOLEAN                           disableOwnerClear;\r
-  BOOLEAN                           allowMaintenance;\r
-  BOOLEAN                           physicalPresenceLifetimeLock;\r
-  BOOLEAN                           physicalPresenceHWEnable;\r
-  BOOLEAN                           physicalPresenceCMDEnable;\r
-  BOOLEAN                           CEKPUsed;\r
-  BOOLEAN                           TPMpost;\r
-  BOOLEAN                           TPMpostLock;\r
-  BOOLEAN                           FIPS;\r
-  BOOLEAN                           operator;\r
-  BOOLEAN                           enableRevokeEK;\r
-  BOOLEAN                           nvLocked;\r
-  BOOLEAN                           readSRKPub;\r
-  BOOLEAN                           tpmEstablished;\r
-  BOOLEAN                           maintenanceDone;\r
-  BOOLEAN                           disableFullDALogicInfo;\r
-} TPM_PERMANENT_FLAGS;\r
-\r
-//\r
-// Part 2, section 7.1.1: PERMANENT_FLAGS Subcap for SetCapability\r
-//\r
-#define TPM_PF_DISABLE                      ((TPM_CAPABILITY_AREA) 1)\r
-#define TPM_PF_OWNERSHIP                    ((TPM_CAPABILITY_AREA) 2)\r
-#define TPM_PF_DEACTIVATED                  ((TPM_CAPABILITY_AREA) 3)\r
-#define TPM_PF_READPUBEK                    ((TPM_CAPABILITY_AREA) 4)\r
-#define TPM_PF_DISABLEOWNERCLEAR            ((TPM_CAPABILITY_AREA) 5)\r
-#define TPM_PF_ALLOWMAINTENANCE             ((TPM_CAPABILITY_AREA) 6)\r
-#define TPM_PF_PHYSICALPRESENCELIFETIMELOCK ((TPM_CAPABILITY_AREA) 7)\r
-#define TPM_PF_PHYSICALPRESENCEHWENABLE     ((TPM_CAPABILITY_AREA) 8)\r
-#define TPM_PF_PHYSICALPRESENCECMDENABLE    ((TPM_CAPABILITY_AREA) 9)\r
-#define TPM_PF_CEKPUSED                     ((TPM_CAPABILITY_AREA) 10)\r
-#define TPM_PF_TPMPOST                      ((TPM_CAPABILITY_AREA) 11)\r
-#define TPM_PF_TPMPOSTLOCK                  ((TPM_CAPABILITY_AREA) 12)\r
-#define TPM_PF_FIPS                         ((TPM_CAPABILITY_AREA) 13)\r
-#define TPM_PF_OPERATOR                     ((TPM_CAPABILITY_AREA) 14)\r
-#define TPM_PF_ENABLEREVOKEEK               ((TPM_CAPABILITY_AREA) 15)\r
-#define TPM_PF_NV_LOCKED                    ((TPM_CAPABILITY_AREA) 16)\r
-#define TPM_PF_READSRKPUB                   ((TPM_CAPABILITY_AREA) 17)\r
-#define TPM_PF_TPMESTABLISHED               ((TPM_CAPABILITY_AREA) 18)\r
-#define TPM_PF_MAINTENANCEDONE              ((TPM_CAPABILITY_AREA) 19)\r
-#define TPM_PF_DISABLEFULLDALOGICINFO       ((TPM_CAPABILITY_AREA) 20)\r
-\r
-//\r
-// Part 2, section 7.2: TPM_STCLEAR_FLAGS\r
-//\r
-typedef struct tdTPM_STCLEAR_FLAGS{\r
-  TPM_STRUCTURE_TAG                 tag;\r
-  BOOLEAN                           deactivated;\r
-  BOOLEAN                           disableForceClear;\r
-  BOOLEAN                           physicalPresence;\r
-  BOOLEAN                           physicalPresenceLock;\r
-  BOOLEAN                           bGlobalLock;\r
-} TPM_STCLEAR_FLAGS;\r
-\r
-//\r
-// Part 2, section 7.2.1: STCLEAR_FLAGS Subcap for SetCapability\r
-//\r
-#define TPM_SF_DEACTIVATED          ((TPM_CAPABILITY_AREA) 1)\r
-#define TPM_SF_DISABLEFORCECLEAR    ((TPM_CAPABILITY_AREA) 2)\r
-#define TPM_SF_PHYSICALPRESENCE     ((TPM_CAPABILITY_AREA) 3)\r
-#define TPM_SF_PHYSICALPRESENCELOCK ((TPM_CAPABILITY_AREA) 4)\r
-#define TPM_SF_BGLOBALLOCK          ((TPM_CAPABILITY_AREA) 5)\r
-\r
-//\r
-// Part 2, section 7.3: TPM_STANY_FLAGS\r
-//\r
-typedef struct tdTPM_STANY_FLAGS{\r
-  TPM_STRUCTURE_TAG                 tag;\r
-  BOOLEAN                           postInitialise;\r
-  TPM_MODIFIER_INDICATOR            localityModifier;\r
-  BOOLEAN                           transportExclusive;\r
-  BOOLEAN                           TOSPresent;\r
-} TPM_STANY_FLAGS;\r
-\r
-//\r
-// Part 2, section 7.3.1: STANY_FLAGS Subcap for SetCapability\r
-//\r
-#define TPM_AF_POSTINITIALISE       ((TPM_CAPABILITY_AREA) 1)\r
-#define TPM_AF_LOCALITYMODIFIER     ((TPM_CAPABILITY_AREA) 2)\r
-#define TPM_AF_TRANSPORTEXCLUSIVE   ((TPM_CAPABILITY_AREA) 3)\r
-#define TPM_AF_TOSPRESENT           ((TPM_CAPABILITY_AREA) 4)\r
-\r
-//\r
-// All those structures (section 7.4, 7.5, 7.6) are not normative and \r
-// thus no definitions here\r
-//\r
-// Part 2, section 7.4: TPM_PERMANENT_DATA\r
-//\r
-#define TPM_MIN_COUNTERS            4   // the minimum number of counters is 4\r
-#define TPM_DELEGATE_KEY            TPM_KEY\r
-#define TPM_NUM_PCR                 16\r
-#define TPM_MAX_NV_WRITE_NOOWNER    64\r
-\r
-//typedef struct tdTPM_PERMANENT_DATA\r
-//{\r
-//    TPM_STRUCTURE_TAG               tag;\r
-//    UINT8                           revMajor;\r
-//    UINT8                           revMinor;\r
-//    TPM_NONCE                       tpmProof;\r
-//    TPM_NONCE                       ekReset;\r
-//    TPM_SECRET                      ownerAuth;\r
-//    TPM_SECRET                      operatorAuth;\r
-//    TPM_DIRVALUE                    authDIR[1];\r
-//    TPM_PUBKEY                      manuMaintPub;\r
-//    TPM_KEY                         endorsementKey;\r
-//    TPM_KEY                         srk;\r
-//    TPM_KEY                         contextKey;\r
-//    TPM_KEY                         delegateKey;\r
-//    TPM_COUNTER_VALUE               auditMonotonicCounter;\r
-//    TPM_COUNTER_VALUE               monitonicCounter[TPM_MIN_COUNTERS];\r
-//    TPM_PCR_ATTRIBUTES              pcrAttrib[TPM_NUM_PCR];\r
-//    UINT8                           ordinalAuditStatus[];\r
-//    UINT8                           *rngState;\r
-//    TPM_FAMILY_TABLE                familyTable;\r
-//    TPM_DELEGATE_TABLE              delegateTable;\r
-//    UINT32                          maxNVBufSize;\r
-//    UINT32                          lastFamilyID;\r
-//    UINT32                          noOwnerNVWrite;\r
-//    TPM_CMK_DELEGATE                restrictDelegate;\r
-//    TPM_DAA_TPM_SEED                tpmDAASeed;\r
-//    TPM_NONCE                       daaProff;\r
-//    TPM_KEY                         daaBlobKey;\r
-//} TPM_PERMANENT_DATA;\r
-\r
-//\r
-// Part 2, section 7.4.1: PERMANENT_DATA Subcap for SetCapability\r
-//\r
-#define TPM_PD_REVMAJOR               ((TPM_CAPABILITY_AREA) 1)\r
-#define TPM_PD_REVMINOR               ((TPM_CAPABILITY_AREA) 2)\r
-#define TPM_PD_TPMPROOF               ((TPM_CAPABILITY_AREA) 3)\r
-#define TPM_PD_OWNERAUTH              ((TPM_CAPABILITY_AREA) 4)\r
-#define TPM_PD_OPERATORAUTH           ((TPM_CAPABILITY_AREA) 5)\r
-#define TPM_PD_MANUMAINTPUB           ((TPM_CAPABILITY_AREA) 6)\r
-#define TPM_PD_ENDORSEMENTKEY         ((TPM_CAPABILITY_AREA) 7)\r
-#define TPM_PD_SRK                    ((TPM_CAPABILITY_AREA) 8)\r
-#define TPM_PD_DELEGATEKEY            ((TPM_CAPABILITY_AREA) 9)\r
-#define TPM_PD_CONTEXTKEY             ((TPM_CAPABILITY_AREA) 10)\r
-#define TPM_PD_AUDITMONOTONICCOUNTER  ((TPM_CAPABILITY_AREA) 11)\r
-#define TPM_PD_MONOTONICCOUNTER       ((TPM_CAPABILITY_AREA) 12)\r
-#define TPM_PD_PCRATTRIB              ((TPM_CAPABILITY_AREA) 13)\r
-#define TPM_PD_ORDINALAUDITSTATUS     ((TPM_CAPABILITY_AREA) 14)\r
-#define TPM_PD_AUTHDIR                ((TPM_CAPABILITY_AREA) 15)\r
-#define TPM_PD_RNGSTATE               ((TPM_CAPABILITY_AREA) 16)\r
-#define TPM_PD_FAMILYTABLE            ((TPM_CAPABILITY_AREA) 17)\r
-#define TPM_DELEGATETABLE             ((TPM_CAPABILITY_AREA) 18)\r
-#define TPM_PD_EKRESET                ((TPM_CAPABILITY_AREA) 19)\r
-#define TPM_PD_MAXNVBUFSIZE           ((TPM_CAPABILITY_AREA) 20)\r
-#define TPM_PD_LASTFAMILYID           ((TPM_CAPABILITY_AREA) 21)\r
-#define TPM_PD_NOOWNERNVWRITE         ((TPM_CAPABILITY_AREA) 22)\r
-#define TPM_PD_RESTRICTDELEGATE       ((TPM_CAPABILITY_AREA) 23)\r
-#define TPM_PD_TPMDAASEED             ((TPM_CAPABILITY_AREA) 24)\r
-#define TPM_PD_DAAPROOF               ((TPM_CAPABILITY_AREA) 25)\r
-\r
-//\r
-// Part 2, section 7.5: TPM_STCLEAR_DATA\r
-//   available inside TPM only\r
-//\r
- typedef struct tdTPM_STCLEAR_DATA{\r
-   TPM_STRUCTURE_TAG                  tag;\r
-   TPM_NONCE                          contextNonceKey;\r
-   TPM_COUNT_ID                       countID;\r
-   UINT32                             ownerReference;\r
-   BOOLEAN                            disableResetLock;\r
-   TPM_PCRVALUE                       PCR[TPM_NUM_PCR];\r
-   UINT32                             deferredPhysicalPresence;\r
- }TPM_STCLEAR_DATA;\r
-\r
-//\r
-// Part 2, section 7.5.1: STCLEAR_DATA Subcap for SetCapability\r
-//\r
-#define TPM_SD_CONTEXTNONCEKEY            ((TPM_CAPABILITY_AREA)0x00000001)\r
-#define TPM_SD_COUNTID                    ((TPM_CAPABILITY_AREA)0x00000002)\r
-#define TPM_SD_OWNERREFERENCE             ((TPM_CAPABILITY_AREA)0x00000003)\r
-#define TPM_SD_DISABLERESETLOCK           ((TPM_CAPABILITY_AREA)0x00000004)\r
-#define TPM_SD_PCR                        ((TPM_CAPABILITY_AREA)0x00000005)\r
-#define TPM_SD_DEFERREDPHYSICALPRESENCE   ((TPM_CAPABILITY_AREA)0x00000006)\r
-\r
-//\r
-// Part 2, section 7.6: TPM_STANY_DATA\r
-//   available inside TPM only\r
-//\r
-//typedef struct tdTPM_STANY_DATA\r
-//{\r
-//    TPM_STRUCTURE_TAG               tag;\r
-//    TPM_NONCE                       contextNonceSession;\r
-//    TPM_DIGEST                      auditDigest;\r
-//    TPM_CURRENT_TICKS               currentTicks;\r
-//    UINT32                          contextCount;\r
-//    UINT32                          contextList[TPM_MIN_SESSION_LIST];\r
-//    TPM_SESSION_DATA                sessions[TPM_MIN_SESSIONS];\r
-//} TPM_STANY_DATA;\r
-\r
-//\r
-// Part 2, section 7.6.1: STANY_DATA Subcap for SetCapability\r
-//\r
-#define TPM_AD_CONTEXTNONCESESSION        ((TPM_CAPABILITY_AREA) 1)\r
-#define TPM_AD_AUDITDIGEST                ((TPM_CAPABILITY_AREA) 2)\r
-#define TPM_AD_CURRENTTICKS               ((TPM_CAPABILITY_AREA) 3)\r
-#define TPM_AD_CONTEXTCOUNT               ((TPM_CAPABILITY_AREA) 4)\r
-#define TPM_AD_CONTEXTLIST                ((TPM_CAPABILITY_AREA) 5)\r
-#define TPM_AD_SESSIONS                   ((TPM_CAPABILITY_AREA) 6)\r
-\r
-//\r
-// Part 2, section 8: PCR Structures\r
-// \r
-\r
-//\r
-// Part 2, section 8.1: TPM_PCR_SELECTION\r
-//   Size of pcrSelect[] indicated by sizeOfSelect\r
-//\r
-typedef struct tdTPM_PCR_SELECTION {\r
-  UINT16                            sizeOfSelect;\r
-  UINT8                             pcrSelect[1];\r
-} TPM_PCR_SELECTION;\r
-\r
-//\r
-// Part 2, section 8.2: TPM_PCR_COMPOSITE\r
-//   Size of pcrValue[] indicated by valueSize\r
-//\r
-typedef struct tdTPM_PCR_COMPOSITE {\r
-  TPM_PCR_SELECTION                 select;\r
-  UINT32                            valueSize;\r
-  TPM_PCRVALUE                      pcrValue[1];\r
-} TPM_PCR_COMPOSITE;\r
-\r
-//\r
-// Part 2, section 8.3: TPM_PCR_INFO\r
-//\r
-typedef struct tdTPM_PCR_INFO {\r
-  TPM_PCR_SELECTION                 pcrSelection;\r
-  TPM_COMPOSITE_HASH                digestAtRelease;\r
-  TPM_COMPOSITE_HASH                digestAtCreation;\r
-} TPM_PCR_INFO;\r
-\r
-//\r
-// Part 2, section 8.6: TPM_LOCALITY_SELECTION\r
-//\r
-typedef UINT8                       TPM_LOCALITY_SELECTION;\r
-\r
-#define TPM_LOC_FOUR                ((UINT8) 0x10)\r
-#define TPM_LOC_THREE               ((UINT8) 0x08)\r
-#define TPM_LOC_TWO                 ((UINT8) 0x04)\r
-#define TPM_LOC_ONE                 ((UINT8) 0x02)\r
-#define TPM_LOC_ZERO                ((UINT8) 0x01)\r
-\r
-//\r
-// Part 2, section 8.4: TPM_PCR_INFO_LONG\r
-//\r
-typedef struct tdTPM_PCR_INFO_LONG {\r
-  TPM_STRUCTURE_TAG                 tag;\r
-  TPM_LOCALITY_SELECTION            localityAtCreation;\r
-  TPM_LOCALITY_SELECTION            localityAtRelease;\r
-  TPM_PCR_SELECTION                 creationPCRSelection;\r
-  TPM_PCR_SELECTION                 releasePCRSelection;\r
-  TPM_COMPOSITE_HASH                digestAtCreation;\r
-  TPM_COMPOSITE_HASH                digestAtRelease;\r
-} TPM_PCR_INFO_LONG;\r
-\r
-//\r
-// Part 2, section 8.5: TPM_PCR_INFO_SHORT\r
-//\r
-typedef struct tdTPM_PCR_INFO_SHORT{\r
-  TPM_PCR_SELECTION                 pcrSelection;\r
-  TPM_LOCALITY_SELECTION            localityAtRelease;\r
-  TPM_COMPOSITE_HASH                digestAtRelease;\r
-} TPM_PCR_INFO_SHORT;\r
-\r
-//\r
-// Part 2, section 8.8: TPM_PCR_ATTRIBUTES\r
-//\r
-typedef struct tdTPM_PCR_ATTRIBUTES{\r
-  BOOLEAN                           pcrReset;\r
-  TPM_LOCALITY_SELECTION            pcrExtendLocal;\r
-  TPM_LOCALITY_SELECTION            pcrResetLocal;\r
-} TPM_PCR_ATTRIBUTES;\r
-\r
-//\r
-// Part 2, section 9: Storage Structures\r
-//\r
-\r
-//\r
-// Part 2, section 9.1: TPM_STORED_DATA\r
-//   [size_is(sealInfoSize)] BYTE* sealInfo;\r
-//   [size_is(encDataSize)] BYTE* encData;\r
-//\r
-typedef struct tdTPM_STORED_DATA {\r
-  TPM_STRUCT_VER                    ver;\r
-  UINT32                            sealInfoSize;\r
-  UINT8                             *sealInfo;\r
-  UINT32                            encDataSize;\r
-  UINT8                             *encData;\r
-} TPM_STORED_DATA;\r
-\r
-//\r
-// Part 2, section 9.2: TPM_STORED_DATA12\r
-//   [size_is(sealInfoSize)] BYTE* sealInfo;\r
-//   [size_is(encDataSize)] BYTE* encData;\r
-//\r
-typedef struct tdTPM_STORED_DATA12 {\r
-  TPM_STRUCTURE_TAG                 tag;\r
-  TPM_ENTITY_TYPE                   et;\r
-  UINT32                            sealInfoSize;\r
-  UINT8                             *sealInfo;\r
-  UINT32                            encDataSize;\r
-  UINT8                             *encData;\r
-} TPM_STORED_DATA12;\r
-\r
-//\r
-// Part 2, section 9.3: TPM_SEALED_DATA\r
-//   [size_is(dataSize)] BYTE* data;\r
-//\r
-typedef struct tdTPM_SEALED_DATA {\r
-  TPM_PAYLOAD_TYPE                  payload;\r
-  TPM_SECRET                        authData;\r
-  TPM_NONCE                         tpmProof;\r
-  TPM_DIGEST                        storedDigest;\r
-  UINT32                            dataSize;\r
-  UINT8                             *data;\r
-} TPM_SEALED_DATA;\r
-\r
-//\r
-// Part 2, section 9.4: TPM_SYMMETRIC_KEY\r
-//   [size_is(size)] BYTE* data;\r
-//\r
-typedef struct tdTPM_SYMMETRIC_KEY {\r
-  TPM_ALGORITHM_ID                  algId;\r
-  TPM_ENC_SCHEME                    encScheme;\r
-  UINT16                            dataSize;\r
-  UINT8                             *data;\r
-} TPM_SYMMETRIC_KEY;\r
-\r
-//\r
-// Part 2, section 9.5: TPM_BOUND_DATA\r
-//\r
-typedef struct tdTPM_BOUND_DATA {\r
-  TPM_STRUCT_VER                    ver;\r
-  TPM_PAYLOAD_TYPE                  payload;\r
-  UINT8                             payloadData[1];\r
-} TPM_BOUND_DATA;\r
-\r
-//\r
-// Part 2 section 10: TPM_KEY complex\r
-// \r
-\r
-//\r
-// Part 2, section 10.2: TPM_KEY\r
-//   [size_is(encDataSize)] BYTE* encData;\r
-//\r
-typedef struct tdTPM_KEY{\r
-  TPM_STRUCT_VER                    ver;\r
-  TPM_KEY_USAGE                     keyUsage;\r
-  TPM_KEY_FLAGS                     keyFlags;\r
-  TPM_AUTH_DATA_USAGE               authDataUsage;\r
-  TPM_KEY_PARMS                     algorithmParms;\r
-  UINT32                            PCRInfoSize;\r
-  UINT8                             *PCRInfo;\r
-  TPM_STORE_PUBKEY                  pubKey;\r
-  UINT32                            encDataSize;\r
-  UINT8                             *encData;\r
-} TPM_KEY;\r
-\r
-//\r
-// Part 2, section 10.3: TPM_KEY12\r
-//   [size_is(encDataSize)] BYTE* encData;\r
-//\r
-typedef struct tdTPM_KEY12{\r
-  TPM_STRUCTURE_TAG                 tag;\r
-  UINT16                            fill;\r
-  TPM_KEY_USAGE                     keyUsage;\r
-  TPM_KEY_FLAGS                     keyFlags;\r
-  TPM_AUTH_DATA_USAGE               authDataUsage;\r
-  TPM_KEY_PARMS                     algorithmParms;\r
-  UINT32                            PCRInfoSize;\r
-  UINT8                             *PCRInfo;\r
-  TPM_STORE_PUBKEY                  pubKey;\r
-  UINT32                            encDataSize;\r
-  UINT8                             *encData;\r
-} TPM_KEY12;\r
-\r
-//\r
-// Part 2, section 10.7: TPM_STORE_PRIVKEY\r
-//   [size_is(keyLength)] BYTE* key;\r
-//\r
-typedef struct tdTPM_STORE_PRIVKEY {\r
-  UINT32                            keyLength;\r
-  UINT8                             *key;\r
-} TPM_STORE_PRIVKEY;\r
-\r
-//\r
-// Part 2, section 10.6: TPM_STORE_ASYMKEY\r
-//\r
-typedef struct tdTPM_STORE_ASYMKEY {                // pos len total\r
-  TPM_PAYLOAD_TYPE                  payload;        // 0    1   1\r
-  TPM_SECRET                        usageAuth;      // 1    20  21\r
-  TPM_SECRET                        migrationAuth;  // 21   20  41\r
-  TPM_DIGEST                        pubDataDigest;  // 41   20  61\r
-  TPM_STORE_PRIVKEY                 privKey;        // 61 132-151 193-214\r
-} TPM_STORE_ASYMKEY;\r
-\r
-//\r
-// Part 2, section 10.8: TPM_MIGRATE_ASYMKEY\r
-//   [size_is(partPrivKeyLen)] BYTE* partPrivKey;\r
-//\r
-typedef struct tdTPM_MIGRATE_ASYMKEY {              // pos  len  total\r
-  TPM_PAYLOAD_TYPE                  payload;        //   0    1       1\r
-  TPM_SECRET                        usageAuth;      //   1   20      21\r
-  TPM_DIGEST                        pubDataDigest;  //  21   20      41\r
-  UINT32                            partPrivKeyLen; //  41    4      45\r
-  UINT8                             *partPrivKey;   //  45 112-127 157-172\r
-} TPM_MIGRATE_ASYMKEY;\r
-\r
-//\r
-// Part 2, section 10.9: TPM_KEY_CONTROL\r
-//\r
-#define TPM_KEY_CONTROL_OWNER_EVICT ((UINT32) 0x00000001)\r
-\r
-//\r
-// Part 2, section 11: Signed Structures\r
-//\r
-\r
-typedef struct tdTPM_CERTIFY_INFO                           \r
-{\r
-    TPM_STRUCT_VER                  version;\r
-    TPM_KEY_USAGE                   keyUsage;\r
-    TPM_KEY_FLAGS                   keyFlags;\r
-    TPM_AUTH_DATA_USAGE             authDataUsage;\r
-    TPM_KEY_PARMS                   algorithmParms;\r
-    TPM_DIGEST                      pubkeyDigest;\r
-    TPM_NONCE                       data;\r
-    BOOLEAN                         parentPCRStatus;\r
-    UINT32                          PCRInfoSize;\r
-    UINT8                           *PCRInfo;\r
-} TPM_CERTIFY_INFO;\r
-\r
-typedef struct tdTPM_CERTIFY_INFO2\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    UINT8                           fill;\r
-    TPM_PAYLOAD_TYPE                payloadType;\r
-    TPM_KEY_USAGE                   keyUsage;\r
-    TPM_KEY_FLAGS                   keyFlags;\r
-    TPM_AUTH_DATA_USAGE             authDataUsage;\r
-    TPM_KEY_PARMS                   algorithmParms;\r
-    TPM_DIGEST                      pubkeyDigest;\r
-    TPM_NONCE                       data;\r
-    BOOLEAN                         parentPCRStatus;\r
-    UINT32                          PCRInfoSize;\r
-    UINT8                           *PCRInfo;\r
-    UINT32                          migrationAuthoritySize;\r
-    UINT8                           *migrationAuthority;\r
-} TPM_CERTIFY_INFO2;\r
-\r
-typedef struct tdTPM_QUOTE_INFO                            \r
-{\r
-    TPM_STRUCT_VER                  version;\r
-    UINT8                           fixed[4];\r
-    TPM_COMPOSITE_HASH              digestValue;\r
-    TPM_NONCE                       externalData;\r
-} TPM_QUOTE_INFO;\r
-\r
-typedef struct tdTPM_QUOTE_INFO2\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    UINT8                           fixed[4];\r
-    TPM_NONCE                       externalData;\r
-    TPM_PCR_INFO_SHORT              infoShort;\r
-} TPM_QUOTE_INFO2;\r
-\r
-//\r
-// Part 2, section 12: Identity Structures\r
-//\r
-\r
-typedef struct tdTPM_EK_BLOB\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_EK_TYPE                     ekType;\r
-    UINT32                          blobSize;\r
-    UINT8                           *blob;\r
-} TPM_EK_BLOB;\r
-\r
-typedef struct tdTPM_EK_BLOB_ACTIVATE\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_SYMMETRIC_KEY               sessionKey;\r
-    TPM_DIGEST                      idDigest;\r
-    TPM_PCR_INFO_SHORT              pcrInfo;\r
-} TPM_EK_BLOB_ACTIVATE;\r
-\r
-typedef struct tdTPM_EK_BLOB_AUTH\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_SECRET                      authValue;\r
-} TPM_EK_BLOB_AUTH;\r
-\r
-\r
-typedef struct tdTPM_IDENTITY_CONTENTS\r
-{\r
-    TPM_STRUCT_VER                  ver;\r
-    UINT32                          ordinal;\r
-    TPM_CHOSENID_HASH               labelPrivCADigest;\r
-    TPM_PUBKEY                      identityPubKey;\r
-} TPM_IDENTITY_CONTENTS;\r
-\r
-typedef struct tdTPM_IDENTITY_REQ                          \r
-{\r
-    UINT32                          asymSize;\r
-    UINT32                          symSize;\r
-    TPM_KEY_PARMS                   asymAlgorithm;\r
-    TPM_KEY_PARMS                   symAlgorithm;\r
-    UINT8                           *asymBlob;\r
-    UINT8                           *symBlob;\r
-} TPM_IDENTITY_REQ;\r
-\r
-typedef struct tdTPM_IDENTITY_PROOF                        \r
-{\r
-    TPM_STRUCT_VER                  ver;\r
-    UINT32                          labelSize;\r
-    UINT32                          identityBindingSize;\r
-    UINT32                          endorsementSize;\r
-    UINT32                          platformSize;\r
-    UINT32                          conformanceSize;\r
-    TPM_PUBKEY                      identityKey;\r
-    UINT8                           *labelArea;\r
-    UINT8                           *identityBinding;\r
-    UINT8                           *endorsementCredential;\r
-    UINT8                           *platformCredential;\r
-    UINT8                           *conformanceCredential;\r
-} TPM_IDENTITY_PROOF;\r
-\r
-typedef struct tdTPM_ASYM_CA_CONTENTS                      \r
-{\r
-    TPM_SYMMETRIC_KEY               sessionKey;\r
-    TPM_DIGEST                      idDigest;\r
-} TPM_ASYM_CA_CONTENTS;\r
-\r
-typedef struct tdTPM_SYM_CA_ATTESTATION\r
-{\r
-    UINT32                          credSize;\r
-    TPM_KEY_PARMS                   algorithm;\r
-    UINT8                           *credential;\r
-} TPM_SYM_CA_ATTESTATION;\r
-\r
-//\r
-// Part 2, section 15: TPM_CURRENT_TICKS\r
-//   Placed here out of order because definitions are used in section 13.\r
-//\r
-typedef struct tdTPM_CURRENT_TICKS {\r
-  TPM_STRUCTURE_TAG                 tag;\r
-  UINT64                            currentTicks;\r
-  UINT16                            tickRate;\r
-  TPM_NONCE                         tickNonce;\r
-} TPM_CURRENT_TICKS;\r
-\r
-//\r
-// Part 2, section 13: Transport structures\r
-//\r
-\r
-#define TPM_TRANSPORT_ENCRYPT       ((UINT32)0x00000001)\r
-#define TPM_TRANSPORT_LOG           ((UINT32)0x00000002)\r
-#define TPM_TRANSPORT_EXCLUSIVE     ((UINT32)0x00000004)\r
-\r
-typedef struct tdTPM_TRANSPORT_PUBLIC\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_TRANSPORT_ATTRIBUTES        transAttributes;\r
-    TPM_ALGORITHM_ID                algId;\r
-    TPM_ENC_SCHEME                  encScheme;\r
-} TPM_TRANSPORT_PUBLIC;\r
-\r
-typedef struct tdTPM_TRANSPORT_INTERNAL\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_AUTHDATA                    authData;\r
-    TPM_TRANSPORT_PUBLIC            transPublic;\r
-    TPM_TRANSHANDLE                 transHandle;\r
-    TPM_NONCE                       transNonceEven;\r
-    TPM_DIGEST                      transDigest;\r
-} TPM_TRANSPORT_INTERNAL;\r
-\r
-typedef struct tdTPM_TRANSPORT_LOG_IN\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_DIGEST                      parameters;\r
-    TPM_DIGEST                      pubKeyHash;\r
-} TPM_TRANSPORT_LOG_IN;\r
-\r
-typedef struct tdTPM_TRANSPORT_LOG_OUT\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_CURRENT_TICKS               currentTicks;\r
-    TPM_DIGEST                      parameters;\r
-    TPM_MODIFIER_INDICATOR          locality;\r
-} TPM_TRANSPORT_LOG_OUT;\r
-\r
-typedef struct tdTPM_TRANSPORT_AUTH\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_AUTHDATA                    authData;\r
-} TPM_TRANSPORT_AUTH;\r
-\r
-//\r
-// Part 2, section 14: Audit Structures\r
-//\r
-\r
-typedef struct tdTPM_AUDIT_EVENT_IN\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_DIGEST                      inputParms;\r
-    TPM_COUNTER_VALUE               auditCount;\r
-} TPM_AUDIT_EVENT_IN;\r
-\r
-typedef struct tdTPM_AUDIT_EVENT_OUT\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_COMMAND_CODE                ordinal;\r
-    TPM_DIGEST                      outputParms;\r
-    TPM_COUNTER_VALUE               auditCount;\r
-    TPM_RESULT                      returnCode;\r
-} TPM_AUDIT_EVENT_OUT;\r
-\r
-//\r
-// Part 2, section 16: Return Codes\r
-//\r
-#ifndef TPM_BASE\r
-#error "TPM Error Codes require definition of TPM_BASE"\r
-#endif\r
-\r
-#define TPM_VENDOR_ERROR            TPM_Vendor_Specific32\r
-#define TPM_NON_FATAL               0x00000800\r
-\r
-#define TPM_SUCCESS                 ((TPM_RESULT) TPM_BASE)\r
-#define TPM_AUTHFAIL                ((TPM_RESULT) (TPM_BASE + 1))\r
-#define TPM_BADINDEX                ((TPM_RESULT) (TPM_BASE + 2))\r
-#define TPM_BAD_PARAMETER           ((TPM_RESULT) (TPM_BASE + 3))\r
-#define TPM_AUDITFAILURE            ((TPM_RESULT) (TPM_BASE + 4))\r
-#define TPM_CLEAR_DISABLED          ((TPM_RESULT) (TPM_BASE + 5))\r
-#define TPM_DEACTIVATED             ((TPM_RESULT) (TPM_BASE + 6))\r
-#define TPM_DISABLED                ((TPM_RESULT) (TPM_BASE + 7))\r
-#define TPM_DISABLED_CMD            ((TPM_RESULT) (TPM_BASE + 8))\r
-#define TPM_FAIL                    ((TPM_RESULT) (TPM_BASE + 9))\r
-#define TPM_BAD_ORDINAL             ((TPM_RESULT) (TPM_BASE + 10))\r
-#define TPM_INSTALL_DISABLED        ((TPM_RESULT) (TPM_BASE + 11))\r
-#define TPM_INVALID_KEYHANDLE       ((TPM_RESULT) (TPM_BASE + 12))\r
-#define TPM_KEYNOTFOUND             ((TPM_RESULT) (TPM_BASE + 13))\r
-#define TPM_INAPPROPRIATE_ENC       ((TPM_RESULT) (TPM_BASE + 14))\r
-#define TPM_MIGRATEFAIL             ((TPM_RESULT) (TPM_BASE + 15))\r
-#define TPM_INVALID_PCR_INFO        ((TPM_RESULT) (TPM_BASE + 16))\r
-#define TPM_NOSPACE                 ((TPM_RESULT) (TPM_BASE + 17))\r
-#define TPM_NOSRK                   ((TPM_RESULT) (TPM_BASE + 18))\r
-#define TPM_NOTSEALED_BLOB          ((TPM_RESULT) (TPM_BASE + 19))\r
-#define TPM_OWNER_SET               ((TPM_RESULT) (TPM_BASE + 20))\r
-#define TPM_RESOURCES               ((TPM_RESULT) (TPM_BASE + 21))\r
-#define TPM_SHORTRANDOM             ((TPM_RESULT) (TPM_BASE + 22))\r
-#define TPM_SIZE                    ((TPM_RESULT) (TPM_BASE + 23))\r
-#define TPM_WRONGPCRVAL             ((TPM_RESULT) (TPM_BASE + 24))\r
-#define TPM_BAD_PARAM_SIZE          ((TPM_RESULT) (TPM_BASE + 25))\r
-#define TPM_SHA_THREAD              ((TPM_RESULT) (TPM_BASE + 26))\r
-#define TPM_SHA_ERROR               ((TPM_RESULT) (TPM_BASE + 27))\r
-#define TPM_FAILEDSELFTEST          ((TPM_RESULT) (TPM_BASE + 28))\r
-#define TPM_AUTH2FAIL               ((TPM_RESULT) (TPM_BASE + 29))\r
-#define TPM_BADTAG                  ((TPM_RESULT) (TPM_BASE + 30))\r
-#define TPM_IOERROR                 ((TPM_RESULT) (TPM_BASE + 31))\r
-#define TPM_ENCRYPT_ERROR           ((TPM_RESULT) (TPM_BASE + 32))\r
-#define TPM_DECRYPT_ERROR           ((TPM_RESULT) (TPM_BASE + 33))\r
-#define TPM_INVALID_AUTHHANDLE      ((TPM_RESULT) (TPM_BASE + 34))\r
-#define TPM_NO_ENDORSEMENT          ((TPM_RESULT) (TPM_BASE + 35))\r
-#define TPM_INVALID_KEYUSAGE        ((TPM_RESULT) (TPM_BASE + 36))\r
-#define TPM_WRONG_ENTITYTYPE        ((TPM_RESULT) (TPM_BASE + 37))\r
-#define TPM_INVALID_POSTINIT        ((TPM_RESULT) (TPM_BASE + 38))\r
-#define TPM_INAPPROPRIATE_SIG       ((TPM_RESULT) (TPM_BASE + 39))\r
-#define TPM_BAD_KEY_PROPERTY        ((TPM_RESULT) (TPM_BASE + 40))\r
-#define TPM_BAD_MIGRATION           ((TPM_RESULT) (TPM_BASE + 41))\r
-#define TPM_BAD_SCHEME              ((TPM_RESULT) (TPM_BASE + 42))\r
-#define TPM_BAD_DATASIZE            ((TPM_RESULT) (TPM_BASE + 43))\r
-#define TPM_BAD_MODE                ((TPM_RESULT) (TPM_BASE + 44))\r
-#define TPM_BAD_PRESENCE            ((TPM_RESULT) (TPM_BASE + 45))\r
-#define TPM_BAD_VERSION             ((TPM_RESULT) (TPM_BASE + 46))\r
-#define TPM_NO_WRAP_TRANSPORT       ((TPM_RESULT) (TPM_BASE + 47))\r
-#define TPM_AUDITFAIL_UNSUCCESSFUL  ((TPM_RESULT) (TPM_BASE + 48))\r
-#define TPM_AUDITFAIL_SUCCESSFUL    ((TPM_RESULT) (TPM_BASE + 49))\r
-#define TPM_NOTRESETABLE            ((TPM_RESULT) (TPM_BASE + 50))\r
-#define TPM_NOTLOCAL                ((TPM_RESULT) (TPM_BASE + 51))\r
-#define TPM_BAD_TYPE                ((TPM_RESULT) (TPM_BASE + 52))\r
-#define TPM_INVALID_RESOURCE        ((TPM_RESULT) (TPM_BASE + 53))\r
-#define TPM_NOTFIPS                 ((TPM_RESULT) (TPM_BASE + 54))\r
-#define TPM_INVALID_FAMILY          ((TPM_RESULT) (TPM_BASE + 55))\r
-#define TPM_NO_NV_PERMISSION        ((TPM_RESULT) (TPM_BASE + 56))\r
-#define TPM_REQUIRES_SIGN           ((TPM_RESULT) (TPM_BASE + 57))\r
-#define TPM_KEY_NOTSUPPORTED        ((TPM_RESULT) (TPM_BASE + 58))\r
-#define TPM_AUTH_CONFLICT           ((TPM_RESULT) (TPM_BASE + 59))\r
-#define TPM_AREA_LOCKED             ((TPM_RESULT) (TPM_BASE + 60))\r
-#define TPM_BAD_LOCALITY            ((TPM_RESULT) (TPM_BASE + 61))\r
-#define TPM_READ_ONLY               ((TPM_RESULT) (TPM_BASE + 62))\r
-#define TPM_PER_NOWRITE             ((TPM_RESULT) (TPM_BASE + 63))\r
-#define TPM_FAMILYCOUNT             ((TPM_RESULT) (TPM_BASE + 64))\r
-#define TPM_WRITE_LOCKED            ((TPM_RESULT) (TPM_BASE + 65))\r
-#define TPM_BAD_ATTRIBUTES          ((TPM_RESULT) (TPM_BASE + 66))\r
-#define TPM_INVALID_STRUCTURE       ((TPM_RESULT) (TPM_BASE + 67))\r
-#define TPM_KEY_OWNER_CONTROL       ((TPM_RESULT) (TPM_BASE + 68))\r
-#define TPM_BAD_COUNTER             ((TPM_RESULT) (TPM_BASE + 69))\r
-#define TPM_NOT_FULLWRITE           ((TPM_RESULT) (TPM_BASE + 70))\r
-#define TPM_CONTEXT_GAP             ((TPM_RESULT) (TPM_BASE + 71))\r
-#define TPM_MAXNVWRITES             ((TPM_RESULT) (TPM_BASE + 72))\r
-#define TPM_NOOPERATOR              ((TPM_RESULT) (TPM_BASE + 73))\r
-#define TPM_RESOURCEMISSING         ((TPM_RESULT) (TPM_BASE + 74))\r
-#define TPM_DELEGATE_LOCK           ((TPM_RESULT) (TPM_BASE + 75))\r
-#define TPM_DELEGATE_FAMILY         ((TPM_RESULT) (TPM_BASE + 76))\r
-#define TPM_DELEGATE_ADMIN          ((TPM_RESULT) (TPM_BASE + 77))\r
-#define TPM_TRANSPORT_NOTEXCLUSIVE  ((TPM_RESULT) (TPM_BASE + 78))\r
-#define TPM_OWNER_CONTROL           ((TPM_RESULT) (TPM_BASE + 79))\r
-#define TPM_DAA_RESOURCES           ((TPM_RESULT) (TPM_BASE + 80))\r
-#define TPM_DAA_INPUT_DATA0         ((TPM_RESULT) (TPM_BASE + 81))\r
-#define TPM_DAA_INPUT_DATA1         ((TPM_RESULT) (TPM_BASE + 82))\r
-#define TPM_DAA_ISSUER_SETTINGS     ((TPM_RESULT) (TPM_BASE + 83))\r
-#define TPM_DAA_TPM_SETTINGS        ((TPM_RESULT) (TPM_BASE + 84))\r
-#define TPM_DAA_STAGE               ((TPM_RESULT) (TPM_BASE + 85))\r
-#define TPM_DAA_ISSUER_VALIDITY     ((TPM_RESULT) (TPM_BASE + 86))\r
-#define TPM_DAA_WRONG_W             ((TPM_RESULT) (TPM_BASE + 87))\r
-#define TPM_BAD_HANDLE              ((TPM_RESULT) (TPM_BASE + 88))\r
-#define TPM_BAD_DELEGATE            ((TPM_RESULT) (TPM_BASE + 89))\r
-#define TPM_BADCONTEXT              ((TPM_RESULT) (TPM_BASE + 90))\r
-#define TPM_TOOMANYCONTEXTS         ((TPM_RESULT) (TPM_BASE + 91))\r
-#define TPM_MA_TICKET_SIGNATURE     ((TPM_RESULT) (TPM_BASE + 92))\r
-#define TPM_MA_DESTINATION          ((TPM_RESULT) (TPM_BASE + 93))\r
-#define TPM_MA_SOURCE               ((TPM_RESULT) (TPM_BASE + 94))\r
-#define TPM_MA_AUTHORITY            ((TPM_RESULT) (TPM_BASE + 95))\r
-#define TPM_PERMANENTEK             ((TPM_RESULT) (TPM_BASE + 97))\r
-#define TPM_BAD_SIGNATURE           ((TPM_RESULT) (TPM_BASE + 98))\r
-#define TPM_NOCONTEXTSPACE          ((TPM_RESULT) (TPM_BASE + 99))\r
-\r
-#define TPM_RETRY                   ((TPM_RESULT) (TPM_BASE + TPM_NON_FATAL))\r
-#define TPM_NEEDS_SELFTEST          ((TPM_RESULT) (TPM_BASE + TPM_NON_FATAL + 1))\r
-#define TPM_DOING_SELFTEST          ((TPM_RESULT) (TPM_BASE + TPM_NON_FATAL + 2))\r
-#define TPM_DEFEND_LOCK_RUNNING     ((TPM_RESULT) (TPM_BASE + TPM_NON_FATAL + 3))\r
-\r
-//\r
-// Part 2, section 17: Ordinals\r
-//\r
-// Ordinals are 32 bit values. The upper byte contains values that serve as\r
-// flag indicators, the next byte contains values indicating what committee\r
-// designated the ordinal, and the final two bytes contain the Command\r
-// Ordinal Index.\r
-//      3                   2                   1\r
-//    1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0\r
-//   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r
-//   |P|C|V| Reserved| Purview |     Command Ordinal Index           |\r
-//   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r
-//\r
-//  Where:\r
-//\r
-//    * P is Protected/Unprotected command. When 0 the command is a Protected\r
-//      command, when 1 the command is an Unprotected command.\r
-//\r
-//    * C is Non-Connection/Connection related command. When 0 this command\r
-//      passes through to either the protected (TPM) or unprotected (TSS)\r
-//      components.\r
-//\r
-//    * V is TPM/Vendor command. When 0 the command is TPM defined, when 1 the\r
-//      command is vendor defined.\r
-//\r
-//    * All reserved area bits are set to 0.\r
-//\r
-\r
-#define TPM_ORD_ActivateIdentity                  ((TPM_COMMAND_CODE) 0x0000007A)\r
-#define TPM_ORD_AuthorizeMigrationKey             ((TPM_COMMAND_CODE) 0x0000002B)\r
-#define TPM_ORD_CertifyKey                        ((TPM_COMMAND_CODE) 0x00000032)\r
-#define TPM_ORD_CertifyKey2                       ((TPM_COMMAND_CODE) 0x00000033)\r
-#define TPM_ORD_CertifySelfTest                   ((TPM_COMMAND_CODE) 0x00000052)\r
-#define TPM_ORD_ChangeAuth                        ((TPM_COMMAND_CODE) 0x0000000C)\r
-#define TPM_ORD_ChangeAuthAsymFinish              ((TPM_COMMAND_CODE) 0x0000000F)\r
-#define TPM_ORD_ChangeAuthAsymStart               ((TPM_COMMAND_CODE) 0x0000000E)\r
-#define TPM_ORD_ChangeAuthOwner                   ((TPM_COMMAND_CODE) 0x00000010)\r
-#define TPM_ORD_CMK_ApproveMA                     ((TPM_COMMAND_CODE) 0x0000001D)\r
-#define TPM_ORD_CMK_ConvertMigration              ((TPM_COMMAND_CODE) 0x00000024)\r
-#define TPM_ORD_CMK_CreateBlob                    ((TPM_COMMAND_CODE) 0x0000001B)\r
-#define TPM_ORD_CMK_CreateKey                     ((TPM_COMMAND_CODE) 0x00000013)\r
-#define TPM_ORD_CMK_CreateTicket                  ((TPM_COMMAND_CODE) 0x00000012)\r
-#define TPM_ORD_CMK_SetRestrictions               ((TPM_COMMAND_CODE) 0x0000001C)\r
-#define TPM_ORD_ContinueSelfTest                  ((TPM_COMMAND_CODE) 0x00000053)\r
-#define TPM_ORD_ConvertMigrationBlob              ((TPM_COMMAND_CODE) 0x0000002A)\r
-#define TPM_ORD_CreateCounter                     ((TPM_COMMAND_CODE) 0x000000DC)\r
-#define TPM_ORD_CreateEndorsementKeyPair          ((TPM_COMMAND_CODE) 0x00000078)\r
-#define TPM_ORD_CreateMaintenanceArchive          ((TPM_COMMAND_CODE) 0x0000002C)\r
-#define TPM_ORD_CreateMigrationBlob               ((TPM_COMMAND_CODE) 0x00000028)\r
-#define TPM_ORD_CreateRevocableEK                 ((TPM_COMMAND_CODE) 0x0000007F)\r
-#define TPM_ORD_CreateWrapKey                     ((TPM_COMMAND_CODE) 0x0000001F)\r
-#define TPM_ORD_DAA_JOIN                          ((TPM_COMMAND_CODE) 0x00000029)\r
-#define TPM_ORD_DAA_SIGN                          ((TPM_COMMAND_CODE) 0x00000031)\r
-#define TPM_ORD_Delegate_CreateKeyDelegation      ((TPM_COMMAND_CODE) 0x000000D4)\r
-#define TPM_ORD_Delegate_CreateOwnerDelegation    ((TPM_COMMAND_CODE) 0x000000D5)\r
-#define TPM_ORD_Delegate_LoadOwnerDelegation      ((TPM_COMMAND_CODE) 0x000000D8)\r
-#define TPM_ORD_Delegate_Manage                   ((TPM_COMMAND_CODE) 0x000000D2)\r
-#define TPM_ORD_Delegate_ReadTable                ((TPM_COMMAND_CODE) 0x000000DB)\r
-#define TPM_ORD_Delegate_UpdateVerification       ((TPM_COMMAND_CODE) 0x000000D1)\r
-#define TPM_ORD_Delegate_VerifyDelegation         ((TPM_COMMAND_CODE) 0x000000D6)\r
-#define TPM_ORD_DirRead                           ((TPM_COMMAND_CODE) 0x0000001A)\r
-#define TPM_ORD_DirWriteAuth                      ((TPM_COMMAND_CODE) 0x00000019)\r
-#define TPM_ORD_DisableForceClear                 ((TPM_COMMAND_CODE) 0x0000005E)\r
-#define TPM_ORD_DisableOwnerClear                 ((TPM_COMMAND_CODE) 0x0000005C)\r
-#define TPM_ORD_DisablePubekRead                  ((TPM_COMMAND_CODE) 0x0000007E)\r
-#define TPM_ORD_DSAP                              ((TPM_COMMAND_CODE) 0x00000011)\r
-#define TPM_ORD_EstablishTransport                ((TPM_COMMAND_CODE) 0x000000E6)\r
-#define TPM_ORD_EvictKey                          ((TPM_COMMAND_CODE) 0x00000022)\r
-#define TPM_ORD_ExecuteTransport                  ((TPM_COMMAND_CODE) 0x000000E7)\r
-#define TPM_ORD_Extend                            ((TPM_COMMAND_CODE) 0x00000014)\r
-#define TPM_ORD_FieldUpgrade                      ((TPM_COMMAND_CODE) 0x000000AA)\r
-#define TPM_ORD_FlushSpecific                     ((TPM_COMMAND_CODE) 0x000000BA)\r
-#define TPM_ORD_ForceClear                        ((TPM_COMMAND_CODE) 0x0000005D)\r
-#define TPM_ORD_GetAuditDigest                    ((TPM_COMMAND_CODE) 0x00000085)\r
-#define TPM_ORD_GetAuditDigestSigned              ((TPM_COMMAND_CODE) 0x00000086)\r
-#define TPM_ORD_GetAuditEvent                     ((TPM_COMMAND_CODE) 0x00000082)\r
-#define TPM_ORD_GetAuditEventSigned               ((TPM_COMMAND_CODE) 0x00000083)\r
-#define TPM_ORD_GetCapability                     ((TPM_COMMAND_CODE) 0x00000065)\r
-#define TPM_ORD_GetCapabilityOwner                ((TPM_COMMAND_CODE) 0x00000066)\r
-#define TPM_ORD_GetCapabilitySigned               ((TPM_COMMAND_CODE) 0x00000064)\r
-#define TPM_ORD_GetOrdinalAuditStatus             ((TPM_COMMAND_CODE) 0x0000008C)\r
-#define TPM_ORD_GetPubKey                         ((TPM_COMMAND_CODE) 0x00000021)\r
-#define TPM_ORD_GetRandom                         ((TPM_COMMAND_CODE) 0x00000046)\r
-#define TPM_ORD_GetTestResult                     ((TPM_COMMAND_CODE) 0x00000054)\r
-#define TPM_ORD_GetTicks                          ((TPM_COMMAND_CODE) 0x000000F1)\r
-#define TPM_ORD_IncrementCounter                  ((TPM_COMMAND_CODE) 0x000000DD)\r
-#define TPM_ORD_Init                              ((TPM_COMMAND_CODE) 0x00000097)\r
-#define TPM_ORD_KeyControlOwner                   ((TPM_COMMAND_CODE) 0x00000023)\r
-#define TPM_ORD_KillMaintenanceFeature            ((TPM_COMMAND_CODE) 0x0000002E)\r
-#define TPM_ORD_LoadAuthContext                   ((TPM_COMMAND_CODE) 0x000000B7)\r
-#define TPM_ORD_LoadContext                       ((TPM_COMMAND_CODE) 0x000000B9)\r
-#define TPM_ORD_LoadKey                           ((TPM_COMMAND_CODE) 0x00000020)\r
-#define TPM_ORD_LoadKey2                          ((TPM_COMMAND_CODE) 0x00000041)\r
-#define TPM_ORD_LoadKeyContext                    ((TPM_COMMAND_CODE) 0x000000B5)\r
-#define TPM_ORD_LoadMaintenanceArchive            ((TPM_COMMAND_CODE) 0x0000002D)\r
-#define TPM_ORD_LoadManuMaintPub                  ((TPM_COMMAND_CODE) 0x0000002F)\r
-#define TPM_ORD_MakeIdentity                      ((TPM_COMMAND_CODE) 0x00000079)\r
-#define TPM_ORD_MigrateKey                        ((TPM_COMMAND_CODE) 0x00000025)\r
-#define TPM_ORD_NV_DefineSpace                    ((TPM_COMMAND_CODE) 0x000000CC)\r
-#define TPM_ORD_NV_ReadValue                      ((TPM_COMMAND_CODE) 0x000000CF)\r
-#define TPM_ORD_NV_ReadValueAuth                  ((TPM_COMMAND_CODE) 0x000000D0)\r
-#define TPM_ORD_NV_WriteValue                     ((TPM_COMMAND_CODE) 0x000000CD)\r
-#define TPM_ORD_NV_WriteValueAuth                 ((TPM_COMMAND_CODE) 0x000000CE)\r
-#define TPM_ORD_OIAP                              ((TPM_COMMAND_CODE) 0x0000000A)\r
-#define TPM_ORD_OSAP                              ((TPM_COMMAND_CODE) 0x0000000B)\r
-#define TPM_ORD_OwnerClear                        ((TPM_COMMAND_CODE) 0x0000005B)\r
-#define TPM_ORD_OwnerReadInternalPub              ((TPM_COMMAND_CODE) 0x00000081)\r
-#define TPM_ORD_OwnerReadPubek                    ((TPM_COMMAND_CODE) 0x0000007D)\r
-#define TPM_ORD_OwnerSetDisable                   ((TPM_COMMAND_CODE) 0x0000006E)\r
-#define TPM_ORD_PCR_Reset                         ((TPM_COMMAND_CODE) 0x000000C8)\r
-#define TPM_ORD_PcrRead                           ((TPM_COMMAND_CODE) 0x00000015)\r
-#define TPM_ORD_PhysicalDisable                   ((TPM_COMMAND_CODE) 0x00000070)\r
-#define TPM_ORD_PhysicalEnable                    ((TPM_COMMAND_CODE) 0x0000006F)\r
-#define TPM_ORD_PhysicalSetDeactivated            ((TPM_COMMAND_CODE) 0x00000072)\r
-#define TPM_ORD_Quote                             ((TPM_COMMAND_CODE) 0x00000016)\r
-#define TPM_ORD_Quote2                            ((TPM_COMMAND_CODE) 0x0000003E)\r
-#define TPM_ORD_ReadCounter                       ((TPM_COMMAND_CODE) 0x000000DE)\r
-#define TPM_ORD_ReadManuMaintPub                  ((TPM_COMMAND_CODE) 0x00000030)\r
-#define TPM_ORD_ReadPubek                         ((TPM_COMMAND_CODE) 0x0000007C)\r
-#define TPM_ORD_ReleaseCounter                    ((TPM_COMMAND_CODE) 0x000000DF)\r
-#define TPM_ORD_ReleaseCounterOwner               ((TPM_COMMAND_CODE) 0x000000E0)\r
-#define TPM_ORD_ReleaseTransportSigned            ((TPM_COMMAND_CODE) 0x000000E8)\r
-#define TPM_ORD_Reset                             ((TPM_COMMAND_CODE) 0x0000005A)\r
-#define TPM_ORD_ResetLockValue                    ((TPM_COMMAND_CODE) 0x00000040)\r
-#define TPM_ORD_RevokeTrust                       ((TPM_COMMAND_CODE) 0x00000080)\r
-#define TPM_ORD_SaveAuthContext                   ((TPM_COMMAND_CODE) 0x000000B6)\r
-#define TPM_ORD_SaveContext                       ((TPM_COMMAND_CODE) 0x000000B8)\r
-#define TPM_ORD_SaveKeyContext                    ((TPM_COMMAND_CODE) 0x000000B4)\r
-#define TPM_ORD_SaveState                         ((TPM_COMMAND_CODE) 0x00000098)\r
-#define TPM_ORD_Seal                              ((TPM_COMMAND_CODE) 0x00000017)\r
-#define TPM_ORD_Sealx                             ((TPM_COMMAND_CODE) 0x0000003D)\r
-#define TPM_ORD_SelfTestFull                      ((TPM_COMMAND_CODE) 0x00000050)\r
-#define TPM_ORD_SetCapability                     ((TPM_COMMAND_CODE) 0x0000003F)\r
-#define TPM_ORD_SetOperatorAuth                   ((TPM_COMMAND_CODE) 0x00000074)\r
-#define TPM_ORD_SetOrdinalAuditStatus             ((TPM_COMMAND_CODE) 0x0000008D)\r
-#define TPM_ORD_SetOwnerInstall                   ((TPM_COMMAND_CODE) 0x00000071)\r
-#define TPM_ORD_SetOwnerPointer                   ((TPM_COMMAND_CODE) 0x00000075)\r
-#define TPM_ORD_SetRedirection                    ((TPM_COMMAND_CODE) 0x0000009A)\r
-#define TPM_ORD_SetTempDeactivated                ((TPM_COMMAND_CODE) 0x00000073)\r
-#define TPM_ORD_SHA1Complete                      ((TPM_COMMAND_CODE) 0x000000A2)\r
-#define TPM_ORD_SHA1CompleteExtend                ((TPM_COMMAND_CODE) 0x000000A3)\r
-#define TPM_ORD_SHA1Start                         ((TPM_COMMAND_CODE) 0x000000A0)\r
-#define TPM_ORD_SHA1Update                        ((TPM_COMMAND_CODE) 0x000000A1)\r
-#define TPM_ORD_Sign                              ((TPM_COMMAND_CODE) 0x0000003C)\r
-#define TPM_ORD_Startup                           ((TPM_COMMAND_CODE) 0x00000099)\r
-#define TPM_ORD_StirRandom                        ((TPM_COMMAND_CODE) 0x00000047)\r
-#define TPM_ORD_TakeOwnership                     ((TPM_COMMAND_CODE) 0x0000000D)\r
-#define TPM_ORD_Terminate_Handle                  ((TPM_COMMAND_CODE) 0x00000096)\r
-#define TPM_ORD_TickStampBlob                     ((TPM_COMMAND_CODE) 0x000000F2)\r
-#define TPM_ORD_UnBind                            ((TPM_COMMAND_CODE) 0x0000001E)\r
-#define TPM_ORD_Unseal                            ((TPM_COMMAND_CODE) 0x00000018)\r
-#define TSC_ORD_PhysicalPresence                  ((TPM_COMMAND_CODE) 0x4000000A)\r
-#define TSC_ORD_ResetEstablishmentBit             ((TPM_COMMAND_CODE) 0x4000000B)\r
-\r
-//\r
-// Part 2, section 18: Context structures\r
-//\r
-\r
-typedef struct tdTPM_CONTEXT_BLOB\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_RESOURCE_TYPE               resourceType;\r
-    TPM_HANDLE                      handle;\r
-    UINT8                           label[16];\r
-    UINT32                          contextCount;\r
-    TPM_DIGEST                      integrityDigest;\r
-    UINT32                          additionalSize;\r
-    UINT8                           *additionalData;\r
-    UINT32                          sensitiveSize;\r
-    UINT8                           *sensitiveData;\r
-} TPM_CONTEXT_BLOB;\r
-\r
-typedef struct tdTPM_CONTEXT_SENSITIVE\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_NONCE                       contextNonce;\r
-    UINT32                          internalSize;\r
-    UINT8                           *internalData;\r
-} TPM_CONTEXT_SENSITIVE;\r
-\r
-//\r
-// Part 2, section 19: NV Structures\r
-//\r
-\r
-#define TPM_NV_INDEX_LOCK              ((UINT32)0xffffffff)\r
-#define TPM_NV_INDEX0                  ((UINT32)0x00000000)\r
-#define TPM_NV_INDEX_DIR               ((UINT32)0x10000001)\r
-#define TPM_NV_INDEX_EKCert            ((UINT32)0x0000f000)\r
-#define TPM_NV_INDEX_TPM_CC            ((UINT32)0x0000f001)\r
-#define TPM_NV_INDEX_PlatformCert      ((UINT32)0x0000f002)\r
-#define TPM_NV_INDEX_Platform_CC       ((UINT32)0x0000f003)\r
-// The following define ranges of reserved indices.\r
-#define TPM_NV_INDEX_TSS_BASE          ((UINT32)0x00011100)\r
-#define TPM_NV_INDEX_PC_BASE           ((UINT32)0x00011200)\r
-#define TPM_NV_INDEX_SERVER_BASE       ((UINT32)0x00011300)\r
-#define TPM_NV_INDEX_MOBILE_BASE       ((UINT32)0x00011400)\r
-#define TPM_NV_INDEX_PERIPHERAL_BASE   ((UINT32)0x00011500)\r
-#define TPM_NV_INDEX_GROUP_RESV_BASE   ((UINT32)0x00010000)\r
-\r
-typedef UINT32 TPM_NV_PER_ATTRIBUTES;\r
-// The typedefs TPM_NV_PER_ATTRIBUTES (not present in TPM 1.2 Spec. have been added \r
-// and structure fields that were to hold the following values\r
-#define TPM_NV_PER_READ_STCLEAR        (((UINT32)1)<<31)\r
-#define TPM_NV_PER_AUTHREAD            (((UINT32)1)<<18)\r
-#define TPM_NV_PER_OWNERREAD           (((UINT32)1)<<17)\r
-#define TPM_NV_PER_PPREAD              (((UINT32)1)<<16)\r
-#define TPM_NV_PER_GLOBALLOCK          (((UINT32)1)<<15)\r
-#define TPM_NV_PER_WRITE_STCLEAR       (((UINT32)1)<<14)\r
-#define TPM_NV_PER_WRITEDEFINE         (((UINT32)1)<<13)\r
-#define TPM_NV_PER_WRITEALL            (((UINT32)1)<<12)\r
-#define TPM_NV_PER_AUTHWRITE           (((UINT32)1)<<2)\r
-#define TPM_NV_PER_OWNERWRITE          (((UINT32)1)<<1)\r
-#define TPM_NV_PER_PPWRITE             (((UINT32)1)<<0)\r
-\r
-typedef struct tdTPM_NV_ATTRIBUTES\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_NV_PER_ATTRIBUTES           attributes;\r
-} TPM_NV_ATTRIBUTES;\r
-\r
-\r
-typedef struct tdTPM_NV_DATA_PUBLIC\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_NV_INDEX                    nvIndex;\r
-    TPM_PCR_INFO_SHORT              pcrInfoRead;\r
-    TPM_PCR_INFO_SHORT              pcrInfoWrite;\r
-    TPM_NV_ATTRIBUTES               permission;\r
-    BOOLEAN                         bReadSTClear;\r
-    BOOLEAN                         bWriteSTClear;\r
-    BOOLEAN                         bWriteDefine;\r
-    UINT32                          dataSize;\r
-} TPM_NV_DATA_PUBLIC;\r
-\r
-\r
-\r
-// Internal to TPM:\r
-//typedef struct tdTPM_NV_DATA_SENSITIVE\r
-//{\r
-//    TPM_STRUCTURE_TAG               tag;\r
-//    TPM_NV_DATA_PUBLIC              pubInfo;\r
-//   TPM_AUTHDATA                    authValue;\r
-//    UINT8                           *data;\r
-//} TPM_NV_DATA_SENSITIVE;\r
-\r
-\r
-//\r
-// Part 2, section 20: Delegation\r
-//\r
-\r
-//\r
-// Part 2, section 20.2.1: Owner Permissions Settings for per1 bits\r
-//\r
-#define TPM_DELEGATE_SetOrdinalAuditStatus          (((UINT32)1)<<30)\r
-#define TPM_DELEGATE_DirWriteAuth                   (((UINT32)1)<<29)\r
-#define TPM_DELEGATE_CMK_ApproveMA                  (((UINT32)1)<<28)\r
-#define TPM_DELEGATE_NV_WriteValue                  (((UINT32)1)<<27)\r
-#define TPM_DELEGATE_CMK_CreateTicket               (((UINT32)1)<<26)\r
-#define TPM_DELEGATE_NV_ReadValue                   (((UINT32)1)<<25)\r
-#define TPM_DELEGATE_Delegate_LoadOwnerDelegation   (((UINT32)1)<<24)\r
-#define TPM_DELEGATE_DAA_Join                       (((UINT32)1)<<23)\r
-#define TPM_DELEGATE_AuthorizeMigrationKey          (((UINT32)1)<<22)\r
-#define TPM_DELEGATE_CreateMaintenanceArchive       (((UINT32)1)<<21)\r
-#define TPM_DELEGATE_LoadMaintenanceArchive         (((UINT32)1)<<20)\r
-#define TPM_DELEGATE_KillMaintenanceFeature         (((UINT32)1)<<19)\r
-#define TPM_DELEGATE_OwnerReadInteralPub            (((UINT32)1)<<18)\r
-#define TPM_DELEGATE_ResetLockValue                 (((UINT32)1)<<17)\r
-#define TPM_DELEGATE_OwnerClear                     (((UINT32)1)<<16)\r
-#define TPM_DELEGATE_DisableOwnerClear              (((UINT32)1)<<15)\r
-#define TPM_DELEGATE_NV_DefineSpace                 (((UINT32)1)<<14)\r
-#define TPM_DELEGATE_OwnerSetDisable                (((UINT32)1)<<13)\r
-#define TPM_DELEGATE_SetCapability                  (((UINT32)1)<<12)\r
-#define TPM_DELEGATE_MakeIdentity                   (((UINT32)1)<<11)\r
-#define TPM_DELEGATE_ActivateIdentity               (((UINT32)1)<<10)\r
-#define TPM_DELEGATE_OwnerReadPubek                 (((UINT32)1)<<9)\r
-#define TPM_DELEGATE_DisablePubekRead               (((UINT32)1)<<8)\r
-#define TPM_DELEGATE_SetRedirection                 (((UINT32)1)<<7)\r
-#define TPM_DELEGATE_FieldUpgrade                   (((UINT32)1)<<6)\r
-#define TPM_DELEGATE_Delegate_UpdateVerification    (((UINT32)1)<<5)\r
-#define TPM_DELEGATE_CreateCounter                  (((UINT32)1)<<4)\r
-#define TPM_DELEGATE_ReleaseCounterOwner            (((UINT32)1)<<3)\r
-#define TPM_DELEGATE_DelegateManage                 (((UINT32)1)<<2)\r
-#define TPM_DELEGATE_Delegate_CreateOwnerDelegation (((UINT32)1)<<1)\r
-#define TPM_DELEGATE_DAA_Sign                       (((UINT32)1)<<0)\r
-\r
-//\r
-// Part 2, section 20.2.3: Key Permissions Settings for per1 bits\r
-//\r
-#define TPM_KEY_DELEGATE_CMK_ConvertMigration       (((UINT32)1)<<28)\r
-#define TPM_KEY_DELEGATE_TickStampBlob              (((UINT32)1)<<27)\r
-#define TPM_KEY_DELEGATE_ChangeAuthAsymStart        (((UINT32)1)<<26)\r
-#define TPM_KEY_DELEGATE_ChangeAuthAsymFinish       (((UINT32)1)<<25)\r
-#define TPM_KEY_DELEGATE_CMK_CreateKey              (((UINT32)1)<<24)\r
-#define TPM_KEY_DELEGATE_MigrateKey                 (((UINT32)1)<<23)\r
-#define TPM_KEY_DELEGATE_LoadKey2                   (((UINT32)1)<<22)\r
-#define TPM_KEY_DELEGATE_EstablishTransport         (((UINT32)1)<<21)\r
-#define TPM_KEY_DELEGATE_ReleaseTransportSigned     (((UINT32)1)<<20)\r
-#define TPM_KEY_DELEGATE_Quote2                     (((UINT32)1)<<19)\r
-#define TPM_KEY_DELEGATE_Sealx                      (((UINT32)1)<<18)\r
-#define TPM_KEY_DELEGATE_MakeIdentity               (((UINT32)1)<<17)\r
-#define TPM_KEY_DELEGATE_ActivateIdentity           (((UINT32)1)<<16)\r
-#define TPM_KEY_DELEGATE_GetAuditDigestSigned       (((UINT32)1)<<15)\r
-#define TPM_KEY_DELEGATE_Sign                       (((UINT32)1)<<14)\r
-#define TPM_KEY_DELEGATE_CertifyKey2                (((UINT32)1)<<13)\r
-#define TPM_KEY_DELEGATE_CertifyKey                 (((UINT32)1)<<12)\r
-#define TPM_KEY_DELEGATE_CreateWrapKey              (((UINT32)1)<<11)\r
-#define TPM_KEY_DELEGATE_CMK_CreateBlob             (((UINT32)1)<<10)\r
-#define TPM_KEY_DELEGATE_CreateMigrationBlob        (((UINT32)1)<<9)\r
-#define TPM_KEY_DELEGATE_ConvertMigrationBlob       (((UINT32)1)<<8)\r
-#define TPM_KEY_DELEGATE_CreateKeyDelegation        (((UINT32)1)<<7)\r
-#define TPM_KEY_DELEGATE_ChangeAuth                 (((UINT32)1)<<6)\r
-#define TPM_KEY_DELEGATE_GetPubKey                  (((UINT32)1)<<5)\r
-#define TPM_KEY_DELEGATE_UnBind                     (((UINT32)1)<<4)\r
-#define TPM_KEY_DELEGATE_Quote                      (((UINT32)1)<<3)\r
-#define TPM_KEY_DELEGATE_Unseal                     (((UINT32)1)<<2)\r
-#define TPM_KEY_DELEGATE_Seal                       (((UINT32)1)<<1)\r
-#define TPM_KEY_DELEGATE_LoadKey                    (((UINT32)1)<<0)\r
-\r
-#define TPM_FAMILY_CREATE                 ((UINT32)0x00000001)\r
-#define TPM_FAMILY_ENABLE                 ((UINT32)0x00000002)\r
-#define TPM_FAMILY_ADMIN                  ((UINT32)0x00000003)\r
-#define TPM_FAMILY_INVALIDATE             ((UINT32)0x00000004)\r
-\r
-#define TPM_FAMFLAG_DELEGATE_ADMIN_LOCK   (((UINT32)1)<<1)\r
-#define TPM_FAMFLAG_ENABLE                (((UINT32)1)<<0)\r
-\r
-typedef struct tdTPM_FAMILY_LABEL\r
-{\r
-    UINT8                           label;\r
-} TPM_FAMILY_LABEL;\r
-\r
-typedef struct tdTPM_FAMILY_TABLE_ENTRY\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_FAMILY_LABEL                label;\r
-    TPM_FAMILY_ID                   familyID;\r
-    TPM_FAMILY_VERIFICATION         verificationCount;\r
-    TPM_FAMILY_FLAGS                flags;\r
-} TPM_FAMILY_TABLE_ENTRY;\r
-\r
-#define TPM_FAMILY_TABLE_ENTRY_MIN 8\r
-//typedef struct tdTPM_FAMILY_TABLE\r
-//{\r
-//    TPM_FAMILY_TABLE_ENTRY          FamTableRow[TPM_NUM_FAMILY_TABLE_ENTRY_MIN];\r
-//} TPM_FAMILY_TABLE;\r
-\r
-\r
-typedef struct tdTPM_DELEGATE_LABEL\r
-{\r
-    UINT8                           label;\r
-} TPM_DELEGATE_LABEL;\r
-\r
-\r
-typedef UINT32 TPM_DELEGATE_TYPE;\r
-#define TPM_DEL_OWNER_BITS          ((UINT32)0x00000001)\r
-#define TPM_DEL_KEY_BITS            ((UINT32)0x00000002)\r
-\r
-typedef struct tdTPM_DELEGATIONS\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_DELEGATE_TYPE               delegateType;\r
-    UINT32                          per1;\r
-    UINT32                          per2;\r
-} TPM_DELEGATIONS;\r
-\r
-typedef struct tdTPM_DELEGATE_PUBLIC\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_DELEGATE_LABEL              label;\r
-    TPM_PCR_INFO_SHORT              pcrInfo;\r
-    TPM_DELEGATIONS                 permissions;\r
-    TPM_FAMILY_ID                   familyID;\r
-    TPM_FAMILY_VERIFICATION         verificationCount;\r
-} TPM_DELEGATE_PUBLIC;\r
-\r
-typedef struct tdTPM_DELEGATE_TABLE_ROW\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_DELEGATE_PUBLIC             pub;\r
-    TPM_SECRET                      authValue;\r
-} TPM_DELEGATE_TABLE_ROW;\r
-\r
-\r
-#define TPM_NUM_DELEGATE_TABLE_ENTRY_MIN 2\r
-//typedef struct tdTPM_DELEGATE_TABLE\r
-//{\r
-//    TPM_DELEGATE_TABLE_ROW          delRow[TPM_NUM_DELEGATE_TABLE_ENTRY_MIN];\r
-//} TPM_DELEGATE_TABLE;\r
-\r
-typedef struct tdTPM_DELEGATE_SENSITIVE\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_SECRET                      authValue;\r
-} TPM_DELEGATE_SENSITIVE;\r
-\r
-typedef struct tdTPM_DELEGATE_OWNER_BLOB\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_DELEGATE_PUBLIC             pub;\r
-    TPM_DIGEST                      integrityDigest;\r
-    UINT32                          additionalSize;\r
-    UINT8                           *additionalArea;\r
-    UINT32                          sensitiveSize;\r
-    UINT8                           *sensitiveArea;\r
-} TPM_DELEGATE_OWNER_BLOB;\r
-\r
-typedef struct tdTPM_DELEGATE_KEY_BLOB\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_DELEGATE_PUBLIC             pub;\r
-    TPM_DIGEST                      integrityDigest;\r
-    TPM_DIGEST                      pubKeyDigest;\r
-    UINT32                          additionalSize;\r
-    UINT8                           *additionalArea;\r
-    UINT32                          sensitiveSize;\r
-    UINT8                           *sensitiveArea;\r
-} TPM_DELEGATE_KEY_BLOB;\r
-\r
-//\r
-// Part 2, section 21.1: TPM_CAPABILITY_AREA for GetCapability\r
-//\r
-#define TPM_CAP_ORD                     ((TPM_CAPABILITY_AREA) 0x00000001)\r
-#define TPM_CAP_ALG                     ((TPM_CAPABILITY_AREA) 0x00000002)\r
-#define TPM_CAP_PID                     ((TPM_CAPABILITY_AREA) 0x00000003)\r
-#define TPM_CAP_FLAG                    ((TPM_CAPABILITY_AREA) 0x00000004)\r
-#define TPM_CAP_PROPERTY                ((TPM_CAPABILITY_AREA) 0x00000005)\r
-#define TPM_CAP_VERSION                 ((TPM_CAPABILITY_AREA) 0x00000006)\r
-#define TPM_CAP_KEY_HANDLE              ((TPM_CAPABILITY_AREA) 0x00000007)\r
-#define TPM_CAP_CHECK_LOADED            ((TPM_CAPABILITY_AREA) 0x00000008)\r
-#define TPM_CAP_SYM_MODE                ((TPM_CAPABILITY_AREA) 0x00000009)\r
-#define TPM_CAP_KEY_STATUS              ((TPM_CAPABILITY_AREA) 0x0000000C)\r
-#define TPM_CAP_NV_LIST                 ((TPM_CAPABILITY_AREA) 0x0000000D)\r
-#define TPM_CAP_MFR                     ((TPM_CAPABILITY_AREA) 0x00000010)\r
-#define TPM_CAP_NV_INDEX                ((TPM_CAPABILITY_AREA) 0x00000011)\r
-#define TPM_CAP_TRANS_ALG               ((TPM_CAPABILITY_AREA) 0x00000012)\r
-#define TPM_CAP_HANDLE                  ((TPM_CAPABILITY_AREA) 0x00000014)\r
-#define TPM_CAP_TRANS_ES                ((TPM_CAPABILITY_AREA) 0x00000015)\r
-#define TPM_CAP_AUTH_ENCRYPT            ((TPM_CAPABILITY_AREA) 0x00000017)\r
-#define TPM_CAP_SELECT_SIZE             ((TPM_CAPABILITY_AREA) 0x00000018)\r
-#define TPM_CAP_VERSION_VAL             ((TPM_CAPABILITY_AREA) 0x0000001A)\r
-\r
-#define TPM_CAP_FLAG_PERMANENT          ((TPM_CAPABILITY_AREA) 0x00000108)\r
-#define TPM_CAP_FLAG_VOLATILE           ((TPM_CAPABILITY_AREA) 0x00000109)\r
-\r
-//\r
-// Part 2, section 21.2: CAP_PROPERTY Subcap values for GetCapability\r
-//\r
-#define TPM_CAP_PROP_PCR                ((TPM_CAPABILITY_AREA) 0x00000101)\r
-#define TPM_CAP_PROP_DIR                ((TPM_CAPABILITY_AREA) 0x00000102)\r
-#define TPM_CAP_PROP_MANUFACTURER       ((TPM_CAPABILITY_AREA) 0x00000103)\r
-#define TPM_CAP_PROP_KEYS               ((TPM_CAPABILITY_AREA) 0x00000104)\r
-#define TPM_CAP_PROP_MIN_COUNTER        ((TPM_CAPABILITY_AREA) 0x00000107)\r
-#define TPM_CAP_PROP_AUTHSESS           ((TPM_CAPABILITY_AREA) 0x0000010A)\r
-#define TPM_CAP_PROP_TRANSESS           ((TPM_CAPABILITY_AREA) 0x0000010B)\r
-#define TPM_CAP_PROP_COUNTERS           ((TPM_CAPABILITY_AREA) 0x0000010C)\r
-#define TPM_CAP_PROP_MAX_AUTHSESS       ((TPM_CAPABILITY_AREA) 0x0000010D)\r
-#define TPM_CAP_PROP_MAX_TRANSESS       ((TPM_CAPABILITY_AREA) 0x0000010E)\r
-#define TPM_CAP_PROP_MAX_COUNTERS       ((TPM_CAPABILITY_AREA) 0x0000010F)\r
-#define TPM_CAP_PROP_MAX_KEYS           ((TPM_CAPABILITY_AREA) 0x00000110)\r
-#define TPM_CAP_PROP_OWNER              ((TPM_CAPABILITY_AREA) 0x00000111)\r
-#define TPM_CAP_PROP_CONTEXT            ((TPM_CAPABILITY_AREA) 0x00000112)\r
-#define TPM_CAP_PROP_MAX_CONTEXT        ((TPM_CAPABILITY_AREA) 0x00000113)\r
-#define TPM_CAP_PROP_FAMILYROWS         ((TPM_CAPABILITY_AREA) 0x00000114)\r
-#define TPM_CAP_PROP_TIS_TIMEOUT        ((TPM_CAPABILITY_AREA) 0x00000115)\r
-#define TPM_CAP_PROP_STARTUP_EFFECT     ((TPM_CAPABILITY_AREA) 0x00000116)\r
-#define TPM_CAP_PROP_DELEGATE_ROW       ((TPM_CAPABILITY_AREA) 0x00000117)\r
-#define TPM_CAP_PROP_DAA_MAX            ((TPM_CAPABILITY_AREA) 0x00000119)\r
-#define CAP_PROP_SESSION_DAA            ((TPM_CAPABILITY_AREA) 0x0000011A)\r
-#define TPM_CAP_PROP_CONTEXT_DIST       ((TPM_CAPABILITY_AREA) 0x0000011B)\r
-#define TPM_CAP_PROP_DAA_INTERRUPT      ((TPM_CAPABILITY_AREA) 0x0000011C)\r
-#define TPM_CAP_PROP_SESSIONS           ((TPM_CAPABILITY_AREA) 0x0000011D)\r
-#define TPM_CAP_PROP_MAX_SESSIONS       ((TPM_CAPABILITY_AREA) 0x0000011E)\r
-#define TPM_CAP_PROP_CMK_RESTRICTION    ((TPM_CAPABILITY_AREA) 0x0000011F)\r
-#define TPM_CAP_PROP_DURATION           ((TPM_CAPABILITY_AREA) 0x00000120)\r
-#define TPM_CAP_PROP_ACTIVE_COUNTER     ((TPM_CAPABILITY_AREA) 0x00000122)\r
-#define TPM_CAP_PROP_MAX_NV_AVAILABLE   ((TPM_CAPABILITY_AREA) 0x00000123)\r
-#define TPM_CAP_PROP_INPUT_BUFFER       ((TPM_CAPABILITY_AREA) 0x00000124)\r
-\r
-//\r
-// Part 2, section 21.4: TPM_CAPABILITY_AREA for SetCapability\r
-//\r
-#define TPM_SET_PERM_FLAGS              ((TPM_CAPABILITY_AREA) 0x00000001)\r
-#define TPM_SET_PERM_DATA               ((TPM_CAPABILITY_AREA) 0x00000002)\r
-#define TPM_SET_STCLEAR_FLAGS           ((TPM_CAPABILITY_AREA) 0x00000003)\r
-#define TPM_SET_STCLEAR_DATA            ((TPM_CAPABILITY_AREA) 0x00000004)\r
-#define TPM_SET_STANY_FLAGS             ((TPM_CAPABILITY_AREA) 0x00000005)\r
-#define TPM_SET_STANY_DATA              ((TPM_CAPABILITY_AREA) 0x00000006)\r
-\r
-// Part 2, section 21.6: TPM_CAP_VERSION_INFO\r
-//   [size_is(vendorSpecificSize)] BYTE* vendorSpecific;\r
-//\r
-typedef struct tdTPM_CAP_VERSION_INFO {\r
-  TPM_STRUCTURE_TAG                 tag;\r
-  TPM_VERSION                       version;\r
-  UINT16                            specLevel;\r
-  UINT8                             errataRev;\r
-  UINT8                             tpmVendorID[4];\r
-  UINT16                            vendorSpecificSize;\r
-  UINT8                             *vendorSpecific;\r
-} TPM_CAP_VERSION_INFO;\r
-\r
-//\r
-// Part 2, section 21.10: TPM_DA_ACTION_TYPE\r
-//\r
-typedef struct tdTPM_DA_ACTION_TYPE {\r
-  TPM_STRUCTURE_TAG                 tag;\r
-  UINT32                            actions;\r
-} TPM_DA_ACTION_TYPE;\r
-\r
-#define TPM_DA_ACTION_FAILURE_MODE     (((UINT32)1)<<3)\r
-#define TPM_DA_ACTION_DEACTIVATE       (((UINT32)1)<<2)\r
-#define TPM_DA_ACTION_DISABLE          (((UINT32)1)<<1)\r
-#define TPM_DA_ACTION_TIMEOUT          (((UINT32)1)<<0)\r
-\r
-//\r
-// Part 2, section 21.7: TPM_DA_INFO\r
-//\r
-typedef struct tdTPM_DA_INFO {\r
-  TPM_STRUCTURE_TAG                 tag;\r
-  TPM_DA_STATE                      state;\r
-  UINT16                            currentCount;\r
-  UINT16                            thresholdCount;\r
-  TPM_DA_ACTION_TYPE                actionAtThreshold;\r
-  UINT32                            actionDependValue;\r
-  UINT32                            vendorDataSize;\r
-  UINT8                             *vendorData;\r
-} TPM_DA_INFO;\r
-\r
-//\r
-// Part 2, section 21.8: TPM_DA_INFO_LIMITED\r
-//\r
-typedef struct tdTPM_DA_INFO_LIMITED {\r
-  TPM_STRUCTURE_TAG                 tag;\r
-  TPM_DA_STATE                      state;\r
-  TPM_DA_ACTION_TYPE                actionAtThreshold;\r
-  UINT32                            vendorDataSize;\r
-  UINT8                             *vendorData;\r
-} TPM_DA_INFO_LIMITED;\r
-\r
-//\r
-// Part 2, section 21.9: CAP_PROPERTY Subcap values for GetCapability\r
-//\r
-#define TPM_DA_STATE_INACTIVE          ((UINT8)0x00)\r
-#define TPM_DA_STATE_ACTIVE            ((UINT8)0x01)\r
-\r
-//\r
-// Part 2, section 22: DAA Structures\r
-//\r
-\r
-#define TPM_DAA_SIZE_r0                (43)\r
-#define TPM_DAA_SIZE_r1                (43)\r
-#define TPM_DAA_SIZE_r2                (128)\r
-#define TPM_DAA_SIZE_r3                (168)\r
-#define TPM_DAA_SIZE_r4                (219)\r
-#define TPM_DAA_SIZE_NT                (20)\r
-#define TPM_DAA_SIZE_v0                (128)\r
-#define TPM_DAA_SIZE_v1                (192)\r
-#define TPM_DAA_SIZE_NE                (256)\r
-#define TPM_DAA_SIZE_w                 (256)\r
-#define TPM_DAA_SIZE_issuerModulus     (256)\r
-#define TPM_DAA_power0                 (104)\r
-#define TPM_DAA_power1                 (1024)\r
-\r
-typedef struct tdTPM_DAA_ISSUER\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_DIGEST                      DAA_digest_R0;\r
-    TPM_DIGEST                      DAA_digest_R1;\r
-    TPM_DIGEST                      DAA_digest_S0;\r
-    TPM_DIGEST                      DAA_digest_S1;\r
-    TPM_DIGEST                      DAA_digest_n;\r
-    TPM_DIGEST                      DAA_digest_gamma;\r
-    UINT8                           DAA_generic_q[26];\r
-} TPM_DAA_ISSUER;\r
-\r
-\r
-typedef struct tdTPM_DAA_TPM\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_DIGEST                      DAA_digestIssuer;\r
-    TPM_DIGEST                      DAA_digest_v0;\r
-    TPM_DIGEST                      DAA_digest_v1;\r
-    TPM_DIGEST                      DAA_rekey;\r
-    UINT32                          DAA_count;\r
-} TPM_DAA_TPM;\r
-\r
-typedef struct tdTPM_DAA_CONTEXT\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_DIGEST                      DAA_digestContext;\r
-    TPM_DIGEST                      DAA_digest;\r
-    TPM_DAA_CONTEXT_SEED            DAA_contextSeed;\r
-    UINT8                           DAA_scratch[256];\r
-    UINT8                           DAA_stage;\r
-} TPM_DAA_CONTEXT;\r
-\r
-typedef struct tdTPM_DAA_JOINDATA\r
-{\r
-    UINT8                           DAA_join_u0[128];\r
-    UINT8                           DAA_join_u1[138];\r
-    TPM_DIGEST                      DAA_digest_n0;\r
-} TPM_DAA_JOINDATA;\r
-\r
-typedef struct tdTPM_DAA_BLOB\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    TPM_RESOURCE_TYPE               resourceType;\r
-    UINT8                           label[16];\r
-    TPM_DIGEST                      blobIntegrity;\r
-    UINT32                          additionalSize;\r
-    UINT8                           *additionalData;\r
-    UINT32                          sensitiveSize;\r
-    UINT8                           *sensitiveData;\r
-} TPM_DAA_BLOB;\r
-\r
-typedef struct tdTPM_DAA_SENSITIVE\r
-{\r
-    TPM_STRUCTURE_TAG               tag;\r
-    UINT32                          internalSize;\r
-    UINT8                           *internalData;\r
-} TPM_DAA_SENSITIVE;\r
-\r
-\r
-//\r
-// Part 2, section 23: Redirection\r
-//\r
-\r
-// This section of the TPM spec defines exactly one value but does not\r
-// give it a name. The definition of TPM_SetRedirection in Part3\r
-// refers to exactly one name but does not give its value. We join\r
-// them here.\r
-#define TPM_REDIR_GPIO              (0x00000001)\r
-\r
-//\r
-// TPM Command & Response Headers\r
-//\r
-typedef struct tdTPM_RQU_COMMAND_HDR {\r
-  TPM_STRUCTURE_TAG                 tag;\r
-  UINT32                            paramSize;\r
-  TPM_COMMAND_CODE                  ordinal;\r
-} TPM_RQU_COMMAND_HDR;\r
-\r
-typedef struct tdTPM_RSP_COMMAND_HDR {\r
-  TPM_STRUCTURE_TAG                 tag;\r
-  UINT32                            paramSize;\r
-  TPM_RESULT                        returnCode;\r
-} TPM_RSP_COMMAND_HDR;\r
-\r
-#ifndef __GNUC__\r
-#pragma pack (pop)\r
-#endif\r
-\r
-#endif  // _TPM12_H_\r