// Copyright 2015 The Chromium OS Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // THIS CODE IS GENERATED - DO NOT MODIFY! #ifndef TPM2_TPM_TYPES_H_ #define TPM2_TPM_TYPES_H_ // Unprocessed: Table 1 Name Prefix Convention // Skipped: Table 2 Unmarshaling Errors // Table 3 Definition of Base Types typedef uint8_t UINT8; typedef uint8_t BYTE; typedef int8_t INT8; typedef int BOOL; typedef uint16_t UINT16; typedef int16_t INT16; typedef uint32_t UINT32; typedef int32_t INT32; typedef uint64_t UINT64; typedef int64_t INT64; // Table 4 Defines for Logic Values #define TRUE 1 #define FALSE 0 #define YES 1 #define NO 0 #define SET 1 #define CLEAR 0 // Table 5 Definition of Types for Documentation Clarity typedef UINT32 TPM_ALGORITHM_ID; typedef UINT32 TPM_MODIFIER_INDICATOR; typedef UINT32 TPM_AUTHORIZATION_SIZE; typedef UINT32 TPM_PARAMETER_SIZE; typedef UINT16 TPM_KEY_SIZE; typedef UINT16 TPM_KEY_BITS; // Skipped: Table 6 Definition of TPM_SPEC Constants <> // Table 7 Definition of TPM_GENERATED Constants < O> typedef UINT32 TPM_GENERATED; #define TPM_GENERATED_VALUE 0xff544347 // Unprocessed: Table 8 Legend for TPM_ALG_ID Table // Skipped: Table 9 Definition of TPM_ALG_ID Constants < IN/OUT, S> // Skipped: Table 10 Definition of TPM_ECC_CURVE Constants < IN/OUT, S> // Unprocessed: Table 11 TPM Command Format Fields Description // Unprocessed: Table 12 Legend for Command Code Tables // Skipped: Table 13 Definition of TPM_CC Constants < IN/OUT, S> // Unprocessed: Table 14 Format-Zero Response Codes // Unprocessed: Table 15 Format-One Response Codes // Unprocessed: Table 16 Response Code Groupings // Table 17 Definition of TPM_RC Constants < OUT> typedef UINT32 TPM_RC; #define TPM_RC_SUCCESS 0x000 #define TPM_RC_BAD_TAG 0x01E #define RC_VER1 0x100 #define TPM_RC_INITIALIZE ((TPM_RC)(RC_VER1 + 0x000)) #define TPM_RC_FAILURE ((TPM_RC)(RC_VER1 + 0x001)) #define TPM_RC_SEQUENCE ((TPM_RC)(RC_VER1 + 0x003)) #define TPM_RC_PRIVATE ((TPM_RC)(RC_VER1 + 0x00B)) #define TPM_RC_HMAC ((TPM_RC)(RC_VER1 + 0x019)) #define TPM_RC_DISABLED ((TPM_RC)(RC_VER1 + 0x020)) #define TPM_RC_EXCLUSIVE ((TPM_RC)(RC_VER1 + 0x021)) #define TPM_RC_AUTH_TYPE ((TPM_RC)(RC_VER1 + 0x024)) #define TPM_RC_AUTH_MISSING ((TPM_RC)(RC_VER1 + 0x025)) #define TPM_RC_POLICY ((TPM_RC)(RC_VER1 + 0x026)) #define TPM_RC_PCR ((TPM_RC)(RC_VER1 + 0x027)) #define TPM_RC_PCR_CHANGED ((TPM_RC)(RC_VER1 + 0x028)) #define TPM_RC_UPGRADE ((TPM_RC)(RC_VER1 + 0x02D)) #define TPM_RC_TOO_MANY_CONTEXTS ((TPM_RC)(RC_VER1 + 0x02E)) #define TPM_RC_AUTH_UNAVAILABLE ((TPM_RC)(RC_VER1 + 0x02F)) #define TPM_RC_REBOOT ((TPM_RC)(RC_VER1 + 0x030)) #define TPM_RC_UNBALANCED ((TPM_RC)(RC_VER1 + 0x031)) #define TPM_RC_COMMAND_SIZE ((TPM_RC)(RC_VER1 + 0x042)) #define TPM_RC_COMMAND_CODE ((TPM_RC)(RC_VER1 + 0x043)) #define TPM_RC_AUTHSIZE ((TPM_RC)(RC_VER1 + 0x044)) #define TPM_RC_AUTH_CONTEXT ((TPM_RC)(RC_VER1 + 0x045)) #define TPM_RC_NV_RANGE ((TPM_RC)(RC_VER1 + 0x046)) #define TPM_RC_NV_SIZE ((TPM_RC)(RC_VER1 + 0x047)) #define TPM_RC_NV_LOCKED ((TPM_RC)(RC_VER1 + 0x048)) #define TPM_RC_NV_AUTHORIZATION ((TPM_RC)(RC_VER1 + 0x049)) #define TPM_RC_NV_UNINITIALIZED ((TPM_RC)(RC_VER1 + 0x04A)) #define TPM_RC_NV_SPACE ((TPM_RC)(RC_VER1 + 0x04B)) #define TPM_RC_NV_DEFINED ((TPM_RC)(RC_VER1 + 0x04C)) #define TPM_RC_BAD_CONTEXT ((TPM_RC)(RC_VER1 + 0x050)) #define TPM_RC_CPHASH ((TPM_RC)(RC_VER1 + 0x051)) #define TPM_RC_PARENT ((TPM_RC)(RC_VER1 + 0x052)) #define TPM_RC_NEEDS_TEST ((TPM_RC)(RC_VER1 + 0x053)) #define TPM_RC_NO_RESULT ((TPM_RC)(RC_VER1 + 0x054)) #define TPM_RC_SENSITIVE ((TPM_RC)(RC_VER1 + 0x055)) #define RC_MAX_FM0 ((TPM_RC)(RC_VER1 + 0x07F)) #define RC_FMT1 0x080 #define TPM_RC_ASYMMETRIC ((TPM_RC)(RC_FMT1 + 0x001)) #define TPM_RC_ATTRIBUTES ((TPM_RC)(RC_FMT1 + 0x002)) #define TPM_RC_HASH ((TPM_RC)(RC_FMT1 + 0x003)) #define TPM_RC_VALUE ((TPM_RC)(RC_FMT1 + 0x004)) #define TPM_RC_HIERARCHY ((TPM_RC)(RC_FMT1 + 0x005)) #define TPM_RC_KEY_SIZE ((TPM_RC)(RC_FMT1 + 0x007)) #define TPM_RC_MGF ((TPM_RC)(RC_FMT1 + 0x008)) #define TPM_RC_MODE ((TPM_RC)(RC_FMT1 + 0x009)) #define TPM_RC_TYPE ((TPM_RC)(RC_FMT1 + 0x00A)) #define TPM_RC_HANDLE ((TPM_RC)(RC_FMT1 + 0x00B)) #define TPM_RC_KDF ((TPM_RC)(RC_FMT1 + 0x00C)) #define TPM_RC_RANGE ((TPM_RC)(RC_FMT1 + 0x00D)) #define TPM_RC_AUTH_FAIL ((TPM_RC)(RC_FMT1 + 0x00E)) #define TPM_RC_NONCE ((TPM_RC)(RC_FMT1 + 0x00F)) #define TPM_RC_PP ((TPM_RC)(RC_FMT1 + 0x010)) #define TPM_RC_SCHEME ((TPM_RC)(RC_FMT1 + 0x012)) #define TPM_RC_SIZE ((TPM_RC)(RC_FMT1 + 0x015)) #define TPM_RC_SYMMETRIC ((TPM_RC)(RC_FMT1 + 0x016)) #define TPM_RC_TAG ((TPM_RC)(RC_FMT1 + 0x017)) #define TPM_RC_SELECTOR ((TPM_RC)(RC_FMT1 + 0x018)) #define TPM_RC_INSUFFICIENT ((TPM_RC)(RC_FMT1 + 0x01A)) #define TPM_RC_SIGNATURE ((TPM_RC)(RC_FMT1 + 0x01B)) #define TPM_RC_KEY ((TPM_RC)(RC_FMT1 + 0x01C)) #define TPM_RC_POLICY_FAIL ((TPM_RC)(RC_FMT1 + 0x01D)) #define TPM_RC_INTEGRITY ((TPM_RC)(RC_FMT1 + 0x01F)) #define TPM_RC_TICKET ((TPM_RC)(RC_FMT1 + 0x020)) #define TPM_RC_RESERVED_BITS ((TPM_RC)(RC_FMT1 + 0x021)) #define TPM_RC_BAD_AUTH ((TPM_RC)(RC_FMT1 + 0x022)) #define TPM_RC_EXPIRED ((TPM_RC)(RC_FMT1 + 0x023)) #define TPM_RC_POLICY_CC ((TPM_RC)(RC_FMT1 + 0x024)) #define TPM_RC_BINDING ((TPM_RC)(RC_FMT1 + 0x025)) #define TPM_RC_CURVE ((TPM_RC)(RC_FMT1 + 0x026)) #define TPM_RC_ECC_POINT ((TPM_RC)(RC_FMT1 + 0x027)) #define RC_WARN 0x900 #define TPM_RC_CONTEXT_GAP ((TPM_RC)(RC_WARN + 0x001)) #define TPM_RC_OBJECT_MEMORY ((TPM_RC)(RC_WARN + 0x002)) #define TPM_RC_SESSION_MEMORY ((TPM_RC)(RC_WARN + 0x003)) #define TPM_RC_MEMORY ((TPM_RC)(RC_WARN + 0x004)) #define TPM_RC_SESSION_HANDLES ((TPM_RC)(RC_WARN + 0x005)) #define TPM_RC_OBJECT_HANDLES ((TPM_RC)(RC_WARN + 0x006)) #define TPM_RC_LOCALITY ((TPM_RC)(RC_WARN + 0x007)) #define TPM_RC_YIELDED ((TPM_RC)(RC_WARN + 0x008)) #define TPM_RC_CANCELED ((TPM_RC)(RC_WARN + 0x009)) #define TPM_RC_TESTING ((TPM_RC)(RC_WARN + 0x00A)) #define TPM_RC_REFERENCE_H0 ((TPM_RC)(RC_WARN + 0x010)) #define TPM_RC_REFERENCE_H1 ((TPM_RC)(RC_WARN + 0x011)) #define TPM_RC_REFERENCE_H2 ((TPM_RC)(RC_WARN + 0x012)) #define TPM_RC_REFERENCE_H3 ((TPM_RC)(RC_WARN + 0x013)) #define TPM_RC_REFERENCE_H4 ((TPM_RC)(RC_WARN + 0x014)) #define TPM_RC_REFERENCE_H5 ((TPM_RC)(RC_WARN + 0x015)) #define TPM_RC_REFERENCE_H6 ((TPM_RC)(RC_WARN + 0x016)) #define TPM_RC_REFERENCE_S0 ((TPM_RC)(RC_WARN + 0x018)) #define TPM_RC_REFERENCE_S1 ((TPM_RC)(RC_WARN + 0x019)) #define TPM_RC_REFERENCE_S2 ((TPM_RC)(RC_WARN + 0x01A)) #define TPM_RC_REFERENCE_S3 ((TPM_RC)(RC_WARN + 0x01B)) #define TPM_RC_REFERENCE_S4 ((TPM_RC)(RC_WARN + 0x01C)) #define TPM_RC_REFERENCE_S5 ((TPM_RC)(RC_WARN + 0x01D)) #define TPM_RC_REFERENCE_S6 ((TPM_RC)(RC_WARN + 0x01E)) #define TPM_RC_NV_RATE ((TPM_RC)(RC_WARN + 0x020)) #define TPM_RC_LOCKOUT ((TPM_RC)(RC_WARN + 0x021)) #define TPM_RC_RETRY ((TPM_RC)(RC_WARN + 0x022)) #define TPM_RC_NV_UNAVAILABLE ((TPM_RC)(RC_WARN + 0x023)) #define TPM_RC_NOT_USED ((TPM_RC)(RC_WARN + 0x7F)) #define TPM_RC_H 0x000 #define TPM_RC_P 0x040 #define TPM_RC_S 0x800 #define TPM_RC_1 0x100 #define TPM_RC_2 0x200 #define TPM_RC_3 0x300 #define TPM_RC_4 0x400 #define TPM_RC_5 0x500 #define TPM_RC_6 0x600 #define TPM_RC_7 0x700 #define TPM_RC_8 0x800 #define TPM_RC_9 0x900 #define TPM_RC_A 0xA00 #define TPM_RC_B 0xB00 #define TPM_RC_C 0xC00 #define TPM_RC_D 0xD00 #define TPM_RC_E 0xE00 #define TPM_RC_F 0xF00 #define TPM_RC_N_MASK 0xF00 // Table 18 Definition of TPM_CLOCK_ADJUST Constants < IN> typedef INT8 TPM_CLOCK_ADJUST; #define TPM_CLOCK_COARSE_SLOWER -3 #define TPM_CLOCK_MEDIUM_SLOWER -2 #define TPM_CLOCK_FINE_SLOWER -1 #define TPM_CLOCK_NO_CHANGE 0 #define TPM_CLOCK_FINE_FASTER 1 #define TPM_CLOCK_MEDIUM_FASTER 2 #define TPM_CLOCK_COARSE_FASTER 3 // Table 19 Definition of TPM_EO Constants < IN/OUT> typedef UINT16 TPM_EO; #define TPM_EO_EQ 0x0000 #define TPM_EO_NEQ 0x0001 #define TPM_EO_SIGNED_GT 0x0002 #define TPM_EO_UNSIGNED_GT 0x0003 #define TPM_EO_SIGNED_LT 0x0004 #define TPM_EO_UNSIGNED_LT 0x0005 #define TPM_EO_SIGNED_GE 0x0006 #define TPM_EO_UNSIGNED_GE 0x0007 #define TPM_EO_SIGNED_LE 0x0008 #define TPM_EO_UNSIGNED_LE 0x0009 #define TPM_EO_BITSET 0x000A #define TPM_EO_BITCLEAR 0x000B // Table 20 Definition of TPM_ST Constants < IN/OUT, S> typedef UINT16 TPM_ST; #define TPM_ST_RSP_COMMAND 0x00C4 #define TPM_ST_NULL 0X8000 #define TPM_ST_NO_SESSIONS 0x8001 #define TPM_ST_SESSIONS 0x8002 #define TPM_ST_ATTEST_NV 0x8014 #define TPM_ST_ATTEST_COMMAND_AUDIT 0x8015 #define TPM_ST_ATTEST_SESSION_AUDIT 0x8016 #define TPM_ST_ATTEST_CERTIFY 0x8017 #define TPM_ST_ATTEST_QUOTE 0x8018 #define TPM_ST_ATTEST_TIME 0x8019 #define TPM_ST_ATTEST_CREATION 0x801A #define TPM_ST_CREATION 0x8021 #define TPM_ST_VERIFIED 0x8022 #define TPM_ST_AUTH_SECRET 0x8023 #define TPM_ST_HASHCHECK 0x8024 #define TPM_ST_AUTH_SIGNED 0x8025 #define TPM_ST_FU_MANIFEST 0x8029 // Table 21 Definition of TPM_SU Constants < IN> typedef UINT16 TPM_SU; #define TPM_SU_CLEAR 0x0000 #define TPM_SU_STATE 0x0001 // Table 22 Definition of TPM_SE Constants < IN> typedef UINT8 TPM_SE; #define TPM_SE_HMAC 0x00 #define TPM_SE_POLICY 0x01 #define TPM_SE_TRIAL 0x03 // Table 23 Definition of TPM_CAP Constants typedef UINT32 TPM_CAP; #define TPM_CAP_FIRST 0x00000000 #define TPM_CAP_ALGS 0x00000000 #define TPM_CAP_HANDLES 0x00000001 #define TPM_CAP_COMMANDS 0x00000002 #define TPM_CAP_PP_COMMANDS 0x00000003 #define TPM_CAP_AUDIT_COMMANDS 0x00000004 #define TPM_CAP_PCRS 0x00000005 #define TPM_CAP_TPM_PROPERTIES 0x00000006 #define TPM_CAP_PCR_PROPERTIES 0x00000007 #define TPM_CAP_ECC_CURVES 0x00000008 #define TPM_CAP_LAST 0x00000008 #define TPM_CAP_VENDOR_PROPERTY 0x00000100 // Table 24 Definition of TPM_PT Constants < IN/OUT, S> typedef UINT32 TPM_PT; #define TPM_PT_NONE 0x00000000 #define PT_GROUP 0x00000100 #define PT_FIXED (PT_GROUP * 1) #define TPM_PT_FAMILY_INDICATOR ((TPM_PT)(PT_FIXED + 0)) #define TPM_PT_LEVEL ((TPM_PT)(PT_FIXED + 1)) #define TPM_PT_REVISION ((TPM_PT)(PT_FIXED + 2)) #define TPM_PT_DAY_OF_YEAR ((TPM_PT)(PT_FIXED + 3)) #define TPM_PT_YEAR ((TPM_PT)(PT_FIXED + 4)) #define TPM_PT_MANUFACTURER ((TPM_PT)(PT_FIXED + 5)) #define TPM_PT_VENDOR_STRING_1 ((TPM_PT)(PT_FIXED + 6)) #define TPM_PT_VENDOR_STRING_2 ((TPM_PT)(PT_FIXED + 7)) #define TPM_PT_VENDOR_STRING_3 ((TPM_PT)(PT_FIXED + 8)) #define TPM_PT_VENDOR_STRING_4 ((TPM_PT)(PT_FIXED + 9)) #define TPM_PT_VENDOR_TPM_TYPE ((TPM_PT)(PT_FIXED + 10)) #define TPM_PT_FIRMWARE_VERSION_1 ((TPM_PT)(PT_FIXED + 11)) #define TPM_PT_FIRMWARE_VERSION_2 ((TPM_PT)(PT_FIXED + 12)) #define TPM_PT_INPUT_BUFFER ((TPM_PT)(PT_FIXED + 13)) #define TPM_PT_HR_TRANSIENT_MIN ((TPM_PT)(PT_FIXED + 14)) #define TPM_PT_HR_PERSISTENT_MIN ((TPM_PT)(PT_FIXED + 15)) #define TPM_PT_HR_LOADED_MIN ((TPM_PT)(PT_FIXED + 16)) #define TPM_PT_ACTIVE_SESSIONS_MAX ((TPM_PT)(PT_FIXED + 17)) #define TPM_PT_PCR_COUNT ((TPM_PT)(PT_FIXED + 18)) #define TPM_PT_PCR_SELECT_MIN ((TPM_PT)(PT_FIXED + 19)) #define TPM_PT_CONTEXT_GAP_MAX ((TPM_PT)(PT_FIXED + 20)) #define TPM_PT_NV_COUNTERS_MAX ((TPM_PT)(PT_FIXED + 22)) #define TPM_PT_NV_INDEX_MAX ((TPM_PT)(PT_FIXED + 23)) #define TPM_PT_MEMORY ((TPM_PT)(PT_FIXED + 24)) #define TPM_PT_CLOCK_UPDATE ((TPM_PT)(PT_FIXED + 25)) #define TPM_PT_CONTEXT_HASH ((TPM_PT)(PT_FIXED + 26)) #define TPM_PT_CONTEXT_SYM ((TPM_PT)(PT_FIXED + 27)) #define TPM_PT_CONTEXT_SYM_SIZE ((TPM_PT)(PT_FIXED + 28)) #define TPM_PT_ORDERLY_COUNT ((TPM_PT)(PT_FIXED + 29)) #define TPM_PT_MAX_COMMAND_SIZE ((TPM_PT)(PT_FIXED + 30)) #define TPM_PT_MAX_RESPONSE_SIZE ((TPM_PT)(PT_FIXED + 31)) #define TPM_PT_MAX_DIGEST ((TPM_PT)(PT_FIXED + 32)) #define TPM_PT_MAX_OBJECT_CONTEXT ((TPM_PT)(PT_FIXED + 33)) #define TPM_PT_MAX_SESSION_CONTEXT ((TPM_PT)(PT_FIXED + 34)) #define TPM_PT_PS_FAMILY_INDICATOR ((TPM_PT)(PT_FIXED + 35)) #define TPM_PT_PS_LEVEL ((TPM_PT)(PT_FIXED + 36)) #define TPM_PT_PS_REVISION ((TPM_PT)(PT_FIXED + 37)) #define TPM_PT_PS_DAY_OF_YEAR ((TPM_PT)(PT_FIXED + 38)) #define TPM_PT_PS_YEAR ((TPM_PT)(PT_FIXED + 39)) #define TPM_PT_SPLIT_MAX ((TPM_PT)(PT_FIXED + 40)) #define TPM_PT_TOTAL_COMMANDS ((TPM_PT)(PT_FIXED + 41)) #define TPM_PT_LIBRARY_COMMANDS ((TPM_PT)(PT_FIXED + 42)) #define TPM_PT_VENDOR_COMMANDS ((TPM_PT)(PT_FIXED + 43)) #define TPM_PT_NV_BUFFER_MAX ((TPM_PT)(PT_FIXED + 44)) #define PT_VAR (PT_GROUP * 2) #define TPM_PT_PERMANENT ((TPM_PT)(PT_VAR + 0)) #define TPM_PT_STARTUP_CLEAR ((TPM_PT)(PT_VAR + 1)) #define TPM_PT_HR_NV_INDEX ((TPM_PT)(PT_VAR + 2)) #define TPM_PT_HR_LOADED ((TPM_PT)(PT_VAR + 3)) #define TPM_PT_HR_LOADED_AVAIL ((TPM_PT)(PT_VAR + 4)) #define TPM_PT_HR_ACTIVE ((TPM_PT)(PT_VAR + 5)) #define TPM_PT_HR_ACTIVE_AVAIL ((TPM_PT)(PT_VAR + 6)) #define TPM_PT_HR_TRANSIENT_AVAIL ((TPM_PT)(PT_VAR + 7)) #define TPM_PT_HR_PERSISTENT ((TPM_PT)(PT_VAR + 8)) #define TPM_PT_HR_PERSISTENT_AVAIL ((TPM_PT)(PT_VAR + 9)) #define TPM_PT_NV_COUNTERS ((TPM_PT)(PT_VAR + 10)) #define TPM_PT_NV_COUNTERS_AVAIL ((TPM_PT)(PT_VAR + 11)) #define TPM_PT_ALGORITHM_SET ((TPM_PT)(PT_VAR + 12)) #define TPM_PT_LOADED_CURVES ((TPM_PT)(PT_VAR + 13)) #define TPM_PT_LOCKOUT_COUNTER ((TPM_PT)(PT_VAR + 14)) #define TPM_PT_MAX_AUTH_FAIL ((TPM_PT)(PT_VAR + 15)) #define TPM_PT_LOCKOUT_INTERVAL ((TPM_PT)(PT_VAR + 16)) #define TPM_PT_LOCKOUT_RECOVERY ((TPM_PT)(PT_VAR + 17)) #define TPM_PT_NV_WRITE_RECOVERY ((TPM_PT)(PT_VAR + 18)) #define TPM_PT_AUDIT_COUNTER_0 ((TPM_PT)(PT_VAR + 19)) #define TPM_PT_AUDIT_COUNTER_1 ((TPM_PT)(PT_VAR + 20)) // Table 25 Definition of TPM_PT_PCR Constants < IN/OUT, S> typedef UINT32 TPM_PT_PCR; #define TPM_PT_PCR_FIRST 0x00000000 #define TPM_PT_PCR_SAVE 0x00000000 #define TPM_PT_PCR_EXTEND_L0 0x00000001 #define TPM_PT_PCR_RESET_L0 0x00000002 #define TPM_PT_PCR_EXTEND_L1 0x00000003 #define TPM_PT_PCR_RESET_L1 0x00000004 #define TPM_PT_PCR_EXTEND_L2 0x00000005 #define TPM_PT_PCR_RESET_L2 0x00000006 #define TPM_PT_PCR_EXTEND_L3 0x00000007 #define TPM_PT_PCR_RESET_L3 0x00000008 #define TPM_PT_PCR_EXTEND_L4 0x00000009 #define TPM_PT_PCR_RESET_L4 0x0000000A #define TPM_PT_PCR_NO_INCREMENT 0x00000011 #define TPM_PT_PCR_DRTM_RESET 0x00000012 #define TPM_PT_PCR_POLICY 0x00000013 #define TPM_PT_PCR_AUTH 0x00000014 #define TPM_PT_PCR_LAST 0x00000014 // Table 26 Definition of TPM_PS Constants < OUT> typedef UINT32 TPM_PS; #define TPM_PS_MAIN 0x00000000 #define TPM_PS_PC 0x00000001 #define TPM_PS_PDA 0x00000002 #define TPM_PS_CELL_PHONE 0x00000003 #define TPM_PS_SERVER 0x00000004 #define TPM_PS_PERIPHERAL 0x00000005 #define TPM_PS_TSS 0x00000006 #define TPM_PS_STORAGE 0x00000007 #define TPM_PS_AUTHENTICATION 0x00000008 #define TPM_PS_EMBEDDED 0x00000009 #define TPM_PS_HARDCOPY 0x0000000A #define TPM_PS_INFRASTRUCTURE 0x0000000B #define TPM_PS_VIRTUALIZATION 0x0000000C #define TPM_PS_TNC 0x0000000D #define TPM_PS_MULTI_TENANT 0x0000000E #define TPM_PS_TC 0x0000000F // Table 27 Definition of Types for Handles typedef UINT32 TPM_HANDLE; // Table 28 Definition of TPM_HT Constants < S> typedef UINT8 TPM_HT; #define TPM_HT_PCR 0x00 #define TPM_HT_NV_INDEX 0x01 #define TPM_HT_HMAC_SESSION 0x02 #define TPM_HT_LOADED_SESSION 0x02 #define TPM_HT_POLICY_SESSION 0x03 #define TPM_HT_ACTIVE_SESSION 0x03 #define TPM_HT_PERMANENT 0x40 #define TPM_HT_TRANSIENT 0x80 #define TPM_HT_PERSISTENT 0x81 // Table 29 Definition of TPM_RH Constants < S> typedef TPM_HANDLE TPM_RH; #define TPM_RH_FIRST 0x40000000 #define TPM_RH_SRK 0x40000000 #define TPM_RH_OWNER 0x40000001 #define TPM_RH_REVOKE 0x40000002 #define TPM_RH_TRANSPORT 0x40000003 #define TPM_RH_OPERATOR 0x40000004 #define TPM_RH_ADMIN 0x40000005 #define TPM_RH_EK 0x40000006 #define TPM_RH_NULL 0x40000007 #define TPM_RH_UNASSIGNED 0x40000008 #define TPM_RS_PW 0x40000009 #define TPM_RH_LOCKOUT 0x4000000A #define TPM_RH_ENDORSEMENT 0x4000000B #define TPM_RH_PLATFORM 0x4000000C #define TPM_RH_PLATFORM_NV 0x4000000D #define TPM_RH_AUTH_00 0x40000010 #define TPM_RH_AUTH_FF 0x4000010F #define TPM_RH_LAST 0x4000010F // Table 30 Definition of TPM_HC Constants < S> typedef TPM_HANDLE TPM_HC; #define HR_HANDLE_MASK 0x00FFFFFF #define HR_RANGE_MASK 0xFF000000 #define HR_SHIFT 24 #define HR_PCR (TPM_HT_PCR << HR_SHIFT) #define HR_HMAC_SESSION (TPM_HT_HMAC_SESSION << HR_SHIFT) #define HR_POLICY_SESSION (TPM_HT_POLICY_SESSION << HR_SHIFT) #define HR_TRANSIENT (TPM_HT_TRANSIENT << HR_SHIFT) #define HR_PERSISTENT (TPM_HT_PERSISTENT << HR_SHIFT) #define HR_NV_INDEX (TPM_HT_NV_INDEX << HR_SHIFT) #define HR_PERMANENT (TPM_HT_PERMANENT << HR_SHIFT) #define PCR_FIRST (HR_PCR + 0) #define PCR_LAST (PCR_FIRST + IMPLEMENTATION_PCR-1) #define HMAC_SESSION_FIRST (HR_HMAC_SESSION + 0) #define HMAC_SESSION_LAST (HMAC_SESSION_FIRST+MAX_ACTIVE_SESSIONS-1) #define LOADED_SESSION_FIRST HMAC_SESSION_FIRST #define LOADED_SESSION_LAST HMAC_SESSION_LAST #define POLICY_SESSION_FIRST (HR_POLICY_SESSION + 0) #define POLICY_SESSION_LAST (POLICY_SESSION_FIRST + MAX_ACTIVE_SESSIONS-1) #define TRANSIENT_FIRST (HR_TRANSIENT + 0) #define ACTIVE_SESSION_FIRST POLICY_SESSION_FIRST #define ACTIVE_SESSION_LAST POLICY_SESSION_LAST #define TRANSIENT_LAST (TRANSIENT_FIRST+MAX_LOADED_OBJECTS-1) #define PERSISTENT_FIRST (HR_PERSISTENT + 0) #define PERSISTENT_LAST (PERSISTENT_FIRST + 0x00FFFFFF) #define PLATFORM_PERSISTENT (PERSISTENT_FIRST + 0x00800000) #define NV_INDEX_FIRST (HR_NV_INDEX + 0) #define NV_INDEX_LAST (NV_INDEX_FIRST + 0x00FFFFFF) #define PERMANENT_FIRST TPM_RH_FIRST #define PERMANENT_LAST TPM_RH_LAST // Table 31 Definition of TPMA_ALGORITHM Bits typedef struct { UINT32 asymmetric : 1; UINT32 symmetric : 1; UINT32 hash : 1; UINT32 object : 1; UINT32 reserved4_7 : 4; UINT32 signing : 1; UINT32 encrypting : 1; UINT32 method : 1; UINT32 reserved11_31 : 21; } TPMA_ALGORITHM; // Table 32 Definition of TPMA_OBJECT Bits typedef struct { UINT32 reserved0 : 1; UINT32 fixedTPM : 1; UINT32 stClear : 1; UINT32 reserved3 : 1; UINT32 fixedParent : 1; UINT32 sensitiveDataOrigin : 1; UINT32 userWithAuth : 1; UINT32 adminWithPolicy : 1; UINT32 reserved8_9 : 2; UINT32 noDA : 1; UINT32 encryptedDuplication : 1; UINT32 reserved12_15 : 4; UINT32 restricted : 1; UINT32 decrypt : 1; UINT32 sign : 1; UINT32 reserved19_31 : 13; } TPMA_OBJECT; // Table 33 Definition of TPMA_SESSION Bits < IN/OUT> typedef struct { UINT8 continueSession : 1; UINT8 auditExclusive : 1; UINT8 auditReset : 1; UINT8 reserved3_4 : 2; UINT8 decrypt : 1; UINT8 encrypt : 1; UINT8 audit : 1; } TPMA_SESSION; // Table 34 Definition of TPMA_LOCALITY Bits < IN/OUT> typedef struct { UINT8 locZero : 1; UINT8 locOne : 1; UINT8 locTwo : 1; UINT8 locThree : 1; UINT8 locFour : 1; UINT8 Extended : 3; } TPMA_LOCALITY; // Table 35 Definition of TPMA_PERMANENT Bits < OUT> typedef struct { UINT32 ownerAuthSet : 1; UINT32 endorsementAuthSet : 1; UINT32 lockoutAuthSet : 1; UINT32 reserved3_7 : 5; UINT32 disableClear : 1; UINT32 inLockout : 1; UINT32 tpmGeneratedEPS : 1; UINT32 reserved11_31 : 21; } TPMA_PERMANENT; // Table 36 Definition of TPMA_STARTUP_CLEAR Bits < OUT> typedef struct { UINT32 phEnable : 1; UINT32 shEnable : 1; UINT32 ehEnable : 1; UINT32 phEnableNV : 1; UINT32 reserved4_30 : 27; UINT32 orderly : 1; } TPMA_STARTUP_CLEAR; // Table 37 Definition of TPMA_MEMORY Bits < Out> typedef struct { UINT32 sharedRAM : 1; UINT32 sharedNV : 1; UINT32 objectCopiedToRam : 1; UINT32 reserved3_31 : 29; } TPMA_MEMORY; // Table 38 Definition of TPMA_CC Bits < OUT> typedef struct { TPM_CC commandIndex : 16; TPM_CC reserved16_21 : 6; TPM_CC nv : 1; TPM_CC extensive : 1; TPM_CC flushed : 1; TPM_CC cHandles : 3; TPM_CC rHandle : 1; TPM_CC V : 1; TPM_CC Res : 2; } TPMA_CC; // Table 39 Definition of TPMI_YES_NO Type typedef BYTE TPMI_YES_NO; // Table 40 Definition of TPMI_DH_OBJECT Type typedef TPM_HANDLE TPMI_DH_OBJECT; // Table 41 Definition of TPMI_DH_PERSISTENT Type typedef TPM_HANDLE TPMI_DH_PERSISTENT; // Table 42 Definition of TPMI_DH_ENTITY Type < IN> typedef TPM_HANDLE TPMI_DH_ENTITY; // Table 43 Definition of TPMI_DH_PCR Type < IN> typedef TPM_HANDLE TPMI_DH_PCR; // Table 44 Definition of TPMI_SH_AUTH_SESSION Type < IN/OUT> typedef TPM_HANDLE TPMI_SH_AUTH_SESSION; // Table 45 Definition of TPMI_SH_HMAC Type < IN/OUT> typedef TPM_HANDLE TPMI_SH_HMAC; // Table 46 Definition of TPMI_SH_POLICY Type < IN/OUT> typedef TPM_HANDLE TPMI_SH_POLICY; // Table 47 Definition of TPMI_DH_CONTEXT Type typedef TPM_HANDLE TPMI_DH_CONTEXT; // Table 48 Definition of TPMI_RH_HIERARCHY Type typedef TPM_HANDLE TPMI_RH_HIERARCHY; // Table 49 Definition of TPMI_RH_ENABLES Type typedef TPM_HANDLE TPMI_RH_ENABLES; // Table 50 Definition of TPMI_RH_HIERARCHY_AUTH Type < IN> typedef TPM_HANDLE TPMI_RH_HIERARCHY_AUTH; // Table 51 Definition of TPMI_RH_PLATFORM Type < IN> typedef TPM_HANDLE TPMI_RH_PLATFORM; // Table 52 Definition of TPMI_RH_OWNER Type < IN> typedef TPM_HANDLE TPMI_RH_OWNER; // Table 53 Definition of TPMI_RH_ENDORSEMENT Type < IN> typedef TPM_HANDLE TPMI_RH_ENDORSEMENT; // Table 54 Definition of TPMI_RH_PROVISION Type < IN> typedef TPM_HANDLE TPMI_RH_PROVISION; // Table 55 Definition of TPMI_RH_CLEAR Type < IN> typedef TPM_HANDLE TPMI_RH_CLEAR; // Table 56 Definition of TPMI_RH_NV_AUTH Type < IN> typedef TPM_HANDLE TPMI_RH_NV_AUTH; // Table 57 Definition of TPMI_RH_LOCKOUT Type < IN> typedef TPM_HANDLE TPMI_RH_LOCKOUT; // Table 58 Definition of TPMI_RH_NV_INDEX Type < IN/OUT> typedef TPM_HANDLE TPMI_RH_NV_INDEX; // Table 59 Definition of TPMI_ALG_HASH Type typedef TPM_ALG_ID TPMI_ALG_HASH; // Table 60 Definition of TPMI_ALG_ASYM Type typedef TPM_ALG_ID TPMI_ALG_ASYM; // Table 61 Definition of TPMI_ALG_SYM Type typedef TPM_ALG_ID TPMI_ALG_SYM; // Table 62 Definition of TPMI_ALG_SYM_OBJECT Type typedef TPM_ALG_ID TPMI_ALG_SYM_OBJECT; // Table 63 Definition of TPMI_ALG_SYM_MODE Type typedef TPM_ALG_ID TPMI_ALG_SYM_MODE; // Table 64 Definition of TPMI_ALG_KDF Type typedef TPM_ALG_ID TPMI_ALG_KDF; // Table 65 Definition of TPMI_ALG_SIG_SCHEME Type typedef TPM_ALG_ID TPMI_ALG_SIG_SCHEME; // Table 66 Definition of TPMI_ECC_KEY_EXCHANGE Type typedef TPM_ALG_ID TPMI_ECC_KEY_EXCHANGE; // Table 67 Definition of TPMI_ST_COMMAND_TAG Type typedef TPM_ST TPMI_ST_COMMAND_TAG; // Table 68 Definition of TPMS_EMPTY Structure < IN/OUT> typedef struct { } TPMS_EMPTY; // Table 69 Definition of TPMS_ALGORITHM_DESCRIPTION Structure < OUT> typedef struct { TPM_ALG_ID alg; TPMA_ALGORITHM attributes; } TPMS_ALGORITHM_DESCRIPTION; // Table 70 Definition of TPMU_HA Union < IN/OUT, S> typedef union { #ifdef TPM_ALG_SHA BYTE sha[SHA_DIGEST_SIZE]; #endif #ifdef TPM_ALG_SHA1 BYTE sha1[SHA1_DIGEST_SIZE]; #endif #ifdef TPM_ALG_SHA256 BYTE sha256[SHA256_DIGEST_SIZE]; #endif #ifdef TPM_ALG_SHA384 BYTE sha384[SHA384_DIGEST_SIZE]; #endif #ifdef TPM_ALG_SHA512 BYTE sha512[SHA512_DIGEST_SIZE]; #endif #ifdef TPM_ALG_SM3_256 BYTE sm3_256[SM3_256_DIGEST_SIZE]; #endif } TPMU_HA; // Table 71 Definition of TPMT_HA Structure < IN/OUT> typedef struct { TPMI_ALG_HASH hashAlg; TPMU_HA digest; } TPMT_HA; // Table 72 Definition of TPM2B_DIGEST Structure typedef union { struct { UINT16 size; BYTE buffer[sizeof(TPMU_HA)]; } t; TPM2B b; } TPM2B_DIGEST; // Table 73 Definition of TPM2B_DATA Structure typedef union { struct { UINT16 size; BYTE buffer[sizeof(TPMT_HA)]; } t; TPM2B b; } TPM2B_DATA; // Table 74 Definition of Types for TPM2B_NONCE typedef TPM2B_DIGEST TPM2B_NONCE; // Table 75 Definition of Types for TPM2B_AUTH typedef TPM2B_DIGEST TPM2B_AUTH; // Table 76 Definition of Types for TPM2B_OPERAND typedef TPM2B_DIGEST TPM2B_OPERAND; // Table 77 Definition of TPM2B_EVENT Structure typedef union { struct { UINT16 size; BYTE buffer[1024]; } t; TPM2B b; } TPM2B_EVENT; // Table 78 Definition of TPM2B_MAX_BUFFER Structure typedef union { struct { UINT16 size; BYTE buffer[MAX_DIGEST_BUFFER]; } t; TPM2B b; } TPM2B_MAX_BUFFER; // Table 79 Definition of TPM2B_MAX_NV_BUFFER Structure typedef union { struct { UINT16 size; BYTE buffer[MAX_NV_BUFFER_SIZE]; } t; TPM2B b; } TPM2B_MAX_NV_BUFFER; // Table 80 Definition of TPM2B_TIMEOUT Structure < IN/OUT> typedef union { struct { UINT16 size; BYTE buffer[sizeof(UINT64)]; } t; TPM2B b; } TPM2B_TIMEOUT; // Table 81 Definition of TPM2B_IV Structure < IN/OUT> typedef union { struct { UINT16 size; BYTE buffer[MAX_SYM_BLOCK_SIZE]; } t; TPM2B b; } TPM2B_IV; // Table 82 Definition of TPMU_NAME Union <> typedef union { TPMT_HA digest; TPM_HANDLE handle; } TPMU_NAME; // Table 83 Definition of TPM2B_NAME Structure typedef union { struct { UINT16 size; BYTE name[sizeof(TPMU_NAME)]; } t; TPM2B b; } TPM2B_NAME; // Table 84 Definition of TPMS_PCR_SELECT Structure typedef struct { UINT8 sizeofSelect; BYTE pcrSelect[PCR_SELECT_MAX]; } TPMS_PCR_SELECT; // Table 85 Definition of TPMS_PCR_SELECTION Structure typedef struct { TPMI_ALG_HASH hash; UINT8 sizeofSelect; BYTE pcrSelect[PCR_SELECT_MAX]; } TPMS_PCR_SELECTION; // Unprocessed: Table 86 Values for proof Used in Tickets // Unprocessed: Table 87 General Format of a Ticket // Table 88 Definition of TPMT_TK_CREATION Structure typedef struct { TPM_ST tag; TPMI_RH_HIERARCHY hierarchy; TPM2B_DIGEST digest; } TPMT_TK_CREATION; // Table 89 Definition of TPMT_TK_VERIFIED Structure typedef struct { TPM_ST tag; TPMI_RH_HIERARCHY hierarchy; TPM2B_DIGEST digest; } TPMT_TK_VERIFIED; // Table 90 Definition of TPMT_TK_AUTH Structure typedef struct { TPM_ST tag; TPMI_RH_HIERARCHY hierarchy; TPM2B_DIGEST digest; } TPMT_TK_AUTH; // Table 91 Definition of TPMT_TK_HASHCHECK Structure typedef struct { TPM_ST tag; TPMI_RH_HIERARCHY hierarchy; TPM2B_DIGEST digest; } TPMT_TK_HASHCHECK; // Table 92 Definition of TPMS_ALG_PROPERTY Structure < OUT> typedef struct { TPM_ALG_ID alg; TPMA_ALGORITHM algProperties; } TPMS_ALG_PROPERTY; // Table 93 Definition of TPMS_TAGGED_PROPERTY Structure < OUT> typedef struct { TPM_PT property; UINT32 value; } TPMS_TAGGED_PROPERTY; // Table 94 Definition of TPMS_TAGGED_PCR_SELECT Structure < OUT> typedef struct { TPM_PT tag; UINT8 sizeofSelect; BYTE pcrSelect[PCR_SELECT_MAX]; } TPMS_TAGGED_PCR_SELECT; // Table 95 Definition of TPML_CC Structure typedef struct { UINT32 count; TPM_CC commandCodes[MAX_CAP_CC]; } TPML_CC; // Table 96 Definition of TPML_CCA Structure < OUT> typedef struct { UINT32 count; TPMA_CC commandAttributes[MAX_CAP_CC]; } TPML_CCA; // Table 97 Definition of TPML_ALG Structure typedef struct { UINT32 count; TPM_ALG_ID algorithms[MAX_ALG_LIST_SIZE]; } TPML_ALG; // Table 98 Definition of TPML_HANDLE Structure < OUT> typedef struct { UINT32 count; TPM_HANDLE handle[MAX_CAP_HANDLES]; } TPML_HANDLE; // Table 99 Definition of TPML_DIGEST Structure typedef struct { UINT32 count; TPM2B_DIGEST digests[8]; } TPML_DIGEST; // Table 100 Definition of TPML_DIGEST_VALUES Structure typedef struct { UINT32 count; TPMT_HA digests[HASH_COUNT]; } TPML_DIGEST_VALUES; // Table 101 Definition of TPM2B_DIGEST_VALUES Structure typedef union { struct { UINT16 size; BYTE buffer[sizeof(TPML_DIGEST_VALUES)]; } t; TPM2B b; } TPM2B_DIGEST_VALUES; // Table 102 Definition of TPML_PCR_SELECTION Structure typedef struct { UINT32 count; TPMS_PCR_SELECTION pcrSelections[HASH_COUNT]; } TPML_PCR_SELECTION; // Table 103 Definition of TPML_ALG_PROPERTY Structure < OUT> typedef struct { UINT32 count; TPMS_ALG_PROPERTY algProperties[MAX_CAP_ALGS]; } TPML_ALG_PROPERTY; // Table 104 Definition of TPML_TAGGED_TPM_PROPERTY Structure < OUT> typedef struct { UINT32 count; TPMS_TAGGED_PROPERTY tpmProperty[MAX_TPM_PROPERTIES]; } TPML_TAGGED_TPM_PROPERTY; // Table 105 Definition of TPML_TAGGED_PCR_PROPERTY Structure < OUT> typedef struct { UINT32 count; TPMS_TAGGED_PCR_SELECT pcrProperty[MAX_PCR_PROPERTIES]; } TPML_TAGGED_PCR_PROPERTY; // Table 106 Definition of TPML_ECC_CURVE Structure < OUT> typedef struct { UINT32 count; TPM_ECC_CURVE eccCurves[MAX_ECC_CURVES]; } TPML_ECC_CURVE; // Table 107 Definition of TPMU_CAPABILITIES Union < OUT> typedef union { TPML_ALG_PROPERTY algorithms; TPML_HANDLE handles; TPML_CCA command; TPML_CC ppCommands; TPML_CC auditCommands; TPML_PCR_SELECTION assignedPCR; TPML_TAGGED_TPM_PROPERTY tpmProperties; TPML_TAGGED_PCR_PROPERTY pcrProperties; TPML_ECC_CURVE eccCurves; } TPMU_CAPABILITIES; // Table 108 Definition of TPMS_CAPABILITY_DATA Structure < OUT> typedef struct { TPM_CAP capability; TPMU_CAPABILITIES data; } TPMS_CAPABILITY_DATA; // Table 109 Definition of TPMS_CLOCK_INFO Structure typedef struct { UINT64 clock; UINT32 resetCount; UINT32 restartCount; TPMI_YES_NO safe; } TPMS_CLOCK_INFO; // Table 110 Definition of TPMS_TIME_INFO Structure typedef struct { UINT64 time; TPMS_CLOCK_INFO clockInfo; } TPMS_TIME_INFO; // Table 111 Definition of TPMS_TIME_ATTEST_INFO Structure < OUT> typedef struct { TPMS_TIME_INFO time; UINT64 firmwareVersion; } TPMS_TIME_ATTEST_INFO; // Table 112 Definition of TPMS_CERTIFY_INFO Structure < OUT> typedef struct { TPM2B_NAME name; TPM2B_NAME qualifiedName; } TPMS_CERTIFY_INFO; // Table 113 Definition of TPMS_QUOTE_INFO Structure < OUT> typedef struct { TPML_PCR_SELECTION pcrSelect; TPM2B_DIGEST pcrDigest; } TPMS_QUOTE_INFO; // Table 114 Definition of TPMS_COMMAND_AUDIT_INFO Structure < OUT> typedef struct { UINT64 auditCounter; TPM_ALG_ID digestAlg; TPM2B_DIGEST auditDigest; TPM2B_DIGEST commandDigest; } TPMS_COMMAND_AUDIT_INFO; // Table 115 Definition of TPMS_SESSION_AUDIT_INFO Structure < OUT> typedef struct { TPMI_YES_NO exclusiveSession; TPM2B_DIGEST sessionDigest; } TPMS_SESSION_AUDIT_INFO; // Table 116 Definition of TPMS_CREATION_INFO Structure < OUT> typedef struct { TPM2B_NAME objectName; TPM2B_DIGEST creationHash; } TPMS_CREATION_INFO; // Table 117 Definition of TPMS_NV_CERTIFY_INFO Structure < OUT> typedef struct { TPM2B_NAME indexName; UINT16 offset; TPM2B_MAX_NV_BUFFER nvContents; } TPMS_NV_CERTIFY_INFO; // Table 118 Definition of TPMI_ST_ATTEST Type < OUT> typedef TPM_ST TPMI_ST_ATTEST; // Table 119 Definition of TPMU_ATTEST Union < OUT> typedef union { TPMS_CERTIFY_INFO certify; TPMS_CREATION_INFO creation; TPMS_QUOTE_INFO quote; TPMS_COMMAND_AUDIT_INFO commandAudit; TPMS_SESSION_AUDIT_INFO sessionAudit; TPMS_TIME_ATTEST_INFO time; TPMS_NV_CERTIFY_INFO nv; } TPMU_ATTEST; // Table 120 Definition of TPMS_ATTEST Structure < OUT> typedef struct { TPM_GENERATED magic; TPMI_ST_ATTEST type; TPM2B_NAME qualifiedSigner; TPM2B_DATA extraData; TPMS_CLOCK_INFO clockInfo; UINT64 firmwareVersion; TPMU_ATTEST attested; } TPMS_ATTEST; // Table 121 Definition of TPM2B_ATTEST Structure < OUT> typedef union { struct { UINT16 size; BYTE attestationData[sizeof(TPMS_ATTEST)]; } t; TPM2B b; } TPM2B_ATTEST; // Table 122 Definition of TPMS_AUTH_COMMAND Structure < IN> typedef struct { TPMI_SH_AUTH_SESSION sessionHandle; TPM2B_NONCE nonce; TPMA_SESSION sessionAttributes; TPM2B_AUTH hmac; } TPMS_AUTH_COMMAND; // Table 123 Definition of TPMS_AUTH_RESPONSE Structure < OUT> typedef struct { TPM2B_NONCE nonce; TPMA_SESSION sessionAttributes; TPM2B_AUTH hmac; } TPMS_AUTH_RESPONSE; // Table 124 Definition of TPMI_!ALG.S_KEY_BITS Type typedef TPM_KEY_BITS TPMI_AES_KEY_BITS; typedef TPM_KEY_BITS TPMI_SM4_KEY_BITS; typedef TPM_KEY_BITS TPMI_CAMELLIA_KEY_BITS; // Table 125 Definition of TPMU_SYM_KEY_BITS Union typedef union { #ifdef TPM_ALG_AES TPMI_AES_KEY_BITS aes; #endif #ifdef TPM_ALG_SM4 TPMI_SM4_KEY_BITS sm4; #endif #ifdef TPM_ALG_CAMELLIA TPMI_CAMELLIA_KEY_BITS camellia; #endif TPM_KEY_BITS sym; #ifdef TPM_ALG_XOR TPMI_ALG_HASH xor_; #endif } TPMU_SYM_KEY_BITS; // Table 126 Definition of TPMU_SYM_MODE Union typedef union { #ifdef TPM_ALG_AES TPMI_ALG_SYM_MODE aes; #endif #ifdef TPM_ALG_SM4 TPMI_ALG_SYM_MODE sm4; #endif #ifdef TPM_ALG_CAMELLIA TPMI_ALG_SYM_MODE camellia; #endif TPMI_ALG_SYM_MODE sym; } TPMU_SYM_MODE; // Table 127 xDefinition of TPMU_SYM_DETAILS Union typedef union { } TPMU_SYM_DETAILS; // Table 128 Definition of TPMT_SYM_DEF Structure typedef struct { TPMI_ALG_SYM algorithm; TPMU_SYM_KEY_BITS keyBits; TPMU_SYM_MODE mode; } TPMT_SYM_DEF; // Table 129 Definition of TPMT_SYM_DEF_OBJECT Structure typedef struct { TPMI_ALG_SYM_OBJECT algorithm; TPMU_SYM_KEY_BITS keyBits; TPMU_SYM_MODE mode; } TPMT_SYM_DEF_OBJECT; // Table 130 Definition of TPM2B_SYM_KEY Structure typedef union { struct { UINT16 size; BYTE buffer[MAX_SYM_KEY_BYTES]; } t; TPM2B b; } TPM2B_SYM_KEY; // Table 131 Definition of TPMS_SYMCIPHER_PARMS Structure typedef struct { TPMT_SYM_DEF_OBJECT sym; } TPMS_SYMCIPHER_PARMS; // Table 132 Definition of TPM2B_SENSITIVE_DATA Structure typedef union { struct { UINT16 size; BYTE buffer[MAX_SYM_DATA]; } t; TPM2B b; } TPM2B_SENSITIVE_DATA; // Table 133 Definition of TPMS_SENSITIVE_CREATE Structure < IN> typedef struct { TPM2B_AUTH userAuth; TPM2B_SENSITIVE_DATA data; } TPMS_SENSITIVE_CREATE; // Table 134 Definition of TPM2B_SENSITIVE_CREATE Structure < IN, S> typedef union { struct { UINT16 size; TPMS_SENSITIVE_CREATE sensitive; } t; TPM2B b; } TPM2B_SENSITIVE_CREATE; // Table 135 Definition of TPMS_SCHEME_HASH Structure typedef struct { TPMI_ALG_HASH hashAlg; } TPMS_SCHEME_HASH; // Table 136 Definition of TPMS_SCHEME_ECDAA Structure typedef struct { TPMI_ALG_HASH hashAlg; UINT16 count; } TPMS_SCHEME_ECDAA; // Table 137 Definition of TPMI_ALG_KEYEDHASH_SCHEME Type typedef TPM_ALG_ID TPMI_ALG_KEYEDHASH_SCHEME; // Table 138 Definition of Types for HMAC_SIG_SCHEME typedef TPMS_SCHEME_HASH TPMS_SCHEME_HMAC; // Table 139 Definition of TPMS_SCHEME_XOR Structure typedef struct { TPMI_ALG_HASH hashAlg; TPMI_ALG_KDF kdf; } TPMS_SCHEME_XOR; // Table 140 Definition of TPMU_SCHEME_KEYEDHASH Union < IN/OUT, S> typedef union { #ifdef TPM_ALG_HMAC TPMS_SCHEME_HMAC hmac; #endif #ifdef TPM_ALG_XOR TPMS_SCHEME_XOR xor_; #endif } TPMU_SCHEME_KEYEDHASH; // Table 141 Definition of TPMT_KEYEDHASH_SCHEME Structure typedef struct { TPMI_ALG_KEYEDHASH_SCHEME scheme; TPMU_SCHEME_KEYEDHASH details; } TPMT_KEYEDHASH_SCHEME; // Table 142 Definition of Types for RSA Signature Schemes typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_RSASSA; typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_RSAPSS; // Table 143 Definition of Types for ECC Signature Schemes typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_ECDSA; typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_SM2; typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_ECSCHNORR; typedef TPMS_SCHEME_ECDAA TPMS_SIG_SCHEME_ECDAA; // Table 144 Definition of TPMU_SIG_SCHEME Union < IN/OUT, S> typedef union { #ifdef TPM_ALG_RSASSA TPMS_SIG_SCHEME_RSASSA rsassa; #endif #ifdef TPM_ALG_RSAPSS TPMS_SIG_SCHEME_RSAPSS rsapss; #endif #ifdef TPM_ALG_ECDSA TPMS_SIG_SCHEME_ECDSA ecdsa; #endif // TODO(ngm): ECDAA is not currently supported // on CR50, but this field has unguarded references // in CryptUtil.c, so allow its inclusion. // #ifdef TPM_ALG_ECDAA TPMS_SIG_SCHEME_ECDAA ecdaa; // #endif #ifdef TPM_ALG_SM2 TPMS_SIG_SCHEME_SM2 sm2; #endif #ifdef TPM_ALG_ECSCHNORR TPMS_SIG_SCHEME_ECSCHNORR ecschnorr; #endif #ifdef TPM_ALG_HMAC TPMS_SCHEME_HMAC hmac; #endif TPMS_SCHEME_HASH any; } TPMU_SIG_SCHEME; // Table 145 Definition of TPMT_SIG_SCHEME Structure typedef struct { TPMI_ALG_SIG_SCHEME scheme; TPMU_SIG_SCHEME details; } TPMT_SIG_SCHEME; // Table 146 Definition of Types for Encryption Schemes typedef TPMS_SCHEME_HASH TPMS_ENC_SCHEME_OAEP; typedef TPMS_EMPTY TPMS_ENC_SCHEME_RSAES; // Table 147 Definition of Types for ECC Key Exchange typedef TPMS_SCHEME_HASH TPMS_KEY_SCHEME_ECDH; typedef TPMS_SCHEME_HASH TPMS_KEY_SCHEME_ECMQV; // Table 148 Definition of Types for KDF Schemes typedef TPMS_SCHEME_HASH TPMS_SCHEME_MGF1; typedef TPMS_SCHEME_HASH TPMS_SCHEME_KDF1_SP800_56A; typedef TPMS_SCHEME_HASH TPMS_SCHEME_KDF2; typedef TPMS_SCHEME_HASH TPMS_SCHEME_KDF1_SP800_108; // Table 149 Definition of TPMU_KDF_SCHEME Union < IN/OUT, S> typedef union { #ifdef TPM_ALG_MGF1 TPMS_SCHEME_MGF1 mgf1; #endif #ifdef TPM_ALG_KDF1_SP800_56A TPMS_SCHEME_KDF1_SP800_56A kdf1_sp800_56a; #endif #ifdef TPM_ALG_KDF2 TPMS_SCHEME_KDF2 kdf2; #endif #ifdef TPM_ALG_KDF1_SP800_108 TPMS_SCHEME_KDF1_SP800_108 kdf1_sp800_108; #endif } TPMU_KDF_SCHEME; // Table 150 Definition of TPMT_KDF_SCHEME Structure typedef struct { TPMI_ALG_KDF scheme; TPMU_KDF_SCHEME details; } TPMT_KDF_SCHEME; // Table 151 Definition of TPMI_ALG_ASYM_SCHEME Type <> typedef TPM_ALG_ID TPMI_ALG_ASYM_SCHEME; // Table 152 Definition of TPMU_ASYM_SCHEME Union typedef union { #ifdef TPM_ALG_ECDH TPMS_KEY_SCHEME_ECDH ecdh; #endif #ifdef TPM_ALG_ECMQV TPMS_KEY_SCHEME_ECMQV ecmqv; #endif #ifdef TPM_ALG_RSASSA TPMS_SIG_SCHEME_RSASSA rsassa; #endif #ifdef TPM_ALG_RSAPSS TPMS_SIG_SCHEME_RSAPSS rsapss; #endif #ifdef TPM_ALG_ECDSA TPMS_SIG_SCHEME_ECDSA ecdsa; #endif #ifdef TPM_ALG_ECDAA TPMS_SIG_SCHEME_ECDAA ecdaa; #endif #ifdef TPM_ALG_SM2 TPMS_SIG_SCHEME_SM2 sm2; #endif #ifdef TPM_ALG_ECSCHNORR TPMS_SIG_SCHEME_ECSCHNORR ecschnorr; #endif #ifdef TPM_ALG_RSAES TPMS_ENC_SCHEME_RSAES rsaes; #endif #ifdef TPM_ALG_OAEP TPMS_ENC_SCHEME_OAEP oaep; #endif TPMS_SCHEME_HASH anySig; } TPMU_ASYM_SCHEME; // Table 153 Definition of TPMT_ASYM_SCHEME Structure <> typedef struct { TPMI_ALG_ASYM_SCHEME scheme; TPMU_ASYM_SCHEME details; } TPMT_ASYM_SCHEME; // Table 154 Definition of TPMI_ALG_RSA_SCHEME Type typedef TPM_ALG_ID TPMI_ALG_RSA_SCHEME; // Table 155 Definition of TPMT_RSA_SCHEME Structure typedef struct { TPMI_ALG_RSA_SCHEME scheme; TPMU_ASYM_SCHEME details; } TPMT_RSA_SCHEME; // Table 156 Definition of TPMI_ALG_RSA_DECRYPT Type typedef TPM_ALG_ID TPMI_ALG_RSA_DECRYPT; // Table 157 Definition of TPMT_RSA_DECRYPT Structure typedef struct { TPMI_ALG_RSA_DECRYPT scheme; TPMU_ASYM_SCHEME details; } TPMT_RSA_DECRYPT; // Table 158 Definition of TPM2B_PUBLIC_KEY_RSA Structure typedef union { struct { UINT16 size; BYTE buffer[MAX_RSA_KEY_BYTES]; } t; TPM2B b; } TPM2B_PUBLIC_KEY_RSA; // Table 159 Definition of TPMI_RSA_KEY_BITS Type typedef TPM_KEY_BITS TPMI_RSA_KEY_BITS; // Table 160 Definition of TPM2B_PRIVATE_KEY_RSA Structure typedef union { struct { UINT16 size; BYTE buffer[MAX_RSA_KEY_BYTES/2]; } t; TPM2B b; } TPM2B_PRIVATE_KEY_RSA; // Table 161 Definition of TPM2B_ECC_PARAMETER Structure typedef union { struct { UINT16 size; BYTE buffer[MAX_ECC_KEY_BYTES]; } t; TPM2B b; } TPM2B_ECC_PARAMETER; // Table 162 Definition of TPMS_ECC_POINT Structure typedef struct { TPM2B_ECC_PARAMETER x; TPM2B_ECC_PARAMETER y; } TPMS_ECC_POINT; // Table 163 Definition of TPM2B_ECC_POINT Structure typedef union { struct { UINT16 size; TPMS_ECC_POINT point; } t; TPM2B b; } TPM2B_ECC_POINT; // Table 164 Definition of TPMI_ALG_ECC_SCHEME Type typedef TPM_ALG_ID TPMI_ALG_ECC_SCHEME; // Table 165 Definition of TPMI_ECC_CURVE Type typedef TPM_ECC_CURVE TPMI_ECC_CURVE; // Table 166 Definition of TPMT_ECC_SCHEME Structure typedef struct { TPMI_ALG_ECC_SCHEME scheme; TPMU_ASYM_SCHEME details; } TPMT_ECC_SCHEME; // Table 167 Definition of TPMS_ALGORITHM_DETAIL_ECC Structure < OUT> typedef struct { TPM_ECC_CURVE curveID; UINT16 keySize; TPMT_KDF_SCHEME kdf; TPMT_ECC_SCHEME sign; TPM2B_ECC_PARAMETER p; TPM2B_ECC_PARAMETER a; TPM2B_ECC_PARAMETER b; TPM2B_ECC_PARAMETER gX; TPM2B_ECC_PARAMETER gY; TPM2B_ECC_PARAMETER n; TPM2B_ECC_PARAMETER h; } TPMS_ALGORITHM_DETAIL_ECC; // Table 168 Definition of TPMS_SIGNATURE_RSA Structure typedef struct { TPMI_ALG_HASH hash; TPM2B_PUBLIC_KEY_RSA sig; } TPMS_SIGNATURE_RSA; // Table 169 Definition of Types for Signature typedef TPMS_SIGNATURE_RSA TPMS_SIGNATURE_RSASSA; typedef TPMS_SIGNATURE_RSA TPMS_SIGNATURE_RSAPSS; // Table 170 Definition of TPMS_SIGNATURE_ECC Structure typedef struct { TPMI_ALG_HASH hash; TPM2B_ECC_PARAMETER signatureR; TPM2B_ECC_PARAMETER signatureS; } TPMS_SIGNATURE_ECC; // Table 171 Definition of Types for TPMS_SIGNATUE_ECC typedef TPMS_SIGNATURE_ECC TPMS_SIGNATURE_ECDSA; typedef TPMS_SIGNATURE_ECC TPMS_SIGNATURE_ECDAA; typedef TPMS_SIGNATURE_ECC TPMS_SIGNATURE_SM2; typedef TPMS_SIGNATURE_ECC TPMS_SIGNATURE_ECSCHNORR; // Table 172 Definition of TPMU_SIGNATURE Union < IN/OUT, S> typedef union { #ifdef TPM_ALG_RSASSA TPMS_SIGNATURE_RSASSA rsassa; #endif #ifdef TPM_ALG_RSAPSS TPMS_SIGNATURE_RSAPSS rsapss; #endif #ifdef TPM_ALG_ECDSA TPMS_SIGNATURE_ECDSA ecdsa; #endif #ifdef TPM_ALG_ECDAA TPMS_SIGNATURE_ECDAA ecdaa; #endif #ifdef TPM_ALG_SM2 TPMS_SIGNATURE_SM2 sm2; #endif #ifdef TPM_ALG_ECSCHNORR TPMS_SIGNATURE_ECSCHNORR ecschnorr; #endif #ifdef TPM_ALG_HMAC TPMT_HA hmac; #endif TPMS_SCHEME_HASH any; } TPMU_SIGNATURE; // Table 173 Definition of TPMT_SIGNATURE Structure typedef struct { TPMI_ALG_SIG_SCHEME sigAlg; TPMU_SIGNATURE signature; } TPMT_SIGNATURE; // Table 174 Definition of TPMU_ENCRYPTED_SECRET Union < S> typedef union { #ifdef TPM_ALG_ECC BYTE ecc[sizeof(TPMS_ECC_POINT)]; #endif #ifdef TPM_ALG_RSA BYTE rsa[MAX_RSA_KEY_BYTES]; #endif #ifdef TPM_ALG_SYMCIPHER BYTE symmetric[sizeof(TPM2B_DIGEST)]; #endif #ifdef TPM_ALG_KEYEDHASH BYTE keyedHash[sizeof(TPM2B_DIGEST)]; #endif } TPMU_ENCRYPTED_SECRET; // Table 175 Definition of TPM2B_ENCRYPTED_SECRET Structure typedef union { struct { UINT16 size; BYTE secret[sizeof(TPMU_ENCRYPTED_SECRET)]; } t; TPM2B b; } TPM2B_ENCRYPTED_SECRET; // Table 176 Definition of TPMI_ALG_PUBLIC Type typedef TPM_ALG_ID TPMI_ALG_PUBLIC; // Table 177 Definition of TPMU_PUBLIC_ID Union < IN/OUT, S> typedef union { #ifdef TPM_ALG_KEYEDHASH TPM2B_DIGEST keyedHash; #endif #ifdef TPM_ALG_SYMCIPHER TPM2B_DIGEST sym; #endif #ifdef TPM_ALG_RSA TPM2B_PUBLIC_KEY_RSA rsa; #endif #ifdef TPM_ALG_ECC TPMS_ECC_POINT ecc; #endif } TPMU_PUBLIC_ID; // Table 178 Definition of TPMS_KEYEDHASH_PARMS Structure typedef struct { TPMT_KEYEDHASH_SCHEME scheme; } TPMS_KEYEDHASH_PARMS; // Table 179 Definition of TPMS_ASYM_PARMS Structure <> typedef struct { TPMT_SYM_DEF_OBJECT symmetric; TPMT_ASYM_SCHEME scheme; } TPMS_ASYM_PARMS; // Table 180 Definition of TPMS_RSA_PARMS Structure typedef struct { TPMT_SYM_DEF_OBJECT symmetric; TPMT_RSA_SCHEME scheme; TPMI_RSA_KEY_BITS keyBits; UINT32 exponent; } TPMS_RSA_PARMS; // Table 181 Definition of TPMS_ECC_PARMS Structure typedef struct { TPMT_SYM_DEF_OBJECT symmetric; TPMT_ECC_SCHEME scheme; TPMI_ECC_CURVE curveID; TPMT_KDF_SCHEME kdf; } TPMS_ECC_PARMS; // Table 182 Definition of TPMU_PUBLIC_PARMS Union < IN/OUT, S> typedef union { #ifdef TPM_ALG_KEYEDHASH TPMS_KEYEDHASH_PARMS keyedHashDetail; #endif #ifdef TPM_ALG_SYMCIPHER TPMS_SYMCIPHER_PARMS symDetail; #endif #ifdef TPM_ALG_RSA TPMS_RSA_PARMS rsaDetail; #endif #ifdef TPM_ALG_ECC TPMS_ECC_PARMS eccDetail; #endif TPMS_ASYM_PARMS asymDetail; } TPMU_PUBLIC_PARMS; // Table 183 Definition of TPMT_PUBLIC_PARMS Structure typedef struct { TPMI_ALG_PUBLIC type; TPMU_PUBLIC_PARMS parameters; } TPMT_PUBLIC_PARMS; // Table 184 Definition of TPMT_PUBLIC Structure typedef struct { TPMI_ALG_PUBLIC type; TPMI_ALG_HASH nameAlg; TPMA_OBJECT objectAttributes; TPM2B_DIGEST authPolicy; TPMU_PUBLIC_PARMS parameters; TPMU_PUBLIC_ID unique; } TPMT_PUBLIC; // Table 185 Definition of TPM2B_PUBLIC Structure typedef union { struct { UINT16 size; TPMT_PUBLIC publicArea; } t; TPM2B b; } TPM2B_PUBLIC; // Table 186 Definition of TPM2B_PRIVATE_VENDOR_SPECIFIC Structure<> typedef union { struct { UINT16 size; BYTE buffer[PRIVATE_VENDOR_SPECIFIC_BYTES]; } t; TPM2B b; } TPM2B_PRIVATE_VENDOR_SPECIFIC; // Table 187 Definition of TPMU_SENSITIVE_COMPOSITE Union < IN/OUT, S> typedef union { #ifdef TPM_ALG_RSA TPM2B_PRIVATE_KEY_RSA rsa; #endif #ifdef TPM_ALG_ECC TPM2B_ECC_PARAMETER ecc; #endif #ifdef TPM_ALG_KEYEDHASH TPM2B_SENSITIVE_DATA bits; #endif #ifdef TPM_ALG_SYMCIPHER TPM2B_SYM_KEY sym; #endif TPM2B_PRIVATE_VENDOR_SPECIFIC any; } TPMU_SENSITIVE_COMPOSITE; // Table 188 Definition of TPMT_SENSITIVE Structure typedef struct { TPMI_ALG_PUBLIC sensitiveType; TPM2B_AUTH authValue; TPM2B_DIGEST seedValue; TPMU_SENSITIVE_COMPOSITE sensitive; } TPMT_SENSITIVE; // Table 189 Definition of TPM2B_SENSITIVE Structure < IN/OUT> typedef union { struct { UINT16 size; TPMT_SENSITIVE sensitiveArea; } t; TPM2B b; } TPM2B_SENSITIVE; // Table 190 Definition of _PRIVATE Structure <> typedef struct { TPM2B_DIGEST integrityOuter; TPM2B_DIGEST integrityInner; TPMT_SENSITIVE sensitive; } _PRIVATE; // Table 191 Definition of TPM2B_PRIVATE Structure < IN/OUT, S> typedef union { struct { UINT16 size; BYTE buffer[sizeof(_PRIVATE)]; } t; TPM2B b; } TPM2B_PRIVATE; // Table 192 Definition of _ID_OBJECT Structure <> typedef struct { TPM2B_DIGEST integrityHMAC; TPM2B_DIGEST encIdentity; } _ID_OBJECT; // Table 193 Definition of TPM2B_ID_OBJECT Structure < IN/OUT> typedef union { struct { UINT16 size; BYTE credential[sizeof(_ID_OBJECT)]; } t; TPM2B b; } TPM2B_ID_OBJECT; // Table 194 Definition of TPM_NV_INDEX Bits <> typedef struct { UINT32 index : 24; UINT32 RH_NV : 8; } TPM_NV_INDEX; // Table 195 Definition of TPMA_NV Bits typedef struct { UINT32 TPMA_NV_PPWRITE : 1; UINT32 TPMA_NV_OWNERWRITE : 1; UINT32 TPMA_NV_AUTHWRITE : 1; UINT32 TPMA_NV_POLICYWRITE : 1; UINT32 TPMA_NV_COUNTER : 1; UINT32 TPMA_NV_BITS : 1; UINT32 TPMA_NV_EXTEND : 1; UINT32 reserved7_9 : 3; UINT32 TPMA_NV_POLICY_DELETE : 1; UINT32 TPMA_NV_WRITELOCKED : 1; UINT32 TPMA_NV_WRITEALL : 1; UINT32 TPMA_NV_WRITEDEFINE : 1; UINT32 TPMA_NV_WRITE_STCLEAR : 1; UINT32 TPMA_NV_GLOBALLOCK : 1; UINT32 TPMA_NV_PPREAD : 1; UINT32 TPMA_NV_OWNERREAD : 1; UINT32 TPMA_NV_AUTHREAD : 1; UINT32 TPMA_NV_POLICYREAD : 1; UINT32 reserved20_24 : 5; UINT32 TPMA_NV_NO_DA : 1; UINT32 TPMA_NV_ORDERLY : 1; UINT32 TPMA_NV_CLEAR_STCLEAR : 1; UINT32 TPMA_NV_READLOCKED : 1; UINT32 TPMA_NV_WRITTEN : 1; UINT32 TPMA_NV_PLATFORMCREATE : 1; UINT32 TPMA_NV_READ_STCLEAR : 1; } TPMA_NV; // Table 196 Definition of TPMS_NV_PUBLIC Structure typedef struct { TPMI_RH_NV_INDEX nvIndex; TPMI_ALG_HASH nameAlg; TPMA_NV attributes; TPM2B_DIGEST authPolicy; UINT16 dataSize; } TPMS_NV_PUBLIC; // Table 197 Definition of TPM2B_NV_PUBLIC Structure typedef union { struct { UINT16 size; TPMS_NV_PUBLIC nvPublic; } t; TPM2B b; } TPM2B_NV_PUBLIC; // Table 198 Definition of TPM2B_CONTEXT_SENSITIVE Structure < IN/OUT> typedef union { struct { UINT16 size; BYTE buffer[MAX_CONTEXT_SIZE]; } t; TPM2B b; } TPM2B_CONTEXT_SENSITIVE; // Table 199 Definition of TPMS_CONTEXT_DATA Structure < IN/OUT, S> typedef struct { TPM2B_DIGEST integrity; TPM2B_CONTEXT_SENSITIVE encrypted; } TPMS_CONTEXT_DATA; // Table 200 Definition of TPM2B_CONTEXT_DATA Structure < IN/OUT> typedef union { struct { UINT16 size; BYTE buffer[sizeof(TPMS_CONTEXT_DATA)]; } t; TPM2B b; } TPM2B_CONTEXT_DATA; // Table 201 Definition of TPMS_CONTEXT Structure typedef struct { UINT64 sequence; TPMI_DH_CONTEXT savedHandle; TPMI_RH_HIERARCHY hierarchy; TPM2B_CONTEXT_DATA contextBlob; } TPMS_CONTEXT; // Unprocessed: Table 202 Context Handle Values // Table 203 Definition of TPMS_CREATION_DATA Structure < OUT> typedef struct { TPML_PCR_SELECTION pcrSelect; TPM2B_DIGEST pcrDigest; TPMA_LOCALITY locality; TPM_ALG_ID parentNameAlg; TPM2B_NAME parentName; TPM2B_NAME parentQualifiedName; TPM2B_DATA outsideInfo; } TPMS_CREATION_DATA; // Table 204 Definition of TPM2B_CREATION_DATA Structure < OUT> typedef union { struct { UINT16 size; TPMS_CREATION_DATA creationData; } t; TPM2B b; } TPM2B_CREATION_DATA; #endif // TPM2_TPM_TYPES_H_