]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/IndustryStandard/Tpm12.h
MdePkg: add missing #defines for decoding PCIe 2.1 extended capability structures
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / Tpm12.h
index 1d489815ca7a16e195d871dfc7f79ca714df3547..5bcc16ca7e3cef3b28d008860104a17346ceb8af 100644 (file)
-/*++\r
-\r
-Copyright (c) 2005 - 2006, Intel Corporation                                                         \r
-All rights reserved. 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
+/** @file   \r
+  TPM Specification data structures (TCG TPM Specification Version 1.2 Revision 103)\r
+  See http://trustedcomputinggroup.org for latest specification updates\r
 \r
-  TPM Specification data structures (TCG TPM Specification Version 1.2 Revision 94)\r
+  Copyright (c) 2006 - 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
-  See http://trustedcomputinggroup.org for latest specification updates\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
 \r
---*/\r
 \r
 #ifndef _TPM12_H_\r
 #define _TPM12_H_\r
 \r
-//\r
-// The start of TPM return codes\r
-//\r
-#define TPM_BASE                    (EFI_MAX_BIT + (EFI_MAX_BIT >> 1))\r
+///\r
+/// The start of TPM return codes\r
+///\r
+#define TPM_BASE                    0\r
 \r
 //\r
-// Structures are all packed on 1-byte alignment\r
+// All structures MUST be packed on a byte boundary.\r
 //\r
 \r
-#pragma pack (push)\r
 #pragma pack (1)\r
 \r
 //\r
-// Part 2, section 2.2: Basic types & Helper redefinitions\r
+// Part 2, section 2.2.3: Helper redefinitions\r
 //\r
+///\r
+/// Indicates the conditions where it is required that authorization be presented\r
+///\r
 typedef UINT8                       TPM_AUTH_DATA_USAGE;\r
+///\r
+/// The information as to what the payload is in an encrypted structure\r
+///\r
 typedef UINT8                       TPM_PAYLOAD_TYPE;\r
+///\r
+/// The version info breakdown\r
+///\r
 typedef UINT8                       TPM_VERSION_BYTE;\r
+///\r
+/// The state of the dictionary attack mitigation logic\r
+///\r
+typedef UINT8                       TPM_DA_STATE;\r
+///\r
+/// The request or response authorization type\r
+///\r
 typedef UINT16                      TPM_TAG;\r
+///\r
+/// The protocol in use\r
+///\r
 typedef UINT16                      TPM_PROTOCOL_ID;\r
+///\r
+/// Indicates the start state\r
+///\r
 typedef UINT16                      TPM_STARTUP_TYPE;\r
+///\r
+/// The definition of the encryption scheme\r
+///\r
 typedef UINT16                      TPM_ENC_SCHEME;\r
+///\r
+/// The definition of the signature scheme\r
+///\r
 typedef UINT16                      TPM_SIG_SCHEME;\r
+///\r
+/// The definition of the migration scheme\r
+///\r
 typedef UINT16                      TPM_MIGRATE_SCHEME;\r
+///\r
+/// Sets the state of the physical presence mechanism\r
+///\r
 typedef UINT16                      TPM_PHYSICAL_PRESENCE;\r
+///\r
+/// Indicates the types of entity that are supported by the TPM\r
+///\r
 typedef UINT16                      TPM_ENTITY_TYPE;\r
+///\r
+/// Indicates the permitted usage of the key\r
+///\r
 typedef UINT16                      TPM_KEY_USAGE;\r
+///\r
+/// The type of asymmetric encrypted structure in use by the endorsement key\r
+///\r
 typedef UINT16                      TPM_EK_TYPE;\r
+///\r
+/// The tag for the structure\r
+///\r
 typedef UINT16                      TPM_STRUCTURE_TAG;\r
+///\r
+/// The platform specific spec to which the information relates to\r
+///\r
 typedef UINT16                      TPM_PLATFORM_SPECIFIC;\r
+///\r
+/// The command ordinal\r
+///\r
 typedef UINT32                      TPM_COMMAND_CODE;\r
+///\r
+/// Identifies a TPM capability area\r
+///\r
 typedef UINT32                      TPM_CAPABILITY_AREA;\r
+///\r
+/// Indicates information regarding a key\r
+///\r
 typedef UINT32                      TPM_KEY_FLAGS;\r
+///\r
+/// Indicates the type of algorithm\r
+///\r
 typedef UINT32                      TPM_ALGORITHM_ID;\r
+///\r
+/// The locality modifier\r
+///\r
 typedef UINT32                      TPM_MODIFIER_INDICATOR;\r
+///\r
+/// The actual number of a counter\r
+///\r
 typedef UINT32                      TPM_ACTUAL_COUNT;\r
+///\r
+/// Attributes that define what options are in use for a transport session\r
+///\r
 typedef UINT32                      TPM_TRANSPORT_ATTRIBUTES;\r
