1 //
2 // Copyright (C) 2015 The Android Open Source Project
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //      http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16 
17 // THIS CODE IS GENERATED - DO NOT MODIFY!
18 
19 #ifndef TRUNKS_TPM_GENERATED_H_
20 #define TRUNKS_TPM_GENERATED_H_
21 
22 #include <string>
23 
24 #include <base/callback_forward.h>
25 #include <base/macros.h>
26 
27 #include "trunks/trunks_export.h"
28 
29 namespace trunks {
30 
31 class AuthorizationDelegate;
32 class CommandTransceiver;
33 
34 #if !defined(SHA1_DIGEST_SIZE)
35 #define SHA1_DIGEST_SIZE 20
36 #endif
37 #if !defined(SHA1_BLOCK_SIZE)
38 #define SHA1_BLOCK_SIZE 64
39 #endif
40 #if !defined(SHA1_DER_SIZE)
41 #define SHA1_DER_SIZE 15
42 #endif
43 #if !defined(SHA1_DER)
44 #define SHA1_DER                                                            \
45   {                                                                         \
46     0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, \
47         0x00, 0x04, 0x14                                                    \
48   }
49 #endif
50 #if !defined(SHA256_DIGEST_SIZE)
51 #define SHA256_DIGEST_SIZE 32
52 #endif
53 #if !defined(SHA256_BLOCK_SIZE)
54 #define SHA256_BLOCK_SIZE 64
55 #endif
56 #if !defined(SHA256_DER_SIZE)
57 #define SHA256_DER_SIZE 19
58 #endif
59 #if !defined(SHA256_DER)
60 #define SHA256_DER                                                          \
61   {                                                                         \
62     0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, \
63         0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20                            \
64   }
65 #endif
66 #if !defined(SHA384_DIGEST_SIZE)
67 #define SHA384_DIGEST_SIZE 48
68 #endif
69 #if !defined(SHA384_BLOCK_SIZE)
70 #define SHA384_BLOCK_SIZE 128
71 #endif
72 #if !defined(SHA384_DER_SIZE)
73 #define SHA384_DER_SIZE 19
74 #endif
75 #if !defined(SHA384_DER)
76 #define SHA384_DER                                                          \
77   {                                                                         \
78     0x30, 0x41, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, \
79         0x04, 0x02, 0x02, 0x05, 0x00, 0x04, 0x30                            \
80   }
81 #endif
82 #if !defined(SHA512_DIGEST_SIZE)
83 #define SHA512_DIGEST_SIZE 64
84 #endif
85 #if !defined(SHA512_BLOCK_SIZE)
86 #define SHA512_BLOCK_SIZE 128
87 #endif
88 #if !defined(SHA512_DER_SIZE)
89 #define SHA512_DER_SIZE 19
90 #endif
91 #if !defined(SHA512_DER)
92 #define SHA512_DER                                                          \
93   {                                                                         \
94     0x30, 0x51, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, \
95         0x04, 0x02, 0x03, 0x05, 0x00, 0x04, 0x40                            \
96   }
97 #endif
98 #if !defined(SM3_256_DIGEST_SIZE)
99 #define SM3_256_DIGEST_SIZE 32
100 #endif
101 #if !defined(SM3_256_BLOCK_SIZE)
102 #define SM3_256_BLOCK_SIZE 64
103 #endif
104 #if !defined(SM3_256_DER_SIZE)
105 #define SM3_256_DER_SIZE 18
106 #endif
107 #if !defined(SM3_256_DER)
108 #define SM3_256_DER                                                         \
109   {                                                                         \
110     0x30, 0x30, 0x30, 0x0c, 0x06, 0x08, 0x2a, 0x81, 0x1c, 0x81, 0x45, 0x01, \
111         0x83, 0x11, 0x05, 0x00, 0x04, 0x20                                  \
112   }
113 #endif
114 #if !defined(MAX_SESSION_NUMBER)
115 #define MAX_SESSION_NUMBER 3
116 #endif
117 #if !defined(YES)
118 #define YES 1
119 #endif
120 #if !defined(NO)
121 #define NO 0
122 #endif
123 #if !defined(TRUE)
124 #define TRUE 1
125 #endif
126 #if !defined(FALSE)
127 #define FALSE 0
128 #endif
129 #if !defined(SET)
130 #define SET 1
131 #endif
132 #if !defined(CLEAR)
133 #define CLEAR 0
134 #endif
135 #if !defined(BIG_ENDIAN_TPM)
136 #define BIG_ENDIAN_TPM NO
137 #endif
138 #if !defined(LITTLE_ENDIAN_TPM)
139 #define LITTLE_ENDIAN_TPM YES
140 #endif
141 #if !defined(NO_AUTO_ALIGN)
142 #define NO_AUTO_ALIGN NO
143 #endif
144 #if !defined(RSA_KEY_SIZES_BITS)
145 #define RSA_KEY_SIZES_BITS \
146   { 1024, 2048 }
147 #endif
148 #if !defined(MAX_RSA_KEY_BITS)
149 #define MAX_RSA_KEY_BITS 2048
150 #endif
151 #if !defined(MAX_RSA_KEY_BYTES)
152 #define MAX_RSA_KEY_BYTES ((MAX_RSA_KEY_BITS + 7) / 8)
153 #endif
154 #if !defined(ECC_CURVES)
155 #define ECC_CURVES                                      \
156   {                                                     \
157     trunks::TPM_ECC_NIST_P256, trunks::TPM_ECC_BN_P256, \
158         trunks::TPM_ECC_SM2_P256                        \
159   }
160 #endif
161 #if !defined(ECC_KEY_SIZES_BITS)
162 #define ECC_KEY_SIZES_BITS \
163   { 256 }
164 #endif
165 #if !defined(MAX_ECC_KEY_BITS)
166 #define MAX_ECC_KEY_BITS 256
167 #endif
168 #if !defined(MAX_ECC_KEY_BYTES)
169 #define MAX_ECC_KEY_BYTES ((MAX_ECC_KEY_BITS + 7) / 8)
170 #endif
171 #if !defined(AES_KEY_SIZES_BITS)
172 #define AES_KEY_SIZES_BITS \
173   { 128 }
174 #endif
175 #if !defined(MAX_AES_KEY_BITS)
176 #define MAX_AES_KEY_BITS 128
177 #endif
178 #if !defined(MAX_AES_BLOCK_SIZE_BYTES)
179 #define MAX_AES_BLOCK_SIZE_BYTES 16
180 #endif
181 #if !defined(MAX_AES_KEY_BYTES)
182 #define MAX_AES_KEY_BYTES ((MAX_AES_KEY_BITS + 7) / 8)
183 #endif
184 #if !defined(SM4_KEY_SIZES_BITS)
185 #define SM4_KEY_SIZES_BITS \
186   { 128 }
187 #endif
188 #if !defined(MAX_SM4_KEY_BITS)
189 #define MAX_SM4_KEY_BITS 128
190 #endif
191 #if !defined(MAX_SM4_BLOCK_SIZE_BYTES)
192 #define MAX_SM4_BLOCK_SIZE_BYTES 16
193 #endif
194 #if !defined(MAX_SM4_KEY_BYTES)
195 #define MAX_SM4_KEY_BYTES ((MAX_SM4_KEY_BITS + 7) / 8)
196 #endif
197 #if !defined(MAX_SYM_KEY_BITS)
198 #define MAX_SYM_KEY_BITS MAX_AES_KEY_BITS
199 #endif
200 #if !defined(MAX_SYM_KEY_BYTES)
201 #define MAX_SYM_KEY_BYTES MAX_AES_KEY_BYTES
202 #endif
203 #if !defined(MAX_SYM_BLOCK_SIZE)
204 #define MAX_SYM_BLOCK_SIZE MAX_AES_BLOCK_SIZE_BYTES
205 #endif
206 #if !defined(FIELD_UPGRADE_IMPLEMENTED)
207 #define FIELD_UPGRADE_IMPLEMENTED NO
208 #endif
209 #if !defined(BSIZE)
210 #define BSIZE trunks::UINT16
211 #endif
212 #if !defined(BUFFER_ALIGNMENT)
213 #define BUFFER_ALIGNMENT 4
214 #endif
215 #if !defined(IMPLEMENTATION_PCR)
216 #define IMPLEMENTATION_PCR 24
217 #endif
218 #if !defined(PLATFORM_PCR)
219 #define PLATFORM_PCR 24
220 #endif
221 #if !defined(DRTM_PCR)
222 #define DRTM_PCR 17
223 #endif
224 #if !defined(HCRTM_PCR)
225 #define HCRTM_PCR 0
226 #endif
227 #if !defined(NUM_LOCALITIES)
228 #define NUM_LOCALITIES 5
229 #endif
230 #if !defined(MAX_HANDLE_NUM)
231 #define MAX_HANDLE_NUM 3
232 #endif
233 #if !defined(MAX_ACTIVE_SESSIONS)
234 #define MAX_ACTIVE_SESSIONS 64
235 #endif
236 #if !defined(CONTEXT_SLOT)
237 #define CONTEXT_SLOT trunks::UINT16
238 #endif
239 #if !defined(CONTEXT_COUNTER)
240 #define CONTEXT_COUNTER trunks::UINT64
241 #endif
242 #if !defined(MAX_LOADED_SESSIONS)
243 #define MAX_LOADED_SESSIONS 3
244 #endif
245 #if !defined(MAX_SESSION_NUM)
246 #define MAX_SESSION_NUM 3
247 #endif
248 #if !defined(MAX_LOADED_OBJECTS)
249 #define MAX_LOADED_OBJECTS 3
250 #endif
251 #if !defined(MIN_EVICT_OBJECTS)
252 #define MIN_EVICT_OBJECTS 2
253 #endif
254 #if !defined(PCR_SELECT_MIN)
255 #define PCR_SELECT_MIN ((PLATFORM_PCR + 7) / 8)
256 #endif
257 #if !defined(PCR_SELECT_MAX)
258 #define PCR_SELECT_MAX ((IMPLEMENTATION_PCR + 7) / 8)
259 #endif
260 #if !defined(NUM_POLICY_PCR_GROUP)
261 #define NUM_POLICY_PCR_GROUP 1
262 #endif
263 #if !defined(NUM_AUTHVALUE_PCR_GROUP)
264 #define NUM_AUTHVALUE_PCR_GROUP 1
265 #endif
266 #if !defined(MAX_CONTEXT_SIZE)
267 #define MAX_CONTEXT_SIZE 4000
268 #endif
269 #if !defined(MAX_DIGEST_BUFFER)
270 #define MAX_DIGEST_BUFFER 1024
271 #endif
272 #if !defined(MAX_NV_INDEX_SIZE)
273 #define MAX_NV_INDEX_SIZE 2048
274 #endif
275 #if !defined(MAX_NV_BUFFER_SIZE)
276 #define MAX_NV_BUFFER_SIZE 1024
277 #endif
278 #if !defined(MAX_CAP_BUFFER)
279 #define MAX_CAP_BUFFER 1024
280 #endif
281 #if !defined(NV_MEMORY_SIZE)
282 #define NV_MEMORY_SIZE 16384
283 #endif
284 #if !defined(NUM_STATIC_PCR)
285 #define NUM_STATIC_PCR 16
286 #endif
287 #if !defined(MAX_ALG_LIST_SIZE)
288 #define MAX_ALG_LIST_SIZE 64
289 #endif
290 #if !defined(TIMER_PRESCALE)
291 #define TIMER_PRESCALE 100000
292 #endif
293 #if !defined(PRIMARY_SEED_SIZE)
294 #define PRIMARY_SEED_SIZE 32
295 #endif
296 #if !defined(CONTEXT_ENCRYPT_ALG)
297 #define CONTEXT_ENCRYPT_ALG trunks::TPM_ALG_AES
298 #endif
299 #if !defined(CONTEXT_ENCRYPT_KEY_BITS)
300 #define CONTEXT_ENCRYPT_KEY_BITS MAX_SYM_KEY_BITS
301 #endif
302 #if !defined(CONTEXT_ENCRYPT_KEY_BYTES)
303 #define CONTEXT_ENCRYPT_KEY_BYTES ((CONTEXT_ENCRYPT_KEY_BITS + 7) / 8)
304 #endif
305 #if !defined(CONTEXT_INTEGRITY_HASH_ALG)
306 #define CONTEXT_INTEGRITY_HASH_ALG trunks::TPM_ALG_SHA256
307 #endif
308 #if !defined(CONTEXT_INTEGRITY_HASH_SIZE)
309 #define CONTEXT_INTEGRITY_HASH_SIZE SHA256_DIGEST_SIZE
310 #endif
311 #if !defined(PROOF_SIZE)
312 #define PROOF_SIZE CONTEXT_INTEGRITY_HASH_SIZE
313 #endif
314 #if !defined(NV_CLOCK_UPDATE_INTERVAL)
315 #define NV_CLOCK_UPDATE_INTERVAL 12
316 #endif
317 #if !defined(NUM_POLICY_PCR)
318 #define NUM_POLICY_PCR 1
319 #endif
320 #if !defined(MAX_COMMAND_SIZE)
321 #define MAX_COMMAND_SIZE 4096
322 #endif
323 #if !defined(MAX_RESPONSE_SIZE)
324 #define MAX_RESPONSE_SIZE 4096
325 #endif
326 #if !defined(ORDERLY_BITS)
327 #define ORDERLY_BITS 8
328 #endif
329 #if !defined(MAX_ORDERLY_COUNT)
330 #define MAX_ORDERLY_COUNT ((1 << ORDERLY_BITS) - 1)
331 #endif
332 #if !defined(ALG_ID_FIRST)
333 #define ALG_ID_FIRST trunks::TPM_ALG_FIRST
334 #endif
335 #if !defined(ALG_ID_LAST)
336 #define ALG_ID_LAST trunks::TPM_ALG_LAST
337 #endif
338 #if !defined(MAX_SYM_DATA)
339 #define MAX_SYM_DATA 128
340 #endif
341 #if !defined(MAX_RNG_ENTROPY_SIZE)
342 #define MAX_RNG_ENTROPY_SIZE 64
343 #endif
344 #if !defined(RAM_INDEX_SPACE)
345 #define RAM_INDEX_SPACE 512
346 #endif
347 #if !defined(RSA_DEFAULT_PUBLIC_EXPONENT)
348 #define RSA_DEFAULT_PUBLIC_EXPONENT 0x00010001
349 #endif
350 #if !defined(ENABLE_PCR_NO_INCREMENT)
351 #define ENABLE_PCR_NO_INCREMENT YES
352 #endif
353 #if !defined(CRT_FORMAT_RSA)
354 #define CRT_FORMAT_RSA YES
355 #endif
356 #if !defined(PRIVATE_VENDOR_SPECIFIC_BYTES)
357 #define PRIVATE_VENDOR_SPECIFIC_BYTES \
358   ((MAX_RSA_KEY_BYTES / 2) * (3 + CRT_FORMAT_RSA * 2))
359 #endif
360 #if !defined(MAX_CAP_DATA)
361 #define MAX_CAP_DATA \
362   (MAX_CAP_BUFFER - sizeof(trunks::TPM_CAP) - sizeof(trunks::UINT32))
363 #endif
364 #if !defined(MAX_CAP_ALGS)
365 #define MAX_CAP_ALGS (trunks::TPM_ALG_LAST - trunks::TPM_ALG_FIRST + 1)
366 #endif
367 #if !defined(MAX_CAP_HANDLES)
368 #define MAX_CAP_HANDLES (MAX_CAP_DATA / sizeof(trunks::TPM_HANDLE))
369 #endif
370 #if !defined(MAX_CAP_CC)
371 #define MAX_CAP_CC ((trunks::TPM_CC_LAST - trunks::TPM_CC_FIRST) + 1)
372 #endif
373 #if !defined(MAX_TPM_PROPERTIES)
374 #define MAX_TPM_PROPERTIES (MAX_CAP_DATA / sizeof(trunks::TPMS_TAGGED_PROPERTY))
375 #endif
376 #if !defined(MAX_PCR_PROPERTIES)
377 #define MAX_PCR_PROPERTIES \
378   (MAX_CAP_DATA / sizeof(trunks::TPMS_TAGGED_PCR_SELECT))
379 #endif
380 #if !defined(MAX_ECC_CURVES)
381 #define MAX_ECC_CURVES (MAX_CAP_DATA / sizeof(trunks::TPM_ECC_CURVE))
382 #endif
383 #if !defined(HASH_COUNT)
384 #define HASH_COUNT 3
385 #endif
386 
387 typedef uint8_t UINT8;
388 typedef uint8_t BYTE;
389 typedef int8_t INT8;
390 typedef int BOOL;
391 typedef uint16_t UINT16;
392 typedef int16_t INT16;
393 typedef uint32_t UINT32;
394 typedef int32_t INT32;
395 typedef uint64_t UINT64;
396 typedef int64_t INT64;
397 typedef UINT32 TPM_ALGORITHM_ID;
398 typedef UINT32 TPM_MODIFIER_INDICATOR;
399 typedef UINT32 TPM_AUTHORIZATION_SIZE;
400 typedef UINT32 TPM_PARAMETER_SIZE;
401 typedef UINT16 TPM_KEY_SIZE;
402 typedef UINT16 TPM_KEY_BITS;
403 typedef UINT32 TPM_HANDLE;
404 struct TPM2B_DIGEST;
405 typedef TPM2B_DIGEST TPM2B_NONCE;
406 typedef TPM2B_DIGEST TPM2B_AUTH;
407 typedef TPM2B_DIGEST TPM2B_OPERAND;
408 struct TPMS_SCHEME_SIGHASH;
409 typedef TPMS_SCHEME_SIGHASH TPMS_SCHEME_HMAC;
410 typedef TPMS_SCHEME_SIGHASH TPMS_SCHEME_RSASSA;
411 typedef TPMS_SCHEME_SIGHASH TPMS_SCHEME_RSAPSS;
412 typedef TPMS_SCHEME_SIGHASH TPMS_SCHEME_ECDSA;
413 typedef TPMS_SCHEME_SIGHASH TPMS_SCHEME_SM2;
414 typedef TPMS_SCHEME_SIGHASH TPMS_SCHEME_ECSCHNORR;
415 typedef BYTE TPMI_YES_NO;
416 typedef TPM_HANDLE TPMI_DH_OBJECT;
417 typedef TPM_HANDLE TPMI_DH_PERSISTENT;
418 typedef TPM_HANDLE TPMI_DH_ENTITY;
419 typedef TPM_HANDLE TPMI_DH_PCR;
420 typedef TPM_HANDLE TPMI_SH_AUTH_SESSION;
421 typedef TPM_HANDLE TPMI_SH_HMAC;
422 typedef TPM_HANDLE TPMI_SH_POLICY;
423 typedef TPM_HANDLE TPMI_DH_CONTEXT;
424 typedef TPM_HANDLE TPMI_RH_HIERARCHY;
425 typedef TPM_HANDLE TPMI_RH_ENABLES;
426 typedef TPM_HANDLE TPMI_RH_HIERARCHY_AUTH;
427 typedef TPM_HANDLE TPMI_RH_PLATFORM;
428 typedef TPM_HANDLE TPMI_RH_OWNER;
429 typedef TPM_HANDLE TPMI_RH_ENDORSEMENT;
430 typedef TPM_HANDLE TPMI_RH_PROVISION;
431 typedef TPM_HANDLE TPMI_RH_CLEAR;
432 typedef TPM_HANDLE TPMI_RH_NV_AUTH;
433 typedef TPM_HANDLE TPMI_RH_LOCKOUT;
434 typedef TPM_HANDLE TPMI_RH_NV_INDEX;
435 typedef UINT16 TPM_ALG_ID;
436 typedef TPM_ALG_ID TPMI_ALG_HASH;
437 typedef TPM_ALG_ID TPMI_ALG_ASYM;
438 typedef TPM_ALG_ID TPMI_ALG_SYM;
439 typedef TPM_ALG_ID TPMI_ALG_SYM_OBJECT;
440 typedef TPM_ALG_ID TPMI_ALG_SYM_MODE;
441 typedef TPM_ALG_ID TPMI_ALG_KDF;
442 typedef TPM_ALG_ID TPMI_ALG_SIG_SCHEME;
443 typedef TPM_ALG_ID TPMI_ECC_KEY_EXCHANGE;
444 typedef UINT16 TPM_ST;
445 typedef TPM_ST TPMI_ST_COMMAND_TAG;
446 typedef TPM_ST TPMI_ST_ATTEST;
447 typedef TPM_KEY_BITS TPMI_AES_KEY_BITS;
448 typedef TPM_KEY_BITS TPMI_SM4_KEY_BITS;
449 typedef TPM_ALG_ID TPMI_ALG_KEYEDHASH_SCHEME;
450 typedef TPM_ALG_ID TPMI_ALG_ASYM_SCHEME;
451 typedef TPM_ALG_ID TPMI_ALG_RSA_SCHEME;
452 typedef TPM_ALG_ID TPMI_ALG_RSA_DECRYPT;
453 typedef TPM_KEY_BITS TPMI_RSA_KEY_BITS;
454 typedef TPM_ALG_ID TPMI_ALG_ECC_SCHEME;
455 typedef UINT16 TPM_ECC_CURVE;
456 typedef TPM_ECC_CURVE TPMI_ECC_CURVE;
457 typedef TPM_ALG_ID TPMI_ALG_PUBLIC;
458 typedef UINT32 TPMA_ALGORITHM;
459 typedef UINT32 TPMA_OBJECT;
460 typedef UINT8 TPMA_SESSION;
461 typedef UINT8 TPMA_LOCALITY;
462 typedef UINT32 TPMA_PERMANENT;
463 typedef UINT32 TPMA_STARTUP_CLEAR;
464 typedef UINT32 TPMA_MEMORY;
465 typedef UINT32 TPM_CC;
466 typedef TPM_CC TPMA_CC;
467 typedef UINT32 TPM_NV_INDEX;
468 typedef UINT32 TPMA_NV;
469 typedef UINT32 TPM_SPEC;
470 typedef UINT32 TPM_GENERATED;
471 typedef UINT32 TPM_RC;
472 typedef INT8 TPM_CLOCK_ADJUST;
473 typedef UINT16 TPM_EO;
474 typedef UINT16 TPM_SU;
475 typedef UINT8 TPM_SE;
476 typedef UINT32 TPM_CAP;
477 typedef UINT32 TPM_PT;
478 typedef UINT32 TPM_PT_PCR;
479 typedef UINT32 TPM_PS;
480 typedef UINT8 TPM_HT;
481 typedef UINT32 TPM_RH;
482 typedef TPM_HANDLE TPM_HC;
483 
484 constexpr TPM_SPEC TPM_SPEC_FAMILY = 0x322E3000;
485 constexpr TPM_SPEC TPM_SPEC_LEVEL = 00;
486 constexpr TPM_SPEC TPM_SPEC_VERSION = 99;
487 constexpr TPM_SPEC TPM_SPEC_YEAR = 2013;
488 constexpr TPM_SPEC TPM_SPEC_DAY_OF_YEAR = 304;
489 constexpr TPM_GENERATED TPM_GENERATED_VALUE = 0xff544347;
490 constexpr TPM_ALG_ID TPM_ALG_ERROR = 0x0000;
491 constexpr TPM_ALG_ID TPM_ALG_FIRST = 0x0001;
492 constexpr TPM_ALG_ID TPM_ALG_RSA = 0x0001;
493 constexpr TPM_ALG_ID TPM_ALG_SHA = 0x0004;
494 constexpr TPM_ALG_ID TPM_ALG_SHA1 = 0x0004;
495 constexpr TPM_ALG_ID TPM_ALG_HMAC = 0x0005;
496 constexpr TPM_ALG_ID TPM_ALG_AES = 0x0006;
497 constexpr TPM_ALG_ID TPM_ALG_MGF1 = 0x0007;
498 constexpr TPM_ALG_ID TPM_ALG_KEYEDHASH = 0x0008;
499 constexpr TPM_ALG_ID TPM_ALG_XOR = 0x000A;
500 constexpr TPM_ALG_ID TPM_ALG_SHA256 = 0x000B;
501 constexpr TPM_ALG_ID TPM_ALG_SHA384 = 0x000C;
502 constexpr TPM_ALG_ID TPM_ALG_SHA512 = 0x000D;
503 constexpr TPM_ALG_ID TPM_ALG_NULL = 0x0010;
504 constexpr TPM_ALG_ID TPM_ALG_SM3_256 = 0x0012;
505 constexpr TPM_ALG_ID TPM_ALG_SM4 = 0x0013;
506 constexpr TPM_ALG_ID TPM_ALG_RSASSA = 0x0014;
507 constexpr TPM_ALG_ID TPM_ALG_RSAES = 0x0015;
508 constexpr TPM_ALG_ID TPM_ALG_RSAPSS = 0x0016;
509 constexpr TPM_ALG_ID TPM_ALG_OAEP = 0x0017;
510 constexpr TPM_ALG_ID TPM_ALG_ECDSA = 0x0018;
511 constexpr TPM_ALG_ID TPM_ALG_ECDH = 0x0019;
512 constexpr TPM_ALG_ID TPM_ALG_ECDAA = 0x001A;
513 constexpr TPM_ALG_ID TPM_ALG_SM2 = 0x001B;
514 constexpr TPM_ALG_ID TPM_ALG_ECSCHNORR = 0x001C;
515 constexpr TPM_ALG_ID TPM_ALG_ECMQV = 0x001D;
516 constexpr TPM_ALG_ID TPM_ALG_KDF1_SP800_56a = 0x0020;
517 constexpr TPM_ALG_ID TPM_ALG_KDF2 = 0x0021;
518 constexpr TPM_ALG_ID TPM_ALG_KDF1_SP800_108 = 0x0022;
519 constexpr TPM_ALG_ID TPM_ALG_ECC = 0x0023;
520 constexpr TPM_ALG_ID TPM_ALG_SYMCIPHER = 0x0025;
521 constexpr TPM_ALG_ID TPM_ALG_CTR = 0x0040;
522 constexpr TPM_ALG_ID TPM_ALG_OFB = 0x0041;
523 constexpr TPM_ALG_ID TPM_ALG_CBC = 0x0042;
524 constexpr TPM_ALG_ID TPM_ALG_CFB = 0x0043;
525 constexpr TPM_ALG_ID TPM_ALG_ECB = 0x0044;
526 constexpr TPM_ALG_ID TPM_ALG_LAST = 0x0044;
527 constexpr TPM_ECC_CURVE TPM_ECC_NONE = 0x0000;
528 constexpr TPM_ECC_CURVE TPM_ECC_NIST_P192 = 0x0001;
529 constexpr TPM_ECC_CURVE TPM_ECC_NIST_P224 = 0x0002;
530 constexpr TPM_ECC_CURVE TPM_ECC_NIST_P256 = 0x0003;
531 constexpr TPM_ECC_CURVE TPM_ECC_NIST_P384 = 0x0004;
532 constexpr TPM_ECC_CURVE TPM_ECC_NIST_P521 = 0x0005;
533 constexpr TPM_ECC_CURVE TPM_ECC_BN_P256 = 0x0010;
534 constexpr TPM_ECC_CURVE TPM_ECC_BN_P638 = 0x0011;
535 constexpr TPM_ECC_CURVE TPM_ECC_SM2_P256 = 0x0020;
536 constexpr TPM_CC TPM_CC_FIRST = 0x0000011F;
537 constexpr TPM_CC TPM_CC_PP_FIRST = 0x0000011F;
538 constexpr TPM_CC TPM_CC_NV_UndefineSpaceSpecial = 0x0000011F;
539 constexpr TPM_CC TPM_CC_EvictControl = 0x00000120;
540 constexpr TPM_CC TPM_CC_HierarchyControl = 0x00000121;
541 constexpr TPM_CC TPM_CC_NV_UndefineSpace = 0x00000122;
542 constexpr TPM_CC TPM_CC_ChangeEPS = 0x00000124;
543 constexpr TPM_CC TPM_CC_ChangePPS = 0x00000125;
544 constexpr TPM_CC TPM_CC_Clear = 0x00000126;
545 constexpr TPM_CC TPM_CC_ClearControl = 0x00000127;
546 constexpr TPM_CC TPM_CC_ClockSet = 0x00000128;
547 constexpr TPM_CC TPM_CC_HierarchyChangeAuth = 0x00000129;
548 constexpr TPM_CC TPM_CC_NV_DefineSpace = 0x0000012A;
549 constexpr TPM_CC TPM_CC_PCR_Allocate = 0x0000012B;
550 constexpr TPM_CC TPM_CC_PCR_SetAuthPolicy = 0x0000012C;
551 constexpr TPM_CC TPM_CC_PP_Commands = 0x0000012D;
552 constexpr TPM_CC TPM_CC_SetPrimaryPolicy = 0x0000012E;
553 constexpr TPM_CC TPM_CC_FieldUpgradeStart = 0x0000012F;
554 constexpr TPM_CC TPM_CC_ClockRateAdjust = 0x00000130;
555 constexpr TPM_CC TPM_CC_CreatePrimary = 0x00000131;
556 constexpr TPM_CC TPM_CC_NV_GlobalWriteLock = 0x00000132;
557 constexpr TPM_CC TPM_CC_PP_LAST = 0x00000132;
558 constexpr TPM_CC TPM_CC_GetCommandAuditDigest = 0x00000133;
559 constexpr TPM_CC TPM_CC_NV_Increment = 0x00000134;
560 constexpr TPM_CC TPM_CC_NV_SetBits = 0x00000135;
561 constexpr TPM_CC TPM_CC_NV_Extend = 0x00000136;
562 constexpr TPM_CC TPM_CC_NV_Write = 0x00000137;
563 constexpr TPM_CC TPM_CC_NV_WriteLock = 0x00000138;
564 constexpr TPM_CC TPM_CC_DictionaryAttackLockReset = 0x00000139;
565 constexpr TPM_CC TPM_CC_DictionaryAttackParameters = 0x0000013A;
566 constexpr TPM_CC TPM_CC_NV_ChangeAuth = 0x0000013B;
567 constexpr TPM_CC TPM_CC_PCR_Event = 0x0000013C;
568 constexpr TPM_CC TPM_CC_PCR_Reset = 0x0000013D;
569 constexpr TPM_CC TPM_CC_SequenceComplete = 0x0000013E;
570 constexpr TPM_CC TPM_CC_SetAlgorithmSet = 0x0000013F;
571 constexpr TPM_CC TPM_CC_SetCommandCodeAuditStatus = 0x00000140;
572 constexpr TPM_CC TPM_CC_FieldUpgradeData = 0x00000141;
573 constexpr TPM_CC TPM_CC_IncrementalSelfTest = 0x00000142;
574 constexpr TPM_CC TPM_CC_SelfTest = 0x00000143;
575 constexpr TPM_CC TPM_CC_Startup = 0x00000144;
576 constexpr TPM_CC TPM_CC_Shutdown = 0x00000145;
577 constexpr TPM_CC TPM_CC_StirRandom = 0x00000146;
578 constexpr TPM_CC TPM_CC_ActivateCredential = 0x00000147;
579 constexpr TPM_CC TPM_CC_Certify = 0x00000148;
580 constexpr TPM_CC TPM_CC_PolicyNV = 0x00000149;
581 constexpr TPM_CC TPM_CC_CertifyCreation = 0x0000014A;
582 constexpr TPM_CC TPM_CC_Duplicate = 0x0000014B;
583 constexpr TPM_CC TPM_CC_GetTime = 0x0000014C;
584 constexpr TPM_CC TPM_CC_GetSessionAuditDigest = 0x0000014D;
585 constexpr TPM_CC TPM_CC_NV_Read = 0x0000014E;
586 constexpr TPM_CC TPM_CC_NV_ReadLock = 0x0000014F;
587 constexpr TPM_CC TPM_CC_ObjectChangeAuth = 0x00000150;
588 constexpr TPM_CC TPM_CC_PolicySecret = 0x00000151;
589 constexpr TPM_CC TPM_CC_Rewrap = 0x00000152;
590 constexpr TPM_CC TPM_CC_Create = 0x00000153;
591 constexpr TPM_CC TPM_CC_ECDH_ZGen = 0x00000154;
592 constexpr TPM_CC TPM_CC_HMAC = 0x00000155;
593 constexpr TPM_CC TPM_CC_Import = 0x00000156;
594 constexpr TPM_CC TPM_CC_Load = 0x00000157;
595 constexpr TPM_CC TPM_CC_Quote = 0x00000158;
596 constexpr TPM_CC TPM_CC_RSA_Decrypt = 0x00000159;
597 constexpr TPM_CC TPM_CC_HMAC_Start = 0x0000015B;
598 constexpr TPM_CC TPM_CC_SequenceUpdate = 0x0000015C;
599 constexpr TPM_CC TPM_CC_Sign = 0x0000015D;
600 constexpr TPM_CC TPM_CC_Unseal = 0x0000015E;
601 constexpr TPM_CC TPM_CC_PolicySigned = 0x00000160;
602 constexpr TPM_CC TPM_CC_ContextLoad = 0x00000161;
603 constexpr TPM_CC TPM_CC_ContextSave = 0x00000162;
604 constexpr TPM_CC TPM_CC_ECDH_KeyGen = 0x00000163;
605 constexpr TPM_CC TPM_CC_EncryptDecrypt = 0x00000164;
606 constexpr TPM_CC TPM_CC_FlushContext = 0x00000165;
607 constexpr TPM_CC TPM_CC_LoadExternal = 0x00000167;
608 constexpr TPM_CC TPM_CC_MakeCredential = 0x00000168;
609 constexpr TPM_CC TPM_CC_NV_ReadPublic = 0x00000169;
610 constexpr TPM_CC TPM_CC_PolicyAuthorize = 0x0000016A;
611 constexpr TPM_CC TPM_CC_PolicyAuthValue = 0x0000016B;
612 constexpr TPM_CC TPM_CC_PolicyCommandCode = 0x0000016C;
613 constexpr TPM_CC TPM_CC_PolicyCounterTimer = 0x0000016D;
614 constexpr TPM_CC TPM_CC_PolicyCpHash = 0x0000016E;
615 constexpr TPM_CC TPM_CC_PolicyLocality = 0x0000016F;
616 constexpr TPM_CC TPM_CC_PolicyNameHash = 0x00000170;
617 constexpr TPM_CC TPM_CC_PolicyOR = 0x00000171;
618 constexpr TPM_CC TPM_CC_PolicyTicket = 0x00000172;
619 constexpr TPM_CC TPM_CC_ReadPublic = 0x00000173;
620 constexpr TPM_CC TPM_CC_RSA_Encrypt = 0x00000174;
621 constexpr TPM_CC TPM_CC_StartAuthSession = 0x00000176;
622 constexpr TPM_CC TPM_CC_VerifySignature = 0x00000177;
623 constexpr TPM_CC TPM_CC_ECC_Parameters = 0x00000178;
624 constexpr TPM_CC TPM_CC_FirmwareRead = 0x00000179;
625 constexpr TPM_CC TPM_CC_GetCapability = 0x0000017A;
626 constexpr TPM_CC TPM_CC_GetRandom = 0x0000017B;
627 constexpr TPM_CC TPM_CC_GetTestResult = 0x0000017C;
628 constexpr TPM_CC TPM_CC_Hash = 0x0000017D;
629 constexpr TPM_CC TPM_CC_PCR_Read = 0x0000017E;
630 constexpr TPM_CC TPM_CC_PolicyPCR = 0x0000017F;
631 constexpr TPM_CC TPM_CC_PolicyRestart = 0x00000180;
632 constexpr TPM_CC TPM_CC_ReadClock = 0x00000181;
633 constexpr TPM_CC TPM_CC_PCR_Extend = 0x00000182;
634 constexpr TPM_CC TPM_CC_PCR_SetAuthValue = 0x00000183;
635 constexpr TPM_CC TPM_CC_NV_Certify = 0x00000184;
636 constexpr TPM_CC TPM_CC_EventSequenceComplete = 0x00000185;
637 constexpr TPM_CC TPM_CC_HashSequenceStart = 0x00000186;
638 constexpr TPM_CC TPM_CC_PolicyPhysicalPresence = 0x00000187;
639 constexpr TPM_CC TPM_CC_PolicyDuplicationSelect = 0x00000188;
640 constexpr TPM_CC TPM_CC_PolicyGetDigest = 0x00000189;
641 constexpr TPM_CC TPM_CC_TestParms = 0x0000018A;
642 constexpr TPM_CC TPM_CC_Commit = 0x0000018B;
643 constexpr TPM_CC TPM_CC_PolicyPassword = 0x0000018C;
644 constexpr TPM_CC TPM_CC_ZGen_2Phase = 0x0000018D;
645 constexpr TPM_CC TPM_CC_EC_Ephemeral = 0x0000018E;
646 constexpr TPM_CC TPM_CC_PolicyNvWritten = 0x0000018F;
647 constexpr TPM_CC TPM_CC_LAST = 0x0000018F;
648 constexpr TPM_RC TPM_RC_SUCCESS = 0x000;
649 constexpr TPM_RC TPM_RC_BAD_TAG = 0x01E;
650 constexpr TPM_RC RC_VER1 = 0x100;
651 constexpr TPM_RC TPM_RC_INITIALIZE = RC_VER1 + 0x000;
652 constexpr TPM_RC TPM_RC_FAILURE = RC_VER1 + 0x001;
653 constexpr TPM_RC TPM_RC_SEQUENCE = RC_VER1 + 0x003;
654 constexpr TPM_RC TPM_RC_PRIVATE = RC_VER1 + 0x00B;
655 constexpr TPM_RC TPM_RC_HMAC = RC_VER1 + 0x019;
656 constexpr TPM_RC TPM_RC_DISABLED = RC_VER1 + 0x020;
657 constexpr TPM_RC TPM_RC_EXCLUSIVE = RC_VER1 + 0x021;
658 constexpr TPM_RC TPM_RC_AUTH_TYPE = RC_VER1 + 0x024;
659 constexpr TPM_RC TPM_RC_AUTH_MISSING = RC_VER1 + 0x025;
660 constexpr TPM_RC TPM_RC_POLICY = RC_VER1 + 0x026;
661 constexpr TPM_RC TPM_RC_PCR = RC_VER1 + 0x027;
662 constexpr TPM_RC TPM_RC_PCR_CHANGED = RC_VER1 + 0x028;
663 constexpr TPM_RC TPM_RC_UPGRADE = RC_VER1 + 0x02D;
664 constexpr TPM_RC TPM_RC_TOO_MANY_CONTEXTS = RC_VER1 + 0x02E;
665 constexpr TPM_RC TPM_RC_AUTH_UNAVAILABLE = RC_VER1 + 0x02F;
666 constexpr TPM_RC TPM_RC_REBOOT = RC_VER1 + 0x030;
667 constexpr TPM_RC TPM_RC_UNBALANCED = RC_VER1 + 0x031;
668 constexpr TPM_RC TPM_RC_COMMAND_SIZE = RC_VER1 + 0x042;
669 constexpr TPM_RC TPM_RC_COMMAND_CODE = RC_VER1 + 0x043;
670 constexpr TPM_RC TPM_RC_AUTHSIZE = RC_VER1 + 0x044;
671 constexpr TPM_RC TPM_RC_AUTH_CONTEXT = RC_VER1 + 0x045;
672 constexpr TPM_RC TPM_RC_NV_RANGE = RC_VER1 + 0x046;
673 constexpr TPM_RC TPM_RC_NV_SIZE = RC_VER1 + 0x047;
674 constexpr TPM_RC TPM_RC_NV_LOCKED = RC_VER1 + 0x048;
675 constexpr TPM_RC TPM_RC_NV_AUTHORIZATION = RC_VER1 + 0x049;
676 constexpr TPM_RC TPM_RC_NV_UNINITIALIZED = RC_VER1 + 0x04A;
677 constexpr TPM_RC TPM_RC_NV_SPACE = RC_VER1 + 0x04B;
678 constexpr TPM_RC TPM_RC_NV_DEFINED = RC_VER1 + 0x04C;
679 constexpr TPM_RC TPM_RC_BAD_CONTEXT = RC_VER1 + 0x050;
680 constexpr TPM_RC TPM_RC_CPHASH = RC_VER1 + 0x051;
681 constexpr TPM_RC TPM_RC_PARENT = RC_VER1 + 0x052;
682 constexpr TPM_RC TPM_RC_NEEDS_TEST = RC_VER1 + 0x053;
683 constexpr TPM_RC TPM_RC_NO_RESULT = RC_VER1 + 0x054;
684 constexpr TPM_RC TPM_RC_SENSITIVE = RC_VER1 + 0x055;
685 constexpr TPM_RC RC_MAX_FM0 = RC_VER1 + 0x07F;
686 constexpr TPM_RC RC_FMT1 = 0x080;
687 constexpr TPM_RC TPM_RC_ASYMMETRIC = RC_FMT1 + 0x001;
688 constexpr TPM_RC TPM_RC_ATTRIBUTES = RC_FMT1 + 0x002;
689 constexpr TPM_RC TPM_RC_HASH = RC_FMT1 + 0x003;
690 constexpr TPM_RC TPM_RC_VALUE = RC_FMT1 + 0x004;
691 constexpr TPM_RC TPM_RC_HIERARCHY = RC_FMT1 + 0x005;
692 constexpr TPM_RC TPM_RC_KEY_SIZE = RC_FMT1 + 0x007;
693 constexpr TPM_RC TPM_RC_MGF = RC_FMT1 + 0x008;
694 constexpr TPM_RC TPM_RC_MODE = RC_FMT1 + 0x009;
695 constexpr TPM_RC TPM_RC_TYPE = RC_FMT1 + 0x00A;
696 constexpr TPM_RC TPM_RC_HANDLE = RC_FMT1 + 0x00B;
697 constexpr TPM_RC TPM_RC_KDF = RC_FMT1 + 0x00C;
698 constexpr TPM_RC TPM_RC_RANGE = RC_FMT1 + 0x00D;
699 constexpr TPM_RC TPM_RC_AUTH_FAIL = RC_FMT1 + 0x00E;
700 constexpr TPM_RC TPM_RC_NONCE = RC_FMT1 + 0x00F;
701 constexpr TPM_RC TPM_RC_PP = RC_FMT1 + 0x010;
702 constexpr TPM_RC TPM_RC_SCHEME = RC_FMT1 + 0x012;
703 constexpr TPM_RC TPM_RC_SIZE = RC_FMT1 + 0x015;
704 constexpr TPM_RC TPM_RC_SYMMETRIC = RC_FMT1 + 0x016;
705 constexpr TPM_RC TPM_RC_TAG = RC_FMT1 + 0x017;
706 constexpr TPM_RC TPM_RC_SELECTOR = RC_FMT1 + 0x018;
707 constexpr TPM_RC TPM_RC_INSUFFICIENT = RC_FMT1 + 0x01A;
708 constexpr TPM_RC TPM_RC_SIGNATURE = RC_FMT1 + 0x01B;
709 constexpr TPM_RC TPM_RC_KEY = RC_FMT1 + 0x01C;
710 constexpr TPM_RC TPM_RC_POLICY_FAIL = RC_FMT1 + 0x01D;
711 constexpr TPM_RC TPM_RC_INTEGRITY = RC_FMT1 + 0x01F;
712 constexpr TPM_RC TPM_RC_TICKET = RC_FMT1 + 0x020;
713 constexpr TPM_RC TPM_RC_RESERVED_BITS = RC_FMT1 + 0x021;
714 constexpr TPM_RC TPM_RC_BAD_AUTH = RC_FMT1 + 0x022;
715 constexpr TPM_RC TPM_RC_EXPIRED = RC_FMT1 + 0x023;
716 constexpr TPM_RC TPM_RC_POLICY_CC = RC_FMT1 + 0x024;
717 constexpr TPM_RC TPM_RC_BINDING = RC_FMT1 + 0x025;
718 constexpr TPM_RC TPM_RC_CURVE = RC_FMT1 + 0x026;
719 constexpr TPM_RC TPM_RC_ECC_POINT = RC_FMT1 + 0x027;
720 constexpr TPM_RC RC_WARN = 0x900;
721 constexpr TPM_RC TPM_RC_CONTEXT_GAP = RC_WARN + 0x001;
722 constexpr TPM_RC TPM_RC_OBJECT_MEMORY = RC_WARN + 0x002;
723 constexpr TPM_RC TPM_RC_SESSION_MEMORY = RC_WARN + 0x003;
724 constexpr TPM_RC TPM_RC_MEMORY = RC_WARN + 0x004;
725 constexpr TPM_RC TPM_RC_SESSION_HANDLES = RC_WARN + 0x005;
726 constexpr TPM_RC TPM_RC_OBJECT_HANDLES = RC_WARN + 0x006;
727 constexpr TPM_RC TPM_RC_LOCALITY = RC_WARN + 0x007;
728 constexpr TPM_RC TPM_RC_YIELDED = RC_WARN + 0x008;
729 constexpr TPM_RC TPM_RC_CANCELED = RC_WARN + 0x009;
730 constexpr TPM_RC TPM_RC_TESTING = RC_WARN + 0x00A;
731 constexpr TPM_RC TPM_RC_REFERENCE_H0 = RC_WARN + 0x010;
732 constexpr TPM_RC TPM_RC_REFERENCE_H1 = RC_WARN + 0x011;
733 constexpr TPM_RC TPM_RC_REFERENCE_H2 = RC_WARN + 0x012;
734 constexpr TPM_RC TPM_RC_REFERENCE_H3 = RC_WARN + 0x013;
735 constexpr TPM_RC TPM_RC_REFERENCE_H4 = RC_WARN + 0x014;
736 constexpr TPM_RC TPM_RC_REFERENCE_H5 = RC_WARN + 0x015;
737 constexpr TPM_RC TPM_RC_REFERENCE_H6 = RC_WARN + 0x016;
738 constexpr TPM_RC TPM_RC_REFERENCE_S0 = RC_WARN + 0x018;
739 constexpr TPM_RC TPM_RC_REFERENCE_S1 = RC_WARN + 0x019;
740 constexpr TPM_RC TPM_RC_REFERENCE_S2 = RC_WARN + 0x01A;
741 constexpr TPM_RC TPM_RC_REFERENCE_S3 = RC_WARN + 0x01B;
742 constexpr TPM_RC TPM_RC_REFERENCE_S4 = RC_WARN + 0x01C;
743 constexpr TPM_RC TPM_RC_REFERENCE_S5 = RC_WARN + 0x01D;
744 constexpr TPM_RC TPM_RC_REFERENCE_S6 = RC_WARN + 0x01E;
745 constexpr TPM_RC TPM_RC_NV_RATE = RC_WARN + 0x020;
746 constexpr TPM_RC TPM_RC_LOCKOUT = RC_WARN + 0x021;
747 constexpr TPM_RC TPM_RC_RETRY = RC_WARN + 0x022;
748 constexpr TPM_RC TPM_RC_NV_UNAVAILABLE = RC_WARN + 0x023;
749 constexpr TPM_RC TPM_RC_NOT_USED = RC_WARN + 0x7F;
750 constexpr TPM_RC TPM_RC_H = 0x000;
751 constexpr TPM_RC TPM_RC_P = 0x040;
752 constexpr TPM_RC TPM_RC_S = 0x800;
753 constexpr TPM_RC TPM_RC_1 = 0x100;
754 constexpr TPM_RC TPM_RC_2 = 0x200;
755 constexpr TPM_RC TPM_RC_3 = 0x300;
756 constexpr TPM_RC TPM_RC_4 = 0x400;
757 constexpr TPM_RC TPM_RC_5 = 0x500;
758 constexpr TPM_RC TPM_RC_6 = 0x600;
759 constexpr TPM_RC TPM_RC_7 = 0x700;
760 constexpr TPM_RC TPM_RC_8 = 0x800;
761 constexpr TPM_RC TPM_RC_9 = 0x900;
762 constexpr TPM_RC TPM_RC_A = 0xA00;
763 constexpr TPM_RC TPM_RC_B = 0xB00;
764 constexpr TPM_RC TPM_RC_C = 0xC00;
765 constexpr TPM_RC TPM_RC_D = 0xD00;
766 constexpr TPM_RC TPM_RC_E = 0xE00;
767 constexpr TPM_RC TPM_RC_F = 0xF00;
768 constexpr TPM_RC TPM_RC_N_MASK = 0xF00;
769 constexpr TPM_CLOCK_ADJUST TPM_CLOCK_COARSE_SLOWER = -3;
770 constexpr TPM_CLOCK_ADJUST TPM_CLOCK_MEDIUM_SLOWER = -2;
771 constexpr TPM_CLOCK_ADJUST TPM_CLOCK_FINE_SLOWER = -1;
772 constexpr TPM_CLOCK_ADJUST TPM_CLOCK_NO_CHANGE = 0;
773 constexpr TPM_CLOCK_ADJUST TPM_CLOCK_FINE_FASTER = 1;
774 constexpr TPM_CLOCK_ADJUST TPM_CLOCK_MEDIUM_FASTER = 2;
775 constexpr TPM_CLOCK_ADJUST TPM_CLOCK_COARSE_FASTER = 3;
776 constexpr TPM_EO TPM_EO_EQ = 0x0000;
777 constexpr TPM_EO TPM_EO_NEQ = 0x0001;
778 constexpr TPM_EO TPM_EO_SIGNED_GT = 0x0002;
779 constexpr TPM_EO TPM_EO_UNSIGNED_GT = 0x0003;
780 constexpr TPM_EO TPM_EO_SIGNED_LT = 0x0004;
781 constexpr TPM_EO TPM_EO_UNSIGNED_LT = 0x0005;
782 constexpr TPM_EO TPM_EO_SIGNED_GE = 0x0006;
783 constexpr TPM_EO TPM_EO_UNSIGNED_GE = 0x0007;
784 constexpr TPM_EO TPM_EO_SIGNED_LE = 0x0008;
785 constexpr TPM_EO TPM_EO_UNSIGNED_LE = 0x0009;
786 constexpr TPM_EO TPM_EO_BITSET = 0x000A;
787 constexpr TPM_EO TPM_EO_BITCLEAR = 0x000B;
788 constexpr TPM_ST TPM_ST_RSP_COMMAND = 0x00C4;
789 constexpr TPM_ST TPM_ST_NULL = 0X8000;
790 constexpr TPM_ST TPM_ST_NO_SESSIONS = 0x8001;
791 constexpr TPM_ST TPM_ST_SESSIONS = 0x8002;
792 constexpr TPM_ST TPM_ST_ATTEST_NV = 0x8014;
793 constexpr TPM_ST TPM_ST_ATTEST_COMMAND_AUDIT = 0x8015;
794 constexpr TPM_ST TPM_ST_ATTEST_SESSION_AUDIT = 0x8016;
795 constexpr TPM_ST TPM_ST_ATTEST_CERTIFY = 0x8017;
796 constexpr TPM_ST TPM_ST_ATTEST_QUOTE = 0x8018;
797 constexpr TPM_ST TPM_ST_ATTEST_TIME = 0x8019;
798 constexpr TPM_ST TPM_ST_ATTEST_CREATION = 0x801A;
799 constexpr TPM_ST TPM_ST_CREATION = 0x8021;
800 constexpr TPM_ST TPM_ST_VERIFIED = 0x8022;
801 constexpr TPM_ST TPM_ST_AUTH_SECRET = 0x8023;
802 constexpr TPM_ST TPM_ST_HASHCHECK = 0x8024;
803 constexpr TPM_ST TPM_ST_AUTH_SIGNED = 0x8025;
804 constexpr TPM_ST TPM_ST_FU_MANIFEST = 0x8029;
805 constexpr TPM_SU TPM_SU_CLEAR = 0x0000;
806 constexpr TPM_SU TPM_SU_STATE = 0x0001;
807 constexpr TPM_SE TPM_SE_HMAC = 0x00;
808 constexpr TPM_SE TPM_SE_POLICY = 0x01;
809 constexpr TPM_SE TPM_SE_TRIAL = 0x03;
810 constexpr TPM_CAP TPM_CAP_FIRST = 0x00000000;
811 constexpr TPM_CAP TPM_CAP_ALGS = 0x00000000;
812 constexpr TPM_CAP TPM_CAP_HANDLES = 0x00000001;
813 constexpr TPM_CAP TPM_CAP_COMMANDS = 0x00000002;
814 constexpr TPM_CAP TPM_CAP_PP_COMMANDS = 0x00000003;
815 constexpr TPM_CAP TPM_CAP_AUDIT_COMMANDS = 0x00000004;
816 constexpr TPM_CAP TPM_CAP_PCRS = 0x00000005;
817 constexpr TPM_CAP TPM_CAP_TPM_PROPERTIES = 0x00000006;
818 constexpr TPM_CAP TPM_CAP_PCR_PROPERTIES = 0x00000007;
819 constexpr TPM_CAP TPM_CAP_ECC_CURVES = 0x00000008;
820 constexpr TPM_CAP TPM_CAP_LAST = 0x00000008;
821 constexpr TPM_CAP TPM_CAP_VENDOR_PROPERTY = 0x00000100;
822 constexpr TPM_PT TPM_PT_NONE = 0x00000000;
823 constexpr TPM_PT PT_GROUP = 0x00000100;
824 constexpr TPM_PT PT_FIXED = PT_GROUP * 1;
825 constexpr TPM_PT TPM_PT_FAMILY_INDICATOR = PT_FIXED + 0;
826 constexpr TPM_PT TPM_PT_LEVEL = PT_FIXED + 1;
827 constexpr TPM_PT TPM_PT_REVISION = PT_FIXED + 2;
828 constexpr TPM_PT TPM_PT_DAY_OF_YEAR = PT_FIXED + 3;
829 constexpr TPM_PT TPM_PT_YEAR = PT_FIXED + 4;
830 constexpr TPM_PT TPM_PT_MANUFACTURER = PT_FIXED + 5;
831 constexpr TPM_PT TPM_PT_VENDOR_STRING_1 = PT_FIXED + 6;
832 constexpr TPM_PT TPM_PT_VENDOR_STRING_2 = PT_FIXED + 7;
833 constexpr TPM_PT TPM_PT_VENDOR_STRING_3 = PT_FIXED + 8;
834 constexpr TPM_PT TPM_PT_VENDOR_STRING_4 = PT_FIXED + 9;
835 constexpr TPM_PT TPM_PT_VENDOR_TPM_TYPE = PT_FIXED + 10;
836 constexpr TPM_PT TPM_PT_FIRMWARE_VERSION_1 = PT_FIXED + 11;
837 constexpr TPM_PT TPM_PT_FIRMWARE_VERSION_2 = PT_FIXED + 12;
838 constexpr TPM_PT TPM_PT_INPUT_BUFFER = PT_FIXED + 13;
839 constexpr TPM_PT TPM_PT_HR_TRANSIENT_MIN = PT_FIXED + 14;
840 constexpr TPM_PT TPM_PT_HR_PERSISTENT_MIN = PT_FIXED + 15;
841 constexpr TPM_PT TPM_PT_HR_LOADED_MIN = PT_FIXED + 16;
842 constexpr TPM_PT TPM_PT_ACTIVE_SESSIONS_MAX = PT_FIXED + 17;
843 constexpr TPM_PT TPM_PT_PCR_COUNT = PT_FIXED + 18;
844 constexpr TPM_PT TPM_PT_PCR_SELECT_MIN = PT_FIXED + 19;
845 constexpr TPM_PT TPM_PT_CONTEXT_GAP_MAX = PT_FIXED + 20;
846 constexpr TPM_PT TPM_PT_NV_COUNTERS_MAX = PT_FIXED + 22;
847 constexpr TPM_PT TPM_PT_NV_INDEX_MAX = PT_FIXED + 23;
848 constexpr TPM_PT TPM_PT_MEMORY = PT_FIXED + 24;
849 constexpr TPM_PT TPM_PT_CLOCK_UPDATE = PT_FIXED + 25;
850 constexpr TPM_PT TPM_PT_CONTEXT_HASH = PT_FIXED + 26;
851 constexpr TPM_PT TPM_PT_CONTEXT_SYM = PT_FIXED + 27;
852 constexpr TPM_PT TPM_PT_CONTEXT_SYM_SIZE = PT_FIXED + 28;
853 constexpr TPM_PT TPM_PT_ORDERLY_COUNT = PT_FIXED + 29;
854 constexpr TPM_PT TPM_PT_MAX_COMMAND_SIZE = PT_FIXED + 30;
855 constexpr TPM_PT TPM_PT_MAX_RESPONSE_SIZE = PT_FIXED + 31;
856 constexpr TPM_PT TPM_PT_MAX_DIGEST = PT_FIXED + 32;
857 constexpr TPM_PT TPM_PT_MAX_OBJECT_CONTEXT = PT_FIXED + 33;
858 constexpr TPM_PT TPM_PT_MAX_SESSION_CONTEXT = PT_FIXED + 34;
859 constexpr TPM_PT TPM_PT_PS_FAMILY_INDICATOR = PT_FIXED + 35;
860 constexpr TPM_PT TPM_PT_PS_LEVEL = PT_FIXED + 36;
861 constexpr TPM_PT TPM_PT_PS_REVISION = PT_FIXED + 37;
862 constexpr TPM_PT TPM_PT_PS_DAY_OF_YEAR = PT_FIXED + 38;
863 constexpr TPM_PT TPM_PT_PS_YEAR = PT_FIXED + 39;
864 constexpr TPM_PT TPM_PT_SPLIT_MAX = PT_FIXED + 40;
865 constexpr TPM_PT TPM_PT_TOTAL_COMMANDS = PT_FIXED + 41;
866 constexpr TPM_PT TPM_PT_LIBRARY_COMMANDS = PT_FIXED + 42;
867 constexpr TPM_PT TPM_PT_VENDOR_COMMANDS = PT_FIXED + 43;
868 constexpr TPM_PT TPM_PT_NV_BUFFER_MAX = PT_FIXED + 44;
869 constexpr TPM_PT PT_VAR = PT_GROUP * 2;
870 constexpr TPM_PT TPM_PT_PERMANENT = PT_VAR + 0;
871 constexpr TPM_PT TPM_PT_STARTUP_CLEAR = PT_VAR + 1;
872 constexpr TPM_PT TPM_PT_HR_NV_INDEX = PT_VAR + 2;
873 constexpr TPM_PT TPM_PT_HR_LOADED = PT_VAR + 3;
874 constexpr TPM_PT TPM_PT_HR_LOADED_AVAIL = PT_VAR + 4;
875 constexpr TPM_PT TPM_PT_HR_ACTIVE = PT_VAR + 5;
876 constexpr TPM_PT TPM_PT_HR_ACTIVE_AVAIL = PT_VAR + 6;
877 constexpr TPM_PT TPM_PT_HR_TRANSIENT_AVAIL = PT_VAR + 7;
878 constexpr TPM_PT TPM_PT_HR_PERSISTENT = PT_VAR + 8;
879 constexpr TPM_PT TPM_PT_HR_PERSISTENT_AVAIL = PT_VAR + 9;
880 constexpr TPM_PT TPM_PT_NV_COUNTERS = PT_VAR + 10;
881 constexpr TPM_PT TPM_PT_NV_COUNTERS_AVAIL = PT_VAR + 11;
882 constexpr TPM_PT TPM_PT_ALGORITHM_SET = PT_VAR + 12;
883 constexpr TPM_PT TPM_PT_LOADED_CURVES = PT_VAR + 13;
884 constexpr TPM_PT TPM_PT_LOCKOUT_COUNTER = PT_VAR + 14;
885 constexpr TPM_PT TPM_PT_MAX_AUTH_FAIL = PT_VAR + 15;
886 constexpr TPM_PT TPM_PT_LOCKOUT_INTERVAL = PT_VAR + 16;
887 constexpr TPM_PT TPM_PT_LOCKOUT_RECOVERY = PT_VAR + 17;
888 constexpr TPM_PT TPM_PT_NV_WRITE_RECOVERY = PT_VAR + 18;
889 constexpr TPM_PT TPM_PT_AUDIT_COUNTER_0 = PT_VAR + 19;
890 constexpr TPM_PT TPM_PT_AUDIT_COUNTER_1 = PT_VAR + 20;
891 constexpr TPM_PT_PCR TPM_PT_PCR_FIRST = 0x00000000;
892 constexpr TPM_PT_PCR TPM_PT_PCR_SAVE = 0x00000000;
893 constexpr TPM_PT_PCR TPM_PT_PCR_EXTEND_L0 = 0x00000001;
894 constexpr TPM_PT_PCR TPM_PT_PCR_RESET_L0 = 0x00000002;
895 constexpr TPM_PT_PCR TPM_PT_PCR_EXTEND_L1 = 0x00000003;
896 constexpr TPM_PT_PCR TPM_PT_PCR_RESET_L1 = 0x00000004;
897 constexpr TPM_PT_PCR TPM_PT_PCR_EXTEND_L2 = 0x00000005;
898 constexpr TPM_PT_PCR TPM_PT_PCR_RESET_L2 = 0x00000006;
899 constexpr TPM_PT_PCR TPM_PT_PCR_EXTEND_L3 = 0x00000007;
900 constexpr TPM_PT_PCR TPM_PT_PCR_RESET_L3 = 0x00000008;
901 constexpr TPM_PT_PCR TPM_PT_PCR_EXTEND_L4 = 0x00000009;
902 constexpr TPM_PT_PCR TPM_PT_PCR_RESET_L4 = 0x0000000A;
903 constexpr TPM_PT_PCR TPM_PT_PCR_NO_INCREMENT = 0x00000011;
904 constexpr TPM_PT_PCR TPM_PT_PCR_DRTM_RESET = 0x00000012;
905 constexpr TPM_PT_PCR TPM_PT_PCR_POLICY = 0x00000013;
906 constexpr TPM_PT_PCR TPM_PT_PCR_AUTH = 0x00000014;
907 constexpr TPM_PT_PCR TPM_PT_PCR_LAST = 0x00000014;
908 constexpr TPM_PS TPM_PS_MAIN = 0x00000000;
909 constexpr TPM_PS TPM_PS_PC = 0x00000001;
910 constexpr TPM_PS TPM_PS_PDA = 0x00000002;
911 constexpr TPM_PS TPM_PS_CELL_PHONE = 0x00000003;
912 constexpr TPM_PS TPM_PS_SERVER = 0x00000004;
913 constexpr TPM_PS TPM_PS_PERIPHERAL = 0x00000005;
914 constexpr TPM_PS TPM_PS_TSS = 0x00000006;
915 constexpr TPM_PS TPM_PS_STORAGE = 0x00000007;
916 constexpr TPM_PS TPM_PS_AUTHENTICATION = 0x00000008;
917 constexpr TPM_PS TPM_PS_EMBEDDED = 0x00000009;
918 constexpr TPM_PS TPM_PS_HARDCOPY = 0x0000000A;
919 constexpr TPM_PS TPM_PS_INFRASTRUCTURE = 0x0000000B;
920 constexpr TPM_PS TPM_PS_VIRTUALIZATION = 0x0000000C;
921 constexpr TPM_PS TPM_PS_TNC = 0x0000000D;
922 constexpr TPM_PS TPM_PS_MULTI_TENANT = 0x0000000E;
923 constexpr TPM_PS TPM_PS_TC = 0x0000000F;
924 constexpr TPM_HT TPM_HT_PCR = 0x00;
925 constexpr TPM_HT TPM_HT_NV_INDEX = 0x01;
926 constexpr TPM_HT TPM_HT_HMAC_SESSION = 0x02;
927 constexpr TPM_HT TPM_HT_LOADED_SESSION = 0x02;
928 constexpr TPM_HT TPM_HT_POLICY_SESSION = 0x03;
929 constexpr TPM_HT TPM_HT_ACTIVE_SESSION = 0x03;
930 constexpr TPM_HT TPM_HT_PERMANENT = 0x40;
931 constexpr TPM_HT TPM_HT_TRANSIENT = 0x80;
932 constexpr TPM_HT TPM_HT_PERSISTENT = 0x81;
933 constexpr TPM_RH TPM_RH_FIRST = 0x40000000;
934 constexpr TPM_RH TPM_RH_SRK = 0x40000000;
935 constexpr TPM_RH TPM_RH_OWNER = 0x40000001;
936 constexpr TPM_RH TPM_RH_REVOKE = 0x40000002;
937 constexpr TPM_RH TPM_RH_TRANSPORT = 0x40000003;
938 constexpr TPM_RH TPM_RH_OPERATOR = 0x40000004;
939 constexpr TPM_RH TPM_RH_ADMIN = 0x40000005;
940 constexpr TPM_RH TPM_RH_EK = 0x40000006;
941 constexpr TPM_RH TPM_RH_NULL = 0x40000007;
942 constexpr TPM_RH TPM_RH_UNASSIGNED = 0x40000008;
943 constexpr TPM_RH TPM_RS_PW = 0x40000009;
944 constexpr TPM_RH TPM_RH_LOCKOUT = 0x4000000A;
945 constexpr TPM_RH TPM_RH_ENDORSEMENT = 0x4000000B;
946 constexpr TPM_RH TPM_RH_PLATFORM = 0x4000000C;
947 constexpr TPM_RH TPM_RH_PLATFORM_NV = 0x4000000D;
948 constexpr TPM_RH TPM_RH_LAST = 0x4000000D;
949 constexpr TPM_HC HR_HANDLE_MASK = 0x00FFFFFF;
950 constexpr TPM_HC HR_RANGE_MASK = 0xFF000000;
951 constexpr TPM_HC HR_SHIFT = 24;
952 constexpr TPM_HC HR_PCR = (TPM_HT_PCR << HR_SHIFT);
953 constexpr TPM_HC HR_HMAC_SESSION = (TPM_HT_HMAC_SESSION << HR_SHIFT);
954 constexpr TPM_HC HR_POLICY_SESSION = (TPM_HT_POLICY_SESSION << HR_SHIFT);
955 constexpr TPM_HC HR_TRANSIENT = (TPM_HT_TRANSIENT << HR_SHIFT);
956 constexpr TPM_HC HR_PERSISTENT = (TPM_HT_PERSISTENT << HR_SHIFT);
957 constexpr TPM_HC HR_NV_INDEX = (TPM_HT_NV_INDEX << HR_SHIFT);
958 constexpr TPM_HC HR_PERMANENT = (TPM_HT_PERMANENT << HR_SHIFT);
959 constexpr TPM_HC PCR_FIRST = (HR_PCR + 0);
960 constexpr TPM_HC PCR_LAST = (PCR_FIRST + IMPLEMENTATION_PCR - 1);
961 constexpr TPM_HC HMAC_SESSION_FIRST = (HR_HMAC_SESSION + 0);
962 constexpr TPM_HC HMAC_SESSION_LAST =
963     (HMAC_SESSION_FIRST + MAX_ACTIVE_SESSIONS - 1);
964 constexpr TPM_HC LOADED_SESSION_LAST = HMAC_SESSION_LAST;
965 constexpr TPM_HC POLICY_SESSION_FIRST = (HR_POLICY_SESSION + 0);
966 constexpr TPM_HC POLICY_SESSION_LAST =
967     (POLICY_SESSION_FIRST + MAX_ACTIVE_SESSIONS - 1);
968 constexpr TPM_HC TRANSIENT_FIRST = (HR_TRANSIENT + 0);
969 constexpr TPM_HC ACTIVE_SESSION_FIRST = POLICY_SESSION_FIRST;
970 constexpr TPM_HC ACTIVE_SESSION_LAST = POLICY_SESSION_LAST;
971 constexpr TPM_HC TRANSIENT_LAST = (TRANSIENT_FIRST + MAX_LOADED_OBJECTS - 1);
972 constexpr TPM_HC PERSISTENT_FIRST = (HR_PERSISTENT + 0);
973 constexpr TPM_HC PERSISTENT_LAST = (PERSISTENT_FIRST + 0x00FFFFFF);
974 constexpr TPM_HC PLATFORM_PERSISTENT = (PERSISTENT_FIRST + 0x00800000);
975 constexpr TPM_HC NV_INDEX_FIRST = (HR_NV_INDEX + 0);
976 constexpr TPM_HC NV_INDEX_LAST = (NV_INDEX_FIRST + 0x00FFFFFF);
977 constexpr TPM_HC PERMANENT_FIRST = TPM_RH_FIRST;
978 constexpr TPM_HC PERMANENT_LAST = TPM_RH_LAST;
979 
980 struct TPMS_ALGORITHM_DESCRIPTION {
981   TPM_ALG_ID alg;
982   TPMA_ALGORITHM attributes;
983 };
984 
985 union TPMU_HA {
986   BYTE sha1[SHA1_DIGEST_SIZE];
987   BYTE sha256[SHA256_DIGEST_SIZE];
988   BYTE sm3_256[SM3_256_DIGEST_SIZE];
989   BYTE sha384[SHA384_DIGEST_SIZE];
990   BYTE sha512[SHA512_DIGEST_SIZE];
991 };
992 
993 struct TPMT_HA {
994   TPMI_ALG_HASH hash_alg;
995   TPMU_HA digest;
996 };
997 
998 struct TPM2B_DIGEST {
999   UINT16 size;
1000   BYTE buffer[sizeof(TPMU_HA)];
1001 };
1002 
1003 struct TPM2B_DATA {
1004   UINT16 size;
1005   BYTE buffer[sizeof(TPMT_HA)];
1006 };
1007 
1008 struct TPM2B_EVENT {
1009   UINT16 size;
1010   BYTE buffer[1024];
1011 };
1012 
1013 struct TPM2B_MAX_BUFFER {
1014   UINT16 size;
1015   BYTE buffer[MAX_DIGEST_BUFFER];
1016 };
1017 
1018 struct TPM2B_MAX_NV_BUFFER {
1019   UINT16 size;
1020   BYTE buffer[MAX_NV_BUFFER_SIZE];
1021 };
1022 
1023 struct TPM2B_TIMEOUT {
1024   UINT16 size;
1025   BYTE buffer[sizeof(UINT64)];
1026 };
1027 
1028 struct TPM2B_IV {
1029   UINT16 size;
1030   BYTE buffer[MAX_SYM_BLOCK_SIZE];
1031 };
1032 
1033 union TPMU_NAME {
1034   TPMT_HA digest;
1035   TPM_HANDLE handle;
1036 };
1037 
1038 struct TPM2B_NAME {
1039   UINT16 size;
1040   BYTE name[sizeof(TPMU_NAME)];
1041 };
1042 
1043 struct TPMS_PCR_SELECT {
1044   UINT8 sizeof_select;
1045   BYTE pcr_select[PCR_SELECT_MAX];
1046 };
1047 
1048 struct TPMS_PCR_SELECTION {
1049   TPMI_ALG_HASH hash;
1050   UINT8 sizeof_select;
1051   BYTE pcr_select[PCR_SELECT_MAX];
1052 };
1053 
1054 struct TPMT_TK_CREATION {
1055   TPM_ST tag;
1056   TPMI_RH_HIERARCHY hierarchy;
1057   TPM2B_DIGEST digest;
1058 };
1059 
1060 struct TPMT_TK_VERIFIED {
1061   TPM_ST tag;
1062   TPMI_RH_HIERARCHY hierarchy;
1063   TPM2B_DIGEST digest;
1064 };
1065 
1066 struct TPMT_TK_AUTH {
1067   TPMI_RH_HIERARCHY hierarchy;
1068   TPM2B_DIGEST digest;
1069 };
1070 
1071 struct TPMT_TK_HASHCHECK {
1072   TPM_ST tag;
1073   TPMI_RH_HIERARCHY hierarchy;
1074   TPM2B_DIGEST digest;
1075 };
1076 
1077 struct TPMS_ALG_PROPERTY {
1078   TPM_ALG_ID alg;
1079   TPMA_ALGORITHM alg_properties;
1080 };
1081 
1082 struct TPMS_TAGGED_PROPERTY {
1083   TPM_PT property;
1084   UINT32 value;
1085 };
1086 
1087 struct TPMS_TAGGED_PCR_SELECT {
1088   TPM_PT tag;
1089   UINT8 sizeof_select;
1090   BYTE pcr_select[PCR_SELECT_MAX];
1091 };
1092 
1093 struct TPML_CC {
1094   UINT32 count;
1095   TPM_CC command_codes[MAX_CAP_CC];
1096 };
1097 
1098 struct TPML_CCA {
1099   UINT32 count;
1100   TPMA_CC command_attributes[MAX_CAP_CC];
1101 };
1102 
1103 struct TPML_ALG {
1104   UINT32 count;
1105   TPM_ALG_ID algorithms[MAX_ALG_LIST_SIZE];
1106 };
1107 
1108 struct TPML_HANDLE {
1109   UINT32 count;
1110   TPM_HANDLE handle[MAX_CAP_HANDLES];
1111 };
1112 
1113 struct TPML_DIGEST {
1114   UINT32 count;
1115   TPM2B_DIGEST digests[8];
1116 };
1117 
1118 struct TPML_DIGEST_VALUES {
1119   UINT32 count;
1120   TPMT_HA digests[HASH_COUNT];
1121 };
1122 
1123 struct TPM2B_DIGEST_VALUES {
1124   UINT16 size;
1125   BYTE buffer[sizeof(TPML_DIGEST_VALUES)];
1126 };
1127 
1128 struct TPML_PCR_SELECTION {
1129   UINT32 count;
1130   TPMS_PCR_SELECTION pcr_selections[HASH_COUNT];
1131 };
1132 
1133 struct TPML_ALG_PROPERTY {
1134   UINT32 count;
1135   TPMS_ALG_PROPERTY alg_properties[MAX_CAP_ALGS];
1136 };
1137 
1138 struct TPML_TAGGED_TPM_PROPERTY {
1139   UINT32 count;
1140   TPMS_TAGGED_PROPERTY tpm_property[MAX_TPM_PROPERTIES];
1141 };
1142 
1143 struct TPML_TAGGED_PCR_PROPERTY {
1144   UINT32 count;
1145   TPMS_TAGGED_PCR_SELECT pcr_property[MAX_PCR_PROPERTIES];
1146 };
1147 
1148 struct TPML_ECC_CURVE {
1149   UINT32 count;
1150   TPM_ECC_CURVE ecc_curves[MAX_ECC_CURVES];
1151 };
1152 
1153 union TPMU_CAPABILITIES {
1154   TPML_ALG_PROPERTY algorithms;
1155   TPML_HANDLE handles;
1156   TPML_CCA command;
1157   TPML_CC pp_commands;
1158   TPML_CC audit_commands;
1159   TPML_PCR_SELECTION assigned_pcr;
1160   TPML_TAGGED_TPM_PROPERTY tpm_properties;
1161   TPML_TAGGED_PCR_PROPERTY pcr_properties;
1162   TPML_ECC_CURVE ecc_curves;
1163 };
1164 
1165 struct TPMS_CAPABILITY_DATA {
1166   TPM_CAP capability;
1167   TPMU_CAPABILITIES data;
1168 };
1169 
1170 struct TPMS_CLOCK_INFO {
1171   UINT64 clock;
1172   UINT32 reset_count;
1173   UINT32 restart_count;
1174   TPMI_YES_NO safe;
1175 };
1176 
1177 struct TPMS_TIME_INFO {
1178   UINT64 time;
1179   TPMS_CLOCK_INFO clock_info;
1180 };
1181 
1182 struct TPMS_TIME_ATTEST_INFO {
1183   TPMS_TIME_INFO time;
1184   UINT64 firmware_version;
1185 };
1186 
1187 struct TPMS_CERTIFY_INFO {
1188   TPM2B_NAME name;
1189   TPM2B_NAME qualified_name;
1190 };
1191 
1192 struct TPMS_QUOTE_INFO {
1193   TPML_PCR_SELECTION pcr_select;
1194   TPM2B_DIGEST pcr_digest;
1195 };
1196 
1197 struct TPMS_COMMAND_AUDIT_INFO {
1198   UINT64 audit_counter;
1199   TPM_ALG_ID digest_alg;
1200   TPM2B_DIGEST audit_digest;
1201   TPM2B_DIGEST command_digest;
1202 };
1203 
1204 struct TPMS_SESSION_AUDIT_INFO {
1205   TPMI_YES_NO exclusive_session;
1206   TPM2B_DIGEST session_digest;
1207 };
1208 
1209 struct TPMS_CREATION_INFO {
1210   TPM2B_NAME object_name;
1211   TPM2B_DIGEST creation_hash;
1212 };
1213 
1214 struct TPMS_NV_CERTIFY_INFO {
1215   TPM2B_NAME index_name;
1216   UINT16 offset;
1217   TPM2B_MAX_NV_BUFFER nv_contents;
1218 };
1219 
1220 union TPMU_ATTEST {
1221   TPMS_CERTIFY_INFO certify;
1222   TPMS_CREATION_INFO creation;
1223   TPMS_QUOTE_INFO quote;
1224   TPMS_COMMAND_AUDIT_INFO command_audit;
1225   TPMS_SESSION_AUDIT_INFO session_audit;
1226   TPMS_TIME_ATTEST_INFO time;
1227   TPMS_NV_CERTIFY_INFO nv;
1228 };
1229 
1230 struct TPMS_ATTEST {
1231   TPM_GENERATED magic;
1232   TPMI_ST_ATTEST type;
1233   TPM2B_NAME qualified_signer;
1234   TPM2B_DATA extra_data;
1235   TPMS_CLOCK_INFO clock_info;
1236   UINT64 firmware_version;
1237   TPMU_ATTEST attested;
1238 };
1239 
1240 struct TPM2B_ATTEST {
1241   UINT16 size;
1242   BYTE attestation_data[sizeof(TPMS_ATTEST)];
1243 };
1244 
1245 struct TPMS_AUTH_COMMAND {
1246   TPMI_SH_AUTH_SESSION session_handle;
1247   TPM2B_NONCE nonce;
1248   TPMA_SESSION session_attributes;
1249   TPM2B_AUTH hmac;
1250 };
1251 
1252 struct TPMS_AUTH_RESPONSE {
1253   TPM2B_NONCE nonce;
1254   TPMA_SESSION session_attributes;
1255   TPM2B_AUTH hmac;
1256 };
1257 
1258 union TPMU_SYM_KEY_BITS {
1259   TPMI_AES_KEY_BITS aes;
1260   TPMI_SM4_KEY_BITS sm4;
1261   TPM_KEY_BITS sym;
1262   TPMI_ALG_HASH xor_;
1263 };
1264 
1265 union TPMU_SYM_MODE {
1266   TPMI_ALG_SYM_MODE aes;
1267   TPMI_ALG_SYM_MODE sm4;
1268   TPMI_ALG_SYM_MODE sym;
1269 };
1270 
1271 union TPMU_SYM_DETAILS {};
1272 
1273 struct TPMT_SYM_DEF {
1274   TPMI_ALG_SYM algorithm;
1275   TPMU_SYM_KEY_BITS key_bits;
1276   TPMU_SYM_MODE mode;
1277   TPMU_SYM_DETAILS details;
1278 };
1279 
1280 struct TPMT_SYM_DEF_OBJECT {
1281   TPMI_ALG_SYM_OBJECT algorithm;
1282   TPMU_SYM_KEY_BITS key_bits;
1283   TPMU_SYM_MODE mode;
1284   TPMU_SYM_DETAILS details;
1285 };
1286 
1287 struct TPM2B_SYM_KEY {
1288   UINT16 size;
1289   BYTE buffer[MAX_SYM_KEY_BYTES];
1290 };
1291 
1292 struct TPMS_SYMCIPHER_PARMS {
1293   TPMT_SYM_DEF_OBJECT sym;
1294 };
1295 
1296 struct TPM2B_SENSITIVE_DATA {
1297   UINT16 size;
1298   BYTE buffer[MAX_SYM_DATA];
1299 };
1300 
1301 struct TPMS_SENSITIVE_CREATE {
1302   TPM2B_AUTH user_auth;
1303   TPM2B_SENSITIVE_DATA data;
1304 };
1305 
1306 struct TPM2B_SENSITIVE_CREATE {
1307   UINT16 size;
1308   TPMS_SENSITIVE_CREATE sensitive;
1309 };
1310 
1311 struct TPMS_SCHEME_SIGHASH {
1312   TPMI_ALG_HASH hash_alg;
1313 };
1314 
1315 struct TPMS_SCHEME_XOR {
1316   TPMI_ALG_HASH hash_alg;
1317   TPMI_ALG_KDF kdf;
1318 };
1319 
1320 union TPMU_SCHEME_KEYEDHASH {
1321   TPMS_SCHEME_HMAC hmac;
1322   TPMS_SCHEME_XOR xor_;
1323 };
1324 
1325 struct TPMT_KEYEDHASH_SCHEME {
1326   TPMI_ALG_KEYEDHASH_SCHEME scheme;
1327   TPMU_SCHEME_KEYEDHASH details;
1328 };
1329 
1330 struct TPMS_SCHEME_ECDAA {
1331   TPMI_ALG_HASH hash_alg;
1332   UINT16 count;
1333 };
1334 
1335 union TPMU_SIG_SCHEME {
1336   TPMS_SCHEME_RSASSA rsassa;
1337   TPMS_SCHEME_RSAPSS rsapss;
1338   TPMS_SCHEME_ECDSA ecdsa;
1339   TPMS_SCHEME_SM2 sm2;
1340   TPMS_SCHEME_ECDAA ecdaa;
1341   TPMS_SCHEME_ECSCHNORR ec_schnorr;
1342   TPMS_SCHEME_HMAC hmac;
1343   TPMS_SCHEME_SIGHASH any;
1344 };
1345 
1346 struct TPMT_SIG_SCHEME {
1347   TPMI_ALG_SIG_SCHEME scheme;
1348   TPMU_SIG_SCHEME details;
1349 };
1350 
1351 struct TPMS_SCHEME_OAEP {
1352   TPMI_ALG_HASH hash_alg;
1353 };
1354 
1355 struct TPMS_SCHEME_ECDH {
1356   TPMI_ALG_HASH hash_alg;
1357 };
1358 
1359 struct TPMS_SCHEME_MGF1 {
1360   TPMI_ALG_HASH hash_alg;
1361 };
1362 
1363 struct TPMS_SCHEME_KDF1_SP800_56a {
1364   TPMI_ALG_HASH hash_alg;
1365 };
1366 
1367 struct TPMS_SCHEME_KDF2 {
1368   TPMI_ALG_HASH hash_alg;
1369 };
1370 
1371 struct TPMS_SCHEME_KDF1_SP800_108 {
1372   TPMI_ALG_HASH hash_alg;
1373 };
1374 
1375 union TPMU_KDF_SCHEME {
1376   TPMS_SCHEME_MGF1 mgf1;
1377   TPMS_SCHEME_KDF1_SP800_56a kdf1_sp800_56a;
1378   TPMS_SCHEME_KDF2 kdf2;
1379   TPMS_SCHEME_KDF1_SP800_108 kdf1_sp800_108;
1380 };
1381 
1382 struct TPMT_KDF_SCHEME {
1383   TPMI_ALG_KDF scheme;
1384   TPMU_KDF_SCHEME details;
1385 };
1386 
1387 union TPMU_ASYM_SCHEME {
1388   TPMS_SCHEME_RSASSA rsassa;
1389   TPMS_SCHEME_RSAPSS rsapss;
1390   TPMS_SCHEME_OAEP oaep;
1391   TPMS_SCHEME_ECDSA ecdsa;
1392   TPMS_SCHEME_SM2 sm2;
1393   TPMS_SCHEME_ECDAA ecdaa;
1394   TPMS_SCHEME_ECSCHNORR ec_schnorr;
1395   TPMS_SCHEME_ECDH ecdh;
1396   TPMS_SCHEME_SIGHASH any_sig;
1397 };
1398 
1399 struct TPMT_ASYM_SCHEME {
1400   TPMI_ALG_ASYM_SCHEME scheme;
1401   TPMU_ASYM_SCHEME details;
1402 };
1403 
1404 struct TPMT_RSA_SCHEME {
1405   TPMI_ALG_RSA_SCHEME scheme;
1406   TPMU_ASYM_SCHEME details;
1407 };
1408 
1409 struct TPMT_RSA_DECRYPT {
1410   TPMI_ALG_RSA_DECRYPT scheme;
1411   TPMU_ASYM_SCHEME details;
1412 };
1413 
1414 struct TPM2B_PUBLIC_KEY_RSA {
1415   UINT16 size;
1416   BYTE buffer[MAX_RSA_KEY_BYTES];
1417 };
1418 
1419 struct TPM2B_PRIVATE_KEY_RSA {
1420   UINT16 size;
1421   BYTE buffer[MAX_RSA_KEY_BYTES / 2];
1422 };
1423 
1424 struct TPM2B_ECC_PARAMETER {
1425   UINT16 size;
1426   BYTE buffer[MAX_ECC_KEY_BYTES];
1427 };
1428 
1429 struct TPMS_ECC_POINT {
1430   TPM2B_ECC_PARAMETER x;
1431   TPM2B_ECC_PARAMETER y;
1432 };
1433 
1434 struct TPM2B_ECC_POINT {
1435   UINT16 size;
1436   TPMS_ECC_POINT point;
1437 };
1438 
1439 struct TPMT_ECC_SCHEME {
1440   TPMI_ALG_ECC_SCHEME scheme;
1441   TPMU_SIG_SCHEME details;
1442 };
1443 
1444 struct TPMS_ALGORITHM_DETAIL_ECC {
1445   TPM_ECC_CURVE curve_id;
1446   UINT16 key_size;
1447   TPMT_KDF_SCHEME kdf;
1448   TPMT_ECC_SCHEME sign;
1449   TPM2B_ECC_PARAMETER p;
1450   TPM2B_ECC_PARAMETER a;
1451   TPM2B_ECC_PARAMETER b;
1452   TPM2B_ECC_PARAMETER g_x;
1453   TPM2B_ECC_PARAMETER g_y;
1454   TPM2B_ECC_PARAMETER n;
1455   TPM2B_ECC_PARAMETER h;
1456 };
1457 
1458 struct TPMS_SIGNATURE_RSASSA {
1459   TPMI_ALG_HASH hash;
1460   TPM2B_PUBLIC_KEY_RSA sig;
1461 };
1462 
1463 struct TPMS_SIGNATURE_RSAPSS {
1464   TPMI_ALG_HASH hash;
1465   TPM2B_PUBLIC_KEY_RSA sig;
1466 };
1467 
1468 struct TPMS_SIGNATURE_ECDSA {
1469   TPMI_ALG_HASH hash;
1470   TPM2B_ECC_PARAMETER signature_r;
1471   TPM2B_ECC_PARAMETER signature_s;
1472 };
1473 
1474 union TPMU_SIGNATURE {
1475   TPMS_SIGNATURE_RSASSA rsassa;
1476   TPMS_SIGNATURE_RSAPSS rsapss;
1477   TPMS_SIGNATURE_ECDSA ecdsa;
1478   TPMS_SIGNATURE_ECDSA sm2;
1479   TPMS_SIGNATURE_ECDSA ecdaa;
1480   TPMS_SIGNATURE_ECDSA ecschnorr;
1481   TPMT_HA hmac;
1482   TPMS_SCHEME_SIGHASH any;
1483 };
1484 
1485 struct TPMT_SIGNATURE {
1486   TPMI_ALG_SIG_SCHEME sig_alg;
1487   TPMU_SIGNATURE signature;
1488 };
1489 
1490 union TPMU_ENCRYPTED_SECRET {
1491   BYTE ecc[sizeof(TPMS_ECC_POINT)];
1492   BYTE rsa[MAX_RSA_KEY_BYTES];
1493   BYTE symmetric[sizeof(TPM2B_DIGEST)];
1494   BYTE keyed_hash[sizeof(TPM2B_DIGEST)];
1495 };
1496 
1497 struct TPM2B_ENCRYPTED_SECRET {
1498   UINT16 size;
1499   BYTE secret[sizeof(TPMU_ENCRYPTED_SECRET)];
1500 };
1501 
1502 struct TPMS_KEYEDHASH_PARMS {
1503   TPMT_KEYEDHASH_SCHEME scheme;
1504 };
1505 
1506 struct TPMS_ASYM_PARMS {
1507   TPMT_SYM_DEF_OBJECT symmetric;
1508   TPMT_ASYM_SCHEME scheme;
1509 };
1510 
1511 struct TPMS_RSA_PARMS {
1512   TPMT_SYM_DEF_OBJECT symmetric;
1513   TPMT_RSA_SCHEME scheme;
1514   TPMI_RSA_KEY_BITS key_bits;
1515   UINT32 exponent;
1516 };
1517 
1518 struct TPMS_ECC_PARMS {
1519   TPMT_SYM_DEF_OBJECT symmetric;
1520   TPMT_ECC_SCHEME scheme;
1521   TPMI_ECC_CURVE curve_id;
1522   TPMT_KDF_SCHEME kdf;
1523 };
1524 
1525 union TPMU_PUBLIC_PARMS {
1526   TPMS_KEYEDHASH_PARMS keyed_hash_detail;
1527   TPMS_SYMCIPHER_PARMS sym_detail;
1528   TPMS_RSA_PARMS rsa_detail;
1529   TPMS_ECC_PARMS ecc_detail;
1530   TPMS_ASYM_PARMS asym_detail;
1531 };
1532 
1533 struct TPMT_PUBLIC_PARMS {
1534   TPMI_ALG_PUBLIC type;
1535   TPMU_PUBLIC_PARMS parameters;
1536 };
1537 
1538 union TPMU_PUBLIC_ID {
1539   TPM2B_DIGEST keyed_hash;
1540   TPM2B_DIGEST sym;
1541   TPM2B_PUBLIC_KEY_RSA rsa;
1542   TPMS_ECC_POINT ecc;
1543 };
1544 
1545 struct TPMT_PUBLIC {
1546   TPMI_ALG_PUBLIC type;
1547   TPMI_ALG_HASH name_alg;
1548   TPMA_OBJECT object_attributes;
1549   TPM2B_DIGEST auth_policy;
1550   TPMU_PUBLIC_PARMS parameters;
1551   TPMU_PUBLIC_ID unique;
1552 };
1553 
1554 struct TPM2B_PUBLIC {
1555   UINT16 size;
1556   TPMT_PUBLIC public_area;
1557 };
1558 
1559 struct TPM2B_PRIVATE_VENDOR_SPECIFIC {
1560   UINT16 size;
1561   BYTE buffer[PRIVATE_VENDOR_SPECIFIC_BYTES];
1562 };
1563 
1564 union TPMU_SENSITIVE_COMPOSITE {
1565   TPM2B_PRIVATE_KEY_RSA rsa;
1566   TPM2B_ECC_PARAMETER ecc;
1567   TPM2B_SENSITIVE_DATA bits;
1568   TPM2B_SYM_KEY sym;
1569   TPM2B_PRIVATE_VENDOR_SPECIFIC any;
1570 };
1571 
1572 struct TPMT_SENSITIVE {
1573   TPMI_ALG_PUBLIC sensitive_type;
1574   TPM2B_AUTH auth_value;
1575   TPM2B_DIGEST seed_value;
1576   TPMU_SENSITIVE_COMPOSITE sensitive;
1577 };
1578 
1579 struct TPM2B_SENSITIVE {
1580   UINT16 size;
1581   TPMT_SENSITIVE sensitive_area;
1582 };
1583 
1584 struct _PRIVATE {
1585   TPM2B_DIGEST integrity_outer;
1586   TPM2B_DIGEST integrity_inner;
1587   TPMT_SENSITIVE sensitive;
1588 };
1589 
1590 struct TPM2B_PRIVATE {
1591   UINT16 size;
1592   BYTE buffer[sizeof(_PRIVATE)];
1593 };
1594 
1595 struct _ID_OBJECT {
1596   TPM2B_DIGEST integrity_hmac;
1597   TPM2B_DIGEST enc_identity;
1598 };
1599 
1600 struct TPM2B_ID_OBJECT {
1601   UINT16 size;
1602   BYTE credential[sizeof(_ID_OBJECT)];
1603 };
1604 
1605 struct TPMS_NV_PUBLIC {
1606   TPMI_RH_NV_INDEX nv_index;
1607   TPMI_ALG_HASH name_alg;
1608   TPMA_NV attributes;
1609   TPM2B_DIGEST auth_policy;
1610   UINT16 data_size;
1611 };
1612 
1613 struct TPM2B_NV_PUBLIC {
1614   UINT16 size;
1615   TPMS_NV_PUBLIC nv_public;
1616 };
1617 
1618 struct TPM2B_CONTEXT_SENSITIVE {
1619   UINT16 size;
1620   BYTE buffer[MAX_CONTEXT_SIZE];
1621 };
1622 
1623 struct TPMS_CONTEXT_DATA {
1624   TPM2B_DIGEST integrity;
1625   TPM2B_CONTEXT_SENSITIVE encrypted;
1626 };
1627 
1628 struct TPM2B_CONTEXT_DATA {
1629   UINT16 size;
1630   BYTE buffer[sizeof(TPMS_CONTEXT_DATA)];
1631 };
1632 
1633 struct TPMS_CONTEXT {
1634   UINT64 sequence;
1635   TPMI_DH_CONTEXT saved_handle;
1636   TPMI_RH_HIERARCHY hierarchy;
1637   TPM2B_CONTEXT_DATA context_blob;
1638 };
1639 
1640 struct TPMS_CREATION_DATA {
1641   TPML_PCR_SELECTION pcr_select;
1642   TPM2B_DIGEST pcr_digest;
1643   TPMA_LOCALITY locality;
1644   TPM_ALG_ID parent_name_alg;
1645   TPM2B_NAME parent_name;
1646   TPM2B_NAME parent_qualified_name;
1647   TPM2B_DATA outside_info;
1648 };
1649 
1650 struct TPM2B_CREATION_DATA {
1651   UINT16 size;
1652   TPMS_CREATION_DATA creation_data;
1653 };
1654 
1655 TRUNKS_EXPORT size_t GetNumberOfRequestHandles(TPM_CC command_code);
1656 TRUNKS_EXPORT size_t GetNumberOfResponseHandles(TPM_CC command_code);
1657 
1658 TRUNKS_EXPORT TPM_RC Serialize_uint8_t(const uint8_t& value,
1659                                        std::string* buffer);
1660 
1661 TRUNKS_EXPORT TPM_RC Parse_uint8_t(std::string* buffer,
1662                                    uint8_t* value,
1663                                    std::string* value_bytes);
1664 
1665 TRUNKS_EXPORT TPM_RC Serialize_int8_t(const int8_t& value, std::string* buffer);
1666 
1667 TRUNKS_EXPORT TPM_RC Parse_int8_t(std::string* buffer,
1668                                   int8_t* value,
1669                                   std::string* value_bytes);
1670 
1671 TRUNKS_EXPORT TPM_RC Serialize_int(const int& value, std::string* buffer);
1672 
1673 TRUNKS_EXPORT TPM_RC Parse_int(std::string* buffer,
1674                                int* value,
1675                                std::string* value_bytes);
1676 
1677 TRUNKS_EXPORT TPM_RC Serialize_uint16_t(const uint16_t& value,
1678                                         std::string* buffer);
1679 
1680 TRUNKS_EXPORT TPM_RC Parse_uint16_t(std::string* buffer,
1681                                     uint16_t* value,
1682                                     std::string* value_bytes);
1683 
1684 TRUNKS_EXPORT TPM_RC Serialize_int16_t(const int16_t& value,
1685                                        std::string* buffer);
1686 
1687 TRUNKS_EXPORT TPM_RC Parse_int16_t(std::string* buffer,
1688                                    int16_t* value,
1689                                    std::string* value_bytes);
1690 
1691 TRUNKS_EXPORT TPM_RC Serialize_uint32_t(const uint32_t& value,
1692                                         std::string* buffer);
1693 
1694 TRUNKS_EXPORT TPM_RC Parse_uint32_t(std::string* buffer,
1695                                     uint32_t* value,
1696                                     std::string* value_bytes);
1697 
1698 TRUNKS_EXPORT TPM_RC Serialize_int32_t(const int32_t& value,
1699                                        std::string* buffer);
1700 
1701 TRUNKS_EXPORT TPM_RC Parse_int32_t(std::string* buffer,
1702                                    int32_t* value,
1703                                    std::string* value_bytes);
1704 
1705 TRUNKS_EXPORT TPM_RC Serialize_uint64_t(const uint64_t& value,
1706                                         std::string* buffer);
1707 
1708 TRUNKS_EXPORT TPM_RC Parse_uint64_t(std::string* buffer,
1709                                     uint64_t* value,
1710                                     std::string* value_bytes);
1711 
1712 TRUNKS_EXPORT TPM_RC Serialize_int64_t(const int64_t& value,
1713                                        std::string* buffer);
1714 
1715 TRUNKS_EXPORT TPM_RC Parse_int64_t(std::string* buffer,
1716                                    int64_t* value,
1717                                    std::string* value_bytes);
1718 
1719 TRUNKS_EXPORT TPM_RC Serialize_UINT8(const UINT8& value, std::string* buffer);
1720 
1721 TRUNKS_EXPORT TPM_RC Parse_UINT8(std::string* buffer,
1722                                  UINT8* value,
1723                                  std::string* value_bytes);
1724 
1725 TRUNKS_EXPORT TPM_RC Serialize_BYTE(const BYTE& value, std::string* buffer);
1726 
1727 TRUNKS_EXPORT TPM_RC Parse_BYTE(std::string* buffer,
1728                                 BYTE* value,
1729                                 std::string* value_bytes);
1730 
1731 TRUNKS_EXPORT TPM_RC Serialize_INT8(const INT8& value, std::string* buffer);
1732 
1733 TRUNKS_EXPORT TPM_RC Parse_INT8(std::string* buffer,
1734                                 INT8* value,
1735                                 std::string* value_bytes);
1736 
1737 TRUNKS_EXPORT TPM_RC Serialize_BOOL(const BOOL& value, std::string* buffer);
1738 
1739 TRUNKS_EXPORT TPM_RC Parse_BOOL(std::string* buffer,
1740                                 BOOL* value,
1741                                 std::string* value_bytes);
1742 
1743 TRUNKS_EXPORT TPM_RC Serialize_UINT16(const UINT16& value, std::string* buffer);
1744 
1745 TRUNKS_EXPORT TPM_RC Parse_UINT16(std::string* buffer,
1746                                   UINT16* value,
1747                                   std::string* value_bytes);
1748 
1749 TRUNKS_EXPORT TPM_RC Serialize_INT16(const INT16& value, std::string* buffer);
1750 
1751 TRUNKS_EXPORT TPM_RC Parse_INT16(std::string* buffer,
1752                                  INT16* value,
1753                                  std::string* value_bytes);
1754 
1755 TRUNKS_EXPORT TPM_RC Serialize_UINT32(const UINT32& value, std::string* buffer);
1756 
1757 TRUNKS_EXPORT TPM_RC Parse_UINT32(std::string* buffer,
1758                                   UINT32* value,
1759                                   std::string* value_bytes);
1760 
1761 TRUNKS_EXPORT TPM_RC Serialize_INT32(const INT32& value, std::string* buffer);
1762 
1763 TRUNKS_EXPORT TPM_RC Parse_INT32(std::string* buffer,
1764                                  INT32* value,
1765                                  std::string* value_bytes);
1766 
1767 TRUNKS_EXPORT TPM_RC Serialize_UINT64(const UINT64& value, std::string* buffer);
1768 
1769 TRUNKS_EXPORT TPM_RC Parse_UINT64(std::string* buffer,
1770                                   UINT64* value,
1771                                   std::string* value_bytes);
1772 
1773 TRUNKS_EXPORT TPM_RC Serialize_INT64(const INT64& value, std::string* buffer);
1774 
1775 TRUNKS_EXPORT TPM_RC Parse_INT64(std::string* buffer,
1776                                  INT64* value,
1777                                  std::string* value_bytes);
1778 
1779 TRUNKS_EXPORT TPM_RC Serialize_TPM_ALGORITHM_ID(const TPM_ALGORITHM_ID& value,
1780                                                 std::string* buffer);
1781 
1782 TRUNKS_EXPORT TPM_RC Parse_TPM_ALGORITHM_ID(std::string* buffer,
1783                                             TPM_ALGORITHM_ID* value,
1784                                             std::string* value_bytes);
1785 
1786 TRUNKS_EXPORT TPM_RC
1787 Serialize_TPM_MODIFIER_INDICATOR(const TPM_MODIFIER_INDICATOR& value,
1788                                  std::string* buffer);
1789 
1790 TRUNKS_EXPORT TPM_RC Parse_TPM_MODIFIER_INDICATOR(std::string* buffer,
1791                                                   TPM_MODIFIER_INDICATOR* value,
1792                                                   std::string* value_bytes);
1793 
1794 TRUNKS_EXPORT TPM_RC
1795 Serialize_TPM_AUTHORIZATION_SIZE(const TPM_AUTHORIZATION_SIZE& value,
1796                                  std::string* buffer);
1797 
1798 TRUNKS_EXPORT TPM_RC Parse_TPM_AUTHORIZATION_SIZE(std::string* buffer,
1799                                                   TPM_AUTHORIZATION_SIZE* value,
1800                                                   std::string* value_bytes);
1801 
1802 TRUNKS_EXPORT TPM_RC
1803 Serialize_TPM_PARAMETER_SIZE(const TPM_PARAMETER_SIZE& value,
1804                              std::string* buffer);
1805 
1806 TRUNKS_EXPORT TPM_RC Parse_TPM_PARAMETER_SIZE(std::string* buffer,
1807                                               TPM_PARAMETER_SIZE* value,
1808                                               std::string* value_bytes);
1809 
1810 TRUNKS_EXPORT TPM_RC Serialize_TPM_KEY_SIZE(const TPM_KEY_SIZE& value,
1811                                             std::string* buffer);
1812 
1813 TRUNKS_EXPORT TPM_RC Parse_TPM_KEY_SIZE(std::string* buffer,
1814                                         TPM_KEY_SIZE* value,
1815                                         std::string* value_bytes);
1816 
1817 TRUNKS_EXPORT TPM_RC Serialize_TPM_KEY_BITS(const TPM_KEY_BITS& value,
1818                                             std::string* buffer);
1819 
1820 TRUNKS_EXPORT TPM_RC Parse_TPM_KEY_BITS(std::string* buffer,
1821                                         TPM_KEY_BITS* value,
1822                                         std::string* value_bytes);
1823 
1824 TRUNKS_EXPORT TPM_RC Serialize_TPM_HANDLE(const TPM_HANDLE& value,
1825                                           std::string* buffer);
1826 
1827 TRUNKS_EXPORT TPM_RC Parse_TPM_HANDLE(std::string* buffer,
1828                                       TPM_HANDLE* value,
1829                                       std::string* value_bytes);
1830 
1831 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_NONCE(const TPM2B_NONCE& value,
1832                                            std::string* buffer);
1833 
1834 TRUNKS_EXPORT TPM_RC Parse_TPM2B_NONCE(std::string* buffer,
1835                                        TPM2B_NONCE* value,
1836                                        std::string* value_bytes);
1837 
1838 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_AUTH(const TPM2B_AUTH& value,
1839                                           std::string* buffer);
1840 
1841 TRUNKS_EXPORT TPM_RC Parse_TPM2B_AUTH(std::string* buffer,
1842                                       TPM2B_AUTH* value,
1843                                       std::string* value_bytes);
1844 
1845 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_OPERAND(const TPM2B_OPERAND& value,
1846                                              std::string* buffer);
1847 
1848 TRUNKS_EXPORT TPM_RC Parse_TPM2B_OPERAND(std::string* buffer,
1849                                          TPM2B_OPERAND* value,
1850                                          std::string* value_bytes);
1851 
1852 TRUNKS_EXPORT TPM_RC Serialize_TPMS_SCHEME_HMAC(const TPMS_SCHEME_HMAC& value,
1853                                                 std::string* buffer);
1854 
1855 TRUNKS_EXPORT TPM_RC Parse_TPMS_SCHEME_HMAC(std::string* buffer,
1856                                             TPMS_SCHEME_HMAC* value,
1857                                             std::string* value_bytes);
1858 
1859 TRUNKS_EXPORT TPM_RC
1860 Serialize_TPMS_SCHEME_RSASSA(const TPMS_SCHEME_RSASSA& value,
1861                              std::string* buffer);
1862 
1863 TRUNKS_EXPORT TPM_RC Parse_TPMS_SCHEME_RSASSA(std::string* buffer,
1864                                               TPMS_SCHEME_RSASSA* value,
1865                                               std::string* value_bytes);
1866 
1867 TRUNKS_EXPORT TPM_RC
1868 Serialize_TPMS_SCHEME_RSAPSS(const TPMS_SCHEME_RSAPSS& value,
1869                              std::string* buffer);
1870 
1871 TRUNKS_EXPORT TPM_RC Parse_TPMS_SCHEME_RSAPSS(std::string* buffer,
1872                                               TPMS_SCHEME_RSAPSS* value,
1873                                               std::string* value_bytes);
1874 
1875 TRUNKS_EXPORT TPM_RC Serialize_TPMS_SCHEME_ECDSA(const TPMS_SCHEME_ECDSA& value,
1876                                                  std::string* buffer);
1877 
1878 TRUNKS_EXPORT TPM_RC Parse_TPMS_SCHEME_ECDSA(std::string* buffer,
1879                                              TPMS_SCHEME_ECDSA* value,
1880                                              std::string* value_bytes);
1881 
1882 TRUNKS_EXPORT TPM_RC Serialize_TPMS_SCHEME_SM2(const TPMS_SCHEME_SM2& value,
1883                                                std::string* buffer);
1884 
1885 TRUNKS_EXPORT TPM_RC Parse_TPMS_SCHEME_SM2(std::string* buffer,
1886                                            TPMS_SCHEME_SM2* value,
1887                                            std::string* value_bytes);
1888 
1889 TRUNKS_EXPORT TPM_RC
1890 Serialize_TPMS_SCHEME_ECSCHNORR(const TPMS_SCHEME_ECSCHNORR& value,
1891                                 std::string* buffer);
1892 
1893 TRUNKS_EXPORT TPM_RC Parse_TPMS_SCHEME_ECSCHNORR(std::string* buffer,
1894                                                  TPMS_SCHEME_ECSCHNORR* value,
1895                                                  std::string* value_bytes);
1896 
1897 TRUNKS_EXPORT TPM_RC Serialize_TPMI_YES_NO(const TPMI_YES_NO& value,
1898                                            std::string* buffer);
1899 
1900 TRUNKS_EXPORT TPM_RC Parse_TPMI_YES_NO(std::string* buffer,
1901                                        TPMI_YES_NO* value,
1902                                        std::string* value_bytes);
1903 
1904 TRUNKS_EXPORT TPM_RC Serialize_TPMI_DH_OBJECT(const TPMI_DH_OBJECT& value,
1905                                               std::string* buffer);
1906 
1907 TRUNKS_EXPORT TPM_RC Parse_TPMI_DH_OBJECT(std::string* buffer,
1908                                           TPMI_DH_OBJECT* value,
1909                                           std::string* value_bytes);
1910 
1911 TRUNKS_EXPORT TPM_RC
1912 Serialize_TPMI_DH_PERSISTENT(const TPMI_DH_PERSISTENT& value,
1913                              std::string* buffer);
1914 
1915 TRUNKS_EXPORT TPM_RC Parse_TPMI_DH_PERSISTENT(std::string* buffer,
1916                                               TPMI_DH_PERSISTENT* value,
1917                                               std::string* value_bytes);
1918 
1919 TRUNKS_EXPORT TPM_RC Serialize_TPMI_DH_ENTITY(const TPMI_DH_ENTITY& value,
1920                                               std::string* buffer);
1921 
1922 TRUNKS_EXPORT TPM_RC Parse_TPMI_DH_ENTITY(std::string* buffer,
1923                                           TPMI_DH_ENTITY* value,
1924                                           std::string* value_bytes);
1925 
1926 TRUNKS_EXPORT TPM_RC Serialize_TPMI_DH_PCR(const TPMI_DH_PCR& value,
1927                                            std::string* buffer);
1928 
1929 TRUNKS_EXPORT TPM_RC Parse_TPMI_DH_PCR(std::string* buffer,
1930                                        TPMI_DH_PCR* value,
1931                                        std::string* value_bytes);
1932 
1933 TRUNKS_EXPORT TPM_RC
1934 Serialize_TPMI_SH_AUTH_SESSION(const TPMI_SH_AUTH_SESSION& value,
1935                                std::string* buffer);
1936 
1937 TRUNKS_EXPORT TPM_RC Parse_TPMI_SH_AUTH_SESSION(std::string* buffer,
1938                                                 TPMI_SH_AUTH_SESSION* value,
1939                                                 std::string* value_bytes);
1940 
1941 TRUNKS_EXPORT TPM_RC Serialize_TPMI_SH_HMAC(const TPMI_SH_HMAC& value,
1942                                             std::string* buffer);
1943 
1944 TRUNKS_EXPORT TPM_RC Parse_TPMI_SH_HMAC(std::string* buffer,
1945                                         TPMI_SH_HMAC* value,
1946                                         std::string* value_bytes);
1947 
1948 TRUNKS_EXPORT TPM_RC Serialize_TPMI_SH_POLICY(const TPMI_SH_POLICY& value,
1949                                               std::string* buffer);
1950 
1951 TRUNKS_EXPORT TPM_RC Parse_TPMI_SH_POLICY(std::string* buffer,
1952                                           TPMI_SH_POLICY* value,
1953                                           std::string* value_bytes);
1954 
1955 TRUNKS_EXPORT TPM_RC Serialize_TPMI_DH_CONTEXT(const TPMI_DH_CONTEXT& value,
1956                                                std::string* buffer);
1957 
1958 TRUNKS_EXPORT TPM_RC Parse_TPMI_DH_CONTEXT(std::string* buffer,
1959                                            TPMI_DH_CONTEXT* value,
1960                                            std::string* value_bytes);
1961 
1962 TRUNKS_EXPORT TPM_RC Serialize_TPMI_RH_HIERARCHY(const TPMI_RH_HIERARCHY& value,
1963                                                  std::string* buffer);
1964 
1965 TRUNKS_EXPORT TPM_RC Parse_TPMI_RH_HIERARCHY(std::string* buffer,
1966                                              TPMI_RH_HIERARCHY* value,
1967                                              std::string* value_bytes);
1968 
1969 TRUNKS_EXPORT TPM_RC Serialize_TPMI_RH_ENABLES(const TPMI_RH_ENABLES& value,
1970                                                std::string* buffer);
1971 
1972 TRUNKS_EXPORT TPM_RC Parse_TPMI_RH_ENABLES(std::string* buffer,
1973                                            TPMI_RH_ENABLES* value,
1974                                            std::string* value_bytes);
1975 
1976 TRUNKS_EXPORT TPM_RC
1977 Serialize_TPMI_RH_HIERARCHY_AUTH(const TPMI_RH_HIERARCHY_AUTH& value,
1978                                  std::string* buffer);
1979 
1980 TRUNKS_EXPORT TPM_RC Parse_TPMI_RH_HIERARCHY_AUTH(std::string* buffer,
1981                                                   TPMI_RH_HIERARCHY_AUTH* value,
1982                                                   std::string* value_bytes);
1983 
1984 TRUNKS_EXPORT TPM_RC Serialize_TPMI_RH_PLATFORM(const TPMI_RH_PLATFORM& value,
1985                                                 std::string* buffer);
1986 
1987 TRUNKS_EXPORT TPM_RC Parse_TPMI_RH_PLATFORM(std::string* buffer,
1988                                             TPMI_RH_PLATFORM* value,
1989                                             std::string* value_bytes);
1990 
1991 TRUNKS_EXPORT TPM_RC Serialize_TPMI_RH_OWNER(const TPMI_RH_OWNER& value,
1992                                              std::string* buffer);
1993 
1994 TRUNKS_EXPORT TPM_RC Parse_TPMI_RH_OWNER(std::string* buffer,
1995                                          TPMI_RH_OWNER* value,
1996                                          std::string* value_bytes);
1997 
1998 TRUNKS_EXPORT TPM_RC
1999 Serialize_TPMI_RH_ENDORSEMENT(const TPMI_RH_ENDORSEMENT& value,
2000                               std::string* buffer);
2001 
2002 TRUNKS_EXPORT TPM_RC Parse_TPMI_RH_ENDORSEMENT(std::string* buffer,
2003                                                TPMI_RH_ENDORSEMENT* value,
2004                                                std::string* value_bytes);
2005 
2006 TRUNKS_EXPORT TPM_RC Serialize_TPMI_RH_PROVISION(const TPMI_RH_PROVISION& value,
2007                                                  std::string* buffer);
2008 
2009 TRUNKS_EXPORT TPM_RC Parse_TPMI_RH_PROVISION(std::string* buffer,
2010                                              TPMI_RH_PROVISION* value,
2011                                              std::string* value_bytes);
2012 
2013 TRUNKS_EXPORT TPM_RC Serialize_TPMI_RH_CLEAR(const TPMI_RH_CLEAR& value,
2014                                              std::string* buffer);
2015 
2016 TRUNKS_EXPORT TPM_RC Parse_TPMI_RH_CLEAR(std::string* buffer,
2017                                          TPMI_RH_CLEAR* value,
2018                                          std::string* value_bytes);
2019 
2020 TRUNKS_EXPORT TPM_RC Serialize_TPMI_RH_NV_AUTH(const TPMI_RH_NV_AUTH& value,
2021                                                std::string* buffer);
2022 
2023 TRUNKS_EXPORT TPM_RC Parse_TPMI_RH_NV_AUTH(std::string* buffer,
2024                                            TPMI_RH_NV_AUTH* value,
2025                                            std::string* value_bytes);
2026 
2027 TRUNKS_EXPORT TPM_RC Serialize_TPMI_RH_LOCKOUT(const TPMI_RH_LOCKOUT& value,
2028                                                std::string* buffer);
2029 
2030 TRUNKS_EXPORT TPM_RC Parse_TPMI_RH_LOCKOUT(std::string* buffer,
2031                                            TPMI_RH_LOCKOUT* value,
2032                                            std::string* value_bytes);
2033 
2034 TRUNKS_EXPORT TPM_RC Serialize_TPMI_RH_NV_INDEX(const TPMI_RH_NV_INDEX& value,
2035                                                 std::string* buffer);
2036 
2037 TRUNKS_EXPORT TPM_RC Parse_TPMI_RH_NV_INDEX(std::string* buffer,
2038                                             TPMI_RH_NV_INDEX* value,
2039                                             std::string* value_bytes);
2040 
2041 TRUNKS_EXPORT TPM_RC Serialize_TPMI_ALG_HASH(const TPMI_ALG_HASH& value,
2042                                              std::string* buffer);
2043 
2044 TRUNKS_EXPORT TPM_RC Parse_TPMI_ALG_HASH(std::string* buffer,
2045                                          TPMI_ALG_HASH* value,
2046                                          std::string* value_bytes);
2047 
2048 TRUNKS_EXPORT TPM_RC Serialize_TPMI_ALG_ASYM(const TPMI_ALG_ASYM& value,
2049                                              std::string* buffer);
2050 
2051 TRUNKS_EXPORT TPM_RC Parse_TPMI_ALG_ASYM(std::string* buffer,
2052                                          TPMI_ALG_ASYM* value,
2053                                          std::string* value_bytes);
2054 
2055 TRUNKS_EXPORT TPM_RC Serialize_TPMI_ALG_SYM(const TPMI_ALG_SYM& value,
2056                                             std::string* buffer);
2057 
2058 TRUNKS_EXPORT TPM_RC Parse_TPMI_ALG_SYM(std::string* buffer,
2059                                         TPMI_ALG_SYM* value,
2060                                         std::string* value_bytes);
2061 
2062 TRUNKS_EXPORT TPM_RC
2063 Serialize_TPMI_ALG_SYM_OBJECT(const TPMI_ALG_SYM_OBJECT& value,
2064                               std::string* buffer);
2065 
2066 TRUNKS_EXPORT TPM_RC Parse_TPMI_ALG_SYM_OBJECT(std::string* buffer,
2067                                                TPMI_ALG_SYM_OBJECT* value,
2068                                                std::string* value_bytes);
2069 
2070 TRUNKS_EXPORT TPM_RC Serialize_TPMI_ALG_SYM_MODE(const TPMI_ALG_SYM_MODE& value,
2071                                                  std::string* buffer);
2072 
2073 TRUNKS_EXPORT TPM_RC Parse_TPMI_ALG_SYM_MODE(std::string* buffer,
2074                                              TPMI_ALG_SYM_MODE* value,
2075                                              std::string* value_bytes);
2076 
2077 TRUNKS_EXPORT TPM_RC Serialize_TPMI_ALG_KDF(const TPMI_ALG_KDF& value,
2078                                             std::string* buffer);
2079 
2080 TRUNKS_EXPORT TPM_RC Parse_TPMI_ALG_KDF(std::string* buffer,
2081                                         TPMI_ALG_KDF* value,
2082                                         std::string* value_bytes);
2083 
2084 TRUNKS_EXPORT TPM_RC
2085 Serialize_TPMI_ALG_SIG_SCHEME(const TPMI_ALG_SIG_SCHEME& value,
2086                               std::string* buffer);
2087 
2088 TRUNKS_EXPORT TPM_RC Parse_TPMI_ALG_SIG_SCHEME(std::string* buffer,
2089                                                TPMI_ALG_SIG_SCHEME* value,
2090                                                std::string* value_bytes);
2091 
2092 TRUNKS_EXPORT TPM_RC
2093 Serialize_TPMI_ECC_KEY_EXCHANGE(const TPMI_ECC_KEY_EXCHANGE& value,
2094                                 std::string* buffer);
2095 
2096 TRUNKS_EXPORT TPM_RC Parse_TPMI_ECC_KEY_EXCHANGE(std::string* buffer,
2097                                                  TPMI_ECC_KEY_EXCHANGE* value,
2098                                                  std::string* value_bytes);
2099 
2100 TRUNKS_EXPORT TPM_RC
2101 Serialize_TPMI_ST_COMMAND_TAG(const TPMI_ST_COMMAND_TAG& value,
2102                               std::string* buffer);
2103 
2104 TRUNKS_EXPORT TPM_RC Parse_TPMI_ST_COMMAND_TAG(std::string* buffer,
2105                                                TPMI_ST_COMMAND_TAG* value,
2106                                                std::string* value_bytes);
2107 
2108 TRUNKS_EXPORT TPM_RC Serialize_TPMI_ST_ATTEST(const TPMI_ST_ATTEST& value,
2109                                               std::string* buffer);
2110 
2111 TRUNKS_EXPORT TPM_RC Parse_TPMI_ST_ATTEST(std::string* buffer,
2112                                           TPMI_ST_ATTEST* value,
2113                                           std::string* value_bytes);
2114 
2115 TRUNKS_EXPORT TPM_RC Serialize_TPMI_AES_KEY_BITS(const TPMI_AES_KEY_BITS& value,
2116                                                  std::string* buffer);
2117 
2118 TRUNKS_EXPORT TPM_RC Parse_TPMI_AES_KEY_BITS(std::string* buffer,
2119                                              TPMI_AES_KEY_BITS* value,
2120                                              std::string* value_bytes);
2121 
2122 TRUNKS_EXPORT TPM_RC Serialize_TPMI_SM4_KEY_BITS(const TPMI_SM4_KEY_BITS& value,
2123                                                  std::string* buffer);
2124 
2125 TRUNKS_EXPORT TPM_RC Parse_TPMI_SM4_KEY_BITS(std::string* buffer,
2126                                              TPMI_SM4_KEY_BITS* value,
2127                                              std::string* value_bytes);
2128 
2129 TRUNKS_EXPORT TPM_RC
2130 Serialize_TPMI_ALG_KEYEDHASH_SCHEME(const TPMI_ALG_KEYEDHASH_SCHEME& value,
2131                                     std::string* buffer);
2132 
2133 TRUNKS_EXPORT TPM_RC
2134 Parse_TPMI_ALG_KEYEDHASH_SCHEME(std::string* buffer,
2135                                 TPMI_ALG_KEYEDHASH_SCHEME* value,
2136                                 std::string* value_bytes);
2137 
2138 TRUNKS_EXPORT TPM_RC
2139 Serialize_TPMI_ALG_ASYM_SCHEME(const TPMI_ALG_ASYM_SCHEME& value,
2140                                std::string* buffer);
2141 
2142 TRUNKS_EXPORT TPM_RC Parse_TPMI_ALG_ASYM_SCHEME(std::string* buffer,
2143                                                 TPMI_ALG_ASYM_SCHEME* value,
2144                                                 std::string* value_bytes);
2145 
2146 TRUNKS_EXPORT TPM_RC
2147 Serialize_TPMI_ALG_RSA_SCHEME(const TPMI_ALG_RSA_SCHEME& value,
2148                               std::string* buffer);
2149 
2150 TRUNKS_EXPORT TPM_RC Parse_TPMI_ALG_RSA_SCHEME(std::string* buffer,
2151                                                TPMI_ALG_RSA_SCHEME* value,
2152                                                std::string* value_bytes);
2153 
2154 TRUNKS_EXPORT TPM_RC
2155 Serialize_TPMI_ALG_RSA_DECRYPT(const TPMI_ALG_RSA_DECRYPT& value,
2156                                std::string* buffer);
2157 
2158 TRUNKS_EXPORT TPM_RC Parse_TPMI_ALG_RSA_DECRYPT(std::string* buffer,
2159                                                 TPMI_ALG_RSA_DECRYPT* value,
2160                                                 std::string* value_bytes);
2161 
2162 TRUNKS_EXPORT TPM_RC Serialize_TPMI_RSA_KEY_BITS(const TPMI_RSA_KEY_BITS& value,
2163                                                  std::string* buffer);
2164 
2165 TRUNKS_EXPORT TPM_RC Parse_TPMI_RSA_KEY_BITS(std::string* buffer,
2166                                              TPMI_RSA_KEY_BITS* value,
2167                                              std::string* value_bytes);
2168 
2169 TRUNKS_EXPORT TPM_RC
2170 Serialize_TPMI_ALG_ECC_SCHEME(const TPMI_ALG_ECC_SCHEME& value,
2171                               std::string* buffer);
2172 
2173 TRUNKS_EXPORT TPM_RC Parse_TPMI_ALG_ECC_SCHEME(std::string* buffer,
2174                                                TPMI_ALG_ECC_SCHEME* value,
2175                                                std::string* value_bytes);
2176 
2177 TRUNKS_EXPORT TPM_RC Serialize_TPMI_ECC_CURVE(const TPMI_ECC_CURVE& value,
2178                                               std::string* buffer);
2179 
2180 TRUNKS_EXPORT TPM_RC Parse_TPMI_ECC_CURVE(std::string* buffer,
2181                                           TPMI_ECC_CURVE* value,
2182                                           std::string* value_bytes);
2183 
2184 TRUNKS_EXPORT TPM_RC Serialize_TPMI_ALG_PUBLIC(const TPMI_ALG_PUBLIC& value,
2185                                                std::string* buffer);
2186 
2187 TRUNKS_EXPORT TPM_RC Parse_TPMI_ALG_PUBLIC(std::string* buffer,
2188                                            TPMI_ALG_PUBLIC* value,
2189                                            std::string* value_bytes);
2190 
2191 TRUNKS_EXPORT TPM_RC Serialize_TPMA_ALGORITHM(const TPMA_ALGORITHM& value,
2192                                               std::string* buffer);
2193 
2194 TRUNKS_EXPORT TPM_RC Parse_TPMA_ALGORITHM(std::string* buffer,
2195                                           TPMA_ALGORITHM* value,
2196                                           std::string* value_bytes);
2197 
2198 TRUNKS_EXPORT TPM_RC Serialize_TPMA_OBJECT(const TPMA_OBJECT& value,
2199                                            std::string* buffer);
2200 
2201 TRUNKS_EXPORT TPM_RC Parse_TPMA_OBJECT(std::string* buffer,
2202                                        TPMA_OBJECT* value,
2203                                        std::string* value_bytes);
2204 
2205 TRUNKS_EXPORT TPM_RC Serialize_TPMA_SESSION(const TPMA_SESSION& value,
2206                                             std::string* buffer);
2207 
2208 TRUNKS_EXPORT TPM_RC Parse_TPMA_SESSION(std::string* buffer,
2209                                         TPMA_SESSION* value,
2210                                         std::string* value_bytes);
2211 
2212 TRUNKS_EXPORT TPM_RC Serialize_TPMA_LOCALITY(const TPMA_LOCALITY& value,
2213                                              std::string* buffer);
2214 
2215 TRUNKS_EXPORT TPM_RC Parse_TPMA_LOCALITY(std::string* buffer,
2216                                          TPMA_LOCALITY* value,
2217                                          std::string* value_bytes);
2218 
2219 TRUNKS_EXPORT TPM_RC Serialize_TPMA_PERMANENT(const TPMA_PERMANENT& value,
2220                                               std::string* buffer);
2221 
2222 TRUNKS_EXPORT TPM_RC Parse_TPMA_PERMANENT(std::string* buffer,
2223                                           TPMA_PERMANENT* value,
2224                                           std::string* value_bytes);
2225 
2226 TRUNKS_EXPORT TPM_RC
2227 Serialize_TPMA_STARTUP_CLEAR(const TPMA_STARTUP_CLEAR& value,
2228                              std::string* buffer);
2229 
2230 TRUNKS_EXPORT TPM_RC Parse_TPMA_STARTUP_CLEAR(std::string* buffer,
2231                                               TPMA_STARTUP_CLEAR* value,
2232                                               std::string* value_bytes);
2233 
2234 TRUNKS_EXPORT TPM_RC Serialize_TPMA_MEMORY(const TPMA_MEMORY& value,
2235                                            std::string* buffer);
2236 
2237 TRUNKS_EXPORT TPM_RC Parse_TPMA_MEMORY(std::string* buffer,
2238                                        TPMA_MEMORY* value,
2239                                        std::string* value_bytes);
2240 
2241 TRUNKS_EXPORT TPM_RC Serialize_TPMA_CC(const TPMA_CC& value,
2242                                        std::string* buffer);
2243 
2244 TRUNKS_EXPORT TPM_RC Parse_TPMA_CC(std::string* buffer,
2245                                    TPMA_CC* value,
2246                                    std::string* value_bytes);
2247 
2248 TRUNKS_EXPORT TPM_RC Serialize_TPM_NV_INDEX(const TPM_NV_INDEX& value,
2249                                             std::string* buffer);
2250 
2251 TRUNKS_EXPORT TPM_RC Parse_TPM_NV_INDEX(std::string* buffer,
2252                                         TPM_NV_INDEX* value,
2253                                         std::string* value_bytes);
2254 
2255 TRUNKS_EXPORT TPM_RC Serialize_TPMA_NV(const TPMA_NV& value,
2256                                        std::string* buffer);
2257 
2258 TRUNKS_EXPORT TPM_RC Parse_TPMA_NV(std::string* buffer,
2259                                    TPMA_NV* value,
2260                                    std::string* value_bytes);
2261 
2262 TRUNKS_EXPORT TPM_RC Serialize_TPM_SPEC(const TPM_SPEC& value,
2263                                         std::string* buffer);
2264 
2265 TRUNKS_EXPORT TPM_RC Parse_TPM_SPEC(std::string* buffer,
2266                                     TPM_SPEC* value,
2267                                     std::string* value_bytes);
2268 
2269 TRUNKS_EXPORT TPM_RC Serialize_TPM_GENERATED(const TPM_GENERATED& value,
2270                                              std::string* buffer);
2271 
2272 TRUNKS_EXPORT TPM_RC Parse_TPM_GENERATED(std::string* buffer,
2273                                          TPM_GENERATED* value,
2274                                          std::string* value_bytes);
2275 
2276 TRUNKS_EXPORT TPM_RC Serialize_TPM_ALG_ID(const TPM_ALG_ID& value,
2277                                           std::string* buffer);
2278 
2279 TRUNKS_EXPORT TPM_RC Parse_TPM_ALG_ID(std::string* buffer,
2280                                       TPM_ALG_ID* value,
2281                                       std::string* value_bytes);
2282 
2283 TRUNKS_EXPORT TPM_RC Serialize_TPM_ECC_CURVE(const TPM_ECC_CURVE& value,
2284                                              std::string* buffer);
2285 
2286 TRUNKS_EXPORT TPM_RC Parse_TPM_ECC_CURVE(std::string* buffer,
2287                                          TPM_ECC_CURVE* value,
2288                                          std::string* value_bytes);
2289 
2290 TRUNKS_EXPORT TPM_RC Serialize_TPM_CC(const TPM_CC& value, std::string* buffer);
2291 
2292 TRUNKS_EXPORT TPM_RC Parse_TPM_CC(std::string* buffer,
2293                                   TPM_CC* value,
2294                                   std::string* value_bytes);
2295 
2296 TRUNKS_EXPORT TPM_RC Serialize_TPM_RC(const TPM_RC& value, std::string* buffer);
2297 
2298 TRUNKS_EXPORT TPM_RC Parse_TPM_RC(std::string* buffer,
2299                                   TPM_RC* value,
2300                                   std::string* value_bytes);
2301 
2302 TRUNKS_EXPORT TPM_RC Serialize_TPM_CLOCK_ADJUST(const TPM_CLOCK_ADJUST& value,
2303                                                 std::string* buffer);
2304 
2305 TRUNKS_EXPORT TPM_RC Parse_TPM_CLOCK_ADJUST(std::string* buffer,
2306                                             TPM_CLOCK_ADJUST* value,
2307                                             std::string* value_bytes);
2308 
2309 TRUNKS_EXPORT TPM_RC Serialize_TPM_EO(const TPM_EO& value, std::string* buffer);
2310 
2311 TRUNKS_EXPORT TPM_RC Parse_TPM_EO(std::string* buffer,
2312                                   TPM_EO* value,
2313                                   std::string* value_bytes);
2314 
2315 TRUNKS_EXPORT TPM_RC Serialize_TPM_ST(const TPM_ST& value, std::string* buffer);
2316 
2317 TRUNKS_EXPORT TPM_RC Parse_TPM_ST(std::string* buffer,
2318                                   TPM_ST* value,
2319                                   std::string* value_bytes);
2320 
2321 TRUNKS_EXPORT TPM_RC Serialize_TPM_SU(const TPM_SU& value, std::string* buffer);
2322 
2323 TRUNKS_EXPORT TPM_RC Parse_TPM_SU(std::string* buffer,
2324                                   TPM_SU* value,
2325                                   std::string* value_bytes);
2326 
2327 TRUNKS_EXPORT TPM_RC Serialize_TPM_SE(const TPM_SE& value, std::string* buffer);
2328 
2329 TRUNKS_EXPORT TPM_RC Parse_TPM_SE(std::string* buffer,
2330                                   TPM_SE* value,
2331                                   std::string* value_bytes);
2332 
2333 TRUNKS_EXPORT TPM_RC Serialize_TPM_CAP(const TPM_CAP& value,
2334                                        std::string* buffer);
2335 
2336 TRUNKS_EXPORT TPM_RC Parse_TPM_CAP(std::string* buffer,
2337                                    TPM_CAP* value,
2338                                    std::string* value_bytes);
2339 
2340 TRUNKS_EXPORT TPM_RC Serialize_TPM_PT(const TPM_PT& value, std::string* buffer);
2341 
2342 TRUNKS_EXPORT TPM_RC Parse_TPM_PT(std::string* buffer,
2343                                   TPM_PT* value,
2344                                   std::string* value_bytes);
2345 
2346 TRUNKS_EXPORT TPM_RC Serialize_TPM_PT_PCR(const TPM_PT_PCR& value,
2347                                           std::string* buffer);
2348 
2349 TRUNKS_EXPORT TPM_RC Parse_TPM_PT_PCR(std::string* buffer,
2350                                       TPM_PT_PCR* value,
2351                                       std::string* value_bytes);
2352 
2353 TRUNKS_EXPORT TPM_RC Serialize_TPM_PS(const TPM_PS& value, std::string* buffer);
2354 
2355 TRUNKS_EXPORT TPM_RC Parse_TPM_PS(std::string* buffer,
2356                                   TPM_PS* value,
2357                                   std::string* value_bytes);
2358 
2359 TRUNKS_EXPORT TPM_RC Serialize_TPM_HT(const TPM_HT& value, std::string* buffer);
2360 
2361 TRUNKS_EXPORT TPM_RC Parse_TPM_HT(std::string* buffer,
2362                                   TPM_HT* value,
2363                                   std::string* value_bytes);
2364 
2365 TRUNKS_EXPORT TPM_RC Serialize_TPM_RH(const TPM_RH& value, std::string* buffer);
2366 
2367 TRUNKS_EXPORT TPM_RC Parse_TPM_RH(std::string* buffer,
2368                                   TPM_RH* value,
2369                                   std::string* value_bytes);
2370 
2371 TRUNKS_EXPORT TPM_RC Serialize_TPM_HC(const TPM_HC& value, std::string* buffer);
2372 
2373 TRUNKS_EXPORT TPM_RC Parse_TPM_HC(std::string* buffer,
2374                                   TPM_HC* value,
2375                                   std::string* value_bytes);
2376 
2377 TRUNKS_EXPORT TPM_RC
2378 Serialize_TPMS_ALGORITHM_DESCRIPTION(const TPMS_ALGORITHM_DESCRIPTION& value,
2379                                      std::string* buffer);
2380 
2381 TRUNKS_EXPORT TPM_RC
2382 Parse_TPMS_ALGORITHM_DESCRIPTION(std::string* buffer,
2383                                  TPMS_ALGORITHM_DESCRIPTION* value,
2384                                  std::string* value_bytes);
2385 
2386 TRUNKS_EXPORT TPM_RC Serialize_TPMT_HA(const TPMT_HA& value,
2387                                        std::string* buffer);
2388 
2389 TRUNKS_EXPORT TPM_RC Parse_TPMT_HA(std::string* buffer,
2390                                    TPMT_HA* value,
2391                                    std::string* value_bytes);
2392 
2393 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_DIGEST(const TPM2B_DIGEST& value,
2394                                             std::string* buffer);
2395 
2396 TRUNKS_EXPORT TPM_RC Parse_TPM2B_DIGEST(std::string* buffer,
2397                                         TPM2B_DIGEST* value,
2398                                         std::string* value_bytes);
2399 
2400 TRUNKS_EXPORT TPM2B_DIGEST Make_TPM2B_DIGEST(const std::string& bytes);
2401 TRUNKS_EXPORT std::string StringFrom_TPM2B_DIGEST(const TPM2B_DIGEST& tpm2b);
2402 
2403 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_DATA(const TPM2B_DATA& value,
2404                                           std::string* buffer);
2405 
2406 TRUNKS_EXPORT TPM_RC Parse_TPM2B_DATA(std::string* buffer,
2407                                       TPM2B_DATA* value,
2408                                       std::string* value_bytes);
2409 
2410 TRUNKS_EXPORT TPM2B_DATA Make_TPM2B_DATA(const std::string& bytes);
2411 TRUNKS_EXPORT std::string StringFrom_TPM2B_DATA(const TPM2B_DATA& tpm2b);
2412 
2413 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_EVENT(const TPM2B_EVENT& value,
2414                                            std::string* buffer);
2415 
2416 TRUNKS_EXPORT TPM_RC Parse_TPM2B_EVENT(std::string* buffer,
2417                                        TPM2B_EVENT* value,
2418                                        std::string* value_bytes);
2419 
2420 TRUNKS_EXPORT TPM2B_EVENT Make_TPM2B_EVENT(const std::string& bytes);
2421 TRUNKS_EXPORT std::string StringFrom_TPM2B_EVENT(const TPM2B_EVENT& tpm2b);
2422 
2423 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_MAX_BUFFER(const TPM2B_MAX_BUFFER& value,
2424                                                 std::string* buffer);
2425 
2426 TRUNKS_EXPORT TPM_RC Parse_TPM2B_MAX_BUFFER(std::string* buffer,
2427                                             TPM2B_MAX_BUFFER* value,
2428                                             std::string* value_bytes);
2429 
2430 TRUNKS_EXPORT TPM2B_MAX_BUFFER Make_TPM2B_MAX_BUFFER(const std::string& bytes);
2431 TRUNKS_EXPORT std::string StringFrom_TPM2B_MAX_BUFFER(
2432     const TPM2B_MAX_BUFFER& tpm2b);
2433 
2434 TRUNKS_EXPORT TPM_RC
2435 Serialize_TPM2B_MAX_NV_BUFFER(const TPM2B_MAX_NV_BUFFER& value,
2436                               std::string* buffer);
2437 
2438 TRUNKS_EXPORT TPM_RC Parse_TPM2B_MAX_NV_BUFFER(std::string* buffer,
2439                                                TPM2B_MAX_NV_BUFFER* value,
2440                                                std::string* value_bytes);
2441 
2442 TRUNKS_EXPORT TPM2B_MAX_NV_BUFFER
2443 Make_TPM2B_MAX_NV_BUFFER(const std::string& bytes);
2444 TRUNKS_EXPORT std::string StringFrom_TPM2B_MAX_NV_BUFFER(
2445     const TPM2B_MAX_NV_BUFFER& tpm2b);
2446 
2447 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_TIMEOUT(const TPM2B_TIMEOUT& value,
2448                                              std::string* buffer);
2449 
2450 TRUNKS_EXPORT TPM_RC Parse_TPM2B_TIMEOUT(std::string* buffer,
2451                                          TPM2B_TIMEOUT* value,
2452                                          std::string* value_bytes);
2453 
2454 TRUNKS_EXPORT TPM2B_TIMEOUT Make_TPM2B_TIMEOUT(const std::string& bytes);
2455 TRUNKS_EXPORT std::string StringFrom_TPM2B_TIMEOUT(const TPM2B_TIMEOUT& tpm2b);
2456 
2457 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_IV(const TPM2B_IV& value,
2458                                         std::string* buffer);
2459 
2460 TRUNKS_EXPORT TPM_RC Parse_TPM2B_IV(std::string* buffer,
2461                                     TPM2B_IV* value,
2462                                     std::string* value_bytes);
2463 
2464 TRUNKS_EXPORT TPM2B_IV Make_TPM2B_IV(const std::string& bytes);
2465 TRUNKS_EXPORT std::string StringFrom_TPM2B_IV(const TPM2B_IV& tpm2b);
2466 
2467 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_NAME(const TPM2B_NAME& value,
2468                                           std::string* buffer);
2469 
2470 TRUNKS_EXPORT TPM_RC Parse_TPM2B_NAME(std::string* buffer,
2471                                       TPM2B_NAME* value,
2472                                       std::string* value_bytes);
2473 
2474 TRUNKS_EXPORT TPM2B_NAME Make_TPM2B_NAME(const std::string& bytes);
2475 TRUNKS_EXPORT std::string StringFrom_TPM2B_NAME(const TPM2B_NAME& tpm2b);
2476 
2477 TRUNKS_EXPORT TPM_RC Serialize_TPMS_PCR_SELECT(const TPMS_PCR_SELECT& value,
2478                                                std::string* buffer);
2479 
2480 TRUNKS_EXPORT TPM_RC Parse_TPMS_PCR_SELECT(std::string* buffer,
2481                                            TPMS_PCR_SELECT* value,
2482                                            std::string* value_bytes);
2483 
2484 TRUNKS_EXPORT TPM_RC
2485 Serialize_TPMS_PCR_SELECTION(const TPMS_PCR_SELECTION& value,
2486                              std::string* buffer);
2487 
2488 TRUNKS_EXPORT TPM_RC Parse_TPMS_PCR_SELECTION(std::string* buffer,
2489                                               TPMS_PCR_SELECTION* value,
2490                                               std::string* value_bytes);
2491 
2492 TRUNKS_EXPORT TPM_RC Serialize_TPMT_TK_CREATION(const TPMT_TK_CREATION& value,
2493                                                 std::string* buffer);
2494 
2495 TRUNKS_EXPORT TPM_RC Parse_TPMT_TK_CREATION(std::string* buffer,
2496                                             TPMT_TK_CREATION* value,
2497                                             std::string* value_bytes);
2498 
2499 TRUNKS_EXPORT TPM_RC Serialize_TPMT_TK_VERIFIED(const TPMT_TK_VERIFIED& value,
2500                                                 std::string* buffer);
2501 
2502 TRUNKS_EXPORT TPM_RC Parse_TPMT_TK_VERIFIED(std::string* buffer,
2503                                             TPMT_TK_VERIFIED* value,
2504                                             std::string* value_bytes);
2505 
2506 TRUNKS_EXPORT TPM_RC Serialize_TPMT_TK_AUTH(const TPMT_TK_AUTH& value,
2507                                             std::string* buffer);
2508 
2509 TRUNKS_EXPORT TPM_RC Parse_TPMT_TK_AUTH(std::string* buffer,
2510                                         TPMT_TK_AUTH* value,
2511                                         std::string* value_bytes);
2512 
2513 TRUNKS_EXPORT TPM_RC Serialize_TPMT_TK_HASHCHECK(const TPMT_TK_HASHCHECK& value,
2514                                                  std::string* buffer);
2515 
2516 TRUNKS_EXPORT TPM_RC Parse_TPMT_TK_HASHCHECK(std::string* buffer,
2517                                              TPMT_TK_HASHCHECK* value,
2518                                              std::string* value_bytes);
2519 
2520 TRUNKS_EXPORT TPM_RC Serialize_TPMS_ALG_PROPERTY(const TPMS_ALG_PROPERTY& value,
2521                                                  std::string* buffer);
2522 
2523 TRUNKS_EXPORT TPM_RC Parse_TPMS_ALG_PROPERTY(std::string* buffer,
2524                                              TPMS_ALG_PROPERTY* value,
2525                                              std::string* value_bytes);
2526 
2527 TRUNKS_EXPORT TPM_RC
2528 Serialize_TPMS_TAGGED_PROPERTY(const TPMS_TAGGED_PROPERTY& value,
2529                                std::string* buffer);
2530 
2531 TRUNKS_EXPORT TPM_RC Parse_TPMS_TAGGED_PROPERTY(std::string* buffer,
2532                                                 TPMS_TAGGED_PROPERTY* value,
2533                                                 std::string* value_bytes);
2534 
2535 TRUNKS_EXPORT TPM_RC
2536 Serialize_TPMS_TAGGED_PCR_SELECT(const TPMS_TAGGED_PCR_SELECT& value,
2537                                  std::string* buffer);
2538 
2539 TRUNKS_EXPORT TPM_RC Parse_TPMS_TAGGED_PCR_SELECT(std::string* buffer,
2540                                                   TPMS_TAGGED_PCR_SELECT* value,
2541                                                   std::string* value_bytes);
2542 
2543 TRUNKS_EXPORT TPM_RC Serialize_TPML_CC(const TPML_CC& value,
2544                                        std::string* buffer);
2545 
2546 TRUNKS_EXPORT TPM_RC Parse_TPML_CC(std::string* buffer,
2547                                    TPML_CC* value,
2548                                    std::string* value_bytes);
2549 
2550 TRUNKS_EXPORT TPM_RC Serialize_TPML_CCA(const TPML_CCA& value,
2551                                         std::string* buffer);
2552 
2553 TRUNKS_EXPORT TPM_RC Parse_TPML_CCA(std::string* buffer,
2554                                     TPML_CCA* value,
2555                                     std::string* value_bytes);
2556 
2557 TRUNKS_EXPORT TPM_RC Serialize_TPML_ALG(const TPML_ALG& value,
2558                                         std::string* buffer);
2559 
2560 TRUNKS_EXPORT TPM_RC Parse_TPML_ALG(std::string* buffer,
2561                                     TPML_ALG* value,
2562                                     std::string* value_bytes);
2563 
2564 TRUNKS_EXPORT TPM_RC Serialize_TPML_HANDLE(const TPML_HANDLE& value,
2565                                            std::string* buffer);
2566 
2567 TRUNKS_EXPORT TPM_RC Parse_TPML_HANDLE(std::string* buffer,
2568                                        TPML_HANDLE* value,
2569                                        std::string* value_bytes);
2570 
2571 TRUNKS_EXPORT TPM_RC Serialize_TPML_DIGEST(const TPML_DIGEST& value,
2572                                            std::string* buffer);
2573 
2574 TRUNKS_EXPORT TPM_RC Parse_TPML_DIGEST(std::string* buffer,
2575                                        TPML_DIGEST* value,
2576                                        std::string* value_bytes);
2577 
2578 TRUNKS_EXPORT TPM_RC
2579 Serialize_TPML_DIGEST_VALUES(const TPML_DIGEST_VALUES& value,
2580                              std::string* buffer);
2581 
2582 TRUNKS_EXPORT TPM_RC Parse_TPML_DIGEST_VALUES(std::string* buffer,
2583                                               TPML_DIGEST_VALUES* value,
2584                                               std::string* value_bytes);
2585 
2586 TRUNKS_EXPORT TPM_RC
2587 Serialize_TPM2B_DIGEST_VALUES(const TPM2B_DIGEST_VALUES& value,
2588                               std::string* buffer);
2589 
2590 TRUNKS_EXPORT TPM_RC Parse_TPM2B_DIGEST_VALUES(std::string* buffer,
2591                                                TPM2B_DIGEST_VALUES* value,
2592                                                std::string* value_bytes);
2593 
2594 TRUNKS_EXPORT TPM2B_DIGEST_VALUES
2595 Make_TPM2B_DIGEST_VALUES(const std::string& bytes);
2596 TRUNKS_EXPORT std::string StringFrom_TPM2B_DIGEST_VALUES(
2597     const TPM2B_DIGEST_VALUES& tpm2b);
2598 
2599 TRUNKS_EXPORT TPM_RC
2600 Serialize_TPML_PCR_SELECTION(const TPML_PCR_SELECTION& value,
2601                              std::string* buffer);
2602 
2603 TRUNKS_EXPORT TPM_RC Parse_TPML_PCR_SELECTION(std::string* buffer,
2604                                               TPML_PCR_SELECTION* value,
2605                                               std::string* value_bytes);
2606 
2607 TRUNKS_EXPORT TPM_RC Serialize_TPML_ALG_PROPERTY(const TPML_ALG_PROPERTY& value,
2608                                                  std::string* buffer);
2609 
2610 TRUNKS_EXPORT TPM_RC Parse_TPML_ALG_PROPERTY(std::string* buffer,
2611                                              TPML_ALG_PROPERTY* value,
2612                                              std::string* value_bytes);
2613 
2614 TRUNKS_EXPORT TPM_RC
2615 Serialize_TPML_TAGGED_TPM_PROPERTY(const TPML_TAGGED_TPM_PROPERTY& value,
2616                                    std::string* buffer);
2617 
2618 TRUNKS_EXPORT TPM_RC
2619 Parse_TPML_TAGGED_TPM_PROPERTY(std::string* buffer,
2620                                TPML_TAGGED_TPM_PROPERTY* value,
2621                                std::string* value_bytes);
2622 
2623 TRUNKS_EXPORT TPM_RC
2624 Serialize_TPML_TAGGED_PCR_PROPERTY(const TPML_TAGGED_PCR_PROPERTY& value,
2625                                    std::string* buffer);
2626 
2627 TRUNKS_EXPORT TPM_RC
2628 Parse_TPML_TAGGED_PCR_PROPERTY(std::string* buffer,
2629                                TPML_TAGGED_PCR_PROPERTY* value,
2630                                std::string* value_bytes);
2631 
2632 TRUNKS_EXPORT TPM_RC Serialize_TPML_ECC_CURVE(const TPML_ECC_CURVE& value,
2633                                               std::string* buffer);
2634 
2635 TRUNKS_EXPORT TPM_RC Parse_TPML_ECC_CURVE(std::string* buffer,
2636                                           TPML_ECC_CURVE* value,
2637                                           std::string* value_bytes);
2638 
2639 TRUNKS_EXPORT TPM_RC
2640 Serialize_TPMS_CAPABILITY_DATA(const TPMS_CAPABILITY_DATA& value,
2641                                std::string* buffer);
2642 
2643 TRUNKS_EXPORT TPM_RC Parse_TPMS_CAPABILITY_DATA(std::string* buffer,
2644                                                 TPMS_CAPABILITY_DATA* value,
2645                                                 std::string* value_bytes);
2646 
2647 TRUNKS_EXPORT TPM_RC Serialize_TPMS_CLOCK_INFO(const TPMS_CLOCK_INFO& value,
2648                                                std::string* buffer);
2649 
2650 TRUNKS_EXPORT TPM_RC Parse_TPMS_CLOCK_INFO(std::string* buffer,
2651                                            TPMS_CLOCK_INFO* value,
2652                                            std::string* value_bytes);
2653 
2654 TRUNKS_EXPORT TPM_RC Serialize_TPMS_TIME_INFO(const TPMS_TIME_INFO& value,
2655                                               std::string* buffer);
2656 
2657 TRUNKS_EXPORT TPM_RC Parse_TPMS_TIME_INFO(std::string* buffer,
2658                                           TPMS_TIME_INFO* value,
2659                                           std::string* value_bytes);
2660 
2661 TRUNKS_EXPORT TPM_RC
2662 Serialize_TPMS_TIME_ATTEST_INFO(const TPMS_TIME_ATTEST_INFO& value,
2663                                 std::string* buffer);
2664 
2665 TRUNKS_EXPORT TPM_RC Parse_TPMS_TIME_ATTEST_INFO(std::string* buffer,
2666                                                  TPMS_TIME_ATTEST_INFO* value,
2667                                                  std::string* value_bytes);
2668 
2669 TRUNKS_EXPORT TPM_RC Serialize_TPMS_CERTIFY_INFO(const TPMS_CERTIFY_INFO& value,
2670                                                  std::string* buffer);
2671 
2672 TRUNKS_EXPORT TPM_RC Parse_TPMS_CERTIFY_INFO(std::string* buffer,
2673                                              TPMS_CERTIFY_INFO* value,
2674                                              std::string* value_bytes);
2675 
2676 TRUNKS_EXPORT TPM_RC Serialize_TPMS_QUOTE_INFO(const TPMS_QUOTE_INFO& value,
2677                                                std::string* buffer);
2678 
2679 TRUNKS_EXPORT TPM_RC Parse_TPMS_QUOTE_INFO(std::string* buffer,
2680                                            TPMS_QUOTE_INFO* value,
2681                                            std::string* value_bytes);
2682 
2683 TRUNKS_EXPORT TPM_RC
2684 Serialize_TPMS_COMMAND_AUDIT_INFO(const TPMS_COMMAND_AUDIT_INFO& value,
2685                                   std::string* buffer);
2686 
2687 TRUNKS_EXPORT TPM_RC
2688 Parse_TPMS_COMMAND_AUDIT_INFO(std::string* buffer,
2689                               TPMS_COMMAND_AUDIT_INFO* value,
2690                               std::string* value_bytes);
2691 
2692 TRUNKS_EXPORT TPM_RC
2693 Serialize_TPMS_SESSION_AUDIT_INFO(const TPMS_SESSION_AUDIT_INFO& value,
2694                                   std::string* buffer);
2695 
2696 TRUNKS_EXPORT TPM_RC
2697 Parse_TPMS_SESSION_AUDIT_INFO(std::string* buffer,
2698                               TPMS_SESSION_AUDIT_INFO* value,
2699                               std::string* value_bytes);
2700 
2701 TRUNKS_EXPORT TPM_RC
2702 Serialize_TPMS_CREATION_INFO(const TPMS_CREATION_INFO& value,
2703                              std::string* buffer);
2704 
2705 TRUNKS_EXPORT TPM_RC Parse_TPMS_CREATION_INFO(std::string* buffer,
2706                                               TPMS_CREATION_INFO* value,
2707                                               std::string* value_bytes);
2708 
2709 TRUNKS_EXPORT TPM_RC
2710 Serialize_TPMS_NV_CERTIFY_INFO(const TPMS_NV_CERTIFY_INFO& value,
2711                                std::string* buffer);
2712 
2713 TRUNKS_EXPORT TPM_RC Parse_TPMS_NV_CERTIFY_INFO(std::string* buffer,
2714                                                 TPMS_NV_CERTIFY_INFO* value,
2715                                                 std::string* value_bytes);
2716 
2717 TRUNKS_EXPORT TPM_RC Serialize_TPMS_ATTEST(const TPMS_ATTEST& value,
2718                                            std::string* buffer);
2719 
2720 TRUNKS_EXPORT TPM_RC Parse_TPMS_ATTEST(std::string* buffer,
2721                                        TPMS_ATTEST* value,
2722                                        std::string* value_bytes);
2723 
2724 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_ATTEST(const TPM2B_ATTEST& value,
2725                                             std::string* buffer);
2726 
2727 TRUNKS_EXPORT TPM_RC Parse_TPM2B_ATTEST(std::string* buffer,
2728                                         TPM2B_ATTEST* value,
2729                                         std::string* value_bytes);
2730 
2731 TRUNKS_EXPORT TPM2B_ATTEST Make_TPM2B_ATTEST(const std::string& bytes);
2732 TRUNKS_EXPORT std::string StringFrom_TPM2B_ATTEST(const TPM2B_ATTEST& tpm2b);
2733 
2734 TRUNKS_EXPORT TPM_RC Serialize_TPMS_AUTH_COMMAND(const TPMS_AUTH_COMMAND& value,
2735                                                  std::string* buffer);
2736 
2737 TRUNKS_EXPORT TPM_RC Parse_TPMS_AUTH_COMMAND(std::string* buffer,
2738                                              TPMS_AUTH_COMMAND* value,
2739                                              std::string* value_bytes);
2740 
2741 TRUNKS_EXPORT TPM_RC
2742 Serialize_TPMS_AUTH_RESPONSE(const TPMS_AUTH_RESPONSE& value,
2743                              std::string* buffer);
2744 
2745 TRUNKS_EXPORT TPM_RC Parse_TPMS_AUTH_RESPONSE(std::string* buffer,
2746                                               TPMS_AUTH_RESPONSE* value,
2747                                               std::string* value_bytes);
2748 
2749 TRUNKS_EXPORT TPM_RC Serialize_TPMT_SYM_DEF(const TPMT_SYM_DEF& value,
2750                                             std::string* buffer);
2751 
2752 TRUNKS_EXPORT TPM_RC Parse_TPMT_SYM_DEF(std::string* buffer,
2753                                         TPMT_SYM_DEF* value,
2754                                         std::string* value_bytes);
2755 
2756 TRUNKS_EXPORT TPM_RC
2757 Serialize_TPMT_SYM_DEF_OBJECT(const TPMT_SYM_DEF_OBJECT& value,
2758                               std::string* buffer);
2759 
2760 TRUNKS_EXPORT TPM_RC Parse_TPMT_SYM_DEF_OBJECT(std::string* buffer,
2761                                                TPMT_SYM_DEF_OBJECT* value,
2762                                                std::string* value_bytes);
2763 
2764 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_SYM_KEY(const TPM2B_SYM_KEY& value,
2765                                              std::string* buffer);
2766 
2767 TRUNKS_EXPORT TPM_RC Parse_TPM2B_SYM_KEY(std::string* buffer,
2768                                          TPM2B_SYM_KEY* value,
2769                                          std::string* value_bytes);
2770 
2771 TRUNKS_EXPORT TPM2B_SYM_KEY Make_TPM2B_SYM_KEY(const std::string& bytes);
2772 TRUNKS_EXPORT std::string StringFrom_TPM2B_SYM_KEY(const TPM2B_SYM_KEY& tpm2b);
2773 
2774 TRUNKS_EXPORT TPM_RC
2775 Serialize_TPMS_SYMCIPHER_PARMS(const TPMS_SYMCIPHER_PARMS& value,
2776                                std::string* buffer);
2777 
2778 TRUNKS_EXPORT TPM_RC Parse_TPMS_SYMCIPHER_PARMS(std::string* buffer,
2779                                                 TPMS_SYMCIPHER_PARMS* value,
2780                                                 std::string* value_bytes);
2781 
2782 TRUNKS_EXPORT TPM_RC
2783 Serialize_TPM2B_SENSITIVE_DATA(const TPM2B_SENSITIVE_DATA& value,
2784                                std::string* buffer);
2785 
2786 TRUNKS_EXPORT TPM_RC Parse_TPM2B_SENSITIVE_DATA(std::string* buffer,
2787                                                 TPM2B_SENSITIVE_DATA* value,
2788                                                 std::string* value_bytes);
2789 
2790 TRUNKS_EXPORT TPM2B_SENSITIVE_DATA
2791 Make_TPM2B_SENSITIVE_DATA(const std::string& bytes);
2792 TRUNKS_EXPORT std::string StringFrom_TPM2B_SENSITIVE_DATA(
2793     const TPM2B_SENSITIVE_DATA& tpm2b);
2794 
2795 TRUNKS_EXPORT TPM_RC
2796 Serialize_TPMS_SENSITIVE_CREATE(const TPMS_SENSITIVE_CREATE& value,
2797                                 std::string* buffer);
2798 
2799 TRUNKS_EXPORT TPM_RC Parse_TPMS_SENSITIVE_CREATE(std::string* buffer,
2800                                                  TPMS_SENSITIVE_CREATE* value,
2801                                                  std::string* value_bytes);
2802 
2803 TRUNKS_EXPORT TPM_RC
2804 Serialize_TPM2B_SENSITIVE_CREATE(const TPM2B_SENSITIVE_CREATE& value,
2805                                  std::string* buffer);
2806 
2807 TRUNKS_EXPORT TPM_RC Parse_TPM2B_SENSITIVE_CREATE(std::string* buffer,
2808                                                   TPM2B_SENSITIVE_CREATE* value,
2809                                                   std::string* value_bytes);
2810 
2811 TRUNKS_EXPORT TPM2B_SENSITIVE_CREATE
2812 Make_TPM2B_SENSITIVE_CREATE(const TPMS_SENSITIVE_CREATE& inner);
2813 
2814 TRUNKS_EXPORT TPM_RC
2815 Serialize_TPMS_SCHEME_SIGHASH(const TPMS_SCHEME_SIGHASH& value,
2816                               std::string* buffer);
2817 
2818 TRUNKS_EXPORT TPM_RC Parse_TPMS_SCHEME_SIGHASH(std::string* buffer,
2819                                                TPMS_SCHEME_SIGHASH* value,
2820                                                std::string* value_bytes);
2821 
2822 TRUNKS_EXPORT TPM_RC Serialize_TPMS_SCHEME_XOR(const TPMS_SCHEME_XOR& value,
2823                                                std::string* buffer);
2824 
2825 TRUNKS_EXPORT TPM_RC Parse_TPMS_SCHEME_XOR(std::string* buffer,
2826                                            TPMS_SCHEME_XOR* value,
2827                                            std::string* value_bytes);
2828 
2829 TRUNKS_EXPORT TPM_RC
2830 Serialize_TPMT_KEYEDHASH_SCHEME(const TPMT_KEYEDHASH_SCHEME& value,
2831                                 std::string* buffer);
2832 
2833 TRUNKS_EXPORT TPM_RC Parse_TPMT_KEYEDHASH_SCHEME(std::string* buffer,
2834                                                  TPMT_KEYEDHASH_SCHEME* value,
2835                                                  std::string* value_bytes);
2836 
2837 TRUNKS_EXPORT TPM_RC Serialize_TPMS_SCHEME_ECDAA(const TPMS_SCHEME_ECDAA& value,
2838                                                  std::string* buffer);
2839 
2840 TRUNKS_EXPORT TPM_RC Parse_TPMS_SCHEME_ECDAA(std::string* buffer,
2841                                              TPMS_SCHEME_ECDAA* value,
2842                                              std::string* value_bytes);
2843 
2844 TRUNKS_EXPORT TPM_RC Serialize_TPMT_SIG_SCHEME(const TPMT_SIG_SCHEME& value,
2845                                                std::string* buffer);
2846 
2847 TRUNKS_EXPORT TPM_RC Parse_TPMT_SIG_SCHEME(std::string* buffer,
2848                                            TPMT_SIG_SCHEME* value,
2849                                            std::string* value_bytes);
2850 
2851 TRUNKS_EXPORT TPM_RC Serialize_TPMS_SCHEME_OAEP(const TPMS_SCHEME_OAEP& value,
2852                                                 std::string* buffer);
2853 
2854 TRUNKS_EXPORT TPM_RC Parse_TPMS_SCHEME_OAEP(std::string* buffer,
2855                                             TPMS_SCHEME_OAEP* value,
2856                                             std::string* value_bytes);
2857 
2858 TRUNKS_EXPORT TPM_RC Serialize_TPMS_SCHEME_ECDH(const TPMS_SCHEME_ECDH& value,
2859                                                 std::string* buffer);
2860 
2861 TRUNKS_EXPORT TPM_RC Parse_TPMS_SCHEME_ECDH(std::string* buffer,
2862                                             TPMS_SCHEME_ECDH* value,
2863                                             std::string* value_bytes);
2864 
2865 TRUNKS_EXPORT TPM_RC Serialize_TPMS_SCHEME_MGF1(const TPMS_SCHEME_MGF1& value,
2866                                                 std::string* buffer);
2867 
2868 TRUNKS_EXPORT TPM_RC Parse_TPMS_SCHEME_MGF1(std::string* buffer,
2869                                             TPMS_SCHEME_MGF1* value,
2870                                             std::string* value_bytes);
2871 
2872 TRUNKS_EXPORT TPM_RC
2873 Serialize_TPMS_SCHEME_KDF1_SP800_56a(const TPMS_SCHEME_KDF1_SP800_56a& value,
2874                                      std::string* buffer);
2875 
2876 TRUNKS_EXPORT TPM_RC
2877 Parse_TPMS_SCHEME_KDF1_SP800_56a(std::string* buffer,
2878                                  TPMS_SCHEME_KDF1_SP800_56a* value,
2879                                  std::string* value_bytes);
2880 
2881 TRUNKS_EXPORT TPM_RC Serialize_TPMS_SCHEME_KDF2(const TPMS_SCHEME_KDF2& value,
2882                                                 std::string* buffer);
2883 
2884 TRUNKS_EXPORT TPM_RC Parse_TPMS_SCHEME_KDF2(std::string* buffer,
2885                                             TPMS_SCHEME_KDF2* value,
2886                                             std::string* value_bytes);
2887 
2888 TRUNKS_EXPORT TPM_RC
2889 Serialize_TPMS_SCHEME_KDF1_SP800_108(const TPMS_SCHEME_KDF1_SP800_108& value,
2890                                      std::string* buffer);
2891 
2892 TRUNKS_EXPORT TPM_RC
2893 Parse_TPMS_SCHEME_KDF1_SP800_108(std::string* buffer,
2894                                  TPMS_SCHEME_KDF1_SP800_108* value,
2895                                  std::string* value_bytes);
2896 
2897 TRUNKS_EXPORT TPM_RC Serialize_TPMT_KDF_SCHEME(const TPMT_KDF_SCHEME& value,
2898                                                std::string* buffer);
2899 
2900 TRUNKS_EXPORT TPM_RC Parse_TPMT_KDF_SCHEME(std::string* buffer,
2901                                            TPMT_KDF_SCHEME* value,
2902                                            std::string* value_bytes);
2903 
2904 TRUNKS_EXPORT TPM_RC Serialize_TPMT_ASYM_SCHEME(const TPMT_ASYM_SCHEME& value,
2905                                                 std::string* buffer);
2906 
2907 TRUNKS_EXPORT TPM_RC Parse_TPMT_ASYM_SCHEME(std::string* buffer,
2908                                             TPMT_ASYM_SCHEME* value,
2909                                             std::string* value_bytes);
2910 
2911 TRUNKS_EXPORT TPM_RC Serialize_TPMT_RSA_SCHEME(const TPMT_RSA_SCHEME& value,
2912                                                std::string* buffer);
2913 
2914 TRUNKS_EXPORT TPM_RC Parse_TPMT_RSA_SCHEME(std::string* buffer,
2915                                            TPMT_RSA_SCHEME* value,
2916                                            std::string* value_bytes);
2917 
2918 TRUNKS_EXPORT TPM_RC Serialize_TPMT_RSA_DECRYPT(const TPMT_RSA_DECRYPT& value,
2919                                                 std::string* buffer);
2920 
2921 TRUNKS_EXPORT TPM_RC Parse_TPMT_RSA_DECRYPT(std::string* buffer,
2922                                             TPMT_RSA_DECRYPT* value,
2923                                             std::string* value_bytes);
2924 
2925 TRUNKS_EXPORT TPM_RC
2926 Serialize_TPM2B_PUBLIC_KEY_RSA(const TPM2B_PUBLIC_KEY_RSA& value,
2927                                std::string* buffer);
2928 
2929 TRUNKS_EXPORT TPM_RC Parse_TPM2B_PUBLIC_KEY_RSA(std::string* buffer,
2930                                                 TPM2B_PUBLIC_KEY_RSA* value,
2931                                                 std::string* value_bytes);
2932 
2933 TRUNKS_EXPORT TPM2B_PUBLIC_KEY_RSA
2934 Make_TPM2B_PUBLIC_KEY_RSA(const std::string& bytes);
2935 TRUNKS_EXPORT std::string StringFrom_TPM2B_PUBLIC_KEY_RSA(
2936     const TPM2B_PUBLIC_KEY_RSA& tpm2b);
2937 
2938 TRUNKS_EXPORT TPM_RC
2939 Serialize_TPM2B_PRIVATE_KEY_RSA(const TPM2B_PRIVATE_KEY_RSA& value,
2940                                 std::string* buffer);
2941 
2942 TRUNKS_EXPORT TPM_RC Parse_TPM2B_PRIVATE_KEY_RSA(std::string* buffer,
2943                                                  TPM2B_PRIVATE_KEY_RSA* value,
2944                                                  std::string* value_bytes);
2945 
2946 TRUNKS_EXPORT TPM2B_PRIVATE_KEY_RSA
2947 Make_TPM2B_PRIVATE_KEY_RSA(const std::string& bytes);
2948 TRUNKS_EXPORT std::string StringFrom_TPM2B_PRIVATE_KEY_RSA(
2949     const TPM2B_PRIVATE_KEY_RSA& tpm2b);
2950 
2951 TRUNKS_EXPORT TPM_RC
2952 Serialize_TPM2B_ECC_PARAMETER(const TPM2B_ECC_PARAMETER& value,
2953                               std::string* buffer);
2954 
2955 TRUNKS_EXPORT TPM_RC Parse_TPM2B_ECC_PARAMETER(std::string* buffer,
2956                                                TPM2B_ECC_PARAMETER* value,
2957                                                std::string* value_bytes);
2958 
2959 TRUNKS_EXPORT TPM2B_ECC_PARAMETER
2960 Make_TPM2B_ECC_PARAMETER(const std::string& bytes);
2961 TRUNKS_EXPORT std::string StringFrom_TPM2B_ECC_PARAMETER(
2962     const TPM2B_ECC_PARAMETER& tpm2b);
2963 
2964 TRUNKS_EXPORT TPM_RC Serialize_TPMS_ECC_POINT(const TPMS_ECC_POINT& value,
2965                                               std::string* buffer);
2966 
2967 TRUNKS_EXPORT TPM_RC Parse_TPMS_ECC_POINT(std::string* buffer,
2968                                           TPMS_ECC_POINT* value,
2969                                           std::string* value_bytes);
2970 
2971 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_ECC_POINT(const TPM2B_ECC_POINT& value,
2972                                                std::string* buffer);
2973 
2974 TRUNKS_EXPORT TPM_RC Parse_TPM2B_ECC_POINT(std::string* buffer,
2975                                            TPM2B_ECC_POINT* value,
2976                                            std::string* value_bytes);
2977 
2978 TRUNKS_EXPORT TPM2B_ECC_POINT Make_TPM2B_ECC_POINT(const TPMS_ECC_POINT& inner);
2979 
2980 TRUNKS_EXPORT TPM_RC Serialize_TPMT_ECC_SCHEME(const TPMT_ECC_SCHEME& value,
2981                                                std::string* buffer);
2982 
2983 TRUNKS_EXPORT TPM_RC Parse_TPMT_ECC_SCHEME(std::string* buffer,
2984                                            TPMT_ECC_SCHEME* value,
2985                                            std::string* value_bytes);
2986 
2987 TRUNKS_EXPORT TPM_RC
2988 Serialize_TPMS_ALGORITHM_DETAIL_ECC(const TPMS_ALGORITHM_DETAIL_ECC& value,
2989                                     std::string* buffer);
2990 
2991 TRUNKS_EXPORT TPM_RC
2992 Parse_TPMS_ALGORITHM_DETAIL_ECC(std::string* buffer,
2993                                 TPMS_ALGORITHM_DETAIL_ECC* value,
2994                                 std::string* value_bytes);
2995 
2996 TRUNKS_EXPORT TPM_RC
2997 Serialize_TPMS_SIGNATURE_RSASSA(const TPMS_SIGNATURE_RSASSA& value,
2998                                 std::string* buffer);
2999 
3000 TRUNKS_EXPORT TPM_RC Parse_TPMS_SIGNATURE_RSASSA(std::string* buffer,
3001                                                  TPMS_SIGNATURE_RSASSA* value,
3002                                                  std::string* value_bytes);
3003 
3004 TRUNKS_EXPORT TPM_RC
3005 Serialize_TPMS_SIGNATURE_RSAPSS(const TPMS_SIGNATURE_RSAPSS& value,
3006                                 std::string* buffer);
3007 
3008 TRUNKS_EXPORT TPM_RC Parse_TPMS_SIGNATURE_RSAPSS(std::string* buffer,
3009                                                  TPMS_SIGNATURE_RSAPSS* value,
3010                                                  std::string* value_bytes);
3011 
3012 TRUNKS_EXPORT TPM_RC
3013 Serialize_TPMS_SIGNATURE_ECDSA(const TPMS_SIGNATURE_ECDSA& value,
3014                                std::string* buffer);
3015 
3016 TRUNKS_EXPORT TPM_RC Parse_TPMS_SIGNATURE_ECDSA(std::string* buffer,
3017                                                 TPMS_SIGNATURE_ECDSA* value,
3018                                                 std::string* value_bytes);
3019 
3020 TRUNKS_EXPORT TPM_RC Serialize_TPMT_SIGNATURE(const TPMT_SIGNATURE& value,
3021                                               std::string* buffer);
3022 
3023 TRUNKS_EXPORT TPM_RC Parse_TPMT_SIGNATURE(std::string* buffer,
3024                                           TPMT_SIGNATURE* value,
3025                                           std::string* value_bytes);
3026 
3027 TRUNKS_EXPORT TPM_RC
3028 Serialize_TPM2B_ENCRYPTED_SECRET(const TPM2B_ENCRYPTED_SECRET& value,
3029                                  std::string* buffer);
3030 
3031 TRUNKS_EXPORT TPM_RC Parse_TPM2B_ENCRYPTED_SECRET(std::string* buffer,
3032                                                   TPM2B_ENCRYPTED_SECRET* value,
3033                                                   std::string* value_bytes);
3034 
3035 TRUNKS_EXPORT TPM2B_ENCRYPTED_SECRET
3036 Make_TPM2B_ENCRYPTED_SECRET(const std::string& bytes);
3037 TRUNKS_EXPORT std::string StringFrom_TPM2B_ENCRYPTED_SECRET(
3038     const TPM2B_ENCRYPTED_SECRET& tpm2b);
3039 
3040 TRUNKS_EXPORT TPM_RC
3041 Serialize_TPMS_KEYEDHASH_PARMS(const TPMS_KEYEDHASH_PARMS& value,
3042                                std::string* buffer);
3043 
3044 TRUNKS_EXPORT TPM_RC Parse_TPMS_KEYEDHASH_PARMS(std::string* buffer,
3045                                                 TPMS_KEYEDHASH_PARMS* value,
3046                                                 std::string* value_bytes);
3047 
3048 TRUNKS_EXPORT TPM_RC Serialize_TPMS_ASYM_PARMS(const TPMS_ASYM_PARMS& value,
3049                                                std::string* buffer);
3050 
3051 TRUNKS_EXPORT TPM_RC Parse_TPMS_ASYM_PARMS(std::string* buffer,
3052                                            TPMS_ASYM_PARMS* value,
3053                                            std::string* value_bytes);
3054 
3055 TRUNKS_EXPORT TPM_RC Serialize_TPMS_RSA_PARMS(const TPMS_RSA_PARMS& value,
3056                                               std::string* buffer);
3057 
3058 TRUNKS_EXPORT TPM_RC Parse_TPMS_RSA_PARMS(std::string* buffer,
3059                                           TPMS_RSA_PARMS* value,
3060                                           std::string* value_bytes);
3061 
3062 TRUNKS_EXPORT TPM_RC Serialize_TPMS_ECC_PARMS(const TPMS_ECC_PARMS& value,
3063                                               std::string* buffer);
3064 
3065 TRUNKS_EXPORT TPM_RC Parse_TPMS_ECC_PARMS(std::string* buffer,
3066                                           TPMS_ECC_PARMS* value,
3067                                           std::string* value_bytes);
3068 
3069 TRUNKS_EXPORT TPM_RC Serialize_TPMT_PUBLIC_PARMS(const TPMT_PUBLIC_PARMS& value,
3070                                                  std::string* buffer);
3071 
3072 TRUNKS_EXPORT TPM_RC Parse_TPMT_PUBLIC_PARMS(std::string* buffer,
3073                                              TPMT_PUBLIC_PARMS* value,
3074                                              std::string* value_bytes);
3075 
3076 TRUNKS_EXPORT TPM_RC Serialize_TPMT_PUBLIC(const TPMT_PUBLIC& value,
3077                                            std::string* buffer);
3078 
3079 TRUNKS_EXPORT TPM_RC Parse_TPMT_PUBLIC(std::string* buffer,
3080                                        TPMT_PUBLIC* value,
3081                                        std::string* value_bytes);
3082 
3083 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_PUBLIC(const TPM2B_PUBLIC& value,
3084                                             std::string* buffer);
3085 
3086 TRUNKS_EXPORT TPM_RC Parse_TPM2B_PUBLIC(std::string* buffer,
3087                                         TPM2B_PUBLIC* value,
3088                                         std::string* value_bytes);
3089 
3090 TRUNKS_EXPORT TPM2B_PUBLIC Make_TPM2B_PUBLIC(const TPMT_PUBLIC& inner);
3091 
3092 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_PRIVATE_VENDOR_SPECIFIC(
3093     const TPM2B_PRIVATE_VENDOR_SPECIFIC& value,
3094     std::string* buffer);
3095 
3096 TRUNKS_EXPORT TPM_RC
3097 Parse_TPM2B_PRIVATE_VENDOR_SPECIFIC(std::string* buffer,
3098                                     TPM2B_PRIVATE_VENDOR_SPECIFIC* value,
3099                                     std::string* value_bytes);
3100 
3101 TRUNKS_EXPORT TPM2B_PRIVATE_VENDOR_SPECIFIC
3102 Make_TPM2B_PRIVATE_VENDOR_SPECIFIC(const std::string& bytes);
3103 TRUNKS_EXPORT std::string StringFrom_TPM2B_PRIVATE_VENDOR_SPECIFIC(
3104     const TPM2B_PRIVATE_VENDOR_SPECIFIC& tpm2b);
3105 
3106 TRUNKS_EXPORT TPM_RC Serialize_TPMT_SENSITIVE(const TPMT_SENSITIVE& value,
3107                                               std::string* buffer);
3108 
3109 TRUNKS_EXPORT TPM_RC Parse_TPMT_SENSITIVE(std::string* buffer,
3110                                           TPMT_SENSITIVE* value,
3111                                           std::string* value_bytes);
3112 
3113 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_SENSITIVE(const TPM2B_SENSITIVE& value,
3114                                                std::string* buffer);
3115 
3116 TRUNKS_EXPORT TPM_RC Parse_TPM2B_SENSITIVE(std::string* buffer,
3117                                            TPM2B_SENSITIVE* value,
3118                                            std::string* value_bytes);
3119 
3120 TRUNKS_EXPORT TPM2B_SENSITIVE Make_TPM2B_SENSITIVE(const TPMT_SENSITIVE& inner);
3121 
3122 TRUNKS_EXPORT TPM_RC Serialize__PRIVATE(const _PRIVATE& value,
3123                                         std::string* buffer);
3124 
3125 TRUNKS_EXPORT TPM_RC Parse__PRIVATE(std::string* buffer,
3126                                     _PRIVATE* value,
3127                                     std::string* value_bytes);
3128 
3129 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_PRIVATE(const TPM2B_PRIVATE& value,
3130                                              std::string* buffer);
3131 
3132 TRUNKS_EXPORT TPM_RC Parse_TPM2B_PRIVATE(std::string* buffer,
3133                                          TPM2B_PRIVATE* value,
3134                                          std::string* value_bytes);
3135 
3136 TRUNKS_EXPORT TPM2B_PRIVATE Make_TPM2B_PRIVATE(const std::string& bytes);
3137 TRUNKS_EXPORT std::string StringFrom_TPM2B_PRIVATE(const TPM2B_PRIVATE& tpm2b);
3138 
3139 TRUNKS_EXPORT TPM_RC Serialize__ID_OBJECT(const _ID_OBJECT& value,
3140                                           std::string* buffer);
3141 
3142 TRUNKS_EXPORT TPM_RC Parse__ID_OBJECT(std::string* buffer,
3143                                       _ID_OBJECT* value,
3144                                       std::string* value_bytes);
3145 
3146 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_ID_OBJECT(const TPM2B_ID_OBJECT& value,
3147                                                std::string* buffer);
3148 
3149 TRUNKS_EXPORT TPM_RC Parse_TPM2B_ID_OBJECT(std::string* buffer,
3150                                            TPM2B_ID_OBJECT* value,
3151                                            std::string* value_bytes);
3152 
3153 TRUNKS_EXPORT TPM2B_ID_OBJECT Make_TPM2B_ID_OBJECT(const std::string& bytes);
3154 TRUNKS_EXPORT std::string StringFrom_TPM2B_ID_OBJECT(
3155     const TPM2B_ID_OBJECT& tpm2b);
3156 
3157 TRUNKS_EXPORT TPM_RC Serialize_TPMS_NV_PUBLIC(const TPMS_NV_PUBLIC& value,
3158                                               std::string* buffer);
3159 
3160 TRUNKS_EXPORT TPM_RC Parse_TPMS_NV_PUBLIC(std::string* buffer,
3161                                           TPMS_NV_PUBLIC* value,
3162                                           std::string* value_bytes);
3163 
3164 TRUNKS_EXPORT TPM_RC Serialize_TPM2B_NV_PUBLIC(const TPM2B_NV_PUBLIC& value,
3165                                                std::string* buffer);
3166 
3167 TRUNKS_EXPORT TPM_RC Parse_TPM2B_NV_PUBLIC(std::string* buffer,
3168                                            TPM2B_NV_PUBLIC* value,
3169                                            std::string* value_bytes);
3170 
3171 TRUNKS_EXPORT TPM2B_NV_PUBLIC Make_TPM2B_NV_PUBLIC(const TPMS_NV_PUBLIC& inner);
3172 
3173 TRUNKS_EXPORT TPM_RC
3174 Serialize_TPM2B_CONTEXT_SENSITIVE(const TPM2B_CONTEXT_SENSITIVE& value,
3175                                   std::string* buffer);
3176 
3177 TRUNKS_EXPORT TPM_RC
3178 Parse_TPM2B_CONTEXT_SENSITIVE(std::string* buffer,
3179                               TPM2B_CONTEXT_SENSITIVE* value,
3180                               std::string* value_bytes);
3181 
3182 TRUNKS_EXPORT TPM2B_CONTEXT_SENSITIVE
3183 Make_TPM2B_CONTEXT_SENSITIVE(const std::string& bytes);
3184 TRUNKS_EXPORT std::string StringFrom_TPM2B_CONTEXT_SENSITIVE(
3185     const TPM2B_CONTEXT_SENSITIVE& tpm2b);
3186 
3187 TRUNKS_EXPORT TPM_RC Serialize_TPMS_CONTEXT_DATA(const TPMS_CONTEXT_DATA& value,
3188                                                  std::string* buffer);
3189 
3190 TRUNKS_EXPORT TPM_RC Parse_TPMS_CONTEXT_DATA(std::string* buffer,
3191                                              TPMS_CONTEXT_DATA* value,
3192                                              std::string* value_bytes);
3193 
3194 TRUNKS_EXPORT TPM_RC
3195 Serialize_TPM2B_CONTEXT_DATA(const TPM2B_CONTEXT_DATA& value,
3196                              std::string* buffer);
3197 
3198 TRUNKS_EXPORT TPM_RC Parse_TPM2B_CONTEXT_DATA(std::string* buffer,
3199                                               TPM2B_CONTEXT_DATA* value,
3200                                               std::string* value_bytes);
3201 
3202 TRUNKS_EXPORT TPM2B_CONTEXT_DATA
3203 Make_TPM2B_CONTEXT_DATA(const std::string& bytes);
3204 TRUNKS_EXPORT std::string StringFrom_TPM2B_CONTEXT_DATA(
3205     const TPM2B_CONTEXT_DATA& tpm2b);
3206 
3207 TRUNKS_EXPORT TPM_RC Serialize_TPMS_CONTEXT(const TPMS_CONTEXT& value,
3208                                             std::string* buffer);
3209 
3210 TRUNKS_EXPORT TPM_RC Parse_TPMS_CONTEXT(std::string* buffer,
3211                                         TPMS_CONTEXT* value,
3212                                         std::string* value_bytes);
3213 
3214 TRUNKS_EXPORT TPM_RC
3215 Serialize_TPMS_CREATION_DATA(const TPMS_CREATION_DATA& value,
3216                              std::string* buffer);
3217 
3218 TRUNKS_EXPORT TPM_RC Parse_TPMS_CREATION_DATA(std::string* buffer,
3219                                               TPMS_CREATION_DATA* value,
3220                                               std::string* value_bytes);
3221 
3222 TRUNKS_EXPORT TPM_RC
3223 Serialize_TPM2B_CREATION_DATA(const TPM2B_CREATION_DATA& value,
3224                               std::string* buffer);
3225 
3226 TRUNKS_EXPORT TPM_RC Parse_TPM2B_CREATION_DATA(std::string* buffer,
3227                                                TPM2B_CREATION_DATA* value,
3228                                                std::string* value_bytes);
3229 
3230 TRUNKS_EXPORT TPM2B_CREATION_DATA
3231 Make_TPM2B_CREATION_DATA(const TPMS_CREATION_DATA& inner);
3232 
3233 TRUNKS_EXPORT TPM_RC Serialize_TPMU_HA(const TPMU_HA& value,
3234                                        std::string* buffer);
3235 
3236 TRUNKS_EXPORT TPM_RC Parse_TPMU_HA(std::string* buffer,
3237                                    TPMU_HA* value,
3238                                    std::string* value_bytes);
3239 
3240 TRUNKS_EXPORT TPM_RC Serialize_TPMU_NAME(const TPMU_NAME& value,
3241                                          std::string* buffer);
3242 
3243 TRUNKS_EXPORT TPM_RC Parse_TPMU_NAME(std::string* buffer,
3244                                      TPMU_NAME* value,
3245                                      std::string* value_bytes);
3246 
3247 TRUNKS_EXPORT TPM_RC Serialize_TPMU_CAPABILITIES(const TPMU_CAPABILITIES& value,
3248                                                  std::string* buffer);
3249 
3250 TRUNKS_EXPORT TPM_RC Parse_TPMU_CAPABILITIES(std::string* buffer,
3251                                              TPMU_CAPABILITIES* value,
3252                                              std::string* value_bytes);
3253 
3254 TRUNKS_EXPORT TPM_RC Serialize_TPMU_ATTEST(const TPMU_ATTEST& value,
3255                                            std::string* buffer);
3256 
3257 TRUNKS_EXPORT TPM_RC Parse_TPMU_ATTEST(std::string* buffer,
3258                                        TPMU_ATTEST* value,
3259                                        std::string* value_bytes);
3260 
3261 TRUNKS_EXPORT TPM_RC Serialize_TPMU_SYM_KEY_BITS(const TPMU_SYM_KEY_BITS& value,
3262                                                  std::string* buffer);
3263 
3264 TRUNKS_EXPORT TPM_RC Parse_TPMU_SYM_KEY_BITS(std::string* buffer,
3265                                              TPMU_SYM_KEY_BITS* value,
3266                                              std::string* value_bytes);
3267 
3268 TRUNKS_EXPORT TPM_RC Serialize_TPMU_SYM_MODE(const TPMU_SYM_MODE& value,
3269                                              std::string* buffer);
3270 
3271 TRUNKS_EXPORT TPM_RC Parse_TPMU_SYM_MODE(std::string* buffer,
3272                                          TPMU_SYM_MODE* value,
3273                                          std::string* value_bytes);
3274 
3275 TRUNKS_EXPORT TPM_RC
3276 Serialize_TPMU_SCHEME_KEYEDHASH(const TPMU_SCHEME_KEYEDHASH& value,
3277                                 std::string* buffer);
3278 
3279 TRUNKS_EXPORT TPM_RC Parse_TPMU_SCHEME_KEYEDHASH(std::string* buffer,
3280                                                  TPMU_SCHEME_KEYEDHASH* value,
3281                                                  std::string* value_bytes);
3282 
3283 TRUNKS_EXPORT TPM_RC Serialize_TPMU_SIG_SCHEME(const TPMU_SIG_SCHEME& value,
3284                                                std::string* buffer);
3285 
3286 TRUNKS_EXPORT TPM_RC Parse_TPMU_SIG_SCHEME(std::string* buffer,
3287                                            TPMU_SIG_SCHEME* value,
3288                                            std::string* value_bytes);
3289 
3290 TRUNKS_EXPORT TPM_RC Serialize_TPMU_KDF_SCHEME(const TPMU_KDF_SCHEME& value,
3291                                                std::string* buffer);
3292 
3293 TRUNKS_EXPORT TPM_RC Parse_TPMU_KDF_SCHEME(std::string* buffer,
3294                                            TPMU_KDF_SCHEME* value,
3295                                            std::string* value_bytes);
3296 
3297 TRUNKS_EXPORT TPM_RC Serialize_TPMU_ASYM_SCHEME(const TPMU_ASYM_SCHEME& value,
3298                                                 std::string* buffer);
3299 
3300 TRUNKS_EXPORT TPM_RC Parse_TPMU_ASYM_SCHEME(std::string* buffer,
3301                                             TPMU_ASYM_SCHEME* value,
3302                                             std::string* value_bytes);
3303 
3304 TRUNKS_EXPORT TPM_RC Serialize_TPMU_SIGNATURE(const TPMU_SIGNATURE& value,
3305                                               std::string* buffer);
3306 
3307 TRUNKS_EXPORT TPM_RC Parse_TPMU_SIGNATURE(std::string* buffer,
3308                                           TPMU_SIGNATURE* value,
3309                                           std::string* value_bytes);
3310 
3311 TRUNKS_EXPORT TPM_RC
3312 Serialize_TPMU_ENCRYPTED_SECRET(const TPMU_ENCRYPTED_SECRET& value,
3313                                 std::string* buffer);
3314 
3315 TRUNKS_EXPORT TPM_RC Parse_TPMU_ENCRYPTED_SECRET(std::string* buffer,
3316                                                  TPMU_ENCRYPTED_SECRET* value,
3317                                                  std::string* value_bytes);
3318 
3319 TRUNKS_EXPORT TPM_RC Serialize_TPMU_PUBLIC_ID(const TPMU_PUBLIC_ID& value,
3320                                               std::string* buffer);
3321 
3322 TRUNKS_EXPORT TPM_RC Parse_TPMU_PUBLIC_ID(std::string* buffer,
3323                                           TPMU_PUBLIC_ID* value,
3324                                           std::string* value_bytes);
3325 
3326 TRUNKS_EXPORT TPM_RC Serialize_TPMU_PUBLIC_PARMS(const TPMU_PUBLIC_PARMS& value,
3327                                                  std::string* buffer);
3328 
3329 TRUNKS_EXPORT TPM_RC Parse_TPMU_PUBLIC_PARMS(std::string* buffer,
3330                                              TPMU_PUBLIC_PARMS* value,
3331                                              std::string* value_bytes);
3332 
3333 TRUNKS_EXPORT TPM_RC
3334 Serialize_TPMU_SENSITIVE_COMPOSITE(const TPMU_SENSITIVE_COMPOSITE& value,
3335                                    std::string* buffer);
3336 
3337 TRUNKS_EXPORT TPM_RC
3338 Parse_TPMU_SENSITIVE_COMPOSITE(std::string* buffer,
3339                                TPMU_SENSITIVE_COMPOSITE* value,
3340                                std::string* value_bytes);
3341 
3342 TRUNKS_EXPORT TPM_RC Serialize_TPMU_SYM_DETAILS(const TPMU_SYM_DETAILS& value,
3343                                                 std::string* buffer);
3344 
3345 TRUNKS_EXPORT TPM_RC Parse_TPMU_SYM_DETAILS(std::string* buffer,
3346                                             TPMU_SYM_DETAILS* value,
3347                                             std::string* value_bytes);
3348 
3349 class TRUNKS_EXPORT Tpm {
3350  public:
3351   // Does not take ownership of |transceiver|.
Tpm(CommandTransceiver * transceiver)3352   explicit Tpm(CommandTransceiver* transceiver) : transceiver_(transceiver) {}
~Tpm()3353   virtual ~Tpm() {}
3354 
3355   typedef base::Callback<void(TPM_RC response_code)> StartupResponse;
3356   static TPM_RC SerializeCommand_Startup(
3357       const TPM_SU& startup_type,
3358       std::string* serialized_command,
3359       AuthorizationDelegate* authorization_delegate);
3360   static TPM_RC ParseResponse_Startup(
3361       const std::string& response,
3362       AuthorizationDelegate* authorization_delegate);
3363   virtual void Startup(const TPM_SU& startup_type,
3364                        AuthorizationDelegate* authorization_delegate,
3365                        const StartupResponse& callback);
3366   virtual TPM_RC StartupSync(const TPM_SU& startup_type,
3367                              AuthorizationDelegate* authorization_delegate);
3368   typedef base::Callback<void(TPM_RC response_code)> ShutdownResponse;
3369   static TPM_RC SerializeCommand_Shutdown(
3370       const TPM_SU& shutdown_type,
3371       std::string* serialized_command,
3372       AuthorizationDelegate* authorization_delegate);
3373   static TPM_RC ParseResponse_Shutdown(
3374       const std::string& response,
3375       AuthorizationDelegate* authorization_delegate);
3376   virtual void Shutdown(const TPM_SU& shutdown_type,
3377                         AuthorizationDelegate* authorization_delegate,
3378                         const ShutdownResponse& callback);
3379   virtual TPM_RC ShutdownSync(const TPM_SU& shutdown_type,
3380                               AuthorizationDelegate* authorization_delegate);
3381   typedef base::Callback<void(TPM_RC response_code)> SelfTestResponse;
3382   static TPM_RC SerializeCommand_SelfTest(
3383       const TPMI_YES_NO& full_test,
3384       std::string* serialized_command,
3385       AuthorizationDelegate* authorization_delegate);
3386   static TPM_RC ParseResponse_SelfTest(
3387       const std::string& response,
3388       AuthorizationDelegate* authorization_delegate);
3389   virtual void SelfTest(const TPMI_YES_NO& full_test,
3390                         AuthorizationDelegate* authorization_delegate,
3391                         const SelfTestResponse& callback);
3392   virtual TPM_RC SelfTestSync(const TPMI_YES_NO& full_test,
3393                               AuthorizationDelegate* authorization_delegate);
3394   typedef base::Callback<void(TPM_RC response_code, const TPML_ALG& to_do_list)>
3395       IncrementalSelfTestResponse;
3396   static TPM_RC SerializeCommand_IncrementalSelfTest(
3397       const TPML_ALG& to_test,
3398       std::string* serialized_command,
3399       AuthorizationDelegate* authorization_delegate);
3400   static TPM_RC ParseResponse_IncrementalSelfTest(
3401       const std::string& response,
3402       TPML_ALG* to_do_list,
3403       AuthorizationDelegate* authorization_delegate);
3404   virtual void IncrementalSelfTest(
3405       const TPML_ALG& to_test,
3406       AuthorizationDelegate* authorization_delegate,
3407       const IncrementalSelfTestResponse& callback);
3408   virtual TPM_RC IncrementalSelfTestSync(
3409       const TPML_ALG& to_test,
3410       TPML_ALG* to_do_list,
3411       AuthorizationDelegate* authorization_delegate);
3412   typedef base::Callback<void(TPM_RC response_code,
3413                               const TPM2B_MAX_BUFFER& out_data,
3414                               const TPM_RC& test_result)>
3415       GetTestResultResponse;
3416   static TPM_RC SerializeCommand_GetTestResult(
3417       std::string* serialized_command,
3418       AuthorizationDelegate* authorization_delegate);
3419   static TPM_RC ParseResponse_GetTestResult(
3420       const std::string& response,
3421       TPM2B_MAX_BUFFER* out_data,
3422       TPM_RC* test_result,
3423       AuthorizationDelegate* authorization_delegate);
3424   virtual void GetTestResult(AuthorizationDelegate* authorization_delegate,
3425                              const GetTestResultResponse& callback);
3426   virtual TPM_RC GetTestResultSync(
3427       TPM2B_MAX_BUFFER* out_data,
3428       TPM_RC* test_result,
3429       AuthorizationDelegate* authorization_delegate);
3430   typedef base::Callback<void(TPM_RC response_code,
3431                               const TPMI_SH_AUTH_SESSION& session_handle,
3432                               const TPM2B_NONCE& nonce_tpm)>
3433       StartAuthSessionResponse;
3434   static TPM_RC SerializeCommand_StartAuthSession(
3435       const TPMI_DH_OBJECT& tpm_key,
3436       const std::string& tpm_key_name,
3437       const TPMI_DH_ENTITY& bind,
3438       const std::string& bind_name,
3439       const TPM2B_NONCE& nonce_caller,
3440       const TPM2B_ENCRYPTED_SECRET& encrypted_salt,
3441       const TPM_SE& session_type,
3442       const TPMT_SYM_DEF& symmetric,
3443       const TPMI_ALG_HASH& auth_hash,
3444       std::string* serialized_command,
3445       AuthorizationDelegate* authorization_delegate);
3446   static TPM_RC ParseResponse_StartAuthSession(
3447       const std::string& response,
3448       TPMI_SH_AUTH_SESSION* session_handle,
3449       TPM2B_NONCE* nonce_tpm,
3450       AuthorizationDelegate* authorization_delegate);
3451   virtual void StartAuthSession(const TPMI_DH_OBJECT& tpm_key,
3452                                 const std::string& tpm_key_name,
3453                                 const TPMI_DH_ENTITY& bind,
3454                                 const std::string& bind_name,
3455                                 const TPM2B_NONCE& nonce_caller,
3456                                 const TPM2B_ENCRYPTED_SECRET& encrypted_salt,
3457                                 const TPM_SE& session_type,
3458                                 const TPMT_SYM_DEF& symmetric,
3459                                 const TPMI_ALG_HASH& auth_hash,
3460                                 AuthorizationDelegate* authorization_delegate,
3461                                 const StartAuthSessionResponse& callback);
3462   virtual TPM_RC StartAuthSessionSync(
3463       const TPMI_DH_OBJECT& tpm_key,
3464       const std::string& tpm_key_name,
3465       const TPMI_DH_ENTITY& bind,
3466       const std::string& bind_name,
3467       const TPM2B_NONCE& nonce_caller,
3468       const TPM2B_ENCRYPTED_SECRET& encrypted_salt,
3469       const TPM_SE& session_type,
3470       const TPMT_SYM_DEF& symmetric,
3471       const TPMI_ALG_HASH& auth_hash,
3472       TPMI_SH_AUTH_SESSION* session_handle,
3473       TPM2B_NONCE* nonce_tpm,
3474       AuthorizationDelegate* authorization_delegate);
3475   typedef base::Callback<void(TPM_RC response_code)> PolicyRestartResponse;
3476   static TPM_RC SerializeCommand_PolicyRestart(
3477       const TPMI_SH_POLICY& session_handle,
3478       const std::string& session_handle_name,
3479       std::string* serialized_command,
3480       AuthorizationDelegate* authorization_delegate);
3481   static TPM_RC ParseResponse_PolicyRestart(
3482       const std::string& response,
3483       AuthorizationDelegate* authorization_delegate);
3484   virtual void PolicyRestart(const TPMI_SH_POLICY& session_handle,
3485                              const std::string& session_handle_name,
3486                              AuthorizationDelegate* authorization_delegate,
3487                              const PolicyRestartResponse& callback);
3488   virtual TPM_RC PolicyRestartSync(
3489       const TPMI_SH_POLICY& session_handle,
3490       const std::string& session_handle_name,
3491       AuthorizationDelegate* authorization_delegate);
3492   typedef base::Callback<void(TPM_RC response_code,
3493                               const TPM2B_PRIVATE& out_private,
3494                               const TPM2B_PUBLIC& out_public,
3495                               const TPM2B_CREATION_DATA& creation_data,
3496                               const TPM2B_DIGEST& creation_hash,
3497                               const TPMT_TK_CREATION& creation_ticket)>
3498       CreateResponse;
3499   static TPM_RC SerializeCommand_Create(
3500       const TPMI_DH_OBJECT& parent_handle,
3501       const std::string& parent_handle_name,
3502       const TPM2B_SENSITIVE_CREATE& in_sensitive,
3503       const TPM2B_PUBLIC& in_public,
3504       const TPM2B_DATA& outside_info,
3505       const TPML_PCR_SELECTION& creation_pcr,
3506       std::string* serialized_command,
3507       AuthorizationDelegate* authorization_delegate);
3508   static TPM_RC ParseResponse_Create(
3509       const std::string& response,
3510       TPM2B_PRIVATE* out_private,
3511       TPM2B_PUBLIC* out_public,
3512       TPM2B_CREATION_DATA* creation_data,
3513       TPM2B_DIGEST* creation_hash,
3514       TPMT_TK_CREATION* creation_ticket,
3515       AuthorizationDelegate* authorization_delegate);
3516   virtual void Create(const TPMI_DH_OBJECT& parent_handle,
3517                       const std::string& parent_handle_name,
3518                       const TPM2B_SENSITIVE_CREATE& in_sensitive,
3519                       const TPM2B_PUBLIC& in_public,
3520                       const TPM2B_DATA& outside_info,
3521                       const TPML_PCR_SELECTION& creation_pcr,
3522                       AuthorizationDelegate* authorization_delegate,
3523                       const CreateResponse& callback);
3524   virtual TPM_RC CreateSync(const TPMI_DH_OBJECT& parent_handle,
3525                             const std::string& parent_handle_name,
3526                             const TPM2B_SENSITIVE_CREATE& in_sensitive,
3527                             const TPM2B_PUBLIC& in_public,
3528                             const TPM2B_DATA& outside_info,
3529                             const TPML_PCR_SELECTION& creation_pcr,
3530                             TPM2B_PRIVATE* out_private,
3531                             TPM2B_PUBLIC* out_public,
3532                             TPM2B_CREATION_DATA* creation_data,
3533                             TPM2B_DIGEST* creation_hash,
3534                             TPMT_TK_CREATION* creation_ticket,
3535                             AuthorizationDelegate* authorization_delegate);
3536   typedef base::Callback<void(TPM_RC response_code,
3537                               const TPM_HANDLE& object_handle,
3538                               const TPM2B_NAME& name)>
3539       LoadResponse;
3540   static TPM_RC SerializeCommand_Load(
3541       const TPMI_DH_OBJECT& parent_handle,
3542       const std::string& parent_handle_name,
3543       const TPM2B_PRIVATE& in_private,
3544       const TPM2B_PUBLIC& in_public,
3545       std::string* serialized_command,
3546       AuthorizationDelegate* authorization_delegate);
3547   static TPM_RC ParseResponse_Load(
3548       const std::string& response,
3549       TPM_HANDLE* object_handle,
3550       TPM2B_NAME* name,
3551       AuthorizationDelegate* authorization_delegate);
3552   virtual void Load(const TPMI_DH_OBJECT& parent_handle,
3553                     const std::string& parent_handle_name,
3554                     const TPM2B_PRIVATE& in_private,
3555                     const TPM2B_PUBLIC& in_public,
3556                     AuthorizationDelegate* authorization_delegate,
3557                     const LoadResponse& callback);
3558   virtual TPM_RC LoadSync(const TPMI_DH_OBJECT& parent_handle,
3559                           const std::string& parent_handle_name,
3560                           const TPM2B_PRIVATE& in_private,
3561                           const TPM2B_PUBLIC& in_public,
3562                           TPM_HANDLE* object_handle,
3563                           TPM2B_NAME* name,
3564                           AuthorizationDelegate* authorization_delegate);
3565   typedef base::Callback<void(TPM_RC response_code,
3566                               const TPM_HANDLE& object_handle,
3567                               const TPM2B_NAME& name)>
3568       LoadExternalResponse;
3569   static TPM_RC SerializeCommand_LoadExternal(
3570       const TPM2B_SENSITIVE& in_private,
3571       const TPM2B_PUBLIC& in_public,
3572       const TPMI_RH_HIERARCHY& hierarchy,
3573       std::string* serialized_command,
3574       AuthorizationDelegate* authorization_delegate);
3575   static TPM_RC ParseResponse_LoadExternal(
3576       const std::string& response,
3577       TPM_HANDLE* object_handle,
3578       TPM2B_NAME* name,
3579       AuthorizationDelegate* authorization_delegate);
3580   virtual void LoadExternal(const TPM2B_SENSITIVE& in_private,
3581                             const TPM2B_PUBLIC& in_public,
3582                             const TPMI_RH_HIERARCHY& hierarchy,
3583                             AuthorizationDelegate* authorization_delegate,
3584                             const LoadExternalResponse& callback);
3585   virtual TPM_RC LoadExternalSync(
3586       const TPM2B_SENSITIVE& in_private,
3587       const TPM2B_PUBLIC& in_public,
3588       const TPMI_RH_HIERARCHY& hierarchy,
3589       TPM_HANDLE* object_handle,
3590       TPM2B_NAME* name,
3591       AuthorizationDelegate* authorization_delegate);
3592   typedef base::Callback<void(TPM_RC response_code,
3593                               const TPM2B_PUBLIC& out_public,
3594                               const TPM2B_NAME& name,
3595                               const TPM2B_NAME& qualified_name)>
3596       ReadPublicResponse;
3597   static TPM_RC SerializeCommand_ReadPublic(
3598       const TPMI_DH_OBJECT& object_handle,
3599       const std::string& object_handle_name,
3600       std::string* serialized_command,
3601       AuthorizationDelegate* authorization_delegate);
3602   static TPM_RC ParseResponse_ReadPublic(
3603       const std::string& response,
3604       TPM2B_PUBLIC* out_public,
3605       TPM2B_NAME* name,
3606       TPM2B_NAME* qualified_name,
3607       AuthorizationDelegate* authorization_delegate);
3608   virtual void ReadPublic(const TPMI_DH_OBJECT& object_handle,
3609                           const std::string& object_handle_name,
3610                           AuthorizationDelegate* authorization_delegate,
3611                           const ReadPublicResponse& callback);
3612   virtual TPM_RC ReadPublicSync(const TPMI_DH_OBJECT& object_handle,
3613                                 const std::string& object_handle_name,
3614                                 TPM2B_PUBLIC* out_public,
3615                                 TPM2B_NAME* name,
3616                                 TPM2B_NAME* qualified_name,
3617                                 AuthorizationDelegate* authorization_delegate);
3618   typedef base::Callback<void(TPM_RC response_code,
3619                               const TPM2B_DIGEST& cert_info)>
3620       ActivateCredentialResponse;
3621   static TPM_RC SerializeCommand_ActivateCredential(
3622       const TPMI_DH_OBJECT& activate_handle,
3623       const std::string& activate_handle_name,
3624       const TPMI_DH_OBJECT& key_handle,
3625       const std::string& key_handle_name,
3626       const TPM2B_ID_OBJECT& credential_blob,
3627       const TPM2B_ENCRYPTED_SECRET& secret,
3628       std::string* serialized_command,
3629       AuthorizationDelegate* authorization_delegate);
3630   static TPM_RC ParseResponse_ActivateCredential(
3631       const std::string& response,
3632       TPM2B_DIGEST* cert_info,
3633       AuthorizationDelegate* authorization_delegate);
3634   virtual void ActivateCredential(const TPMI_DH_OBJECT& activate_handle,
3635                                   const std::string& activate_handle_name,
3636                                   const TPMI_DH_OBJECT& key_handle,
3637                                   const std::string& key_handle_name,
3638                                   const TPM2B_ID_OBJECT& credential_blob,
3639                                   const TPM2B_ENCRYPTED_SECRET& secret,
3640                                   AuthorizationDelegate* authorization_delegate,
3641                                   const ActivateCredentialResponse& callback);
3642   virtual TPM_RC ActivateCredentialSync(
3643       const TPMI_DH_OBJECT& activate_handle,
3644       const std::string& activate_handle_name,
3645       const TPMI_DH_OBJECT& key_handle,
3646       const std::string& key_handle_name,
3647       const TPM2B_ID_OBJECT& credential_blob,
3648       const TPM2B_ENCRYPTED_SECRET& secret,
3649       TPM2B_DIGEST* cert_info,
3650       AuthorizationDelegate* authorization_delegate);
3651   typedef base::Callback<void(TPM_RC response_code,
3652                               const TPM2B_ID_OBJECT& credential_blob,
3653                               const TPM2B_ENCRYPTED_SECRET& secret)>
3654       MakeCredentialResponse;
3655   static TPM_RC SerializeCommand_MakeCredential(
3656       const TPMI_DH_OBJECT& handle,
3657       const std::string& handle_name,
3658       const TPM2B_DIGEST& credential,
3659       const TPM2B_NAME& object_name,
3660       std::string* serialized_command,
3661       AuthorizationDelegate* authorization_delegate);
3662   static TPM_RC ParseResponse_MakeCredential(
3663       const std::string& response,
3664       TPM2B_ID_OBJECT* credential_blob,
3665       TPM2B_ENCRYPTED_SECRET* secret,
3666       AuthorizationDelegate* authorization_delegate);
3667   virtual void MakeCredential(const TPMI_DH_OBJECT& handle,
3668                               const std::string& handle_name,
3669                               const TPM2B_DIGEST& credential,
3670                               const TPM2B_NAME& object_name,
3671                               AuthorizationDelegate* authorization_delegate,
3672                               const MakeCredentialResponse& callback);
3673   virtual TPM_RC MakeCredentialSync(
3674       const TPMI_DH_OBJECT& handle,
3675       const std::string& handle_name,
3676       const TPM2B_DIGEST& credential,
3677       const TPM2B_NAME& object_name,
3678       TPM2B_ID_OBJECT* credential_blob,
3679       TPM2B_ENCRYPTED_SECRET* secret,
3680       AuthorizationDelegate* authorization_delegate);
3681   typedef base::Callback<void(TPM_RC response_code,
3682                               const TPM2B_SENSITIVE_DATA& out_data)>
3683       UnsealResponse;
3684   static TPM_RC SerializeCommand_Unseal(
3685       const TPMI_DH_OBJECT& item_handle,
3686       const std::string& item_handle_name,
3687       std::string* serialized_command,
3688       AuthorizationDelegate* authorization_delegate);
3689   static TPM_RC ParseResponse_Unseal(
3690       const std::string& response,
3691       TPM2B_SENSITIVE_DATA* out_data,
3692       AuthorizationDelegate* authorization_delegate);
3693   virtual void Unseal(const TPMI_DH_OBJECT& item_handle,
3694                       const std::string& item_handle_name,
3695                       AuthorizationDelegate* authorization_delegate,
3696                       const UnsealResponse& callback);
3697   virtual TPM_RC UnsealSync(const TPMI_DH_OBJECT& item_handle,
3698                             const std::string& item_handle_name,
3699                             TPM2B_SENSITIVE_DATA* out_data,
3700                             AuthorizationDelegate* authorization_delegate);
3701   typedef base::Callback<void(TPM_RC response_code,
3702                               const TPM2B_PRIVATE& out_private)>
3703       ObjectChangeAuthResponse;
3704   static TPM_RC SerializeCommand_ObjectChangeAuth(
3705       const TPMI_DH_OBJECT& object_handle,
3706       const std::string& object_handle_name,
3707       const TPMI_DH_OBJECT& parent_handle,
3708       const std::string& parent_handle_name,
3709       const TPM2B_AUTH& new_auth,
3710       std::string* serialized_command,
3711       AuthorizationDelegate* authorization_delegate);
3712   static TPM_RC ParseResponse_ObjectChangeAuth(
3713       const std::string& response,
3714       TPM2B_PRIVATE* out_private,
3715       AuthorizationDelegate* authorization_delegate);
3716   virtual void ObjectChangeAuth(const TPMI_DH_OBJECT& object_handle,
3717                                 const std::string& object_handle_name,
3718                                 const TPMI_DH_OBJECT& parent_handle,
3719                                 const std::string& parent_handle_name,
3720                                 const TPM2B_AUTH& new_auth,
3721                                 AuthorizationDelegate* authorization_delegate,
3722                                 const ObjectChangeAuthResponse& callback);
3723   virtual TPM_RC ObjectChangeAuthSync(
3724       const TPMI_DH_OBJECT& object_handle,
3725       const std::string& object_handle_name,
3726       const TPMI_DH_OBJECT& parent_handle,
3727       const std::string& parent_handle_name,
3728       const TPM2B_AUTH& new_auth,
3729       TPM2B_PRIVATE* out_private,
3730       AuthorizationDelegate* authorization_delegate);
3731   typedef base::Callback<void(TPM_RC response_code,
3732                               const TPM2B_DATA& encryption_key_out,
3733                               const TPM2B_PRIVATE& duplicate,
3734                               const TPM2B_ENCRYPTED_SECRET& out_sym_seed)>
3735       DuplicateResponse;
3736   static TPM_RC SerializeCommand_Duplicate(
3737       const TPMI_DH_OBJECT& object_handle,
3738       const std::string& object_handle_name,
3739       const TPMI_DH_OBJECT& new_parent_handle,
3740       const std::string& new_parent_handle_name,
3741       const TPM2B_DATA& encryption_key_in,
3742       const TPMT_SYM_DEF_OBJECT& symmetric_alg,
3743       std::string* serialized_command,
3744       AuthorizationDelegate* authorization_delegate);
3745   static TPM_RC ParseResponse_Duplicate(
3746       const std::string& response,
3747       TPM2B_DATA* encryption_key_out,
3748       TPM2B_PRIVATE* duplicate,
3749       TPM2B_ENCRYPTED_SECRET* out_sym_seed,
3750       AuthorizationDelegate* authorization_delegate);
3751   virtual void Duplicate(const TPMI_DH_OBJECT& object_handle,
3752                          const std::string& object_handle_name,
3753                          const TPMI_DH_OBJECT& new_parent_handle,
3754                          const std::string& new_parent_handle_name,
3755                          const TPM2B_DATA& encryption_key_in,
3756                          const TPMT_SYM_DEF_OBJECT& symmetric_alg,
3757                          AuthorizationDelegate* authorization_delegate,
3758                          const DuplicateResponse& callback);
3759   virtual TPM_RC DuplicateSync(const TPMI_DH_OBJECT& object_handle,
3760                                const std::string& object_handle_name,
3761                                const TPMI_DH_OBJECT& new_parent_handle,
3762                                const std::string& new_parent_handle_name,
3763                                const TPM2B_DATA& encryption_key_in,
3764                                const TPMT_SYM_DEF_OBJECT& symmetric_alg,
3765                                TPM2B_DATA* encryption_key_out,
3766                                TPM2B_PRIVATE* duplicate,
3767                                TPM2B_ENCRYPTED_SECRET* out_sym_seed,
3768                                AuthorizationDelegate* authorization_delegate);
3769   typedef base::Callback<void(TPM_RC response_code,
3770                               const TPM2B_PRIVATE& out_duplicate,
3771                               const TPM2B_ENCRYPTED_SECRET& out_sym_seed)>
3772       RewrapResponse;
3773   static TPM_RC SerializeCommand_Rewrap(
3774       const TPMI_DH_OBJECT& old_parent,
3775       const std::string& old_parent_name,
3776       const TPMI_DH_OBJECT& new_parent,
3777       const std::string& new_parent_name,
3778       const TPM2B_PRIVATE& in_duplicate,
3779       const TPM2B_NAME& name,
3780       const TPM2B_ENCRYPTED_SECRET& in_sym_seed,
3781       std::string* serialized_command,
3782       AuthorizationDelegate* authorization_delegate);
3783   static TPM_RC ParseResponse_Rewrap(
3784       const std::string& response,
3785       TPM2B_PRIVATE* out_duplicate,
3786       TPM2B_ENCRYPTED_SECRET* out_sym_seed,
3787       AuthorizationDelegate* authorization_delegate);
3788   virtual void Rewrap(const TPMI_DH_OBJECT& old_parent,
3789                       const std::string& old_parent_name,
3790                       const TPMI_DH_OBJECT& new_parent,
3791                       const std::string& new_parent_name,
3792                       const TPM2B_PRIVATE& in_duplicate,
3793                       const TPM2B_NAME& name,
3794                       const TPM2B_ENCRYPTED_SECRET& in_sym_seed,
3795                       AuthorizationDelegate* authorization_delegate,
3796                       const RewrapResponse& callback);
3797   virtual TPM_RC RewrapSync(const TPMI_DH_OBJECT& old_parent,
3798                             const std::string& old_parent_name,
3799                             const TPMI_DH_OBJECT& new_parent,
3800                             const std::string& new_parent_name,
3801                             const TPM2B_PRIVATE& in_duplicate,
3802                             const TPM2B_NAME& name,
3803                             const TPM2B_ENCRYPTED_SECRET& in_sym_seed,
3804                             TPM2B_PRIVATE* out_duplicate,
3805                             TPM2B_ENCRYPTED_SECRET* out_sym_seed,
3806                             AuthorizationDelegate* authorization_delegate);
3807   typedef base::Callback<void(TPM_RC response_code,
3808                               const TPM2B_PRIVATE& out_private)>
3809       ImportResponse;
3810   static TPM_RC SerializeCommand_Import(
3811       const TPMI_DH_OBJECT& parent_handle,
3812       const std::string& parent_handle_name,
3813       const TPM2B_DATA& encryption_key,
3814       const TPM2B_PUBLIC& object_public,
3815       const TPM2B_PRIVATE& duplicate,
3816       const TPM2B_ENCRYPTED_SECRET& in_sym_seed,
3817       const TPMT_SYM_DEF_OBJECT& symmetric_alg,
3818       std::string* serialized_command,
3819       AuthorizationDelegate* authorization_delegate);
3820   static TPM_RC ParseResponse_Import(
3821       const std::string& response,
3822       TPM2B_PRIVATE* out_private,
3823       AuthorizationDelegate* authorization_delegate);
3824   virtual void Import(const TPMI_DH_OBJECT& parent_handle,
3825                       const std::string& parent_handle_name,
3826                       const TPM2B_DATA& encryption_key,
3827                       const TPM2B_PUBLIC& object_public,
3828                       const TPM2B_PRIVATE& duplicate,
3829                       const TPM2B_ENCRYPTED_SECRET& in_sym_seed,
3830                       const TPMT_SYM_DEF_OBJECT& symmetric_alg,
3831                       AuthorizationDelegate* authorization_delegate,
3832                       const ImportResponse& callback);
3833   virtual TPM_RC ImportSync(const TPMI_DH_OBJECT& parent_handle,
3834                             const std::string& parent_handle_name,
3835                             const TPM2B_DATA& encryption_key,
3836                             const TPM2B_PUBLIC& object_public,
3837                             const TPM2B_PRIVATE& duplicate,
3838                             const TPM2B_ENCRYPTED_SECRET& in_sym_seed,
3839                             const TPMT_SYM_DEF_OBJECT& symmetric_alg,
3840                             TPM2B_PRIVATE* out_private,
3841                             AuthorizationDelegate* authorization_delegate);
3842   typedef base::Callback<void(TPM_RC response_code,
3843                               const TPM2B_PUBLIC_KEY_RSA& out_data)>
3844       RSA_EncryptResponse;
3845   static TPM_RC SerializeCommand_RSA_Encrypt(
3846       const TPMI_DH_OBJECT& key_handle,
3847       const std::string& key_handle_name,
3848       const TPM2B_PUBLIC_KEY_RSA& message,
3849       const TPMT_RSA_DECRYPT& in_scheme,
3850       const TPM2B_DATA& label,
3851       std::string* serialized_command,
3852       AuthorizationDelegate* authorization_delegate);
3853   static TPM_RC ParseResponse_RSA_Encrypt(
3854       const std::string& response,
3855       TPM2B_PUBLIC_KEY_RSA* out_data,
3856       AuthorizationDelegate* authorization_delegate);
3857   virtual void RSA_Encrypt(const TPMI_DH_OBJECT& key_handle,
3858                            const std::string& key_handle_name,
3859                            const TPM2B_PUBLIC_KEY_RSA& message,
3860                            const TPMT_RSA_DECRYPT& in_scheme,
3861                            const TPM2B_DATA& label,
3862                            AuthorizationDelegate* authorization_delegate,
3863                            const RSA_EncryptResponse& callback);
3864   virtual TPM_RC RSA_EncryptSync(const TPMI_DH_OBJECT& key_handle,
3865                                  const std::string& key_handle_name,
3866                                  const TPM2B_PUBLIC_KEY_RSA& message,
3867                                  const TPMT_RSA_DECRYPT& in_scheme,
3868                                  const TPM2B_DATA& label,
3869                                  TPM2B_PUBLIC_KEY_RSA* out_data,
3870                                  AuthorizationDelegate* authorization_delegate);
3871   typedef base::Callback<void(TPM_RC response_code,
3872                               const TPM2B_PUBLIC_KEY_RSA& message)>
3873       RSA_DecryptResponse;
3874   static TPM_RC SerializeCommand_RSA_Decrypt(
3875       const TPMI_DH_OBJECT& key_handle,
3876       const std::string& key_handle_name,
3877       const TPM2B_PUBLIC_KEY_RSA& cipher_text,
3878       const TPMT_RSA_DECRYPT& in_scheme,
3879       const TPM2B_DATA& label,
3880       std::string* serialized_command,
3881       AuthorizationDelegate* authorization_delegate);
3882   static TPM_RC ParseResponse_RSA_Decrypt(
3883       const std::string& response,
3884       TPM2B_PUBLIC_KEY_RSA* message,
3885       AuthorizationDelegate* authorization_delegate);
3886   virtual void RSA_Decrypt(const TPMI_DH_OBJECT& key_handle,
3887                            const std::string& key_handle_name,
3888                            const TPM2B_PUBLIC_KEY_RSA& cipher_text,
3889                            const TPMT_RSA_DECRYPT& in_scheme,
3890                            const TPM2B_DATA& label,
3891                            AuthorizationDelegate* authorization_delegate,
3892                            const RSA_DecryptResponse& callback);
3893   virtual TPM_RC RSA_DecryptSync(const TPMI_DH_OBJECT& key_handle,
3894                                  const std::string& key_handle_name,
3895                                  const TPM2B_PUBLIC_KEY_RSA& cipher_text,
3896                                  const TPMT_RSA_DECRYPT& in_scheme,
3897                                  const TPM2B_DATA& label,
3898                                  TPM2B_PUBLIC_KEY_RSA* message,
3899                                  AuthorizationDelegate* authorization_delegate);
3900   typedef base::Callback<void(TPM_RC response_code,
3901                               const TPM2B_ECC_POINT& z_point,
3902                               const TPM2B_ECC_POINT& pub_point)>
3903       ECDH_KeyGenResponse;
3904   static TPM_RC SerializeCommand_ECDH_KeyGen(
3905       const TPMI_DH_OBJECT& key_handle,
3906       const std::string& key_handle_name,
3907       std::string* serialized_command,
3908       AuthorizationDelegate* authorization_delegate);
3909   static TPM_RC ParseResponse_ECDH_KeyGen(
3910       const std::string& response,
3911       TPM2B_ECC_POINT* z_point,
3912       TPM2B_ECC_POINT* pub_point,
3913       AuthorizationDelegate* authorization_delegate);
3914   virtual void ECDH_KeyGen(const TPMI_DH_OBJECT& key_handle,
3915                            const std::string& key_handle_name,
3916                            AuthorizationDelegate* authorization_delegate,
3917                            const ECDH_KeyGenResponse& callback);
3918   virtual TPM_RC ECDH_KeyGenSync(const TPMI_DH_OBJECT& key_handle,
3919                                  const std::string& key_handle_name,
3920                                  TPM2B_ECC_POINT* z_point,
3921                                  TPM2B_ECC_POINT* pub_point,
3922                                  AuthorizationDelegate* authorization_delegate);
3923   typedef base::Callback<void(TPM_RC response_code,
3924                               const TPM2B_ECC_POINT& out_point)>
3925       ECDH_ZGenResponse;
3926   static TPM_RC SerializeCommand_ECDH_ZGen(
3927       const TPMI_DH_OBJECT& key_handle,
3928       const std::string& key_handle_name,
3929       const TPM2B_ECC_POINT& in_point,
3930       std::string* serialized_command,
3931       AuthorizationDelegate* authorization_delegate);
3932   static TPM_RC ParseResponse_ECDH_ZGen(
3933       const std::string& response,
3934       TPM2B_ECC_POINT* out_point,
3935       AuthorizationDelegate* authorization_delegate);
3936   virtual void ECDH_ZGen(const TPMI_DH_OBJECT& key_handle,
3937                          const std::string& key_handle_name,
3938                          const TPM2B_ECC_POINT& in_point,
3939                          AuthorizationDelegate* authorization_delegate,
3940                          const ECDH_ZGenResponse& callback);
3941   virtual TPM_RC ECDH_ZGenSync(const TPMI_DH_OBJECT& key_handle,
3942                                const std::string& key_handle_name,
3943                                const TPM2B_ECC_POINT& in_point,
3944                                TPM2B_ECC_POINT* out_point,
3945                                AuthorizationDelegate* authorization_delegate);
3946   typedef base::Callback<void(TPM_RC response_code,
3947                               const TPMS_ALGORITHM_DETAIL_ECC& parameters)>
3948       ECC_ParametersResponse;
3949   static TPM_RC SerializeCommand_ECC_Parameters(
3950       const TPMI_ECC_CURVE& curve_id,
3951       std::string* serialized_command,
3952       AuthorizationDelegate* authorization_delegate);
3953   static TPM_RC ParseResponse_ECC_Parameters(
3954       const std::string& response,
3955       TPMS_ALGORITHM_DETAIL_ECC* parameters,
3956       AuthorizationDelegate* authorization_delegate);
3957   virtual void ECC_Parameters(const TPMI_ECC_CURVE& curve_id,
3958                               AuthorizationDelegate* authorization_delegate,
3959                               const ECC_ParametersResponse& callback);
3960   virtual TPM_RC ECC_ParametersSync(
3961       const TPMI_ECC_CURVE& curve_id,
3962       TPMS_ALGORITHM_DETAIL_ECC* parameters,
3963       AuthorizationDelegate* authorization_delegate);
3964   typedef base::Callback<void(TPM_RC response_code,
3965                               const TPM2B_ECC_POINT& out_z1,
3966                               const TPM2B_ECC_POINT& out_z2)>
3967       ZGen_2PhaseResponse;
3968   static TPM_RC SerializeCommand_ZGen_2Phase(
3969       const TPMI_DH_OBJECT& key_a,
3970       const std::string& key_a_name,
3971       const TPM2B_ECC_POINT& in_qs_b,
3972       const TPM2B_ECC_POINT& in_qe_b,
3973       const TPMI_ECC_KEY_EXCHANGE& in_scheme,
3974       const UINT16& counter,
3975       std::string* serialized_command,
3976       AuthorizationDelegate* authorization_delegate);
3977   static TPM_RC ParseResponse_ZGen_2Phase(
3978       const std::string& response,
3979       TPM2B_ECC_POINT* out_z1,
3980       TPM2B_ECC_POINT* out_z2,
3981       AuthorizationDelegate* authorization_delegate);
3982   virtual void ZGen_2Phase(const TPMI_DH_OBJECT& key_a,
3983                            const std::string& key_a_name,
3984                            const TPM2B_ECC_POINT& in_qs_b,
3985                            const TPM2B_ECC_POINT& in_qe_b,
3986                            const TPMI_ECC_KEY_EXCHANGE& in_scheme,
3987                            const UINT16& counter,
3988                            AuthorizationDelegate* authorization_delegate,
3989                            const ZGen_2PhaseResponse& callback);
3990   virtual TPM_RC ZGen_2PhaseSync(const TPMI_DH_OBJECT& key_a,
3991                                  const std::string& key_a_name,
3992                                  const TPM2B_ECC_POINT& in_qs_b,
3993                                  const TPM2B_ECC_POINT& in_qe_b,
3994                                  const TPMI_ECC_KEY_EXCHANGE& in_scheme,
3995                                  const UINT16& counter,
3996                                  TPM2B_ECC_POINT* out_z1,
3997                                  TPM2B_ECC_POINT* out_z2,
3998                                  AuthorizationDelegate* authorization_delegate);
3999   typedef base::Callback<void(TPM_RC response_code,
4000                               const TPM2B_MAX_BUFFER& out_data,
4001                               const TPM2B_IV& iv_out)>
4002       EncryptDecryptResponse;
4003   static TPM_RC SerializeCommand_EncryptDecrypt(
4004       const TPMI_DH_OBJECT& key_handle,
4005       const std::string& key_handle_name,
4006       const TPMI_YES_NO& decrypt,
4007       const TPMI_ALG_SYM_MODE& mode,
4008       const TPM2B_IV& iv_in,
4009       const TPM2B_MAX_BUFFER& in_data,
4010       std::string* serialized_command,
4011       AuthorizationDelegate* authorization_delegate);
4012   static TPM_RC ParseResponse_EncryptDecrypt(
4013       const std::string& response,
4014       TPM2B_MAX_BUFFER* out_data,
4015       TPM2B_IV* iv_out,
4016       AuthorizationDelegate* authorization_delegate);
4017   virtual void EncryptDecrypt(const TPMI_DH_OBJECT& key_handle,
4018                               const std::string& key_handle_name,
4019                               const TPMI_YES_NO& decrypt,
4020                               const TPMI_ALG_SYM_MODE& mode,
4021                               const TPM2B_IV& iv_in,
4022                               const TPM2B_MAX_BUFFER& in_data,
4023                               AuthorizationDelegate* authorization_delegate,
4024                               const EncryptDecryptResponse& callback);
4025   virtual TPM_RC EncryptDecryptSync(
4026       const TPMI_DH_OBJECT& key_handle,
4027       const std::string& key_handle_name,
4028       const TPMI_YES_NO& decrypt,
4029       const TPMI_ALG_SYM_MODE& mode,
4030       const TPM2B_IV& iv_in,
4031       const TPM2B_MAX_BUFFER& in_data,
4032       TPM2B_MAX_BUFFER* out_data,
4033       TPM2B_IV* iv_out,
4034       AuthorizationDelegate* authorization_delegate);
4035   typedef base::Callback<void(TPM_RC response_code,
4036                               const TPM2B_DIGEST& out_hash,
4037                               const TPMT_TK_HASHCHECK& validation)>
4038       HashResponse;
4039   static TPM_RC SerializeCommand_Hash(
4040       const TPM2B_MAX_BUFFER& data,
4041       const TPMI_ALG_HASH& hash_alg,
4042       const TPMI_RH_HIERARCHY& hierarchy,
4043       std::string* serialized_command,
4044       AuthorizationDelegate* authorization_delegate);
4045   static TPM_RC ParseResponse_Hash(
4046       const std::string& response,
4047       TPM2B_DIGEST* out_hash,
4048       TPMT_TK_HASHCHECK* validation,
4049       AuthorizationDelegate* authorization_delegate);
4050   virtual void Hash(const TPM2B_MAX_BUFFER& data,
4051                     const TPMI_ALG_HASH& hash_alg,
4052                     const TPMI_RH_HIERARCHY& hierarchy,
4053                     AuthorizationDelegate* authorization_delegate,
4054                     const HashResponse& callback);
4055   virtual TPM_RC HashSync(const TPM2B_MAX_BUFFER& data,
4056                           const TPMI_ALG_HASH& hash_alg,
4057                           const TPMI_RH_HIERARCHY& hierarchy,
4058                           TPM2B_DIGEST* out_hash,
4059                           TPMT_TK_HASHCHECK* validation,
4060                           AuthorizationDelegate* authorization_delegate);
4061   typedef base::Callback<void(TPM_RC response_code,
4062                               const TPM2B_DIGEST& out_hmac)>
4063       HMACResponse;
4064   static TPM_RC SerializeCommand_HMAC(
4065       const TPMI_DH_OBJECT& handle,
4066       const std::string& handle_name,
4067       const TPM2B_MAX_BUFFER& buffer,
4068       const TPMI_ALG_HASH& hash_alg,
4069       std::string* serialized_command,
4070       AuthorizationDelegate* authorization_delegate);
4071   static TPM_RC ParseResponse_HMAC(
4072       const std::string& response,
4073       TPM2B_DIGEST* out_hmac,
4074       AuthorizationDelegate* authorization_delegate);
4075   virtual void HMAC(const TPMI_DH_OBJECT& handle,
4076                     const std::string& handle_name,
4077                     const TPM2B_MAX_BUFFER& buffer,
4078                     const TPMI_ALG_HASH& hash_alg,
4079                     AuthorizationDelegate* authorization_delegate,
4080                     const HMACResponse& callback);
4081   virtual TPM_RC HMACSync(const TPMI_DH_OBJECT& handle,
4082                           const std::string& handle_name,
4083                           const TPM2B_MAX_BUFFER& buffer,
4084                           const TPMI_ALG_HASH& hash_alg,
4085                           TPM2B_DIGEST* out_hmac,
4086                           AuthorizationDelegate* authorization_delegate);
4087   typedef base::Callback<void(TPM_RC response_code,
4088                               const TPM2B_DIGEST& random_bytes)>
4089       GetRandomResponse;
4090   static TPM_RC SerializeCommand_GetRandom(
4091       const UINT16& bytes_requested,
4092       std::string* serialized_command,
4093       AuthorizationDelegate* authorization_delegate);
4094   static TPM_RC ParseResponse_GetRandom(
4095       const std::string& response,
4096       TPM2B_DIGEST* random_bytes,
4097       AuthorizationDelegate* authorization_delegate);
4098   virtual void GetRandom(const UINT16& bytes_requested,
4099                          AuthorizationDelegate* authorization_delegate,
4100                          const GetRandomResponse& callback);
4101   virtual TPM_RC GetRandomSync(const UINT16& bytes_requested,
4102                                TPM2B_DIGEST* random_bytes,
4103                                AuthorizationDelegate* authorization_delegate);
4104   typedef base::Callback<void(TPM_RC response_code)> StirRandomResponse;
4105   static TPM_RC SerializeCommand_StirRandom(
4106       const TPM2B_SENSITIVE_DATA& in_data,
4107       std::string* serialized_command,
4108       AuthorizationDelegate* authorization_delegate);
4109   static TPM_RC ParseResponse_StirRandom(
4110       const std::string& response,
4111       AuthorizationDelegate* authorization_delegate);
4112   virtual void StirRandom(const TPM2B_SENSITIVE_DATA& in_data,
4113                           AuthorizationDelegate* authorization_delegate,
4114                           const StirRandomResponse& callback);
4115   virtual TPM_RC StirRandomSync(const TPM2B_SENSITIVE_DATA& in_data,
4116                                 AuthorizationDelegate* authorization_delegate);
4117   typedef base::Callback<void(TPM_RC response_code,
4118                               const TPMI_DH_OBJECT& sequence_handle)>
4119       HMAC_StartResponse;
4120   static TPM_RC SerializeCommand_HMAC_Start(
4121       const TPMI_DH_OBJECT& handle,
4122       const std::string& handle_name,
4123       const TPM2B_AUTH& auth,
4124       const TPMI_ALG_HASH& hash_alg,
4125       std::string* serialized_command,
4126       AuthorizationDelegate* authorization_delegate);
4127   static TPM_RC ParseResponse_HMAC_Start(
4128       const std::string& response,
4129       TPMI_DH_OBJECT* sequence_handle,
4130       AuthorizationDelegate* authorization_delegate);
4131   virtual void HMAC_Start(const TPMI_DH_OBJECT& handle,
4132                           const std::string& handle_name,
4133                           const TPM2B_AUTH& auth,
4134                           const TPMI_ALG_HASH& hash_alg,
4135                           AuthorizationDelegate* authorization_delegate,
4136                           const HMAC_StartResponse& callback);
4137   virtual TPM_RC HMAC_StartSync(const TPMI_DH_OBJECT& handle,
4138                                 const std::string& handle_name,
4139                                 const TPM2B_AUTH& auth,
4140                                 const TPMI_ALG_HASH& hash_alg,
4141                                 TPMI_DH_OBJECT* sequence_handle,
4142                                 AuthorizationDelegate* authorization_delegate);
4143   typedef base::Callback<void(TPM_RC response_code,
4144                               const TPMI_DH_OBJECT& sequence_handle)>
4145       HashSequenceStartResponse;
4146   static TPM_RC SerializeCommand_HashSequenceStart(
4147       const TPM2B_AUTH& auth,
4148       const TPMI_ALG_HASH& hash_alg,
4149       std::string* serialized_command,
4150       AuthorizationDelegate* authorization_delegate);
4151   static TPM_RC ParseResponse_HashSequenceStart(
4152       const std::string& response,
4153       TPMI_DH_OBJECT* sequence_handle,
4154       AuthorizationDelegate* authorization_delegate);
4155   virtual void HashSequenceStart(const TPM2B_AUTH& auth,
4156                                  const TPMI_ALG_HASH& hash_alg,
4157                                  AuthorizationDelegate* authorization_delegate,
4158                                  const HashSequenceStartResponse& callback);
4159   virtual TPM_RC HashSequenceStartSync(
4160       const TPM2B_AUTH& auth,
4161       const TPMI_ALG_HASH& hash_alg,
4162       TPMI_DH_OBJECT* sequence_handle,
4163       AuthorizationDelegate* authorization_delegate);
4164   typedef base::Callback<void(TPM_RC response_code)> SequenceUpdateResponse;
4165   static TPM_RC SerializeCommand_SequenceUpdate(
4166       const TPMI_DH_OBJECT& sequence_handle,
4167       const std::string& sequence_handle_name,
4168       const TPM2B_MAX_BUFFER& buffer,
4169       std::string* serialized_command,
4170       AuthorizationDelegate* authorization_delegate);
4171   static TPM_RC ParseResponse_SequenceUpdate(
4172       const std::string& response,
4173       AuthorizationDelegate* authorization_delegate);
4174   virtual void SequenceUpdate(const TPMI_DH_OBJECT& sequence_handle,
4175                               const std::string& sequence_handle_name,
4176                               const TPM2B_MAX_BUFFER& buffer,
4177                               AuthorizationDelegate* authorization_delegate,
4178                               const SequenceUpdateResponse& callback);
4179   virtual TPM_RC SequenceUpdateSync(
4180       const TPMI_DH_OBJECT& sequence_handle,
4181       const std::string& sequence_handle_name,
4182       const TPM2B_MAX_BUFFER& buffer,
4183       AuthorizationDelegate* authorization_delegate);
4184   typedef base::Callback<void(TPM_RC response_code,
4185                               const TPM2B_DIGEST& result,
4186                               const TPMT_TK_HASHCHECK& validation)>
4187       SequenceCompleteResponse;
4188   static TPM_RC SerializeCommand_SequenceComplete(
4189       const TPMI_DH_OBJECT& sequence_handle,
4190       const std::string& sequence_handle_name,
4191       const TPM2B_MAX_BUFFER& buffer,
4192       const TPMI_RH_HIERARCHY& hierarchy,
4193       std::string* serialized_command,
4194       AuthorizationDelegate* authorization_delegate);
4195   static TPM_RC ParseResponse_SequenceComplete(
4196       const std::string& response,
4197       TPM2B_DIGEST* result,
4198       TPMT_TK_HASHCHECK* validation,
4199       AuthorizationDelegate* authorization_delegate);
4200   virtual void SequenceComplete(const TPMI_DH_OBJECT& sequence_handle,
4201                                 const std::string& sequence_handle_name,
4202                                 const TPM2B_MAX_BUFFER& buffer,
4203                                 const TPMI_RH_HIERARCHY& hierarchy,
4204                                 AuthorizationDelegate* authorization_delegate,
4205                                 const SequenceCompleteResponse& callback);
4206   virtual TPM_RC SequenceCompleteSync(
4207       const TPMI_DH_OBJECT& sequence_handle,
4208       const std::string& sequence_handle_name,
4209       const TPM2B_MAX_BUFFER& buffer,
4210       const TPMI_RH_HIERARCHY& hierarchy,
4211       TPM2B_DIGEST* result,
4212       TPMT_TK_HASHCHECK* validation,
4213       AuthorizationDelegate* authorization_delegate);
4214   typedef base::Callback<void(TPM_RC response_code,
4215                               const TPML_DIGEST_VALUES& results)>
4216       EventSequenceCompleteResponse;
4217   static TPM_RC SerializeCommand_EventSequenceComplete(
4218       const TPMI_DH_PCR& pcr_handle,
4219       const std::string& pcr_handle_name,
4220       const TPMI_DH_OBJECT& sequence_handle,
4221       const std::string& sequence_handle_name,
4222       const TPM2B_MAX_BUFFER& buffer,
4223       std::string* serialized_command,
4224       AuthorizationDelegate* authorization_delegate);
4225   static TPM_RC ParseResponse_EventSequenceComplete(
4226       const std::string& response,
4227       TPML_DIGEST_VALUES* results,
4228       AuthorizationDelegate* authorization_delegate);
4229   virtual void EventSequenceComplete(
4230       const TPMI_DH_PCR& pcr_handle,
4231       const std::string& pcr_handle_name,
4232       const TPMI_DH_OBJECT& sequence_handle,
4233       const std::string& sequence_handle_name,
4234       const TPM2B_MAX_BUFFER& buffer,
4235       AuthorizationDelegate* authorization_delegate,
4236       const EventSequenceCompleteResponse& callback);
4237   virtual TPM_RC EventSequenceCompleteSync(
4238       const TPMI_DH_PCR& pcr_handle,
4239       const std::string& pcr_handle_name,
4240       const TPMI_DH_OBJECT& sequence_handle,
4241       const std::string& sequence_handle_name,
4242       const TPM2B_MAX_BUFFER& buffer,
4243       TPML_DIGEST_VALUES* results,
4244       AuthorizationDelegate* authorization_delegate);
4245   typedef base::Callback<void(TPM_RC response_code,
4246                               const TPM2B_ATTEST& certify_info,
4247                               const TPMT_SIGNATURE& signature)>
4248       CertifyResponse;
4249   static TPM_RC SerializeCommand_Certify(
4250       const TPMI_DH_OBJECT& object_handle,
4251       const std::string& object_handle_name,
4252       const TPMI_DH_OBJECT& sign_handle,
4253       const std::string& sign_handle_name,
4254       const TPM2B_DATA& qualifying_data,
4255       const TPMT_SIG_SCHEME& in_scheme,
4256       std::string* serialized_command,
4257       AuthorizationDelegate* authorization_delegate);
4258   static TPM_RC ParseResponse_Certify(
4259       const std::string& response,
4260       TPM2B_ATTEST* certify_info,
4261       TPMT_SIGNATURE* signature,
4262       AuthorizationDelegate* authorization_delegate);
4263   virtual void Certify(const TPMI_DH_OBJECT& object_handle,
4264                        const std::string& object_handle_name,
4265                        const TPMI_DH_OBJECT& sign_handle,
4266                        const std::string& sign_handle_name,
4267                        const TPM2B_DATA& qualifying_data,
4268                        const TPMT_SIG_SCHEME& in_scheme,
4269                        AuthorizationDelegate* authorization_delegate,
4270                        const CertifyResponse& callback);
4271   virtual TPM_RC CertifySync(const TPMI_DH_OBJECT& object_handle,
4272                              const std::string& object_handle_name,
4273                              const TPMI_DH_OBJECT& sign_handle,
4274                              const std::string& sign_handle_name,
4275                              const TPM2B_DATA& qualifying_data,
4276                              const TPMT_SIG_SCHEME& in_scheme,
4277                              TPM2B_ATTEST* certify_info,
4278                              TPMT_SIGNATURE* signature,
4279                              AuthorizationDelegate* authorization_delegate);
4280   typedef base::Callback<void(TPM_RC response_code,
4281                               const TPM2B_ATTEST& certify_info,
4282                               const TPMT_SIGNATURE& signature)>
4283       CertifyCreationResponse;
4284   static TPM_RC SerializeCommand_CertifyCreation(
4285       const TPMI_DH_OBJECT& sign_handle,
4286       const std::string& sign_handle_name,
4287       const TPMI_DH_OBJECT& object_handle,
4288       const std::string& object_handle_name,
4289       const TPM2B_DATA& qualifying_data,
4290       const TPM2B_DIGEST& creation_hash,
4291       const TPMT_SIG_SCHEME& in_scheme,
4292       const TPMT_TK_CREATION& creation_ticket,
4293       std::string* serialized_command,
4294       AuthorizationDelegate* authorization_delegate);
4295   static TPM_RC ParseResponse_CertifyCreation(
4296       const std::string& response,
4297       TPM2B_ATTEST* certify_info,
4298       TPMT_SIGNATURE* signature,
4299       AuthorizationDelegate* authorization_delegate);
4300   virtual void CertifyCreation(const TPMI_DH_OBJECT& sign_handle,
4301                                const std::string& sign_handle_name,
4302                                const TPMI_DH_OBJECT& object_handle,
4303                                const std::string& object_handle_name,
4304                                const TPM2B_DATA& qualifying_data,
4305                                const TPM2B_DIGEST& creation_hash,
4306                                const TPMT_SIG_SCHEME& in_scheme,
4307                                const TPMT_TK_CREATION& creation_ticket,
4308                                AuthorizationDelegate* authorization_delegate,
4309                                const CertifyCreationResponse& callback);
4310   virtual TPM_RC CertifyCreationSync(
4311       const TPMI_DH_OBJECT& sign_handle,
4312       const std::string& sign_handle_name,
4313       const TPMI_DH_OBJECT& object_handle,
4314       const std::string& object_handle_name,
4315       const TPM2B_DATA& qualifying_data,
4316       const TPM2B_DIGEST& creation_hash,
4317       const TPMT_SIG_SCHEME& in_scheme,
4318       const TPMT_TK_CREATION& creation_ticket,
4319       TPM2B_ATTEST* certify_info,
4320       TPMT_SIGNATURE* signature,
4321       AuthorizationDelegate* authorization_delegate);
4322   typedef base::Callback<void(TPM_RC response_code,
4323                               const TPM2B_ATTEST& quoted,
4324                               const TPMT_SIGNATURE& signature)>
4325       QuoteResponse;
4326   static TPM_RC SerializeCommand_Quote(
4327       const TPMI_DH_OBJECT& sign_handle,
4328       const std::string& sign_handle_name,
4329       const TPM2B_DATA& qualifying_data,
4330       const TPMT_SIG_SCHEME& in_scheme,
4331       const TPML_PCR_SELECTION& pcrselect,
4332       std::string* serialized_command,
4333       AuthorizationDelegate* authorization_delegate);
4334   static TPM_RC ParseResponse_Quote(
4335       const std::string& response,
4336       TPM2B_ATTEST* quoted,
4337       TPMT_SIGNATURE* signature,
4338       AuthorizationDelegate* authorization_delegate);
4339   virtual void Quote(const TPMI_DH_OBJECT& sign_handle,
4340                      const std::string& sign_handle_name,
4341                      const TPM2B_DATA& qualifying_data,
4342                      const TPMT_SIG_SCHEME& in_scheme,
4343                      const TPML_PCR_SELECTION& pcrselect,
4344                      AuthorizationDelegate* authorization_delegate,
4345                      const QuoteResponse& callback);
4346   virtual TPM_RC QuoteSync(const TPMI_DH_OBJECT& sign_handle,
4347                            const std::string& sign_handle_name,
4348                            const TPM2B_DATA& qualifying_data,
4349                            const TPMT_SIG_SCHEME& in_scheme,
4350                            const TPML_PCR_SELECTION& pcrselect,
4351                            TPM2B_ATTEST* quoted,
4352                            TPMT_SIGNATURE* signature,
4353                            AuthorizationDelegate* authorization_delegate);
4354   typedef base::Callback<void(TPM_RC response_code,
4355                               const TPM2B_ATTEST& audit_info,
4356                               const TPMT_SIGNATURE& signature)>
4357       GetSessionAuditDigestResponse;
4358   static TPM_RC SerializeCommand_GetSessionAuditDigest(
4359       const TPMI_RH_ENDORSEMENT& privacy_admin_handle,
4360       const std::string& privacy_admin_handle_name,
4361       const TPMI_DH_OBJECT& sign_handle,
4362       const std::string& sign_handle_name,
4363       const TPMI_SH_HMAC& session_handle,
4364       const std::string& session_handle_name,
4365       const TPM2B_DATA& qualifying_data,
4366       const TPMT_SIG_SCHEME& in_scheme,
4367       std::string* serialized_command,
4368       AuthorizationDelegate* authorization_delegate);
4369   static TPM_RC ParseResponse_GetSessionAuditDigest(
4370       const std::string& response,
4371       TPM2B_ATTEST* audit_info,
4372       TPMT_SIGNATURE* signature,
4373       AuthorizationDelegate* authorization_delegate);
4374   virtual void GetSessionAuditDigest(
4375       const TPMI_RH_ENDORSEMENT& privacy_admin_handle,
4376       const std::string& privacy_admin_handle_name,
4377       const TPMI_DH_OBJECT& sign_handle,
4378       const std::string& sign_handle_name,
4379       const TPMI_SH_HMAC& session_handle,
4380       const std::string& session_handle_name,
4381       const TPM2B_DATA& qualifying_data,
4382       const TPMT_SIG_SCHEME& in_scheme,
4383       AuthorizationDelegate* authorization_delegate,
4384       const GetSessionAuditDigestResponse& callback);
4385   virtual TPM_RC GetSessionAuditDigestSync(
4386       const TPMI_RH_ENDORSEMENT& privacy_admin_handle,
4387       const std::string& privacy_admin_handle_name,
4388       const TPMI_DH_OBJECT& sign_handle,
4389       const std::string& sign_handle_name,
4390       const TPMI_SH_HMAC& session_handle,
4391       const std::string& session_handle_name,
4392       const TPM2B_DATA& qualifying_data,
4393       const TPMT_SIG_SCHEME& in_scheme,
4394       TPM2B_ATTEST* audit_info,
4395       TPMT_SIGNATURE* signature,
4396       AuthorizationDelegate* authorization_delegate);
4397   typedef base::Callback<void(TPM_RC response_code,
4398                               const TPM2B_ATTEST& audit_info,
4399                               const TPMT_SIGNATURE& signature)>
4400       GetCommandAuditDigestResponse;
4401   static TPM_RC SerializeCommand_GetCommandAuditDigest(
4402       const TPMI_RH_ENDORSEMENT& privacy_handle,
4403       const std::string& privacy_handle_name,
4404       const TPMI_DH_OBJECT& sign_handle,
4405       const std::string& sign_handle_name,
4406       const TPM2B_DATA& qualifying_data,
4407       const TPMT_SIG_SCHEME& in_scheme,
4408       std::string* serialized_command,
4409       AuthorizationDelegate* authorization_delegate);
4410   static TPM_RC ParseResponse_GetCommandAuditDigest(
4411       const std::string& response,
4412       TPM2B_ATTEST* audit_info,
4413       TPMT_SIGNATURE* signature,
4414       AuthorizationDelegate* authorization_delegate);
4415   virtual void GetCommandAuditDigest(
4416       const TPMI_RH_ENDORSEMENT& privacy_handle,
4417       const std::string& privacy_handle_name,
4418       const TPMI_DH_OBJECT& sign_handle,
4419       const std::string& sign_handle_name,
4420       const TPM2B_DATA& qualifying_data,
4421       const TPMT_SIG_SCHEME& in_scheme,
4422       AuthorizationDelegate* authorization_delegate,
4423       const GetCommandAuditDigestResponse& callback);
4424   virtual TPM_RC GetCommandAuditDigestSync(
4425       const TPMI_RH_ENDORSEMENT& privacy_handle,
4426       const std::string& privacy_handle_name,
4427       const TPMI_DH_OBJECT& sign_handle,
4428       const std::string& sign_handle_name,
4429       const TPM2B_DATA& qualifying_data,
4430       const TPMT_SIG_SCHEME& in_scheme,
4431       TPM2B_ATTEST* audit_info,
4432       TPMT_SIGNATURE* signature,
4433       AuthorizationDelegate* authorization_delegate);
4434   typedef base::Callback<void(TPM_RC response_code,
4435                               const TPM2B_ATTEST& time_info,
4436                               const TPMT_SIGNATURE& signature)>
4437       GetTimeResponse;
4438   static TPM_RC SerializeCommand_GetTime(
4439       const TPMI_RH_ENDORSEMENT& privacy_admin_handle,
4440       const std::string& privacy_admin_handle_name,
4441       const TPMI_DH_OBJECT& sign_handle,
4442       const std::string& sign_handle_name,
4443       const TPM2B_DATA& qualifying_data,
4444       const TPMT_SIG_SCHEME& in_scheme,
4445       std::string* serialized_command,
4446       AuthorizationDelegate* authorization_delegate);
4447   static TPM_RC ParseResponse_GetTime(
4448       const std::string& response,
4449       TPM2B_ATTEST* time_info,
4450       TPMT_SIGNATURE* signature,
4451       AuthorizationDelegate* authorization_delegate);
4452   virtual void GetTime(const TPMI_RH_ENDORSEMENT& privacy_admin_handle,
4453                        const std::string& privacy_admin_handle_name,
4454                        const TPMI_DH_OBJECT& sign_handle,
4455                        const std::string& sign_handle_name,
4456                        const TPM2B_DATA& qualifying_data,
4457                        const TPMT_SIG_SCHEME& in_scheme,
4458                        AuthorizationDelegate* authorization_delegate,
4459                        const GetTimeResponse& callback);
4460   virtual TPM_RC GetTimeSync(const TPMI_RH_ENDORSEMENT& privacy_admin_handle,
4461                              const std::string& privacy_admin_handle_name,
4462                              const TPMI_DH_OBJECT& sign_handle,
4463                              const std::string& sign_handle_name,
4464                              const TPM2B_DATA& qualifying_data,
4465                              const TPMT_SIG_SCHEME& in_scheme,
4466                              TPM2B_ATTEST* time_info,
4467                              TPMT_SIGNATURE* signature,
4468                              AuthorizationDelegate* authorization_delegate);
4469   typedef base::Callback<void(TPM_RC response_code,
4470                               const UINT32& param_size_out,
4471                               const TPM2B_ECC_POINT& k,
4472                               const TPM2B_ECC_POINT& l,
4473                               const TPM2B_ECC_POINT& e,
4474                               const UINT16& counter)>
4475       CommitResponse;
4476   static TPM_RC SerializeCommand_Commit(
4477       const TPMI_DH_OBJECT& sign_handle,
4478       const std::string& sign_handle_name,
4479       const UINT32& param_size,
4480       const TPM2B_ECC_POINT& p1,
4481       const TPM2B_SENSITIVE_DATA& s2,
4482       const TPM2B_ECC_PARAMETER& y2,
4483       std::string* serialized_command,
4484       AuthorizationDelegate* authorization_delegate);
4485   static TPM_RC ParseResponse_Commit(
4486       const std::string& response,
4487       UINT32* param_size_out,
4488       TPM2B_ECC_POINT* k,
4489       TPM2B_ECC_POINT* l,
4490       TPM2B_ECC_POINT* e,
4491       UINT16* counter,
4492       AuthorizationDelegate* authorization_delegate);
4493   virtual void Commit(const TPMI_DH_OBJECT& sign_handle,
4494                       const std::string& sign_handle_name,
4495                       const UINT32& param_size,
4496                       const TPM2B_ECC_POINT& p1,
4497                       const TPM2B_SENSITIVE_DATA& s2,
4498                       const TPM2B_ECC_PARAMETER& y2,
4499                       AuthorizationDelegate* authorization_delegate,
4500                       const CommitResponse& callback);
4501   virtual TPM_RC CommitSync(const TPMI_DH_OBJECT& sign_handle,
4502                             const std::string& sign_handle_name,
4503                             const UINT32& param_size,
4504                             const TPM2B_ECC_POINT& p1,
4505                             const TPM2B_SENSITIVE_DATA& s2,
4506                             const TPM2B_ECC_PARAMETER& y2,
4507                             UINT32* param_size_out,
4508                             TPM2B_ECC_POINT* k,
4509                             TPM2B_ECC_POINT* l,
4510                             TPM2B_ECC_POINT* e,
4511                             UINT16* counter,
4512                             AuthorizationDelegate* authorization_delegate);
4513   typedef base::Callback<void(TPM_RC response_code,
4514                               const UINT32& param_size_out,
4515                               const TPM2B_ECC_POINT& q,
4516                               const UINT16& counter)>
4517       EC_EphemeralResponse;
4518   static TPM_RC SerializeCommand_EC_Ephemeral(
4519       const UINT32& param_size,
4520       const TPMI_ECC_CURVE& curve_id,
4521       std::string* serialized_command,
4522       AuthorizationDelegate* authorization_delegate);
4523   static TPM_RC ParseResponse_EC_Ephemeral(
4524       const std::string& response,
4525       UINT32* param_size_out,
4526       TPM2B_ECC_POINT* q,
4527       UINT16* counter,
4528       AuthorizationDelegate* authorization_delegate);
4529   virtual void EC_Ephemeral(const UINT32& param_size,
4530                             const TPMI_ECC_CURVE& curve_id,
4531                             AuthorizationDelegate* authorization_delegate,
4532                             const EC_EphemeralResponse& callback);
4533   virtual TPM_RC EC_EphemeralSync(
4534       const UINT32& param_size,
4535       const TPMI_ECC_CURVE& curve_id,
4536       UINT32* param_size_out,
4537       TPM2B_ECC_POINT* q,
4538       UINT16* counter,
4539       AuthorizationDelegate* authorization_delegate);
4540   typedef base::Callback<void(TPM_RC response_code,
4541                               const TPMT_TK_VERIFIED& validation)>
4542       VerifySignatureResponse;
4543   static TPM_RC SerializeCommand_VerifySignature(
4544       const TPMI_DH_OBJECT& key_handle,
4545       const std::string& key_handle_name,
4546       const TPM2B_DIGEST& digest,
4547       const TPMT_SIGNATURE& signature,
4548       std::string* serialized_command,
4549       AuthorizationDelegate* authorization_delegate);
4550   static TPM_RC ParseResponse_VerifySignature(
4551       const std::string& response,
4552       TPMT_TK_VERIFIED* validation,
4553       AuthorizationDelegate* authorization_delegate);
4554   virtual void VerifySignature(const TPMI_DH_OBJECT& key_handle,
4555                                const std::string& key_handle_name,
4556                                const TPM2B_DIGEST& digest,
4557                                const TPMT_SIGNATURE& signature,
4558                                AuthorizationDelegate* authorization_delegate,
4559                                const VerifySignatureResponse& callback);
4560   virtual TPM_RC VerifySignatureSync(
4561       const TPMI_DH_OBJECT& key_handle,
4562       const std::string& key_handle_name,
4563       const TPM2B_DIGEST& digest,
4564       const TPMT_SIGNATURE& signature,
4565       TPMT_TK_VERIFIED* validation,
4566       AuthorizationDelegate* authorization_delegate);
4567   typedef base::Callback<void(TPM_RC response_code,
4568                               const TPMT_SIGNATURE& signature)>
4569       SignResponse;
4570   static TPM_RC SerializeCommand_Sign(
4571       const TPMI_DH_OBJECT& key_handle,
4572       const std::string& key_handle_name,
4573       const TPM2B_DIGEST& digest,
4574       const TPMT_SIG_SCHEME& in_scheme,
4575       const TPMT_TK_HASHCHECK& validation,
4576       std::string* serialized_command,
4577       AuthorizationDelegate* authorization_delegate);
4578   static TPM_RC ParseResponse_Sign(
4579       const std::string& response,
4580       TPMT_SIGNATURE* signature,
4581       AuthorizationDelegate* authorization_delegate);
4582   virtual void Sign(const TPMI_DH_OBJECT& key_handle,
4583                     const std::string& key_handle_name,
4584                     const TPM2B_DIGEST& digest,
4585                     const TPMT_SIG_SCHEME& in_scheme,
4586                     const TPMT_TK_HASHCHECK& validation,
4587                     AuthorizationDelegate* authorization_delegate,
4588                     const SignResponse& callback);
4589   virtual TPM_RC SignSync(const TPMI_DH_OBJECT& key_handle,
4590                           const std::string& key_handle_name,
4591                           const TPM2B_DIGEST& digest,
4592                           const TPMT_SIG_SCHEME& in_scheme,
4593                           const TPMT_TK_HASHCHECK& validation,
4594                           TPMT_SIGNATURE* signature,
4595                           AuthorizationDelegate* authorization_delegate);
4596   typedef base::Callback<void(TPM_RC response_code)>
4597       SetCommandCodeAuditStatusResponse;
4598   static TPM_RC SerializeCommand_SetCommandCodeAuditStatus(
4599       const TPMI_RH_PROVISION& auth,
4600       const std::string& auth_name,
4601       const TPMI_ALG_HASH& audit_alg,
4602       const TPML_CC& set_list,
4603       const TPML_CC& clear_list,
4604       std::string* serialized_command,
4605       AuthorizationDelegate* authorization_delegate);
4606   static TPM_RC ParseResponse_SetCommandCodeAuditStatus(
4607       const std::string& response,
4608       AuthorizationDelegate* authorization_delegate);
4609   virtual void SetCommandCodeAuditStatus(
4610       const TPMI_RH_PROVISION& auth,
4611       const std::string& auth_name,
4612       const TPMI_ALG_HASH& audit_alg,
4613       const TPML_CC& set_list,
4614       const TPML_CC& clear_list,
4615       AuthorizationDelegate* authorization_delegate,
4616       const SetCommandCodeAuditStatusResponse& callback);
4617   virtual TPM_RC SetCommandCodeAuditStatusSync(
4618       const TPMI_RH_PROVISION& auth,
4619       const std::string& auth_name,
4620       const TPMI_ALG_HASH& audit_alg,
4621       const TPML_CC& set_list,
4622       const TPML_CC& clear_list,
4623       AuthorizationDelegate* authorization_delegate);
4624   typedef base::Callback<void(TPM_RC response_code)> PCR_ExtendResponse;
4625   static TPM_RC SerializeCommand_PCR_Extend(
4626       const TPMI_DH_PCR& pcr_handle,
4627       const std::string& pcr_handle_name,
4628       const TPML_DIGEST_VALUES& digests,
4629       std::string* serialized_command,
4630       AuthorizationDelegate* authorization_delegate);
4631   static TPM_RC ParseResponse_PCR_Extend(
4632       const std::string& response,
4633       AuthorizationDelegate* authorization_delegate);
4634   virtual void PCR_Extend(const TPMI_DH_PCR& pcr_handle,
4635                           const std::string& pcr_handle_name,
4636                           const TPML_DIGEST_VALUES& digests,
4637                           AuthorizationDelegate* authorization_delegate,
4638                           const PCR_ExtendResponse& callback);
4639   virtual TPM_RC PCR_ExtendSync(const TPMI_DH_PCR& pcr_handle,
4640                                 const std::string& pcr_handle_name,
4641                                 const TPML_DIGEST_VALUES& digests,
4642                                 AuthorizationDelegate* authorization_delegate);
4643   typedef base::Callback<void(TPM_RC response_code,
4644                               const TPML_DIGEST_VALUES& digests)>
4645       PCR_EventResponse;
4646   static TPM_RC SerializeCommand_PCR_Event(
4647       const TPMI_DH_PCR& pcr_handle,
4648       const std::string& pcr_handle_name,
4649       const TPM2B_EVENT& event_data,
4650       std::string* serialized_command,
4651       AuthorizationDelegate* authorization_delegate);
4652   static TPM_RC ParseResponse_PCR_Event(
4653       const std::string& response,
4654       TPML_DIGEST_VALUES* digests,
4655       AuthorizationDelegate* authorization_delegate);
4656   virtual void PCR_Event(const TPMI_DH_PCR& pcr_handle,
4657                          const std::string& pcr_handle_name,
4658                          const TPM2B_EVENT& event_data,
4659                          AuthorizationDelegate* authorization_delegate,
4660                          const PCR_EventResponse& callback);
4661   virtual TPM_RC PCR_EventSync(const TPMI_DH_PCR& pcr_handle,
4662                                const std::string& pcr_handle_name,
4663                                const TPM2B_EVENT& event_data,
4664                                TPML_DIGEST_VALUES* digests,
4665                                AuthorizationDelegate* authorization_delegate);
4666   typedef base::Callback<void(TPM_RC response_code,
4667                               const UINT32& pcr_update_counter,
4668                               const TPML_PCR_SELECTION& pcr_selection_out,
4669                               const TPML_DIGEST& pcr_values)>
4670       PCR_ReadResponse;
4671   static TPM_RC SerializeCommand_PCR_Read(
4672       const TPML_PCR_SELECTION& pcr_selection_in,
4673       std::string* serialized_command,
4674       AuthorizationDelegate* authorization_delegate);
4675   static TPM_RC ParseResponse_PCR_Read(
4676       const std::string& response,
4677       UINT32* pcr_update_counter,
4678       TPML_PCR_SELECTION* pcr_selection_out,
4679       TPML_DIGEST* pcr_values,
4680       AuthorizationDelegate* authorization_delegate);
4681   virtual void PCR_Read(const TPML_PCR_SELECTION& pcr_selection_in,
4682                         AuthorizationDelegate* authorization_delegate,
4683                         const PCR_ReadResponse& callback);
4684   virtual TPM_RC PCR_ReadSync(const TPML_PCR_SELECTION& pcr_selection_in,
4685                               UINT32* pcr_update_counter,
4686                               TPML_PCR_SELECTION* pcr_selection_out,
4687                               TPML_DIGEST* pcr_values,
4688                               AuthorizationDelegate* authorization_delegate);
4689   typedef base::Callback<void(TPM_RC response_code,
4690                               const TPMI_YES_NO& allocation_success,
4691                               const UINT32& max_pcr,
4692                               const UINT32& size_needed,
4693                               const UINT32& size_available)>
4694       PCR_AllocateResponse;
4695   static TPM_RC SerializeCommand_PCR_Allocate(
4696       const TPMI_RH_PLATFORM& auth_handle,
4697       const std::string& auth_handle_name,
4698       const TPML_PCR_SELECTION& pcr_allocation,
4699       std::string* serialized_command,
4700       AuthorizationDelegate* authorization_delegate);
4701   static TPM_RC ParseResponse_PCR_Allocate(
4702       const std::string& response,
4703       TPMI_YES_NO* allocation_success,
4704       UINT32* max_pcr,
4705       UINT32* size_needed,
4706       UINT32* size_available,
4707       AuthorizationDelegate* authorization_delegate);
4708   virtual void PCR_Allocate(const TPMI_RH_PLATFORM& auth_handle,
4709                             const std::string& auth_handle_name,
4710                             const TPML_PCR_SELECTION& pcr_allocation,
4711                             AuthorizationDelegate* authorization_delegate,
4712                             const PCR_AllocateResponse& callback);
4713   virtual TPM_RC PCR_AllocateSync(
4714       const TPMI_RH_PLATFORM& auth_handle,
4715       const std::string& auth_handle_name,
4716       const TPML_PCR_SELECTION& pcr_allocation,
4717       TPMI_YES_NO* allocation_success,
4718       UINT32* max_pcr,
4719       UINT32* size_needed,
4720       UINT32* size_available,
4721       AuthorizationDelegate* authorization_delegate);
4722   typedef base::Callback<void(TPM_RC response_code)> PCR_SetAuthPolicyResponse;
4723   static TPM_RC SerializeCommand_PCR_SetAuthPolicy(
4724       const TPMI_RH_PLATFORM& auth_handle,
4725       const std::string& auth_handle_name,
4726       const TPMI_DH_PCR& pcr_num,
4727       const std::string& pcr_num_name,
4728       const TPM2B_DIGEST& auth_policy,
4729       const TPMI_ALG_HASH& policy_digest,
4730       std::string* serialized_command,
4731       AuthorizationDelegate* authorization_delegate);
4732   static TPM_RC ParseResponse_PCR_SetAuthPolicy(
4733       const std::string& response,
4734       AuthorizationDelegate* authorization_delegate);
4735   virtual void PCR_SetAuthPolicy(const TPMI_RH_PLATFORM& auth_handle,
4736                                  const std::string& auth_handle_name,
4737                                  const TPMI_DH_PCR& pcr_num,
4738                                  const std::string& pcr_num_name,
4739                                  const TPM2B_DIGEST& auth_policy,
4740                                  const TPMI_ALG_HASH& policy_digest,
4741                                  AuthorizationDelegate* authorization_delegate,
4742                                  const PCR_SetAuthPolicyResponse& callback);
4743   virtual TPM_RC PCR_SetAuthPolicySync(
4744       const TPMI_RH_PLATFORM& auth_handle,
4745       const std::string& auth_handle_name,
4746       const TPMI_DH_PCR& pcr_num,
4747       const std::string& pcr_num_name,
4748       const TPM2B_DIGEST& auth_policy,
4749       const TPMI_ALG_HASH& policy_digest,
4750       AuthorizationDelegate* authorization_delegate);
4751   typedef base::Callback<void(TPM_RC response_code)> PCR_SetAuthValueResponse;
4752   static TPM_RC SerializeCommand_PCR_SetAuthValue(
4753       const TPMI_DH_PCR& pcr_handle,
4754       const std::string& pcr_handle_name,
4755       const TPM2B_DIGEST& auth,
4756       std::string* serialized_command,
4757       AuthorizationDelegate* authorization_delegate);
4758   static TPM_RC ParseResponse_PCR_SetAuthValue(
4759       const std::string& response,
4760       AuthorizationDelegate* authorization_delegate);
4761   virtual void PCR_SetAuthValue(const TPMI_DH_PCR& pcr_handle,
4762                                 const std::string& pcr_handle_name,
4763                                 const TPM2B_DIGEST& auth,
4764                                 AuthorizationDelegate* authorization_delegate,
4765                                 const PCR_SetAuthValueResponse& callback);
4766   virtual TPM_RC PCR_SetAuthValueSync(
4767       const TPMI_DH_PCR& pcr_handle,
4768       const std::string& pcr_handle_name,
4769       const TPM2B_DIGEST& auth,
4770       AuthorizationDelegate* authorization_delegate);
4771   typedef base::Callback<void(TPM_RC response_code)> PCR_ResetResponse;
4772   static TPM_RC SerializeCommand_PCR_Reset(
4773       const TPMI_DH_PCR& pcr_handle,
4774       const std::string& pcr_handle_name,
4775       std::string* serialized_command,
4776       AuthorizationDelegate* authorization_delegate);
4777   static TPM_RC ParseResponse_PCR_Reset(
4778       const std::string& response,
4779       AuthorizationDelegate* authorization_delegate);
4780   virtual void PCR_Reset(const TPMI_DH_PCR& pcr_handle,
4781                          const std::string& pcr_handle_name,
4782                          AuthorizationDelegate* authorization_delegate,
4783                          const PCR_ResetResponse& callback);
4784   virtual TPM_RC PCR_ResetSync(const TPMI_DH_PCR& pcr_handle,
4785                                const std::string& pcr_handle_name,
4786                                AuthorizationDelegate* authorization_delegate);
4787   typedef base::Callback<void(TPM_RC response_code,
4788                               const TPM2B_TIMEOUT& timeout,
4789                               const TPMT_TK_AUTH& policy_ticket)>
4790       PolicySignedResponse;
4791   static TPM_RC SerializeCommand_PolicySigned(
4792       const TPMI_DH_OBJECT& auth_object,
4793       const std::string& auth_object_name,
4794       const TPMI_SH_POLICY& policy_session,
4795       const std::string& policy_session_name,
4796       const TPM2B_NONCE& nonce_tpm,
4797       const TPM2B_DIGEST& cp_hash_a,
4798       const TPM2B_NONCE& policy_ref,
4799       const INT32& expiration,
4800       const TPMT_SIGNATURE& auth,
4801       std::string* serialized_command,
4802       AuthorizationDelegate* authorization_delegate);
4803   static TPM_RC ParseResponse_PolicySigned(
4804       const std::string& response,
4805       TPM2B_TIMEOUT* timeout,
4806       TPMT_TK_AUTH* policy_ticket,
4807       AuthorizationDelegate* authorization_delegate);
4808   virtual void PolicySigned(const TPMI_DH_OBJECT& auth_object,
4809                             const std::string& auth_object_name,
4810                             const TPMI_SH_POLICY& policy_session,
4811                             const std::string& policy_session_name,
4812                             const TPM2B_NONCE& nonce_tpm,
4813                             const TPM2B_DIGEST& cp_hash_a,
4814                             const TPM2B_NONCE& policy_ref,
4815                             const INT32& expiration,
4816                             const TPMT_SIGNATURE& auth,
4817                             AuthorizationDelegate* authorization_delegate,
4818                             const PolicySignedResponse& callback);
4819   virtual TPM_RC PolicySignedSync(
4820       const TPMI_DH_OBJECT& auth_object,
4821       const std::string& auth_object_name,
4822       const TPMI_SH_POLICY& policy_session,
4823       const std::string& policy_session_name,
4824       const TPM2B_NONCE& nonce_tpm,
4825       const TPM2B_DIGEST& cp_hash_a,
4826       const TPM2B_NONCE& policy_ref,
4827       const INT32& expiration,
4828       const TPMT_SIGNATURE& auth,
4829       TPM2B_TIMEOUT* timeout,
4830       TPMT_TK_AUTH* policy_ticket,
4831       AuthorizationDelegate* authorization_delegate);
4832   typedef base::Callback<void(TPM_RC response_code,
4833                               const TPM2B_TIMEOUT& timeout,
4834                               const TPMT_TK_AUTH& policy_ticket)>
4835       PolicySecretResponse;
4836   static TPM_RC SerializeCommand_PolicySecret(
4837       const TPMI_DH_ENTITY& auth_handle,
4838       const std::string& auth_handle_name,
4839       const TPMI_SH_POLICY& policy_session,
4840       const std::string& policy_session_name,
4841       const TPM2B_NONCE& nonce_tpm,
4842       const TPM2B_DIGEST& cp_hash_a,
4843       const TPM2B_NONCE& policy_ref,
4844       const INT32& expiration,
4845       std::string* serialized_command,
4846       AuthorizationDelegate* authorization_delegate);
4847   static TPM_RC ParseResponse_PolicySecret(
4848       const std::string& response,
4849       TPM2B_TIMEOUT* timeout,
4850       TPMT_TK_AUTH* policy_ticket,
4851       AuthorizationDelegate* authorization_delegate);
4852   virtual void PolicySecret(const TPMI_DH_ENTITY& auth_handle,
4853                             const std::string& auth_handle_name,
4854                             const TPMI_SH_POLICY& policy_session,
4855                             const std::string& policy_session_name,
4856                             const TPM2B_NONCE& nonce_tpm,
4857                             const TPM2B_DIGEST& cp_hash_a,
4858                             const TPM2B_NONCE& policy_ref,
4859                             const INT32& expiration,
4860                             AuthorizationDelegate* authorization_delegate,
4861                             const PolicySecretResponse& callback);
4862   virtual TPM_RC PolicySecretSync(
4863       const TPMI_DH_ENTITY& auth_handle,
4864       const std::string& auth_handle_name,
4865       const TPMI_SH_POLICY& policy_session,
4866       const std::string& policy_session_name,
4867       const TPM2B_NONCE& nonce_tpm,
4868       const TPM2B_DIGEST& cp_hash_a,
4869       const TPM2B_NONCE& policy_ref,
4870       const INT32& expiration,
4871       TPM2B_TIMEOUT* timeout,
4872       TPMT_TK_AUTH* policy_ticket,
4873       AuthorizationDelegate* authorization_delegate);
4874   typedef base::Callback<void(TPM_RC response_code)> PolicyTicketResponse;
4875   static TPM_RC SerializeCommand_PolicyTicket(
4876       const TPMI_SH_POLICY& policy_session,
4877       const std::string& policy_session_name,
4878       const TPM2B_TIMEOUT& timeout,
4879       const TPM2B_DIGEST& cp_hash_a,
4880       const TPM2B_NONCE& policy_ref,
4881       const TPM2B_NAME& auth_name,
4882       const TPMT_TK_AUTH& ticket,
4883       std::string* serialized_command,
4884       AuthorizationDelegate* authorization_delegate);
4885   static TPM_RC ParseResponse_PolicyTicket(
4886       const std::string& response,
4887       AuthorizationDelegate* authorization_delegate);
4888   virtual void PolicyTicket(const TPMI_SH_POLICY& policy_session,
4889                             const std::string& policy_session_name,
4890                             const TPM2B_TIMEOUT& timeout,
4891                             const TPM2B_DIGEST& cp_hash_a,
4892                             const TPM2B_NONCE& policy_ref,
4893                             const TPM2B_NAME& auth_name,
4894                             const TPMT_TK_AUTH& ticket,
4895                             AuthorizationDelegate* authorization_delegate,
4896                             const PolicyTicketResponse& callback);
4897   virtual TPM_RC PolicyTicketSync(
4898       const TPMI_SH_POLICY& policy_session,
4899       const std::string& policy_session_name,
4900       const TPM2B_TIMEOUT& timeout,
4901       const TPM2B_DIGEST& cp_hash_a,
4902       const TPM2B_NONCE& policy_ref,
4903       const TPM2B_NAME& auth_name,
4904       const TPMT_TK_AUTH& ticket,
4905       AuthorizationDelegate* authorization_delegate);
4906   typedef base::Callback<void(TPM_RC response_code)> PolicyORResponse;
4907   static TPM_RC SerializeCommand_PolicyOR(
4908       const TPMI_SH_POLICY& policy_session,
4909       const std::string& policy_session_name,
4910       const TPML_DIGEST& p_hash_list,
4911       std::string* serialized_command,
4912       AuthorizationDelegate* authorization_delegate);
4913   static TPM_RC ParseResponse_PolicyOR(
4914       const std::string& response,
4915       AuthorizationDelegate* authorization_delegate);
4916   virtual void PolicyOR(const TPMI_SH_POLICY& policy_session,
4917                         const std::string& policy_session_name,
4918                         const TPML_DIGEST& p_hash_list,
4919                         AuthorizationDelegate* authorization_delegate,
4920                         const PolicyORResponse& callback);
4921   virtual TPM_RC PolicyORSync(const TPMI_SH_POLICY& policy_session,
4922                               const std::string& policy_session_name,
4923                               const TPML_DIGEST& p_hash_list,
4924                               AuthorizationDelegate* authorization_delegate);
4925   typedef base::Callback<void(TPM_RC response_code)> PolicyPCRResponse;
4926   static TPM_RC SerializeCommand_PolicyPCR(
4927       const TPMI_SH_POLICY& policy_session,
4928       const std::string& policy_session_name,
4929       const TPM2B_DIGEST& pcr_digest,
4930       const TPML_PCR_SELECTION& pcrs,
4931       std::string* serialized_command,
4932       AuthorizationDelegate* authorization_delegate);
4933   static TPM_RC ParseResponse_PolicyPCR(
4934       const std::string& response,
4935       AuthorizationDelegate* authorization_delegate);
4936   virtual void PolicyPCR(const TPMI_SH_POLICY& policy_session,
4937                          const std::string& policy_session_name,
4938                          const TPM2B_DIGEST& pcr_digest,
4939                          const TPML_PCR_SELECTION& pcrs,
4940                          AuthorizationDelegate* authorization_delegate,
4941                          const PolicyPCRResponse& callback);
4942   virtual TPM_RC PolicyPCRSync(const TPMI_SH_POLICY& policy_session,
4943                                const std::string& policy_session_name,
4944                                const TPM2B_DIGEST& pcr_digest,
4945                                const TPML_PCR_SELECTION& pcrs,
4946                                AuthorizationDelegate* authorization_delegate);
4947   typedef base::Callback<void(TPM_RC response_code)> PolicyLocalityResponse;
4948   static TPM_RC SerializeCommand_PolicyLocality(
4949       const TPMI_SH_POLICY& policy_session,
4950       const std::string& policy_session_name,
4951       const TPMA_LOCALITY& locality,
4952       std::string* serialized_command,
4953       AuthorizationDelegate* authorization_delegate);
4954   static TPM_RC ParseResponse_PolicyLocality(
4955       const std::string& response,
4956       AuthorizationDelegate* authorization_delegate);
4957   virtual void PolicyLocality(const TPMI_SH_POLICY& policy_session,
4958                               const std::string& policy_session_name,
4959                               const TPMA_LOCALITY& locality,
4960                               AuthorizationDelegate* authorization_delegate,
4961                               const PolicyLocalityResponse& callback);
4962   virtual TPM_RC PolicyLocalitySync(
4963       const TPMI_SH_POLICY& policy_session,
4964       const std::string& policy_session_name,
4965       const TPMA_LOCALITY& locality,
4966       AuthorizationDelegate* authorization_delegate);
4967   typedef base::Callback<void(TPM_RC response_code)> PolicyNVResponse;
4968   static TPM_RC SerializeCommand_PolicyNV(
4969       const TPMI_RH_NV_AUTH& auth_handle,
4970       const std::string& auth_handle_name,
4971       const TPMI_RH_NV_INDEX& nv_index,
4972       const std::string& nv_index_name,
4973       const TPMI_SH_POLICY& policy_session,
4974       const std::string& policy_session_name,
4975       const TPM2B_OPERAND& operand_b,
4976       const UINT16& offset,
4977       const TPM_EO& operation,
4978       std::string* serialized_command,
4979       AuthorizationDelegate* authorization_delegate);
4980   static TPM_RC ParseResponse_PolicyNV(
4981       const std::string& response,
4982       AuthorizationDelegate* authorization_delegate);
4983   virtual void PolicyNV(const TPMI_RH_NV_AUTH& auth_handle,
4984                         const std::string& auth_handle_name,
4985                         const TPMI_RH_NV_INDEX& nv_index,
4986                         const std::string& nv_index_name,
4987                         const TPMI_SH_POLICY& policy_session,
4988                         const std::string& policy_session_name,
4989                         const TPM2B_OPERAND& operand_b,
4990                         const UINT16& offset,
4991                         const TPM_EO& operation,
4992                         AuthorizationDelegate* authorization_delegate,
4993                         const PolicyNVResponse& callback);
4994   virtual TPM_RC PolicyNVSync(const TPMI_RH_NV_AUTH& auth_handle,
4995                               const std::string& auth_handle_name,
4996                               const TPMI_RH_NV_INDEX& nv_index,
4997                               const std::string& nv_index_name,
4998                               const TPMI_SH_POLICY& policy_session,
4999                               const std::string& policy_session_name,
5000                               const TPM2B_OPERAND& operand_b,
5001                               const UINT16& offset,
5002                               const TPM_EO& operation,
5003                               AuthorizationDelegate* authorization_delegate);
5004   typedef base::Callback<void(TPM_RC response_code)> PolicyCounterTimerResponse;
5005   static TPM_RC SerializeCommand_PolicyCounterTimer(
5006       const TPMI_SH_POLICY& policy_session,
5007       const std::string& policy_session_name,
5008       const TPM2B_OPERAND& operand_b,
5009       const UINT16& offset,
5010       const TPM_EO& operation,
5011       std::string* serialized_command,
5012       AuthorizationDelegate* authorization_delegate);
5013   static TPM_RC ParseResponse_PolicyCounterTimer(
5014       const std::string& response,
5015       AuthorizationDelegate* authorization_delegate);
5016   virtual void PolicyCounterTimer(const TPMI_SH_POLICY& policy_session,
5017                                   const std::string& policy_session_name,
5018                                   const TPM2B_OPERAND& operand_b,
5019                                   const UINT16& offset,
5020                                   const TPM_EO& operation,
5021                                   AuthorizationDelegate* authorization_delegate,
5022                                   const PolicyCounterTimerResponse& callback);
5023   virtual TPM_RC PolicyCounterTimerSync(
5024       const TPMI_SH_POLICY& policy_session,
5025       const std::string& policy_session_name,
5026       const TPM2B_OPERAND& operand_b,
5027       const UINT16& offset,
5028       const TPM_EO& operation,
5029       AuthorizationDelegate* authorization_delegate);
5030   typedef base::Callback<void(TPM_RC response_code)> PolicyCommandCodeResponse;
5031   static TPM_RC SerializeCommand_PolicyCommandCode(
5032       const TPMI_SH_POLICY& policy_session,
5033       const std::string& policy_session_name,
5034       const TPM_CC& code,
5035       std::string* serialized_command,
5036       AuthorizationDelegate* authorization_delegate);
5037   static TPM_RC ParseResponse_PolicyCommandCode(
5038       const std::string& response,
5039       AuthorizationDelegate* authorization_delegate);
5040   virtual void PolicyCommandCode(const TPMI_SH_POLICY& policy_session,
5041                                  const std::string& policy_session_name,
5042                                  const TPM_CC& code,
5043                                  AuthorizationDelegate* authorization_delegate,
5044                                  const PolicyCommandCodeResponse& callback);
5045   virtual TPM_RC PolicyCommandCodeSync(
5046       const TPMI_SH_POLICY& policy_session,
5047       const std::string& policy_session_name,
5048       const TPM_CC& code,
5049       AuthorizationDelegate* authorization_delegate);
5050   typedef base::Callback<void(TPM_RC response_code)>
5051       PolicyPhysicalPresenceResponse;
5052   static TPM_RC SerializeCommand_PolicyPhysicalPresence(
5053       const TPMI_SH_POLICY& policy_session,
5054       const std::string& policy_session_name,
5055       std::string* serialized_command,
5056       AuthorizationDelegate* authorization_delegate);
5057   static TPM_RC ParseResponse_PolicyPhysicalPresence(
5058       const std::string& response,
5059       AuthorizationDelegate* authorization_delegate);
5060   virtual void PolicyPhysicalPresence(
5061       const TPMI_SH_POLICY& policy_session,
5062       const std::string& policy_session_name,
5063       AuthorizationDelegate* authorization_delegate,
5064       const PolicyPhysicalPresenceResponse& callback);
5065   virtual TPM_RC PolicyPhysicalPresenceSync(
5066       const TPMI_SH_POLICY& policy_session,
5067       const std::string& policy_session_name,
5068       AuthorizationDelegate* authorization_delegate);
5069   typedef base::Callback<void(TPM_RC response_code)> PolicyCpHashResponse;
5070   static TPM_RC SerializeCommand_PolicyCpHash(
5071       const TPMI_SH_POLICY& policy_session,
5072       const std::string& policy_session_name,
5073       const TPM2B_DIGEST& cp_hash_a,
5074       std::string* serialized_command,
5075       AuthorizationDelegate* authorization_delegate);
5076   static TPM_RC ParseResponse_PolicyCpHash(
5077       const std::string& response,
5078       AuthorizationDelegate* authorization_delegate);
5079   virtual void PolicyCpHash(const TPMI_SH_POLICY& policy_session,
5080                             const std::string& policy_session_name,
5081                             const TPM2B_DIGEST& cp_hash_a,
5082                             AuthorizationDelegate* authorization_delegate,
5083                             const PolicyCpHashResponse& callback);
5084   virtual TPM_RC PolicyCpHashSync(
5085       const TPMI_SH_POLICY& policy_session,
5086       const std::string& policy_session_name,
5087       const TPM2B_DIGEST& cp_hash_a,
5088       AuthorizationDelegate* authorization_delegate);
5089   typedef base::Callback<void(TPM_RC response_code)> PolicyNameHashResponse;
5090   static TPM_RC SerializeCommand_PolicyNameHash(
5091       const TPMI_SH_POLICY& policy_session,
5092       const std::string& policy_session_name,
5093       const TPM2B_DIGEST& name_hash,
5094       std::string* serialized_command,
5095       AuthorizationDelegate* authorization_delegate);
5096   static TPM_RC ParseResponse_PolicyNameHash(
5097       const std::string& response,
5098       AuthorizationDelegate* authorization_delegate);
5099   virtual void PolicyNameHash(const TPMI_SH_POLICY& policy_session,
5100                               const std::string& policy_session_name,
5101                               const TPM2B_DIGEST& name_hash,
5102                               AuthorizationDelegate* authorization_delegate,
5103                               const PolicyNameHashResponse& callback);
5104   virtual TPM_RC PolicyNameHashSync(
5105       const TPMI_SH_POLICY& policy_session,
5106       const std::string& policy_session_name,
5107       const TPM2B_DIGEST& name_hash,
5108       AuthorizationDelegate* authorization_delegate);
5109   typedef base::Callback<void(TPM_RC response_code)>
5110       PolicyDuplicationSelectResponse;
5111   static TPM_RC SerializeCommand_PolicyDuplicationSelect(
5112       const TPMI_SH_POLICY& policy_session,
5113       const std::string& policy_session_name,
5114       const TPM2B_NAME& object_name,
5115       const TPM2B_NAME& new_parent_name,
5116       const TPMI_YES_NO& include_object,
5117       std::string* serialized_command,
5118       AuthorizationDelegate* authorization_delegate);
5119   static TPM_RC ParseResponse_PolicyDuplicationSelect(
5120       const std::string& response,
5121       AuthorizationDelegate* authorization_delegate);
5122   virtual void PolicyDuplicationSelect(
5123       const TPMI_SH_POLICY& policy_session,
5124       const std::string& policy_session_name,
5125       const TPM2B_NAME& object_name,
5126       const TPM2B_NAME& new_parent_name,
5127       const TPMI_YES_NO& include_object,
5128       AuthorizationDelegate* authorization_delegate,
5129       const PolicyDuplicationSelectResponse& callback);
5130   virtual TPM_RC PolicyDuplicationSelectSync(
5131       const TPMI_SH_POLICY& policy_session,
5132       const std::string& policy_session_name,
5133       const TPM2B_NAME& object_name,
5134       const TPM2B_NAME& new_parent_name,
5135       const TPMI_YES_NO& include_object,
5136       AuthorizationDelegate* authorization_delegate);
5137   typedef base::Callback<void(TPM_RC response_code)> PolicyAuthorizeResponse;
5138   static TPM_RC SerializeCommand_PolicyAuthorize(
5139       const TPMI_SH_POLICY& policy_session,
5140       const std::string& policy_session_name,
5141       const TPM2B_DIGEST& approved_policy,
5142       const TPM2B_NONCE& policy_ref,
5143       const TPM2B_NAME& key_sign,
5144       const TPMT_TK_VERIFIED& check_ticket,
5145       std::string* serialized_command,
5146       AuthorizationDelegate* authorization_delegate);
5147   static TPM_RC ParseResponse_PolicyAuthorize(
5148       const std::string& response,
5149       AuthorizationDelegate* authorization_delegate);
5150   virtual void PolicyAuthorize(const TPMI_SH_POLICY& policy_session,
5151                                const std::string& policy_session_name,
5152                                const TPM2B_DIGEST& approved_policy,
5153                                const TPM2B_NONCE& policy_ref,
5154                                const TPM2B_NAME& key_sign,
5155                                const TPMT_TK_VERIFIED& check_ticket,
5156                                AuthorizationDelegate* authorization_delegate,
5157                                const PolicyAuthorizeResponse& callback);
5158   virtual TPM_RC PolicyAuthorizeSync(
5159       const TPMI_SH_POLICY& policy_session,
5160       const std::string& policy_session_name,
5161       const TPM2B_DIGEST& approved_policy,
5162       const TPM2B_NONCE& policy_ref,
5163       const TPM2B_NAME& key_sign,
5164       const TPMT_TK_VERIFIED& check_ticket,
5165       AuthorizationDelegate* authorization_delegate);
5166   typedef base::Callback<void(TPM_RC response_code)> PolicyAuthValueResponse;
5167   static TPM_RC SerializeCommand_PolicyAuthValue(
5168       const TPMI_SH_POLICY& policy_session,
5169       const std::string& policy_session_name,
5170       std::string* serialized_command,
5171       AuthorizationDelegate* authorization_delegate);
5172   static TPM_RC ParseResponse_PolicyAuthValue(
5173       const std::string& response,
5174       AuthorizationDelegate* authorization_delegate);
5175   virtual void PolicyAuthValue(const TPMI_SH_POLICY& policy_session,
5176                                const std::string& policy_session_name,
5177                                AuthorizationDelegate* authorization_delegate,
5178                                const PolicyAuthValueResponse& callback);
5179   virtual TPM_RC PolicyAuthValueSync(
5180       const TPMI_SH_POLICY& policy_session,
5181       const std::string& policy_session_name,
5182       AuthorizationDelegate* authorization_delegate);
5183   typedef base::Callback<void(TPM_RC response_code)> PolicyPasswordResponse;
5184   static TPM_RC SerializeCommand_PolicyPassword(
5185       const TPMI_SH_POLICY& policy_session,
5186       const std::string& policy_session_name,
5187       std::string* serialized_command,
5188       AuthorizationDelegate* authorization_delegate);
5189   static TPM_RC ParseResponse_PolicyPassword(
5190       const std::string& response,
5191       AuthorizationDelegate* authorization_delegate);
5192   virtual void PolicyPassword(const TPMI_SH_POLICY& policy_session,
5193                               const std::string& policy_session_name,
5194                               AuthorizationDelegate* authorization_delegate,
5195                               const PolicyPasswordResponse& callback);
5196   virtual TPM_RC PolicyPasswordSync(
5197       const TPMI_SH_POLICY& policy_session,
5198       const std::string& policy_session_name,
5199       AuthorizationDelegate* authorization_delegate);
5200   typedef base::Callback<void(TPM_RC response_code,
5201                               const TPM2B_DIGEST& policy_digest)>
5202       PolicyGetDigestResponse;
5203   static TPM_RC SerializeCommand_PolicyGetDigest(
5204       const TPMI_SH_POLICY& policy_session,
5205       const std::string& policy_session_name,
5206       std::string* serialized_command,
5207       AuthorizationDelegate* authorization_delegate);
5208   static TPM_RC ParseResponse_PolicyGetDigest(
5209       const std::string& response,
5210       TPM2B_DIGEST* policy_digest,
5211       AuthorizationDelegate* authorization_delegate);
5212   virtual void PolicyGetDigest(const TPMI_SH_POLICY& policy_session,
5213                                const std::string& policy_session_name,
5214                                AuthorizationDelegate* authorization_delegate,
5215                                const PolicyGetDigestResponse& callback);
5216   virtual TPM_RC PolicyGetDigestSync(
5217       const TPMI_SH_POLICY& policy_session,
5218       const std::string& policy_session_name,
5219       TPM2B_DIGEST* policy_digest,
5220       AuthorizationDelegate* authorization_delegate);
5221   typedef base::Callback<void(TPM_RC response_code)> PolicyNvWrittenResponse;
5222   static TPM_RC SerializeCommand_PolicyNvWritten(
5223       const TPMI_SH_POLICY& policy_session,
5224       const std::string& policy_session_name,
5225       const TPMI_YES_NO& written_set,
5226       std::string* serialized_command,
5227       AuthorizationDelegate* authorization_delegate);
5228   static TPM_RC ParseResponse_PolicyNvWritten(
5229       const std::string& response,
5230       AuthorizationDelegate* authorization_delegate);
5231   virtual void PolicyNvWritten(const TPMI_SH_POLICY& policy_session,
5232                                const std::string& policy_session_name,
5233                                const TPMI_YES_NO& written_set,
5234                                AuthorizationDelegate* authorization_delegate,
5235                                const PolicyNvWrittenResponse& callback);
5236   virtual TPM_RC PolicyNvWrittenSync(
5237       const TPMI_SH_POLICY& policy_session,
5238       const std::string& policy_session_name,
5239       const TPMI_YES_NO& written_set,
5240       AuthorizationDelegate* authorization_delegate);
5241   typedef base::Callback<void(TPM_RC response_code,
5242                               const TPM_HANDLE& object_handle,
5243                               const TPM2B_PUBLIC& out_public,
5244                               const TPM2B_CREATION_DATA& creation_data,
5245                               const TPM2B_DIGEST& creation_hash,
5246                               const TPMT_TK_CREATION& creation_ticket,
5247                               const TPM2B_NAME& name)>
5248       CreatePrimaryResponse;
5249   static TPM_RC SerializeCommand_CreatePrimary(
5250       const TPMI_RH_HIERARCHY& primary_handle,
5251       const std::string& primary_handle_name,
5252       const TPM2B_SENSITIVE_CREATE& in_sensitive,
5253       const TPM2B_PUBLIC& in_public,
5254       const TPM2B_DATA& outside_info,
5255       const TPML_PCR_SELECTION& creation_pcr,
5256       std::string* serialized_command,
5257       AuthorizationDelegate* authorization_delegate);
5258   static TPM_RC ParseResponse_CreatePrimary(
5259       const std::string& response,
5260       TPM_HANDLE* object_handle,
5261       TPM2B_PUBLIC* out_public,
5262       TPM2B_CREATION_DATA* creation_data,
5263       TPM2B_DIGEST* creation_hash,
5264       TPMT_TK_CREATION* creation_ticket,
5265       TPM2B_NAME* name,
5266       AuthorizationDelegate* authorization_delegate);
5267   virtual void CreatePrimary(const TPMI_RH_HIERARCHY& primary_handle,
5268                              const std::string& primary_handle_name,
5269                              const TPM2B_SENSITIVE_CREATE& in_sensitive,
5270                              const TPM2B_PUBLIC& in_public,
5271                              const TPM2B_DATA& outside_info,
5272                              const TPML_PCR_SELECTION& creation_pcr,
5273                              AuthorizationDelegate* authorization_delegate,
5274                              const CreatePrimaryResponse& callback);
5275   virtual TPM_RC CreatePrimarySync(
5276       const TPMI_RH_HIERARCHY& primary_handle,
5277       const std::string& primary_handle_name,
5278       const TPM2B_SENSITIVE_CREATE& in_sensitive,
5279       const TPM2B_PUBLIC& in_public,
5280       const TPM2B_DATA& outside_info,
5281       const TPML_PCR_SELECTION& creation_pcr,
5282       TPM_HANDLE* object_handle,
5283       TPM2B_PUBLIC* out_public,
5284       TPM2B_CREATION_DATA* creation_data,
5285       TPM2B_DIGEST* creation_hash,
5286       TPMT_TK_CREATION* creation_ticket,
5287       TPM2B_NAME* name,
5288       AuthorizationDelegate* authorization_delegate);
5289   typedef base::Callback<void(TPM_RC response_code)> HierarchyControlResponse;
5290   static TPM_RC SerializeCommand_HierarchyControl(
5291       const TPMI_RH_HIERARCHY& auth_handle,
5292       const std::string& auth_handle_name,
5293       const TPMI_RH_ENABLES& enable,
5294       const TPMI_YES_NO& state,
5295       std::string* serialized_command,
5296       AuthorizationDelegate* authorization_delegate);
5297   static TPM_RC ParseResponse_HierarchyControl(
5298       const std::string& response,
5299       AuthorizationDelegate* authorization_delegate);
5300   virtual void HierarchyControl(const TPMI_RH_HIERARCHY& auth_handle,
5301                                 const std::string& auth_handle_name,
5302                                 const TPMI_RH_ENABLES& enable,
5303                                 const TPMI_YES_NO& state,
5304                                 AuthorizationDelegate* authorization_delegate,
5305                                 const HierarchyControlResponse& callback);
5306   virtual TPM_RC HierarchyControlSync(
5307       const TPMI_RH_HIERARCHY& auth_handle,
5308       const std::string& auth_handle_name,
5309       const TPMI_RH_ENABLES& enable,
5310       const TPMI_YES_NO& state,
5311       AuthorizationDelegate* authorization_delegate);
5312   typedef base::Callback<void(TPM_RC response_code)> SetPrimaryPolicyResponse;
5313   static TPM_RC SerializeCommand_SetPrimaryPolicy(
5314       const TPMI_RH_HIERARCHY& auth_handle,
5315       const std::string& auth_handle_name,
5316       const TPM2B_DIGEST& auth_policy,
5317       const TPMI_ALG_HASH& hash_alg,
5318       std::string* serialized_command,
5319       AuthorizationDelegate* authorization_delegate);
5320   static TPM_RC ParseResponse_SetPrimaryPolicy(
5321       const std::string& response,
5322       AuthorizationDelegate* authorization_delegate);
5323   virtual void SetPrimaryPolicy(const TPMI_RH_HIERARCHY& auth_handle,
5324                                 const std::string& auth_handle_name,
5325                                 const TPM2B_DIGEST& auth_policy,
5326                                 const TPMI_ALG_HASH& hash_alg,
5327                                 AuthorizationDelegate* authorization_delegate,
5328                                 const SetPrimaryPolicyResponse& callback);
5329   virtual TPM_RC SetPrimaryPolicySync(
5330       const TPMI_RH_HIERARCHY& auth_handle,
5331       const std::string& auth_handle_name,
5332       const TPM2B_DIGEST& auth_policy,
5333       const TPMI_ALG_HASH& hash_alg,
5334       AuthorizationDelegate* authorization_delegate);
5335   typedef base::Callback<void(TPM_RC response_code)> ChangePPSResponse;
5336   static TPM_RC SerializeCommand_ChangePPS(
5337       const TPMI_RH_PLATFORM& auth_handle,
5338       const std::string& auth_handle_name,
5339       std::string* serialized_command,
5340       AuthorizationDelegate* authorization_delegate);
5341   static TPM_RC ParseResponse_ChangePPS(
5342       const std::string& response,
5343       AuthorizationDelegate* authorization_delegate);
5344   virtual void ChangePPS(const TPMI_RH_PLATFORM& auth_handle,
5345                          const std::string& auth_handle_name,
5346                          AuthorizationDelegate* authorization_delegate,
5347                          const ChangePPSResponse& callback);
5348   virtual TPM_RC ChangePPSSync(const TPMI_RH_PLATFORM& auth_handle,
5349                                const std::string& auth_handle_name,
5350                                AuthorizationDelegate* authorization_delegate);
5351   typedef base::Callback<void(TPM_RC response_code)> ChangeEPSResponse;
5352   static TPM_RC SerializeCommand_ChangeEPS(
5353       const TPMI_RH_PLATFORM& auth_handle,
5354       const std::string& auth_handle_name,
5355       std::string* serialized_command,
5356       AuthorizationDelegate* authorization_delegate);
5357   static TPM_RC ParseResponse_ChangeEPS(
5358       const std::string& response,
5359       AuthorizationDelegate* authorization_delegate);
5360   virtual void ChangeEPS(const TPMI_RH_PLATFORM& auth_handle,
5361                          const std::string& auth_handle_name,
5362                          AuthorizationDelegate* authorization_delegate,
5363                          const ChangeEPSResponse& callback);
5364   virtual TPM_RC ChangeEPSSync(const TPMI_RH_PLATFORM& auth_handle,
5365                                const std::string& auth_handle_name,
5366                                AuthorizationDelegate* authorization_delegate);
5367   typedef base::Callback<void(TPM_RC response_code)> ClearResponse;
5368   static TPM_RC SerializeCommand_Clear(
5369       const TPMI_RH_CLEAR& auth_handle,
5370       const std::string& auth_handle_name,
5371       std::string* serialized_command,
5372       AuthorizationDelegate* authorization_delegate);
5373   static TPM_RC ParseResponse_Clear(
5374       const std::string& response,
5375       AuthorizationDelegate* authorization_delegate);
5376   virtual void Clear(const TPMI_RH_CLEAR& auth_handle,
5377                      const std::string& auth_handle_name,
5378                      AuthorizationDelegate* authorization_delegate,
5379                      const ClearResponse& callback);
5380   virtual TPM_RC ClearSync(const TPMI_RH_CLEAR& auth_handle,
5381                            const std::string& auth_handle_name,
5382                            AuthorizationDelegate* authorization_delegate);
5383   typedef base::Callback<void(TPM_RC response_code)> ClearControlResponse;
5384   static TPM_RC SerializeCommand_ClearControl(
5385       const TPMI_RH_CLEAR& auth,
5386       const std::string& auth_name,
5387       const TPMI_YES_NO& disable,
5388       std::string* serialized_command,
5389       AuthorizationDelegate* authorization_delegate);
5390   static TPM_RC ParseResponse_ClearControl(
5391       const std::string& response,
5392       AuthorizationDelegate* authorization_delegate);
5393   virtual void ClearControl(const TPMI_RH_CLEAR& auth,
5394                             const std::string& auth_name,
5395                             const TPMI_YES_NO& disable,
5396                             AuthorizationDelegate* authorization_delegate,
5397                             const ClearControlResponse& callback);
5398   virtual TPM_RC ClearControlSync(
5399       const TPMI_RH_CLEAR& auth,
5400       const std::string& auth_name,
5401       const TPMI_YES_NO& disable,
5402       AuthorizationDelegate* authorization_delegate);
5403   typedef base::Callback<void(TPM_RC response_code)>
5404       HierarchyChangeAuthResponse;
5405   static TPM_RC SerializeCommand_HierarchyChangeAuth(
5406       const TPMI_RH_HIERARCHY_AUTH& auth_handle,
5407       const std::string& auth_handle_name,
5408       const TPM2B_AUTH& new_auth,
5409       std::string* serialized_command,
5410       AuthorizationDelegate* authorization_delegate);
5411   static TPM_RC ParseResponse_HierarchyChangeAuth(
5412       const std::string& response,
5413       AuthorizationDelegate* authorization_delegate);
5414   virtual void HierarchyChangeAuth(
5415       const TPMI_RH_HIERARCHY_AUTH& auth_handle,
5416       const std::string& auth_handle_name,
5417       const TPM2B_AUTH& new_auth,
5418       AuthorizationDelegate* authorization_delegate,
5419       const HierarchyChangeAuthResponse& callback);
5420   virtual TPM_RC HierarchyChangeAuthSync(
5421       const TPMI_RH_HIERARCHY_AUTH& auth_handle,
5422       const std::string& auth_handle_name,
5423       const TPM2B_AUTH& new_auth,
5424       AuthorizationDelegate* authorization_delegate);
5425   typedef base::Callback<void(TPM_RC response_code)>
5426       DictionaryAttackLockResetResponse;
5427   static TPM_RC SerializeCommand_DictionaryAttackLockReset(
5428       const TPMI_RH_LOCKOUT& lock_handle,
5429       const std::string& lock_handle_name,
5430       std::string* serialized_command,
5431       AuthorizationDelegate* authorization_delegate);
5432   static TPM_RC ParseResponse_DictionaryAttackLockReset(
5433       const std::string& response,
5434       AuthorizationDelegate* authorization_delegate);
5435   virtual void DictionaryAttackLockReset(
5436       const TPMI_RH_LOCKOUT& lock_handle,
5437       const std::string& lock_handle_name,
5438       AuthorizationDelegate* authorization_delegate,
5439       const DictionaryAttackLockResetResponse& callback);
5440   virtual TPM_RC DictionaryAttackLockResetSync(
5441       const TPMI_RH_LOCKOUT& lock_handle,
5442       const std::string& lock_handle_name,
5443       AuthorizationDelegate* authorization_delegate);
5444   typedef base::Callback<void(TPM_RC response_code)>
5445       DictionaryAttackParametersResponse;
5446   static TPM_RC SerializeCommand_DictionaryAttackParameters(
5447       const TPMI_RH_LOCKOUT& lock_handle,
5448       const std::string& lock_handle_name,
5449       const UINT32& new_max_tries,
5450       const UINT32& new_recovery_time,
5451       const UINT32& lockout_recovery,
5452       std::string* serialized_command,
5453       AuthorizationDelegate* authorization_delegate);
5454   static TPM_RC ParseResponse_DictionaryAttackParameters(
5455       const std::string& response,
5456       AuthorizationDelegate* authorization_delegate);
5457   virtual void DictionaryAttackParameters(
5458       const TPMI_RH_LOCKOUT& lock_handle,
5459       const std::string& lock_handle_name,
5460       const UINT32& new_max_tries,
5461       const UINT32& new_recovery_time,
5462       const UINT32& lockout_recovery,
5463       AuthorizationDelegate* authorization_delegate,
5464       const DictionaryAttackParametersResponse& callback);
5465   virtual TPM_RC DictionaryAttackParametersSync(
5466       const TPMI_RH_LOCKOUT& lock_handle,
5467       const std::string& lock_handle_name,
5468       const UINT32& new_max_tries,
5469       const UINT32& new_recovery_time,
5470       const UINT32& lockout_recovery,
5471       AuthorizationDelegate* authorization_delegate);
5472   typedef base::Callback<void(TPM_RC response_code)> PP_CommandsResponse;
5473   static TPM_RC SerializeCommand_PP_Commands(
5474       const TPMI_RH_PLATFORM& auth,
5475       const std::string& auth_name,
5476       const TPML_CC& set_list,
5477       const TPML_CC& clear_list,
5478       std::string* serialized_command,
5479       AuthorizationDelegate* authorization_delegate);
5480   static TPM_RC ParseResponse_PP_Commands(
5481       const std::string& response,
5482       AuthorizationDelegate* authorization_delegate);
5483   virtual void PP_Commands(const TPMI_RH_PLATFORM& auth,
5484                            const std::string& auth_name,
5485                            const TPML_CC& set_list,
5486                            const TPML_CC& clear_list,
5487                            AuthorizationDelegate* authorization_delegate,
5488                            const PP_CommandsResponse& callback);
5489   virtual TPM_RC PP_CommandsSync(const TPMI_RH_PLATFORM& auth,
5490                                  const std::string& auth_name,
5491                                  const TPML_CC& set_list,
5492                                  const TPML_CC& clear_list,
5493                                  AuthorizationDelegate* authorization_delegate);
5494   typedef base::Callback<void(TPM_RC response_code)> SetAlgorithmSetResponse;
5495   static TPM_RC SerializeCommand_SetAlgorithmSet(
5496       const TPMI_RH_PLATFORM& auth_handle,
5497       const std::string& auth_handle_name,
5498       const UINT32& algorithm_set,
5499       std::string* serialized_command,
5500       AuthorizationDelegate* authorization_delegate);
5501   static TPM_RC ParseResponse_SetAlgorithmSet(
5502       const std::string& response,
5503       AuthorizationDelegate* authorization_delegate);
5504   virtual void SetAlgorithmSet(const TPMI_RH_PLATFORM& auth_handle,
5505                                const std::string& auth_handle_name,
5506                                const UINT32& algorithm_set,
5507                                AuthorizationDelegate* authorization_delegate,
5508                                const SetAlgorithmSetResponse& callback);
5509   virtual TPM_RC SetAlgorithmSetSync(
5510       const TPMI_RH_PLATFORM& auth_handle,
5511       const std::string& auth_handle_name,
5512       const UINT32& algorithm_set,
5513       AuthorizationDelegate* authorization_delegate);
5514   typedef base::Callback<void(TPM_RC response_code)> FieldUpgradeStartResponse;
5515   static TPM_RC SerializeCommand_FieldUpgradeStart(
5516       const TPMI_RH_PLATFORM& authorization,
5517       const std::string& authorization_name,
5518       const TPMI_DH_OBJECT& key_handle,
5519       const std::string& key_handle_name,
5520       const TPM2B_DIGEST& fu_digest,
5521       const TPMT_SIGNATURE& manifest_signature,
5522       std::string* serialized_command,
5523       AuthorizationDelegate* authorization_delegate);
5524   static TPM_RC ParseResponse_FieldUpgradeStart(
5525       const std::string& response,
5526       AuthorizationDelegate* authorization_delegate);
5527   virtual void FieldUpgradeStart(const TPMI_RH_PLATFORM& authorization,
5528                                  const std::string& authorization_name,
5529                                  const TPMI_DH_OBJECT& key_handle,
5530                                  const std::string& key_handle_name,
5531                                  const TPM2B_DIGEST& fu_digest,
5532                                  const TPMT_SIGNATURE& manifest_signature,
5533                                  AuthorizationDelegate* authorization_delegate,
5534                                  const FieldUpgradeStartResponse& callback);
5535   virtual TPM_RC FieldUpgradeStartSync(
5536       const TPMI_RH_PLATFORM& authorization,
5537       const std::string& authorization_name,
5538       const TPMI_DH_OBJECT& key_handle,
5539       const std::string& key_handle_name,
5540       const TPM2B_DIGEST& fu_digest,
5541       const TPMT_SIGNATURE& manifest_signature,
5542       AuthorizationDelegate* authorization_delegate);
5543   typedef base::Callback<void(TPM_RC response_code,
5544                               const TPMT_HA& next_digest,
5545                               const TPMT_HA& first_digest)>
5546       FieldUpgradeDataResponse;
5547   static TPM_RC SerializeCommand_FieldUpgradeData(
5548       const TPM2B_MAX_BUFFER& fu_data,
5549       std::string* serialized_command,
5550       AuthorizationDelegate* authorization_delegate);
5551   static TPM_RC ParseResponse_FieldUpgradeData(
5552       const std::string& response,
5553       TPMT_HA* next_digest,
5554       TPMT_HA* first_digest,
5555       AuthorizationDelegate* authorization_delegate);
5556   virtual void FieldUpgradeData(const TPM2B_MAX_BUFFER& fu_data,
5557                                 AuthorizationDelegate* authorization_delegate,
5558                                 const FieldUpgradeDataResponse& callback);
5559   virtual TPM_RC FieldUpgradeDataSync(
5560       const TPM2B_MAX_BUFFER& fu_data,
5561       TPMT_HA* next_digest,
5562       TPMT_HA* first_digest,
5563       AuthorizationDelegate* authorization_delegate);
5564   typedef base::Callback<void(TPM_RC response_code,
5565                               const TPM2B_MAX_BUFFER& fu_data)>
5566       FirmwareReadResponse;
5567   static TPM_RC SerializeCommand_FirmwareRead(
5568       const UINT32& sequence_number,
5569       std::string* serialized_command,
5570       AuthorizationDelegate* authorization_delegate);
5571   static TPM_RC ParseResponse_FirmwareRead(
5572       const std::string& response,
5573       TPM2B_MAX_BUFFER* fu_data,
5574       AuthorizationDelegate* authorization_delegate);
5575   virtual void FirmwareRead(const UINT32& sequence_number,
5576                             AuthorizationDelegate* authorization_delegate,
5577                             const FirmwareReadResponse& callback);
5578   virtual TPM_RC FirmwareReadSync(
5579       const UINT32& sequence_number,
5580       TPM2B_MAX_BUFFER* fu_data,
5581       AuthorizationDelegate* authorization_delegate);
5582   typedef base::Callback<void(TPM_RC response_code,
5583                               const TPMS_CONTEXT& context)>
5584       ContextSaveResponse;
5585   static TPM_RC SerializeCommand_ContextSave(
5586       const TPMI_DH_CONTEXT& save_handle,
5587       const std::string& save_handle_name,
5588       std::string* serialized_command,
5589       AuthorizationDelegate* authorization_delegate);
5590   static TPM_RC ParseResponse_ContextSave(
5591       const std::string& response,
5592       TPMS_CONTEXT* context,
5593       AuthorizationDelegate* authorization_delegate);
5594   virtual void ContextSave(const TPMI_DH_CONTEXT& save_handle,
5595                            const std::string& save_handle_name,
5596                            AuthorizationDelegate* authorization_delegate,
5597                            const ContextSaveResponse& callback);
5598   virtual TPM_RC ContextSaveSync(const TPMI_DH_CONTEXT& save_handle,
5599                                  const std::string& save_handle_name,
5600                                  TPMS_CONTEXT* context,
5601                                  AuthorizationDelegate* authorization_delegate);
5602   typedef base::Callback<void(TPM_RC response_code,
5603                               const TPMI_DH_CONTEXT& loaded_handle)>
5604       ContextLoadResponse;
5605   static TPM_RC SerializeCommand_ContextLoad(
5606       const TPMS_CONTEXT& context,
5607       std::string* serialized_command,
5608       AuthorizationDelegate* authorization_delegate);
5609   static TPM_RC ParseResponse_ContextLoad(
5610       const std::string& response,
5611       TPMI_DH_CONTEXT* loaded_handle,
5612       AuthorizationDelegate* authorization_delegate);
5613   virtual void ContextLoad(const TPMS_CONTEXT& context,
5614                            AuthorizationDelegate* authorization_delegate,
5615                            const ContextLoadResponse& callback);
5616   virtual TPM_RC ContextLoadSync(const TPMS_CONTEXT& context,
5617                                  TPMI_DH_CONTEXT* loaded_handle,
5618                                  AuthorizationDelegate* authorization_delegate);
5619   typedef base::Callback<void(TPM_RC response_code)> FlushContextResponse;
5620   static TPM_RC SerializeCommand_FlushContext(
5621       const TPMI_DH_CONTEXT& flush_handle,
5622       std::string* serialized_command,
5623       AuthorizationDelegate* authorization_delegate);
5624   static TPM_RC ParseResponse_FlushContext(
5625       const std::string& response,
5626       AuthorizationDelegate* authorization_delegate);
5627   virtual void FlushContext(const TPMI_DH_CONTEXT& flush_handle,
5628                             AuthorizationDelegate* authorization_delegate,
5629                             const FlushContextResponse& callback);
5630   virtual TPM_RC FlushContextSync(
5631       const TPMI_DH_CONTEXT& flush_handle,
5632       AuthorizationDelegate* authorization_delegate);
5633   typedef base::Callback<void(TPM_RC response_code)> EvictControlResponse;
5634   static TPM_RC SerializeCommand_EvictControl(
5635       const TPMI_RH_PROVISION& auth,
5636       const std::string& auth_name,
5637       const TPMI_DH_OBJECT& object_handle,
5638       const std::string& object_handle_name,
5639       const TPMI_DH_PERSISTENT& persistent_handle,
5640       std::string* serialized_command,
5641       AuthorizationDelegate* authorization_delegate);
5642   static TPM_RC ParseResponse_EvictControl(
5643       const std::string& response,
5644       AuthorizationDelegate* authorization_delegate);
5645   virtual void EvictControl(const TPMI_RH_PROVISION& auth,
5646                             const std::string& auth_name,
5647                             const TPMI_DH_OBJECT& object_handle,
5648                             const std::string& object_handle_name,
5649                             const TPMI_DH_PERSISTENT& persistent_handle,
5650                             AuthorizationDelegate* authorization_delegate,
5651                             const EvictControlResponse& callback);
5652   virtual TPM_RC EvictControlSync(
5653       const TPMI_RH_PROVISION& auth,
5654       const std::string& auth_name,
5655       const TPMI_DH_OBJECT& object_handle,
5656       const std::string& object_handle_name,
5657       const TPMI_DH_PERSISTENT& persistent_handle,
5658       AuthorizationDelegate* authorization_delegate);
5659   typedef base::Callback<void(TPM_RC response_code,
5660                               const TPMS_TIME_INFO& current_time)>
5661       ReadClockResponse;
5662   static TPM_RC SerializeCommand_ReadClock(
5663       std::string* serialized_command,
5664       AuthorizationDelegate* authorization_delegate);
5665   static TPM_RC ParseResponse_ReadClock(
5666       const std::string& response,
5667       TPMS_TIME_INFO* current_time,
5668       AuthorizationDelegate* authorization_delegate);
5669   virtual void ReadClock(AuthorizationDelegate* authorization_delegate,
5670                          const ReadClockResponse& callback);
5671   virtual TPM_RC ReadClockSync(TPMS_TIME_INFO* current_time,
5672                                AuthorizationDelegate* authorization_delegate);
5673   typedef base::Callback<void(TPM_RC response_code)> ClockSetResponse;
5674   static TPM_RC SerializeCommand_ClockSet(
5675       const TPMI_RH_PROVISION& auth,
5676       const std::string& auth_name,
5677       const UINT64& new_time,
5678       std::string* serialized_command,
5679       AuthorizationDelegate* authorization_delegate);
5680   static TPM_RC ParseResponse_ClockSet(
5681       const std::string& response,
5682       AuthorizationDelegate* authorization_delegate);
5683   virtual void ClockSet(const TPMI_RH_PROVISION& auth,
5684                         const std::string& auth_name,
5685                         const UINT64& new_time,
5686                         AuthorizationDelegate* authorization_delegate,
5687                         const ClockSetResponse& callback);
5688   virtual TPM_RC ClockSetSync(const TPMI_RH_PROVISION& auth,
5689                               const std::string& auth_name,
5690                               const UINT64& new_time,
5691                               AuthorizationDelegate* authorization_delegate);
5692   typedef base::Callback<void(TPM_RC response_code)> ClockRateAdjustResponse;
5693   static TPM_RC SerializeCommand_ClockRateAdjust(
5694       const TPMI_RH_PROVISION& auth,
5695       const std::string& auth_name,
5696       const TPM_CLOCK_ADJUST& rate_adjust,
5697       std::string* serialized_command,
5698       AuthorizationDelegate* authorization_delegate);
5699   static TPM_RC ParseResponse_ClockRateAdjust(
5700       const std::string& response,
5701       AuthorizationDelegate* authorization_delegate);
5702   virtual void ClockRateAdjust(const TPMI_RH_PROVISION& auth,
5703                                const std::string& auth_name,
5704                                const TPM_CLOCK_ADJUST& rate_adjust,
5705                                AuthorizationDelegate* authorization_delegate,
5706                                const ClockRateAdjustResponse& callback);
5707   virtual TPM_RC ClockRateAdjustSync(
5708       const TPMI_RH_PROVISION& auth,
5709       const std::string& auth_name,
5710       const TPM_CLOCK_ADJUST& rate_adjust,
5711       AuthorizationDelegate* authorization_delegate);
5712   typedef base::Callback<void(TPM_RC response_code,
5713                               const TPMI_YES_NO& more_data,
5714                               const TPMS_CAPABILITY_DATA& capability_data)>
5715       GetCapabilityResponse;
5716   static TPM_RC SerializeCommand_GetCapability(
5717       const TPM_CAP& capability,
5718       const UINT32& property,
5719       const UINT32& property_count,
5720       std::string* serialized_command,
5721       AuthorizationDelegate* authorization_delegate);
5722   static TPM_RC ParseResponse_GetCapability(
5723       const std::string& response,
5724       TPMI_YES_NO* more_data,
5725       TPMS_CAPABILITY_DATA* capability_data,
5726       AuthorizationDelegate* authorization_delegate);
5727   virtual void GetCapability(const TPM_CAP& capability,
5728                              const UINT32& property,
5729                              const UINT32& property_count,
5730                              AuthorizationDelegate* authorization_delegate,
5731                              const GetCapabilityResponse& callback);
5732   virtual TPM_RC GetCapabilitySync(
5733       const TPM_CAP& capability,
5734       const UINT32& property,
5735       const UINT32& property_count,
5736       TPMI_YES_NO* more_data,
5737       TPMS_CAPABILITY_DATA* capability_data,
5738       AuthorizationDelegate* authorization_delegate);
5739   typedef base::Callback<void(TPM_RC response_code)> TestParmsResponse;
5740   static TPM_RC SerializeCommand_TestParms(
5741       const TPMT_PUBLIC_PARMS& parameters,
5742       std::string* serialized_command,
5743       AuthorizationDelegate* authorization_delegate);
5744   static TPM_RC ParseResponse_TestParms(
5745       const std::string& response,
5746       AuthorizationDelegate* authorization_delegate);
5747   virtual void TestParms(const TPMT_PUBLIC_PARMS& parameters,
5748                          AuthorizationDelegate* authorization_delegate,
5749                          const TestParmsResponse& callback);
5750   virtual TPM_RC TestParmsSync(const TPMT_PUBLIC_PARMS& parameters,
5751                                AuthorizationDelegate* authorization_delegate);
5752   typedef base::Callback<void(TPM_RC response_code)> NV_DefineSpaceResponse;
5753   static TPM_RC SerializeCommand_NV_DefineSpace(
5754       const TPMI_RH_PROVISION& auth_handle,
5755       const std::string& auth_handle_name,
5756       const TPM2B_AUTH& auth,
5757       const TPM2B_NV_PUBLIC& public_info,
5758       std::string* serialized_command,
5759       AuthorizationDelegate* authorization_delegate);
5760   static TPM_RC ParseResponse_NV_DefineSpace(
5761       const std::string& response,
5762       AuthorizationDelegate* authorization_delegate);
5763   virtual void NV_DefineSpace(const TPMI_RH_PROVISION& auth_handle,
5764                               const std::string& auth_handle_name,
5765                               const TPM2B_AUTH& auth,
5766                               const TPM2B_NV_PUBLIC& public_info,
5767                               AuthorizationDelegate* authorization_delegate,
5768                               const NV_DefineSpaceResponse& callback);
5769   virtual TPM_RC NV_DefineSpaceSync(
5770       const TPMI_RH_PROVISION& auth_handle,
5771       const std::string& auth_handle_name,
5772       const TPM2B_AUTH& auth,
5773       const TPM2B_NV_PUBLIC& public_info,
5774       AuthorizationDelegate* authorization_delegate);
5775   typedef base::Callback<void(TPM_RC response_code)> NV_UndefineSpaceResponse;
5776   static TPM_RC SerializeCommand_NV_UndefineSpace(
5777       const TPMI_RH_PROVISION& auth_handle,
5778       const std::string& auth_handle_name,
5779       const TPMI_RH_NV_INDEX& nv_index,
5780       const std::string& nv_index_name,
5781       std::string* serialized_command,
5782       AuthorizationDelegate* authorization_delegate);
5783   static TPM_RC ParseResponse_NV_UndefineSpace(
5784       const std::string& response,
5785       AuthorizationDelegate* authorization_delegate);
5786   virtual void NV_UndefineSpace(const TPMI_RH_PROVISION& auth_handle,
5787                                 const std::string& auth_handle_name,
5788                                 const TPMI_RH_NV_INDEX& nv_index,
5789                                 const std::string& nv_index_name,
5790                                 AuthorizationDelegate* authorization_delegate,
5791                                 const NV_UndefineSpaceResponse& callback);
5792   virtual TPM_RC NV_UndefineSpaceSync(
5793       const TPMI_RH_PROVISION& auth_handle,
5794       const std::string& auth_handle_name,
5795       const TPMI_RH_NV_INDEX& nv_index,
5796       const std::string& nv_index_name,
5797       AuthorizationDelegate* authorization_delegate);
5798   typedef base::Callback<void(TPM_RC response_code)>
5799       NV_UndefineSpaceSpecialResponse;
5800   static TPM_RC SerializeCommand_NV_UndefineSpaceSpecial(
5801       const TPMI_RH_NV_INDEX& nv_index,
5802       const std::string& nv_index_name,
5803       const TPMI_RH_PLATFORM& platform,
5804       const std::string& platform_name,
5805       std::string* serialized_command,
5806       AuthorizationDelegate* authorization_delegate);
5807   static TPM_RC ParseResponse_NV_UndefineSpaceSpecial(
5808       const std::string& response,
5809       AuthorizationDelegate* authorization_delegate);
5810   virtual void NV_UndefineSpaceSpecial(
5811       const TPMI_RH_NV_INDEX& nv_index,
5812       const std::string& nv_index_name,
5813       const TPMI_RH_PLATFORM& platform,
5814       const std::string& platform_name,
5815       AuthorizationDelegate* authorization_delegate,
5816       const NV_UndefineSpaceSpecialResponse& callback);
5817   virtual TPM_RC NV_UndefineSpaceSpecialSync(
5818       const TPMI_RH_NV_INDEX& nv_index,
5819       const std::string& nv_index_name,
5820       const TPMI_RH_PLATFORM& platform,
5821       const std::string& platform_name,
5822       AuthorizationDelegate* authorization_delegate);
5823   typedef base::Callback<void(TPM_RC response_code,
5824                               const TPM2B_NV_PUBLIC& nv_public,
5825                               const TPM2B_NAME& nv_name)>
5826       NV_ReadPublicResponse;
5827   static TPM_RC SerializeCommand_NV_ReadPublic(
5828       const TPMI_RH_NV_INDEX& nv_index,
5829       const std::string& nv_index_name,
5830       std::string* serialized_command,
5831       AuthorizationDelegate* authorization_delegate);
5832   static TPM_RC ParseResponse_NV_ReadPublic(
5833       const std::string& response,
5834       TPM2B_NV_PUBLIC* nv_public,
5835       TPM2B_NAME* nv_name,
5836       AuthorizationDelegate* authorization_delegate);
5837   virtual void NV_ReadPublic(const TPMI_RH_NV_INDEX& nv_index,
5838                              const std::string& nv_index_name,
5839                              AuthorizationDelegate* authorization_delegate,
5840                              const NV_ReadPublicResponse& callback);
5841   virtual TPM_RC NV_ReadPublicSync(
5842       const TPMI_RH_NV_INDEX& nv_index,
5843       const std::string& nv_index_name,
5844       TPM2B_NV_PUBLIC* nv_public,
5845       TPM2B_NAME* nv_name,
5846       AuthorizationDelegate* authorization_delegate);
5847   typedef base::Callback<void(TPM_RC response_code)> NV_WriteResponse;
5848   static TPM_RC SerializeCommand_NV_Write(
5849       const TPMI_RH_NV_AUTH& auth_handle,
5850       const std::string& auth_handle_name,
5851       const TPMI_RH_NV_INDEX& nv_index,
5852       const std::string& nv_index_name,
5853       const TPM2B_MAX_NV_BUFFER& data,
5854       const UINT16& offset,
5855       std::string* serialized_command,
5856       AuthorizationDelegate* authorization_delegate);
5857   static TPM_RC ParseResponse_NV_Write(
5858       const std::string& response,
5859       AuthorizationDelegate* authorization_delegate);
5860   virtual void NV_Write(const TPMI_RH_NV_AUTH& auth_handle,
5861                         const std::string& auth_handle_name,
5862                         const TPMI_RH_NV_INDEX& nv_index,
5863                         const std::string& nv_index_name,
5864                         const TPM2B_MAX_NV_BUFFER& data,
5865                         const UINT16& offset,
5866                         AuthorizationDelegate* authorization_delegate,
5867                         const NV_WriteResponse& callback);
5868   virtual TPM_RC NV_WriteSync(const TPMI_RH_NV_AUTH& auth_handle,
5869                               const std::string& auth_handle_name,
5870                               const TPMI_RH_NV_INDEX& nv_index,
5871                               const std::string& nv_index_name,
5872                               const TPM2B_MAX_NV_BUFFER& data,
5873                               const UINT16& offset,
5874                               AuthorizationDelegate* authorization_delegate);
5875   typedef base::Callback<void(TPM_RC response_code)> NV_IncrementResponse;
5876   static TPM_RC SerializeCommand_NV_Increment(
5877       const TPMI_RH_NV_AUTH& auth_handle,
5878       const std::string& auth_handle_name,
5879       const TPMI_RH_NV_INDEX& nv_index,
5880       const std::string& nv_index_name,
5881       std::string* serialized_command,
5882       AuthorizationDelegate* authorization_delegate);
5883   static TPM_RC ParseResponse_NV_Increment(
5884       const std::string& response,
5885       AuthorizationDelegate* authorization_delegate);
5886   virtual void NV_Increment(const TPMI_RH_NV_AUTH& auth_handle,
5887                             const std::string& auth_handle_name,
5888                             const TPMI_RH_NV_INDEX& nv_index,
5889                             const std::string& nv_index_name,
5890                             AuthorizationDelegate* authorization_delegate,
5891                             const NV_IncrementResponse& callback);
5892   virtual TPM_RC NV_IncrementSync(
5893       const TPMI_RH_NV_AUTH& auth_handle,
5894       const std::string& auth_handle_name,
5895       const TPMI_RH_NV_INDEX& nv_index,
5896       const std::string& nv_index_name,
5897       AuthorizationDelegate* authorization_delegate);
5898   typedef base::Callback<void(TPM_RC response_code)> NV_ExtendResponse;
5899   static TPM_RC SerializeCommand_NV_Extend(
5900       const TPMI_RH_NV_AUTH& auth_handle,
5901       const std::string& auth_handle_name,
5902       const TPMI_RH_NV_INDEX& nv_index,
5903       const std::string& nv_index_name,
5904       const TPM2B_MAX_NV_BUFFER& data,
5905       std::string* serialized_command,
5906       AuthorizationDelegate* authorization_delegate);
5907   static TPM_RC ParseResponse_NV_Extend(
5908       const std::string& response,
5909       AuthorizationDelegate* authorization_delegate);
5910   virtual void NV_Extend(const TPMI_RH_NV_AUTH& auth_handle,
5911                          const std::string& auth_handle_name,
5912                          const TPMI_RH_NV_INDEX& nv_index,
5913                          const std::string& nv_index_name,
5914                          const TPM2B_MAX_NV_BUFFER& data,
5915                          AuthorizationDelegate* authorization_delegate,
5916                          const NV_ExtendResponse& callback);
5917   virtual TPM_RC NV_ExtendSync(const TPMI_RH_NV_AUTH& auth_handle,
5918                                const std::string& auth_handle_name,
5919                                const TPMI_RH_NV_INDEX& nv_index,
5920                                const std::string& nv_index_name,
5921                                const TPM2B_MAX_NV_BUFFER& data,
5922                                AuthorizationDelegate* authorization_delegate);
5923   typedef base::Callback<void(TPM_RC response_code)> NV_SetBitsResponse;
5924   static TPM_RC SerializeCommand_NV_SetBits(
5925       const TPMI_RH_NV_AUTH& auth_handle,
5926       const std::string& auth_handle_name,
5927       const TPMI_RH_NV_INDEX& nv_index,
5928       const std::string& nv_index_name,
5929       const UINT64& bits,
5930       std::string* serialized_command,
5931       AuthorizationDelegate* authorization_delegate);
5932   static TPM_RC ParseResponse_NV_SetBits(
5933       const std::string& response,
5934       AuthorizationDelegate* authorization_delegate);
5935   virtual void NV_SetBits(const TPMI_RH_NV_AUTH& auth_handle,
5936                           const std::string& auth_handle_name,
5937                           const TPMI_RH_NV_INDEX& nv_index,
5938                           const std::string& nv_index_name,
5939                           const UINT64& bits,
5940                           AuthorizationDelegate* authorization_delegate,
5941                           const NV_SetBitsResponse& callback);
5942   virtual TPM_RC NV_SetBitsSync(const TPMI_RH_NV_AUTH& auth_handle,
5943                                 const std::string& auth_handle_name,
5944                                 const TPMI_RH_NV_INDEX& nv_index,
5945                                 const std::string& nv_index_name,
5946                                 const UINT64& bits,
5947                                 AuthorizationDelegate* authorization_delegate);
5948   typedef base::Callback<void(TPM_RC response_code)> NV_WriteLockResponse;
5949   static TPM_RC SerializeCommand_NV_WriteLock(
5950       const TPMI_RH_NV_AUTH& auth_handle,
5951       const std::string& auth_handle_name,
5952       const TPMI_RH_NV_INDEX& nv_index,
5953       const std::string& nv_index_name,
5954       std::string* serialized_command,
5955       AuthorizationDelegate* authorization_delegate);
5956   static TPM_RC ParseResponse_NV_WriteLock(
5957       const std::string& response,
5958       AuthorizationDelegate* authorization_delegate);
5959   virtual void NV_WriteLock(const TPMI_RH_NV_AUTH& auth_handle,
5960                             const std::string& auth_handle_name,
5961                             const TPMI_RH_NV_INDEX& nv_index,
5962                             const std::string& nv_index_name,
5963                             AuthorizationDelegate* authorization_delegate,
5964                             const NV_WriteLockResponse& callback);
5965   virtual TPM_RC NV_WriteLockSync(
5966       const TPMI_RH_NV_AUTH& auth_handle,
5967       const std::string& auth_handle_name,
5968       const TPMI_RH_NV_INDEX& nv_index,
5969       const std::string& nv_index_name,
5970       AuthorizationDelegate* authorization_delegate);
5971   typedef base::Callback<void(TPM_RC response_code)> NV_GlobalWriteLockResponse;
5972   static TPM_RC SerializeCommand_NV_GlobalWriteLock(
5973       const TPMI_RH_PROVISION& auth_handle,
5974       const std::string& auth_handle_name,
5975       std::string* serialized_command,
5976       AuthorizationDelegate* authorization_delegate);
5977   static TPM_RC ParseResponse_NV_GlobalWriteLock(
5978       const std::string& response,
5979       AuthorizationDelegate* authorization_delegate);
5980   virtual void NV_GlobalWriteLock(const TPMI_RH_PROVISION& auth_handle,
5981                                   const std::string& auth_handle_name,
5982                                   AuthorizationDelegate* authorization_delegate,
5983                                   const NV_GlobalWriteLockResponse& callback);
5984   virtual TPM_RC NV_GlobalWriteLockSync(
5985       const TPMI_RH_PROVISION& auth_handle,
5986       const std::string& auth_handle_name,
5987       AuthorizationDelegate* authorization_delegate);
5988   typedef base::Callback<void(TPM_RC response_code,
5989                               const TPM2B_MAX_NV_BUFFER& data)>
5990       NV_ReadResponse;
5991   static TPM_RC SerializeCommand_NV_Read(
5992       const TPMI_RH_NV_AUTH& auth_handle,
5993       const std::string& auth_handle_name,
5994       const TPMI_RH_NV_INDEX& nv_index,
5995       const std::string& nv_index_name,
5996       const UINT16& size,
5997       const UINT16& offset,
5998       std::string* serialized_command,
5999       AuthorizationDelegate* authorization_delegate);
6000   static TPM_RC ParseResponse_NV_Read(
6001       const std::string& response,
6002       TPM2B_MAX_NV_BUFFER* data,
6003       AuthorizationDelegate* authorization_delegate);
6004   virtual void NV_Read(const TPMI_RH_NV_AUTH& auth_handle,
6005                        const std::string& auth_handle_name,
6006                        const TPMI_RH_NV_INDEX& nv_index,
6007                        const std::string& nv_index_name,
6008                        const UINT16& size,
6009                        const UINT16& offset,
6010                        AuthorizationDelegate* authorization_delegate,
6011                        const NV_ReadResponse& callback);
6012   virtual TPM_RC NV_ReadSync(const TPMI_RH_NV_AUTH& auth_handle,
6013                              const std::string& auth_handle_name,
6014                              const TPMI_RH_NV_INDEX& nv_index,
6015                              const std::string& nv_index_name,
6016                              const UINT16& size,
6017                              const UINT16& offset,
6018                              TPM2B_MAX_NV_BUFFER* data,
6019                              AuthorizationDelegate* authorization_delegate);
6020   typedef base::Callback<void(TPM_RC response_code)> NV_ReadLockResponse;
6021   static TPM_RC SerializeCommand_NV_ReadLock(
6022       const TPMI_RH_NV_AUTH& auth_handle,
6023       const std::string& auth_handle_name,
6024       const TPMI_RH_NV_INDEX& nv_index,
6025       const std::string& nv_index_name,
6026       std::string* serialized_command,
6027       AuthorizationDelegate* authorization_delegate);
6028   static TPM_RC ParseResponse_NV_ReadLock(
6029       const std::string& response,
6030       AuthorizationDelegate* authorization_delegate);
6031   virtual void NV_ReadLock(const TPMI_RH_NV_AUTH& auth_handle,
6032                            const std::string& auth_handle_name,
6033                            const TPMI_RH_NV_INDEX& nv_index,
6034                            const std::string& nv_index_name,
6035                            AuthorizationDelegate* authorization_delegate,
6036                            const NV_ReadLockResponse& callback);
6037   virtual TPM_RC NV_ReadLockSync(const TPMI_RH_NV_AUTH& auth_handle,
6038                                  const std::string& auth_handle_name,
6039                                  const TPMI_RH_NV_INDEX& nv_index,
6040                                  const std::string& nv_index_name,
6041                                  AuthorizationDelegate* authorization_delegate);
6042   typedef base::Callback<void(TPM_RC response_code)> NV_ChangeAuthResponse;
6043   static TPM_RC SerializeCommand_NV_ChangeAuth(
6044       const TPMI_RH_NV_INDEX& nv_index,
6045       const std::string& nv_index_name,
6046       const TPM2B_AUTH& new_auth,
6047       std::string* serialized_command,
6048       AuthorizationDelegate* authorization_delegate);
6049   static TPM_RC ParseResponse_NV_ChangeAuth(
6050       const std::string& response,
6051       AuthorizationDelegate* authorization_delegate);
6052   virtual void NV_ChangeAuth(const TPMI_RH_NV_INDEX& nv_index,
6053                              const std::string& nv_index_name,
6054                              const TPM2B_AUTH& new_auth,
6055                              AuthorizationDelegate* authorization_delegate,
6056                              const NV_ChangeAuthResponse& callback);
6057   virtual TPM_RC NV_ChangeAuthSync(
6058       const TPMI_RH_NV_INDEX& nv_index,
6059       const std::string& nv_index_name,
6060       const TPM2B_AUTH& new_auth,
6061       AuthorizationDelegate* authorization_delegate);
6062   typedef base::Callback<void(TPM_RC response_code,
6063                               const TPM2B_ATTEST& certify_info,
6064                               const TPMT_SIGNATURE& signature)>
6065       NV_CertifyResponse;
6066   static TPM_RC SerializeCommand_NV_Certify(
6067       const TPMI_DH_OBJECT& sign_handle,
6068       const std::string& sign_handle_name,
6069       const TPMI_RH_NV_AUTH& auth_handle,
6070       const std::string& auth_handle_name,
6071       const TPMI_RH_NV_INDEX& nv_index,
6072       const std::string& nv_index_name,
6073       const TPM2B_DATA& qualifying_data,
6074       const TPMT_SIG_SCHEME& in_scheme,
6075       const UINT16& size,
6076       const UINT16& offset,
6077       std::string* serialized_command,
6078       AuthorizationDelegate* authorization_delegate);
6079   static TPM_RC ParseResponse_NV_Certify(
6080       const std::string& response,
6081       TPM2B_ATTEST* certify_info,
6082       TPMT_SIGNATURE* signature,
6083       AuthorizationDelegate* authorization_delegate);
6084   virtual void NV_Certify(const TPMI_DH_OBJECT& sign_handle,
6085                           const std::string& sign_handle_name,
6086                           const TPMI_RH_NV_AUTH& auth_handle,
6087                           const std::string& auth_handle_name,
6088                           const TPMI_RH_NV_INDEX& nv_index,
6089                           const std::string& nv_index_name,
6090                           const TPM2B_DATA& qualifying_data,
6091                           const TPMT_SIG_SCHEME& in_scheme,
6092                           const UINT16& size,
6093                           const UINT16& offset,
6094                           AuthorizationDelegate* authorization_delegate,
6095                           const NV_CertifyResponse& callback);
6096   virtual TPM_RC NV_CertifySync(const TPMI_DH_OBJECT& sign_handle,
6097                                 const std::string& sign_handle_name,
6098                                 const TPMI_RH_NV_AUTH& auth_handle,
6099                                 const std::string& auth_handle_name,
6100                                 const TPMI_RH_NV_INDEX& nv_index,
6101                                 const std::string& nv_index_name,
6102                                 const TPM2B_DATA& qualifying_data,
6103                                 const TPMT_SIG_SCHEME& in_scheme,
6104                                 const UINT16& size,
6105                                 const UINT16& offset,
6106                                 TPM2B_ATTEST* certify_info,
6107                                 TPMT_SIGNATURE* signature,
6108                                 AuthorizationDelegate* authorization_delegate);
6109 
6110  private:
6111   CommandTransceiver* transceiver_;
6112 
6113   DISALLOW_COPY_AND_ASSIGN(Tpm);
6114 };
6115 
6116 }  // namespace trunks
6117 
6118 #endif  // TRUNKS_TPM_GENERATED_H_
6119