13eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
23eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
36a8fb8bab5bbebf1f41508d9fed530738cc26d95rsunCopyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>
4f57387d54bd8f2c0261834b2ad16155f1db63291hhtianThis program and the accompanying materials
53eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangare licensed and made available under the terms and conditions of the BSD License
63eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangwhich accompanies this distribution.  The full text of the license may be found at
73eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwanghttp://opensource.org/licenses/bsd-license.php
83eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
93eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangModule Name:
133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Tpm12.h
153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangAbstract:
173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
183e99020dbf0a159e34b84e7ae9125f2e368d5390lgao  TPM Specification data structures (TCG TPM Specification Version 1.2 Revision 103)
193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  See http://trustedcomputinggroup.org for latest specification updates
213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#ifndef _TPM12_H_
253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define _TPM12_H_
263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Structures are all packed on 1-byte alignment
293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
31775bebc37223f6de7d648c77ea949944192a428eqwang#ifndef __GNUC__
323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#pragma pack (push)
333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#pragma pack (1)
34775bebc37223f6de7d648c77ea949944192a428eqwang#endif
353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 2.2: Basic types & Helper redefinitions
383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT8                       TPM_AUTH_DATA_USAGE;
403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT8                       TPM_PAYLOAD_TYPE;
413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT8                       TPM_VERSION_BYTE;
423e99020dbf0a159e34b84e7ae9125f2e368d5390lgaotypedef UINT8                       TPM_DA_STATE;
433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT16                      TPM_TAG;
443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT16                      TPM_PROTOCOL_ID;
453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT16                      TPM_STARTUP_TYPE;
463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT16                      TPM_ENC_SCHEME;
473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT16                      TPM_SIG_SCHEME;
483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT16                      TPM_MIGRATE_SCHEME;
493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT16                      TPM_PHYSICAL_PRESENCE;
503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT16                      TPM_ENTITY_TYPE;
513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT16                      TPM_KEY_USAGE;
523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT16                      TPM_EK_TYPE;
533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT16                      TPM_STRUCTURE_TAG;
543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT16                      TPM_PLATFORM_SPECIFIC;
553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_COMMAND_CODE;
563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_CAPABILITY_AREA;
573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_KEY_FLAGS;
583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_ALGORITHM_ID;
593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_MODIFIER_INDICATOR;
603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_ACTUAL_COUNT;
613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_TRANSPORT_ATTRIBUTES;
623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_AUTHHANDLE;
633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_DIRINDEX;
643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_KEY_HANDLE;
653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_PCRINDEX;
663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_RESULT;
673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_RESOURCE_TYPE;
683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_KEY_CONTROL;
693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_NV_INDEX;
703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_FAMILY_ID;
713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_FAMILY_VERIFICATION;
723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_STARTUP_EFFECTS;
733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_SYM_MODE;
743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_FAMILY_FLAGS;
753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_DELEGATE_INDEX;
763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_CMK_DELEGATE;
773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_COUNT_ID;
783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_REDIT_COMMAND;
793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_TRANSHANDLE;
803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_HANDLE;
813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32                      TPM_FAMILY_OPERATION;
823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 2.2.4: Vendor specific
853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// The following defines allow for the quick specification of a
863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// vendor specific item.
873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_Vendor_Specific32       ((UINT32) 0x00000400)
893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_Vendor_Specific8        ((UINT8) 0x80)
903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 3.1: Structure TAGs
933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_CONTEXTBLOB         ((TPM_STRUCTURE_TAG) 0x0001)
953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_CONTEXT_SENSITIVE   ((TPM_STRUCTURE_TAG) 0x0002)
963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_CONTEXTPOINTER      ((TPM_STRUCTURE_TAG) 0x0003)
973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_CONTEXTLIST         ((TPM_STRUCTURE_TAG) 0x0004)
983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_SIGNINFO            ((TPM_STRUCTURE_TAG) 0x0005)
993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_PCR_INFO_LONG       ((TPM_STRUCTURE_TAG) 0x0006)
1003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_PERSISTENT_FLAGS    ((TPM_STRUCTURE_TAG) 0x0007)
1013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_VOLATILE_FLAGS      ((TPM_STRUCTURE_TAG) 0x0008)
1023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_PERSISTENT_DATA     ((TPM_STRUCTURE_TAG) 0x0009)
1033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_VOLATILE_DATA       ((TPM_STRUCTURE_TAG) 0x000A)
1043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_SV_DATA             ((TPM_STRUCTURE_TAG) 0x000B)
1053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_EK_BLOB             ((TPM_STRUCTURE_TAG) 0x000C)
1063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_EK_BLOB_AUTH        ((TPM_STRUCTURE_TAG) 0x000D)
1073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_COUNTER_VALUE       ((TPM_STRUCTURE_TAG) 0x000E)
1083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_TRANSPORT_INTERNAL  ((TPM_STRUCTURE_TAG) 0x000F)
1093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_TRANSPORT_LOG_IN    ((TPM_STRUCTURE_TAG) 0x0010)
1103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_TRANSPORT_LOG_OUT   ((TPM_STRUCTURE_TAG) 0x0011)
1113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_AUDIT_EVENT_IN      ((TPM_STRUCTURE_TAG) 0x0012)
1123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_AUDIT_EVENT_OUT     ((TPM_STRUCTURE_TAG) 0x0013)
1133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_CURRENT_TICKS       ((TPM_STRUCTURE_TAG) 0x0014)
1143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_KEY                 ((TPM_STRUCTURE_TAG) 0x0015)
1153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_STORED_DATA12       ((TPM_STRUCTURE_TAG) 0x0016)
1163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_NV_ATTRIBUTES       ((TPM_STRUCTURE_TAG) 0x0017)
1173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_NV_DATA_PUBLIC      ((TPM_STRUCTURE_TAG) 0x0018)
1183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_NV_DATA_SENSITIVE   ((TPM_STRUCTURE_TAG) 0x0019)
1193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_DELEGATIONS         ((TPM_STRUCTURE_TAG) 0x001A)
1203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_DELEGATE_PUBLIC     ((TPM_STRUCTURE_TAG) 0x001B)
1213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_DELEGATE_TABLE_ROW  ((TPM_STRUCTURE_TAG) 0x001C)
1223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_TRANSPORT_AUTH      ((TPM_STRUCTURE_TAG) 0x001D)
1233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_TRANSPORT_PUBLIC    ((TPM_STRUCTURE_TAG) 0x001E)
1243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_PERMANENT_FLAGS     ((TPM_STRUCTURE_TAG) 0x001F)
1253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_STCLEAR_FLAGS       ((TPM_STRUCTURE_TAG) 0x0020)
1263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_STANY_FLAGS         ((TPM_STRUCTURE_TAG) 0x0021)
1273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_PERMANENT_DATA      ((TPM_STRUCTURE_TAG) 0x0022)
1283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_STCLEAR_DATA        ((TPM_STRUCTURE_TAG) 0x0023)
1293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_STANY_DATA          ((TPM_STRUCTURE_TAG) 0x0024)
1303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_FAMILY_TABLE_ENTRY  ((TPM_STRUCTURE_TAG) 0x0025)
1313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_DELEGATE_SENSITIVE  ((TPM_STRUCTURE_TAG) 0x0026)
1323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_DELG_KEY_BLOB       ((TPM_STRUCTURE_TAG) 0x0027)
1333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_KEY12               ((TPM_STRUCTURE_TAG) 0x0028)
1343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_CERTIFY_INFO2       ((TPM_STRUCTURE_TAG) 0x0029)
1353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_DELEGATE_OWNER_BLOB ((TPM_STRUCTURE_TAG) 0x002A)
1363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_EK_BLOB_ACTIVATE    ((TPM_STRUCTURE_TAG) 0x002B)
1373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_DAA_BLOB            ((TPM_STRUCTURE_TAG) 0x002C)
1383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_DAA_CONTEXT         ((TPM_STRUCTURE_TAG) 0x002D)
1393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_DAA_ENFORCE         ((TPM_STRUCTURE_TAG) 0x002E)
1403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_DAA_ISSUER          ((TPM_STRUCTURE_TAG) 0x002F)
1413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_CAP_VERSION_INFO    ((TPM_STRUCTURE_TAG) 0x0030)
1423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_DAA_SENSITIVE       ((TPM_STRUCTURE_TAG) 0x0031)
1433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_DAA_TPM             ((TPM_STRUCTURE_TAG) 0x0032)
1443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_CMK_MIGAUTH         ((TPM_STRUCTURE_TAG) 0x0033)
1453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_CMK_SIGTICKET       ((TPM_STRUCTURE_TAG) 0x0034)
1463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_CMK_MA_APPROVAL     ((TPM_STRUCTURE_TAG) 0x0035)
1473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_QUOTE_INFO2         ((TPM_STRUCTURE_TAG) 0x0036)
1483e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_TAG_DA_INFO             ((TPM_STRUCTURE_TAG) 0x0037)
1493e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_TAG_DA_LIMITED          ((TPM_STRUCTURE_TAG) 0x0038)
1503e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_TAG_DA_ACTION_TYPE      ((TPM_STRUCTURE_TAG) 0x0039)
1513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
1533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 4: TPM Types
1543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
1553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
1573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 4.1: TPM_RESOURCE_TYPE
1583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
1593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_RT_KEY                  ((TPM_RESOURCE_TYPE) 0x00000001) // The handle is a key handle and is the result of a LoadKey type operation
1603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#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
1613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_RT_HASH                 ((TPM_RESOURCE_TYPE) 0x00000003) // Reserved for hashes
1623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_RT_TRANS                ((TPM_RESOURCE_TYPE) 0x00000004) // The handle is for a transport session. Transport handles come from TPM_EstablishTransport
1633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_RT_CONTEXT              ((TPM_RESOURCE_TYPE) 0x00000005) // Resource wrapped and held outside the TPM using the context save/restore commands
1643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_RT_COUNTER              ((TPM_RESOURCE_TYPE) 0x00000006) // Reserved for counters
1653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#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
1663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_RT_DAA_TPM              ((TPM_RESOURCE_TYPE) 0x00000008) // The value is a DAA TPM specific blob
1673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_RT_DAA_V0               ((TPM_RESOURCE_TYPE) 0x00000009) // The value is a DAA V0 parameter
1683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_RT_DAA_V1               ((TPM_RESOURCE_TYPE) 0x0000000A) // The value is a DAA V1 parameter
1693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
1713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 4.2: TPM_PAYLOAD_TYPE
1723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
1733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PT_ASYM                 ((TPM_PAYLOAD_TYPE) 0x01) // The entity is an asymmetric key
1743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PT_BIND                 ((TPM_PAYLOAD_TYPE) 0x02) // The entity is bound data
1753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PT_MIGRATE              ((TPM_PAYLOAD_TYPE) 0x03) // The entity is a migration blob
1763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PT_MAINT                ((TPM_PAYLOAD_TYPE) 0x04) // The entity is a maintenance blob
1773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PT_SEAL                 ((TPM_PAYLOAD_TYPE) 0x05) // The entity is sealed data
1783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PT_MIGRATE_RESTRICTED   ((TPM_PAYLOAD_TYPE) 0x06) // The entity is a restricted-migration asymmetric key
1793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PT_MIGRATE_EXTERNAL     ((TPM_PAYLOAD_TYPE) 0x07) // The entity is a external migratable key
1803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PT_CMK_MIGRATE          ((TPM_PAYLOAD_TYPE) 0x08) // The entity is a CMK migratable blob
1813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PT_VENDOR_SPECIFIC      ((TPM_PAYLOAD_TYPE) 0x80) // 0x80 - 0xFF Vendor specific payloads
1823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
1843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 4.3: TPM_ENTIRY_TYPE
1853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
1863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ET_KEYHANDLE            ((UINT16) 0x0001) // The entity is a keyHandle or key
1873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ET_OWNER                ((UINT16) 0x0002) // The entity is the TPM Owner
1883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ET_DATA                 ((UINT16) 0x0003) // The entity is some data
1893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ET_SRK                  ((UINT16) 0x0004) // The entity is the SRK
1903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ET_KEY                  ((UINT16) 0x0005) // The entity is a key or keyHandle
1913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ET_REVOKE               ((UINT16) 0x0006) // The entity is the RevokeTrust value
1923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ET_DEL_OWNER_BLOB       ((UINT16) 0x0007) // The entity is a delegate owner blob
1933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ET_DEL_ROW              ((UINT16) 0x0008) // The entity is a delegate row
1943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ET_DEL_KEY_BLOB         ((UINT16) 0x0009) // The entity is a delegate key blob
1953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ET_COUNTER              ((UINT16) 0x000A) // The entity is a counter
1963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ET_NV                   ((UINT16) 0x000B) // The entity is a NV index
1973e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_ET_OPERATOR             ((UINT16) 0x000C) // The entity is the operator
1983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ET_RESERVED_HANDLE      ((UINT16) 0x0040) // Reserved. This value avoids collisions with the handle MSB setting.
1993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// TPM_ENTITY_TYPE MSB Values: The MSB is used to indicate the ADIP encryption sheme when applicable
2013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ET_XOR                  ((UINT16) 0x0000) // ADIP encryption scheme: XOR
2033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ET_AES128               ((UINT16) 0x0006) // ADIP encryption scheme: AES 128 bits
2043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 4.4.1: Reserved Key Handles
2073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KH_SRK                  ((TPM_KEY_HANDLE) 0x40000000) // The handle points to the SRK
2093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KH_OWNER                ((TPM_KEY_HANDLE) 0x40000001) // The handle points to the TPM Owner
2103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KH_REVOKE               ((TPM_KEY_HANDLE) 0x40000002) // The handle points to the RevokeTrust value
2113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KH_TRANSPORT            ((TPM_KEY_HANDLE) 0x40000003) // The handle points to the EstablishTransport static authorization
2123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KH_OPERATOR             ((TPM_KEY_HANDLE) 0x40000004) // The handle points to the Operator auth
2133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KH_ADMIN                ((TPM_KEY_HANDLE) 0x40000005) // The handle points to the delegation administration auth
2143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KH_EK                   ((TPM_KEY_HANDLE) 0x40000006) // The handle points to the PUBEK, only usable with TPM_OwnerReadInternalPub
2153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 4.5: TPM_STARTUP_TYPE
2183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ST_CLEAR                ((TPM_STARTUP_TYPE) 0x0001) // The TPM is starting up from a clean state
2203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ST_STATE                ((TPM_STARTUP_TYPE) 0x0002) // The TPM is starting up from a saved state
2213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ST_DEACTIVATED          ((TPM_STARTUP_TYPE) 0x0003) // The TPM is to startup and set the deactivated flag to TRUE
2223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 4.6: TPM_STATUP_EFFECTS
2253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// The table makeup is still an open issue.
2263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 4.7: TPM_PROTOCOL_ID
2303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PID_OIAP                ((TPM_PROTOCOL_ID) 0x0001) // The OIAP protocol.
2323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PID_OSAP                ((TPM_PROTOCOL_ID) 0x0002) // The OSAP protocol.
2333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PID_ADIP                ((TPM_PROTOCOL_ID) 0x0003) // The ADIP protocol.
2343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PID_ADCP                ((TPM_PROTOCOL_ID) 0x0004) // The ADCP protocol.
2353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PID_OWNER               ((TPM_PROTOCOL_ID) 0x0005) // The protocol for taking ownership of a TPM.
2363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PID_DSAP                ((TPM_PROTOCOL_ID) 0x0006) // The DSAP protocol
2373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PID_TRANSPORT           ((TPM_PROTOCOL_ID) 0x0007) // The transport protocol
2383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 4.8: TPM_ALGORITHM_ID
2413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   The TPM MUST support the algorithms TPM_ALG_RSA, TPM_ALG_SHA, TPM_ALG_HMAC,
2423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   TPM_ALG_MGF1
2433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ALG_RSA                 ((TPM_ALGORITHM_ID) 0x00000001) // The RSA algorithm.
2453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ALG_DES                 ((TPM_ALGORITHM_ID) 0x00000002) // The DES algorithm
2463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ALG_3DES                ((TPM_ALGORITHM_ID) 0x00000003) // The 3DES algorithm in EDE mode
2473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ALG_SHA                 ((TPM_ALGORITHM_ID) 0x00000004) // The SHA1 algorithm
2483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ALG_HMAC                ((TPM_ALGORITHM_ID) 0x00000005) // The RFC 2104 HMAC algorithm
2493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ALG_AES128              ((TPM_ALGORITHM_ID) 0x00000006) // The AES algorithm, key size 128
2503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ALG_MGF1                ((TPM_ALGORITHM_ID) 0x00000007) // The XOR algorithm using MGF1 to create a string the size of the encrypted block
2513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ALG_AES192              ((TPM_ALGORITHM_ID) 0x00000008) // AES, key size 192
2523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ALG_AES256              ((TPM_ALGORITHM_ID) 0x00000009) // AES, key size 256
2533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ALG_XOR                 ((TPM_ALGORITHM_ID) 0x0000000A) // XOR using the rolling nonces
2543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 4.9: TPM_PHYSICAL_PRESENCE
2573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PHYSICAL_PRESENCE_HW_DISABLE    ((TPM_PHYSICAL_PRESENCE) 0x0200) // Sets the physicalPresenceHWEnable to FALSE
2593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PHYSICAL_PRESENCE_CMD_DISABLE   ((TPM_PHYSICAL_PRESENCE) 0x0100) // Sets the physicalPresenceCMDEnable to FALSE
2603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PHYSICAL_PRESENCE_LIFETIME_LOCK ((TPM_PHYSICAL_PRESENCE) 0x0080) // Sets the physicalPresenceLifetimeLock to TRUE
2613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PHYSICAL_PRESENCE_HW_ENABLE     ((TPM_PHYSICAL_PRESENCE) 0x0040) // Sets the physicalPresenceHWEnable to TRUE
2623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PHYSICAL_PRESENCE_CMD_ENABLE    ((TPM_PHYSICAL_PRESENCE) 0x0020) // Sets the physicalPresenceCMDEnable to TRUE
2633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PHYSICAL_PRESENCE_NOTPRESENT    ((TPM_PHYSICAL_PRESENCE) 0x0010) // Sets PhysicalPresence = FALSE
2643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PHYSICAL_PRESENCE_PRESENT       ((TPM_PHYSICAL_PRESENCE) 0x0008) // Sets PhysicalPresence = TRUE
2653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PHYSICAL_PRESENCE_LOCK          ((TPM_PHYSICAL_PRESENCE) 0x0004) // Sets PhysicalPresenceLock = TRUE
2663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 4.10: TPM_MIGRATE_SCHEME
2693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_MS_MIGRATE                      ((TPM_MIGRATE_SCHEME) 0x0001) // A public key that can be used with all TPM migration commands other than 'ReWrap' mode.
2713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_MS_REWRAP                       ((TPM_MIGRATE_SCHEME) 0x0002) // A public key that can be used for the ReWrap mode of TPM_CreateMigrationBlob.
2723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_MS_MAINT                        ((TPM_MIGRATE_SCHEME) 0x0003) // A public key that can be used for the Maintenance commands
2733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_MS_RESTRICT_MIGRATE             ((TPM_MIGRATE_SCHEME) 0x0004) // The key is to be migrated to a Migration Authority.
2743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#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
2753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 4.11: TPM_EK_TYPE
2783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_EK_TYPE_ACTIVATE        ((TPM_EK_TYPE) 0x0001) // The blob MUST be TPM_EK_BLOB_ACTIVATE
2803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_EK_TYPE_AUTH            ((TPM_EK_TYPE) 0x0002) // The blob MUST be TPM_EK_BLOB_AUTH
2813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 4.12: TPM_PLATFORM_SPECIFIC
2843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PS_PC_11                ((TPM_PLATFORM_SPECIFIC) 0x0001) // PC Specific version 1.1
2863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PS_PC_12                ((TPM_PLATFORM_SPECIFIC) 0x0002) // PC Specific version 1.2
2873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PS_PDA_12               ((TPM_PLATFORM_SPECIFIC) 0x0003) // PDA Specific version 1.2
2883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PS_Server_12            ((TPM_PLATFORM_SPECIFIC) 0x0004) // Server Specific version 1.2
2893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PS_Mobile_12            ((TPM_PLATFORM_SPECIFIC) 0x0005) // Mobil Specific version 1.2
2903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5: Basic Structures
2933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.1: TPM_STRUCT_VER
2973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
2983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_STRUCT_VER {
2993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             major;
3003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             minor;
3013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             revMajor;
3023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             revMinor;
3033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_STRUCT_VER;
3043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
3063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.3: TPM_VERSION
3073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
3083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_VERSION {
3093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_VERSION_BYTE                  major;
3103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_VERSION_BYTE                  minor;
3113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             revMajor;
3123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             revMinor;
3133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_VERSION;
3143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
3163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.4: TPM_DIGEST
3173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
3183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_SHA1_160_HASH_LEN       0x14
3193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_SHA1BASED_NONCE_LEN     TPM_SHA1_160_HASH_LEN
3203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_DIGEST{
3223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             digest[TPM_SHA1_160_HASH_LEN];
3233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_DIGEST;
3243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef TPM_DIGEST                  TPM_CHOSENID_HASH; // This SHALL be the digest of the chosen identityLabel and privacyCA for a new TPM identity.
3263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef 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.
3273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef TPM_DIGEST                  TPM_DIRVALUE; // This SHALL be the value of a DIR register
3283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef TPM_DIGEST                  TPM_HMAC;
3293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef TPM_DIGEST                  TPM_PCRVALUE; // The value inside of the PCR
3303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef TPM_DIGEST                  TPM_AUDITDIGEST; // This SHALL be the value of the current internal audit state
3313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
3333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.5: TPM_NONCE
3343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
3353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_NONCE{
3363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             nonce[20];
3373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_NONCE;
3383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3393e99020dbf0a159e34b84e7ae9125f2e368d5390lgaotypedef TPM_NONCE                  TPM_DAA_TPM_SEED; // This SHALL be a random value generated by a TPM immediately after the EK is installed in that TPM, whenever an EK is installed in that TPM
3403e99020dbf0a159e34b84e7ae9125f2e368d5390lgaotypedef TPM_NONCE                  TPM_DAA_CONTEXT_SEED; // This SHALL be a random value
3413e99020dbf0a159e34b84e7ae9125f2e368d5390lgao
3423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
3433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.6: TPM_AUTHDATA
3443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
3453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT8                       tdTPM_AUTHDATA[20];
3463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef tdTPM_AUTHDATA              TPM_AUTHDATA;
3473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef TPM_AUTHDATA                TPM_SECRET;
3483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef TPM_AUTHDATA                TPM_ENCAUTH;
3493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
3513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.7: TPM_KEY_HANDLE_LIST
3523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Size of handle is loaded * sizeof(TPM_KEY_HANDLE)
3533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
3543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_KEY_HANDLE_LIST {
3553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT16                            loaded;
3563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_KEY_HANDLE                    handle[1];
3573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_KEY_HANDLE_LIST;
3583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
3603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.8: TPM_KEY_USAGE values
3613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
3623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_SIGNING             ((UINT16) 0x0010)
3643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// TPM_KEY_SIGNING SHALL indicate a signing key. The [private] key SHALL be
3653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// used for signing operations, only. This means that it MUST be a leaf of the
3663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Protected Storage key hierarchy.
3673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_STORAGE             ((UINT16) 0x0011)
3693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// TPM_KEY_STORAGE SHALL indicate a storage key. The key SHALL be used to wrap
3703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// and unwrap other keys in the Protected Storage hierarchy
3713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_IDENTITY            ((UINT16) 0x0012)
3733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// TPM_KEY_IDENTITY SHALL indicate an identity key. The key SHALL be used for
3743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// operations that require a TPM identity, only.
3753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_AUTHCHANGE          ((UINT16) 0x0013)
3773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// TPM_KEY_AUTHCHANGE SHALL indicate an ephemeral key that is in use during
3783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// the ChangeAuthAsym process, only.
3793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_BIND                ((UINT16) 0x0014)
3813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// TPM_KEY_BIND SHALL indicate a key that can be used for TPM_Bind and
3823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// TPM_Unbind operations only.
3833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_LEGACY              ((UINT16) 0x0015)
3853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// TPM_KEY_LEGACY SHALL indicate a key that can perform signing and binding
3863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// operations. The key MAY be used for both signing and binding operations.
3873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// The TPM_KEY_LEGACY key type is to allow for use by applications where both
3883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// signing and encryption operations occur with the same key. The use of this
3893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// key type is not recommended TPM_KEY_MIGRATE 0x0016 This SHALL indicate a
3903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// key in use for TPM_MigrateKey
3913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_MIGRATE             ((UINT16) 0x0016)
3933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// TPM_KEY_MIGRAGE SHALL indicate a key in use for TPM_MigrateKey
3943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
3963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.8.1: Encryption/Signature schemes
3973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
3983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ES_NONE                 ((TPM_ENC_SCHEME) 0x0001)
4003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ES_RSAESPKCSv15         ((TPM_ENC_SCHEME) 0x0002)
4013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ES_RSAESOAEP_SHA1_MGF1  ((TPM_ENC_SCHEME) 0x0003)
4023e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_ES_SYM_CNT              ((TPM_ENC_SCHEME) 0x0004)  // rev94 defined
4033e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_ES_SYM_CTR              ((TPM_ENC_SCHEME) 0x0004)
4043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ES_SYM_OFB              ((TPM_ENC_SCHEME) 0x0005)
4053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_SS_NONE                 ((TPM_SIG_SCHEME) 0x0001)
4073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_SS_RSASSAPKCS1v15_SHA1  ((TPM_SIG_SCHEME) 0x0002)
4083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_SS_RSASSAPKCS1v15_DER   ((TPM_SIG_SCHEME) 0x0003)
4093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_SS_RSASSAPKCS1v15_INFO  ((TPM_SIG_SCHEME) 0x0004)
4103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.9: TPM_AUTH_DATA_USAGE values
4133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_AUTH_NEVER              ((TPM_AUTH_DATA_USAGE) 0x00)
4153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_AUTH_ALWAYS             ((TPM_AUTH_DATA_USAGE) 0x01)
4163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_AUTH_PRIV_USE_ONLY      ((TPM_AUTH_DATA_USAGE) 0x03)
4173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.10: TPM_KEY_FLAGS
4203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangenum tdTPM_KEY_FLAGS {
4223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  redirection                       = 0x00000001,
4233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  migratable                        = 0x00000002,
4243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  isVolatile                        = 0x00000004,
4253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  pcrIgnoredOnRead                  = 0x00000008,
4263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  migrateAuthority                  = 0x00000010
4273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang};
4283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.11: TPM_CHANGEAUTH_VALIDATE
4313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_CHANGEAUTH_VALIDATE {
4333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_SECRET                        newAuthSecret;
4343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_NONCE                         n1;
4353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_CHANGEAUTH_VALIDATE;
4363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.12: TPM_MIGRATIONKEYAUTH
4393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   decalared after section 10 to catch declaration of TPM_PUBKEY
4403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2 section 10.1: TPM_KEY_PARMS
4423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   [size_is(parmSize)] BYTE* parms;
4433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_KEY_PARMS {
4453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_ALGORITHM_ID                  algorithmID;
4463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_ENC_SCHEME                    encScheme;
4473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_SIG_SCHEME                    sigScheme;
4483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                            parmSize;
4493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             *parms;
4503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_KEY_PARMS;
4513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 10.4: TPM_STORE_PUBKEY
4543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_STORE_PUBKEY {
4563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                            keyLength;
4573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             key[1];
4583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_STORE_PUBKEY;
4593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 10.5: TPM_PUBKEY
4623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_PUBKEY{
4643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_KEY_PARMS                     algorithmParms;
4653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STORE_PUBKEY                  pubKey;
4663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_PUBKEY;
4673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.12: TPM_MIGRATIONKEYAUTH
4703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_MIGRATIONKEYAUTH{
4723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_PUBKEY                        migrationKey;
4733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_MIGRATE_SCHEME                migrationScheme;
4743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_DIGEST                        digest;
4753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_MIGRATIONKEYAUTH;
4763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.13: TPM_COUNTER_VALUE
4793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_COUNTER_VALUE{
4813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STRUCTURE_TAG                 tag;
4823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             label[4];
4833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_ACTUAL_COUNT                  counter;
4843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_COUNTER_VALUE;
4853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.14: TPM_SIGN_INFO
4883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   Size of data indicated by dataLen
4893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_SIGN_INFO {
4913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STRUCTURE_TAG                 tag;
4923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             fixed[4];
4933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_NONCE                         replay;
4943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                            dataLen;
4953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             *data;
4963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_SIGN_INFO;
4973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
4983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
4993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.15: TPM_MSA_COMPOSITE
5003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   Number of migAuthDigest indicated by MSAlist
5013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
5023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_MSA_COMPOSITE {
5033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                            MSAlist;
5043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_DIGEST                        migAuthDigest[1];
5053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_MSA_COMPOSITE;
5063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
5073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
5083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.16: TPM_CMK_AUTH
5093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
5103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_CMK_AUTH{
5113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_DIGEST                        migrationAuthorityDigest;
5123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_DIGEST                        destinationKeyDigest;
5133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_DIGEST                        sourceKeyDigest;
5143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_CMK_AUTH;
5153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
5163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
5173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.17: TPM_CMK_DELEGATE
5183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
5193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CMK_DELEGATE_SIGNING    (((TPM_CMK_DELEGATE)1) << 31)
5203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CMK_DELEGATE_STORAGE    (((TPM_CMK_DELEGATE)1) << 30)
5213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CMK_DELEGATE_BIND       (((TPM_CMK_DELEGATE)1) << 29)
5223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CMK_DELEGATE_LEGACY     (((TPM_CMK_DELEGATE)1) << 28)
5233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CMK_DELEGATE_MIGRATE    (((TPM_CMK_DELEGATE)1) << 27)
5243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
5253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
5263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.18: TPM_SELECT_SIZE
5273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
5283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_SELECT_SIZE {
5293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             major;
5303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             minor;
5313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT16                            reqSize;
5323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_SELECT_SIZE;
5333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
5343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
5353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5,19: TPM_CMK_MIGAUTH
5363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
5373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_CMK_MIGAUTH{
5383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STRUCTURE_TAG                 tag;
5393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_DIGEST                        msaDigest;
5403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_DIGEST                        pubKeyDigest;
5413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_CMK_MIGAUTH;
5423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
5433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
5443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.20: TPM_CMK_SIGTICKET
5453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
5463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_CMK_SIGTICKET{
5473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STRUCTURE_TAG                 tag;
5483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_DIGEST                        verKeyDigest;
5493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_DIGEST                        signedData;
5503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_CMK_SIGTICKET;
5513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
5523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
5533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 5.21: TPM_CMK_MA_APPROVAL
5543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
5553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_CMK_MA_APPROVAL{
5563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STRUCTURE_TAG                 tag;
5573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_DIGEST                        migrationAuthorityDigest;
5583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_CMK_MA_APPROVAL;
5593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
5603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
5613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 6: Command Tags
5623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
5633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_RQU_COMMAND         ((TPM_STRUCTURE_TAG) 0x00C1)
5643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_RQU_AUTH1_COMMAND   ((TPM_STRUCTURE_TAG) 0x00C2)
5653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_RQU_AUTH2_COMMAND   ((TPM_STRUCTURE_TAG) 0x00C3)
5663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_RSP_COMMAND         ((TPM_STRUCTURE_TAG) 0x00C4)
5673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_RSP_AUTH1_COMMAND   ((TPM_STRUCTURE_TAG) 0x00C5)
5683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TAG_RSP_AUTH2_COMMAND   ((TPM_STRUCTURE_TAG) 0x00C6)
5693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
5703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
5713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 7.1: TPM_PERMANENT_FLAGS
5723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
5733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_PERMANENT_FLAGS{
5743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STRUCTURE_TAG                 tag;
5753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           disable;
5763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           ownership;
5773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           deactivated;
5783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           readPubek;
5793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           disableOwnerClear;
5803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           allowMaintenance;
5813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           physicalPresenceLifetimeLock;
5823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           physicalPresenceHWEnable;
5833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           physicalPresenceCMDEnable;
5843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           CEKPUsed;
5853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           TPMpost;
5863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           TPMpostLock;
5873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           FIPS;
5883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           operator;
5893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           enableRevokeEK;
5903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           nvLocked;
5913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           readSRKPub;
5923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           tpmEstablished;
5933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           maintenanceDone;
5943e99020dbf0a159e34b84e7ae9125f2e368d5390lgao  BOOLEAN                           disableFullDALogicInfo;
5953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_PERMANENT_FLAGS;
5963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
5973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
5983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 7.1.1: PERMANENT_FLAGS Subcap for SetCapability
5993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
6003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_DISABLE                      ((TPM_CAPABILITY_AREA) 1)
6013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_OWNERSHIP                    ((TPM_CAPABILITY_AREA) 2)
6023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_DEACTIVATED                  ((TPM_CAPABILITY_AREA) 3)
6033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_READPUBEK                    ((TPM_CAPABILITY_AREA) 4)
6043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_DISABLEOWNERCLEAR            ((TPM_CAPABILITY_AREA) 5)
6053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_ALLOWMAINTENANCE             ((TPM_CAPABILITY_AREA) 6)
6063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_PHYSICALPRESENCELIFETIMELOCK ((TPM_CAPABILITY_AREA) 7)
6073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_PHYSICALPRESENCEHWENABLE     ((TPM_CAPABILITY_AREA) 8)
6083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_PHYSICALPRESENCECMDENABLE    ((TPM_CAPABILITY_AREA) 9)
6093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_CEKPUSED                     ((TPM_CAPABILITY_AREA) 10)
6103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_TPMPOST                      ((TPM_CAPABILITY_AREA) 11)
6113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_TPMPOSTLOCK                  ((TPM_CAPABILITY_AREA) 12)
6123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_FIPS                         ((TPM_CAPABILITY_AREA) 13)
6133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_OPERATOR                     ((TPM_CAPABILITY_AREA) 14)
6143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_ENABLEREVOKEEK               ((TPM_CAPABILITY_AREA) 15)
6153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_NV_LOCKED                    ((TPM_CAPABILITY_AREA) 16)
6163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_READSRKPUB                   ((TPM_CAPABILITY_AREA) 17)
6173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_TPMESTABLISHED               ((TPM_CAPABILITY_AREA) 18)
6183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PF_MAINTENANCEDONE              ((TPM_CAPABILITY_AREA) 19)
6193e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PF_DISABLEFULLDALOGICINFO       ((TPM_CAPABILITY_AREA) 20)
6203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
6213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
6223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 7.2: TPM_STCLEAR_FLAGS
6233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
6243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_STCLEAR_FLAGS{
6253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STRUCTURE_TAG                 tag;
6263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           deactivated;
6273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           disableForceClear;
6283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           physicalPresence;
6293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           physicalPresenceLock;
6303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           bGlobalLock;
6313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_STCLEAR_FLAGS;
6323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
6333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
6343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 7.2.1: STCLEAR_FLAGS Subcap for SetCapability
6353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
6363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_SF_DEACTIVATED          ((TPM_CAPABILITY_AREA) 1)
6373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_SF_DISABLEFORCECLEAR    ((TPM_CAPABILITY_AREA) 2)
6383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_SF_PHYSICALPRESENCE     ((TPM_CAPABILITY_AREA) 3)
6393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_SF_PHYSICALPRESENCELOCK ((TPM_CAPABILITY_AREA) 4)
6403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_SF_BGLOBALLOCK          ((TPM_CAPABILITY_AREA) 5)
6413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
6423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
6433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 7.3: TPM_STANY_FLAGS
6443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
6453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_STANY_FLAGS{
6463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STRUCTURE_TAG                 tag;
6473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           postInitialise;
6483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_MODIFIER_INDICATOR            localityModifier;
6493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           transportExclusive;
6503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           TOSPresent;
6513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_STANY_FLAGS;
6523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
6533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
6543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 7.3.1: STANY_FLAGS Subcap for SetCapability
6553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
6563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_AF_POSTINITIALISE       ((TPM_CAPABILITY_AREA) 1)
6573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_AF_LOCALITYMODIFIER     ((TPM_CAPABILITY_AREA) 2)
6583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_AF_TRANSPORTEXCLUSIVE   ((TPM_CAPABILITY_AREA) 3)
6593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_AF_TOSPRESENT           ((TPM_CAPABILITY_AREA) 4)
6603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
6613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
6623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// All those structures (section 7.4, 7.5, 7.6) are not normative and
6633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// thus no definitions here
6643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
6653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 7.4: TPM_PERMANENT_DATA
6663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
6673e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_MIN_COUNTERS            4   // the minimum number of counters is 4
6683e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_DELEGATE_KEY            TPM_KEY
6693e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_NUM_PCR                 16
6703e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_MAX_NV_WRITE_NOOWNER    64
6713e99020dbf0a159e34b84e7ae9125f2e368d5390lgao
6723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//typedef struct tdTPM_PERMANENT_DATA
6733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//{
6743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_STRUCTURE_TAG               tag;
6753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    UINT8                           revMajor;
6763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    UINT8                           revMinor;
6773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_NONCE                       tpmProof;
6783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_NONCE                       ekReset;
6793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_SECRET                      ownerAuth;
6803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_SECRET                      operatorAuth;
6813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_DIRVALUE                    authDIR[1];
6823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_PUBKEY                      manuMaintPub;
6833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_KEY                         endorsementKey;
6843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_KEY                         srk;
6853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_KEY                         contextKey;
6863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_KEY                         delegateKey;
6873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_COUNTER_VALUE               auditMonotonicCounter;
6883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_COUNTER_VALUE               monitonicCounter[TPM_MIN_COUNTERS];
6893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_PCR_ATTRIBUTES              pcrAttrib[TPM_NUM_PCR];
6903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    UINT8                           ordinalAuditStatus[];
6913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    UINT8                           *rngState;
6923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_FAMILY_TABLE                familyTable;
6933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_DELEGATE_TABLE              delegateTable;
6943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    UINT32                          maxNVBufSize;
6953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    UINT32                          lastFamilyID;
6963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    UINT32                          noOwnerNVWrite;
6973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_CMK_DELEGATE                restrictDelegate;
6983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_DAA_TPM_SEED                tpmDAASeed;
6993e99020dbf0a159e34b84e7ae9125f2e368d5390lgao//    TPM_NONCE                       daaProff;
7003e99020dbf0a159e34b84e7ae9125f2e368d5390lgao//    TPM_KEY                         daaBlobKey;
7013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//} TPM_PERMANENT_DATA;
7023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
7033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
7043e99020dbf0a159e34b84e7ae9125f2e368d5390lgao// Part 2, section 7.4.1: PERMANENT_DATA Subcap for SetCapability
7053e99020dbf0a159e34b84e7ae9125f2e368d5390lgao//
7063e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_REVMAJOR               ((TPM_CAPABILITY_AREA) 1)
7073e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_REVMINOR               ((TPM_CAPABILITY_AREA) 2)
7083e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_TPMPROOF               ((TPM_CAPABILITY_AREA) 3)
7093e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_OWNERAUTH              ((TPM_CAPABILITY_AREA) 4)
7103e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_OPERATORAUTH           ((TPM_CAPABILITY_AREA) 5)
7113e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_MANUMAINTPUB           ((TPM_CAPABILITY_AREA) 6)
7123e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_ENDORSEMENTKEY         ((TPM_CAPABILITY_AREA) 7)
7133e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_SRK                    ((TPM_CAPABILITY_AREA) 8)
7143e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_DELEGATEKEY            ((TPM_CAPABILITY_AREA) 9)
7153e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_CONTEXTKEY             ((TPM_CAPABILITY_AREA) 10)
7163e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_AUDITMONOTONICCOUNTER  ((TPM_CAPABILITY_AREA) 11)
7173e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_MONOTONICCOUNTER       ((TPM_CAPABILITY_AREA) 12)
7183e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_PCRATTRIB              ((TPM_CAPABILITY_AREA) 13)
7193e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_ORDINALAUDITSTATUS     ((TPM_CAPABILITY_AREA) 14)
7203e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_AUTHDIR                ((TPM_CAPABILITY_AREA) 15)
7213e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_RNGSTATE               ((TPM_CAPABILITY_AREA) 16)
7223e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_FAMILYTABLE            ((TPM_CAPABILITY_AREA) 17)
7233e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_DELEGATETABLE             ((TPM_CAPABILITY_AREA) 18)
7243e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_EKRESET                ((TPM_CAPABILITY_AREA) 19)
7253e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_MAXNVBUFSIZE           ((TPM_CAPABILITY_AREA) 20)
7263e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_LASTFAMILYID           ((TPM_CAPABILITY_AREA) 21)
7273e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_NOOWNERNVWRITE         ((TPM_CAPABILITY_AREA) 22)
7283e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_RESTRICTDELEGATE       ((TPM_CAPABILITY_AREA) 23)
7293e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_TPMDAASEED             ((TPM_CAPABILITY_AREA) 24)
7303e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_PD_DAAPROOF               ((TPM_CAPABILITY_AREA) 25)
7313e99020dbf0a159e34b84e7ae9125f2e368d5390lgao
7323e99020dbf0a159e34b84e7ae9125f2e368d5390lgao//
7333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 7.5: TPM_STCLEAR_DATA
7343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   available inside TPM only
7353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
7363e99020dbf0a159e34b84e7ae9125f2e368d5390lgao typedef struct tdTPM_STCLEAR_DATA{
7373e99020dbf0a159e34b84e7ae9125f2e368d5390lgao   TPM_STRUCTURE_TAG                  tag;
7383e99020dbf0a159e34b84e7ae9125f2e368d5390lgao   TPM_NONCE                          contextNonceKey;
7393e99020dbf0a159e34b84e7ae9125f2e368d5390lgao   TPM_COUNT_ID                       countID;
7403e99020dbf0a159e34b84e7ae9125f2e368d5390lgao   UINT32                             ownerReference;
7413e99020dbf0a159e34b84e7ae9125f2e368d5390lgao   BOOLEAN                            disableResetLock;
7423e99020dbf0a159e34b84e7ae9125f2e368d5390lgao   TPM_PCRVALUE                       PCR[TPM_NUM_PCR];
7433e99020dbf0a159e34b84e7ae9125f2e368d5390lgao   UINT32                             deferredPhysicalPresence;
7443e99020dbf0a159e34b84e7ae9125f2e368d5390lgao }TPM_STCLEAR_DATA;
7453e99020dbf0a159e34b84e7ae9125f2e368d5390lgao
7463e99020dbf0a159e34b84e7ae9125f2e368d5390lgao//
7473e99020dbf0a159e34b84e7ae9125f2e368d5390lgao// Part 2, section 7.5.1: STCLEAR_DATA Subcap for SetCapability
7483e99020dbf0a159e34b84e7ae9125f2e368d5390lgao//
7493e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_SD_CONTEXTNONCEKEY            ((TPM_CAPABILITY_AREA)0x00000001)
7503e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_SD_COUNTID                    ((TPM_CAPABILITY_AREA)0x00000002)
7513e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_SD_OWNERREFERENCE             ((TPM_CAPABILITY_AREA)0x00000003)
7523e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_SD_DISABLERESETLOCK           ((TPM_CAPABILITY_AREA)0x00000004)
7533e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_SD_PCR                        ((TPM_CAPABILITY_AREA)0x00000005)
7543e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_SD_DEFERREDPHYSICALPRESENCE   ((TPM_CAPABILITY_AREA)0x00000006)
7553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
7563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
7573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 7.6: TPM_STANY_DATA
7583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   available inside TPM only
7593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
7603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//typedef struct tdTPM_STANY_DATA
7613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//{
7623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_STRUCTURE_TAG               tag;
7633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_NONCE                       contextNonceSession;
7643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_DIGEST                      auditDigest;
7653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_CURRENT_TICKS               currentTicks;
7663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    UINT32                          contextCount;
7673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    UINT32                          contextList[TPM_MIN_SESSION_LIST];
7683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_SESSION_DATA                sessions[TPM_MIN_SESSIONS];
7693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//} TPM_STANY_DATA;
7703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
7713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
7723e99020dbf0a159e34b84e7ae9125f2e368d5390lgao// Part 2, section 7.6.1: STANY_DATA Subcap for SetCapability
7733e99020dbf0a159e34b84e7ae9125f2e368d5390lgao//
7743e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_AD_CONTEXTNONCESESSION        ((TPM_CAPABILITY_AREA) 1)
7753e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_AD_AUDITDIGEST                ((TPM_CAPABILITY_AREA) 2)
7763e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_AD_CURRENTTICKS               ((TPM_CAPABILITY_AREA) 3)
7773e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_AD_CONTEXTCOUNT               ((TPM_CAPABILITY_AREA) 4)
7783e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_AD_CONTEXTLIST                ((TPM_CAPABILITY_AREA) 5)
7793e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_AD_SESSIONS                   ((TPM_CAPABILITY_AREA) 6)
7803e99020dbf0a159e34b84e7ae9125f2e368d5390lgao
7813e99020dbf0a159e34b84e7ae9125f2e368d5390lgao//
7823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 8: PCR Structures
7833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
7843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
7853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
7863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 8.1: TPM_PCR_SELECTION
7873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   Size of pcrSelect[] indicated by sizeOfSelect
7883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
7893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_PCR_SELECTION {
7903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT16                            sizeOfSelect;
7913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             pcrSelect[1];
7923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_PCR_SELECTION;
7933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
7943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
7953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 8.2: TPM_PCR_COMPOSITE
7963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   Size of pcrValue[] indicated by valueSize
7973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
7983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_PCR_COMPOSITE {
7993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_PCR_SELECTION                 select;
8003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                            valueSize;
8013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_PCRVALUE                      pcrValue[1];
8023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_PCR_COMPOSITE;
8033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
8043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
8053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 8.3: TPM_PCR_INFO
8063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
8073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_PCR_INFO {
8083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_PCR_SELECTION                 pcrSelection;
8093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_COMPOSITE_HASH                digestAtRelease;
8103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_COMPOSITE_HASH                digestAtCreation;
8113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_PCR_INFO;
8123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
8133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
8143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 8.6: TPM_LOCALITY_SELECTION
8153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
8163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT8                       TPM_LOCALITY_SELECTION;
8173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
8183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_LOC_FOUR                ((UINT8) 0x10)
8193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_LOC_THREE               ((UINT8) 0x08)
8203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_LOC_TWO                 ((UINT8) 0x04)
8213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_LOC_ONE                 ((UINT8) 0x02)
8223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_LOC_ZERO                ((UINT8) 0x01)
8233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
8243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
8253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 8.4: TPM_PCR_INFO_LONG
8263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
8273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_PCR_INFO_LONG {
8283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STRUCTURE_TAG                 tag;
8293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_LOCALITY_SELECTION            localityAtCreation;
8303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_LOCALITY_SELECTION            localityAtRelease;
8313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_PCR_SELECTION                 creationPCRSelection;
8323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_PCR_SELECTION                 releasePCRSelection;
8333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_COMPOSITE_HASH                digestAtCreation;
8343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_COMPOSITE_HASH                digestAtRelease;
8353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_PCR_INFO_LONG;
8363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
8373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
8383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 8.5: TPM_PCR_INFO_SHORT
8393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
8403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_PCR_INFO_SHORT{
8413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_PCR_SELECTION                 pcrSelection;
8423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_LOCALITY_SELECTION            localityAtRelease;
8433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_COMPOSITE_HASH                digestAtRelease;
8443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_PCR_INFO_SHORT;
8453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
8463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
8473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 8.8: TPM_PCR_ATTRIBUTES
8483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
8493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_PCR_ATTRIBUTES{
8503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  BOOLEAN                           pcrReset;
8513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_LOCALITY_SELECTION            pcrExtendLocal;
8523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_LOCALITY_SELECTION            pcrResetLocal;
8533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_PCR_ATTRIBUTES;
8543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
8553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
8563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 9: Storage Structures
8573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
8583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
8593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
8603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 9.1: TPM_STORED_DATA
8613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   [size_is(sealInfoSize)] BYTE* sealInfo;
8623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   [size_is(encDataSize)] BYTE* encData;
8633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
8643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_STORED_DATA {
8653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STRUCT_VER                    ver;
8663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                            sealInfoSize;
8673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             *sealInfo;
8683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                            encDataSize;
8693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             *encData;
8703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_STORED_DATA;
8713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
8723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
8733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 9.2: TPM_STORED_DATA12
8743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   [size_is(sealInfoSize)] BYTE* sealInfo;
8753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   [size_is(encDataSize)] BYTE* encData;
8763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
8773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_STORED_DATA12 {
8783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STRUCTURE_TAG                 tag;
8793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_ENTITY_TYPE                   et;
8803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                            sealInfoSize;
8813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             *sealInfo;
8823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                            encDataSize;
8833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             *encData;
8843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_STORED_DATA12;
8853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
8863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
8873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 9.3: TPM_SEALED_DATA
8883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   [size_is(dataSize)] BYTE* data;
8893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
8903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_SEALED_DATA {
8913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_PAYLOAD_TYPE                  payload;
8923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_SECRET                        authData;
8933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_NONCE                         tpmProof;
8943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_DIGEST                        storedDigest;
8953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                            dataSize;
8963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             *data;
8973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_SEALED_DATA;
8983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
8993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 9.4: TPM_SYMMETRIC_KEY
9013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   [size_is(size)] BYTE* data;
9023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_SYMMETRIC_KEY {
9043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_ALGORITHM_ID                  algId;
9053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_ENC_SCHEME                    encScheme;
9063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT16                            dataSize;
9073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             *data;
9083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_SYMMETRIC_KEY;
9093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
9103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 9.5: TPM_BOUND_DATA
9123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_BOUND_DATA {
9143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STRUCT_VER                    ver;
9153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_PAYLOAD_TYPE                  payload;
9163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             payloadData[1];
9173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_BOUND_DATA;
9183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
9193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2 section 10: TPM_KEY complex
9213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
9233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 10.2: TPM_KEY
9253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   [size_is(encDataSize)] BYTE* encData;
9263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_KEY{
9283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STRUCT_VER                    ver;
9293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_KEY_USAGE                     keyUsage;
9303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_KEY_FLAGS                     keyFlags;
9313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_AUTH_DATA_USAGE               authDataUsage;
9323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_KEY_PARMS                     algorithmParms;
9333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                            PCRInfoSize;
9343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             *PCRInfo;
9353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STORE_PUBKEY                  pubKey;
9363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                            encDataSize;
9373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             *encData;
9383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_KEY;
9393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
9403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 10.3: TPM_KEY12
9423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   [size_is(encDataSize)] BYTE* encData;
9433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_KEY12{
9453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STRUCTURE_TAG                 tag;
9463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT16                            fill;
9473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_KEY_USAGE                     keyUsage;
9483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_KEY_FLAGS                     keyFlags;
9493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_AUTH_DATA_USAGE               authDataUsage;
9503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_KEY_PARMS                     algorithmParms;
9513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                            PCRInfoSize;
9523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             *PCRInfo;
9533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STORE_PUBKEY                  pubKey;
9543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                            encDataSize;
9553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             *encData;
9563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_KEY12;
9573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
9583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 10.7: TPM_STORE_PRIVKEY
9603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   [size_is(keyLength)] BYTE* key;
9613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_STORE_PRIVKEY {
9633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                            keyLength;
9643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             *key;
9653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_STORE_PRIVKEY;
9663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
9673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 10.6: TPM_STORE_ASYMKEY
9693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_STORE_ASYMKEY {                // pos len total
9713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_PAYLOAD_TYPE                  payload;        // 0    1   1
9723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_SECRET                        usageAuth;      // 1    20  21
9733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_SECRET                        migrationAuth;  // 21   20  41
9743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_DIGEST                        pubDataDigest;  // 41   20  61
9753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STORE_PRIVKEY                 privKey;        // 61 132-151 193-214
9763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_STORE_ASYMKEY;
9773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
9783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 10.8: TPM_MIGRATE_ASYMKEY
9803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   [size_is(partPrivKeyLen)] BYTE* partPrivKey;
9813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_MIGRATE_ASYMKEY {              // pos  len  total
9833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_PAYLOAD_TYPE                  payload;        //   0    1       1
9843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_SECRET                        usageAuth;      //   1   20      21
9853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_DIGEST                        pubDataDigest;  //  21   20      41
9863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                            partPrivKeyLen; //  41    4      45
9873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             *partPrivKey;   //  45 112-127 157-172
9883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_MIGRATE_ASYMKEY;
9893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
9903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 10.9: TPM_KEY_CONTROL
9923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_CONTROL_OWNER_EVICT ((UINT32) 0x00000001)
9943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
9953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 11: Signed Structures
9973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
9983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
9993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_CERTIFY_INFO
10003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
10013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCT_VER                  version;
10023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_KEY_USAGE                   keyUsage;
10033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_KEY_FLAGS                   keyFlags;
10043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_AUTH_DATA_USAGE             authDataUsage;
10053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_KEY_PARMS                   algorithmParms;
10063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      pubkeyDigest;
10073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_NONCE                       data;
10083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    BOOLEAN                         parentPCRStatus;
10093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          PCRInfoSize;
10103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *PCRInfo;
10113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_CERTIFY_INFO;
10123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
10133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_CERTIFY_INFO2
10143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
10153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
10163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           fill;
10173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_PAYLOAD_TYPE                payloadType;
10183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_KEY_USAGE                   keyUsage;
10193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_KEY_FLAGS                   keyFlags;
10203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_AUTH_DATA_USAGE             authDataUsage;
10213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_KEY_PARMS                   algorithmParms;
10223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      pubkeyDigest;
10233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_NONCE                       data;
10243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    BOOLEAN                         parentPCRStatus;
10253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          PCRInfoSize;
10263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *PCRInfo;
10273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          migrationAuthoritySize;
10283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *migrationAuthority;
10293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_CERTIFY_INFO2;
10303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
10313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_QUOTE_INFO
10323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
10333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCT_VER                  version;
10343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           fixed[4];
10353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_COMPOSITE_HASH              digestValue;
10363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_NONCE                       externalData;
10373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_QUOTE_INFO;
10383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
10393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_QUOTE_INFO2
10403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
10413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
10423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           fixed[4];
10433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_NONCE                       externalData;
10443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_PCR_INFO_SHORT              infoShort;
10453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_QUOTE_INFO2;
10463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
10473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
10483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 12: Identity Structures
10493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
10503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
10513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_EK_BLOB
10523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
10533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
10543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_EK_TYPE                     ekType;
10553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          blobSize;
10563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *blob;
10573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_EK_BLOB;
10583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
10593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_EK_BLOB_ACTIVATE
10603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
10613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
10623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_SYMMETRIC_KEY               sessionKey;
10633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      idDigest;
10643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_PCR_INFO_SHORT              pcrInfo;
10653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_EK_BLOB_ACTIVATE;
10663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
10673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_EK_BLOB_AUTH
10683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
10693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
10703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_SECRET                      authValue;
10713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_EK_BLOB_AUTH;
10723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
10733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
10743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_IDENTITY_CONTENTS
10753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
10763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCT_VER                  ver;
10773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          ordinal;
10783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_CHOSENID_HASH               labelPrivCADigest;
10793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_PUBKEY                      identityPubKey;
10803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_IDENTITY_CONTENTS;
10813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
10823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_IDENTITY_REQ
10833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
10843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          asymSize;
10853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          symSize;
10863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_KEY_PARMS                   asymAlgorithm;
10873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_KEY_PARMS                   symAlgorithm;
10883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *asymBlob;
10893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *symBlob;
10903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_IDENTITY_REQ;
10913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
10923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_IDENTITY_PROOF
10933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
10943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCT_VER                  ver;
10953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          labelSize;
10963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          identityBindingSize;
10973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          endorsementSize;
10983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          platformSize;
10993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          conformanceSize;
11003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_PUBKEY                      identityKey;
11013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *labelArea;
11023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *identityBinding;
11033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *endorsementCredential;
11043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *platformCredential;
11053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *conformanceCredential;
11063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_IDENTITY_PROOF;
11073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
11083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_ASYM_CA_CONTENTS
11093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
11103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_SYMMETRIC_KEY               sessionKey;
11113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      idDigest;
11123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_ASYM_CA_CONTENTS;
11133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
11143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_SYM_CA_ATTESTATION
11153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
11163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          credSize;
11173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_KEY_PARMS                   algorithm;
11183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *credential;
11193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_SYM_CA_ATTESTATION;
11203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
11213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
11223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 15: TPM_CURRENT_TICKS
11233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   Placed here out of order because definitions are used in section 13.
11243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
11253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_CURRENT_TICKS {
11263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STRUCTURE_TAG                 tag;
11273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT64                            currentTicks;
11283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT16                            tickRate;
11293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_NONCE                         tickNonce;
11303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_CURRENT_TICKS;
11313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
11323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
11333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 13: Transport structures
11343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
11353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
11363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TRANSPORT_ENCRYPT       ((UINT32)0x00000001)
11373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TRANSPORT_LOG           ((UINT32)0x00000002)
11383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TRANSPORT_EXCLUSIVE     ((UINT32)0x00000004)
11393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
11403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_TRANSPORT_PUBLIC
11413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
11423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
11433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_TRANSPORT_ATTRIBUTES        transAttributes;
11443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_ALGORITHM_ID                algId;
11453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_ENC_SCHEME                  encScheme;
11463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_TRANSPORT_PUBLIC;
11473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
11483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_TRANSPORT_INTERNAL
11493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
11503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
11513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_AUTHDATA                    authData;
11523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_TRANSPORT_PUBLIC            transPublic;
11533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_TRANSHANDLE                 transHandle;
11543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_NONCE                       transNonceEven;
11553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      transDigest;
11563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_TRANSPORT_INTERNAL;
11573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
11583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_TRANSPORT_LOG_IN
11593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
11603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
11613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      parameters;
11623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      pubKeyHash;
11633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_TRANSPORT_LOG_IN;
11643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
11653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_TRANSPORT_LOG_OUT
11663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
11673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
11683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_CURRENT_TICKS               currentTicks;
11693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      parameters;
11703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_MODIFIER_INDICATOR          locality;
11713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_TRANSPORT_LOG_OUT;
11723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
11733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_TRANSPORT_AUTH
11743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
11753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
11763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_AUTHDATA                    authData;
11773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_TRANSPORT_AUTH;
11783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
11793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
11803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 14: Audit Structures
11813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
11823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
11833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_AUDIT_EVENT_IN
11843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
11853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
11863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      inputParms;
11873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_COUNTER_VALUE               auditCount;
11883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_AUDIT_EVENT_IN;
11893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
11903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_AUDIT_EVENT_OUT
11913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
11923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
11933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_COMMAND_CODE                ordinal;
11943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      outputParms;
11953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_COUNTER_VALUE               auditCount;
11963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_RESULT                      returnCode;
11973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_AUDIT_EVENT_OUT;
11983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
11993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
12003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 16: Return Codes
12013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
12023e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#ifndef TPM_BASE
12033e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#error "TPM Error Codes require definition of TPM_BASE"
12043e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#endif
12053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
12063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_VENDOR_ERROR            TPM_Vendor_Specific32
12073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NON_FATAL               0x00000800
12083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
12093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_SUCCESS                 ((TPM_RESULT) TPM_BASE)
12103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_AUTHFAIL                ((TPM_RESULT) (TPM_BASE + 1))
12113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BADINDEX                ((TPM_RESULT) (TPM_BASE + 2))
12123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BAD_PARAMETER           ((TPM_RESULT) (TPM_BASE + 3))
12133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_AUDITFAILURE            ((TPM_RESULT) (TPM_BASE + 4))
12143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CLEAR_DISABLED          ((TPM_RESULT) (TPM_BASE + 5))
12153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DEACTIVATED             ((TPM_RESULT) (TPM_BASE + 6))
12163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DISABLED                ((TPM_RESULT) (TPM_BASE + 7))
12173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DISABLED_CMD            ((TPM_RESULT) (TPM_BASE + 8))
12183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_FAIL                    ((TPM_RESULT) (TPM_BASE + 9))
12193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BAD_ORDINAL             ((TPM_RESULT) (TPM_BASE + 10))
12203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_INSTALL_DISABLED        ((TPM_RESULT) (TPM_BASE + 11))
12213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_INVALID_KEYHANDLE       ((TPM_RESULT) (TPM_BASE + 12))
12223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEYNOTFOUND             ((TPM_RESULT) (TPM_BASE + 13))
12233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_INAPPROPRIATE_ENC       ((TPM_RESULT) (TPM_BASE + 14))
12243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_MIGRATEFAIL             ((TPM_RESULT) (TPM_BASE + 15))
12253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_INVALID_PCR_INFO        ((TPM_RESULT) (TPM_BASE + 16))
12263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NOSPACE                 ((TPM_RESULT) (TPM_BASE + 17))
12273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NOSRK                   ((TPM_RESULT) (TPM_BASE + 18))
12283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NOTSEALED_BLOB          ((TPM_RESULT) (TPM_BASE + 19))
12293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_OWNER_SET               ((TPM_RESULT) (TPM_BASE + 20))
12303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_RESOURCES               ((TPM_RESULT) (TPM_BASE + 21))
12313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_SHORTRANDOM             ((TPM_RESULT) (TPM_BASE + 22))
12323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_SIZE                    ((TPM_RESULT) (TPM_BASE + 23))
12333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_WRONGPCRVAL             ((TPM_RESULT) (TPM_BASE + 24))
12343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BAD_PARAM_SIZE          ((TPM_RESULT) (TPM_BASE + 25))
12353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_SHA_THREAD              ((TPM_RESULT) (TPM_BASE + 26))
12363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_SHA_ERROR               ((TPM_RESULT) (TPM_BASE + 27))
12373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_FAILEDSELFTEST          ((TPM_RESULT) (TPM_BASE + 28))
12383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_AUTH2FAIL               ((TPM_RESULT) (TPM_BASE + 29))
12393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BADTAG                  ((TPM_RESULT) (TPM_BASE + 30))
12403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_IOERROR                 ((TPM_RESULT) (TPM_BASE + 31))
12413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ENCRYPT_ERROR           ((TPM_RESULT) (TPM_BASE + 32))
12423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DECRYPT_ERROR           ((TPM_RESULT) (TPM_BASE + 33))
12433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_INVALID_AUTHHANDLE      ((TPM_RESULT) (TPM_BASE + 34))
12443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NO_ENDORSEMENT          ((TPM_RESULT) (TPM_BASE + 35))
12453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_INVALID_KEYUSAGE        ((TPM_RESULT) (TPM_BASE + 36))
12463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_WRONG_ENTITYTYPE        ((TPM_RESULT) (TPM_BASE + 37))
12473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_INVALID_POSTINIT        ((TPM_RESULT) (TPM_BASE + 38))
12483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_INAPPROPRIATE_SIG       ((TPM_RESULT) (TPM_BASE + 39))
12493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BAD_KEY_PROPERTY        ((TPM_RESULT) (TPM_BASE + 40))
12503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BAD_MIGRATION           ((TPM_RESULT) (TPM_BASE + 41))
12513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BAD_SCHEME              ((TPM_RESULT) (TPM_BASE + 42))
12523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BAD_DATASIZE            ((TPM_RESULT) (TPM_BASE + 43))
12533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BAD_MODE                ((TPM_RESULT) (TPM_BASE + 44))
12543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BAD_PRESENCE            ((TPM_RESULT) (TPM_BASE + 45))
12553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BAD_VERSION             ((TPM_RESULT) (TPM_BASE + 46))
12563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NO_WRAP_TRANSPORT       ((TPM_RESULT) (TPM_BASE + 47))
12573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_AUDITFAIL_UNSUCCESSFUL  ((TPM_RESULT) (TPM_BASE + 48))
12583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_AUDITFAIL_SUCCESSFUL    ((TPM_RESULT) (TPM_BASE + 49))
12593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NOTRESETABLE            ((TPM_RESULT) (TPM_BASE + 50))
12603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NOTLOCAL                ((TPM_RESULT) (TPM_BASE + 51))
12613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BAD_TYPE                ((TPM_RESULT) (TPM_BASE + 52))
12623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_INVALID_RESOURCE        ((TPM_RESULT) (TPM_BASE + 53))
12633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NOTFIPS                 ((TPM_RESULT) (TPM_BASE + 54))
12643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_INVALID_FAMILY          ((TPM_RESULT) (TPM_BASE + 55))
12653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NO_NV_PERMISSION        ((TPM_RESULT) (TPM_BASE + 56))
12663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_REQUIRES_SIGN           ((TPM_RESULT) (TPM_BASE + 57))
12673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_NOTSUPPORTED        ((TPM_RESULT) (TPM_BASE + 58))
12683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_AUTH_CONFLICT           ((TPM_RESULT) (TPM_BASE + 59))
12693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_AREA_LOCKED             ((TPM_RESULT) (TPM_BASE + 60))
12703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BAD_LOCALITY            ((TPM_RESULT) (TPM_BASE + 61))
12713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_READ_ONLY               ((TPM_RESULT) (TPM_BASE + 62))
12723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PER_NOWRITE             ((TPM_RESULT) (TPM_BASE + 63))
12733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_FAMILYCOUNT             ((TPM_RESULT) (TPM_BASE + 64))
12743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_WRITE_LOCKED            ((TPM_RESULT) (TPM_BASE + 65))
12753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BAD_ATTRIBUTES          ((TPM_RESULT) (TPM_BASE + 66))
12763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_INVALID_STRUCTURE       ((TPM_RESULT) (TPM_BASE + 67))
12773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_OWNER_CONTROL       ((TPM_RESULT) (TPM_BASE + 68))
12783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BAD_COUNTER             ((TPM_RESULT) (TPM_BASE + 69))
12793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NOT_FULLWRITE           ((TPM_RESULT) (TPM_BASE + 70))
12803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CONTEXT_GAP             ((TPM_RESULT) (TPM_BASE + 71))
12813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_MAXNVWRITES             ((TPM_RESULT) (TPM_BASE + 72))
12823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NOOPERATOR              ((TPM_RESULT) (TPM_BASE + 73))
12833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_RESOURCEMISSING         ((TPM_RESULT) (TPM_BASE + 74))
12843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_LOCK           ((TPM_RESULT) (TPM_BASE + 75))
12853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_FAMILY         ((TPM_RESULT) (TPM_BASE + 76))
12863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_ADMIN          ((TPM_RESULT) (TPM_BASE + 77))
12873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TRANSPORT_NOTEXCLUSIVE  ((TPM_RESULT) (TPM_BASE + 78))
12883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_OWNER_CONTROL           ((TPM_RESULT) (TPM_BASE + 79))
12893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_RESOURCES           ((TPM_RESULT) (TPM_BASE + 80))
12903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_INPUT_DATA0         ((TPM_RESULT) (TPM_BASE + 81))
12913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_INPUT_DATA1         ((TPM_RESULT) (TPM_BASE + 82))
12923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_ISSUER_SETTINGS     ((TPM_RESULT) (TPM_BASE + 83))
12933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_TPM_SETTINGS        ((TPM_RESULT) (TPM_BASE + 84))
12943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_STAGE               ((TPM_RESULT) (TPM_BASE + 85))
12953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_ISSUER_VALIDITY     ((TPM_RESULT) (TPM_BASE + 86))
12963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_WRONG_W             ((TPM_RESULT) (TPM_BASE + 87))
12973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BAD_HANDLE              ((TPM_RESULT) (TPM_BASE + 88))
12983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BAD_DELEGATE            ((TPM_RESULT) (TPM_BASE + 89))
12993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BADCONTEXT              ((TPM_RESULT) (TPM_BASE + 90))
13003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_TOOMANYCONTEXTS         ((TPM_RESULT) (TPM_BASE + 91))
13013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_MA_TICKET_SIGNATURE     ((TPM_RESULT) (TPM_BASE + 92))
13023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_MA_DESTINATION          ((TPM_RESULT) (TPM_BASE + 93))
13033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_MA_SOURCE               ((TPM_RESULT) (TPM_BASE + 94))
13043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_MA_AUTHORITY            ((TPM_RESULT) (TPM_BASE + 95))
13053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_PERMANENTEK             ((TPM_RESULT) (TPM_BASE + 97))
13063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_BAD_SIGNATURE           ((TPM_RESULT) (TPM_BASE + 98))
13073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NOCONTEXTSPACE          ((TPM_RESULT) (TPM_BASE + 99))
13083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
13093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_RETRY                   ((TPM_RESULT) (TPM_BASE + TPM_NON_FATAL))
13103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NEEDS_SELFTEST          ((TPM_RESULT) (TPM_BASE + TPM_NON_FATAL + 1))
13113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DOING_SELFTEST          ((TPM_RESULT) (TPM_BASE + TPM_NON_FATAL + 2))
13123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DEFEND_LOCK_RUNNING     ((TPM_RESULT) (TPM_BASE + TPM_NON_FATAL + 3))
13133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
13143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
13153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 17: Ordinals
13163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
13173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Ordinals are 32 bit values. The upper byte contains values that serve as
13183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// flag indicators, the next byte contains values indicating what committee
13193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// designated the ordinal, and the final two bytes contain the Command
13203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Ordinal Index.
13213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//      3                   2                   1
13223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
13233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
13243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   |P|C|V| Reserved| Purview |     Command Ordinal Index           |
13253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
13263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
13273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//  Where:
13283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
13293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    * P is Protected/Unprotected command. When 0 the command is a Protected
13303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//      command, when 1 the command is an Unprotected command.
13313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
13323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    * C is Non-Connection/Connection related command. When 0 this command
13333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//      passes through to either the protected (TPM) or unprotected (TSS)
13343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//      components.
13353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
13363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    * V is TPM/Vendor command. When 0 the command is TPM defined, when 1 the
13373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//      command is vendor defined.
13383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
13393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    * All reserved area bits are set to 0.
13403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
13413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
13423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_ActivateIdentity                  ((TPM_COMMAND_CODE) 0x0000007A)
13433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_AuthorizeMigrationKey             ((TPM_COMMAND_CODE) 0x0000002B)
13443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_CertifyKey                        ((TPM_COMMAND_CODE) 0x00000032)
13453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_CertifyKey2                       ((TPM_COMMAND_CODE) 0x00000033)
13463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_CertifySelfTest                   ((TPM_COMMAND_CODE) 0x00000052)
13473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_ChangeAuth                        ((TPM_COMMAND_CODE) 0x0000000C)
13483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_ChangeAuthAsymFinish              ((TPM_COMMAND_CODE) 0x0000000F)
13493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_ChangeAuthAsymStart               ((TPM_COMMAND_CODE) 0x0000000E)
13503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_ChangeAuthOwner                   ((TPM_COMMAND_CODE) 0x00000010)
13513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_CMK_ApproveMA                     ((TPM_COMMAND_CODE) 0x0000001D)
13523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_CMK_ConvertMigration              ((TPM_COMMAND_CODE) 0x00000024)
13533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_CMK_CreateBlob                    ((TPM_COMMAND_CODE) 0x0000001B)
13543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_CMK_CreateKey                     ((TPM_COMMAND_CODE) 0x00000013)
13553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_CMK_CreateTicket                  ((TPM_COMMAND_CODE) 0x00000012)
13563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_CMK_SetRestrictions               ((TPM_COMMAND_CODE) 0x0000001C)
13573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_ContinueSelfTest                  ((TPM_COMMAND_CODE) 0x00000053)
13583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_ConvertMigrationBlob              ((TPM_COMMAND_CODE) 0x0000002A)
13593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_CreateCounter                     ((TPM_COMMAND_CODE) 0x000000DC)
13603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_CreateEndorsementKeyPair          ((TPM_COMMAND_CODE) 0x00000078)
13613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_CreateMaintenanceArchive          ((TPM_COMMAND_CODE) 0x0000002C)
13623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_CreateMigrationBlob               ((TPM_COMMAND_CODE) 0x00000028)
13633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_CreateRevocableEK                 ((TPM_COMMAND_CODE) 0x0000007F)
13643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_CreateWrapKey                     ((TPM_COMMAND_CODE) 0x0000001F)
13653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_DAA_JOIN                          ((TPM_COMMAND_CODE) 0x00000029)
13663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_DAA_SIGN                          ((TPM_COMMAND_CODE) 0x00000031)
13673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_Delegate_CreateKeyDelegation      ((TPM_COMMAND_CODE) 0x000000D4)
13683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_Delegate_CreateOwnerDelegation    ((TPM_COMMAND_CODE) 0x000000D5)
13693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_Delegate_LoadOwnerDelegation      ((TPM_COMMAND_CODE) 0x000000D8)
13703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_Delegate_Manage                   ((TPM_COMMAND_CODE) 0x000000D2)
13713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_Delegate_ReadTable                ((TPM_COMMAND_CODE) 0x000000DB)
13723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_Delegate_UpdateVerification       ((TPM_COMMAND_CODE) 0x000000D1)
13733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_Delegate_VerifyDelegation         ((TPM_COMMAND_CODE) 0x000000D6)
13743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_DirRead                           ((TPM_COMMAND_CODE) 0x0000001A)
13753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_DirWriteAuth                      ((TPM_COMMAND_CODE) 0x00000019)
13763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_DisableForceClear                 ((TPM_COMMAND_CODE) 0x0000005E)
13773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_DisableOwnerClear                 ((TPM_COMMAND_CODE) 0x0000005C)
13783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_DisablePubekRead                  ((TPM_COMMAND_CODE) 0x0000007E)
13793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_DSAP                              ((TPM_COMMAND_CODE) 0x00000011)
13803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_EstablishTransport                ((TPM_COMMAND_CODE) 0x000000E6)
13813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_EvictKey                          ((TPM_COMMAND_CODE) 0x00000022)
13823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_ExecuteTransport                  ((TPM_COMMAND_CODE) 0x000000E7)
13833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_Extend                            ((TPM_COMMAND_CODE) 0x00000014)
13843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_FieldUpgrade                      ((TPM_COMMAND_CODE) 0x000000AA)
13853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_FlushSpecific                     ((TPM_COMMAND_CODE) 0x000000BA)
13863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_ForceClear                        ((TPM_COMMAND_CODE) 0x0000005D)
13873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_GetAuditDigest                    ((TPM_COMMAND_CODE) 0x00000085)
13883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_GetAuditDigestSigned              ((TPM_COMMAND_CODE) 0x00000086)
13893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_GetAuditEvent                     ((TPM_COMMAND_CODE) 0x00000082)
13903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_GetAuditEventSigned               ((TPM_COMMAND_CODE) 0x00000083)
13913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_GetCapability                     ((TPM_COMMAND_CODE) 0x00000065)
13923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_GetCapabilityOwner                ((TPM_COMMAND_CODE) 0x00000066)
13933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_GetCapabilitySigned               ((TPM_COMMAND_CODE) 0x00000064)
13943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_GetOrdinalAuditStatus             ((TPM_COMMAND_CODE) 0x0000008C)
13953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_GetPubKey                         ((TPM_COMMAND_CODE) 0x00000021)
13963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_GetRandom                         ((TPM_COMMAND_CODE) 0x00000046)
13973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_GetTestResult                     ((TPM_COMMAND_CODE) 0x00000054)
13983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_GetTicks                          ((TPM_COMMAND_CODE) 0x000000F1)
13993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_IncrementCounter                  ((TPM_COMMAND_CODE) 0x000000DD)
14003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_Init                              ((TPM_COMMAND_CODE) 0x00000097)
14013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_KeyControlOwner                   ((TPM_COMMAND_CODE) 0x00000023)
14023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_KillMaintenanceFeature            ((TPM_COMMAND_CODE) 0x0000002E)
14033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_LoadAuthContext                   ((TPM_COMMAND_CODE) 0x000000B7)
14043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_LoadContext                       ((TPM_COMMAND_CODE) 0x000000B9)
14053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_LoadKey                           ((TPM_COMMAND_CODE) 0x00000020)
14063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_LoadKey2                          ((TPM_COMMAND_CODE) 0x00000041)
14073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_LoadKeyContext                    ((TPM_COMMAND_CODE) 0x000000B5)
14083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_LoadMaintenanceArchive            ((TPM_COMMAND_CODE) 0x0000002D)
14093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_LoadManuMaintPub                  ((TPM_COMMAND_CODE) 0x0000002F)
14103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_MakeIdentity                      ((TPM_COMMAND_CODE) 0x00000079)
14113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_MigrateKey                        ((TPM_COMMAND_CODE) 0x00000025)
14123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_NV_DefineSpace                    ((TPM_COMMAND_CODE) 0x000000CC)
14133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_NV_ReadValue                      ((TPM_COMMAND_CODE) 0x000000CF)
14143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_NV_ReadValueAuth                  ((TPM_COMMAND_CODE) 0x000000D0)
14153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_NV_WriteValue                     ((TPM_COMMAND_CODE) 0x000000CD)
14163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_NV_WriteValueAuth                 ((TPM_COMMAND_CODE) 0x000000CE)
14173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_OIAP                              ((TPM_COMMAND_CODE) 0x0000000A)
14183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_OSAP                              ((TPM_COMMAND_CODE) 0x0000000B)
14193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_OwnerClear                        ((TPM_COMMAND_CODE) 0x0000005B)
14203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_OwnerReadInternalPub              ((TPM_COMMAND_CODE) 0x00000081)
14213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_OwnerReadPubek                    ((TPM_COMMAND_CODE) 0x0000007D)
14223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_OwnerSetDisable                   ((TPM_COMMAND_CODE) 0x0000006E)
14233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_PCR_Reset                         ((TPM_COMMAND_CODE) 0x000000C8)
14243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_PcrRead                           ((TPM_COMMAND_CODE) 0x00000015)
14253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_PhysicalDisable                   ((TPM_COMMAND_CODE) 0x00000070)
14263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_PhysicalEnable                    ((TPM_COMMAND_CODE) 0x0000006F)
14273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_PhysicalSetDeactivated            ((TPM_COMMAND_CODE) 0x00000072)
14283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_Quote                             ((TPM_COMMAND_CODE) 0x00000016)
14293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_Quote2                            ((TPM_COMMAND_CODE) 0x0000003E)
14303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_ReadCounter                       ((TPM_COMMAND_CODE) 0x000000DE)
14313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_ReadManuMaintPub                  ((TPM_COMMAND_CODE) 0x00000030)
14323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_ReadPubek                         ((TPM_COMMAND_CODE) 0x0000007C)
14333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_ReleaseCounter                    ((TPM_COMMAND_CODE) 0x000000DF)
14343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_ReleaseCounterOwner               ((TPM_COMMAND_CODE) 0x000000E0)
14353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_ReleaseTransportSigned            ((TPM_COMMAND_CODE) 0x000000E8)
14363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_Reset                             ((TPM_COMMAND_CODE) 0x0000005A)
14373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_ResetLockValue                    ((TPM_COMMAND_CODE) 0x00000040)
14383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_RevokeTrust                       ((TPM_COMMAND_CODE) 0x00000080)
14393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_SaveAuthContext                   ((TPM_COMMAND_CODE) 0x000000B6)
14403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_SaveContext                       ((TPM_COMMAND_CODE) 0x000000B8)
14413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_SaveKeyContext                    ((TPM_COMMAND_CODE) 0x000000B4)
14423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_SaveState                         ((TPM_COMMAND_CODE) 0x00000098)
14433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_Seal                              ((TPM_COMMAND_CODE) 0x00000017)
14443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_Sealx                             ((TPM_COMMAND_CODE) 0x0000003D)
14453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_SelfTestFull                      ((TPM_COMMAND_CODE) 0x00000050)
14463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_SetCapability                     ((TPM_COMMAND_CODE) 0x0000003F)
14473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_SetOperatorAuth                   ((TPM_COMMAND_CODE) 0x00000074)
14483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_SetOrdinalAuditStatus             ((TPM_COMMAND_CODE) 0x0000008D)
14493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_SetOwnerInstall                   ((TPM_COMMAND_CODE) 0x00000071)
14503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_SetOwnerPointer                   ((TPM_COMMAND_CODE) 0x00000075)
14513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_SetRedirection                    ((TPM_COMMAND_CODE) 0x0000009A)
14523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_SetTempDeactivated                ((TPM_COMMAND_CODE) 0x00000073)
14533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_SHA1Complete                      ((TPM_COMMAND_CODE) 0x000000A2)
14543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_SHA1CompleteExtend                ((TPM_COMMAND_CODE) 0x000000A3)
14553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_SHA1Start                         ((TPM_COMMAND_CODE) 0x000000A0)
14563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_SHA1Update                        ((TPM_COMMAND_CODE) 0x000000A1)
14573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_Sign                              ((TPM_COMMAND_CODE) 0x0000003C)
14583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_Startup                           ((TPM_COMMAND_CODE) 0x00000099)
14593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_StirRandom                        ((TPM_COMMAND_CODE) 0x00000047)
14603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_TakeOwnership                     ((TPM_COMMAND_CODE) 0x0000000D)
14613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_Terminate_Handle                  ((TPM_COMMAND_CODE) 0x00000096)
14623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_TickStampBlob                     ((TPM_COMMAND_CODE) 0x000000F2)
14633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_UnBind                            ((TPM_COMMAND_CODE) 0x0000001E)
14643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_ORD_Unseal                            ((TPM_COMMAND_CODE) 0x00000018)
14653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TSC_ORD_PhysicalPresence                  ((TPM_COMMAND_CODE) 0x4000000A)
14663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TSC_ORD_ResetEstablishmentBit             ((TPM_COMMAND_CODE) 0x4000000B)
14673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
14683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
14693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 18: Context structures
14703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
14713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
14723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_CONTEXT_BLOB
14733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
14743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
14753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_RESOURCE_TYPE               resourceType;
14763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_HANDLE                      handle;
14773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           label[16];
14783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          contextCount;
14793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      integrityDigest;
14803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          additionalSize;
14813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *additionalData;
14823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          sensitiveSize;
14833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *sensitiveData;
14843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_CONTEXT_BLOB;
14853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
14863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_CONTEXT_SENSITIVE
14873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
14883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
14893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_NONCE                       contextNonce;
14903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          internalSize;
14913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *internalData;
14923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_CONTEXT_SENSITIVE;
14933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
14943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
14953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 19: NV Structures
14963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
14973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
14983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_INDEX_LOCK              ((UINT32)0xffffffff)
14993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_INDEX0                  ((UINT32)0x00000000)
15003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_INDEX_DIR               ((UINT32)0x10000001)
15013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_INDEX_EKCert            ((UINT32)0x0000f000)
15023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_INDEX_TPM_CC            ((UINT32)0x0000f001)
15033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_INDEX_PlatformCert      ((UINT32)0x0000f002)
15043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_INDEX_Platform_CC       ((UINT32)0x0000f003)
15053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// The following define ranges of reserved indices.
15063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_INDEX_TSS_BASE          ((UINT32)0x00011100)
15073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_INDEX_PC_BASE           ((UINT32)0x00011200)
15083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_INDEX_SERVER_BASE       ((UINT32)0x00011300)
15093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_INDEX_MOBILE_BASE       ((UINT32)0x00011400)
15103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_INDEX_PERIPHERAL_BASE   ((UINT32)0x00011500)
15113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_INDEX_GROUP_RESV_BASE   ((UINT32)0x00010000)
15123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
15133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32 TPM_NV_PER_ATTRIBUTES;
15143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// The typedefs TPM_NV_PER_ATTRIBUTES (not present in TPM 1.2 Spec. have been added
15153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// and structure fields that were to hold the following values
15163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_PER_READ_STCLEAR        (((UINT32)1)<<31)
15173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_PER_AUTHREAD            (((UINT32)1)<<18)
15183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_PER_OWNERREAD           (((UINT32)1)<<17)
15193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_PER_PPREAD              (((UINT32)1)<<16)
15203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_PER_GLOBALLOCK          (((UINT32)1)<<15)
15213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_PER_WRITE_STCLEAR       (((UINT32)1)<<14)
15223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_PER_WRITEDEFINE         (((UINT32)1)<<13)
15233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_PER_WRITEALL            (((UINT32)1)<<12)
15243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_PER_AUTHWRITE           (((UINT32)1)<<2)
15253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_PER_OWNERWRITE          (((UINT32)1)<<1)
15263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NV_PER_PPWRITE             (((UINT32)1)<<0)
15273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
15283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_NV_ATTRIBUTES
15293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
15303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
15313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_NV_PER_ATTRIBUTES           attributes;
15323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_NV_ATTRIBUTES;
15333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
15343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
15353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_NV_DATA_PUBLIC
15363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
15373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
15383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_NV_INDEX                    nvIndex;
15393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_PCR_INFO_SHORT              pcrInfoRead;
15403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_PCR_INFO_SHORT              pcrInfoWrite;
15413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_NV_ATTRIBUTES               permission;
15423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    BOOLEAN                         bReadSTClear;
15433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    BOOLEAN                         bWriteSTClear;
15443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    BOOLEAN                         bWriteDefine;
15453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          dataSize;
15463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_NV_DATA_PUBLIC;
15473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
15483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
15493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
15503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Internal to TPM:
15513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//typedef struct tdTPM_NV_DATA_SENSITIVE
15523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//{
15533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_STRUCTURE_TAG               tag;
15543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_NV_DATA_PUBLIC              pubInfo;
15553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   TPM_AUTHDATA                    authValue;
15563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    UINT8                           *data;
15573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//} TPM_NV_DATA_SENSITIVE;
15583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
15593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
15603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
15613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 20: Delegation
15623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
15633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
15643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
15653e99020dbf0a159e34b84e7ae9125f2e368d5390lgao// Part 2, section 20.2.1: Owner Permissions Settings for per1 bits
15663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
15673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_SetOrdinalAuditStatus          (((UINT32)1)<<30)
15683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_DirWriteAuth                   (((UINT32)1)<<29)
15693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_CMK_ApproveMA                  (((UINT32)1)<<28)
15703e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_DELEGATE_NV_WriteValue                  (((UINT32)1)<<27)
15713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_CMK_CreateTicket               (((UINT32)1)<<26)
15723e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_DELEGATE_NV_ReadValue                   (((UINT32)1)<<25)
15733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_Delegate_LoadOwnerDelegation   (((UINT32)1)<<24)
15743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_DAA_Join                       (((UINT32)1)<<23)
15753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_AuthorizeMigrationKey          (((UINT32)1)<<22)
15763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_CreateMaintenanceArchive       (((UINT32)1)<<21)
15773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_LoadMaintenanceArchive         (((UINT32)1)<<20)
15783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_KillMaintenanceFeature         (((UINT32)1)<<19)
15793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_OwnerReadInteralPub            (((UINT32)1)<<18)
15803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_ResetLockValue                 (((UINT32)1)<<17)
15813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_OwnerClear                     (((UINT32)1)<<16)
15823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_DisableOwnerClear              (((UINT32)1)<<15)
15833e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_DELEGATE_NV_DefineSpace                 (((UINT32)1)<<14)
15843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_OwnerSetDisable                (((UINT32)1)<<13)
15853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_SetCapability                  (((UINT32)1)<<12)
15863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_MakeIdentity                   (((UINT32)1)<<11)
15873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_ActivateIdentity               (((UINT32)1)<<10)
15883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_OwnerReadPubek                 (((UINT32)1)<<9)
15893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_DisablePubekRead               (((UINT32)1)<<8)
15903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_SetRedirection                 (((UINT32)1)<<7)
15913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_FieldUpgrade                   (((UINT32)1)<<6)
15923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_Delegate_UpdateVerification    (((UINT32)1)<<5)
15933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_CreateCounter                  (((UINT32)1)<<4)
15943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_ReleaseCounterOwner            (((UINT32)1)<<3)
15953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_DelegateManage                 (((UINT32)1)<<2)
15963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_Delegate_CreateOwnerDelegation (((UINT32)1)<<1)
15973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DELEGATE_DAA_Sign                       (((UINT32)1)<<0)
15983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
15993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
16003e99020dbf0a159e34b84e7ae9125f2e368d5390lgao// Part 2, section 20.2.3: Key Permissions Settings for per1 bits
16013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
16023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_CMK_ConvertMigration       (((UINT32)1)<<28)
16033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_TickStampBlob              (((UINT32)1)<<27)
16043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_ChangeAuthAsymStart        (((UINT32)1)<<26)
16053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_ChangeAuthAsymFinish       (((UINT32)1)<<25)
16063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_CMK_CreateKey              (((UINT32)1)<<24)
16073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_MigrateKey                 (((UINT32)1)<<23)
16083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_LoadKey2                   (((UINT32)1)<<22)
16093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_EstablishTransport         (((UINT32)1)<<21)
16103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_ReleaseTransportSigned     (((UINT32)1)<<20)
16113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_Quote2                     (((UINT32)1)<<19)
16123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_Sealx                      (((UINT32)1)<<18)
16133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_MakeIdentity               (((UINT32)1)<<17)
16143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_ActivateIdentity           (((UINT32)1)<<16)
16153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_GetAuditDigestSigned       (((UINT32)1)<<15)
16163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_Sign                       (((UINT32)1)<<14)
16173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_CertifyKey2                (((UINT32)1)<<13)
16183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_CertifyKey                 (((UINT32)1)<<12)
16193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_CreateWrapKey              (((UINT32)1)<<11)
16203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_CMK_CreateBlob             (((UINT32)1)<<10)
16213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_CreateMigrationBlob        (((UINT32)1)<<9)
16223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_ConvertMigrationBlob       (((UINT32)1)<<8)
16233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_CreateKeyDelegation        (((UINT32)1)<<7)
16243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_ChangeAuth                 (((UINT32)1)<<6)
16253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_GetPubKey                  (((UINT32)1)<<5)
16263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_UnBind                     (((UINT32)1)<<4)
16273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_Quote                      (((UINT32)1)<<3)
16283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_Unseal                     (((UINT32)1)<<2)
16293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_Seal                       (((UINT32)1)<<1)
16303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_KEY_DELEGATE_LoadKey                    (((UINT32)1)<<0)
16313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
16323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_FAMILY_CREATE                 ((UINT32)0x00000001)
16333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_FAMILY_ENABLE                 ((UINT32)0x00000002)
16343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_FAMILY_ADMIN                  ((UINT32)0x00000003)
16353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_FAMILY_INVALIDATE             ((UINT32)0x00000004)
16363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
16373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_FAMFLAG_DELEGATE_ADMIN_LOCK   (((UINT32)1)<<1)
16383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_FAMFLAG_ENABLE                (((UINT32)1)<<0)
16393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
16403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_FAMILY_LABEL
16413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
16423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           label;
16433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_FAMILY_LABEL;
16443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
16453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_FAMILY_TABLE_ENTRY
16463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
16473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
16483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_FAMILY_LABEL                label;
16493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_FAMILY_ID                   familyID;
16503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_FAMILY_VERIFICATION         verificationCount;
16513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_FAMILY_FLAGS                flags;
16523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_FAMILY_TABLE_ENTRY;
16533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
16543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_FAMILY_TABLE_ENTRY_MIN 8
16553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//typedef struct tdTPM_FAMILY_TABLE
16563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//{
16573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_FAMILY_TABLE_ENTRY          FamTableRow[TPM_NUM_FAMILY_TABLE_ENTRY_MIN];
16583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//} TPM_FAMILY_TABLE;
16593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
16603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
16613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_DELEGATE_LABEL
16623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
16633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           label;
16643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_DELEGATE_LABEL;
16653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
16663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
16673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32 TPM_DELEGATE_TYPE;
16683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DEL_OWNER_BITS          ((UINT32)0x00000001)
16693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DEL_KEY_BITS            ((UINT32)0x00000002)
16703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
16713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_DELEGATIONS
16723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
16733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
16743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DELEGATE_TYPE               delegateType;
16753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          per1;
16763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          per2;
16773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_DELEGATIONS;
16783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
16793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_DELEGATE_PUBLIC
16803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
16813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
16823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DELEGATE_LABEL              label;
16833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_PCR_INFO_SHORT              pcrInfo;
16843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DELEGATIONS                 permissions;
16853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_FAMILY_ID                   familyID;
16863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_FAMILY_VERIFICATION         verificationCount;
16873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_DELEGATE_PUBLIC;
16883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
16893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_DELEGATE_TABLE_ROW
16903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
16913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
16923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DELEGATE_PUBLIC             pub;
16933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_SECRET                      authValue;
16943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_DELEGATE_TABLE_ROW;
16953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
16963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
16973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_NUM_DELEGATE_TABLE_ENTRY_MIN 2
16983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//typedef struct tdTPM_DELEGATE_TABLE
16993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//{
17003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    TPM_DELEGATE_TABLE_ROW          delRow[TPM_NUM_DELEGATE_TABLE_ENTRY_MIN];
17013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//} TPM_DELEGATE_TABLE;
17023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
17033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_DELEGATE_SENSITIVE
17043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
17053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
17063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_SECRET                      authValue;
17073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_DELEGATE_SENSITIVE;
17083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
17093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_DELEGATE_OWNER_BLOB
17103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
17113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
17123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DELEGATE_PUBLIC             pub;
17133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      integrityDigest;
17143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          additionalSize;
17153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *additionalArea;
17163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          sensitiveSize;
17173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *sensitiveArea;
17183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_DELEGATE_OWNER_BLOB;
17193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
17203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_DELEGATE_KEY_BLOB
17213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
17223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
17233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DELEGATE_PUBLIC             pub;
17243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      integrityDigest;
17253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      pubKeyDigest;
17263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          additionalSize;
17273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *additionalArea;
17283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          sensitiveSize;
17293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *sensitiveArea;
17303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_DELEGATE_KEY_BLOB;
17313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
17323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
17333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 21.1: TPM_CAPABILITY_AREA for GetCapability
17343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
17353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_ORD                     ((TPM_CAPABILITY_AREA) 0x00000001)
17363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_ALG                     ((TPM_CAPABILITY_AREA) 0x00000002)
17373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PID                     ((TPM_CAPABILITY_AREA) 0x00000003)
17383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_FLAG                    ((TPM_CAPABILITY_AREA) 0x00000004)
17393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROPERTY                ((TPM_CAPABILITY_AREA) 0x00000005)
17403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_VERSION                 ((TPM_CAPABILITY_AREA) 0x00000006)
17413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_KEY_HANDLE              ((TPM_CAPABILITY_AREA) 0x00000007)
17423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_CHECK_LOADED            ((TPM_CAPABILITY_AREA) 0x00000008)
17433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_SYM_MODE                ((TPM_CAPABILITY_AREA) 0x00000009)
17443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_KEY_STATUS              ((TPM_CAPABILITY_AREA) 0x0000000C)
17453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_NV_LIST                 ((TPM_CAPABILITY_AREA) 0x0000000D)
17463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_MFR                     ((TPM_CAPABILITY_AREA) 0x00000010)
17473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_NV_INDEX                ((TPM_CAPABILITY_AREA) 0x00000011)
17483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_TRANS_ALG               ((TPM_CAPABILITY_AREA) 0x00000012)
17493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_HANDLE                  ((TPM_CAPABILITY_AREA) 0x00000014)
17503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_TRANS_ES                ((TPM_CAPABILITY_AREA) 0x00000015)
17513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_AUTH_ENCRYPT            ((TPM_CAPABILITY_AREA) 0x00000017)
17523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_SELECT_SIZE             ((TPM_CAPABILITY_AREA) 0x00000018)
17533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_VERSION_VAL             ((TPM_CAPABILITY_AREA) 0x0000001A)
17543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
17553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_FLAG_PERMANENT          ((TPM_CAPABILITY_AREA) 0x00000108)
17563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_FLAG_VOLATILE           ((TPM_CAPABILITY_AREA) 0x00000109)
17573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
17583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
17593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 21.2: CAP_PROPERTY Subcap values for GetCapability
17603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
17613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_PCR                ((TPM_CAPABILITY_AREA) 0x00000101)
17623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_DIR                ((TPM_CAPABILITY_AREA) 0x00000102)
17633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_MANUFACTURER       ((TPM_CAPABILITY_AREA) 0x00000103)
17643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_KEYS               ((TPM_CAPABILITY_AREA) 0x00000104)
17653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_MIN_COUNTER        ((TPM_CAPABILITY_AREA) 0x00000107)
17663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_AUTHSESS           ((TPM_CAPABILITY_AREA) 0x0000010A)
17673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_TRANSESS           ((TPM_CAPABILITY_AREA) 0x0000010B)
17683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_COUNTERS           ((TPM_CAPABILITY_AREA) 0x0000010C)
17693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_MAX_AUTHSESS       ((TPM_CAPABILITY_AREA) 0x0000010D)
17703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_MAX_TRANSESS       ((TPM_CAPABILITY_AREA) 0x0000010E)
17713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_MAX_COUNTERS       ((TPM_CAPABILITY_AREA) 0x0000010F)
17723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_MAX_KEYS           ((TPM_CAPABILITY_AREA) 0x00000110)
17733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_OWNER              ((TPM_CAPABILITY_AREA) 0x00000111)
17743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_CONTEXT            ((TPM_CAPABILITY_AREA) 0x00000112)
17753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_MAX_CONTEXT        ((TPM_CAPABILITY_AREA) 0x00000113)
17763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_FAMILYROWS         ((TPM_CAPABILITY_AREA) 0x00000114)
17773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_TIS_TIMEOUT        ((TPM_CAPABILITY_AREA) 0x00000115)
17783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_STARTUP_EFFECT     ((TPM_CAPABILITY_AREA) 0x00000116)
17793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_DELEGATE_ROW       ((TPM_CAPABILITY_AREA) 0x00000117)
17803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_DAA_MAX            ((TPM_CAPABILITY_AREA) 0x00000119)
17813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define CAP_PROP_SESSION_DAA            ((TPM_CAPABILITY_AREA) 0x0000011A)
17823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_CONTEXT_DIST       ((TPM_CAPABILITY_AREA) 0x0000011B)
17833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_DAA_INTERRUPT      ((TPM_CAPABILITY_AREA) 0x0000011C)
17843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_SESSIONS           ((TPM_CAPABILITY_AREA) 0x0000011D)
17853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_MAX_SESSIONS       ((TPM_CAPABILITY_AREA) 0x0000011E)
17863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_CMK_RESTRICTION    ((TPM_CAPABILITY_AREA) 0x0000011F)
17873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_DURATION           ((TPM_CAPABILITY_AREA) 0x00000120)
17883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_ACTIVE_COUNTER     ((TPM_CAPABILITY_AREA) 0x00000122)
17893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_MAX_NV_AVAILABLE   ((TPM_CAPABILITY_AREA) 0x00000123)
17903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_CAP_PROP_INPUT_BUFFER       ((TPM_CAPABILITY_AREA) 0x00000124)
17913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
17923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
17933e99020dbf0a159e34b84e7ae9125f2e368d5390lgao// Part 2, section 21.4: TPM_CAPABILITY_AREA for SetCapability
17943e99020dbf0a159e34b84e7ae9125f2e368d5390lgao//
17953e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_SET_PERM_FLAGS              ((TPM_CAPABILITY_AREA) 0x00000001)
17963e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_SET_PERM_DATA               ((TPM_CAPABILITY_AREA) 0x00000002)
17973e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_SET_STCLEAR_FLAGS           ((TPM_CAPABILITY_AREA) 0x00000003)
17983e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_SET_STCLEAR_DATA            ((TPM_CAPABILITY_AREA) 0x00000004)
17993e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_SET_STANY_FLAGS             ((TPM_CAPABILITY_AREA) 0x00000005)
18003e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_SET_STANY_DATA              ((TPM_CAPABILITY_AREA) 0x00000006)
18013e99020dbf0a159e34b84e7ae9125f2e368d5390lgao
18023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 21.6: TPM_CAP_VERSION_INFO
18033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//   [size_is(vendorSpecificSize)] BYTE* vendorSpecific;
18043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
18053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_CAP_VERSION_INFO {
18063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STRUCTURE_TAG                 tag;
18073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_VERSION                       version;
18083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT16                            specLevel;
18093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             errataRev;
18103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             tpmVendorID[4];
18113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT16                            vendorSpecificSize;
18123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                             *vendorSpecific;
18133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_CAP_VERSION_INFO;
18143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
18153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
18163e99020dbf0a159e34b84e7ae9125f2e368d5390lgao// Part 2, section 21.10: TPM_DA_ACTION_TYPE
18173e99020dbf0a159e34b84e7ae9125f2e368d5390lgao//
18183e99020dbf0a159e34b84e7ae9125f2e368d5390lgaotypedef struct tdTPM_DA_ACTION_TYPE {
18193e99020dbf0a159e34b84e7ae9125f2e368d5390lgao  TPM_STRUCTURE_TAG                 tag;
18203e99020dbf0a159e34b84e7ae9125f2e368d5390lgao  UINT32                            actions;
18213e99020dbf0a159e34b84e7ae9125f2e368d5390lgao} TPM_DA_ACTION_TYPE;
18223e99020dbf0a159e34b84e7ae9125f2e368d5390lgao
18233e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_DA_ACTION_FAILURE_MODE     (((UINT32)1)<<3)
18243e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_DA_ACTION_DEACTIVATE       (((UINT32)1)<<2)
18253e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_DA_ACTION_DISABLE          (((UINT32)1)<<1)
18263e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_DA_ACTION_TIMEOUT          (((UINT32)1)<<0)
18273e99020dbf0a159e34b84e7ae9125f2e368d5390lgao
18283e99020dbf0a159e34b84e7ae9125f2e368d5390lgao//
18293e99020dbf0a159e34b84e7ae9125f2e368d5390lgao// Part 2, section 21.7: TPM_DA_INFO
18303e99020dbf0a159e34b84e7ae9125f2e368d5390lgao//
18313e99020dbf0a159e34b84e7ae9125f2e368d5390lgaotypedef struct tdTPM_DA_INFO {
18323e99020dbf0a159e34b84e7ae9125f2e368d5390lgao  TPM_STRUCTURE_TAG                 tag;
18333e99020dbf0a159e34b84e7ae9125f2e368d5390lgao  TPM_DA_STATE                      state;
18343e99020dbf0a159e34b84e7ae9125f2e368d5390lgao  UINT16                            currentCount;
18353e99020dbf0a159e34b84e7ae9125f2e368d5390lgao  UINT16                            thresholdCount;
18363e99020dbf0a159e34b84e7ae9125f2e368d5390lgao  TPM_DA_ACTION_TYPE                actionAtThreshold;
18373e99020dbf0a159e34b84e7ae9125f2e368d5390lgao  UINT32                            actionDependValue;
18383e99020dbf0a159e34b84e7ae9125f2e368d5390lgao  UINT32                            vendorDataSize;
18393e99020dbf0a159e34b84e7ae9125f2e368d5390lgao  UINT8                             *vendorData;
18403e99020dbf0a159e34b84e7ae9125f2e368d5390lgao} TPM_DA_INFO;
18413e99020dbf0a159e34b84e7ae9125f2e368d5390lgao
18423e99020dbf0a159e34b84e7ae9125f2e368d5390lgao//
18433e99020dbf0a159e34b84e7ae9125f2e368d5390lgao// Part 2, section 21.8: TPM_DA_INFO_LIMITED
18443e99020dbf0a159e34b84e7ae9125f2e368d5390lgao//
18453e99020dbf0a159e34b84e7ae9125f2e368d5390lgaotypedef struct tdTPM_DA_INFO_LIMITED {
18463e99020dbf0a159e34b84e7ae9125f2e368d5390lgao  TPM_STRUCTURE_TAG                 tag;
18473e99020dbf0a159e34b84e7ae9125f2e368d5390lgao  TPM_DA_STATE                      state;
18483e99020dbf0a159e34b84e7ae9125f2e368d5390lgao  TPM_DA_ACTION_TYPE                actionAtThreshold;
18493e99020dbf0a159e34b84e7ae9125f2e368d5390lgao  UINT32                            vendorDataSize;
18503e99020dbf0a159e34b84e7ae9125f2e368d5390lgao  UINT8                             *vendorData;
18513e99020dbf0a159e34b84e7ae9125f2e368d5390lgao} TPM_DA_INFO_LIMITED;
18523e99020dbf0a159e34b84e7ae9125f2e368d5390lgao
18533e99020dbf0a159e34b84e7ae9125f2e368d5390lgao//
18543e99020dbf0a159e34b84e7ae9125f2e368d5390lgao// Part 2, section 21.9: CAP_PROPERTY Subcap values for GetCapability
18553e99020dbf0a159e34b84e7ae9125f2e368d5390lgao//
18563e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_DA_STATE_INACTIVE          ((UINT8)0x00)
18573e99020dbf0a159e34b84e7ae9125f2e368d5390lgao#define TPM_DA_STATE_ACTIVE            ((UINT8)0x01)
18583e99020dbf0a159e34b84e7ae9125f2e368d5390lgao
18593e99020dbf0a159e34b84e7ae9125f2e368d5390lgao//
18603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 22: DAA Structures
18613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
18623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
18633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_SIZE_r0                (43)
18643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_SIZE_r1                (43)
18653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_SIZE_r2                (128)
18663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_SIZE_r3                (168)
18673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_SIZE_r4                (219)
18683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_SIZE_NT                (20)
18693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_SIZE_v0                (128)
18703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_SIZE_v1                (192)
18713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_SIZE_NE                (256)
18723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_SIZE_w                 (256)
18733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_SIZE_issuerModulus     (256)
18743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_power0                 (104)
18753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_DAA_power1                 (1024)
18763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
18773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_DAA_ISSUER
18783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
18793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
18803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      DAA_digest_R0;
18813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      DAA_digest_R1;
18823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      DAA_digest_S0;
18833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      DAA_digest_S1;
18843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      DAA_digest_n;
18853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      DAA_digest_gamma;
18863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           DAA_generic_q[26];
18873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_DAA_ISSUER;
18883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
18893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
18903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_DAA_TPM
18913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
18923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
18933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      DAA_digestIssuer;
18943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      DAA_digest_v0;
18953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      DAA_digest_v1;
18963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      DAA_rekey;
18973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          DAA_count;
18983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_DAA_TPM;
18993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
19003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_DAA_CONTEXT
19013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
19023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
19033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      DAA_digestContext;
19043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      DAA_digest;
19053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DAA_CONTEXT_SEED            DAA_contextSeed;
19063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           DAA_scratch[256];
19073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           DAA_stage;
19083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_DAA_CONTEXT;
19093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
19103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_DAA_JOINDATA
19113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
19123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           DAA_join_u0[128];
19133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           DAA_join_u1[138];
19143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      DAA_digest_n0;
19153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_DAA_JOINDATA;
19163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
19173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_DAA_BLOB
19183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
19193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
19203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_RESOURCE_TYPE               resourceType;
19213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           label[16];
19223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_DIGEST                      blobIntegrity;
19233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          additionalSize;
19243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *additionalData;
19253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          sensitiveSize;
19263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *sensitiveData;
19273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_DAA_BLOB;
19283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
19293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_DAA_SENSITIVE
19303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{
19313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TPM_STRUCTURE_TAG               tag;
19323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT32                          internalSize;
19333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    UINT8                           *internalData;
19343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_DAA_SENSITIVE;
19353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
19363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
19373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
19383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Part 2, section 23: Redirection
19393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
19403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
19413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// This section of the TPM spec defines exactly one value but does not
19423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// give it a name. The definition of TPM_SetRedirection in Part3
19433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// refers to exactly one name but does not give its value. We join
19443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// them here.
19453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define TPM_REDIR_GPIO              (0x00000001)
19463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
19473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
19483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// TPM Command & Response Headers
19493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
19503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_RQU_COMMAND_HDR {
19513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STRUCTURE_TAG                 tag;
19523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                            paramSize;
19533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_COMMAND_CODE                  ordinal;
19543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_RQU_COMMAND_HDR;
19553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
19563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct tdTPM_RSP_COMMAND_HDR {
19573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_STRUCTURE_TAG                 tag;
19583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                            paramSize;
19593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  TPM_RESULT                        returnCode;
19603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} TPM_RSP_COMMAND_HDR;
19613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1962775bebc37223f6de7d648c77ea949944192a428eqwang#ifndef __GNUC__
19633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#pragma pack (pop)
1964775bebc37223f6de7d648c77ea949944192a428eqwang#endif
19653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
19663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif  // _TPM12_H_
1967