+///\r
+/// Handle to an authorization session\r
+///\r
 typedef UINT32                      TPM_AUTHHANDLE;\r
+///\r
+/// Index to a DIR register\r
+///\r
 typedef UINT32                      TPM_DIRINDEX;\r
+///\r
+/// The area where a key is held assigned by the TPM\r
+///\r
 typedef UINT32                      TPM_KEY_HANDLE;\r
+///\r
+/// Index to a PCR register\r
+///\r
 typedef UINT32                      TPM_PCRINDEX;\r
+///\r
+/// The return code from a function\r
+///\r
 typedef UINT32                      TPM_RESULT;\r
+///\r
+/// The types of resources that a TPM may have using internal resources\r
+///\r
 typedef UINT32                      TPM_RESOURCE_TYPE;\r
+///\r
+/// Allows for controlling of the key when loaded and how to handle TPM_Startup issues\r
+///\r
 typedef UINT32                      TPM_KEY_CONTROL;\r
+///\r
+/// The index into the NV storage area\r
+///\r
 typedef UINT32                      TPM_NV_INDEX;\r
+///\r
+/// The family ID. Family IDs are automatically assigned a sequence number by the TPM. \r
+/// A trusted process can set the FamilyID value in an individual row to NULL, which \r
+/// invalidates that row. The family ID resets to NULL on each change of TPM Owner.\r
+///\r
 typedef UINT32                      TPM_FAMILY_ID;\r
+///\r
+/// IA value used as a label for the most recent verification of this family. Set to zero when not in use.\r
+///\r
 typedef UINT32                      TPM_FAMILY_VERIFICATION;\r
+///\r
+/// How the TPM handles var\r
+///\r
 typedef UINT32                      TPM_STARTUP_EFFECTS;\r
+///\r
+/// The mode of a symmetric encryption\r
+///\r
 typedef UINT32                      TPM_SYM_MODE;\r
+///\r
+/// The family flags\r
+///\r
 typedef UINT32                      TPM_FAMILY_FLAGS;\r
+///\r
+/// The index value for the delegate NV table\r
+///\r
 typedef UINT32                      TPM_DELEGATE_INDEX;\r
+///\r
+/// The restrictions placed on delegation of CMK commands\r
+///\r
 typedef UINT32                      TPM_CMK_DELEGATE;\r
+///\r
+/// The ID value of a monotonic counter\r
+///\r
 typedef UINT32                      TPM_COUNT_ID;\r
+///\r
+/// A command to execute\r
+///\r
 typedef UINT32                      TPM_REDIT_COMMAND;\r
+///\r
+/// A transport session handle\r
+///\r
 typedef UINT32                      TPM_TRANSHANDLE;\r
+///\r
+/// A generic handle could be key, transport etc\r
+///\r
 typedef UINT32                      TPM_HANDLE;\r
+///\r
+/// What operation is happening\r
+///\r
 typedef UINT32                      TPM_FAMILY_OPERATION;\r
 \r
 //\r
@@ -91,7 +214,7 @@ typedef UINT32                      TPM_FAMILY_OPERATION;
 #define TPM_Vendor_Specific8        ((UINT8) 0x80)\r
 \r
 //\r
-// Part 2, section 3.1: Structure TAGs\r
+// Part 2, section 3.1: TPM_STRUCTURE_TAG\r
 //\r
 #define TPM_TAG_CONTEXTBLOB         ((TPM_STRUCTURE_TAG) 0x0001)\r
 #define TPM_TAG_CONTEXT_SENSITIVE   ((TPM_STRUCTURE_TAG) 0x0002)\r
@@ -147,6 +270,9 @@ typedef UINT32                      TPM_FAMILY_OPERATION;
 #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
@@ -155,68 +281,69 @@ typedef UINT32                      TPM_FAMILY_OPERATION;
 //\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
+#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_RESERVED_HANDLE      ((UINT16) 0x0040) // Reserved. This value avoids collisions with the handle MSB setting.\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_ENTITY_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
+#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
+#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
+#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
@@ -226,73 +353,73 @@ typedef UINT32                      TPM_FAMILY_OPERATION;
 //\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
