• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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