blob: eec5e483ea983558ca2ab3d49d4158fd56f5f3eb [file] [log] [blame]
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001// 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
Vadim Bendebury19e7ed32015-10-08 14:41:04 -070010// Skipped: Table 2 Unmarshaling Errors
Vadim Bendebury0232bac2015-09-17 17:26:29 -070011// Table 3 Definition of Base Types
12typedef uint8_t UINT8;
13typedef uint8_t BYTE;
14typedef int8_t INT8;
15typedef int BOOL;
16typedef uint16_t UINT16;
17typedef int16_t INT16;
18typedef uint32_t UINT32;
19typedef int32_t INT32;
20typedef uint64_t UINT64;
21typedef 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
32typedef UINT32 TPM_ALGORITHM_ID;
33typedef UINT32 TPM_MODIFIER_INDICATOR;
34typedef UINT32 TPM_AUTHORIZATION_SIZE;
35typedef UINT32 TPM_PARAMETER_SIZE;
36typedef UINT16 TPM_KEY_SIZE;
37typedef UINT16 TPM_KEY_BITS;
38
39// Skipped: Table 6 Definition of TPM_SPEC Constants <>
40// Table 7 Definition of TPM_GENERATED Constants < O>
41typedef 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>
54typedef 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>
178typedef 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>
188typedef 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>
203typedef 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>
223typedef 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>
228typedef 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
234typedef 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>
249typedef 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>
321typedef 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>
341typedef 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
360typedef UINT32 TPM_HANDLE;
361
362// Table 28 Definition of TPM_HT Constants < S>
363typedef 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>
375typedef 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>
396typedef 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
428typedef 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
441typedef 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>
461typedef 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>
472typedef 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>
482typedef 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>
494typedef 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>
504typedef 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>
512typedef 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
525typedef BYTE TPMI_YES_NO;
526// Table 40 Definition of TPMI_DH_OBJECT Type
527typedef TPM_HANDLE TPMI_DH_OBJECT;
528// Table 41 Definition of TPMI_DH_PERSISTENT Type
529typedef TPM_HANDLE TPMI_DH_PERSISTENT;
530// Table 42 Definition of TPMI_DH_ENTITY Type < IN>
531typedef TPM_HANDLE TPMI_DH_ENTITY;
532// Table 43 Definition of TPMI_DH_PCR Type < IN>
533typedef TPM_HANDLE TPMI_DH_PCR;
534// Table 44 Definition of TPMI_SH_AUTH_SESSION Type < IN/OUT>
535typedef TPM_HANDLE TPMI_SH_AUTH_SESSION;
536// Table 45 Definition of TPMI_SH_HMAC Type < IN/OUT>
537typedef TPM_HANDLE TPMI_SH_HMAC;
538// Table 46 Definition of TPMI_SH_POLICY Type < IN/OUT>
539typedef TPM_HANDLE TPMI_SH_POLICY;
540// Table 47 Definition of TPMI_DH_CONTEXT Type
541typedef TPM_HANDLE TPMI_DH_CONTEXT;
542// Table 48 Definition of TPMI_RH_HIERARCHY Type
543typedef TPM_HANDLE TPMI_RH_HIERARCHY;
544// Table 49 Definition of TPMI_RH_ENABLES Type
545typedef TPM_HANDLE TPMI_RH_ENABLES;
546// Table 50 Definition of TPMI_RH_HIERARCHY_AUTH Type < IN>
547typedef TPM_HANDLE TPMI_RH_HIERARCHY_AUTH;
548// Table 51 Definition of TPMI_RH_PLATFORM Type < IN>
549typedef TPM_HANDLE TPMI_RH_PLATFORM;
550// Table 52 Definition of TPMI_RH_OWNER Type < IN>
551typedef TPM_HANDLE TPMI_RH_OWNER;
552// Table 53 Definition of TPMI_RH_ENDORSEMENT Type < IN>
553typedef TPM_HANDLE TPMI_RH_ENDORSEMENT;
554// Table 54 Definition of TPMI_RH_PROVISION Type < IN>
555typedef TPM_HANDLE TPMI_RH_PROVISION;
556// Table 55 Definition of TPMI_RH_CLEAR Type < IN>
557typedef TPM_HANDLE TPMI_RH_CLEAR;
558// Table 56 Definition of TPMI_RH_NV_AUTH Type < IN>
559typedef TPM_HANDLE TPMI_RH_NV_AUTH;
560// Table 57 Definition of TPMI_RH_LOCKOUT Type < IN>
561typedef TPM_HANDLE TPMI_RH_LOCKOUT;
562// Table 58 Definition of TPMI_RH_NV_INDEX Type < IN/OUT>
563typedef TPM_HANDLE TPMI_RH_NV_INDEX;
564// Table 59 Definition of TPMI_ALG_HASH Type
565typedef TPM_ALG_ID TPMI_ALG_HASH;
566// Table 60 Definition of TPMI_ALG_ASYM Type
567typedef TPM_ALG_ID TPMI_ALG_ASYM;
568// Table 61 Definition of TPMI_ALG_SYM Type
569typedef TPM_ALG_ID TPMI_ALG_SYM;
570// Table 62 Definition of TPMI_ALG_SYM_OBJECT Type
571typedef TPM_ALG_ID TPMI_ALG_SYM_OBJECT;
572// Table 63 Definition of TPMI_ALG_SYM_MODE Type
573typedef TPM_ALG_ID TPMI_ALG_SYM_MODE;
574// Table 64 Definition of TPMI_ALG_KDF Type
575typedef TPM_ALG_ID TPMI_ALG_KDF;
576// Table 65 Definition of TPMI_ALG_SIG_SCHEME Type
577typedef TPM_ALG_ID TPMI_ALG_SIG_SCHEME;
578// Table 66 Definition of TPMI_ECC_KEY_EXCHANGE Type
579typedef TPM_ALG_ID TPMI_ECC_KEY_EXCHANGE;
580// Table 67 Definition of TPMI_ST_COMMAND_TAG Type
581typedef TPM_ST TPMI_ST_COMMAND_TAG;
582// Table 68 Definition of TPMS_EMPTY Structure < IN/OUT>
583typedef struct {
584} TPMS_EMPTY;
585
586// Table 69 Definition of TPMS_ALGORITHM_DESCRIPTION Structure < OUT>
587typedef 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>
593typedef union {
Vadim Bendebury7251a1b2015-10-08 15:35:43 -0700594#ifdef TPM_ALG_SHA
Vadim Bendebury0232bac2015-09-17 17:26:29 -0700595 BYTE sha[SHA_DIGEST_SIZE];
Vadim Bendebury7251a1b2015-10-08 15:35:43 -0700596#endif
597#ifdef TPM_ALG_SHA1
Vadim Bendebury0232bac2015-09-17 17:26:29 -0700598 BYTE sha1[SHA1_DIGEST_SIZE];
Vadim Bendebury7251a1b2015-10-08 15:35:43 -0700599#endif
600#ifdef TPM_ALG_SHA256
Vadim Bendebury0232bac2015-09-17 17:26:29 -0700601 BYTE sha256[SHA256_DIGEST_SIZE];
Vadim Bendebury7251a1b2015-10-08 15:35:43 -0700602#endif
603#ifdef TPM_ALG_SHA384
Vadim Bendebury0232bac2015-09-17 17:26:29 -0700604 BYTE sha384[SHA384_DIGEST_SIZE];
Vadim Bendebury7251a1b2015-10-08 15:35:43 -0700605#endif
606#ifdef TPM_ALG_SHA512
Vadim Bendebury0232bac2015-09-17 17:26:29 -0700607 BYTE sha512[SHA512_DIGEST_SIZE];
Vadim Bendebury7251a1b2015-10-08 15:35:43 -0700608#endif
609#ifdef TPM_ALG_SM3_256
Vadim Bendebury0232bac2015-09-17 17:26:29 -0700610 BYTE sm3_256[SM3_256_DIGEST_SIZE];
Vadim Bendebury7251a1b2015-10-08 15:35:43 -0700611#endif
Vadim Bendebury0232bac2015-09-17 17:26:29 -0700612} TPMU_HA;
613
614// Table 71 Definition of TPMT_HA Structure < IN/OUT>
615typedef struct {
616 TPMI_ALG_HASH hashAlg;
617 TPMU_HA digest;
618} TPMT_HA;
619
620// Table 72 Definition of TPM2B_DIGEST Structure
621typedef 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
630typedef 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
639typedef TPM2B_DIGEST TPM2B_NONCE;
640
641// Table 75 Definition of Types for TPM2B_AUTH
642typedef TPM2B_DIGEST TPM2B_AUTH;
643
644// Table 76 Definition of Types for TPM2B_OPERAND
645typedef TPM2B_DIGEST TPM2B_OPERAND;
646
647// Table 77 Definition of TPM2B_EVENT Structure
648typedef 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
657typedef 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
666typedef 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>
675typedef 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>
684typedef 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 <>
693typedef union {
694 TPMT_HA digest;
695 TPM_HANDLE handle;
696} TPMU_NAME;
697
698// Table 83 Definition of TPM2B_NAME Structure
699typedef 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
708typedef struct {
709 UINT8 sizeofSelect;
710 BYTE pcrSelect[PCR_SELECT_MAX];
711} TPMS_PCR_SELECT;
712
713// Table 85 Definition of TPMS_PCR_SELECTION Structure
714typedef 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
723typedef 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
730typedef 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
737typedef 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
744typedef 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>
751typedef 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>
757typedef struct {
758 TPM_PT property;
759 UINT32 value;
760} TPMS_TAGGED_PROPERTY;
761
762// Table 94 Definition of TPMS_TAGGED_PCR_SELECT Structure < OUT>
763typedef 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
770typedef struct {
771 UINT32 count;
772 TPM_CC commandCodes[MAX_CAP_CC];
773} TPML_CC;
774
775// Table 96 Definition of TPML_CCA Structure < OUT>
776typedef struct {
777 UINT32 count;
778 TPMA_CC commandAttributes[MAX_CAP_CC];
779} TPML_CCA;
780
781// Table 97 Definition of TPML_ALG Structure
782typedef 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>
788typedef struct {
789 UINT32 count;
790 TPM_HANDLE handle[MAX_CAP_HANDLES];
791} TPML_HANDLE;
792
793// Table 99 Definition of TPML_DIGEST Structure
794typedef struct {
795 UINT32 count;
796 TPM2B_DIGEST digests[8];
797} TPML_DIGEST;
798
799// Table 100 Definition of TPML_DIGEST_VALUES Structure
800typedef struct {
801 UINT32 count;
802 TPMT_HA digests[HASH_COUNT];
803} TPML_DIGEST_VALUES;
804
805// Table 101 Definition of TPM2B_DIGEST_VALUES Structure
806typedef 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
815typedef 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>
821typedef 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>
827typedef 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>
833typedef 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>
839typedef 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>
845typedef 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>
858typedef struct {
859 TPM_CAP capability;
860 TPMU_CAPABILITIES data;
861} TPMS_CAPABILITY_DATA;
862
863// Table 109 Definition of TPMS_CLOCK_INFO Structure
864typedef 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
872typedef 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>
878typedef 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>
884typedef struct {
885 TPM2B_NAME name;
886 TPM2B_NAME qualifiedName;
887} TPMS_CERTIFY_INFO;
888
889// Table 113 Definition of TPMS_QUOTE_INFO Structure < OUT>
890typedef 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>
896typedef 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>
904typedef 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>
910typedef 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>
916typedef 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>
923typedef TPM_ST TPMI_ST_ATTEST;
924// Table 119 Definition of TPMU_ATTEST Union < OUT>
925typedef 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>
936typedef 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>
947typedef 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>
956typedef 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>
964typedef 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
971typedef TPM_KEY_BITS TPMI_AES_KEY_BITS;
972typedef TPM_KEY_BITS TPMI_SM4_KEY_BITS;
973typedef TPM_KEY_BITS TPMI_CAMELLIA_KEY_BITS;
974
975
976// Table 125 Definition of TPMU_SYM_KEY_BITS Union
977typedef union {
Vadim Bendebury7251a1b2015-10-08 15:35:43 -0700978#ifdef TPM_ALG_AES
Vadim Bendebury0232bac2015-09-17 17:26:29 -0700979 TPMI_AES_KEY_BITS aes;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -0700980#endif
981#ifdef TPM_ALG_SM4
Vadim Bendebury0232bac2015-09-17 17:26:29 -0700982 TPMI_SM4_KEY_BITS sm4;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -0700983#endif
984#ifdef TPM_ALG_CAMELLIA
Vadim Bendebury0232bac2015-09-17 17:26:29 -0700985 TPMI_CAMELLIA_KEY_BITS camellia;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -0700986#endif
Vadim Bendebury0232bac2015-09-17 17:26:29 -0700987 TPM_KEY_BITS sym;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -0700988#ifdef TPM_ALG_XOR
Vadim Bendebury0232bac2015-09-17 17:26:29 -0700989 TPMI_ALG_HASH xor_;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -0700990#endif
Vadim Bendebury0232bac2015-09-17 17:26:29 -0700991} TPMU_SYM_KEY_BITS;
992
993// Table 126 Definition of TPMU_SYM_MODE Union
994typedef union {
Vadim Bendebury7251a1b2015-10-08 15:35:43 -0700995#ifdef TPM_ALG_AES
Vadim Bendebury0232bac2015-09-17 17:26:29 -0700996 TPMI_ALG_SYM_MODE aes;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -0700997#endif
998#ifdef TPM_ALG_SM4
Vadim Bendebury0232bac2015-09-17 17:26:29 -0700999 TPMI_ALG_SYM_MODE sm4;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001000#endif
1001#ifdef TPM_ALG_CAMELLIA
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001002 TPMI_ALG_SYM_MODE camellia;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001003#endif
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001004 TPMI_ALG_SYM_MODE sym;
1005} TPMU_SYM_MODE;
1006
1007// Table 127 xDefinition of TPMU_SYM_DETAILS Union
1008typedef union {
1009} TPMU_SYM_DETAILS;
1010
1011// Table 128 Definition of TPMT_SYM_DEF Structure
1012typedef 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
1019typedef 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
1026typedef 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
1035typedef struct {
1036 TPMT_SYM_DEF_OBJECT sym;
1037} TPMS_SYMCIPHER_PARMS;
1038
1039// Table 132 Definition of TPM2B_SENSITIVE_DATA Structure
1040typedef 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>
1049typedef 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>
1055typedef 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
1064typedef struct {
1065 TPMI_ALG_HASH hashAlg;
1066} TPMS_SCHEME_HASH;
1067
1068// Table 136 Definition of TPMS_SCHEME_ECDAA Structure
1069typedef struct {
1070 TPMI_ALG_HASH hashAlg;
1071 UINT16 count;
1072} TPMS_SCHEME_ECDAA;
1073
1074// Table 137 Definition of TPMI_ALG_KEYEDHASH_SCHEME Type
1075typedef TPM_ALG_ID TPMI_ALG_KEYEDHASH_SCHEME;
1076// Table 138 Definition of Types for HMAC_SIG_SCHEME
1077typedef TPMS_SCHEME_HASH TPMS_SCHEME_HMAC;
1078
1079// Table 139 Definition of TPMS_SCHEME_XOR Structure
1080typedef 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>
1086typedef union {
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001087#ifdef TPM_ALG_HMAC
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001088 TPMS_SCHEME_HMAC hmac;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001089#endif
1090#ifdef TPM_ALG_XOR
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001091 TPMS_SCHEME_XOR xor_;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001092#endif
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001093} TPMU_SCHEME_KEYEDHASH;
1094
1095// Table 141 Definition of TPMT_KEYEDHASH_SCHEME Structure
1096typedef 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
1102typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_RSASSA;
1103typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_RSAPSS;
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001104
1105// Table 143 Definition of Types for ECC Signature Schemes
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001106typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_ECDSA;
1107typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_SM2;
1108typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_ECSCHNORR;
1109typedef TPMS_SCHEME_ECDAA TPMS_SIG_SCHEME_ECDAA;
1110
1111// Table 144 Definition of TPMU_SIG_SCHEME Union < IN/OUT, S>
1112typedef union {
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001113#ifdef TPM_ALG_RSASSA
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001114 TPMS_SIG_SCHEME_RSASSA rsassa;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001115#endif
1116#ifdef TPM_ALG_RSAPSS
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001117 TPMS_SIG_SCHEME_RSAPSS rsapss;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001118#endif
1119#ifdef TPM_ALG_ECDSA
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001120 TPMS_SIG_SCHEME_ECDSA ecdsa;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001121#endif
1122#ifdef TPM_ALG_ECDAA
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001123 TPMS_SIG_SCHEME_ECDAA ecdaa;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001124#endif
1125#ifdef TPM_ALG_SM2
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001126 TPMS_SIG_SCHEME_SM2 sm2;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001127#endif
1128#ifdef TPM_ALG_ECSCHNORR
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001129 TPMS_SIG_SCHEME_ECSCHNORR ecschnorr;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001130#endif
1131#ifdef TPM_ALG_HMAC
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001132 TPMS_SCHEME_HMAC hmac;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001133#endif
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001134 TPMS_SCHEME_HASH any;
1135} TPMU_SIG_SCHEME;
1136
1137// Table 145 Definition of TPMT_SIG_SCHEME Structure
1138typedef struct {
1139 TPMI_ALG_SIG_SCHEME scheme;
1140 TPMU_SIG_SCHEME details;
1141} TPMT_SIG_SCHEME;
1142
1143// Table 146 Definition of Types for Encryption Schemes
1144typedef TPMS_SCHEME_HASH TPMS_ENC_SCHEME_OAEP;
1145typedef TPMS_EMPTY TPMS_ENC_SCHEME_RSAES;
1146
1147// Table 147 Definition of Types for ECC Key Exchange
1148typedef TPMS_SCHEME_HASH TPMS_KEY_SCHEME_ECDH;
1149typedef TPMS_SCHEME_HASH TPMS_KEY_SCHEME_ECMQV;
1150
1151// Table 148 Definition of Types for KDF Schemes
1152typedef TPMS_SCHEME_HASH TPMS_SCHEME_MGF1;
1153typedef TPMS_SCHEME_HASH TPMS_SCHEME_KDF1_SP800_56A;
1154typedef TPMS_SCHEME_HASH TPMS_SCHEME_KDF2;
1155typedef TPMS_SCHEME_HASH TPMS_SCHEME_KDF1_SP800_108;
1156
1157// Table 149 Definition of TPMU_KDF_SCHEME Union < IN/OUT, S>
1158typedef union {
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001159#ifdef TPM_ALG_MGF1
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001160 TPMS_SCHEME_MGF1 mgf1;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001161#endif
1162#ifdef TPM_ALG_KDF1_SP800_56A
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001163 TPMS_SCHEME_KDF1_SP800_56A kdf1_sp800_56a;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001164#endif
1165#ifdef TPM_ALG_KDF2
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001166 TPMS_SCHEME_KDF2 kdf2;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001167#endif
1168#ifdef TPM_ALG_KDF1_SP800_108
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001169 TPMS_SCHEME_KDF1_SP800_108 kdf1_sp800_108;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001170#endif
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001171} TPMU_KDF_SCHEME;
1172
1173// Table 150 Definition of TPMT_KDF_SCHEME Structure
1174typedef struct {
1175 TPMI_ALG_KDF scheme;
1176 TPMU_KDF_SCHEME details;
1177} TPMT_KDF_SCHEME;
1178
1179// Table 151 Definition of TPMI_ALG_ASYM_SCHEME Type <>
1180typedef TPM_ALG_ID TPMI_ALG_ASYM_SCHEME;
1181// Table 152 Definition of TPMU_ASYM_SCHEME Union
1182typedef union {
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001183#ifdef TPM_ALG_ECDH
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001184 TPMS_KEY_SCHEME_ECDH ecdh;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001185#endif
1186#ifdef TPM_ALG_ECMQV
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001187 TPMS_KEY_SCHEME_ECMQV ecmqv;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001188#endif
1189#ifdef TPM_ALG_RSASSA
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001190 TPMS_SIG_SCHEME_RSASSA rsassa;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001191#endif
1192#ifdef TPM_ALG_RSAPSS
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001193 TPMS_SIG_SCHEME_RSAPSS rsapss;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001194#endif
1195#ifdef TPM_ALG_ECDSA
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001196 TPMS_SIG_SCHEME_ECDSA ecdsa;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001197#endif
1198#ifdef TPM_ALG_ECDAA
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001199 TPMS_SIG_SCHEME_ECDAA ecdaa;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001200#endif
1201#ifdef TPM_ALG_SM2
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001202 TPMS_SIG_SCHEME_SM2 sm2;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001203#endif
1204#ifdef TPM_ALG_ECSCHNORR
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001205 TPMS_SIG_SCHEME_ECSCHNORR ecschnorr;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001206#endif
1207#ifdef TPM_ALG_RSAES
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001208 TPMS_ENC_SCHEME_RSAES rsaes;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001209#endif
1210#ifdef TPM_ALG_OAEP
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001211 TPMS_ENC_SCHEME_OAEP oaep;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001212#endif
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001213 TPMS_SCHEME_HASH anySig;
1214} TPMU_ASYM_SCHEME;
1215
1216// Table 153 Definition of TPMT_ASYM_SCHEME Structure <>
1217typedef struct {
1218 TPMI_ALG_ASYM_SCHEME scheme;
1219 TPMU_ASYM_SCHEME details;
1220} TPMT_ASYM_SCHEME;
1221
1222// Table 154 Definition of TPMI_ALG_RSA_SCHEME Type
1223typedef TPM_ALG_ID TPMI_ALG_RSA_SCHEME;
1224// Table 155 Definition of TPMT_RSA_SCHEME Structure
1225typedef struct {
1226 TPMI_ALG_RSA_SCHEME scheme;
1227 TPMU_ASYM_SCHEME details;
1228} TPMT_RSA_SCHEME;
1229
1230// Table 156 Definition of TPMI_ALG_RSA_DECRYPT Type
1231typedef TPM_ALG_ID TPMI_ALG_RSA_DECRYPT;
1232// Table 157 Definition of TPMT_RSA_DECRYPT Structure
1233typedef struct {
1234 TPMI_ALG_RSA_DECRYPT scheme;
1235 TPMU_ASYM_SCHEME details;
1236} TPMT_RSA_DECRYPT;
1237
1238// Table 158 Definition of TPM2B_PUBLIC_KEY_RSA Structure
1239typedef union {
1240 struct {
1241 UINT16 size;
1242 BYTE buffer[MAX_RSA_KEY_BYTES];
1243 } t;
1244 TPM2B b;
1245} TPM2B_PUBLIC_KEY_RSA;
1246
1247// Table 159 Definition of TPMI_RSA_KEY_BITS Type
1248typedef TPM_KEY_BITS TPMI_RSA_KEY_BITS;
1249// Table 160 Definition of TPM2B_PRIVATE_KEY_RSA Structure
1250typedef union {
1251 struct {
1252 UINT16 size;
1253 BYTE buffer[MAX_RSA_KEY_BYTES/2];
1254 } t;
1255 TPM2B b;
1256} TPM2B_PRIVATE_KEY_RSA;
1257
1258// Table 161 Definition of TPM2B_ECC_PARAMETER Structure
1259typedef union {
1260 struct {
1261 UINT16 size;
1262 BYTE buffer[MAX_ECC_KEY_BYTES];
1263 } t;
1264 TPM2B b;
1265} TPM2B_ECC_PARAMETER;
1266
1267// Table 162 Definition of TPMS_ECC_POINT Structure
1268typedef struct {
1269 TPM2B_ECC_PARAMETER x;
1270 TPM2B_ECC_PARAMETER y;
nagendra modadugud9365132016-02-04 22:47:45 -08001271} TPMS_ECC_POINT;
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001272
1273// Table 163 Definition of TPM2B_ECC_POINT Structure
1274typedef union {
1275 struct {
1276 UINT16 size;
1277 TPMS_ECC_POINT point;
1278 } t;
1279 TPM2B b;
1280} TPM2B_ECC_POINT;
1281
1282// Table 164 Definition of TPMI_ALG_ECC_SCHEME Type
1283typedef TPM_ALG_ID TPMI_ALG_ECC_SCHEME;
1284// Table 165 Definition of TPMI_ECC_CURVE Type
1285typedef TPM_ECC_CURVE TPMI_ECC_CURVE;
1286// Table 166 Definition of TPMT_ECC_SCHEME Structure
1287typedef struct {
1288 TPMI_ALG_ECC_SCHEME scheme;
Vadim Bendeburyd7f4c462015-10-27 16:21:58 -07001289 TPMU_ASYM_SCHEME details;
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001290} TPMT_ECC_SCHEME;
1291
1292// Table 167 Definition of TPMS_ALGORITHM_DETAIL_ECC Structure < OUT>
1293typedef struct {
1294 TPM_ECC_CURVE curveID;
1295 UINT16 keySize;
1296 TPMT_KDF_SCHEME kdf;
1297 TPMT_ECC_SCHEME sign;
1298 TPM2B_ECC_PARAMETER p;
1299 TPM2B_ECC_PARAMETER a;
1300 TPM2B_ECC_PARAMETER b;
1301 TPM2B_ECC_PARAMETER gX;
1302 TPM2B_ECC_PARAMETER gY;
1303 TPM2B_ECC_PARAMETER n;
1304 TPM2B_ECC_PARAMETER h;
1305} TPMS_ALGORITHM_DETAIL_ECC;
1306
1307// Table 168 Definition of TPMS_SIGNATURE_RSA Structure
1308typedef struct {
1309 TPMI_ALG_HASH hash;
1310 TPM2B_PUBLIC_KEY_RSA sig;
1311} TPMS_SIGNATURE_RSA;
1312
1313// Table 169 Definition of Types for Signature
1314typedef TPMS_SIGNATURE_RSA TPMS_SIGNATURE_RSASSA;
1315typedef TPMS_SIGNATURE_RSA TPMS_SIGNATURE_RSAPSS;
1316
1317// Table 170 Definition of TPMS_SIGNATURE_ECC Structure
1318typedef struct {
1319 TPMI_ALG_HASH hash;
1320 TPM2B_ECC_PARAMETER signatureR;
1321 TPM2B_ECC_PARAMETER signatureS;
1322} TPMS_SIGNATURE_ECC;
1323
1324// Table 171 Definition of Types for TPMS_SIGNATUE_ECC
1325typedef TPMS_SIGNATURE_ECC TPMS_SIGNATURE_ECDSA;
1326typedef TPMS_SIGNATURE_ECC TPMS_SIGNATURE_ECDAA;
1327typedef TPMS_SIGNATURE_ECC TPMS_SIGNATURE_SM2;
1328typedef TPMS_SIGNATURE_ECC TPMS_SIGNATURE_ECSCHNORR;
1329
1330// Table 172 Definition of TPMU_SIGNATURE Union < IN/OUT, S>
1331typedef union {
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001332#ifdef TPM_ALG_RSASSA
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001333 TPMS_SIGNATURE_RSASSA rsassa;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001334#endif
1335#ifdef TPM_ALG_RSAPSS
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001336 TPMS_SIGNATURE_RSAPSS rsapss;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001337#endif
1338#ifdef TPM_ALG_ECDSA
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001339 TPMS_SIGNATURE_ECDSA ecdsa;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001340#endif
1341#ifdef TPM_ALG_ECDAA
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001342 TPMS_SIGNATURE_ECDAA ecdaa;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001343#endif
1344#ifdef TPM_ALG_SM2
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001345 TPMS_SIGNATURE_SM2 sm2;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001346#endif
1347#ifdef TPM_ALG_ECSCHNORR
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001348 TPMS_SIGNATURE_ECSCHNORR ecschnorr;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001349#endif
1350#ifdef TPM_ALG_HMAC
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001351 TPMT_HA hmac;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001352#endif
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001353 TPMS_SCHEME_HASH any;
1354} TPMU_SIGNATURE;
1355
1356// Table 173 Definition of TPMT_SIGNATURE Structure
1357typedef struct {
1358 TPMI_ALG_SIG_SCHEME sigAlg;
1359 TPMU_SIGNATURE signature;
1360} TPMT_SIGNATURE;
1361
1362// Table 174 Definition of TPMU_ENCRYPTED_SECRET Union < S>
1363typedef union {
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001364#ifdef TPM_ALG_ECC
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001365 BYTE ecc[sizeof(TPMS_ECC_POINT)];
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001366#endif
1367#ifdef TPM_ALG_RSA
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001368 BYTE rsa[MAX_RSA_KEY_BYTES];
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001369#endif
1370#ifdef TPM_ALG_SYMCIPHER
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001371 BYTE symmetric[sizeof(TPM2B_DIGEST)];
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001372#endif
1373#ifdef TPM_ALG_KEYEDHASH
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001374 BYTE keyedHash[sizeof(TPM2B_DIGEST)];
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001375#endif
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001376} TPMU_ENCRYPTED_SECRET;
1377
1378// Table 175 Definition of TPM2B_ENCRYPTED_SECRET Structure
1379typedef union {
1380 struct {
1381 UINT16 size;
1382 BYTE secret[sizeof(TPMU_ENCRYPTED_SECRET)];
1383 } t;
1384 TPM2B b;
1385} TPM2B_ENCRYPTED_SECRET;
1386
1387// Table 176 Definition of TPMI_ALG_PUBLIC Type
1388typedef TPM_ALG_ID TPMI_ALG_PUBLIC;
1389// Table 177 Definition of TPMU_PUBLIC_ID Union < IN/OUT, S>
1390typedef union {
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001391#ifdef TPM_ALG_KEYEDHASH
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001392 TPM2B_DIGEST keyedHash;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001393#endif
1394#ifdef TPM_ALG_SYMCIPHER
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001395 TPM2B_DIGEST sym;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001396#endif
1397#ifdef TPM_ALG_RSA
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001398 TPM2B_PUBLIC_KEY_RSA rsa;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001399#endif
1400#ifdef TPM_ALG_ECC
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001401 TPMS_ECC_POINT ecc;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001402#endif
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001403} TPMU_PUBLIC_ID;
1404
1405// Table 178 Definition of TPMS_KEYEDHASH_PARMS Structure
1406typedef struct {
1407 TPMT_KEYEDHASH_SCHEME scheme;
1408} TPMS_KEYEDHASH_PARMS;
1409
1410// Table 179 Definition of TPMS_ASYM_PARMS Structure <>
1411typedef struct {
1412 TPMT_SYM_DEF_OBJECT symmetric;
1413 TPMT_ASYM_SCHEME scheme;
1414} TPMS_ASYM_PARMS;
1415
1416// Table 180 Definition of TPMS_RSA_PARMS Structure
1417typedef struct {
1418 TPMT_SYM_DEF_OBJECT symmetric;
1419 TPMT_RSA_SCHEME scheme;
1420 TPMI_RSA_KEY_BITS keyBits;
1421 UINT32 exponent;
1422} TPMS_RSA_PARMS;
1423
1424// Table 181 Definition of TPMS_ECC_PARMS Structure
1425typedef struct {
1426 TPMT_SYM_DEF_OBJECT symmetric;
1427 TPMT_ECC_SCHEME scheme;
1428 TPMI_ECC_CURVE curveID;
1429 TPMT_KDF_SCHEME kdf;
1430} TPMS_ECC_PARMS;
1431
1432// Table 182 Definition of TPMU_PUBLIC_PARMS Union < IN/OUT, S>
1433typedef union {
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001434#ifdef TPM_ALG_KEYEDHASH
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001435 TPMS_KEYEDHASH_PARMS keyedHashDetail;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001436#endif
1437#ifdef TPM_ALG_SYMCIPHER
Vadim Bendeburyd7f4c462015-10-27 16:21:58 -07001438 TPMS_SYMCIPHER_PARMS symDetail;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001439#endif
1440#ifdef TPM_ALG_RSA
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001441 TPMS_RSA_PARMS rsaDetail;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001442#endif
1443#ifdef TPM_ALG_ECC
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001444 TPMS_ECC_PARMS eccDetail;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001445#endif
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001446 TPMS_ASYM_PARMS asymDetail;
1447} TPMU_PUBLIC_PARMS;
1448
1449// Table 183 Definition of TPMT_PUBLIC_PARMS Structure
1450typedef struct {
1451 TPMI_ALG_PUBLIC type;
1452 TPMU_PUBLIC_PARMS parameters;
1453} TPMT_PUBLIC_PARMS;
1454
1455// Table 184 Definition of TPMT_PUBLIC Structure
1456typedef struct {
1457 TPMI_ALG_PUBLIC type;
1458 TPMI_ALG_HASH nameAlg;
1459 TPMA_OBJECT objectAttributes;
1460 TPM2B_DIGEST authPolicy;
1461 TPMU_PUBLIC_PARMS parameters;
1462 TPMU_PUBLIC_ID unique;
1463} TPMT_PUBLIC;
1464
1465// Table 185 Definition of TPM2B_PUBLIC Structure
1466typedef union {
1467 struct {
1468 UINT16 size;
1469 TPMT_PUBLIC publicArea;
1470 } t;
1471 TPM2B b;
1472} TPM2B_PUBLIC;
1473
1474// Table 186 Definition of TPM2B_PRIVATE_VENDOR_SPECIFIC Structure<>
1475typedef union {
1476 struct {
1477 UINT16 size;
1478 BYTE buffer[PRIVATE_VENDOR_SPECIFIC_BYTES];
1479 } t;
1480 TPM2B b;
1481} TPM2B_PRIVATE_VENDOR_SPECIFIC;
1482
1483// Table 187 Definition of TPMU_SENSITIVE_COMPOSITE Union < IN/OUT, S>
1484typedef union {
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001485#ifdef TPM_ALG_RSA
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001486 TPM2B_PRIVATE_KEY_RSA rsa;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001487#endif
1488#ifdef TPM_ALG_ECC
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001489 TPM2B_ECC_PARAMETER ecc;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001490#endif
1491#ifdef TPM_ALG_KEYEDHASH
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001492 TPM2B_SENSITIVE_DATA bits;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001493#endif
1494#ifdef TPM_ALG_SYMCIPHER
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001495 TPM2B_SYM_KEY sym;
Vadim Bendebury7251a1b2015-10-08 15:35:43 -07001496#endif
Vadim Bendebury0232bac2015-09-17 17:26:29 -07001497 TPM2B_PRIVATE_VENDOR_SPECIFIC any;
1498} TPMU_SENSITIVE_COMPOSITE;
1499
1500// Table 188 Definition of TPMT_SENSITIVE Structure
1501typedef struct {
1502 TPMI_ALG_PUBLIC sensitiveType;
1503 TPM2B_AUTH authValue;
1504 TPM2B_DIGEST seedValue;
1505 TPMU_SENSITIVE_COMPOSITE sensitive;
1506} TPMT_SENSITIVE;
1507
1508// Table 189 Definition of TPM2B_SENSITIVE Structure < IN/OUT>
1509typedef union {
1510 struct {
1511 UINT16 size;
1512 TPMT_SENSITIVE sensitiveArea;
1513 } t;
1514 TPM2B b;
1515} TPM2B_SENSITIVE;
1516
1517// Table 190 Definition of _PRIVATE Structure <>
1518typedef struct {
1519 TPM2B_DIGEST integrityOuter;
1520 TPM2B_DIGEST integrityInner;
1521 TPMT_SENSITIVE sensitive;
1522} _PRIVATE;
1523
1524// Table 191 Definition of TPM2B_PRIVATE Structure < IN/OUT, S>
1525typedef union {
1526 struct {
1527 UINT16 size;
1528 BYTE buffer[sizeof(_PRIVATE)];
1529 } t;
1530 TPM2B b;
1531} TPM2B_PRIVATE;
1532
1533// Table 192 Definition of _ID_OBJECT Structure <>
1534typedef struct {
1535 TPM2B_DIGEST integrityHMAC;
1536 TPM2B_DIGEST encIdentity;
1537} _ID_OBJECT;
1538
1539// Table 193 Definition of TPM2B_ID_OBJECT Structure < IN/OUT>
1540typedef union {
1541 struct {
1542 UINT16 size;
1543 BYTE credential[sizeof(_ID_OBJECT)];
1544 } t;
1545 TPM2B b;
1546} TPM2B_ID_OBJECT;
1547
1548// Table 194 Definition of TPM_NV_INDEX Bits <>
1549typedef struct {
1550 UINT32 index : 24;
1551 UINT32 RH_NV : 8;
1552} TPM_NV_INDEX;
1553
1554// Table 195 Definition of TPMA_NV Bits
1555typedef struct {
1556 UINT32 TPMA_NV_PPWRITE : 1;
1557 UINT32 TPMA_NV_OWNERWRITE : 1;
1558 UINT32 TPMA_NV_AUTHWRITE : 1;
1559 UINT32 TPMA_NV_POLICYWRITE : 1;
1560 UINT32 TPMA_NV_COUNTER : 1;
1561 UINT32 TPMA_NV_BITS : 1;
1562 UINT32 TPMA_NV_EXTEND : 1;
1563 UINT32 reserved7_9 : 3;
1564 UINT32 TPMA_NV_POLICY_DELETE : 1;
1565 UINT32 TPMA_NV_WRITELOCKED : 1;
1566 UINT32 TPMA_NV_WRITEALL : 1;
1567 UINT32 TPMA_NV_WRITEDEFINE : 1;
1568 UINT32 TPMA_NV_WRITE_STCLEAR : 1;
1569 UINT32 TPMA_NV_GLOBALLOCK : 1;
1570 UINT32 TPMA_NV_PPREAD : 1;
1571 UINT32 TPMA_NV_OWNERREAD : 1;
1572 UINT32 TPMA_NV_AUTHREAD : 1;
1573 UINT32 TPMA_NV_POLICYREAD : 1;
1574 UINT32 reserved20_24 : 5;
1575 UINT32 TPMA_NV_NO_DA : 1;
1576 UINT32 TPMA_NV_ORDERLY : 1;
1577 UINT32 TPMA_NV_CLEAR_STCLEAR : 1;
1578 UINT32 TPMA_NV_READLOCKED : 1;
1579 UINT32 TPMA_NV_WRITTEN : 1;
1580 UINT32 TPMA_NV_PLATFORMCREATE : 1;
1581 UINT32 TPMA_NV_READ_STCLEAR : 1;
1582} TPMA_NV;
1583
1584// Table 196 Definition of TPMS_NV_PUBLIC Structure
1585typedef struct {
1586 TPMI_RH_NV_INDEX nvIndex;
1587 TPMI_ALG_HASH nameAlg;
1588 TPMA_NV attributes;
1589 TPM2B_DIGEST authPolicy;
1590 UINT16 dataSize;
1591} TPMS_NV_PUBLIC;
1592
1593// Table 197 Definition of TPM2B_NV_PUBLIC Structure
1594typedef union {
1595 struct {
1596 UINT16 size;
1597 TPMS_NV_PUBLIC nvPublic;
1598 } t;
1599 TPM2B b;
1600} TPM2B_NV_PUBLIC;
1601
1602// Table 198 Definition of TPM2B_CONTEXT_SENSITIVE Structure < IN/OUT>
1603typedef union {
1604 struct {
1605 UINT16 size;
1606 BYTE buffer[MAX_CONTEXT_SIZE];
1607 } t;
1608 TPM2B b;
1609} TPM2B_CONTEXT_SENSITIVE;
1610
1611// Table 199 Definition of TPMS_CONTEXT_DATA Structure < IN/OUT, S>
1612typedef struct {
1613 TPM2B_DIGEST integrity;
1614 TPM2B_CONTEXT_SENSITIVE encrypted;
1615} TPMS_CONTEXT_DATA;
1616
1617// Table 200 Definition of TPM2B_CONTEXT_DATA Structure < IN/OUT>
1618typedef union {
1619 struct {
1620 UINT16 size;
1621 BYTE buffer[sizeof(TPMS_CONTEXT_DATA)];
1622 } t;
1623 TPM2B b;
1624} TPM2B_CONTEXT_DATA;
1625
1626// Table 201 Definition of TPMS_CONTEXT Structure
1627typedef struct {
1628 UINT64 sequence;
1629 TPMI_DH_CONTEXT savedHandle;
1630 TPMI_RH_HIERARCHY hierarchy;
1631 TPM2B_CONTEXT_DATA contextBlob;
1632} TPMS_CONTEXT;
1633
1634// Unprocessed: Table 202 Context Handle Values
1635// Table 203 Definition of TPMS_CREATION_DATA Structure < OUT>
1636typedef struct {
1637 TPML_PCR_SELECTION pcrSelect;
1638 TPM2B_DIGEST pcrDigest;
1639 TPMA_LOCALITY locality;
1640 TPM_ALG_ID parentNameAlg;
1641 TPM2B_NAME parentName;
1642 TPM2B_NAME parentQualifiedName;
1643 TPM2B_DATA outsideInfo;
1644} TPMS_CREATION_DATA;
1645
1646// Table 204 Definition of TPM2B_CREATION_DATA Structure < OUT>
1647typedef union {
1648 struct {
1649 UINT16 size;
1650 TPMS_CREATION_DATA creationData;
1651 } t;
1652 TPM2B b;
1653} TPM2B_CREATION_DATA;
1654
1655
1656#endif // TPM2_TPM_TYPES_H_