+#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
+#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
+#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
+#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
+#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
+#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
+///\r
+/// Part 2, section 5.1: TPM_STRUCT_VER\r
+///\r
 typedef struct tdTPM_STRUCT_VER {\r
   UINT8                             major;\r
   UINT8                             minor;\r
@@ -300,9 +427,9 @@ typedef struct tdTPM_STRUCT_VER {
   UINT8                             revMinor;\r
 } TPM_STRUCT_VER;\r
 \r
-//\r
-// Part 2, section 5.3: TPM_VERSION\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
@@ -310,44 +437,80 @@ typedef struct tdTPM_VERSION {
   UINT8                             revMinor;\r
 } TPM_VERSION;\r
 \r
-//\r
-// Part 2, section 5.4: TPM_DIGEST\r
-//\r
+\r
 #define TPM_SHA1_160_HASH_LEN       0x14\r
 #define TPM_SHA1BASED_NONCE_LEN     TPM_SHA1_160_HASH_LEN\r
 \r
+///\r
+/// Part 2, section 5.4: TPM_DIGEST\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
-typedef TPM_DIGEST                  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_DIGEST                  TPM_DAA_CONTEXT_SEED; // This SHALL be a random value\r
+///\r
+/// This SHALL be the digest of the chosen identityLabel and privacyCA for a new TPM identity\r
+///\r
+typedef TPM_DIGEST                  TPM_CHOSENID_HASH;\r
+///\r
+/// This SHALL be the hash of a list of PCR indexes and PCR values that a key or data is bound to\r
+///\r
+typedef TPM_DIGEST                  TPM_COMPOSITE_HASH;\r
+///\r
+/// This SHALL be the value of a DIR register\r
+///\r
+typedef TPM_DIGEST                  TPM_DIRVALUE;\r
 \r
-//\r
-// Part 2, section 5.5: TPM_NONCE\r
-//\r
+typedef TPM_DIGEST                  TPM_HMAC;\r
+///\r
+/// The value inside of the PCR\r
+///\r
+typedef TPM_DIGEST                  TPM_PCRVALUE;\r
+///\r
+/// This SHALL be the value of the current internal audit state\r
+///\r
+typedef TPM_DIGEST                  TPM_AUDITDIGEST;\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
+///\r
+/// This SHALL be a random value generated by a TPM immediately after the EK is installed\r
+/// in that TPM, whenever an EK is installed in that TPM\r
+///\r
+typedef TPM_NONCE                  TPM_DAA_TPM_SEED;\r
+///\r
+/// This SHALL be a random value\r
+///\r
+typedef TPM_NONCE                  TPM_DAA_CONTEXT_SEED;\r
+\r
 //\r
 // Part 2, section 5.6: TPM_AUTHDATA\r
 //\r
+///\r
+/// The AuthData data is the information that is saved or passed to provide proof of ownership\r
+/// 296 of an entity\r
+///\r
 typedef UINT8                       tdTPM_AUTHDATA[20];\r
+\r
 typedef tdTPM_AUTHDATA              TPM_AUTHDATA;\r
+///\r
+/// A secret plaintext value used in the authorization process\r
+///\r
 typedef TPM_AUTHDATA                TPM_SECRET;\r
+///\r
+/// A ciphertext (encrypted) version of AuthData data. The encryption mechanism depends on the context\r
+///\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
+///\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
@@ -356,47 +519,55 @@ typedef struct tdTPM_KEY_HANDLE_LIST {
 //\r
 // Part 2, section 5.8: TPM_KEY_USAGE values\r
 //\r
-\r
+///\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_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
+///\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_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
+///\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_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
+///\r
+/// TPM_KEY_AUTHCHANGE SHALL indicate an ephemeral key that is in use during\r
+/// the ChangeAuthAsym process, 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
+///\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_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
+///\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_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
+///\r
+/// TPM_KEY_MIGRAGE SHALL indicate a 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
+// Part 2, section 5.8.1: Mandatory Key Usage 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)\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
@@ -411,32 +582,32 @@ typedef struct tdTPM_KEY_HANDLE_LIST {
 #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
+///\r
+/// Part 2, section 5.10: TPM_KEY_FLAGS\r
+///\r
+typedef enum tdTPM_KEY_FLAGS {\r
   redirection                       = 0x00000001,\r
   migratable                        = 0x00000002,\r
   isVolatile                        = 0x00000004,\r
   pcrIgnoredOnRead                  = 0x00000008,\r
   migrateAuthority                  = 0x00000010\r
-};\r
+} TPM_KEY_FLAGS_BITS;\r
 \r
-//\r
-// Part 2, section 5.11: TPM_CHANGEAUTH_VALIDATE\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
+///\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
@@ -445,44 +616,44 @@ typedef struct tdTPM_KEY_PARMS {
   UINT8                             *parms;\r
 } TPM_KEY_PARMS;\r
 \r
-//\r
-// Part 2, section 10.4: TPM_STORE_PUBKEY\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
+///\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
+///\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
+///\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
+///\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
@@ -491,18 +662,18 @@ typedef struct tdTPM_SIGN_INFO {
   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
+///\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
+///\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
@@ -512,42 +683,42 @@ typedef struct tdTPM_CMK_AUTH{
 //\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
+#define TPM_CMK_DELEGATE_SIGNING    ((TPM_CMK_DELEGATE) BIT31)\r
+#define TPM_CMK_DELEGATE_STORAGE    ((TPM_CMK_DELEGATE) BIT30)\r
+#define TPM_CMK_DELEGATE_BIND       ((TPM_CMK_DELEGATE) BIT29)\r
+#define TPM_CMK_DELEGATE_LEGACY     ((TPM_CMK_DELEGATE) BIT28)\r
+#define TPM_CMK_DELEGATE_MIGRATE    ((TPM_CMK_DELEGATE) BIT27)\r
 \r
-//\r
-// Part 2, section 5.18: TPM_SELECT_SIZE\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
+///\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
+///\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
+///\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
@@ -563,9 +734,9 @@ typedef struct tdTPM_CMK_MA_APPROVAL{
 #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
+///\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
@@ -587,10 +758,11 @@ typedef struct tdTPM_PERMANENT_FLAGS{
   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
+// Part 2, section 7.1.1: Flag Restrictions (of TPM_PERMANENT_FLAGS)\r
 //\r
 #define TPM_PF_DISABLE                      ((TPM_CAPABILITY_AREA) 1)\r
 #define TPM_PF_OWNERSHIP                    ((TPM_CAPABILITY_AREA) 2)\r
@@ -611,10 +783,11 @@ typedef struct tdTPM_PERMANENT_FLAGS{
 #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
+///\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
@@ -625,7 +798,7 @@ typedef struct tdTPM_STCLEAR_FLAGS{
 } TPM_STCLEAR_FLAGS;\r
 \r
 //\r
-// Part 2, section 7.2.1: STCLEAR_FLAGS Subcap for SetCapability\r
+// Part 2, section 7.2.1: Flag Restrictions (of TPM_STCLEAR_FLAGS)\r
 //\r
 #define TPM_SF_DEACTIVATED          ((TPM_CAPABILITY_AREA) 1)\r
 #define TPM_SF_DISABLEFORCECLEAR    ((TPM_CAPABILITY_AREA) 2)\r
@@ -633,9 +806,9 @@ typedef struct tdTPM_STCLEAR_FLAGS{
 #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
+///\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
@@ -645,7 +818,7 @@ typedef struct tdTPM_STANY_FLAGS{
 } TPM_STANY_FLAGS;\r
 \r
 //\r
-// Part 2, section 7.3.1: STANY_FLAGS Subcap for SetCapability\r
+// Part 2, section 7.3.1: Flag Restrictions (of TPM_STANY_FLAGS)\r
 //\r
 #define TPM_AF_POSTINITIALISE       ((TPM_CAPABILITY_AREA) 1)\r
 #define TPM_AF_LOCALITYMODIFIER     ((TPM_CAPABILITY_AREA) 2)\r
@@ -653,107 +826,114 @@ typedef struct tdTPM_STANY_FLAGS{
 #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
+// All those structures defined in 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
-//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_PERMANENT_DATA;\r
-\r
-//\r
-// Part 2, section 7.5: TPM_STCLEAR_DATA\r
-//   available inside TPM only\r
-//\r
-//typedef struct tdTPM_STCLEAR_DATA\r
-//{\r
-//    TPM_STRUCTURE_TAG               tag;\r
-//    TPM_NONCE                       contextNonceKey;\r
-//    TPM_COUNT_ID                    countID;\r
-//    UINT32                          ownerReference;\r
-//    BOOLEAN                         disableResetLock;\r
-//} TPM_STCLEAR_DATA;\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
+#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
+//\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.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
+///\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
+///\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
+///\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
+///\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
@@ -762,9 +942,9 @@ typedef UINT8                       TPM_LOCALITY_SELECTION;
 #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
+///\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
@@ -775,18 +955,18 @@ typedef struct tdTPM_PCR_INFO_LONG {
   TPM_COMPOSITE_HASH                digestAtRelease;\r
 } TPM_PCR_INFO_LONG;\r
 \r
-//\r
-// Part 2, section 8.5: TPM_PCR_INFO_SHORT\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
+///\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
@@ -797,11 +977,11 @@ typedef struct tdTPM_PCR_ATTRIBUTES{
 // 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
+///\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
@@ -810,11 +990,11 @@ typedef struct tdTPM_STORED_DATA {
   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
+///\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
@@ -824,10 +1004,10 @@ typedef struct tdTPM_STORED_DATA12 {
   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
+///\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
@@ -837,10 +1017,10 @@ typedef struct tdTPM_SEALED_DATA {
   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
+///\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
@@ -848,9 +1028,9 @@ typedef struct tdTPM_SYMMETRIC_KEY {
   UINT8                             *data;\r
 } TPM_SYMMETRIC_KEY;\r
 \r
-//\r
-// Part 2, section 9.5: TPM_BOUND_DATA\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
@@ -862,9 +1042,13 @@ typedef struct tdTPM_BOUND_DATA {
 // \r
 \r
 //\r
-// Part 2, section 10.2: TPM_KEY\r
-//   [size_is(encDataSize)] BYTE* encData;\r
+// Section 10.1, 10.4, and 10.5 have been defined previously\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
@@ -878,10 +1062,10 @@ typedef struct tdTPM_KEY{
   UINT8                             *encData;\r
 } TPM_KEY;\r
 \r
-//\r
-// Part 2, section 10.3: TPM_KEY12\r
-//   [size_is(encDataSize)] BYTE* encData;\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
@@ -896,18 +1080,18 @@ typedef struct tdTPM_KEY12{
   UINT8                             *encData;\r
 } TPM_KEY12;\r
 \r
-//\r
-// Part 2, section 10.7: TPM_STORE_PRIVKEY\r
-//   [size_is(keyLength)] BYTE* key;\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
+///\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
@@ -916,10 +1100,10 @@ typedef struct tdTPM_STORE_ASYMKEY {                // pos len total
   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
+///\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
@@ -928,141 +1112,165 @@ typedef struct tdTPM_MIGRATE_ASYMKEY {              // pos  len  total
   UINT8                             *partPrivKey;   //  45 112-127 157-172\r
 } TPM_MIGRATE_ASYMKEY;\r
 \r
-//\r
-// Part 2, section 10.9: TPM_KEY_CONTROL\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
+///\r
+/// Part 2, section 11.1: TPM_CERTIFY_INFO Structure\r
+///\r
+typedef struct tdTPM_CERTIFY_INFO {\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
+///\r
+/// Part 2, section 11.2: TPM_CERTIFY_INFO2 Structure\r
+///\r
+typedef struct tdTPM_CERTIFY_INFO2 {\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
+///\r
+/// Part 2, section 11.3 TPM_QUOTE_INFO Structure\r
+///\r
+typedef struct tdTPM_QUOTE_INFO {\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
+///\r
+/// Part 2, section 11.4 TPM_QUOTE_INFO2 Structure\r
+///\r
+typedef struct tdTPM_QUOTE_INFO2 {\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
+///\r
+/// Part 2, section 12.1 TPM_EK_BLOB\r
+///\r
+typedef struct tdTPM_EK_BLOB {\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
+///\r
+/// Part 2, section 12.2 TPM_EK_BLOB_ACTIVATE\r
+///\r
+typedef struct tdTPM_EK_BLOB_ACTIVATE {\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
+///\r
+/// Part 2, section 12.3 TPM_EK_BLOB_AUTH\r
+///\r
+typedef struct tdTPM_EK_BLOB_AUTH {\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
+///\r
+/// Part 2, section 12.5 TPM_IDENTITY_CONTENTS\r
+///\r
+typedef struct tdTPM_IDENTITY_CONTENTS {\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
+///\r
+/// Part 2, section 12.6 TPM_IDENTITY_REQ\r
+///\r
+typedef struct tdTPM_IDENTITY_REQ {\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
+///\r
+/// Part 2, section 12.7 TPM_IDENTITY_PROOF\r
+///\r
+typedef struct tdTPM_IDENTITY_PROOF {\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
+///\r
+/// Part 2, section 12.8 TPM_ASYM_CA_CONTENTS\r
+///\r
+typedef struct tdTPM_ASYM_CA_CONTENTS {\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
+///\r
+/// Part 2, section 12.9 TPM_SYM_CA_ATTESTATION\r
+///\r
+typedef struct tdTPM_SYM_CA_ATTESTATION {\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
+///\r
+/// Part 2, section 15: Tick Structures\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
@@ -1070,79 +1278,93 @@ typedef struct tdTPM_CURRENT_TICKS {
   TPM_NONCE                         tickNonce;\r
 } TPM_CURRENT_TICKS;\r
 \r
+///\r
+/// Part 2, section 13: Transport structures\r
+///\r
+\r
+///\r
+/// Part 2, section 13.1: TPM _TRANSPORT_PUBLIC\r
+///\r
+typedef struct tdTPM_TRANSPORT_PUBLIC {\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
 //\r
-// Part 2, section 13: Transport structures\r
+// Part 2, section 13.1.1 TPM_TRANSPORT_ATTRIBUTES Definitions\r
 //\r
+#define TPM_TRANSPORT_ENCRYPT       ((UINT32)BIT0)\r
+#define TPM_TRANSPORT_LOG           ((UINT32)BIT1)\r
+#define TPM_TRANSPORT_EXCLUSIVE     ((UINT32)BIT2)\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
+///\r
+/// Part 2, section 13.2 TPM_TRANSPORT_INTERNAL\r
+///\r
+typedef struct tdTPM_TRANSPORT_INTERNAL {\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
+///\r
+/// Part 2, section 13.3 TPM_TRANSPORT_LOG_IN structure\r
+///\r
+typedef struct tdTPM_TRANSPORT_LOG_IN {\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
+///\r
+/// Part 2, section 13.4 TPM_TRANSPORT_LOG_OUT structure\r
+///\r
+typedef struct tdTPM_TRANSPORT_LOG_OUT {\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
+///\r
+/// Part 2, section 13.5 TPM_TRANSPORT_AUTH structure\r
+///\r
+typedef struct tdTPM_TRANSPORT_AUTH {\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
+///\r
+/// Part 2, section 14.1 TPM_AUDIT_EVENT_IN structure\r
+///\r
+typedef struct tdTPM_AUDIT_EVENT_IN {\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
+///\r
+/// Part 2, section 14.2 TPM_AUDIT_EVENT_OUT structure\r
+///\r
+typedef struct tdTPM_AUDIT_EVENT_OUT {\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
@@ -1410,32 +1632,39 @@ typedef struct tdTPM_AUDIT_EVENT_OUT
 // 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
+///\r
+/// Part 2, section 18.1: TPM_CONTEXT_BLOB\r
+///\r
+typedef struct tdTPM_CONTEXT_BLOB {\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
+///\r
+/// Part 2, section 18.2 TPM_CONTEXT_SENSITIVE\r
+///\r
+typedef struct tdTPM_CONTEXT_SENSITIVE {\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
+//\r
+// Part 2, section 19.1.1: Required TPM_NV_INDEX values\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
@@ -1443,7 +1672,9 @@ typedef struct tdTPM_CONTEXT_SENSITIVE
 #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
+//\r
+// Part 2, section 19.1.2: Reserved Index values\r
+//\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
@@ -1451,222 +1682,238 @@ typedef struct tdTPM_CONTEXT_SENSITIVE
 #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
+///\r
+/// Part 2, section 19.2: TPM_NV_ATTRIBUTES\r
+///\r
+typedef struct tdTPM_NV_ATTRIBUTES {\r
+  TPM_STRUCTURE_TAG               tag;\r
+  UINT32                          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
+#define TPM_NV_PER_READ_STCLEAR        (BIT31)\r
+#define TPM_NV_PER_AUTHREAD            (BIT18)\r
+#define TPM_NV_PER_OWNERREAD           (BIT17)\r
+#define TPM_NV_PER_PPREAD              (BIT16)\r
+#define TPM_NV_PER_GLOBALLOCK          (BIT15)\r
+#define TPM_NV_PER_WRITE_STCLEAR       (BIT14)\r
+#define TPM_NV_PER_WRITEDEFINE         (BIT13)\r
+#define TPM_NV_PER_WRITEALL            (BIT12)\r
+#define TPM_NV_PER_AUTHWRITE           (BIT2)\r
+#define TPM_NV_PER_OWNERWRITE          (BIT1)\r
+#define TPM_NV_PER_PPWRITE             (BIT0)\r
+\r
+///\r
+/// Part 2, section 19.3: TPM_NV_DATA_PUBLIC\r
+///\r
+typedef struct tdTPM_NV_DATA_PUBLIC {\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
+// Part 2, section 20: Delegate Structures\r
+//\r
 \r
+#define TPM_DEL_OWNER_BITS          ((UINT32)0x00000001)\r
+#define TPM_DEL_KEY_BITS            ((UINT32)0x00000002)\r
+///\r
+/// Part 2, section 20.2: Delegate Definitions\r
+///\r
+typedef struct tdTPM_DELEGATIONS {\r
+  TPM_STRUCTURE_TAG               tag;\r
+  UINT32                          delegateType;\r
+  UINT32                          per1;\r
+  UINT32                          per2;\r
+} TPM_DELEGATIONS;\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.3: 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_CMK_CreateTicket               (((UINT32)1)<<26)\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_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.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
+//\r
+// Part 2, section 20.2.1: Owner Permission Settings\r
+//\r
+#define TPM_DELEGATE_SetOrdinalAuditStatus          (BIT30)\r
+#define TPM_DELEGATE_DirWriteAuth                   (BIT29)\r
+#define TPM_DELEGATE_CMK_ApproveMA                  (BIT28)\r
+#define TPM_DELEGATE_NV_WriteValue                  (BIT27)\r
+#define TPM_DELEGATE_CMK_CreateTicket               (BIT26)\r
+#define TPM_DELEGATE_NV_ReadValue                   (BIT25)\r
+#define TPM_DELEGATE_Delegate_LoadOwnerDelegation   (BIT24)\r
+#define TPM_DELEGATE_DAA_Join                       (BIT23)\r
+#define TPM_DELEGATE_AuthorizeMigrationKey          (BIT22)\r
+#define TPM_DELEGATE_CreateMaintenanceArchive       (BIT21)\r
+#define TPM_DELEGATE_LoadMaintenanceArchive         (BIT20)\r
+#define TPM_DELEGATE_KillMaintenanceFeature         (BIT19)\r
+#define TPM_DELEGATE_OwnerReadInteralPub            (BIT18)\r
+#define TPM_DELEGATE_ResetLockValue                 (BIT17)\r
+#define TPM_DELEGATE_OwnerClear                     (BIT16)\r
+#define TPM_DELEGATE_DisableOwnerClear              (BIT15)\r
+#define TPM_DELEGATE_NV_DefineSpace                 (BIT14)\r
+#define TPM_DELEGATE_OwnerSetDisable                (BIT13)\r
+#define TPM_DELEGATE_SetCapability                  (BIT12)\r
+#define TPM_DELEGATE_MakeIdentity                   (BIT11)\r
+#define TPM_DELEGATE_ActivateIdentity               (BIT10)\r
+#define TPM_DELEGATE_OwnerReadPubek                 (BIT9)\r
+#define TPM_DELEGATE_DisablePubekRead               (BIT8)\r
+#define TPM_DELEGATE_SetRedirection                 (BIT7)\r
+#define TPM_DELEGATE_FieldUpgrade                   (BIT6)\r
+#define TPM_DELEGATE_Delegate_UpdateVerification    (BIT5)\r
+#define TPM_DELEGATE_CreateCounter                  (BIT4)\r
+#define TPM_DELEGATE_ReleaseCounterOwner            (BIT3)\r
+#define TPM_DELEGATE_DelegateManage                 (BIT2)\r
+#define TPM_DELEGATE_Delegate_CreateOwnerDelegation (BIT1)\r
+#define TPM_DELEGATE_DAA_Sign                       (BIT0)\r
+\r
+//\r
+// Part 2, section 20.2.3: Key Permission settings\r
+//\r
+#define TPM_KEY_DELEGATE_CMK_ConvertMigration       (BIT28)\r
+#define TPM_KEY_DELEGATE_TickStampBlob              (BIT27)\r
+#define TPM_KEY_DELEGATE_ChangeAuthAsymStart        (BIT26)\r
+#define TPM_KEY_DELEGATE_ChangeAuthAsymFinish       (BIT25)\r
+#define TPM_KEY_DELEGATE_CMK_CreateKey              (BIT24)\r
+#define TPM_KEY_DELEGATE_MigrateKey                 (BIT23)\r
+#define TPM_KEY_DELEGATE_LoadKey2                   (BIT22)\r
+#define TPM_KEY_DELEGATE_EstablishTransport         (BIT21)\r
+#define TPM_KEY_DELEGATE_ReleaseTransportSigned     (BIT20)\r
+#define TPM_KEY_DELEGATE_Quote2                     (BIT19)\r
+#define TPM_KEY_DELEGATE_Sealx                      (BIT18)\r
+#define TPM_KEY_DELEGATE_MakeIdentity               (BIT17)\r
+#define TPM_KEY_DELEGATE_ActivateIdentity           (BIT16)\r
+#define TPM_KEY_DELEGATE_GetAuditDigestSigned       (BIT15)\r
+#define TPM_KEY_DELEGATE_Sign                       (BIT14)\r
+#define TPM_KEY_DELEGATE_CertifyKey2                (BIT13)\r
+#define TPM_KEY_DELEGATE_CertifyKey                 (BIT12)\r
+#define TPM_KEY_DELEGATE_CreateWrapKey              (BIT11)\r
+#define TPM_KEY_DELEGATE_CMK_CreateBlob             (BIT10)\r
+#define TPM_KEY_DELEGATE_CreateMigrationBlob        (BIT9)\r
+#define TPM_KEY_DELEGATE_ConvertMigrationBlob       (BIT8)\r
+#define TPM_KEY_DELEGATE_CreateKeyDelegation        (BIT7)\r
+#define TPM_KEY_DELEGATE_ChangeAuth                 (BIT6)\r
+#define TPM_KEY_DELEGATE_GetPubKey                  (BIT5)\r
+#define TPM_KEY_DELEGATE_UnBind                     (BIT4)\r
+#define TPM_KEY_DELEGATE_Quote                      (BIT3)\r
+#define TPM_KEY_DELEGATE_Unseal                     (BIT2)\r
+#define TPM_KEY_DELEGATE_Seal                       (BIT1)\r
+#define TPM_KEY_DELEGATE_LoadKey                    (BIT0)\r
+\r
+//\r
+// Part 2, section 20.3: TPM_FAMILY_FLAGS\r
+//\r
+#define TPM_DELEGATE_ADMIN_LOCK           (BIT1)\r
+#define TPM_FAMFLAG_ENABLE                (BIT0)\r
+\r
+///\r
+/// Part 2, section 20.4: TPM_FAMILY_LABEL\r
+///\r
+typedef struct tdTPM_FAMILY_LABEL {\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
+///\r
+/// Part 2, section 20.5: TPM_FAMILY_TABLE_ENTRY\r
+///\r
+typedef struct tdTPM_FAMILY_TABLE_ENTRY {\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
+// Part 2, section 20.6: TPM_FAMILY_TABLE\r
+//\r
+#define TPM_NUM_FAMILY_TABLE_ENTRY_MIN 8\r
 \r
+typedef struct tdTPM_FAMILY_TABLE{\r
+  TPM_FAMILY_TABLE_ENTRY famTableRow[TPM_NUM_FAMILY_TABLE_ENTRY_MIN];\r
+} TPM_FAMILY_TABLE;\r
 \r
-typedef struct tdTPM_DELEGATE_LABEL\r
-{\r
-    UINT8                           label;\r
+///\r
+/// Part 2, section 20.7: TPM_DELEGATE_LABEL\r
+///\r
+typedef struct tdTPM_DELEGATE_LABEL {\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
+///\r
+/// Part 2, section 20.8: TPM_DELEGATE_PUBLIC\r
+///\r
+typedef struct tdTPM_DELEGATE_PUBLIC {\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
+///\r
+/// Part 2, section 20.9: TPM_DELEGATE_TABLE_ROW\r
+///\r
+typedef struct tdTPM_DELEGATE_TABLE_ROW {\r
+  TPM_STRUCTURE_TAG               tag;\r
+  TPM_DELEGATE_PUBLIC             pub;\r
+  TPM_SECRET                      authValue;\r
 } TPM_DELEGATE_TABLE_ROW;\r
 \r
-\r
+//\r
+// Part 2, section 20.10: TPM_DELEGATE_TABLE\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
+\r
+typedef struct tdTPM_DELEGATE_TABLE{\r
+  TPM_DELEGATE_TABLE_ROW delRow[TPM_NUM_DELEGATE_TABLE_ENTRY_MIN];\r
+} TPM_DELEGATE_TABLE;\r
+\r
+///\r
+/// Part 2, section 20.11: TPM_DELEGATE_SENSITIVE\r
+///\r
+typedef struct tdTPM_DELEGATE_SENSITIVE {\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
+///\r
+/// Part 2, section 20.12: TPM_DELEGATE_OWNER_BLOB\r
+///\r
+typedef struct tdTPM_DELEGATE_OWNER_BLOB {\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
+///\r
+/// Part 2, section 20.13: TTPM_DELEGATE_KEY_BLOB\r
+///\r
+typedef struct tdTPM_DELEGATE_KEY_BLOB {\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 20.14: TPM_FAMILY_OPERATION Values\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
 //\r
 // Part 2, section 21.1: TPM_CAPABILITY_AREA for GetCapability\r
 //\r
@@ -1728,9 +1975,19 @@ typedef struct tdTPM_DELEGATE_KEY_BLOB
 #define TPM_CAP_PROP_INPUT_BUFFER       ((TPM_CAPABILITY_AREA) 0x00000124)\r
 \r
 //\r
-// Part 2, section 21.6: TPM_CAP_VERSION_INFO\r
-//   [size_is(vendorSpecificSize)] BYTE* vendorSpecific;\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
+///\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
@@ -1741,10 +1998,57 @@ typedef struct tdTPM_CAP_VERSION_INFO {
   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
+//\r
+// Part 2, section 22.1: Size definitions\r
+//\r
 #define TPM_DAA_SIZE_r0                (43)\r
 #define TPM_DAA_SIZE_r1                (43)\r
 #define TPM_DAA_SIZE_r2                (128)\r
@@ -1756,66 +2060,80 @@ typedef struct tdTPM_CAP_VERSION_INFO {
 #define TPM_DAA_SIZE_NE                (256)\r
 #define TPM_DAA_SIZE_w                 (256)\r
 #define TPM_DAA_SIZE_issuerModulus     (256)\r
+//\r
+// Part 2, section 22.2: Constant definitions\r
+//\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
+///\r
+/// Part 2, section 22.3: TPM_DAA_ISSUER\r
+///\r
+typedef struct tdTPM_DAA_ISSUER {\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
+///\r
+/// Part 2, section 22.4: TPM_DAA_TPM\r
+///\r
+typedef struct tdTPM_DAA_TPM {\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
+///\r
+/// Part 2, section 22.5: TPM_DAA_CONTEXT\r
+///\r
+typedef struct tdTPM_DAA_CONTEXT {\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
+///\r
+/// Part 2, section 22.6: TPM_DAA_JOINDATA\r
+///\r
+typedef struct tdTPM_DAA_JOINDATA {\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
+///\r
+/// Part 2, section 22.8: TPM_DAA_BLOB\r
+///\r
+typedef struct tdTPM_DAA_BLOB {\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
+///\r
+/// Part 2, section 22.9: TPM_DAA_SENSITIVE\r
+///\r
+typedef struct tdTPM_DAA_SENSITIVE {\r
+  TPM_STRUCTURE_TAG               tag;\r
+  UINT32                          internalSize;\r
+  UINT8                           *internalData;\r
 } TPM_DAA_SENSITIVE;\r
 \r
 \r
@@ -1823,27 +2141,33 @@ typedef struct tdTPM_DAA_SENSITIVE
 // 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
+///\r
+/// Part 2 section 23.1: TPM_REDIR_COMMAND\r
+/// This section 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
+///\r
 #define TPM_REDIR_GPIO              (0x00000001)\r
 \r
-//\r
-// TPM Command & Response Headers\r
-//\r
+///\r
+/// TPM Command Headers defined in Part 3\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
+///\r
+/// TPM Response Headers defined in Part 3\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
-#pragma pack (pop)\r
+#pragma pack ()\r
 \r
-#endif  // _TPM12_H_\r
+#endif\r