Home | History | Annotate | Download | only in tpm2
      1 // Copyright 2015 The Chromium OS Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // THIS CODE IS GENERATED - DO NOT MODIFY!
      6 
      7 #ifndef TPM2_TPM_TYPES_H_
      8 #define TPM2_TPM_TYPES_H_
      9 // Unprocessed: Table 1  Name Prefix Convention
     10 // Skipped: Table 2  Unmarshaling Errors
     11 // Table 3  Definition of Base Types
     12 typedef uint8_t UINT8;
     13 typedef uint8_t BYTE;
     14 typedef int8_t INT8;
     15 typedef int BOOL;
     16 typedef uint16_t UINT16;
     17 typedef int16_t INT16;
     18 typedef uint32_t UINT32;
     19 typedef int32_t INT32;
     20 typedef uint64_t UINT64;
     21 typedef int64_t INT64;
     22 
     23 // Table 4  Defines for Logic Values
     24 #define TRUE   1
     25 #define FALSE  0
     26 #define YES    1
     27 #define NO     0
     28 #define SET    1
     29 #define CLEAR  0
     30 
     31 // Table 5  Definition of Types for Documentation Clarity
     32 typedef UINT32 TPM_ALGORITHM_ID;
     33 typedef UINT32 TPM_MODIFIER_INDICATOR;
     34 typedef UINT32 TPM_AUTHORIZATION_SIZE;
     35 typedef UINT32 TPM_PARAMETER_SIZE;
     36 typedef UINT16 TPM_KEY_SIZE;
     37 typedef UINT16 TPM_KEY_BITS;
     38 
     39 // Skipped: Table 6  Definition of TPM_SPEC Constants <>
     40 // Table 7  Definition of TPM_GENERATED Constants <  O>
     41 typedef UINT32 TPM_GENERATED;
     42 #define TPM_GENERATED_VALUE  0xff544347
     43 
     44 // Unprocessed: Table 8  Legend for TPM_ALG_ID Table
     45 // Skipped: Table 9  Definition of TPM_ALG_ID Constants <  IN/OUT, S>
     46 // Skipped: Table 10  Definition of TPM_ECC_CURVE Constants <  IN/OUT, S>
     47 // Unprocessed: Table 11  TPM Command Format Fields Description
     48 // Unprocessed: Table 12  Legend for Command Code Tables
     49 // Skipped: Table 13  Definition of TPM_CC Constants <  IN/OUT, S>
     50 // Unprocessed: Table 14  Format-Zero Response Codes
     51 // Unprocessed: Table 15  Format-One Response Codes
     52 // Unprocessed: Table 16  Response Code Groupings
     53 // Table 17  Definition of TPM_RC Constants <  OUT>
     54 typedef UINT32 TPM_RC;
     55 #define TPM_RC_SUCCESS                                  0x000
     56 #define TPM_RC_BAD_TAG                                  0x01E
     57 #define RC_VER1                                         0x100
     58 #define TPM_RC_INITIALIZE         ((TPM_RC)(RC_VER1 + 0x000))
     59 #define TPM_RC_FAILURE            ((TPM_RC)(RC_VER1 + 0x001))
     60 #define TPM_RC_SEQUENCE           ((TPM_RC)(RC_VER1 + 0x003))
     61 #define TPM_RC_PRIVATE            ((TPM_RC)(RC_VER1 + 0x00B))
     62 #define TPM_RC_HMAC               ((TPM_RC)(RC_VER1 + 0x019))
     63 #define TPM_RC_DISABLED           ((TPM_RC)(RC_VER1 + 0x020))
     64 #define TPM_RC_EXCLUSIVE          ((TPM_RC)(RC_VER1 + 0x021))
     65 #define TPM_RC_AUTH_TYPE          ((TPM_RC)(RC_VER1 + 0x024))
     66 #define TPM_RC_AUTH_MISSING       ((TPM_RC)(RC_VER1 + 0x025))
     67 #define TPM_RC_POLICY             ((TPM_RC)(RC_VER1 + 0x026))
     68 #define TPM_RC_PCR                ((TPM_RC)(RC_VER1 + 0x027))
     69 #define TPM_RC_PCR_CHANGED        ((TPM_RC)(RC_VER1 + 0x028))
     70 #define TPM_RC_UPGRADE            ((TPM_RC)(RC_VER1 + 0x02D))
     71 #define TPM_RC_TOO_MANY_CONTEXTS  ((TPM_RC)(RC_VER1 + 0x02E))
     72 #define TPM_RC_AUTH_UNAVAILABLE   ((TPM_RC)(RC_VER1 + 0x02F))
     73 #define TPM_RC_REBOOT             ((TPM_RC)(RC_VER1 + 0x030))
     74 #define TPM_RC_UNBALANCED         ((TPM_RC)(RC_VER1 + 0x031))
     75 #define TPM_RC_COMMAND_SIZE       ((TPM_RC)(RC_VER1 + 0x042))
     76 #define TPM_RC_COMMAND_CODE       ((TPM_RC)(RC_VER1 + 0x043))
     77 #define TPM_RC_AUTHSIZE           ((TPM_RC)(RC_VER1 + 0x044))
     78 #define TPM_RC_AUTH_CONTEXT       ((TPM_RC)(RC_VER1 + 0x045))
     79 #define TPM_RC_NV_RANGE           ((TPM_RC)(RC_VER1 + 0x046))
     80 #define TPM_RC_NV_SIZE            ((TPM_RC)(RC_VER1 + 0x047))
     81 #define TPM_RC_NV_LOCKED          ((TPM_RC)(RC_VER1 + 0x048))
     82 #define TPM_RC_NV_AUTHORIZATION   ((TPM_RC)(RC_VER1 + 0x049))
     83 #define TPM_RC_NV_UNINITIALIZED   ((TPM_RC)(RC_VER1 + 0x04A))
     84 #define TPM_RC_NV_SPACE           ((TPM_RC)(RC_VER1 + 0x04B))
     85 #define TPM_RC_NV_DEFINED         ((TPM_RC)(RC_VER1 + 0x04C))
     86 #define TPM_RC_BAD_CONTEXT        ((TPM_RC)(RC_VER1 + 0x050))
     87 #define TPM_RC_CPHASH             ((TPM_RC)(RC_VER1 + 0x051))
     88 #define TPM_RC_PARENT             ((TPM_RC)(RC_VER1 + 0x052))
     89 #define TPM_RC_NEEDS_TEST         ((TPM_RC)(RC_VER1 + 0x053))
     90 #define TPM_RC_NO_RESULT          ((TPM_RC)(RC_VER1 + 0x054))
     91 #define TPM_RC_SENSITIVE          ((TPM_RC)(RC_VER1 + 0x055))
     92 #define RC_MAX_FM0                ((TPM_RC)(RC_VER1 + 0x07F))
     93 #define RC_FMT1                                         0x080
     94 #define TPM_RC_ASYMMETRIC         ((TPM_RC)(RC_FMT1 + 0x001))
     95 #define TPM_RC_ATTRIBUTES         ((TPM_RC)(RC_FMT1 + 0x002))
     96 #define TPM_RC_HASH               ((TPM_RC)(RC_FMT1 + 0x003))
     97 #define TPM_RC_VALUE              ((TPM_RC)(RC_FMT1 + 0x004))
     98 #define TPM_RC_HIERARCHY          ((TPM_RC)(RC_FMT1 + 0x005))
     99 #define TPM_RC_KEY_SIZE           ((TPM_RC)(RC_FMT1 + 0x007))
    100 #define TPM_RC_MGF                ((TPM_RC)(RC_FMT1 + 0x008))
    101 #define TPM_RC_MODE               ((TPM_RC)(RC_FMT1 + 0x009))
    102 #define TPM_RC_TYPE               ((TPM_RC)(RC_FMT1 + 0x00A))
    103 #define TPM_RC_HANDLE             ((TPM_RC)(RC_FMT1 + 0x00B))
    104 #define TPM_RC_KDF                ((TPM_RC)(RC_FMT1 + 0x00C))
    105 #define TPM_RC_RANGE              ((TPM_RC)(RC_FMT1 + 0x00D))
    106 #define TPM_RC_AUTH_FAIL          ((TPM_RC)(RC_FMT1 + 0x00E))
    107 #define TPM_RC_NONCE              ((TPM_RC)(RC_FMT1 + 0x00F))
    108 #define TPM_RC_PP                 ((TPM_RC)(RC_FMT1 + 0x010))
    109 #define TPM_RC_SCHEME             ((TPM_RC)(RC_FMT1 + 0x012))
    110 #define TPM_RC_SIZE               ((TPM_RC)(RC_FMT1 + 0x015))
    111 #define TPM_RC_SYMMETRIC          ((TPM_RC)(RC_FMT1 + 0x016))
    112 #define TPM_RC_TAG                ((TPM_RC)(RC_FMT1 + 0x017))
    113 #define TPM_RC_SELECTOR           ((TPM_RC)(RC_FMT1 + 0x018))
    114 #define TPM_RC_INSUFFICIENT       ((TPM_RC)(RC_FMT1 + 0x01A))
    115 #define TPM_RC_SIGNATURE          ((TPM_RC)(RC_FMT1 + 0x01B))
    116 #define TPM_RC_KEY                ((TPM_RC)(RC_FMT1 + 0x01C))
    117 #define TPM_RC_POLICY_FAIL        ((TPM_RC)(RC_FMT1 + 0x01D))
    118 #define TPM_RC_INTEGRITY          ((TPM_RC)(RC_FMT1 + 0x01F))
    119 #define TPM_RC_TICKET             ((TPM_RC)(RC_FMT1 + 0x020))
    120 #define TPM_RC_RESERVED_BITS      ((TPM_RC)(RC_FMT1 + 0x021))
    121 #define TPM_RC_BAD_AUTH           ((TPM_RC)(RC_FMT1 + 0x022))
    122 #define TPM_RC_EXPIRED            ((TPM_RC)(RC_FMT1 + 0x023))
    123 #define TPM_RC_POLICY_CC          ((TPM_RC)(RC_FMT1 + 0x024))
    124 #define TPM_RC_BINDING            ((TPM_RC)(RC_FMT1 + 0x025))
    125 #define TPM_RC_CURVE              ((TPM_RC)(RC_FMT1 + 0x026))
    126 #define TPM_RC_ECC_POINT          ((TPM_RC)(RC_FMT1 + 0x027))
    127 #define RC_WARN                                         0x900
    128 #define TPM_RC_CONTEXT_GAP        ((TPM_RC)(RC_WARN + 0x001))
    129 #define TPM_RC_OBJECT_MEMORY      ((TPM_RC)(RC_WARN + 0x002))
    130 #define TPM_RC_SESSION_MEMORY     ((TPM_RC)(RC_WARN + 0x003))
    131 #define TPM_RC_MEMORY             ((TPM_RC)(RC_WARN + 0x004))
    132 #define TPM_RC_SESSION_HANDLES    ((TPM_RC)(RC_WARN + 0x005))
    133 #define TPM_RC_OBJECT_HANDLES     ((TPM_RC)(RC_WARN + 0x006))
    134 #define TPM_RC_LOCALITY           ((TPM_RC)(RC_WARN + 0x007))
    135 #define TPM_RC_YIELDED            ((TPM_RC)(RC_WARN + 0x008))
    136 #define TPM_RC_CANCELED           ((TPM_RC)(RC_WARN + 0x009))
    137 #define TPM_RC_TESTING            ((TPM_RC)(RC_WARN + 0x00A))
    138 #define TPM_RC_REFERENCE_H0       ((TPM_RC)(RC_WARN + 0x010))
    139 #define TPM_RC_REFERENCE_H1       ((TPM_RC)(RC_WARN + 0x011))
    140 #define TPM_RC_REFERENCE_H2       ((TPM_RC)(RC_WARN + 0x012))
    141 #define TPM_RC_REFERENCE_H3       ((TPM_RC)(RC_WARN + 0x013))
    142 #define TPM_RC_REFERENCE_H4       ((TPM_RC)(RC_WARN + 0x014))
    143 #define TPM_RC_REFERENCE_H5       ((TPM_RC)(RC_WARN + 0x015))
    144 #define TPM_RC_REFERENCE_H6       ((TPM_RC)(RC_WARN + 0x016))
    145 #define TPM_RC_REFERENCE_S0       ((TPM_RC)(RC_WARN + 0x018))
    146 #define TPM_RC_REFERENCE_S1       ((TPM_RC)(RC_WARN + 0x019))
    147 #define TPM_RC_REFERENCE_S2       ((TPM_RC)(RC_WARN + 0x01A))
    148 #define TPM_RC_REFERENCE_S3       ((TPM_RC)(RC_WARN + 0x01B))
    149 #define TPM_RC_REFERENCE_S4       ((TPM_RC)(RC_WARN + 0x01C))
    150 #define TPM_RC_REFERENCE_S5       ((TPM_RC)(RC_WARN + 0x01D))
    151 #define TPM_RC_REFERENCE_S6       ((TPM_RC)(RC_WARN + 0x01E))
    152 #define TPM_RC_NV_RATE            ((TPM_RC)(RC_WARN + 0x020))
    153 #define TPM_RC_LOCKOUT            ((TPM_RC)(RC_WARN + 0x021))
    154 #define TPM_RC_RETRY              ((TPM_RC)(RC_WARN + 0x022))
    155 #define TPM_RC_NV_UNAVAILABLE     ((TPM_RC)(RC_WARN + 0x023))
    156 #define TPM_RC_NOT_USED            ((TPM_RC)(RC_WARN + 0x7F))
    157 #define TPM_RC_H                                        0x000
    158 #define TPM_RC_P                                        0x040
    159 #define TPM_RC_S                                        0x800
    160 #define TPM_RC_1                                        0x100
    161 #define TPM_RC_2                                        0x200
    162 #define TPM_RC_3                                        0x300
    163 #define TPM_RC_4                                        0x400
    164 #define TPM_RC_5                                        0x500
    165 #define TPM_RC_6                                        0x600
    166 #define TPM_RC_7                                        0x700
    167 #define TPM_RC_8                                        0x800
    168 #define TPM_RC_9                                        0x900
    169 #define TPM_RC_A                                        0xA00
    170 #define TPM_RC_B                                        0xB00
    171 #define TPM_RC_C                                        0xC00
    172 #define TPM_RC_D                                        0xD00
    173 #define TPM_RC_E                                        0xE00
    174 #define TPM_RC_F                                        0xF00
    175 #define TPM_RC_N_MASK                                   0xF00
    176 
    177 // Table 18  Definition of TPM_CLOCK_ADJUST Constants <  IN>
    178 typedef INT8 TPM_CLOCK_ADJUST;
    179 #define TPM_CLOCK_COARSE_SLOWER  -3
    180 #define TPM_CLOCK_MEDIUM_SLOWER  -2
    181 #define TPM_CLOCK_FINE_SLOWER    -1
    182 #define TPM_CLOCK_NO_CHANGE       0
    183 #define TPM_CLOCK_FINE_FASTER     1
    184 #define TPM_CLOCK_MEDIUM_FASTER   2
    185 #define TPM_CLOCK_COARSE_FASTER   3
    186 
    187 // Table 19  Definition of TPM_EO Constants <  IN/OUT>
    188 typedef UINT16 TPM_EO;
    189 #define TPM_EO_EQ           0x0000
    190 #define TPM_EO_NEQ          0x0001
    191 #define TPM_EO_SIGNED_GT    0x0002
    192 #define TPM_EO_UNSIGNED_GT  0x0003
    193 #define TPM_EO_SIGNED_LT    0x0004
    194 #define TPM_EO_UNSIGNED_LT  0x0005
    195 #define TPM_EO_SIGNED_GE    0x0006
    196 #define TPM_EO_UNSIGNED_GE  0x0007
    197 #define TPM_EO_SIGNED_LE    0x0008
    198 #define TPM_EO_UNSIGNED_LE  0x0009
    199 #define TPM_EO_BITSET       0x000A
    200 #define TPM_EO_BITCLEAR     0x000B
    201 
    202 // Table 20  Definition of TPM_ST Constants <  IN/OUT, S>
    203 typedef UINT16 TPM_ST;
    204 #define TPM_ST_RSP_COMMAND           0x00C4
    205 #define TPM_ST_NULL                  0X8000
    206 #define TPM_ST_NO_SESSIONS           0x8001
    207 #define TPM_ST_SESSIONS              0x8002
    208 #define TPM_ST_ATTEST_NV             0x8014
    209 #define TPM_ST_ATTEST_COMMAND_AUDIT  0x8015
    210 #define TPM_ST_ATTEST_SESSION_AUDIT  0x8016
    211 #define TPM_ST_ATTEST_CERTIFY        0x8017
    212 #define TPM_ST_ATTEST_QUOTE          0x8018
    213 #define TPM_ST_ATTEST_TIME           0x8019
    214 #define TPM_ST_ATTEST_CREATION       0x801A
    215 #define TPM_ST_CREATION              0x8021
    216 #define TPM_ST_VERIFIED              0x8022
    217 #define TPM_ST_AUTH_SECRET           0x8023
    218 #define TPM_ST_HASHCHECK             0x8024
    219 #define TPM_ST_AUTH_SIGNED           0x8025
    220 #define TPM_ST_FU_MANIFEST           0x8029
    221 
    222 // Table 21  Definition of TPM_SU Constants <  IN>
    223 typedef UINT16 TPM_SU;
    224 #define TPM_SU_CLEAR  0x0000
    225 #define TPM_SU_STATE  0x0001
    226 
    227 // Table 22  Definition of TPM_SE Constants <  IN>
    228 typedef UINT8 TPM_SE;
    229 #define TPM_SE_HMAC    0x00
    230 #define TPM_SE_POLICY  0x01
    231 #define TPM_SE_TRIAL   0x03
    232 
    233 // Table 23  Definition of TPM_CAP Constants
    234 typedef UINT32 TPM_CAP;
    235 #define TPM_CAP_FIRST            0x00000000
    236 #define TPM_CAP_ALGS             0x00000000
    237 #define TPM_CAP_HANDLES          0x00000001
    238 #define TPM_CAP_COMMANDS         0x00000002
    239 #define TPM_CAP_PP_COMMANDS      0x00000003
    240 #define TPM_CAP_AUDIT_COMMANDS   0x00000004
    241 #define TPM_CAP_PCRS             0x00000005
    242 #define TPM_CAP_TPM_PROPERTIES   0x00000006
    243 #define TPM_CAP_PCR_PROPERTIES   0x00000007
    244 #define TPM_CAP_ECC_CURVES       0x00000008
    245 #define TPM_CAP_LAST             0x00000008
    246 #define TPM_CAP_VENDOR_PROPERTY  0x00000100
    247 
    248 // Table 24  Definition of TPM_PT Constants <  IN/OUT, S>
    249 typedef UINT32 TPM_PT;
    250 #define TPM_PT_NONE                                0x00000000
    251 #define PT_GROUP                                   0x00000100
    252 #define PT_FIXED                               (PT_GROUP * 1)
    253 #define TPM_PT_FAMILY_INDICATOR      ((TPM_PT)(PT_FIXED + 0))
    254 #define TPM_PT_LEVEL                 ((TPM_PT)(PT_FIXED + 1))
    255 #define TPM_PT_REVISION              ((TPM_PT)(PT_FIXED + 2))
    256 #define TPM_PT_DAY_OF_YEAR           ((TPM_PT)(PT_FIXED + 3))
    257 #define TPM_PT_YEAR                  ((TPM_PT)(PT_FIXED + 4))
    258 #define TPM_PT_MANUFACTURER          ((TPM_PT)(PT_FIXED + 5))
    259 #define TPM_PT_VENDOR_STRING_1       ((TPM_PT)(PT_FIXED + 6))
    260 #define TPM_PT_VENDOR_STRING_2       ((TPM_PT)(PT_FIXED + 7))
    261 #define TPM_PT_VENDOR_STRING_3       ((TPM_PT)(PT_FIXED + 8))
    262 #define TPM_PT_VENDOR_STRING_4       ((TPM_PT)(PT_FIXED + 9))
    263 #define TPM_PT_VENDOR_TPM_TYPE      ((TPM_PT)(PT_FIXED + 10))
    264 #define TPM_PT_FIRMWARE_VERSION_1   ((TPM_PT)(PT_FIXED + 11))
    265 #define TPM_PT_FIRMWARE_VERSION_2   ((TPM_PT)(PT_FIXED + 12))
    266 #define TPM_PT_INPUT_BUFFER         ((TPM_PT)(PT_FIXED + 13))
    267 #define TPM_PT_HR_TRANSIENT_MIN     ((TPM_PT)(PT_FIXED + 14))
    268 #define TPM_PT_HR_PERSISTENT_MIN    ((TPM_PT)(PT_FIXED + 15))
    269 #define TPM_PT_HR_LOADED_MIN        ((TPM_PT)(PT_FIXED + 16))
    270 #define TPM_PT_ACTIVE_SESSIONS_MAX  ((TPM_PT)(PT_FIXED + 17))
    271 #define TPM_PT_PCR_COUNT            ((TPM_PT)(PT_FIXED + 18))
    272 #define TPM_PT_PCR_SELECT_MIN       ((TPM_PT)(PT_FIXED + 19))
    273 #define TPM_PT_CONTEXT_GAP_MAX      ((TPM_PT)(PT_FIXED + 20))
    274 #define TPM_PT_NV_COUNTERS_MAX      ((TPM_PT)(PT_FIXED + 22))
    275 #define TPM_PT_NV_INDEX_MAX         ((TPM_PT)(PT_FIXED + 23))
    276 #define TPM_PT_MEMORY               ((TPM_PT)(PT_FIXED + 24))
    277 #define TPM_PT_CLOCK_UPDATE         ((TPM_PT)(PT_FIXED + 25))
    278 #define TPM_PT_CONTEXT_HASH         ((TPM_PT)(PT_FIXED + 26))
    279 #define TPM_PT_CONTEXT_SYM          ((TPM_PT)(PT_FIXED + 27))
    280 #define TPM_PT_CONTEXT_SYM_SIZE     ((TPM_PT)(PT_FIXED + 28))
    281 #define TPM_PT_ORDERLY_COUNT        ((TPM_PT)(PT_FIXED + 29))
    282 #define TPM_PT_MAX_COMMAND_SIZE     ((TPM_PT)(PT_FIXED + 30))
    283 #define TPM_PT_MAX_RESPONSE_SIZE    ((TPM_PT)(PT_FIXED + 31))
    284 #define TPM_PT_MAX_DIGEST           ((TPM_PT)(PT_FIXED + 32))
    285 #define TPM_PT_MAX_OBJECT_CONTEXT   ((TPM_PT)(PT_FIXED + 33))
    286 #define TPM_PT_MAX_SESSION_CONTEXT  ((TPM_PT)(PT_FIXED + 34))
    287 #define TPM_PT_PS_FAMILY_INDICATOR  ((TPM_PT)(PT_FIXED + 35))
    288 #define TPM_PT_PS_LEVEL             ((TPM_PT)(PT_FIXED + 36))
    289 #define TPM_PT_PS_REVISION          ((TPM_PT)(PT_FIXED + 37))
    290 #define TPM_PT_PS_DAY_OF_YEAR       ((TPM_PT)(PT_FIXED + 38))
    291 #define TPM_PT_PS_YEAR              ((TPM_PT)(PT_FIXED + 39))
    292 #define TPM_PT_SPLIT_MAX            ((TPM_PT)(PT_FIXED + 40))
    293 #define TPM_PT_TOTAL_COMMANDS       ((TPM_PT)(PT_FIXED + 41))
    294 #define TPM_PT_LIBRARY_COMMANDS     ((TPM_PT)(PT_FIXED + 42))
    295 #define TPM_PT_VENDOR_COMMANDS      ((TPM_PT)(PT_FIXED + 43))
    296 #define TPM_PT_NV_BUFFER_MAX        ((TPM_PT)(PT_FIXED + 44))
    297 #define PT_VAR                                 (PT_GROUP * 2)
    298 #define TPM_PT_PERMANENT               ((TPM_PT)(PT_VAR + 0))
    299 #define TPM_PT_STARTUP_CLEAR           ((TPM_PT)(PT_VAR + 1))
    300 #define TPM_PT_HR_NV_INDEX             ((TPM_PT)(PT_VAR + 2))
    301 #define TPM_PT_HR_LOADED               ((TPM_PT)(PT_VAR + 3))
    302 #define TPM_PT_HR_LOADED_AVAIL         ((TPM_PT)(PT_VAR + 4))
    303 #define TPM_PT_HR_ACTIVE               ((TPM_PT)(PT_VAR + 5))
    304 #define TPM_PT_HR_ACTIVE_AVAIL         ((TPM_PT)(PT_VAR + 6))
    305 #define TPM_PT_HR_TRANSIENT_AVAIL      ((TPM_PT)(PT_VAR + 7))
    306 #define TPM_PT_HR_PERSISTENT           ((TPM_PT)(PT_VAR + 8))
    307 #define TPM_PT_HR_PERSISTENT_AVAIL     ((TPM_PT)(PT_VAR + 9))
    308 #define TPM_PT_NV_COUNTERS            ((TPM_PT)(PT_VAR + 10))
    309 #define TPM_PT_NV_COUNTERS_AVAIL      ((TPM_PT)(PT_VAR + 11))
    310 #define TPM_PT_ALGORITHM_SET          ((TPM_PT)(PT_VAR + 12))
    311 #define TPM_PT_LOADED_CURVES          ((TPM_PT)(PT_VAR + 13))
    312 #define TPM_PT_LOCKOUT_COUNTER        ((TPM_PT)(PT_VAR + 14))
    313 #define TPM_PT_MAX_AUTH_FAIL          ((TPM_PT)(PT_VAR + 15))
    314 #define TPM_PT_LOCKOUT_INTERVAL       ((TPM_PT)(PT_VAR + 16))
    315 #define TPM_PT_LOCKOUT_RECOVERY       ((TPM_PT)(PT_VAR + 17))
    316 #define TPM_PT_NV_WRITE_RECOVERY      ((TPM_PT)(PT_VAR + 18))
    317 #define TPM_PT_AUDIT_COUNTER_0        ((TPM_PT)(PT_VAR + 19))
    318 #define TPM_PT_AUDIT_COUNTER_1        ((TPM_PT)(PT_VAR + 20))
    319 
    320 // Table 25  Definition of TPM_PT_PCR Constants <  IN/OUT, S>
    321 typedef UINT32 TPM_PT_PCR;
    322 #define TPM_PT_PCR_FIRST         0x00000000
    323 #define TPM_PT_PCR_SAVE          0x00000000
    324 #define TPM_PT_PCR_EXTEND_L0     0x00000001
    325 #define TPM_PT_PCR_RESET_L0      0x00000002
    326 #define TPM_PT_PCR_EXTEND_L1     0x00000003
    327 #define TPM_PT_PCR_RESET_L1      0x00000004
    328 #define TPM_PT_PCR_EXTEND_L2     0x00000005
    329 #define TPM_PT_PCR_RESET_L2      0x00000006
    330 #define TPM_PT_PCR_EXTEND_L3     0x00000007
    331 #define TPM_PT_PCR_RESET_L3      0x00000008
    332 #define TPM_PT_PCR_EXTEND_L4     0x00000009
    333 #define TPM_PT_PCR_RESET_L4      0x0000000A
    334 #define TPM_PT_PCR_NO_INCREMENT  0x00000011
    335 #define TPM_PT_PCR_DRTM_RESET    0x00000012
    336 #define TPM_PT_PCR_POLICY        0x00000013
    337 #define TPM_PT_PCR_AUTH          0x00000014
    338 #define TPM_PT_PCR_LAST          0x00000014
    339 
    340 // Table 26  Definition of TPM_PS Constants <  OUT>
    341 typedef UINT32 TPM_PS;
    342 #define TPM_PS_MAIN            0x00000000
    343 #define TPM_PS_PC              0x00000001
    344 #define TPM_PS_PDA             0x00000002
    345 #define TPM_PS_CELL_PHONE      0x00000003
    346 #define TPM_PS_SERVER          0x00000004
    347 #define TPM_PS_PERIPHERAL      0x00000005
    348 #define TPM_PS_TSS             0x00000006
    349 #define TPM_PS_STORAGE         0x00000007
    350 #define TPM_PS_AUTHENTICATION  0x00000008
    351 #define TPM_PS_EMBEDDED        0x00000009
    352 #define TPM_PS_HARDCOPY        0x0000000A
    353 #define TPM_PS_INFRASTRUCTURE  0x0000000B
    354 #define TPM_PS_VIRTUALIZATION  0x0000000C
    355 #define TPM_PS_TNC             0x0000000D
    356 #define TPM_PS_MULTI_TENANT    0x0000000E
    357 #define TPM_PS_TC              0x0000000F
    358 
    359 // Table 27  Definition of Types for Handles
    360 typedef UINT32 TPM_HANDLE;
    361 
    362 // Table 28  Definition of TPM_HT Constants <  S>
    363 typedef UINT8 TPM_HT;
    364 #define TPM_HT_PCR             0x00
    365 #define TPM_HT_NV_INDEX        0x01
    366 #define TPM_HT_HMAC_SESSION    0x02
    367 #define TPM_HT_LOADED_SESSION  0x02
    368 #define TPM_HT_POLICY_SESSION  0x03
    369 #define TPM_HT_ACTIVE_SESSION  0x03
    370 #define TPM_HT_PERMANENT       0x40
    371 #define TPM_HT_TRANSIENT       0x80
    372 #define TPM_HT_PERSISTENT      0x81
    373 
    374 // Table 29  Definition of TPM_RH Constants <  S>
    375 typedef TPM_HANDLE TPM_RH;
    376 #define TPM_RH_FIRST        0x40000000
    377 #define TPM_RH_SRK          0x40000000
    378 #define TPM_RH_OWNER        0x40000001
    379 #define TPM_RH_REVOKE       0x40000002
    380 #define TPM_RH_TRANSPORT    0x40000003
    381 #define TPM_RH_OPERATOR     0x40000004
    382 #define TPM_RH_ADMIN        0x40000005
    383 #define TPM_RH_EK           0x40000006
    384 #define TPM_RH_NULL         0x40000007
    385 #define TPM_RH_UNASSIGNED   0x40000008
    386 #define TPM_RS_PW           0x40000009
    387 #define TPM_RH_LOCKOUT      0x4000000A
    388 #define TPM_RH_ENDORSEMENT  0x4000000B
    389 #define TPM_RH_PLATFORM     0x4000000C
    390 #define TPM_RH_PLATFORM_NV  0x4000000D
    391 #define TPM_RH_AUTH_00      0x40000010
    392 #define TPM_RH_AUTH_FF      0x4000010F
    393 #define TPM_RH_LAST         0x4000010F
    394 
    395 // Table 30  Definition of TPM_HC Constants <  S>
    396 typedef TPM_HANDLE TPM_HC;
    397 #define HR_HANDLE_MASK                                            0x00FFFFFF
    398 #define HR_RANGE_MASK                                             0xFF000000
    399 #define HR_SHIFT                                                          24
    400 #define HR_PCR                                     (TPM_HT_PCR <<  HR_SHIFT)
    401 #define HR_HMAC_SESSION                   (TPM_HT_HMAC_SESSION <<  HR_SHIFT)
    402 #define HR_POLICY_SESSION               (TPM_HT_POLICY_SESSION <<  HR_SHIFT)
    403 #define HR_TRANSIENT                         (TPM_HT_TRANSIENT <<  HR_SHIFT)
    404 #define HR_PERSISTENT                       (TPM_HT_PERSISTENT <<  HR_SHIFT)
    405 #define HR_NV_INDEX                           (TPM_HT_NV_INDEX <<  HR_SHIFT)
    406 #define HR_PERMANENT                         (TPM_HT_PERMANENT <<  HR_SHIFT)
    407 #define PCR_FIRST                                               (HR_PCR + 0)
    408 #define PCR_LAST                          (PCR_FIRST + IMPLEMENTATION_PCR-1)
    409 #define HMAC_SESSION_FIRST                             (HR_HMAC_SESSION + 0)
    410 #define HMAC_SESSION_LAST         (HMAC_SESSION_FIRST+MAX_ACTIVE_SESSIONS-1)
    411 #define LOADED_SESSION_FIRST                              HMAC_SESSION_FIRST
    412 #define LOADED_SESSION_LAST                                HMAC_SESSION_LAST
    413 #define POLICY_SESSION_FIRST                         (HR_POLICY_SESSION + 0)
    414 #define POLICY_SESSION_LAST   (POLICY_SESSION_FIRST + MAX_ACTIVE_SESSIONS-1)
    415 #define TRANSIENT_FIRST                                   (HR_TRANSIENT + 0)
    416 #define ACTIVE_SESSION_FIRST                            POLICY_SESSION_FIRST
    417 #define ACTIVE_SESSION_LAST                              POLICY_SESSION_LAST
    418 #define TRANSIENT_LAST                (TRANSIENT_FIRST+MAX_LOADED_OBJECTS-1)
    419 #define PERSISTENT_FIRST                                 (HR_PERSISTENT + 0)
    420 #define PERSISTENT_LAST                      (PERSISTENT_FIRST + 0x00FFFFFF)
    421 #define PLATFORM_PERSISTENT                  (PERSISTENT_FIRST + 0x00800000)
    422 #define NV_INDEX_FIRST                                     (HR_NV_INDEX + 0)
    423 #define NV_INDEX_LAST                          (NV_INDEX_FIRST + 0x00FFFFFF)
    424 #define PERMANENT_FIRST                                         TPM_RH_FIRST
    425 #define PERMANENT_LAST                                           TPM_RH_LAST
    426 
    427 // Table 31  Definition of TPMA_ALGORITHM Bits
    428 typedef struct {
    429   UINT32 asymmetric    : 1;
    430   UINT32 symmetric     : 1;
    431   UINT32 hash          : 1;
    432   UINT32 object        : 1;
    433   UINT32 reserved4_7   : 4;
    434   UINT32 signing       : 1;
    435   UINT32 encrypting    : 1;
    436   UINT32 method        : 1;
    437   UINT32 reserved11_31 : 21;
    438 } TPMA_ALGORITHM;
    439 
    440 // Table 32  Definition of TPMA_OBJECT Bits
    441 typedef struct {
    442   UINT32 reserved0            : 1;
    443   UINT32 fixedTPM             : 1;
    444   UINT32 stClear              : 1;
    445   UINT32 reserved3            : 1;
    446   UINT32 fixedParent          : 1;
    447   UINT32 sensitiveDataOrigin  : 1;
    448   UINT32 userWithAuth         : 1;
    449   UINT32 adminWithPolicy      : 1;
    450   UINT32 reserved8_9          : 2;
    451   UINT32 noDA                 : 1;
    452   UINT32 encryptedDuplication : 1;
    453   UINT32 reserved12_15        : 4;
    454   UINT32 restricted           : 1;
    455   UINT32 decrypt              : 1;
    456   UINT32 sign                 : 1;
    457   UINT32 reserved19_31        : 13;
    458 } TPMA_OBJECT;
    459 
    460 // Table 33  Definition of TPMA_SESSION Bits <  IN/OUT>
    461 typedef struct {
    462   UINT8 continueSession : 1;
    463   UINT8 auditExclusive  : 1;
    464   UINT8 auditReset      : 1;
    465   UINT8 reserved3_4     : 2;
    466   UINT8 decrypt         : 1;
    467   UINT8 encrypt         : 1;
    468   UINT8 audit           : 1;
    469 } TPMA_SESSION;
    470 
    471 // Table 34  Definition of TPMA_LOCALITY Bits <  IN/OUT>
    472 typedef struct {
    473   UINT8 locZero  : 1;
    474   UINT8 locOne   : 1;
    475   UINT8 locTwo   : 1;
    476   UINT8 locThree : 1;
    477   UINT8 locFour  : 1;
    478   UINT8 Extended : 3;
    479 } TPMA_LOCALITY;
    480 
    481 // Table 35  Definition of TPMA_PERMANENT Bits <  OUT>
    482 typedef struct {
    483   UINT32 ownerAuthSet       : 1;
    484   UINT32 endorsementAuthSet : 1;
    485   UINT32 lockoutAuthSet     : 1;
    486   UINT32 reserved3_7        : 5;
    487   UINT32 disableClear       : 1;
    488   UINT32 inLockout          : 1;
    489   UINT32 tpmGeneratedEPS    : 1;
    490   UINT32 reserved11_31      : 21;
    491 } TPMA_PERMANENT;
    492 
    493 // Table 36  Definition of TPMA_STARTUP_CLEAR Bits <  OUT>
    494 typedef struct {
    495   UINT32 phEnable     : 1;
    496   UINT32 shEnable     : 1;
    497   UINT32 ehEnable     : 1;
    498   UINT32 phEnableNV   : 1;
    499   UINT32 reserved4_30 : 27;
    500   UINT32 orderly      : 1;
    501 } TPMA_STARTUP_CLEAR;
    502 
    503 // Table 37  Definition of TPMA_MEMORY Bits <  Out>
    504 typedef struct {
    505   UINT32 sharedRAM         : 1;
    506   UINT32 sharedNV          : 1;
    507   UINT32 objectCopiedToRam : 1;
    508   UINT32 reserved3_31      : 29;
    509 } TPMA_MEMORY;
    510 
    511 // Table 38  Definition of TPMA_CC Bits <  OUT>
    512 typedef struct {
    513   TPM_CC commandIndex  : 16;
    514   TPM_CC reserved16_21 : 6;
    515   TPM_CC nv            : 1;
    516   TPM_CC extensive     : 1;
    517   TPM_CC flushed       : 1;
    518   TPM_CC cHandles      : 3;
    519   TPM_CC rHandle       : 1;
    520   TPM_CC V             : 1;
    521   TPM_CC Res           : 2;
    522 } TPMA_CC;
    523 
    524 // Table 39  Definition of TPMI_YES_NO Type
    525 typedef BYTE TPMI_YES_NO;
    526 // Table 40  Definition of TPMI_DH_OBJECT Type
    527 typedef TPM_HANDLE TPMI_DH_OBJECT;
    528 // Table 41  Definition of TPMI_DH_PERSISTENT Type
    529 typedef TPM_HANDLE TPMI_DH_PERSISTENT;
    530 // Table 42  Definition of TPMI_DH_ENTITY Type <  IN>
    531 typedef TPM_HANDLE TPMI_DH_ENTITY;
    532 // Table 43  Definition of TPMI_DH_PCR Type <  IN>
    533 typedef TPM_HANDLE TPMI_DH_PCR;
    534 // Table 44  Definition of TPMI_SH_AUTH_SESSION Type <  IN/OUT>
    535 typedef TPM_HANDLE TPMI_SH_AUTH_SESSION;
    536 // Table 45  Definition of TPMI_SH_HMAC Type <  IN/OUT>
    537 typedef TPM_HANDLE TPMI_SH_HMAC;
    538 // Table 46  Definition of TPMI_SH_POLICY Type <  IN/OUT>
    539 typedef TPM_HANDLE TPMI_SH_POLICY;
    540 // Table 47  Definition of TPMI_DH_CONTEXT Type
    541 typedef TPM_HANDLE TPMI_DH_CONTEXT;
    542 // Table 48  Definition of TPMI_RH_HIERARCHY Type
    543 typedef TPM_HANDLE TPMI_RH_HIERARCHY;
    544 // Table 49  Definition of TPMI_RH_ENABLES Type
    545 typedef TPM_HANDLE TPMI_RH_ENABLES;
    546 // Table 50  Definition of TPMI_RH_HIERARCHY_AUTH Type <  IN>
    547 typedef TPM_HANDLE TPMI_RH_HIERARCHY_AUTH;
    548 // Table 51  Definition of TPMI_RH_PLATFORM Type <  IN>
    549 typedef TPM_HANDLE TPMI_RH_PLATFORM;
    550 // Table 52  Definition of TPMI_RH_OWNER Type <  IN>
    551 typedef TPM_HANDLE TPMI_RH_OWNER;
    552 // Table 53  Definition of TPMI_RH_ENDORSEMENT Type <  IN>
    553 typedef TPM_HANDLE TPMI_RH_ENDORSEMENT;
    554 // Table 54  Definition of TPMI_RH_PROVISION Type <  IN>
    555 typedef TPM_HANDLE TPMI_RH_PROVISION;
    556 // Table 55  Definition of TPMI_RH_CLEAR Type <  IN>
    557 typedef TPM_HANDLE TPMI_RH_CLEAR;
    558 // Table 56  Definition of TPMI_RH_NV_AUTH Type <  IN>
    559 typedef TPM_HANDLE TPMI_RH_NV_AUTH;
    560 // Table 57  Definition of TPMI_RH_LOCKOUT Type <  IN>
    561 typedef TPM_HANDLE TPMI_RH_LOCKOUT;
    562 // Table 58  Definition of TPMI_RH_NV_INDEX Type <  IN/OUT>
    563 typedef TPM_HANDLE TPMI_RH_NV_INDEX;
    564 // Table 59  Definition of TPMI_ALG_HASH Type
    565 typedef TPM_ALG_ID TPMI_ALG_HASH;
    566 // Table 60  Definition of TPMI_ALG_ASYM Type
    567 typedef TPM_ALG_ID TPMI_ALG_ASYM;
    568 // Table 61  Definition of TPMI_ALG_SYM Type
    569 typedef TPM_ALG_ID TPMI_ALG_SYM;
    570 // Table 62  Definition of TPMI_ALG_SYM_OBJECT Type
    571 typedef TPM_ALG_ID TPMI_ALG_SYM_OBJECT;
    572 // Table 63  Definition of TPMI_ALG_SYM_MODE Type
    573 typedef TPM_ALG_ID TPMI_ALG_SYM_MODE;
    574 // Table 64  Definition of TPMI_ALG_KDF Type
    575 typedef TPM_ALG_ID TPMI_ALG_KDF;
    576 // Table 65  Definition of TPMI_ALG_SIG_SCHEME Type
    577 typedef TPM_ALG_ID TPMI_ALG_SIG_SCHEME;
    578 // Table 66  Definition of TPMI_ECC_KEY_EXCHANGE Type
    579 typedef TPM_ALG_ID TPMI_ECC_KEY_EXCHANGE;
    580 // Table 67  Definition of TPMI_ST_COMMAND_TAG Type
    581 typedef TPM_ST TPMI_ST_COMMAND_TAG;
    582 // Table 68  Definition of TPMS_EMPTY Structure <  IN/OUT>
    583 typedef struct {
    584 } TPMS_EMPTY;
    585 
    586 // Table 69  Definition of TPMS_ALGORITHM_DESCRIPTION Structure <  OUT>
    587 typedef struct {
    588   TPM_ALG_ID      alg;
    589   TPMA_ALGORITHM  attributes;
    590 } TPMS_ALGORITHM_DESCRIPTION;
    591 
    592 // Table 70  Definition of TPMU_HA Union <  IN/OUT, S>
    593 typedef union {
    594 #ifdef TPM_ALG_SHA
    595   BYTE  sha[SHA_DIGEST_SIZE];
    596 #endif
    597 #ifdef TPM_ALG_SHA1
    598   BYTE  sha1[SHA1_DIGEST_SIZE];
    599 #endif
    600 #ifdef TPM_ALG_SHA256
    601   BYTE  sha256[SHA256_DIGEST_SIZE];
    602 #endif
    603 #ifdef TPM_ALG_SHA384
    604   BYTE  sha384[SHA384_DIGEST_SIZE];
    605 #endif
    606 #ifdef TPM_ALG_SHA512
    607   BYTE  sha512[SHA512_DIGEST_SIZE];
    608 #endif
    609 #ifdef TPM_ALG_SM3_256
    610   BYTE  sm3_256[SM3_256_DIGEST_SIZE];
    611 #endif
    612 } TPMU_HA;
    613 
    614 // Table 71  Definition of TPMT_HA Structure <  IN/OUT>
    615 typedef struct {
    616   TPMI_ALG_HASH  hashAlg;
    617   TPMU_HA        digest;
    618 } TPMT_HA;
    619 
    620 // Table 72  Definition of TPM2B_DIGEST Structure
    621 typedef union {
    622   struct {
    623     UINT16  size;
    624     BYTE    buffer[sizeof(TPMU_HA)];
    625   } t;
    626   TPM2B b;
    627 } TPM2B_DIGEST;
    628 
    629 // Table 73  Definition of TPM2B_DATA Structure
    630 typedef union {
    631   struct {
    632     UINT16  size;
    633     BYTE    buffer[sizeof(TPMT_HA)];
    634   } t;
    635   TPM2B b;
    636 } TPM2B_DATA;
    637 
    638 // Table 74  Definition of Types for TPM2B_NONCE
    639 typedef TPM2B_DIGEST TPM2B_NONCE;
    640 
    641 // Table 75  Definition of Types for TPM2B_AUTH
    642 typedef TPM2B_DIGEST TPM2B_AUTH;
    643 
    644 // Table 76  Definition of Types for TPM2B_OPERAND
    645 typedef TPM2B_DIGEST TPM2B_OPERAND;
    646 
    647 // Table 77  Definition of TPM2B_EVENT Structure
    648 typedef union {
    649   struct {
    650     UINT16  size;
    651     BYTE    buffer[1024];
    652   } t;
    653   TPM2B b;
    654 } TPM2B_EVENT;
    655 
    656 // Table 78  Definition of TPM2B_MAX_BUFFER Structure
    657 typedef union {
    658   struct {
    659     UINT16  size;
    660     BYTE    buffer[MAX_DIGEST_BUFFER];
    661   } t;
    662   TPM2B b;
    663 } TPM2B_MAX_BUFFER;
    664 
    665 // Table 79  Definition of TPM2B_MAX_NV_BUFFER Structure
    666 typedef union {
    667   struct {
    668     UINT16  size;
    669     BYTE    buffer[MAX_NV_BUFFER_SIZE];
    670   } t;
    671   TPM2B b;
    672 } TPM2B_MAX_NV_BUFFER;
    673 
    674 // Table 80  Definition of TPM2B_TIMEOUT Structure <  IN/OUT>
    675 typedef union {
    676   struct {
    677     UINT16  size;
    678     BYTE    buffer[sizeof(UINT64)];
    679   } t;
    680   TPM2B b;
    681 } TPM2B_TIMEOUT;
    682 
    683 // Table 81  Definition of TPM2B_IV Structure <  IN/OUT>
    684 typedef union {
    685   struct {
    686     UINT16  size;
    687     BYTE    buffer[MAX_SYM_BLOCK_SIZE];
    688   } t;
    689   TPM2B b;
    690 } TPM2B_IV;
    691 
    692 // Table 82  Definition of TPMU_NAME Union <>
    693 typedef union {
    694   TPMT_HA     digest;
    695   TPM_HANDLE  handle;
    696 } TPMU_NAME;
    697 
    698 // Table 83  Definition of TPM2B_NAME Structure
    699 typedef union {
    700   struct {
    701     UINT16  size;
    702     BYTE    name[sizeof(TPMU_NAME)];
    703   } t;
    704   TPM2B b;
    705 } TPM2B_NAME;
    706 
    707 // Table 84  Definition of TPMS_PCR_SELECT Structure
    708 typedef struct {
    709   UINT8  sizeofSelect;
    710   BYTE   pcrSelect[PCR_SELECT_MAX];
    711 } TPMS_PCR_SELECT;
    712 
    713 // Table 85  Definition of TPMS_PCR_SELECTION Structure
    714 typedef struct {
    715   TPMI_ALG_HASH  hash;
    716   UINT8          sizeofSelect;
    717   BYTE           pcrSelect[PCR_SELECT_MAX];
    718 } TPMS_PCR_SELECTION;
    719 
    720 // Unprocessed: Table 86  Values for   proof   Used in Tickets
    721 // Unprocessed: Table 87  General Format of a Ticket
    722 // Table 88  Definition of TPMT_TK_CREATION Structure
    723 typedef struct {
    724   TPM_ST             tag;
    725   TPMI_RH_HIERARCHY  hierarchy;
    726   TPM2B_DIGEST       digest;
    727 } TPMT_TK_CREATION;
    728 
    729 // Table 89  Definition of TPMT_TK_VERIFIED Structure
    730 typedef struct {
    731   TPM_ST             tag;
    732   TPMI_RH_HIERARCHY  hierarchy;
    733   TPM2B_DIGEST       digest;
    734 } TPMT_TK_VERIFIED;
    735 
    736 // Table 90  Definition of TPMT_TK_AUTH Structure
    737 typedef struct {
    738   TPM_ST             tag;
    739   TPMI_RH_HIERARCHY  hierarchy;
    740   TPM2B_DIGEST       digest;
    741 } TPMT_TK_AUTH;
    742 
    743 // Table 91  Definition of TPMT_TK_HASHCHECK Structure
    744 typedef struct {
    745   TPM_ST             tag;
    746   TPMI_RH_HIERARCHY  hierarchy;
    747   TPM2B_DIGEST       digest;
    748 } TPMT_TK_HASHCHECK;
    749 
    750 // Table 92  Definition of TPMS_ALG_PROPERTY Structure <  OUT>
    751 typedef struct {
    752   TPM_ALG_ID      alg;
    753   TPMA_ALGORITHM  algProperties;
    754 } TPMS_ALG_PROPERTY;
    755 
    756 // Table 93  Definition of TPMS_TAGGED_PROPERTY Structure <  OUT>
    757 typedef struct {
    758   TPM_PT  property;
    759   UINT32  value;
    760 } TPMS_TAGGED_PROPERTY;
    761 
    762 // Table 94  Definition of TPMS_TAGGED_PCR_SELECT Structure <  OUT>
    763 typedef struct {
    764   TPM_PT  tag;
    765   UINT8   sizeofSelect;
    766   BYTE    pcrSelect[PCR_SELECT_MAX];
    767 } TPMS_TAGGED_PCR_SELECT;
    768 
    769 // Table 95  Definition of TPML_CC Structure
    770 typedef struct {
    771   UINT32  count;
    772   TPM_CC  commandCodes[MAX_CAP_CC];
    773 } TPML_CC;
    774 
    775 // Table 96  Definition of TPML_CCA Structure <  OUT>
    776 typedef struct {
    777   UINT32   count;
    778   TPMA_CC  commandAttributes[MAX_CAP_CC];
    779 } TPML_CCA;
    780 
    781 // Table 97  Definition of TPML_ALG Structure
    782 typedef struct {
    783   UINT32      count;
    784   TPM_ALG_ID  algorithms[MAX_ALG_LIST_SIZE];
    785 } TPML_ALG;
    786 
    787 // Table 98  Definition of TPML_HANDLE Structure <  OUT>
    788 typedef struct {
    789   UINT32      count;
    790   TPM_HANDLE  handle[MAX_CAP_HANDLES];
    791 } TPML_HANDLE;
    792 
    793 // Table 99  Definition of TPML_DIGEST Structure
    794 typedef struct {
    795   UINT32        count;
    796   TPM2B_DIGEST  digests[8];
    797 } TPML_DIGEST;
    798 
    799 // Table 100  Definition of TPML_DIGEST_VALUES Structure
    800 typedef struct {
    801   UINT32   count;
    802   TPMT_HA  digests[HASH_COUNT];
    803 } TPML_DIGEST_VALUES;
    804 
    805 // Table 101  Definition of TPM2B_DIGEST_VALUES Structure
    806 typedef union {
    807   struct {
    808     UINT16  size;
    809     BYTE    buffer[sizeof(TPML_DIGEST_VALUES)];
    810   } t;
    811   TPM2B b;
    812 } TPM2B_DIGEST_VALUES;
    813 
    814 // Table 102  Definition of TPML_PCR_SELECTION Structure
    815 typedef struct {
    816   UINT32              count;
    817   TPMS_PCR_SELECTION  pcrSelections[HASH_COUNT];
    818 } TPML_PCR_SELECTION;
    819 
    820 // Table 103  Definition of TPML_ALG_PROPERTY Structure <  OUT>
    821 typedef struct {
    822   UINT32             count;
    823   TPMS_ALG_PROPERTY  algProperties[MAX_CAP_ALGS];
    824 } TPML_ALG_PROPERTY;
    825 
    826 // Table 104  Definition of TPML_TAGGED_TPM_PROPERTY Structure <  OUT>
    827 typedef struct {
    828   UINT32                count;
    829   TPMS_TAGGED_PROPERTY  tpmProperty[MAX_TPM_PROPERTIES];
    830 } TPML_TAGGED_TPM_PROPERTY;
    831 
    832 // Table 105  Definition of TPML_TAGGED_PCR_PROPERTY Structure <  OUT>
    833 typedef struct {
    834   UINT32                  count;
    835   TPMS_TAGGED_PCR_SELECT  pcrProperty[MAX_PCR_PROPERTIES];
    836 } TPML_TAGGED_PCR_PROPERTY;
    837 
    838 // Table 106  Definition of TPML_ECC_CURVE Structure <  OUT>
    839 typedef struct {
    840   UINT32         count;
    841   TPM_ECC_CURVE  eccCurves[MAX_ECC_CURVES];
    842 } TPML_ECC_CURVE;
    843 
    844 // Table 107  Definition of TPMU_CAPABILITIES Union <  OUT>
    845 typedef union {
    846   TPML_ALG_PROPERTY         algorithms;
    847   TPML_HANDLE               handles;
    848   TPML_CCA                  command;
    849   TPML_CC                   ppCommands;
    850   TPML_CC                   auditCommands;
    851   TPML_PCR_SELECTION        assignedPCR;
    852   TPML_TAGGED_TPM_PROPERTY  tpmProperties;
    853   TPML_TAGGED_PCR_PROPERTY  pcrProperties;
    854   TPML_ECC_CURVE            eccCurves;
    855 } TPMU_CAPABILITIES;
    856 
    857 // Table 108  Definition of TPMS_CAPABILITY_DATA Structure <  OUT>
    858 typedef struct {
    859   TPM_CAP            capability;
    860   TPMU_CAPABILITIES  data;
    861 } TPMS_CAPABILITY_DATA;
    862 
    863 // Table 109  Definition of TPMS_CLOCK_INFO Structure
    864 typedef struct {
    865   UINT64       clock;
    866   UINT32       resetCount;
    867   UINT32       restartCount;
    868   TPMI_YES_NO  safe;
    869 } TPMS_CLOCK_INFO;
    870 
    871 // Table 110  Definition of TPMS_TIME_INFO Structure
    872 typedef struct {
    873   UINT64           time;
    874   TPMS_CLOCK_INFO  clockInfo;
    875 } TPMS_TIME_INFO;
    876 
    877 // Table 111  Definition of TPMS_TIME_ATTEST_INFO Structure <  OUT>
    878 typedef struct {
    879   TPMS_TIME_INFO  time;
    880   UINT64          firmwareVersion;
    881 } TPMS_TIME_ATTEST_INFO;
    882 
    883 // Table 112  Definition of TPMS_CERTIFY_INFO Structure <  OUT>
    884 typedef struct {
    885   TPM2B_NAME  name;
    886   TPM2B_NAME  qualifiedName;
    887 } TPMS_CERTIFY_INFO;
    888 
    889 // Table 113  Definition of TPMS_QUOTE_INFO Structure <  OUT>
    890 typedef struct {
    891   TPML_PCR_SELECTION  pcrSelect;
    892   TPM2B_DIGEST        pcrDigest;
    893 } TPMS_QUOTE_INFO;
    894 
    895 // Table 114  Definition of TPMS_COMMAND_AUDIT_INFO Structure <  OUT>
    896 typedef struct {
    897   UINT64        auditCounter;
    898   TPM_ALG_ID    digestAlg;
    899   TPM2B_DIGEST  auditDigest;
    900   TPM2B_DIGEST  commandDigest;
    901 } TPMS_COMMAND_AUDIT_INFO;
    902 
    903 // Table 115  Definition of TPMS_SESSION_AUDIT_INFO Structure <  OUT>
    904 typedef struct {
    905   TPMI_YES_NO   exclusiveSession;
    906   TPM2B_DIGEST  sessionDigest;
    907 } TPMS_SESSION_AUDIT_INFO;
    908 
    909 // Table 116  Definition of TPMS_CREATION_INFO Structure <  OUT>
    910 typedef struct {
    911   TPM2B_NAME    objectName;
    912   TPM2B_DIGEST  creationHash;
    913 } TPMS_CREATION_INFO;
    914 
    915 // Table 117  Definition of TPMS_NV_CERTIFY_INFO Structure <  OUT>
    916 typedef struct {
    917   TPM2B_NAME           indexName;
    918   UINT16               offset;
    919   TPM2B_MAX_NV_BUFFER  nvContents;
    920 } TPMS_NV_CERTIFY_INFO;
    921 
    922 // Table 118  Definition of TPMI_ST_ATTEST Type <  OUT>
    923 typedef TPM_ST TPMI_ST_ATTEST;
    924 // Table 119  Definition of TPMU_ATTEST Union <  OUT>
    925 typedef union {
    926   TPMS_CERTIFY_INFO        certify;
    927   TPMS_CREATION_INFO       creation;
    928   TPMS_QUOTE_INFO          quote;
    929   TPMS_COMMAND_AUDIT_INFO  commandAudit;
    930   TPMS_SESSION_AUDIT_INFO  sessionAudit;
    931   TPMS_TIME_ATTEST_INFO    time;
    932   TPMS_NV_CERTIFY_INFO     nv;
    933 } TPMU_ATTEST;
    934 
    935 // Table 120  Definition of TPMS_ATTEST Structure <  OUT>
    936 typedef struct {
    937   TPM_GENERATED    magic;
    938   TPMI_ST_ATTEST   type;
    939   TPM2B_NAME       qualifiedSigner;
    940   TPM2B_DATA       extraData;
    941   TPMS_CLOCK_INFO  clockInfo;
    942   UINT64           firmwareVersion;
    943   TPMU_ATTEST      attested;
    944 } TPMS_ATTEST;
    945 
    946 // Table 121  Definition of TPM2B_ATTEST Structure <  OUT>
    947 typedef union {
    948   struct {
    949     UINT16  size;
    950     BYTE    attestationData[sizeof(TPMS_ATTEST)];
    951   } t;
    952   TPM2B b;
    953 } TPM2B_ATTEST;
    954 
    955 // Table 122  Definition of TPMS_AUTH_COMMAND Structure <  IN>
    956 typedef struct {
    957   TPMI_SH_AUTH_SESSION  sessionHandle;
    958   TPM2B_NONCE           nonce;
    959   TPMA_SESSION          sessionAttributes;
    960   TPM2B_AUTH            hmac;
    961 } TPMS_AUTH_COMMAND;
    962 
    963 // Table 123  Definition of TPMS_AUTH_RESPONSE Structure <  OUT>
    964 typedef struct {
    965   TPM2B_NONCE   nonce;
    966   TPMA_SESSION  sessionAttributes;
    967   TPM2B_AUTH    hmac;
    968 } TPMS_AUTH_RESPONSE;
    969 
    970 // Table 124  Definition of   TPMI_!ALG.S_KEY_BITS Type
    971 typedef TPM_KEY_BITS TPMI_AES_KEY_BITS;
    972 typedef TPM_KEY_BITS TPMI_SM4_KEY_BITS;
    973 typedef TPM_KEY_BITS TPMI_CAMELLIA_KEY_BITS;
    974 
    975 
    976 // Table 125  Definition of TPMU_SYM_KEY_BITS Union
    977 typedef union {
    978 #ifdef TPM_ALG_AES
    979   TPMI_AES_KEY_BITS       aes;
    980 #endif
    981 #ifdef TPM_ALG_SM4
    982   TPMI_SM4_KEY_BITS       sm4;
    983 #endif
    984 #ifdef TPM_ALG_CAMELLIA
    985   TPMI_CAMELLIA_KEY_BITS  camellia;
    986 #endif
    987   TPM_KEY_BITS            sym;
    988 #ifdef TPM_ALG_XOR
    989   TPMI_ALG_HASH           xor_;
    990 #endif
    991 } TPMU_SYM_KEY_BITS;
    992 
    993 // Table 126  Definition of TPMU_SYM_MODE Union
    994 typedef union {
    995 #ifdef TPM_ALG_AES
    996   TPMI_ALG_SYM_MODE  aes;
    997 #endif
    998 #ifdef TPM_ALG_SM4
    999   TPMI_ALG_SYM_MODE  sm4;
   1000 #endif
   1001 #ifdef TPM_ALG_CAMELLIA
   1002   TPMI_ALG_SYM_MODE  camellia;
   1003 #endif
   1004   TPMI_ALG_SYM_MODE  sym;
   1005 } TPMU_SYM_MODE;
   1006 
   1007 // Table 127 xDefinition of TPMU_SYM_DETAILS Union
   1008 typedef union {
   1009 } TPMU_SYM_DETAILS;
   1010 
   1011 // Table 128  Definition of TPMT_SYM_DEF Structure
   1012 typedef struct {
   1013   TPMI_ALG_SYM       algorithm;
   1014   TPMU_SYM_KEY_BITS  keyBits;
   1015   TPMU_SYM_MODE      mode;
   1016 } TPMT_SYM_DEF;
   1017 
   1018 // Table 129  Definition of TPMT_SYM_DEF_OBJECT Structure
   1019 typedef struct {
   1020   TPMI_ALG_SYM_OBJECT  algorithm;
   1021   TPMU_SYM_KEY_BITS    keyBits;
   1022   TPMU_SYM_MODE        mode;
   1023 } TPMT_SYM_DEF_OBJECT;
   1024 
   1025 // Table 130  Definition of TPM2B_SYM_KEY Structure
   1026 typedef union {
   1027   struct {
   1028     UINT16  size;
   1029     BYTE    buffer[MAX_SYM_KEY_BYTES];
   1030   } t;
   1031   TPM2B b;
   1032 } TPM2B_SYM_KEY;
   1033 
   1034 // Table 131  Definition of TPMS_SYMCIPHER_PARMS Structure
   1035 typedef struct {
   1036   TPMT_SYM_DEF_OBJECT  sym;
   1037 } TPMS_SYMCIPHER_PARMS;
   1038 
   1039 // Table 132  Definition of TPM2B_SENSITIVE_DATA Structure
   1040 typedef union {
   1041   struct {
   1042     UINT16  size;
   1043     BYTE    buffer[MAX_SYM_DATA];
   1044   } t;
   1045   TPM2B b;
   1046 } TPM2B_SENSITIVE_DATA;
   1047 
   1048 // Table 133  Definition of TPMS_SENSITIVE_CREATE Structure <  IN>
   1049 typedef struct {
   1050   TPM2B_AUTH            userAuth;
   1051   TPM2B_SENSITIVE_DATA  data;
   1052 } TPMS_SENSITIVE_CREATE;
   1053 
   1054 // Table 134  Definition of TPM2B_SENSITIVE_CREATE Structure <  IN, S>
   1055 typedef union {
   1056   struct {
   1057     UINT16                 size;
   1058     TPMS_SENSITIVE_CREATE  sensitive;
   1059   } t;
   1060   TPM2B b;
   1061 } TPM2B_SENSITIVE_CREATE;
   1062 
   1063 // Table 135  Definition of TPMS_SCHEME_HASH Structure
   1064 typedef struct {
   1065   TPMI_ALG_HASH  hashAlg;
   1066 } TPMS_SCHEME_HASH;
   1067 
   1068 // Table 136  Definition of TPMS_SCHEME_ECDAA Structure
   1069 typedef struct {
   1070   TPMI_ALG_HASH  hashAlg;
   1071   UINT16         count;
   1072 } TPMS_SCHEME_ECDAA;
   1073 
   1074 // Table 137  Definition of TPMI_ALG_KEYEDHASH_SCHEME Type
   1075 typedef TPM_ALG_ID TPMI_ALG_KEYEDHASH_SCHEME;
   1076 // Table 138  Definition of Types for HMAC_SIG_SCHEME
   1077 typedef TPMS_SCHEME_HASH TPMS_SCHEME_HMAC;
   1078 
   1079 // Table 139  Definition of TPMS_SCHEME_XOR Structure
   1080 typedef struct {
   1081   TPMI_ALG_HASH  hashAlg;
   1082   TPMI_ALG_KDF   kdf;
   1083 } TPMS_SCHEME_XOR;
   1084 
   1085 // Table 140  Definition of TPMU_SCHEME_KEYEDHASH Union <  IN/OUT, S>
   1086 typedef union {
   1087 #ifdef TPM_ALG_HMAC
   1088   TPMS_SCHEME_HMAC  hmac;
   1089 #endif
   1090 #ifdef TPM_ALG_XOR
   1091   TPMS_SCHEME_XOR   xor_;
   1092 #endif
   1093 } TPMU_SCHEME_KEYEDHASH;
   1094 
   1095 // Table 141  Definition of TPMT_KEYEDHASH_SCHEME Structure
   1096 typedef struct {
   1097   TPMI_ALG_KEYEDHASH_SCHEME  scheme;
   1098   TPMU_SCHEME_KEYEDHASH      details;
   1099 } TPMT_KEYEDHASH_SCHEME;
   1100 
   1101 // Table 142  Definition of Types for RSA Signature Schemes
   1102 typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_RSASSA;
   1103 typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_RSAPSS;
   1104 
   1105 // Table 143  Definition of Types for ECC Signature Schemes
   1106 typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_ECDSA;
   1107 typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_SM2;
   1108 typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_ECSCHNORR;
   1109 typedef TPMS_SCHEME_ECDAA TPMS_SIG_SCHEME_ECDAA;
   1110 
   1111 // Table 144  Definition of TPMU_SIG_SCHEME Union <  IN/OUT, S>
   1112 typedef union {
   1113 #ifdef TPM_ALG_RSASSA
   1114   TPMS_SIG_SCHEME_RSASSA     rsassa;
   1115 #endif
   1116 #ifdef TPM_ALG_RSAPSS
   1117   TPMS_SIG_SCHEME_RSAPSS     rsapss;
   1118 #endif
   1119 #ifdef TPM_ALG_ECDSA
   1120   TPMS_SIG_SCHEME_ECDSA      ecdsa;
   1121 #endif
   1122 // TODO(ngm): ECDAA is not currently supported
   1123 // on CR50, but this field has unguarded references
   1124 // in CryptUtil.c, so allow its inclusion.
   1125 // #ifdef TPM_ALG_ECDAA
   1126   TPMS_SIG_SCHEME_ECDAA      ecdaa;
   1127 // #endif
   1128 #ifdef TPM_ALG_SM2
   1129   TPMS_SIG_SCHEME_SM2        sm2;
   1130 #endif
   1131 #ifdef TPM_ALG_ECSCHNORR
   1132   TPMS_SIG_SCHEME_ECSCHNORR  ecschnorr;
   1133 #endif
   1134 #ifdef TPM_ALG_HMAC
   1135   TPMS_SCHEME_HMAC           hmac;
   1136 #endif
   1137   TPMS_SCHEME_HASH           any;
   1138 } TPMU_SIG_SCHEME;
   1139 
   1140 // Table 145  Definition of TPMT_SIG_SCHEME Structure
   1141 typedef struct {
   1142   TPMI_ALG_SIG_SCHEME  scheme;
   1143   TPMU_SIG_SCHEME      details;
   1144 } TPMT_SIG_SCHEME;
   1145 
   1146 // Table 146  Definition of Types for Encryption Schemes
   1147 typedef TPMS_SCHEME_HASH TPMS_ENC_SCHEME_OAEP;
   1148 typedef TPMS_EMPTY TPMS_ENC_SCHEME_RSAES;
   1149 
   1150 // Table 147  Definition of Types for ECC Key Exchange
   1151 typedef TPMS_SCHEME_HASH TPMS_KEY_SCHEME_ECDH;
   1152 typedef TPMS_SCHEME_HASH TPMS_KEY_SCHEME_ECMQV;
   1153 
   1154 // Table 148  Definition of Types for KDF Schemes
   1155 typedef TPMS_SCHEME_HASH TPMS_SCHEME_MGF1;
   1156 typedef TPMS_SCHEME_HASH TPMS_SCHEME_KDF1_SP800_56A;
   1157 typedef TPMS_SCHEME_HASH TPMS_SCHEME_KDF2;
   1158 typedef TPMS_SCHEME_HASH TPMS_SCHEME_KDF1_SP800_108;
   1159 
   1160 // Table 149  Definition of TPMU_KDF_SCHEME Union <  IN/OUT, S>
   1161 typedef union {
   1162 #ifdef TPM_ALG_MGF1
   1163   TPMS_SCHEME_MGF1            mgf1;
   1164 #endif
   1165 #ifdef TPM_ALG_KDF1_SP800_56A
   1166   TPMS_SCHEME_KDF1_SP800_56A  kdf1_sp800_56a;
   1167 #endif
   1168 #ifdef TPM_ALG_KDF2
   1169   TPMS_SCHEME_KDF2            kdf2;
   1170 #endif
   1171 #ifdef TPM_ALG_KDF1_SP800_108
   1172   TPMS_SCHEME_KDF1_SP800_108  kdf1_sp800_108;
   1173 #endif
   1174 } TPMU_KDF_SCHEME;
   1175 
   1176 // Table 150  Definition of TPMT_KDF_SCHEME Structure
   1177 typedef struct {
   1178   TPMI_ALG_KDF     scheme;
   1179   TPMU_KDF_SCHEME  details;
   1180 } TPMT_KDF_SCHEME;
   1181 
   1182 // Table 151  Definition of TPMI_ALG_ASYM_SCHEME Type <>
   1183 typedef TPM_ALG_ID TPMI_ALG_ASYM_SCHEME;
   1184 // Table 152  Definition of TPMU_ASYM_SCHEME Union
   1185 typedef union {
   1186 #ifdef TPM_ALG_ECDH
   1187   TPMS_KEY_SCHEME_ECDH       ecdh;
   1188 #endif
   1189 #ifdef TPM_ALG_ECMQV
   1190   TPMS_KEY_SCHEME_ECMQV      ecmqv;
   1191 #endif
   1192 #ifdef TPM_ALG_RSASSA
   1193   TPMS_SIG_SCHEME_RSASSA     rsassa;
   1194 #endif
   1195 #ifdef TPM_ALG_RSAPSS
   1196   TPMS_SIG_SCHEME_RSAPSS     rsapss;
   1197 #endif
   1198 #ifdef TPM_ALG_ECDSA
   1199   TPMS_SIG_SCHEME_ECDSA      ecdsa;
   1200 #endif
   1201 #ifdef TPM_ALG_ECDAA
   1202   TPMS_SIG_SCHEME_ECDAA      ecdaa;
   1203 #endif
   1204 #ifdef TPM_ALG_SM2
   1205   TPMS_SIG_SCHEME_SM2        sm2;
   1206 #endif
   1207 #ifdef TPM_ALG_ECSCHNORR
   1208   TPMS_SIG_SCHEME_ECSCHNORR  ecschnorr;
   1209 #endif
   1210 #ifdef TPM_ALG_RSAES
   1211   TPMS_ENC_SCHEME_RSAES      rsaes;
   1212 #endif
   1213 #ifdef TPM_ALG_OAEP
   1214   TPMS_ENC_SCHEME_OAEP       oaep;
   1215 #endif
   1216   TPMS_SCHEME_HASH           anySig;
   1217 } TPMU_ASYM_SCHEME;
   1218 
   1219 // Table 153  Definition of TPMT_ASYM_SCHEME Structure <>
   1220 typedef struct {
   1221   TPMI_ALG_ASYM_SCHEME  scheme;
   1222   TPMU_ASYM_SCHEME      details;
   1223 } TPMT_ASYM_SCHEME;
   1224 
   1225 // Table 154  Definition of TPMI_ALG_RSA_SCHEME Type
   1226 typedef TPM_ALG_ID TPMI_ALG_RSA_SCHEME;
   1227 // Table 155  Definition of TPMT_RSA_SCHEME Structure
   1228 typedef struct {
   1229   TPMI_ALG_RSA_SCHEME  scheme;
   1230   TPMU_ASYM_SCHEME     details;
   1231 } TPMT_RSA_SCHEME;
   1232 
   1233 // Table 156  Definition of TPMI_ALG_RSA_DECRYPT Type
   1234 typedef TPM_ALG_ID TPMI_ALG_RSA_DECRYPT;
   1235 // Table 157  Definition of TPMT_RSA_DECRYPT Structure
   1236 typedef struct {
   1237   TPMI_ALG_RSA_DECRYPT  scheme;
   1238   TPMU_ASYM_SCHEME      details;
   1239 } TPMT_RSA_DECRYPT;
   1240 
   1241 // Table 158  Definition of TPM2B_PUBLIC_KEY_RSA Structure
   1242 typedef union {
   1243   struct {
   1244     UINT16  size;
   1245     BYTE    buffer[MAX_RSA_KEY_BYTES];
   1246   } t;
   1247   TPM2B b;
   1248 } TPM2B_PUBLIC_KEY_RSA;
   1249 
   1250 // Table 159  Definition of TPMI_RSA_KEY_BITS Type
   1251 typedef TPM_KEY_BITS TPMI_RSA_KEY_BITS;
   1252 // Table 160  Definition of TPM2B_PRIVATE_KEY_RSA Structure
   1253 typedef union {
   1254   struct {
   1255     UINT16  size;
   1256     BYTE    buffer[MAX_RSA_KEY_BYTES/2];
   1257   } t;
   1258   TPM2B b;
   1259 } TPM2B_PRIVATE_KEY_RSA;
   1260 
   1261 // Table 161  Definition of TPM2B_ECC_PARAMETER Structure
   1262 typedef union {
   1263   struct {
   1264     UINT16  size;
   1265     BYTE    buffer[MAX_ECC_KEY_BYTES];
   1266   } t;
   1267   TPM2B b;
   1268 } TPM2B_ECC_PARAMETER;
   1269 
   1270 // Table 162  Definition of TPMS_ECC_POINT Structure
   1271 typedef struct {
   1272   TPM2B_ECC_PARAMETER  x;
   1273   TPM2B_ECC_PARAMETER  y;
   1274 } TPMS_ECC_POINT;
   1275 
   1276 // Table   163    Definition of TPM2B_ECC_POINT Structure
   1277 typedef union {
   1278   struct {
   1279     UINT16          size;
   1280     TPMS_ECC_POINT  point;
   1281   } t;
   1282   TPM2B b;
   1283 } TPM2B_ECC_POINT;
   1284 
   1285 // Table 164  Definition of TPMI_ALG_ECC_SCHEME Type
   1286 typedef TPM_ALG_ID TPMI_ALG_ECC_SCHEME;
   1287 // Table 165  Definition of TPMI_ECC_CURVE Type
   1288 typedef TPM_ECC_CURVE TPMI_ECC_CURVE;
   1289 // Table 166  Definition of TPMT_ECC_SCHEME Structure
   1290 typedef struct {
   1291   TPMI_ALG_ECC_SCHEME  scheme;
   1292   TPMU_ASYM_SCHEME     details;
   1293 } TPMT_ECC_SCHEME;
   1294 
   1295 // Table 167  Definition of TPMS_ALGORITHM_DETAIL_ECC Structure <  OUT>
   1296 typedef struct {
   1297   TPM_ECC_CURVE        curveID;
   1298   UINT16               keySize;
   1299   TPMT_KDF_SCHEME      kdf;
   1300   TPMT_ECC_SCHEME      sign;
   1301   TPM2B_ECC_PARAMETER  p;
   1302   TPM2B_ECC_PARAMETER  a;
   1303   TPM2B_ECC_PARAMETER  b;
   1304   TPM2B_ECC_PARAMETER  gX;
   1305   TPM2B_ECC_PARAMETER  gY;
   1306   TPM2B_ECC_PARAMETER  n;
   1307   TPM2B_ECC_PARAMETER  h;
   1308 } TPMS_ALGORITHM_DETAIL_ECC;
   1309 
   1310 // Table 168  Definition of TPMS_SIGNATURE_RSA Structure
   1311 typedef struct {
   1312   TPMI_ALG_HASH         hash;
   1313   TPM2B_PUBLIC_KEY_RSA  sig;
   1314 } TPMS_SIGNATURE_RSA;
   1315 
   1316 // Table 169  Definition of Types for Signature
   1317 typedef TPMS_SIGNATURE_RSA TPMS_SIGNATURE_RSASSA;
   1318 typedef TPMS_SIGNATURE_RSA TPMS_SIGNATURE_RSAPSS;
   1319 
   1320 // Table 170  Definition of TPMS_SIGNATURE_ECC Structure
   1321 typedef struct {
   1322   TPMI_ALG_HASH        hash;
   1323   TPM2B_ECC_PARAMETER  signatureR;
   1324   TPM2B_ECC_PARAMETER  signatureS;
   1325 } TPMS_SIGNATURE_ECC;
   1326 
   1327 // Table 171  Definition of Types for TPMS_SIGNATUE_ECC
   1328 typedef TPMS_SIGNATURE_ECC TPMS_SIGNATURE_ECDSA;
   1329 typedef TPMS_SIGNATURE_ECC TPMS_SIGNATURE_ECDAA;
   1330 typedef TPMS_SIGNATURE_ECC TPMS_SIGNATURE_SM2;
   1331 typedef TPMS_SIGNATURE_ECC TPMS_SIGNATURE_ECSCHNORR;
   1332 
   1333 // Table 172  Definition of TPMU_SIGNATURE Union <  IN/OUT, S>
   1334 typedef union {
   1335 #ifdef TPM_ALG_RSASSA
   1336   TPMS_SIGNATURE_RSASSA     rsassa;
   1337 #endif
   1338 #ifdef TPM_ALG_RSAPSS
   1339   TPMS_SIGNATURE_RSAPSS     rsapss;
   1340 #endif
   1341 #ifdef TPM_ALG_ECDSA
   1342   TPMS_SIGNATURE_ECDSA      ecdsa;
   1343 #endif
   1344 #ifdef TPM_ALG_ECDAA
   1345   TPMS_SIGNATURE_ECDAA      ecdaa;
   1346 #endif
   1347 #ifdef TPM_ALG_SM2
   1348   TPMS_SIGNATURE_SM2        sm2;
   1349 #endif
   1350 #ifdef TPM_ALG_ECSCHNORR
   1351   TPMS_SIGNATURE_ECSCHNORR  ecschnorr;
   1352 #endif
   1353 #ifdef TPM_ALG_HMAC
   1354   TPMT_HA                   hmac;
   1355 #endif
   1356   TPMS_SCHEME_HASH          any;
   1357 } TPMU_SIGNATURE;
   1358 
   1359 // Table 173  Definition of TPMT_SIGNATURE Structure
   1360 typedef struct {
   1361   TPMI_ALG_SIG_SCHEME  sigAlg;
   1362   TPMU_SIGNATURE       signature;
   1363 } TPMT_SIGNATURE;
   1364 
   1365 // Table 174  Definition of TPMU_ENCRYPTED_SECRET Union <  S>
   1366 typedef union {
   1367 #ifdef TPM_ALG_ECC
   1368   BYTE  ecc[sizeof(TPMS_ECC_POINT)];
   1369 #endif
   1370 #ifdef TPM_ALG_RSA
   1371   BYTE  rsa[MAX_RSA_KEY_BYTES];
   1372 #endif
   1373 #ifdef TPM_ALG_SYMCIPHER
   1374   BYTE  symmetric[sizeof(TPM2B_DIGEST)];
   1375 #endif
   1376 #ifdef TPM_ALG_KEYEDHASH
   1377   BYTE  keyedHash[sizeof(TPM2B_DIGEST)];
   1378 #endif
   1379 } TPMU_ENCRYPTED_SECRET;
   1380 
   1381 // Table 175  Definition of TPM2B_ENCRYPTED_SECRET Structure
   1382 typedef union {
   1383   struct {
   1384     UINT16  size;
   1385     BYTE    secret[sizeof(TPMU_ENCRYPTED_SECRET)];
   1386   } t;
   1387   TPM2B b;
   1388 } TPM2B_ENCRYPTED_SECRET;
   1389 
   1390 // Table 176  Definition of TPMI_ALG_PUBLIC Type
   1391 typedef TPM_ALG_ID TPMI_ALG_PUBLIC;
   1392 // Table 177  Definition of TPMU_PUBLIC_ID Union <  IN/OUT, S>
   1393 typedef union {
   1394 #ifdef TPM_ALG_KEYEDHASH
   1395   TPM2B_DIGEST          keyedHash;
   1396 #endif
   1397 #ifdef TPM_ALG_SYMCIPHER
   1398   TPM2B_DIGEST          sym;
   1399 #endif
   1400 #ifdef TPM_ALG_RSA
   1401   TPM2B_PUBLIC_KEY_RSA  rsa;
   1402 #endif
   1403 #ifdef TPM_ALG_ECC
   1404   TPMS_ECC_POINT        ecc;
   1405 #endif
   1406 } TPMU_PUBLIC_ID;
   1407 
   1408 // Table 178  Definition of TPMS_KEYEDHASH_PARMS Structure
   1409 typedef struct {
   1410   TPMT_KEYEDHASH_SCHEME  scheme;
   1411 } TPMS_KEYEDHASH_PARMS;
   1412 
   1413 // Table 179  Definition of TPMS_ASYM_PARMS Structure <>
   1414 typedef struct {
   1415   TPMT_SYM_DEF_OBJECT  symmetric;
   1416   TPMT_ASYM_SCHEME     scheme;
   1417 } TPMS_ASYM_PARMS;
   1418 
   1419 // Table 180  Definition of TPMS_RSA_PARMS Structure
   1420 typedef struct {
   1421   TPMT_SYM_DEF_OBJECT  symmetric;
   1422   TPMT_RSA_SCHEME      scheme;
   1423   TPMI_RSA_KEY_BITS    keyBits;
   1424   UINT32               exponent;
   1425 } TPMS_RSA_PARMS;
   1426 
   1427 // Table 181  Definition of TPMS_ECC_PARMS Structure
   1428 typedef struct {
   1429   TPMT_SYM_DEF_OBJECT  symmetric;
   1430   TPMT_ECC_SCHEME      scheme;
   1431   TPMI_ECC_CURVE       curveID;
   1432   TPMT_KDF_SCHEME      kdf;
   1433 } TPMS_ECC_PARMS;
   1434 
   1435 // Table 182  Definition of TPMU_PUBLIC_PARMS Union <  IN/OUT, S>
   1436 typedef union {
   1437 #ifdef TPM_ALG_KEYEDHASH
   1438   TPMS_KEYEDHASH_PARMS  keyedHashDetail;
   1439 #endif
   1440 #ifdef TPM_ALG_SYMCIPHER
   1441   TPMS_SYMCIPHER_PARMS  symDetail;
   1442 #endif
   1443 #ifdef TPM_ALG_RSA
   1444   TPMS_RSA_PARMS        rsaDetail;
   1445 #endif
   1446 #ifdef TPM_ALG_ECC
   1447   TPMS_ECC_PARMS        eccDetail;
   1448 #endif
   1449   TPMS_ASYM_PARMS       asymDetail;
   1450 } TPMU_PUBLIC_PARMS;
   1451 
   1452 // Table 183  Definition of TPMT_PUBLIC_PARMS Structure
   1453 typedef struct {
   1454   TPMI_ALG_PUBLIC    type;
   1455   TPMU_PUBLIC_PARMS  parameters;
   1456 } TPMT_PUBLIC_PARMS;
   1457 
   1458 // Table 184  Definition of TPMT_PUBLIC Structure
   1459 typedef struct {
   1460   TPMI_ALG_PUBLIC    type;
   1461   TPMI_ALG_HASH      nameAlg;
   1462   TPMA_OBJECT        objectAttributes;
   1463   TPM2B_DIGEST       authPolicy;
   1464   TPMU_PUBLIC_PARMS  parameters;
   1465   TPMU_PUBLIC_ID     unique;
   1466 } TPMT_PUBLIC;
   1467 
   1468 // Table 185  Definition of TPM2B_PUBLIC Structure
   1469 typedef union {
   1470   struct {
   1471     UINT16       size;
   1472     TPMT_PUBLIC  publicArea;
   1473   } t;
   1474   TPM2B b;
   1475 } TPM2B_PUBLIC;
   1476 
   1477 // Table 186  Definition of TPM2B_PRIVATE_VENDOR_SPECIFIC Structure<>
   1478 typedef union {
   1479   struct {
   1480     UINT16  size;
   1481     BYTE    buffer[PRIVATE_VENDOR_SPECIFIC_BYTES];
   1482   } t;
   1483   TPM2B b;
   1484 } TPM2B_PRIVATE_VENDOR_SPECIFIC;
   1485 
   1486 // Table 187  Definition of TPMU_SENSITIVE_COMPOSITE Union <  IN/OUT, S>
   1487 typedef union {
   1488 #ifdef TPM_ALG_RSA
   1489   TPM2B_PRIVATE_KEY_RSA          rsa;
   1490 #endif
   1491 #ifdef TPM_ALG_ECC
   1492   TPM2B_ECC_PARAMETER            ecc;
   1493 #endif
   1494 #ifdef TPM_ALG_KEYEDHASH
   1495   TPM2B_SENSITIVE_DATA           bits;
   1496 #endif
   1497 #ifdef TPM_ALG_SYMCIPHER
   1498   TPM2B_SYM_KEY                  sym;
   1499 #endif
   1500   TPM2B_PRIVATE_VENDOR_SPECIFIC  any;
   1501 } TPMU_SENSITIVE_COMPOSITE;
   1502 
   1503 // Table 188  Definition of TPMT_SENSITIVE Structure
   1504 typedef struct {
   1505   TPMI_ALG_PUBLIC           sensitiveType;
   1506   TPM2B_AUTH                authValue;
   1507   TPM2B_DIGEST              seedValue;
   1508   TPMU_SENSITIVE_COMPOSITE  sensitive;
   1509 } TPMT_SENSITIVE;
   1510 
   1511 // Table 189  Definition of TPM2B_SENSITIVE Structure <  IN/OUT>
   1512 typedef union {
   1513   struct {
   1514     UINT16          size;
   1515     TPMT_SENSITIVE  sensitiveArea;
   1516   } t;
   1517   TPM2B b;
   1518 } TPM2B_SENSITIVE;
   1519 
   1520 // Table 190  Definition of _PRIVATE Structure <>
   1521 typedef struct {
   1522   TPM2B_DIGEST    integrityOuter;
   1523   TPM2B_DIGEST    integrityInner;
   1524   TPMT_SENSITIVE  sensitive;
   1525 } _PRIVATE;
   1526 
   1527 // Table 191  Definition of TPM2B_PRIVATE Structure <  IN/OUT, S>
   1528 typedef union {
   1529   struct {
   1530     UINT16  size;
   1531     BYTE    buffer[sizeof(_PRIVATE)];
   1532   } t;
   1533   TPM2B b;
   1534 } TPM2B_PRIVATE;
   1535 
   1536 // Table 192  Definition of _ID_OBJECT Structure <>
   1537 typedef struct {
   1538   TPM2B_DIGEST  integrityHMAC;
   1539   TPM2B_DIGEST  encIdentity;
   1540 } _ID_OBJECT;
   1541 
   1542 // Table 193  Definition of TPM2B_ID_OBJECT Structure <  IN/OUT>
   1543 typedef union {
   1544   struct {
   1545     UINT16  size;
   1546     BYTE    credential[sizeof(_ID_OBJECT)];
   1547   } t;
   1548   TPM2B b;
   1549 } TPM2B_ID_OBJECT;
   1550 
   1551 // Table 194  Definition of TPM_NV_INDEX Bits <>
   1552 typedef struct {
   1553   UINT32 index : 24;
   1554   UINT32 RH_NV : 8;
   1555 } TPM_NV_INDEX;
   1556 
   1557 // Table 195  Definition of TPMA_NV Bits
   1558 typedef struct {
   1559   UINT32 TPMA_NV_PPWRITE        : 1;
   1560   UINT32 TPMA_NV_OWNERWRITE     : 1;
   1561   UINT32 TPMA_NV_AUTHWRITE      : 1;
   1562   UINT32 TPMA_NV_POLICYWRITE    : 1;
   1563   UINT32 TPMA_NV_COUNTER        : 1;
   1564   UINT32 TPMA_NV_BITS           : 1;
   1565   UINT32 TPMA_NV_EXTEND         : 1;
   1566   UINT32 reserved7_9            : 3;
   1567   UINT32 TPMA_NV_POLICY_DELETE  : 1;
   1568   UINT32 TPMA_NV_WRITELOCKED    : 1;
   1569   UINT32 TPMA_NV_WRITEALL       : 1;
   1570   UINT32 TPMA_NV_WRITEDEFINE    : 1;
   1571   UINT32 TPMA_NV_WRITE_STCLEAR  : 1;
   1572   UINT32 TPMA_NV_GLOBALLOCK     : 1;
   1573   UINT32 TPMA_NV_PPREAD         : 1;
   1574   UINT32 TPMA_NV_OWNERREAD      : 1;
   1575   UINT32 TPMA_NV_AUTHREAD       : 1;
   1576   UINT32 TPMA_NV_POLICYREAD     : 1;
   1577   UINT32 reserved20_24          : 5;
   1578   UINT32 TPMA_NV_NO_DA          : 1;
   1579   UINT32 TPMA_NV_ORDERLY        : 1;
   1580   UINT32 TPMA_NV_CLEAR_STCLEAR  : 1;
   1581   UINT32 TPMA_NV_READLOCKED     : 1;
   1582   UINT32 TPMA_NV_WRITTEN        : 1;
   1583   UINT32 TPMA_NV_PLATFORMCREATE : 1;
   1584   UINT32 TPMA_NV_READ_STCLEAR   : 1;
   1585 } TPMA_NV;
   1586 
   1587 // Table 196  Definition of TPMS_NV_PUBLIC Structure
   1588 typedef struct {
   1589   TPMI_RH_NV_INDEX  nvIndex;
   1590   TPMI_ALG_HASH     nameAlg;
   1591   TPMA_NV           attributes;
   1592   TPM2B_DIGEST      authPolicy;
   1593   UINT16            dataSize;
   1594 } TPMS_NV_PUBLIC;
   1595 
   1596 // Table 197  Definition of TPM2B_NV_PUBLIC Structure
   1597 typedef union {
   1598   struct {
   1599     UINT16          size;
   1600     TPMS_NV_PUBLIC  nvPublic;
   1601   } t;
   1602   TPM2B b;
   1603 } TPM2B_NV_PUBLIC;
   1604 
   1605 // Table 198  Definition of TPM2B_CONTEXT_SENSITIVE Structure <  IN/OUT>
   1606 typedef union {
   1607   struct {
   1608     UINT16  size;
   1609     BYTE    buffer[MAX_CONTEXT_SIZE];
   1610   } t;
   1611   TPM2B b;
   1612 } TPM2B_CONTEXT_SENSITIVE;
   1613 
   1614 // Table 199  Definition of TPMS_CONTEXT_DATA Structure <  IN/OUT, S>
   1615 typedef struct {
   1616   TPM2B_DIGEST             integrity;
   1617   TPM2B_CONTEXT_SENSITIVE  encrypted;
   1618 } TPMS_CONTEXT_DATA;
   1619 
   1620 // Table 200  Definition of TPM2B_CONTEXT_DATA Structure <  IN/OUT>
   1621 typedef union {
   1622   struct {
   1623     UINT16  size;
   1624     BYTE    buffer[sizeof(TPMS_CONTEXT_DATA)];
   1625   } t;
   1626   TPM2B b;
   1627 } TPM2B_CONTEXT_DATA;
   1628 
   1629 // Table 201  Definition of TPMS_CONTEXT Structure
   1630 typedef struct {
   1631   UINT64              sequence;
   1632   TPMI_DH_CONTEXT     savedHandle;
   1633   TPMI_RH_HIERARCHY   hierarchy;
   1634   TPM2B_CONTEXT_DATA  contextBlob;
   1635 } TPMS_CONTEXT;
   1636 
   1637 // Unprocessed: Table 202  Context Handle Values
   1638 // Table 203  Definition of TPMS_CREATION_DATA Structure <  OUT>
   1639 typedef struct {
   1640   TPML_PCR_SELECTION  pcrSelect;
   1641   TPM2B_DIGEST        pcrDigest;
   1642   TPMA_LOCALITY       locality;
   1643   TPM_ALG_ID          parentNameAlg;
   1644   TPM2B_NAME          parentName;
   1645   TPM2B_NAME          parentQualifiedName;
   1646   TPM2B_DATA          outsideInfo;
   1647 } TPMS_CREATION_DATA;
   1648 
   1649 // Table 204  Definition of TPM2B_CREATION_DATA Structure <  OUT>
   1650 typedef union {
   1651   struct {
   1652     UINT16              size;
   1653     TPMS_CREATION_DATA  creationData;
   1654   } t;
   1655   TPM2B b;
   1656 } TPM2B_CREATION_DATA;
   1657 
   1658 
   1659 #endif  // TPM2_TPM_TYPES_H_
   1660