Coverage Report

Created: 2025-07-12 06:35

/src/ibmswtpm2/src/Marshal.c
Line
Count
Source (jump to first uncovered line)
1
/********************************************************************************/
2
/*                    */
3
/*        Parameter Marshaling          */
4
/*           Written by Ken Goldman       */
5
/*           IBM Thomas J. Watson Research Center     */
6
/*            $Id: Marshal.c 1262 2018-07-11 21:03:43Z kgoldman $   */
7
/*                    */
8
/*  Licenses and Notices              */
9
/*                    */
10
/*  1. Copyright Licenses:              */
11
/*                    */
12
/*  - Trusted Computing Group (TCG) grants to the user of the source code in  */
13
/*    this specification (the "Source Code") a worldwide, irrevocable,    */
14
/*    nonexclusive, royalty free, copyright license to reproduce, create  */
15
/*    derivative works, distribute, display and perform the Source Code and */
16
/*    derivative works thereof, and to grant others the rights granted herein.  */
17
/*                    */
18
/*  - The TCG grants to the user of the other parts of the specification  */
19
/*    (other than the Source Code) the rights to reproduce, distribute,   */
20
/*    display, and perform the specification solely for the purpose of    */
21
/*    developing products based on such documents.        */
22
/*                    */
23
/*  2. Source Code Distribution Conditions:         */
24
/*                    */
25
/*  - Redistributions of Source Code must retain the above copyright licenses,  */
26
/*    this list of conditions and the following disclaimers.      */
27
/*                    */
28
/*  - Redistributions in binary form must reproduce the above copyright   */
29
/*    licenses, this list of conditions and the following disclaimers in the  */
30
/*    documentation and/or other materials provided with the distribution.  */
31
/*                    */
32
/*  3. Disclaimers:               */
33
/*                    */
34
/*  - THE COPYRIGHT LICENSES SET FORTH ABOVE DO NOT REPRESENT ANY FORM OF */
35
/*  LICENSE OR WAIVER, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, WITH */
36
/*  RESPECT TO PATENT RIGHTS HELD BY TCG MEMBERS (OR OTHER THIRD PARTIES) */
37
/*  THAT MAY BE NECESSARY TO IMPLEMENT THIS SPECIFICATION OR OTHERWISE.   */
38
/*  Contact TCG Administration (admin@trustedcomputinggroup.org) for    */
39
/*  information on specification licensing rights available through TCG   */
40
/*  membership agreements.              */
41
/*                    */
42
/*  - THIS SPECIFICATION IS PROVIDED "AS IS" WITH NO EXPRESS OR IMPLIED   */
43
/*    WARRANTIES WHATSOEVER, INCLUDING ANY WARRANTY OF MERCHANTABILITY OR   */
44
/*    FITNESS FOR A PARTICULAR PURPOSE, ACCURACY, COMPLETENESS, OR    */
45
/*    NONINFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS, OR ANY WARRANTY    */
46
/*    OTHERWISE ARISING OUT OF ANY PROPOSAL, SPECIFICATION OR SAMPLE.   */
47
/*                    */
48
/*  - Without limitation, TCG and its members and licensors disclaim all  */
49
/*    liability, including liability for infringement of any proprietary  */
50
/*    rights, relating to use of information in this specification and to the */
51
/*    implementation of this specification, and TCG disclaims all liability for */
52
/*    cost of procurement of substitute goods or services, lost profits, loss   */
53
/*    of use, loss of data or any incidental, consequential, direct, indirect,  */
54
/*    or special damages, whether under contract, tort, warranty or otherwise,  */
55
/*    arising in any way out of use or reliance upon this specification or any  */
56
/*    information herein.             */
57
/*                    */
58
/*  (c) Copyright IBM Corp. and others, 2016 - 2018       */
59
/*                    */
60
/********************************************************************************/
61
62
/* rev 136 */
63
64
#include <string.h>
65
66
#include "Tpm.h"
67
#include "Marshal_fp.h"
68
69
UINT16
70
UINT8_Marshal(UINT8 *source, BYTE **buffer, INT32 *size)
71
0
{
72
0
    if (buffer != NULL) {
73
0
  if ((size == NULL) || ((UINT32)*size >= sizeof(UINT8))) {
74
75
0
      (*buffer)[0] = *source;
76
0
      *buffer += sizeof(UINT8);
77
78
0
      if (size != NULL) {
79
0
    *size -= sizeof(UINT8);
80
0
      }
81
0
  }
82
0
  else {
83
0
      pAssert(FALSE);
84
0
  }
85
0
    }
86
0
    return sizeof(UINT8);
87
0
}
88
    
89
UINT16
90
INT8_Marshal(INT8 *source, BYTE **buffer, INT32 *size)
91
0
{
92
0
    return UINT8_Marshal((UINT8 *)source, buffer, size);
93
0
}
94
    
95
UINT16
96
UINT16_Marshal(UINT16 *source, BYTE **buffer, INT32 *size)
97
9.43k
{
98
9.43k
    if (buffer != NULL) {
99
9.43k
  if ((size == NULL) || ((UINT32)*size >= sizeof(UINT16))) {
100
101
9.43k
      (*buffer)[0] = (BYTE)((*source >> 8) & 0xff);
102
9.43k
      (*buffer)[1] = (BYTE)((*source >> 0) & 0xff);
103
9.43k
      *buffer += sizeof(UINT16);
104
105
9.43k
      if (size != NULL) {
106
0
    *size -= sizeof(UINT16);
107
0
      }
108
9.43k
  }
109
0
  else {
110
0
      pAssert(FALSE);
111
0
  }
112
9.43k
    }
113
9.43k
    return sizeof(UINT16);
114
9.43k
}
115
116
UINT16
117
UINT32_Marshal(UINT32 *source, BYTE **buffer, INT32 *size)
118
18.8k
{
119
18.8k
    if (buffer != NULL) {
120
18.8k
  if ((size == NULL) || ((UINT32)*size >= sizeof(UINT32))) {
121
122
18.8k
      (*buffer)[0] = (BYTE)((*source >> 24) & 0xff);
123
18.8k
      (*buffer)[1] = (BYTE)((*source >> 16) & 0xff);
124
18.8k
      (*buffer)[2] = (BYTE)((*source >>  8) & 0xff);
125
18.8k
      (*buffer)[3] = (BYTE)((*source >>  0) & 0xff);
126
18.8k
      *buffer += sizeof(UINT32);
127
128
18.8k
      if (size != NULL) {
129
0
    *size -= sizeof(UINT32);
130
0
      }
131
18.8k
  }
132
0
  else {
133
0
      pAssert(FALSE);
134
0
  }
135
18.8k
    }
136
18.8k
    return sizeof(UINT32);
137
18.8k
}
138
139
UINT16
140
INT32_Marshal(INT32 *source, BYTE **buffer, INT32 *size)
141
0
{
142
0
    return UINT32_Marshal((UINT32 *)source, buffer, size);
143
0
}
144
145
UINT16
146
UINT64_Marshal(UINT64 *source, BYTE **buffer, INT32 *size)
147
0
{
148
0
    if (buffer != NULL) {
149
0
  if ((size == NULL) || ((UINT32)*size >= sizeof(UINT64))) {
150
151
0
      (*buffer)[0] = (BYTE)((*source >> 56) & 0xff);
152
0
      (*buffer)[1] = (BYTE)((*source >> 48) & 0xff);
153
0
      (*buffer)[2] = (BYTE)((*source >> 40) & 0xff);
154
0
      (*buffer)[3] = (BYTE)((*source >> 32) & 0xff);
155
0
      (*buffer)[4] = (BYTE)((*source >> 24) & 0xff);
156
0
      (*buffer)[5] = (BYTE)((*source >> 16) & 0xff);
157
0
      (*buffer)[6] = (BYTE)((*source >>  8) & 0xff);
158
0
      (*buffer)[7] = (BYTE)((*source >>  0) & 0xff);
159
0
      *buffer += sizeof(UINT64);
160
161
0
      if (size != NULL) {
162
0
    *size -= sizeof(UINT64);
163
0
      }
164
0
  }
165
0
  else {
166
0
      pAssert(FALSE);
167
0
  }
168
0
    }
169
0
    return sizeof(UINT64);
170
0
}
171
172
UINT16
173
Array_Marshal(BYTE *sourceBuffer, UINT16 sourceSize, BYTE **buffer, INT32 *size)
174
0
{
175
0
    if (buffer != NULL) {
176
0
  if ((size == NULL) || (*size >= sourceSize)) {
177
0
      memcpy(*buffer, sourceBuffer, sourceSize);
178
179
0
      *buffer += sourceSize;
180
181
0
      if (size != NULL) {
182
0
    *size -= sourceSize;
183
0
      }
184
0
  }
185
0
  else {
186
0
      pAssert(FALSE);
187
0
  }
188
0
    }
189
0
    return sourceSize;
190
0
}
191
192
UINT16
193
TPM2B_Marshal(TPM2B *source, BYTE **buffer, INT32 *size)
194
0
{
195
0
    UINT16 written = 0;
196
0
    written += UINT16_Marshal(&(source->size), buffer, size);
197
0
    written += Array_Marshal(source->buffer, source->size, buffer, size); 
198
0
    return written;
199
0
}
200
201
/* Table 2:5 - Definition of Types for Documentation Clarity (TypedefTable()) */
202
203
UINT16
204
TPM_KEY_BITS_Marshal(TPM_KEY_BITS *source, BYTE **buffer, INT32 *size)
205
0
{
206
0
    UINT16 written = 0;
207
0
    written += UINT16_Marshal(source, buffer, size);
208
0
    return written;
209
0
}
210
   
211
/* Table 2:7 - Definition of TPM_GENERATED Constants (EnumTable()) */
212
UINT16
213
TPM_GENERATED_Marshal(TPM_GENERATED *source, BYTE **buffer, INT32 *size)
214
0
{
215
0
    UINT16 written = 0;
216
0
    written += UINT32_Marshal(source, buffer, size);
217
0
    return written;
218
0
}
219
220
/* Table 9 - Definition of (UINT16) TPM_ALG_ID Constants <IN/OUT, S> */
221
222
UINT16
223
TPM_ALG_ID_Marshal(TPM_ALG_ID *source, BYTE **buffer, INT32 *size)
224
0
{
225
0
    UINT16 written = 0;
226
0
    written += UINT16_Marshal(source, buffer, size);
227
0
    return written;
228
0
}
229
230
/* Table 10 - Definition of (UINT16) {ECC} TPM_ECC_CURVE Constants <IN/OUT, S> */
231
232
#if ALG_ECC
233
UINT16
234
TPM_ECC_CURVE_Marshal(TPM_ECC_CURVE *source, BYTE **buffer, INT32 *size)
235
0
{
236
0
    UINT16 written = 0;
237
0
    written += UINT16_Marshal(source, buffer, size);
238
0
    return written;
239
0
}
240
#endif 
241
242
/* Table 12 - Definition of TPM_CC Constants */
243
244
UINT16
245
TPM_CC_Marshal(TPM_CC *source, BYTE **buffer, INT32 *size)
246
0
{
247
0
    UINT16 written = 0;
248
0
    written += UINT32_Marshal(source, buffer, size);
249
0
    return written;
250
0
}
251
252
/* Table 2:16 - Definition of TPM_RC Constants (EnumTable()) */
253
254
UINT16
255
TPM_RC_Marshal(TPM_RC *source, BYTE **buffer, INT32 *size)
256
9.43k
{
257
9.43k
    UINT16 written = 0;
258
9.43k
    written += UINT32_Marshal(source, buffer, size);
259
9.43k
    return written;
260
9.43k
}
261
262
/* Table 2:19 - Definition of TPM_ST Constants (EnumTable()) */
263
264
UINT16
265
TPM_ST_Marshal(TPM_ST *source, BYTE **buffer, INT32 *size)
266
9.43k
{
267
9.43k
    UINT16 written = 0;
268
9.43k
    written += UINT16_Marshal(source, buffer, size);
269
9.43k
    return written;
270
9.43k
}
271
 
272
/* Table 2:22 - Definition of TPM_CAP Constants (EnumTable()) */
273
274
INT16
275
TPM_CAP_Marshal(TPM_CAP *source, BYTE **buffer, INT32 *size)
276
0
{
277
0
    UINT16 written = 0;
278
0
    written += UINT32_Marshal(source, buffer, size);
279
0
    return written;
280
0
}
281
282
/* Table 2:23 - Definition of TPM_PT Constants (EnumTable()) */
283
284
UINT16
285
TPM_PT_Marshal(TPM_PT *source, BYTE **buffer, INT32 *size)
286
0
{
287
0
    UINT16 written = 0;
288
0
    written += UINT32_Marshal(source, buffer, size);
289
0
    return written;
290
0
}
291
292
/* Table 2:24 - Definition of TPM_PT_PCR Constants (EnumTable()) */
293
294
UINT16
295
TPM_PT_PCR_Marshal(TPM_PT_PCR *source, BYTE **buffer, INT32 *size)
296
0
{
297
0
    UINT16 written = 0;
298
0
    written += UINT32_Marshal(source, buffer, size);
299
0
    return written;
300
0
}
301
302
/* Table 2:26 - Definition of Types for Handles (TypedefTable()) */
303
304
UINT16
305
TPM_HANDLE_Marshal(TPM_HANDLE *source, BYTE **buffer, INT32 *size)
306
0
{
307
0
    UINT16 written = 0;
308
0
    written += UINT32_Marshal(source, buffer, size);
309
0
    return written;
310
0
}
311
312
/* Table 2:30 - Definition of TPMA_ALGORITHM Bits (BitsTable()) */
313
314
UINT16
315
TPMA_ALGORITHM_Marshal(TPMA_ALGORITHM *source, BYTE **buffer, INT32 *size)
316
0
{
317
0
    UINT16 written = 0;
318
0
    written += UINT32_Marshal((UINT32 *)source, buffer, size);
319
0
    return written;
320
0
}
321
322
/* Table 2:31 - Definition of TPMA_OBJECT Bits (BitsTable()) */
323
324
UINT16
325
TPMA_OBJECT_Marshal(TPMA_OBJECT *source, BYTE **buffer, INT32 *size)
326
0
{
327
0
    UINT16 written = 0;
328
0
    written += UINT32_Marshal((UINT32 *)source, buffer, size);
329
0
    return written;
330
0
}
331
 
332
/* Table 2:32 - Definition of TPMA_SESSION Bits (BitsTable()) */
333
334
UINT16
335
TPMA_SESSION_Marshal(TPMA_SESSION *source, BYTE **buffer, INT32 *size)
336
0
{
337
0
    UINT16 written = 0;
338
0
    written += UINT8_Marshal(source, buffer, size);
339
0
    return written;
340
0
}
341
342
/* Table 2:33 - Definition of TPMA_LOCALITY Bits (BitsTable()) */
343
344
UINT16
345
TPMA_LOCALITY_Marshal(TPMA_LOCALITY *source, BYTE **buffer, INT32 *size)
346
0
{
347
0
    UINT16 written = 0;
348
0
    written += UINT8_Marshal(source, buffer, size);
349
0
    return written;
350
0
}
351
352
/* Table 2:37 - Definition of TPMA_CC Bits (BitsTable()) */
353
354
UINT16
355
TPMA_CC_Marshal(TPMA_CC *source, BYTE **buffer, INT32 *size)
356
0
{
357
0
    UINT16 written = 0;
358
0
    written += UINT32_Marshal((UINT32 *)source, buffer, size);
359
0
    return written;
360
0
}
361
362
/* Table 2:39 - Definition of TPMI_YES_NO Type (InterfaceTable()) */
363
364
UINT16
365
TPMI_YES_NO_Marshal(TPMI_YES_NO *source, BYTE **buffer, INT32 *size)
366
0
{
367
0
    UINT16 written = 0;
368
0
    written += UINT8_Marshal(source, buffer, size);
369
0
    return written;
370
0
}
371
372
/* Table 2:48 - Definition of TPMI_DH_CONTEXT Type (InterfaceTable()) */
373
374
UINT16
375
TPMI_DH_CONTEXT_Marshal(TPMI_DH_CONTEXT *source, BYTE **buffer, INT32 *size)
376
0
{
377
0
    UINT16 written = 0;
378
0
    written += TPM_HANDLE_Marshal(source, buffer, size);
379
0
    return written;
380
0
}
381
382
/* Table 2:49 - Definition of TPMI_DH_SAVED Type (InterfaceTable()) */
383
384
UINT16
385
TPMI_DH_SAVED_Marshal(TPMI_DH_CONTEXT *source, BYTE **buffer, INT32 *size)
386
0
{
387
0
    UINT16 written = 0;
388
0
    written += TPM_HANDLE_Marshal(source, buffer, size);
389
0
    return written;
390
0
}
391
392
//* Table 2:49 - Definition of TPMI_RH_HIERARCHY Type (InterfaceTable()) */
393
394
UINT16
395
TPMI_RH_HIERARCHY_Marshal(TPMI_RH_HIERARCHY *source, BYTE **buffer, INT32 *size)
396
0
{
397
0
    UINT16 written = 0;
398
0
    written += TPM_HANDLE_Marshal(source, buffer, size);
399
0
    return written;
400
0
}
401
   
402
/* Table 2:59 - Definition of TPMI_RH_NV_INDEX Type (InterfaceTable()) */
403
404
UINT16
405
TPMI_RH_NV_INDEX_Marshal(TPMI_RH_NV_INDEX *source, BYTE **buffer, INT32 *size)
406
0
{
407
0
    UINT16 written = 0;
408
0
    written += TPM_HANDLE_Marshal(source, buffer, size);
409
0
    return written;
410
0
}
411
412
/* Table 2:60 - Definition of TPMI_ALG_HASH Type (InterfaceTable()) */
413
414
UINT16
415
TPMI_ALG_HASH_Marshal(TPMI_ALG_HASH *source, BYTE **buffer, INT32 *size)
416
0
{
417
0
    UINT16 written = 0;
418
0
    written += TPM_ALG_ID_Marshal(source, buffer, size);
419
0
    return written;
420
0
}
421
422
/* Table 2:63 - Definition of TPMI_ALG_SYM_OBJECT Type (InterfaceTable()) */
423
424
UINT16
425
TPMI_ALG_SYM_OBJECT_Marshal(TPMI_ALG_SYM_OBJECT *source, BYTE **buffer, INT32 *size)
426
0
{
427
0
    UINT16 written = 0;
428
0
    written += TPM_ALG_ID_Marshal(source, buffer, size);
429
0
    return written;
430
0
}
431
432
/* Table 2:64 - Definition of TPMI_ALG_SYM_MODE Type (InterfaceTable()) */
433
434
UINT16
435
TPMI_ALG_SYM_MODE_Marshal(TPMI_ALG_SYM_MODE *source, BYTE **buffer, INT32 *size)
436
0
{
437
0
    UINT16 written = 0;
438
0
    written += TPM_ALG_ID_Marshal(source, buffer, size);
439
0
    return written;
440
0
}
441
442
/* Table 2:65 - Definition of TPMI_ALG_KDF Type (InterfaceTable()) */
443
444
UINT16
445
TPMI_ALG_KDF_Marshal(TPMI_ALG_KDF *source, BYTE **buffer, INT32 *size)
446
0
{
447
0
    UINT16 written = 0;
448
0
    written += TPM_ALG_ID_Marshal(source, buffer, size);
449
0
    return written;
450
0
}
451
452
/* Table 2:66 - Definition of TPMI_ALG_SIG_SCHEME Type (InterfaceTable()) */
453
454
UINT16
455
TPMI_ALG_SIG_SCHEME_Marshal(TPMI_ALG_SIG_SCHEME *source, BYTE **buffer, INT32 *size)
456
0
{
457
0
    UINT16 written = 0;
458
0
    written += TPM_ALG_ID_Marshal(source, buffer, size);
459
0
    return written;
460
0
}
461
462
/* Table 2:71 - Definition of TPMU_HA Union (StructuresTable()) */
463
464
UINT16
465
TPMU_HA_Marshal(TPMU_HA *source, BYTE **buffer, INT32 *size, UINT32 selector)
466
0
{
467
0
    UINT16 written = 0;
468
469
0
    switch (selector) {
470
0
#if ALG_SHA1
471
0
      case TPM_ALG_SHA1:
472
0
  written += Array_Marshal(&source->sha1[0], SHA1_DIGEST_SIZE, buffer, size); 
473
0
  break;
474
0
#endif
475
0
#if ALG_SHA256
476
0
      case TPM_ALG_SHA256:
477
0
  written += Array_Marshal(&source->sha256[0], SHA256_DIGEST_SIZE, buffer, size); 
478
0
  break;
479
0
#endif
480
0
#if ALG_SHA384
481
0
      case TPM_ALG_SHA384:
482
0
  written += Array_Marshal(&source->sha384[0], SHA384_DIGEST_SIZE, buffer, size);
483
0
  break;
484
0
#endif
485
0
#if ALG_SHA512
486
0
      case TPM_ALG_SHA512:
487
0
  written += Array_Marshal(&source->sha512[0], SHA512_DIGEST_SIZE, buffer, size);
488
0
  break;
489
0
#endif
490
#if ALG_SM3_256
491
      case TPM_ALG_SM3_256:
492
  written += Array_Marshal(&source->sm3_256[0], SM3_256_DIGEST_SIZE, buffer, size);
493
  break;
494
#endif
495
0
      case TPM_ALG_NULL:
496
0
  break;
497
0
      default:
498
0
  pAssert(FALSE);
499
0
    }
500
0
    return written;
501
0
}
502
503
/* Table 2:72 - Definition of TPMT_HA Structure (StructuresTable()) */
504
505
UINT16
506
TPMT_HA_Marshal(TPMT_HA *source, BYTE **buffer, INT32 *size)
507
0
{
508
0
    UINT16 written = 0;
509
0
    written += TPMI_ALG_HASH_Marshal(&source->hashAlg, buffer, size);
510
0
    written += TPMU_HA_Marshal(&source->digest, buffer, size, source->hashAlg);
511
0
    return written;
512
0
}
513
514
/* Table 2:73 - Definition of TPM2B_DIGEST Structure (StructuresTable()) */
515
516
UINT16
517
TPM2B_DIGEST_Marshal(TPM2B_DIGEST *source, BYTE **buffer, INT32 *size)
518
0
{
519
0
UINT16 written = 0;
520
0
written += TPM2B_Marshal(&source->b, buffer, size);
521
0
return written;
522
0
}
523
524
/* Table 2:74 - Definition of TPM2B_DATA Structure (StructuresTable()) */
525
526
UINT16
527
TPM2B_DATA_Marshal(TPM2B_DATA *source, BYTE **buffer, INT32 *size)
528
0
{
529
0
UINT16 written = 0;
530
0
written += TPM2B_Marshal(&source->b, buffer, size);
531
0
return written;
532
0
}
533
534
/* Table 2:75 - Definition of Types for TPM2B_NONCE (TypedefTable()) */
535
536
UINT16
537
TPM2B_NONCE_Marshal(TPM2B_NONCE *source, BYTE **buffer, INT32 *size)
538
0
{
539
0
UINT16 written = 0;
540
0
written += TPM2B_DIGEST_Marshal(source, buffer, size);
541
0
return written;
542
0
}
543
544
/* Table 2:76 - Definition of Types for TPM2B_AUTH (TypedefTable()) */
545
546
UINT16
547
TPM2B_AUTH_Marshal(TPM2B_AUTH *source, BYTE **buffer, INT32 *size)
548
0
{
549
0
    UINT16 written = 0;
550
0
    written += TPM2B_DIGEST_Marshal(source, buffer, size);
551
0
    return written;
552
0
}
553
554
/* Table 2:79 - Definition of TPM2B_MAX_BUFFER Structure (StructuresTable()) */
555
556
UINT16
557
TPM2B_MAX_BUFFER_Marshal(TPM2B_MAX_BUFFER *source, BYTE **buffer, INT32 *size)
558
0
{
559
0
    UINT16 written = 0;
560
0
    written += TPM2B_Marshal(&source->b, buffer, size);
561
0
    return written;
562
0
}
563
564
/* Table 2:80 - Definition of TPM2B_MAX_NV_BUFFER Structure (StructuresTable()) */
565
566
UINT16
567
TPM2B_MAX_NV_BUFFER_Marshal(TPM2B_MAX_NV_BUFFER *source, BYTE **buffer, INT32 *size)
568
0
{
569
0
    UINT16 written = 0;
570
0
    written += TPM2B_Marshal(&source->b, buffer, size);
571
0
    return written;
572
0
}
573
574
/* Table 80 - Definition of TPM2B_TIMEOUT Structure <IN/OUT> */
575
UINT16
576
TPM2B_TIMEOUT_Marshal(TPM2B_TIMEOUT *source, BYTE **buffer, INT32 *size)
577
0
{
578
0
    UINT16 written = 0;
579
0
    written += TPM2B_Marshal(&source->b, buffer, size);
580
0
    return written;
581
0
}
582
583
/* Table 2:82 - Definition of TPM2B_IV Structure (StructuresTable()) */
584
585
UINT16
586
TPM2B_IV_Marshal(TPM2B_IV *source, BYTE **buffer, INT32 *size)
587
0
{
588
0
    UINT16 written = 0;
589
0
    written += TPM2B_Marshal(&source->b, buffer, size);
590
0
    return written;
591
0
}
592
593
/* Table 2:84 - Definition of TPM2B_NAME Structure (StructuresTable()) */
594
595
UINT16
596
TPM2B_NAME_Marshal(TPM2B_NAME *source, BYTE **buffer, INT32 *size)
597
0
{
598
0
    UINT16 written = 0;
599
0
    written += TPM2B_Marshal(&source->b, buffer, size);
600
0
    return written;
601
0
}
602
603
/* Table 2:86 - Definition of TPMS_PCR_SELECTION Structure (StructuresTable()) */
604
605
UINT16
606
TPMS_PCR_SELECTION_Marshal(TPMS_PCR_SELECTION *source, BYTE **buffer, INT32 *size)
607
0
{
608
0
    UINT16 written = 0;
609
610
0
    written += TPMI_ALG_HASH_Marshal(&source->hash, buffer, size);
611
0
    written += UINT8_Marshal(&source->sizeofSelect, buffer, size);
612
0
    written += Array_Marshal(&source->pcrSelect[0], source->sizeofSelect, buffer, size);
613
0
    return written;
614
0
}
615
616
/* Table 2:89 - Definition of TPMT_TK_CREATION Structure (StructuresTable()) */
617
618
UINT16
619
TPMT_TK_CREATION_Marshal(TPMT_TK_CREATION *source, BYTE **buffer, INT32 *size)
620
0
{
621
0
    UINT16 written = 0;
622
623
0
    written += TPM_ST_Marshal(&source->tag, buffer, size);
624
0
    written += TPMI_RH_HIERARCHY_Marshal(&source->hierarchy, buffer, size);
625
0
    written += TPM2B_DIGEST_Marshal(&source->digest, buffer, size);
626
0
    return written;
627
0
}
628
629
/* Table 2:90 - Definition of TPMT_TK_VERIFIED Structure (StructuresTable()) */
630
631
UINT16
632
TPMT_TK_VERIFIED_Marshal(TPMT_TK_VERIFIED *source, BYTE **buffer, INT32 *size)
633
0
{
634
0
    UINT16 written = 0;
635
636
0
    written += TPM_ST_Marshal(&source->tag, buffer, size);
637
0
    written += TPMI_RH_HIERARCHY_Marshal(&source->hierarchy, buffer, size);
638
0
    written += TPM2B_DIGEST_Marshal(&source->digest, buffer, size);
639
0
    return written;
640
0
}
641
642
/* Table 2:91 - Definition of TPMT_TK_AUTH Structure (StructuresTable()) */
643
644
UINT16
645
TPMT_TK_AUTH_Marshal(TPMT_TK_AUTH *source, BYTE **buffer, INT32 *size)
646
0
{
647
0
    UINT16 written = 0;
648
649
0
    written += TPM_ST_Marshal(&source->tag, buffer, size);
650
0
    written += TPMI_RH_HIERARCHY_Marshal(&source->hierarchy, buffer, size);
651
0
    written += TPM2B_DIGEST_Marshal(&source->digest, buffer, size);
652
0
    return written;
653
0
}
654
655
/* Table 2:92 - Definition of TPMT_TK_HASHCHECK Structure (StructuresTable()) */
656
657
UINT16
658
TPMT_TK_HASHCHECK_Marshal(TPMT_TK_HASHCHECK *source, BYTE **buffer, INT32 *size)
659
0
{
660
0
    UINT16 written = 0;
661
662
0
    written += TPM_ST_Marshal(&source->tag, buffer, size);
663
0
    written += TPMI_RH_HIERARCHY_Marshal(&source->hierarchy, buffer, size);
664
0
    written += TPM2B_DIGEST_Marshal(&source->digest, buffer, size);
665
0
    return written;
666
0
}
667
668
/* Table 2:93 - Definition of TPMS_ALG_PROPERTY Structure (StructuresTable()) */
669
670
UINT16
671
TPMS_ALG_PROPERTY_Marshal(TPMS_ALG_PROPERTY *source, BYTE **buffer, INT32 *size)
672
0
{
673
0
    UINT16 written = 0;
674
675
0
    written += TPM_ALG_ID_Marshal(&source->alg, buffer, size);
676
0
    written += TPMA_ALGORITHM_Marshal(&source->algProperties, buffer, size);
677
0
    return written;
678
0
}
679
680
/* Table 2:95 - Definition of TPMS_TAGGED_PCR_SELECT Structure (StructuresTable()) */
681
682
UINT16
683
TPMS_TAGGED_PCR_SELECT_Marshal(TPMS_TAGGED_PCR_SELECT *source, BYTE **buffer, INT32 *size)
684
0
{
685
0
    UINT16 written = 0;
686
687
0
    written += TPM_PT_PCR_Marshal(&source->tag, buffer, size);
688
0
    written += UINT8_Marshal(&source->sizeofSelect, buffer, size);
689
0
    written += Array_Marshal(&source->pcrSelect[0], source->sizeofSelect, buffer, size);
690
0
    return written;
691
0
}
692
693
/* Table 2:96 - Definition of TPMS_TAGGED_POLICY Structure (StructuresTable()) */
694
695
UINT16
696
TPMS_TAGGED_POLICY_Marshal(TPMS_TAGGED_POLICY *source, BYTE **buffer, INT32 *size)
697
0
{
698
0
    UINT16 written = 0;
699
700
0
    written += TPM_HANDLE_Marshal(&source->handle, buffer, size);
701
0
    written += TPMT_HA_Marshal(&source->policyHash, buffer, size);
702
0
    return written;
703
0
}
704
705
/* Table 2:94 - Definition of TPMS_TAGGED_PROPERTY Structure (StructuresTable()) */
706
707
UINT16
708
TPMS_TAGGED_PROPERTY_Marshal(TPMS_TAGGED_PROPERTY *source, BYTE **buffer, INT32 *size)
709
0
{
710
0
    UINT16 written = 0;
711
712
0
    written += TPM_PT_Marshal(&source->property, buffer, size);
713
0
    written += UINT32_Marshal(&source->value, buffer, size);
714
0
    return written;
715
0
}
716
717
/* Table 2:97 - Definition of TPML_CC Structure (StructuresTable()) */
718
719
UINT16
720
TPML_CC_Marshal(TPML_CC *source, BYTE **buffer, INT32 *size)
721
0
{
722
0
    UINT16 written = 0;
723
0
    UINT32 i;
724
    
725
0
    written += UINT32_Marshal(&source->count, buffer, size);
726
0
    for (i = 0 ; i < source->count ; i++) {
727
0
  written += TPM_CC_Marshal(&source->commandCodes[i], buffer, size);
728
0
    }
729
0
    return written;
730
0
}
731
732
/* Table 2:98 - Definition of TPML_CCA Structure (StructuresTable()) */
733
734
UINT16
735
TPML_CCA_Marshal(TPML_CCA *source, BYTE **buffer, INT32 *size)
736
0
{
737
0
    UINT16 written = 0;
738
0
    UINT32 i;
739
    
740
0
    written += UINT32_Marshal(&source->count, buffer, size);
741
0
    for (i = 0 ; i < source->count ; i++) {
742
0
  written += TPMA_CC_Marshal(&source->commandAttributes[i], buffer, size);
743
0
    }
744
0
    return written;
745
0
}
746
747
/* Table 2:99 - Definition of TPML_ALG Structure (StructuresTable()) */
748
749
UINT16
750
TPML_ALG_Marshal(TPML_ALG *source, BYTE **buffer, INT32 *size)
751
0
{
752
0
    UINT16 written = 0;
753
0
    UINT32 i;
754
    
755
0
    written += UINT32_Marshal(&source->count, buffer, size);
756
0
    for (i = 0 ; i < source->count ; i++) {
757
0
  written += TPM_ALG_ID_Marshal(&source->algorithms[i], buffer, size);
758
0
    }
759
0
    return written;
760
0
}
761
762
/* Table 2:100 - Definition of TPML_HANDLE Structure (StructuresTable()) */
763
764
UINT16
765
TPML_HANDLE_Marshal(TPML_HANDLE *source, BYTE **buffer, INT32 *size)
766
0
{
767
0
    UINT16 written = 0;
768
0
    UINT32 i;
769
    
770
0
    written += UINT32_Marshal(&source->count, buffer, size);
771
0
    for (i = 0 ; i < source->count ; i++) {
772
0
  written += TPM_HANDLE_Marshal(&source->handle[i], buffer, size);
773
0
    }
774
0
    return written;
775
0
}
776
777
/* Table 2:101 - Definition of TPML_DIGEST Structure (StructuresTable()) */
778
779
UINT16
780
TPML_DIGEST_Marshal(TPML_DIGEST *source, BYTE **buffer, INT32 *size)
781
0
{
782
0
    UINT16 written = 0;
783
0
    UINT32 i;
784
    
785
0
    written += UINT32_Marshal(&source->count, buffer, size);
786
0
    for (i = 0 ; i < source->count ; i++) {
787
0
  written += TPM2B_DIGEST_Marshal(&source->digests[i], buffer, size);
788
0
    }
789
0
    return written;
790
0
}
791
792
/* Table 2:102 - Definition of TPML_DIGEST_VALUES Structure (StructuresTable()) */
793
794
UINT16
795
TPML_DIGEST_VALUES_Marshal(TPML_DIGEST_VALUES *source, BYTE **buffer, INT32 *size)
796
0
{
797
0
    UINT16 written = 0;
798
0
    UINT32 i;
799
    
800
0
    written += UINT32_Marshal(&source->count, buffer, size);
801
0
    for (i = 0 ; i < source->count ; i++) {
802
0
  written += TPMT_HA_Marshal(&source->digests[i], buffer, size);
803
0
    }
804
0
    return written;
805
0
}
806
807
/* Table 2:104 - Definition of TPML_PCR_SELECTION Structure (StructuresTable()) */
808
809
UINT16
810
TPML_PCR_SELECTION_Marshal(TPML_PCR_SELECTION *source, BYTE **buffer, INT32 *size)
811
0
{
812
0
    UINT16 written = 0;
813
0
    UINT32 i;
814
    
815
0
    written += UINT32_Marshal(&source->count, buffer, size);
816
0
    for (i = 0 ; i < source->count ; i++) {
817
0
  written += TPMS_PCR_SELECTION_Marshal(&source->pcrSelections[i], buffer, size);
818
0
    }
819
0
    return written;
820
0
}
821
822
/* Table 2:105 - Definition of TPML_ALG_PROPERTY Structure (StructuresTable()) */
823
824
825
UINT16
826
TPML_ALG_PROPERTY_Marshal(TPML_ALG_PROPERTY *source, BYTE **buffer, INT32 *size)
827
0
{
828
0
    UINT16 written = 0;
829
0
    UINT32 i;
830
    
831
0
    written += UINT32_Marshal(&source->count, buffer, size);
832
0
    for (i = 0 ; i < source->count ; i++) {
833
0
  written += TPMS_ALG_PROPERTY_Marshal(&source->algProperties[i], buffer, size);
834
0
    }
835
0
    return written;
836
0
}
837
838
//* Table 2:106 - Definition of TPML_TAGGED_TPM_PROPERTY Structure (StructuresTable()) */
839
840
UINT16
841
TPML_TAGGED_TPM_PROPERTY_Marshal(TPML_TAGGED_TPM_PROPERTY *source, BYTE **buffer, INT32 *size)
842
0
{
843
0
    UINT16 written = 0;
844
0
    UINT32 i;
845
    
846
0
    written += UINT32_Marshal(&source->count, buffer, size);
847
0
    for (i = 0 ; i < source->count ; i++) {
848
0
  written += TPMS_TAGGED_PROPERTY_Marshal(&source->tpmProperty[i], buffer, size);
849
0
    }
850
0
    return written;
851
0
}
852
853
/* Table 2:107 - Definition of TPML_TAGGED_PCR_PROPERTY Structure (StructuresTable()) */
854
855
UINT16
856
TPML_TAGGED_PCR_PROPERTY_Marshal(TPML_TAGGED_PCR_PROPERTY *source, BYTE **buffer, INT32 *size)
857
0
{
858
0
    UINT16 written = 0;
859
0
    UINT32 i;
860
    
861
0
    written += UINT32_Marshal(&source->count, buffer, size);
862
0
    for (i = 0 ; i < source->count ; i++) {
863
0
  written += TPMS_TAGGED_PCR_SELECT_Marshal(&source->pcrProperty[i], buffer, size);
864
0
    }
865
0
    return written;
866
0
}
867
868
/* Table 2:108 - Definition of TPML_ECC_CURVE Structure (StructuresTable()) */
869
870
UINT16
871
TPML_ECC_CURVE_Marshal(TPML_ECC_CURVE *source, BYTE **buffer, INT32 *size)
872
0
{
873
0
    UINT16 written = 0;
874
875
0
    UINT32 i;
876
    
877
0
    written += UINT32_Marshal(&source->count, buffer, size);
878
0
    for (i = 0 ; i < source->count ; i++) {
879
0
  written += TPM_ECC_CURVE_Marshal(&source->eccCurves[i], buffer, size);
880
0
    }
881
0
    return written;
882
0
}
883
884
/* Table 2:109 - Definition of TPML_TAGGED_POLICY Structure (StructuresTable()) */
885
886
UINT16
887
TPML_TAGGED_POLICY_Marshal(TPML_TAGGED_POLICY *source, BYTE **buffer, INT32 *size)
888
0
{
889
0
    UINT16 written = 0;
890
0
    UINT32 i;
891
    
892
0
    written += UINT32_Marshal(&source->count, buffer, size);
893
0
    for (i = 0 ; i < source->count ; i++) {
894
0
  written += TPMS_TAGGED_POLICY_Marshal(&source->policies[i], buffer, size);
895
0
    }
896
0
    return written;
897
0
}
898
 
899
/* Table 2:110 - Definition of TPMU_CAPABILITIES Union (StructuresTable()) */
900
901
UINT16
902
TPMU_CAPABILITIES_Marshal(TPMU_CAPABILITIES *source, BYTE **buffer, INT32 *size, UINT32 selector)
903
0
{
904
0
    UINT16 written = 0;
905
906
0
    switch (selector) {
907
0
      case TPM_CAP_ALGS:
908
0
  written += TPML_ALG_PROPERTY_Marshal(&source->algorithms, buffer, size);
909
0
  break;
910
0
      case TPM_CAP_HANDLES:
911
0
  written += TPML_HANDLE_Marshal(&source->handles, buffer, size);
912
0
  break;
913
0
      case TPM_CAP_COMMANDS:
914
0
  written += TPML_CCA_Marshal(&source->command, buffer, size);
915
0
  break;
916
0
      case TPM_CAP_PP_COMMANDS:
917
0
  written += TPML_CC_Marshal(&source->ppCommands, buffer, size);
918
0
  break;
919
0
      case TPM_CAP_AUDIT_COMMANDS:
920
0
  written += TPML_CC_Marshal(&source->auditCommands, buffer, size);
921
0
  break;
922
0
      case TPM_CAP_PCRS:
923
0
  written += TPML_PCR_SELECTION_Marshal(&source->assignedPCR, buffer, size);
924
0
  break;
925
0
      case TPM_CAP_TPM_PROPERTIES:
926
0
  written += TPML_TAGGED_TPM_PROPERTY_Marshal(&source->tpmProperties, buffer, size);
927
0
  break;
928
0
      case TPM_CAP_PCR_PROPERTIES:
929
0
  written += TPML_TAGGED_PCR_PROPERTY_Marshal(&source->pcrProperties, buffer, size);
930
0
  break;
931
0
      case TPM_CAP_ECC_CURVES:
932
0
  written += TPML_ECC_CURVE_Marshal(&source->eccCurves, buffer, size);
933
0
  break;
934
0
      case TPM_CAP_AUTH_POLICIES:
935
0
  written += TPML_TAGGED_POLICY_Marshal(&source->authPolicies, buffer, size);
936
0
  break;
937
0
      default:
938
0
  pAssert(FALSE);
939
0
    }
940
0
    return written;
941
0
}
942
943
/* Table 2:111 - Definition of TPMS_CAPABILITY_DATA Structure (StructuresTable()) */
944
945
UINT16
946
TPMS_CAPABILITY_DATA_Marshal(TPMS_CAPABILITY_DATA *source, BYTE **buffer, INT32 *size)
947
0
{
948
0
    UINT16 written = 0;
949
950
0
    written += TPM_CAP_Marshal(&source->capability, buffer, size);
951
0
    written += TPMU_CAPABILITIES_Marshal(&source->data, buffer, size, source->capability);
952
0
    return written;
953
0
}
954
955
/* Table 2:112 - Definition of TPMS_CLOCK_INFO Structure (StructuresTable()) */
956
957
UINT16
958
TPMS_CLOCK_INFO_Marshal(TPMS_CLOCK_INFO *source, BYTE **buffer, INT32 *size)
959
0
{
960
0
    UINT16 written = 0;
961
962
0
    written += UINT64_Marshal(&source->clock, buffer, size);
963
0
    written += UINT32_Marshal(&source->resetCount, buffer, size);
964
0
    written += UINT32_Marshal(&source->restartCount, buffer, size);
965
0
    written += TPMI_YES_NO_Marshal(&source->safe, buffer, size);
966
0
    return written;
967
0
}
968
969
/* Table 2:113 - Definition of TPMS_TIME_INFO Structure (StructuresTable()) */
970
971
UINT16
972
TPMS_TIME_INFO_Marshal(TPMS_TIME_INFO *source, BYTE **buffer, INT32 *size)
973
0
{
974
0
    UINT16 written = 0;
975
976
0
    written += UINT64_Marshal(&source->time, buffer, size);
977
0
    written += TPMS_CLOCK_INFO_Marshal(&source->clockInfo, buffer, size);
978
0
    return written;
979
0
}
980
    
981
/* Table 2:114 - Definition of TPMS_TIME_ATTEST_INFO Structure (StructuresTable()) */
982
983
UINT16
984
TPMS_TIME_ATTEST_INFO_Marshal(TPMS_TIME_ATTEST_INFO *source, BYTE **buffer, INT32 *size)
985
0
{
986
0
    UINT16 written = 0;
987
988
0
    written += TPMS_TIME_INFO_Marshal(&source->time, buffer, size);
989
0
    written += UINT64_Marshal(&source->firmwareVersion, buffer, size);
990
0
    return written;
991
0
}
992
993
/* Table 2:115 - Definition of TPMS_CERTIFY_INFO Structure (StructuresTable()) */
994
995
UINT16
996
TPMS_CERTIFY_INFO_Marshal(TPMS_CERTIFY_INFO *source, BYTE **buffer, INT32 *size)
997
0
{
998
0
    UINT16 written = 0;
999
1000
0
    written += TPM2B_NAME_Marshal(&source->name, buffer, size);
1001
0
    written += TPM2B_NAME_Marshal(&source->qualifiedName, buffer, size);
1002
0
    return written;
1003
0
}
1004
1005
/* Table 2:116 - Definition of TPMS_QUOTE_INFO Structure (StructuresTable()) */
1006
1007
UINT16
1008
TPMS_QUOTE_INFO_Marshal(TPMS_QUOTE_INFO *source, BYTE **buffer, INT32 *size)
1009
0
{
1010
0
    UINT16 written = 0;
1011
1012
0
    written += TPML_PCR_SELECTION_Marshal(&source->pcrSelect, buffer, size);
1013
0
    written += TPM2B_DIGEST_Marshal(&source->pcrDigest, buffer, size);
1014
0
    return written;
1015
0
}
1016
1017
/* Table 2:117 - Definition of TPMS_COMMAND_AUDIT_INFO Structure (StructuresTable()) */
1018
1019
UINT16
1020
TPMS_COMMAND_AUDIT_INFO_Marshal(TPMS_COMMAND_AUDIT_INFO *source, BYTE **buffer, INT32 *size)
1021
0
{
1022
0
    UINT16 written = 0;
1023
1024
0
    written += UINT64_Marshal(&source->auditCounter, buffer, size);
1025
0
    written += TPM_ALG_ID_Marshal(&source->digestAlg, buffer, size);
1026
0
    written += TPM2B_DIGEST_Marshal(&source->auditDigest, buffer, size);
1027
0
    written += TPM2B_DIGEST_Marshal(&source->commandDigest, buffer, size);
1028
0
    return written;
1029
0
}
1030
1031
/* Table 2:118 - Definition of TPMS_SESSION_AUDIT_INFO Structure (StructuresTable()) */
1032
1033
UINT16
1034
TPMS_SESSION_AUDIT_INFO_Marshal(TPMS_SESSION_AUDIT_INFO *source, BYTE **buffer, INT32 *size)
1035
0
{
1036
0
    UINT16 written = 0;
1037
1038
0
    written += TPMI_YES_NO_Marshal(&source->exclusiveSession, buffer, size);
1039
0
    written += TPM2B_DIGEST_Marshal(&source->sessionDigest, buffer, size);
1040
0
    return written;
1041
0
}
1042
1043
/* Table 2:119 - Definition of TPMS_CREATION_INFO Structure (StructuresTable()) */
1044
1045
UINT16
1046
TPMS_CREATION_INFO_Marshal(TPMS_CREATION_INFO *source, BYTE **buffer, INT32 *size)
1047
0
{
1048
0
    UINT16 written = 0;
1049
1050
0
    written += TPM2B_NAME_Marshal(&source->objectName, buffer, size);
1051
0
    written += TPM2B_DIGEST_Marshal(&source->creationHash, buffer, size);
1052
0
    return written;
1053
0
}
1054
1055
/* Table 2:120 - Definition of TPMS_NV_CERTIFY_INFO Structure (StructuresTable()) */
1056
1057
UINT16
1058
TPMS_NV_CERTIFY_INFO_Marshal(TPMS_NV_CERTIFY_INFO *source, BYTE **buffer, INT32 *size)
1059
0
{
1060
0
    UINT16 written = 0;
1061
1062
0
    written += TPM2B_NAME_Marshal(&source->indexName, buffer, size);
1063
0
    written += UINT16_Marshal(&source->offset, buffer, size);
1064
0
    written += TPM2B_MAX_NV_BUFFER_Marshal(&source->nvContents, buffer, size);
1065
0
    return written;
1066
0
}
1067
1068
/* Table 2:121 - Definition of TPMI_ST_ATTEST Type (InterfaceTable()) */
1069
1070
UINT16
1071
TPMI_ST_ATTEST_Marshal(TPMI_ST_ATTEST *source, BYTE **buffer, INT32 *size)
1072
0
{
1073
0
    UINT16 written = 0;
1074
0
    written += TPM_ST_Marshal(source, buffer, size);
1075
0
    return written;
1076
0
}
1077
1078
/* Table 2:122 - Definition of TPMU_ATTEST Union (StructuresTable()) */
1079
1080
UINT16
1081
TPMU_ATTEST_Marshal(TPMU_ATTEST  *source, BYTE **buffer, INT32 *size, UINT32 selector)
1082
0
{
1083
0
    UINT16 written = 0;
1084
1085
0
    switch (selector) {
1086
0
      case TPM_ST_ATTEST_CERTIFY:
1087
0
  written += TPMS_CERTIFY_INFO_Marshal(&source->certify, buffer, size);
1088
0
  break;
1089
0
      case TPM_ST_ATTEST_CREATION:
1090
0
  written += TPMS_CREATION_INFO_Marshal(&source->creation, buffer, size);
1091
0
  break;
1092
0
      case TPM_ST_ATTEST_QUOTE:
1093
0
  written += TPMS_QUOTE_INFO_Marshal(&source->quote, buffer, size);
1094
0
  break;
1095
0
      case TPM_ST_ATTEST_COMMAND_AUDIT:
1096
0
  written += TPMS_COMMAND_AUDIT_INFO_Marshal(&source->commandAudit, buffer, size);
1097
0
  break;
1098
0
      case TPM_ST_ATTEST_SESSION_AUDIT:
1099
0
  written += TPMS_SESSION_AUDIT_INFO_Marshal(&source->sessionAudit, buffer, size);
1100
0
  break;
1101
0
      case TPM_ST_ATTEST_TIME:
1102
0
  written += TPMS_TIME_ATTEST_INFO_Marshal(&source->time, buffer, size);
1103
0
  break;
1104
0
      case TPM_ST_ATTEST_NV:
1105
0
  written += TPMS_NV_CERTIFY_INFO_Marshal(&source->nv, buffer, size);
1106
0
  break;
1107
0
      default:
1108
0
  pAssert(FALSE);
1109
0
    }
1110
0
    return written;
1111
0
}
1112
1113
/* Table 2:123 - Definition of TPMS_ATTEST Structure (StructuresTable()) */
1114
1115
UINT16
1116
TPMS_ATTEST_Marshal(TPMS_ATTEST  *source, BYTE **buffer, INT32 *size)
1117
0
{
1118
0
    UINT16 written = 0;
1119
1120
0
    written += TPM_GENERATED_Marshal(&source->magic, buffer, size);
1121
0
    written += TPMI_ST_ATTEST_Marshal(&source->type, buffer, size);
1122
0
    written += TPM2B_NAME_Marshal(&source->qualifiedSigner, buffer, size);
1123
0
    written += TPM2B_DATA_Marshal(&source->extraData, buffer, size);
1124
0
    written += TPMS_CLOCK_INFO_Marshal(&source->clockInfo, buffer, size);
1125
0
    written += UINT64_Marshal(&source->firmwareVersion, buffer, size);
1126
0
    written += TPMU_ATTEST_Marshal(&source->attested, buffer, size,source->type);
1127
0
    return written;
1128
0
}
1129
1130
/* Table 2:124 - Definition of TPM2B_ATTEST Structure (StructuresTable()) */
1131
1132
UINT16
1133
TPM2B_ATTEST_Marshal(TPM2B_ATTEST *source, BYTE **buffer, INT32 *size)
1134
0
{
1135
0
    UINT16 written = 0;
1136
0
    written += TPM2B_Marshal(&source->b, buffer, size);
1137
0
    return written;
1138
0
}
1139
1140
/* Table 2:127 - Definition of TPMI_AES_KEY_BITS Type (InterfaceTable()) */
1141
1142
UINT16
1143
TPMI_AES_KEY_BITS_Marshal(TPMI_AES_KEY_BITS *source, BYTE **buffer, INT32 *size)
1144
0
{
1145
0
    UINT16 written = 0;
1146
0
    written += TPM_KEY_BITS_Marshal(source, buffer, size);
1147
0
    return written;
1148
0
}
1149
1150
/* Table 2:128 - Definition of TPMU_SYM_KEY_BITS Union (StructuresTable()) */
1151
1152
UINT16
1153
TPMU_SYM_KEY_BITS_Marshal(TPMU_SYM_KEY_BITS *source, BYTE **buffer, INT32 *size, UINT32 selector)
1154
0
{
1155
0
    UINT16 written = 0;
1156
1157
0
    switch(selector) {
1158
0
#if ALG_AES
1159
0
      case TPM_ALG_AES:
1160
0
  written += TPMI_AES_KEY_BITS_Marshal(&source->aes, buffer, size);
1161
0
  break;
1162
0
#endif
1163
#if ALG_SM4
1164
      case TPM_ALG_SM4:
1165
  written += TPMI_SM4_KEY_BITS_Marshal(&source->sm4, buffer, size);
1166
  break;
1167
#endif
1168
#if ALG_CAMELLIA
1169
      case TPM_ALG_CAMELLIA:
1170
  written += TPMI_CAMELLIA_KEY_BITS_Marshal(&source->camellia, buffer, size);
1171
  break;
1172
#endif
1173
0
#if ALG_XOR
1174
0
      case TPM_ALG_XOR:
1175
0
  written += TPMI_ALG_HASH_Marshal(&source->xorr, buffer, size);
1176
0
  break;
1177
0
#endif
1178
0
      case TPM_ALG_NULL:
1179
0
  break;
1180
0
      default:
1181
0
  pAssert(FALSE);
1182
0
    }
1183
0
    return written;
1184
0
}
1185
1186
/* Table 2:129 - Definition of TPMU_SYM_MODE Union (StructuresTable()) */
1187
1188
UINT16
1189
TPMU_SYM_MODE_Marshal(TPMU_SYM_MODE *source, BYTE **buffer, INT32 *size, UINT32 selector)
1190
0
{
1191
0
    UINT16 written = 0;
1192
1193
0
    switch (selector) {
1194
0
#if ALG_AES
1195
0
      case TPM_ALG_AES:
1196
0
  written += TPMI_ALG_SYM_MODE_Marshal(&source->aes, buffer, size);
1197
0
  break;
1198
0
#endif
1199
#if ALG_SM4
1200
      case TPM_ALG_SM4:
1201
  written += TPMI_ALG_SYM_MODE_Marshal(&source->sm4, buffer, size);
1202
  break;
1203
#endif
1204
#if ALG_CAMELLIA
1205
      case TPM_ALG_CAMELLIA:
1206
  written += TPMI_ALG_SYM_MODE_Marshal(&source->camellia, buffer, size);
1207
  break;
1208
#endif
1209
0
#if ALG_XOR
1210
0
      case TPM_ALG_XOR:
1211
0
#endif
1212
0
      case TPM_ALG_NULL:
1213
0
  break;
1214
0
      default:
1215
0
  pAssert(FALSE);
1216
0
    }
1217
0
    return written;
1218
0
}
1219
1220
/* Table 2:132 - Definition of TPMT_SYM_DEF_OBJECT Structure (StructuresTable()) */
1221
1222
UINT16
1223
TPMT_SYM_DEF_OBJECT_Marshal(TPMT_SYM_DEF_OBJECT *source, BYTE **buffer, INT32 *size)
1224
0
{
1225
0
    UINT16 written = 0;
1226
1227
0
    written += TPMI_ALG_SYM_OBJECT_Marshal(&source->algorithm, buffer, size);
1228
0
    written += TPMU_SYM_KEY_BITS_Marshal(&source->keyBits, buffer, size, source->algorithm);
1229
0
    written += TPMU_SYM_MODE_Marshal(&source->mode, buffer, size, source->algorithm);
1230
0
    return written;
1231
0
}
1232
1233
/* Table 2:133 - Definition of TPM2B_SYM_KEY Structure (StructuresTable()) */
1234
1235
UINT16
1236
TPM2B_SYM_KEY_Marshal(TPM2B_SYM_KEY *source, BYTE **buffer, INT32 *size)
1237
0
{
1238
0
    UINT16 written = 0;
1239
0
    written += TPM2B_Marshal(&source->b, buffer, size);
1240
0
    return written;
1241
0
}
1242
1243
/* Table 2:134 - Definition of TPMS_SYMCIPHER_PARMS Structure (StructuresTable()) */
1244
1245
UINT16
1246
TPMS_SYMCIPHER_PARMS_Marshal(TPMS_SYMCIPHER_PARMS *source, BYTE **buffer, INT32 *size)
1247
0
{
1248
0
    UINT16 written = 0;
1249
1250
0
    written += TPMT_SYM_DEF_OBJECT_Marshal(&source->sym, buffer, size);
1251
0
    return written;
1252
0
}
1253
1254
/* Table 2:139 - Definition of TPM2B_SENSITIVE_DATA Structure (StructuresTable()) */
1255
1256
UINT16
1257
TPM2B_SENSITIVE_DATA_Marshal(TPM2B_SENSITIVE_DATA *source, BYTE **buffer, INT32 *size)
1258
0
{
1259
0
    UINT16 written = 0;
1260
0
    written += TPM2B_Marshal(&source->b, buffer, size);
1261
0
    return written;
1262
0
}
1263
1264
/* Table 2:142 - Definition of TPMS_SCHEME_HASH Structure (StructuresTable()) */
1265
1266
UINT16
1267
TPMS_SCHEME_HASH_Marshal(TPMS_SCHEME_HASH *source, BYTE **buffer, INT32 *size)
1268
0
{
1269
0
    UINT16 written = 0;
1270
1271
0
    written += TPMI_ALG_HASH_Marshal(&source->hashAlg, buffer, size);
1272
0
    return written;
1273
0
}
1274
    
1275
/* Table 2:143 - Definition of TPMS_SCHEME_ECDAA Structure (StructuresTable()) */
1276
1277
UINT16
1278
TPMS_SCHEME_ECDAA_Marshal(TPMS_SCHEME_ECDAA *source, BYTE **buffer, INT32 *size)
1279
0
{
1280
0
    UINT16 written = 0;
1281
1282
0
    written += TPMI_ALG_HASH_Marshal(&source->hashAlg, buffer, size);
1283
0
    written += UINT16_Marshal(&source->count, buffer, size);
1284
0
    return written;
1285
0
}
1286
1287
/* Table 2:144 - Definition of TPMI_ALG_KEYEDHASH_SCHEME Type (InterfaceTable()) */
1288
1289
UINT16
1290
TPMI_ALG_KEYEDHASH_SCHEME_Marshal(TPMI_ALG_KEYEDHASH_SCHEME *source, BYTE **buffer, INT32 *size)
1291
0
{
1292
0
    UINT16 written = 0;
1293
0
    written += TPM_ALG_ID_Marshal(source, buffer, size);
1294
0
    return written;
1295
0
}
1296
1297
/* Table 2:145 - Definition of Types for HMAC_SIG_SCHEME (TypedefTable()) */
1298
1299
UINT16
1300
TPMS_SCHEME_HMAC_Marshal(TPMS_SCHEME_HMAC *source, BYTE **buffer, INT32 *size)
1301
0
{
1302
0
    UINT16 written = 0;
1303
0
    written += TPMS_SCHEME_HASH_Marshal(source, buffer, size);
1304
0
    return written;
1305
0
}
1306
1307
/* Table 2:146 - Definition of TPMS_SCHEME_XOR Structure (StructuresTable()) */
1308
1309
UINT16
1310
TPMS_SCHEME_XOR_Marshal(TPMS_SCHEME_XOR *source, BYTE **buffer, INT32 *size)
1311
0
{
1312
0
    UINT16 written = 0;
1313
1314
0
    written += TPMI_ALG_HASH_Marshal(&source->hashAlg, buffer, size);
1315
0
    written += TPMI_ALG_KDF_Marshal(&source->kdf, buffer, size);
1316
0
    return written;
1317
0
}
1318
1319
/* Table 2:148 - Definition of TPMT_KEYEDHASH_SCHEME Structure (StructuresTable()) */
1320
1321
UINT16
1322
TPMT_KEYEDHASH_SCHEME_Marshal(TPMT_KEYEDHASH_SCHEME *source, BYTE **buffer, INT32 *size)
1323
0
{
1324
0
    UINT16 written = 0;
1325
1326
0
    written += TPMI_ALG_KEYEDHASH_SCHEME_Marshal(&source->scheme, buffer, size);
1327
0
    written += TPMU_SCHEME_KEYEDHASH_Marshal(&source->details, buffer, size, source->scheme);
1328
0
    return written;
1329
0
}
1330
1331
/* Table 2:149 - Definition of Types for RSA Signature Schemes (TypedefTable()) */
1332
1333
UINT16
1334
TPMS_SIG_SCHEME_RSASSA_Marshal(TPMS_SIG_SCHEME_RSASSA *source, BYTE **buffer, INT32 *size)
1335
0
{
1336
0
    UINT16 written = 0;
1337
0
    written += TPMS_SCHEME_HASH_Marshal(source, buffer, size);
1338
0
    return written;
1339
0
}
1340
1341
UINT16
1342
TPMS_SIG_SCHEME_RSAPSS_Marshal(TPMS_SIG_SCHEME_RSAPSS *source, BYTE **buffer, INT32 *size)
1343
0
{
1344
0
    UINT16 written = 0;
1345
0
    written += TPMS_SCHEME_HASH_Marshal(source, buffer, size);
1346
0
    return written;
1347
0
}
1348
1349
/* Table 2:150 - Definition of Types for ECC Signature Schemes (TypedefTable()) */
1350
1351
UINT16
1352
TPMS_SIG_SCHEME_ECDSA_Marshal(TPMS_SIG_SCHEME_ECDSA *source, BYTE **buffer, INT32 *size)
1353
0
{
1354
0
    UINT16 written = 0;
1355
0
    written += TPMS_SCHEME_HASH_Marshal(source, buffer, size);
1356
0
    return written;
1357
0
}
1358
UINT16
1359
TPMS_SIG_SCHEME_ECSCHNORR_Marshal(TPMS_SIG_SCHEME_ECSCHNORR *source, BYTE **buffer, INT32 *size)
1360
0
{
1361
0
    UINT16 written = 0;
1362
0
    written += TPMS_SCHEME_HASH_Marshal(source, buffer, size);
1363
0
    return written;
1364
0
}
1365
UINT16
1366
TPMS_SIG_SCHEME_ECDAA_Marshal(TPMS_SIG_SCHEME_ECDAA *source, BYTE **buffer, INT32 *size)
1367
0
{
1368
0
    UINT16 written = 0;
1369
0
    written += TPMS_SCHEME_ECDAA_Marshal(source, buffer, size);
1370
0
    return written;
1371
0
}
1372
1373
/* Table 2:153 - Definition of Types for Encryption Schemes (TypedefTable()) */
1374
1375
UINT16
1376
TPMS_ENC_SCHEME_OAEP_Marshal(TPMS_ENC_SCHEME_OAEP *source, BYTE **buffer, INT32 *size)
1377
0
{
1378
0
    UINT16 written = 0;
1379
0
    written += TPMS_SCHEME_HASH_Marshal(source, buffer, size);
1380
0
    return written;
1381
0
}
1382
1383
/* Table 146 - Definition of Types for {RSA} Encryption Schemes */
1384
1385
UINT16
1386
TPMS_ENC_SCHEME_RSAES_Marshal(TPMS_ENC_SCHEME_RSAES *source, BYTE **buffer, INT32 *size)
1387
0
{
1388
0
    source = source;
1389
0
    buffer = buffer;
1390
0
    size = size;
1391
0
    return 0;
1392
0
}
1393
1394
/* Table 2:147 - Definition of TPMU_SCHEME_KEYEDHASH Union (StructuresTable()) */
1395
1396
UINT16
1397
TPMU_SCHEME_KEYEDHASH_Marshal(TPMU_SCHEME_KEYEDHASH *source, BYTE **buffer, INT32 *size, UINT32 selector)
1398
0
{
1399
0
    UINT16 written = 0;
1400
1401
0
    switch (selector) {
1402
0
#if ALG_HMAC
1403
0
      case TPM_ALG_HMAC:
1404
0
  written += TPMS_SCHEME_HMAC_Marshal(&source->hmac, buffer, size);
1405
0
  break;
1406
0
#endif
1407
0
#if ALG_XOR
1408
0
      case TPM_ALG_XOR:
1409
0
  written += TPMS_SCHEME_XOR_Marshal(&source->xorr, buffer, size);
1410
0
  break;
1411
0
#endif
1412
0
      case TPM_ALG_NULL:
1413
0
  break;
1414
0
      default:
1415
0
  pAssert(FALSE);
1416
0
    }
1417
0
    return written;
1418
0
}
1419
1420
/* Table 2:154 - Definition of Types for ECC Key Exchange (TypedefTable()) */
1421
1422
UINT16
1423
TPMS_KEY_SCHEME_ECDH_Marshal(TPMS_KEY_SCHEME_ECDH *source, BYTE **buffer, INT32 *size)
1424
0
{
1425
0
    UINT16 written = 0;
1426
0
    written += TPMS_SCHEME_HASH_Marshal(source, buffer, size);
1427
0
    return written;
1428
0
}
1429
1430
UINT16
1431
TPMS_KEY_SCHEME_ECMQV_Marshal(TPMS_KEY_SCHEME_ECMQV*source, BYTE **buffer, INT32 *size)
1432
0
{
1433
0
    UINT16 written = 0;
1434
0
    written += TPMS_SCHEME_HASH_Marshal(source, buffer, size);
1435
0
    return written;
1436
0
}
1437
1438
/* Table 2:155 - Definition of Types for KDF Schemes (TypedefTable()) */
1439
UINT16
1440
TPMS_SCHEME_MGF1_Marshal(TPMS_SCHEME_MGF1 *source, BYTE **buffer, INT32 *size)
1441
0
{
1442
0
    UINT16 written = 0;
1443
0
    written += TPMS_SCHEME_HASH_Marshal(source, buffer, size);
1444
0
    return written;
1445
0
}
1446
UINT16
1447
TPMS_SCHEME_KDF1_SP800_56A_Marshal(TPMS_SCHEME_KDF1_SP800_56A *source, BYTE **buffer, INT32 *size)
1448
0
{
1449
0
    UINT16 written = 0;
1450
0
    written += TPMS_SCHEME_HASH_Marshal(source, buffer, size);
1451
0
    return written;
1452
0
}
1453
UINT16
1454
TPMS_SCHEME_KDF2_Marshal(TPMS_SCHEME_KDF2 *source, BYTE **buffer, INT32 *size)
1455
0
{
1456
0
    UINT16 written = 0;
1457
0
    written += TPMS_SCHEME_HASH_Marshal(source, buffer, size);
1458
0
    return written;
1459
0
}
1460
UINT16
1461
TPMS_SCHEME_KDF1_SP800_108_Marshal(TPMS_SCHEME_KDF1_SP800_108 *source, BYTE **buffer, INT32 *size)
1462
0
{
1463
0
    UINT16 written = 0;
1464
0
    written += TPMS_SCHEME_HASH_Marshal(source, buffer, size);
1465
0
    return written;
1466
0
}
1467
1468
/* Table 2:156 - Definition of TPMU_KDF_SCHEME Union (StructuresTable()) */
1469
1470
UINT16
1471
TPMU_KDF_SCHEME_Marshal(TPMU_KDF_SCHEME *source, BYTE **buffer, INT32 *size, UINT32 selector)
1472
0
{
1473
0
    UINT16 written = 0;
1474
1475
1476
0
    switch (selector) {
1477
0
#if ALG_MGF1
1478
0
      case TPM_ALG_MGF1:
1479
0
  written += TPMS_SCHEME_MGF1_Marshal(&source->mgf1, buffer, size);
1480
0
  break;
1481
0
#endif
1482
0
#if ALG_KDF1_SP800_56A
1483
0
      case TPM_ALG_KDF1_SP800_56A:
1484
0
  written += TPMS_SCHEME_KDF1_SP800_56A_Marshal(&source->kdf1_sp800_56a, buffer, size);
1485
0
  break;
1486
0
#endif
1487
#if ALG_KDF2
1488
      case TPM_ALG_KDF2:
1489
  written += TPMS_SCHEME_KDF2_Marshal(&source->kdf2, buffer, size);
1490
  break;
1491
#endif
1492
0
#if ALG_KDF1_SP800_108
1493
0
      case TPM_ALG_KDF1_SP800_108:
1494
0
  written += TPMS_SCHEME_KDF1_SP800_108_Marshal(&source->kdf1_sp800_108, buffer, size);
1495
0
  break;
1496
0
#endif
1497
0
      case TPM_ALG_NULL:
1498
0
  break;
1499
0
      default:
1500
0
  pAssert(FALSE);
1501
0
    }
1502
0
    return written;
1503
0
}
1504
1505
/* Table 2:157 - Definition of TPMT_KDF_SCHEME Structure (StructuresTable()) */
1506
1507
UINT16
1508
TPMT_KDF_SCHEME_Marshal(TPMT_KDF_SCHEME *source, BYTE **buffer, INT32 *size)
1509
0
{
1510
0
    UINT16 written = 0;
1511
1512
0
    written += TPMI_ALG_KDF_Marshal(&source->scheme, buffer, size);
1513
0
    written += TPMU_KDF_SCHEME_Marshal(&source->details, buffer, size, source->scheme);
1514
0
    return written;
1515
0
}
1516
1517
/* Table 2:159 - Definition of TPMU_ASYM_SCHEME Union (StructuresTable()) */
1518
1519
UINT16
1520
TPMU_ASYM_SCHEME_Marshal(TPMU_ASYM_SCHEME  *source, BYTE **buffer, INT32 *size, UINT32 selector)
1521
0
{
1522
0
    UINT16 written = 0;
1523
1524
0
    switch (selector) {
1525
0
#if ALG_ECDH
1526
0
      case TPM_ALG_ECDH:
1527
0
  written += TPMS_KEY_SCHEME_ECDH_Marshal(&source->ecdh, buffer, size);
1528
0
  break;
1529
0
#endif
1530
#if ALG_ECMQV
1531
      case TPM_ALG_ECMQV:
1532
  written += TPMS_KEY_SCHEME_ECMQV_Marshal(&source->ecmqv, buffer, size);
1533
  break;
1534
#endif
1535
0
#if ALG_RSASSA
1536
0
      case TPM_ALG_RSASSA:
1537
0
  written += TPMS_SIG_SCHEME_RSASSA_Marshal(&source->rsassa, buffer, size);
1538
0
  break;
1539
0
#endif
1540
0
#if ALG_RSAPSS
1541
0
      case TPM_ALG_RSAPSS:
1542
0
  written += TPMS_SIG_SCHEME_RSAPSS_Marshal(&source->rsapss, buffer, size);
1543
0
  break;
1544
0
#endif
1545
0
#if ALG_ECDSA
1546
0
      case TPM_ALG_ECDSA:
1547
0
  written += TPMS_SIG_SCHEME_ECDSA_Marshal(&source->ecdsa, buffer, size);
1548
0
  break;
1549
0
#endif
1550
0
#if ALG_ECDAA
1551
0
      case TPM_ALG_ECDAA:
1552
0
  written += TPMS_SIG_SCHEME_ECDAA_Marshal(&source->ecdaa, buffer, size);
1553
0
  break;
1554
0
#endif
1555
#if ALG_SM2
1556
      case TPM_ALG_SM2:
1557
  written += TPMS_SIG_SCHEME_SM2_Marshal(&source->sm2, buffer, size);
1558
  break;
1559
#endif
1560
0
#if ALG_ECSCHNORR
1561
0
      case TPM_ALG_ECSCHNORR:
1562
0
  written += TPMS_SIG_SCHEME_ECSCHNORR_Marshal(&source->ecschnorr, buffer, size);
1563
0
  break;
1564
0
#endif
1565
0
#if ALG_RSAES
1566
0
      case TPM_ALG_RSAES:
1567
0
  written += TPMS_ENC_SCHEME_RSAES_Marshal(&source->rsaes, buffer, size);
1568
0
  break;
1569
0
#endif
1570
0
#if ALG_OAEP
1571
0
      case TPM_ALG_OAEP:
1572
0
  written += TPMS_ENC_SCHEME_OAEP_Marshal(&source->oaep, buffer, size);
1573
0
  break;
1574
0
#endif
1575
0
      case TPM_ALG_NULL:
1576
0
  break;
1577
0
      default:
1578
0
  pAssert(FALSE);
1579
0
    }
1580
0
    return written;
1581
0
}
1582
1583
/* Table 2:161 - Definition of TPMI_ALG_RSA_SCHEME Type (InterfaceTable()) */
1584
1585
UINT16
1586
TPMI_ALG_RSA_SCHEME_Marshal(TPMI_ALG_RSA_SCHEME *source, BYTE **buffer, INT32 *size)
1587
0
{
1588
0
    UINT16 written = 0;
1589
0
    written += TPM_ALG_ID_Marshal(source, buffer, size);
1590
0
    return written;
1591
0
}
1592
1593
/* Table 2:162 - Definition of TPMT_RSA_SCHEME Structure (StructuresTable()) */
1594
1595
UINT16
1596
TPMT_RSA_SCHEME_Marshal(TPMT_RSA_SCHEME *source, BYTE **buffer, INT32 *size)
1597
0
{
1598
0
    UINT16 written = 0;
1599
1600
0
    written += TPMI_ALG_RSA_SCHEME_Marshal(&source->scheme, buffer, size);
1601
0
    written += TPMU_ASYM_SCHEME_Marshal(&source->details, buffer, size, source->scheme);
1602
0
    return written;
1603
0
}
1604
1605
/* Table 2:165 - Definition of TPM2B_PUBLIC_KEY_RSA Structure (StructuresTable()) */
1606
1607
UINT16
1608
TPM2B_PUBLIC_KEY_RSA_Marshal(TPM2B_PUBLIC_KEY_RSA *source, BYTE **buffer, INT32 *size)
1609
0
{
1610
0
    UINT16 written = 0;
1611
0
    written += TPM2B_Marshal(&source->b, buffer, size);
1612
0
    return written;
1613
0
}
1614
1615
/* Table 2:166 - Definition of TPMI_RSA_KEY_BITS Type (InterfaceTable()) */
1616
1617
UINT16
1618
TPMI_RSA_KEY_BITS_Marshal(TPMI_RSA_KEY_BITS *source, BYTE **buffer, INT32 *size)
1619
0
{
1620
0
    UINT16 written = 0;
1621
0
    written += TPM_KEY_BITS_Marshal(source, buffer, size);
1622
0
    return written;
1623
0
}
1624
1625
/* Table 2:167 - Definition of TPM2B_PRIVATE_KEY_RSA Structure (StructuresTable()) */
1626
1627
UINT16
1628
TPM2B_PRIVATE_KEY_RSA_Marshal(TPM2B_PRIVATE_KEY_RSA *source, BYTE **buffer, INT32 *size)
1629
0
{
1630
0
    UINT16 written = 0;
1631
0
    written += TPM2B_Marshal(&source->b, buffer, size);
1632
0
    return written;
1633
0
}
1634
1635
/* Table 2:168 - Definition of TPM2B_ECC_PARAMETER Structure (StructuresTable()) */
1636
1637
UINT16
1638
TPM2B_ECC_PARAMETER_Marshal(TPM2B_ECC_PARAMETER *source, BYTE **buffer, INT32 *size)
1639
0
{
1640
0
    UINT16 written = 0;
1641
0
    written += TPM2B_Marshal(&source->b, buffer, size);
1642
0
    return written;
1643
0
}
1644
1645
/* Table 2:169 - Definition of TPMS_ECC_POINT Structure (StructuresTable()) */
1646
1647
UINT16
1648
TPMS_ECC_POINT_Marshal(TPMS_ECC_POINT *source, BYTE **buffer, INT32 *size)
1649
0
{
1650
0
    UINT16 written = 0;
1651
1652
0
    written += TPM2B_ECC_PARAMETER_Marshal(&source->x, buffer, size);
1653
0
    written += TPM2B_ECC_PARAMETER_Marshal(&source->y, buffer, size);
1654
0
    return written;
1655
0
}
1656
1657
/* Table 2:170 - Definition of TPM2B_ECC_POINT Structure (StructuresTable()) */
1658
1659
UINT16
1660
TPM2B_ECC_POINT_Marshal(TPM2B_ECC_POINT *source, BYTE **buffer, INT32 *size)
1661
0
{
1662
0
    UINT16 written = 0;
1663
0
    BYTE *sizePtr;
1664
1665
0
    if (buffer != NULL) {
1666
0
  sizePtr = *buffer;
1667
0
      *buffer += sizeof(UINT16);
1668
0
    }
1669
0
    written += TPMS_ECC_POINT_Marshal(&source->point, buffer, size);
1670
0
    if (buffer != NULL) {
1671
0
  written += UINT16_Marshal(&written, &sizePtr, size);
1672
0
    }
1673
0
    else {
1674
0
  written += sizeof(UINT16);
1675
0
    }
1676
0
    return written;
1677
0
}
1678
1679
/* Table 2:171 - Definition of TPMI_ALG_ECC_SCHEME Type (InterfaceTable()) */
1680
1681
UINT16
1682
TPMI_ALG_ECC_SCHEME_Marshal(TPMI_ALG_ECC_SCHEME *source, BYTE **buffer, INT32 *size)
1683
0
{
1684
0
    UINT16 written = 0;
1685
0
    written += TPM_ALG_ID_Marshal(source, buffer, size);
1686
0
    return written;
1687
0
}
1688
1689
/* Table 2:172 - Definition of TPMI_ECC_CURVE Type (InterfaceTable()) */
1690
1691
UINT16
1692
TPMI_ECC_CURVE_Marshal(TPMI_ECC_CURVE *source, BYTE **buffer, INT32 *size)
1693
0
{
1694
0
    UINT16 written = 0;
1695
0
    written += TPM_ECC_CURVE_Marshal(source, buffer, size);
1696
0
    return written;
1697
0
}
1698
1699
/* Table 2:173 - Definition of TPMT_ECC_SCHEME Structure (StructuresTable()) */
1700
1701
UINT16
1702
TPMT_ECC_SCHEME_Marshal(TPMT_ECC_SCHEME *source, BYTE **buffer, INT32 *size)
1703
0
{
1704
0
    UINT16 written = 0;
1705
1706
0
    written += TPMI_ALG_ECC_SCHEME_Marshal(&source->scheme, buffer, size);
1707
0
    written += TPMU_ASYM_SCHEME_Marshal(&source->details, buffer, size, source->scheme);
1708
0
    return written;
1709
0
}
1710
1711
/* Table 2:174 - Definition of TPMS_ALGORITHM_DETAIL_ECC Structure (StructuresTable()) */
1712
1713
UINT16
1714
TPMS_ALGORITHM_DETAIL_ECC_Marshal(TPMS_ALGORITHM_DETAIL_ECC *source, BYTE **buffer, INT32 *size)
1715
0
{
1716
0
    UINT16 written = 0;
1717
    
1718
0
    written += TPM_ECC_CURVE_Marshal(&source->curveID, buffer, size);
1719
0
    written += UINT16_Marshal(&source->keySize, buffer, size);
1720
0
    written += TPMT_KDF_SCHEME_Marshal(&source->kdf, buffer, size);
1721
0
    written += TPMT_ECC_SCHEME_Marshal(&source->sign, buffer, size);
1722
0
    written += TPM2B_ECC_PARAMETER_Marshal(&source->p, buffer, size);
1723
0
    written += TPM2B_ECC_PARAMETER_Marshal(&source->a, buffer, size);
1724
0
    written += TPM2B_ECC_PARAMETER_Marshal(&source->b, buffer, size);
1725
0
    written += TPM2B_ECC_PARAMETER_Marshal(&source->gX, buffer, size);
1726
0
    written += TPM2B_ECC_PARAMETER_Marshal(&source->gY, buffer, size);
1727
0
    written += TPM2B_ECC_PARAMETER_Marshal(&source->n, buffer, size);
1728
0
    written += TPM2B_ECC_PARAMETER_Marshal(&source->h, buffer, size);
1729
0
    return written;
1730
0
}
1731
    
1732
/* Table 2:175 - Definition of TPMS_SIGNATURE_RSA Structure (StructuresTable()) */
1733
1734
UINT16
1735
TPMS_SIGNATURE_RSA_Marshal(TPMS_SIGNATURE_RSA *source, BYTE **buffer, INT32 *size)
1736
0
{
1737
0
    UINT16 written = 0;
1738
1739
0
    written += TPMI_ALG_HASH_Marshal(&source->hash, buffer, size);
1740
0
    written += TPM2B_PUBLIC_KEY_RSA_Marshal(&source->sig, buffer, size);
1741
0
    return written;
1742
0
}
1743
1744
/* Table 2:176 - Definition of Types for Signature (TypedefTable()) */
1745
UINT16
1746
TPMS_SIGNATURE_RSASSA_Marshal(TPMS_SIGNATURE_RSASSA *source, BYTE **buffer, INT32 *size)
1747
0
{
1748
0
    UINT16 written = 0;
1749
0
    written += TPMS_SIGNATURE_RSA_Marshal(source, buffer, size);
1750
0
    return written;
1751
0
}
1752
UINT16
1753
TPMS_SIGNATURE_RSAPSS_Marshal(TPMS_SIGNATURE_RSAPSS *source, BYTE **buffer, INT32 *size)
1754
0
{
1755
0
    UINT16 written = 0;
1756
0
    written += TPMS_SIGNATURE_RSA_Marshal(source, buffer, size);
1757
0
    return written;
1758
0
}
1759
1760
/* Table 2:177 - Definition of TPMS_SIGNATURE_ECC Structure (StructuresTable()) */
1761
1762
UINT16
1763
TPMS_SIGNATURE_ECC_Marshal(TPMS_SIGNATURE_ECC *source, BYTE **buffer, INT32 *size)
1764
0
{
1765
0
    UINT16 written = 0;
1766
1767
0
    written += TPMI_ALG_HASH_Marshal(&source->hash, buffer, size);
1768
0
    written += TPM2B_ECC_PARAMETER_Marshal(&source->signatureR, buffer, size);
1769
0
    written += TPM2B_ECC_PARAMETER_Marshal(&source->signatureS, buffer, size);
1770
0
    return written;
1771
0
}
1772
    
1773
/* Table 2:178 - Definition of Types for TPMS_SIGNATURE_ECC (TypedefTable()) */
1774
1775
UINT16
1776
TPMS_SIGNATURE_ECDSA_Marshal(TPMS_SIGNATURE_ECDSA *source, BYTE **buffer, INT32 *size)
1777
0
{
1778
0
    UINT16 written = 0;
1779
0
    written += TPMS_SIGNATURE_ECC_Marshal(source, buffer, size);
1780
0
    return written;
1781
0
}  
1782
1783
UINT16
1784
TPMS_SIGNATURE_ECDAA_Marshal(TPMS_SIGNATURE_ECDAA *source, BYTE **buffer, INT32 *size)
1785
0
{
1786
0
    UINT16 written = 0;
1787
0
    written += TPMS_SIGNATURE_ECC_Marshal(source, buffer, size);
1788
0
    return written;
1789
0
}
1790
1791
UINT16
1792
TPMS_SIGNATURE_ECSCHNORR_Marshal(TPMS_SIGNATURE_ECSCHNORR *source, BYTE **buffer, INT32 *size)
1793
0
{
1794
0
    UINT16 written = 0;
1795
0
    written += TPMS_SIGNATURE_ECC_Marshal(source, buffer, size);
1796
0
    return written;
1797
0
}
1798
1799
/* Table 2:179 - Definition of TPMU_SIGNATURE Union (StructuresTable()) */
1800
UINT16
1801
TPMU_SIGNATURE_Marshal(TPMU_SIGNATURE *source, BYTE **buffer, INT32 *size, UINT32 selector)
1802
0
{
1803
0
    UINT16 written = 0;
1804
1805
0
    switch (selector) {
1806
0
#if ALG_RSASSA
1807
0
      case TPM_ALG_RSASSA:
1808
0
  written += TPMS_SIGNATURE_RSASSA_Marshal(&source->rsassa, buffer, size);
1809
0
  break;
1810
0
#endif
1811
0
#if ALG_RSAPSS
1812
0
      case TPM_ALG_RSAPSS:
1813
0
  written += TPMS_SIGNATURE_RSAPSS_Marshal(&source->rsapss, buffer, size);
1814
0
  break;
1815
0
#endif
1816
0
#if ALG_ECDSA
1817
0
      case TPM_ALG_ECDSA:
1818
0
  written += TPMS_SIGNATURE_ECDSA_Marshal(&source->ecdsa, buffer, size);
1819
0
  break;
1820
0
#endif
1821
0
#if ALG_ECDAA
1822
0
      case TPM_ALG_ECDAA:
1823
0
  written += TPMS_SIGNATURE_ECDAA_Marshal(&source->ecdaa, buffer, size);
1824
0
  break;
1825
0
#endif
1826
#if ALG_SM2
1827
      case TPM_ALG_SM2:
1828
  written += TPMS_SIGNATURE_SM2_Marshal(&source->sm2, buffer, size);
1829
  break;
1830
#endif
1831
0
#if ALG_ECSCHNORR
1832
0
      case TPM_ALG_ECSCHNORR:
1833
0
  written += TPMS_SIGNATURE_ECSCHNORR_Marshal(&source->ecschnorr, buffer, size);
1834
0
  break;
1835
0
#endif
1836
0
#if ALG_HMAC
1837
0
      case TPM_ALG_HMAC:
1838
0
  written += TPMT_HA_Marshal(&source->hmac, buffer, size);
1839
0
  break;
1840
0
#endif
1841
0
      case TPM_ALG_NULL:
1842
0
  break;
1843
0
      default:
1844
0
  pAssert(FALSE);
1845
0
    }
1846
0
    return written;
1847
0
}
1848
1849
/* Table 2:180 - Definition of TPMT_SIGNATURE Structure (StructuresTable()) */
1850
1851
UINT16
1852
TPMT_SIGNATURE_Marshal(TPMT_SIGNATURE *source, BYTE **buffer, INT32 *size)
1853
0
{
1854
0
    UINT16 written = 0;
1855
1856
0
    written += TPMI_ALG_SIG_SCHEME_Marshal(&source->sigAlg, buffer, size);
1857
0
    written += TPMU_SIGNATURE_Marshal(&source->signature, buffer, size, source->sigAlg);
1858
0
    return written;
1859
0
}
1860
1861
/* Table 2:182 - Definition of TPM2B_ENCRYPTED_SECRET Structure (StructuresTable()) */
1862
1863
UINT16
1864
TPM2B_ENCRYPTED_SECRET_Marshal(TPM2B_ENCRYPTED_SECRET *source, BYTE **buffer, INT32 *size)
1865
0
{
1866
0
    UINT16 written = 0;
1867
0
    written += TPM2B_Marshal(&source->b, buffer, size);
1868
0
    return written;
1869
0
}
1870
 
1871
/* Table 2:183 - Definition of TPMI_ALG_PUBLIC Type (InterfaceTable()) */
1872
1873
1874
UINT16
1875
TPMI_ALG_PUBLIC_Marshal(TPMI_ALG_PUBLIC *source, BYTE **buffer, INT32 *size)
1876
0
{
1877
0
    UINT16 written = 0;
1878
0
    written += TPM_ALG_ID_Marshal(source, buffer, size);
1879
0
    return written;
1880
0
}
1881
1882
/* Table 2:184 - Definition of TPMU_PUBLIC_ID Union (StructuresTable()) */
1883
UINT16
1884
TPMU_PUBLIC_ID_Marshal(TPMU_PUBLIC_ID *source, BYTE **buffer, INT32 *size, UINT32 selector)
1885
0
{
1886
0
    UINT16 written = 0;
1887
1888
0
    switch (selector) {
1889
0
#if ALG_KEYEDHASH
1890
0
      case TPM_ALG_KEYEDHASH:
1891
0
  written += TPM2B_DIGEST_Marshal(&source->keyedHash, buffer, size);
1892
0
  break;
1893
0
#endif
1894
0
#if ALG_SYMCIPHER
1895
0
      case TPM_ALG_SYMCIPHER:
1896
0
  written += TPM2B_DIGEST_Marshal(&source->sym, buffer, size);
1897
0
  break;
1898
0
#endif
1899
0
#if ALG_RSA
1900
0
      case TPM_ALG_RSA:
1901
0
  written += TPM2B_PUBLIC_KEY_RSA_Marshal(&source->rsa, buffer, size);
1902
0
  break;
1903
0
#endif
1904
0
#if ALG_ECC
1905
0
      case TPM_ALG_ECC:
1906
0
  written += TPMS_ECC_POINT_Marshal(&source->ecc, buffer, size);
1907
0
  break;
1908
0
#endif
1909
0
      default:
1910
0
  pAssert(FALSE);
1911
0
    }
1912
0
    return written;
1913
0
} 
1914
1915
/* Table 2:185 - Definition of TPMS_KEYEDHASH_PARMS Structure (StructuresTable()) */
1916
1917
UINT16
1918
TPMS_KEYEDHASH_PARMS_Marshal(TPMS_KEYEDHASH_PARMS *source, BYTE **buffer, INT32 *size)
1919
0
{
1920
0
    UINT16 written = 0;
1921
0
    written += TPMT_KEYEDHASH_SCHEME_Marshal(&source->scheme, buffer, size);
1922
0
    return written;
1923
0
}
1924
1925
/* Table 2:187 - Definition of TPMS_RSA_PARMS Structure (StructuresTable()) */
1926
1927
UINT16
1928
TPMS_RSA_PARMS_Marshal(TPMS_RSA_PARMS *source, BYTE **buffer, INT32 *size)
1929
0
{
1930
0
    UINT16 written = 0;
1931
1932
0
    written += TPMT_SYM_DEF_OBJECT_Marshal(&source->symmetric, buffer, size);
1933
0
    written += TPMT_RSA_SCHEME_Marshal(&source->scheme, buffer, size);
1934
0
    written += TPMI_RSA_KEY_BITS_Marshal(&source->keyBits, buffer, size);
1935
0
    written += UINT32_Marshal(&source->exponent, buffer, size);
1936
0
    return written;
1937
0
}
1938
1939
/* Table 2:188 - Definition of TPMS_ECC_PARMS Structure (StructuresTable()) */
1940
  
1941
UINT16
1942
TPMS_ECC_PARMS_Marshal(TPMS_ECC_PARMS *source, BYTE **buffer, INT32 *size)
1943
0
{
1944
0
    UINT16 written = 0;
1945
1946
0
    written += TPMT_SYM_DEF_OBJECT_Marshal(&source->symmetric, buffer, size);
1947
0
    written += TPMT_ECC_SCHEME_Marshal(&source->scheme, buffer, size);
1948
0
    written += TPMI_ECC_CURVE_Marshal(&source->curveID, buffer, size);
1949
0
    written += TPMT_KDF_SCHEME_Marshal(&source->kdf, buffer, size);
1950
0
    return written;
1951
0
}
1952
1953
/* Table 2:189 - Definition of TPMU_PUBLIC_PARMS Union (StructuresTable()) */
1954
1955
UINT16
1956
TPMU_PUBLIC_PARMS_Marshal(TPMU_PUBLIC_PARMS *source, BYTE **buffer, INT32 *size, UINT32 selector) 
1957
0
{
1958
0
    UINT16 written = 0;
1959
1960
0
    switch (selector) {
1961
0
#if ALG_KEYEDHASH
1962
0
      case TPM_ALG_KEYEDHASH:
1963
0
  written += TPMS_KEYEDHASH_PARMS_Marshal(&source->keyedHashDetail, buffer, size);
1964
0
  break;
1965
0
#endif
1966
0
#if ALG_SYMCIPHER
1967
0
      case TPM_ALG_SYMCIPHER:
1968
0
  written += TPMS_SYMCIPHER_PARMS_Marshal(&source->symDetail, buffer, size);
1969
0
  break;
1970
0
#endif
1971
0
#if ALG_RSA
1972
0
      case TPM_ALG_RSA:
1973
0
  written += TPMS_RSA_PARMS_Marshal(&source->rsaDetail, buffer, size);
1974
0
  break;
1975
0
#endif
1976
0
#if ALG_ECC
1977
0
      case TPM_ALG_ECC:
1978
0
  written += TPMS_ECC_PARMS_Marshal(&source->eccDetail, buffer, size);
1979
0
  break;
1980
0
#endif
1981
0
      default:
1982
0
  pAssert(FALSE);
1983
0
    }
1984
0
    return written;
1985
0
}
1986
1987
/* Table 2:190 - Definition of TPMT_PUBLIC_PARMS Structure (StructuresTable()) */
1988
1989
UINT16
1990
TPMT_PUBLIC_PARMS_Marshal(TPMT_PUBLIC_PARMS *source, BYTE **buffer, INT32 *size)
1991
0
{
1992
0
    UINT16 written = 0;
1993
0
    written += TPMI_ALG_PUBLIC_Marshal(&source->type, buffer, size);
1994
0
    written += TPMU_PUBLIC_PARMS_Marshal(&source->parameters, buffer, size, source->type);
1995
0
    return written;
1996
0
}
1997
1998
/* Table 2:191 - Definition of TPMT_PUBLIC Structure (StructuresTable()) */
1999
2000
UINT16
2001
TPMT_PUBLIC_Marshal(TPMT_PUBLIC *source, BYTE **buffer, INT32 *size)
2002
0
{
2003
0
    UINT16 written = 0;
2004
0
    written += TPMI_ALG_PUBLIC_Marshal(&source->type, buffer, size);
2005
0
    written += TPMI_ALG_HASH_Marshal(&source->nameAlg, buffer, size);
2006
0
    written += TPMA_OBJECT_Marshal(&source->objectAttributes, buffer, size);
2007
0
    written += TPM2B_DIGEST_Marshal(&source->authPolicy, buffer, size);
2008
0
    written += TPMU_PUBLIC_PARMS_Marshal(&source->parameters, buffer, size, source->type);
2009
0
    written += TPMU_PUBLIC_ID_Marshal(&source->unique, buffer, size, source->type);
2010
0
    return written;
2011
0
}
2012
2013
/* Table 2:192 - Definition of TPM2B_PUBLIC Structure (StructuresTable()) */
2014
2015
UINT16
2016
TPM2B_PUBLIC_Marshal(TPM2B_PUBLIC *source, BYTE **buffer, INT32 *size)
2017
0
{
2018
0
    UINT16 written = 0;
2019
0
    BYTE *sizePtr;
2020
2021
0
    if (buffer != NULL) {
2022
0
  sizePtr = *buffer;
2023
0
    *buffer += sizeof(UINT16);
2024
0
    }
2025
0
    written += TPMT_PUBLIC_Marshal(&source->publicArea, buffer, size);
2026
0
    if (buffer != NULL) {
2027
0
        written += UINT16_Marshal(&written, &sizePtr, size);
2028
0
    }
2029
0
    else {
2030
0
  written += sizeof(UINT16);
2031
0
    }
2032
0
    return written;
2033
0
}
2034
2035
/* Table 2:195 - Definition of TPMU_SENSITIVE_COMPOSITE Union (StructuresTable()) */
2036
2037
UINT16
2038
TPMU_SENSITIVE_COMPOSITE_Marshal(TPMU_SENSITIVE_COMPOSITE *source, BYTE **buffer, INT32 *size, UINT32 selector)
2039
0
{
2040
0
    UINT16 written = 0;
2041
2042
0
    switch (selector) {
2043
0
#if ALG_RSA
2044
0
      case TPM_ALG_RSA:
2045
0
  written += TPM2B_PRIVATE_KEY_RSA_Marshal(&source->rsa, buffer, size);
2046
0
  break;
2047
0
#endif
2048
0
#if ALG_ECC
2049
0
      case TPM_ALG_ECC:
2050
0
  written += TPM2B_ECC_PARAMETER_Marshal(&source->ecc, buffer, size);
2051
0
  break;
2052
0
#endif
2053
0
#if ALG_KEYEDHASH
2054
0
      case TPM_ALG_KEYEDHASH:
2055
0
  written += TPM2B_SENSITIVE_DATA_Marshal(&source->bits, buffer, size);
2056
0
  break;
2057
0
#endif
2058
0
#if ALG_SYMCIPHER
2059
0
      case TPM_ALG_SYMCIPHER:
2060
0
  written += TPM2B_SYM_KEY_Marshal(&source->sym, buffer, size);
2061
0
  break;
2062
0
#endif
2063
0
      default:
2064
0
  pAssert(FALSE);
2065
0
    }
2066
0
    return written;
2067
0
}
2068
2069
/* Table 2:196 - Definition of TPMT_SENSITIVE Structure (StructuresTable()) */
2070
2071
UINT16
2072
TPMT_SENSITIVE_Marshal(TPMT_SENSITIVE *source, BYTE **buffer, INT32 *size)
2073
0
{
2074
0
    UINT16 written = 0;
2075
 
2076
0
    written += TPMI_ALG_PUBLIC_Marshal(&source->sensitiveType, buffer, size);
2077
0
    written += TPM2B_AUTH_Marshal(&source->authValue, buffer, size);
2078
0
    written += TPM2B_DIGEST_Marshal(&source->seedValue, buffer, size);
2079
0
    written += TPMU_SENSITIVE_COMPOSITE_Marshal(&source->sensitive, buffer, size, source->sensitiveType);
2080
0
    return written;
2081
0
}
2082
2083
/* Table 2:199 - Definition of TPM2B_PRIVATE Structure (StructuresTable()) */
2084
2085
UINT16
2086
TPM2B_PRIVATE_Marshal(TPM2B_PRIVATE *source, BYTE **buffer, INT32 *size)
2087
0
{
2088
0
    UINT16 written = 0;
2089
0
    written += TPM2B_Marshal(&source->b, buffer, size);
2090
0
    return written;
2091
0
}
2092
2093
/* Table 2:201 - Definition of TPM2B_ID_OBJECT Structure (StructuresTable()) */
2094
2095
UINT16
2096
TPM2B_ID_OBJECT_Marshal(TPM2B_ID_OBJECT *source, BYTE **buffer, INT32 *size)
2097
0
{
2098
0
    UINT16 written = 0;
2099
0
    written += TPM2B_Marshal(&source->b, buffer, size);
2100
0
    return written;
2101
0
}
2102
2103
/* Table 2:205 - Definition of TPMA_NV Bits (BitsTable()) */
2104
2105
UINT16
2106
TPMA_NV_Marshal(TPMA_NV *source, BYTE **buffer, INT32 *size)
2107
0
{
2108
0
    UINT16 written = 0;
2109
0
    written += UINT32_Marshal(source, buffer, size);
2110
0
    return written;
2111
0
}
2112
2113
/* Table 2:206 - Definition of TPMS_NV_PUBLIC Structure (StructuresTable()) */
2114
2115
UINT16
2116
TPMS_NV_PUBLIC_Marshal(TPMS_NV_PUBLIC *source, BYTE **buffer, INT32 *size)
2117
0
{
2118
0
    UINT16 written = 0;
2119
2120
0
    written += TPMI_RH_NV_INDEX_Marshal(&source->nvIndex, buffer, size);
2121
0
    written += TPMI_ALG_HASH_Marshal(&source->nameAlg, buffer, size);
2122
0
    written += TPMA_NV_Marshal(&source->attributes, buffer, size);
2123
0
    written += TPM2B_DIGEST_Marshal(&source->authPolicy, buffer, size);
2124
0
    written += UINT16_Marshal(&source->dataSize, buffer, size);
2125
0
    return written;
2126
0
}
2127
2128
/* Table 2:207 - Definition of TPM2B_NV_PUBLIC Structure (StructuresTable()) */
2129
2130
UINT16
2131
TPM2B_NV_PUBLIC_Marshal(TPM2B_NV_PUBLIC *source, BYTE **buffer, INT32 *size)
2132
0
{
2133
0
    UINT16 written = 0;
2134
0
    BYTE *sizePtr;
2135
2136
0
    if (buffer != NULL) {
2137
0
  sizePtr = *buffer;
2138
0
      *buffer += sizeof(UINT16);
2139
0
    }
2140
0
    written += TPMS_NV_PUBLIC_Marshal(&source->nvPublic, buffer, size);
2141
0
    if (buffer != NULL) {
2142
0
  written += UINT16_Marshal(&written, &sizePtr, size);
2143
0
    }
2144
0
    else {
2145
0
  written += sizeof(UINT16);
2146
0
    }
2147
0
    return written;
2148
0
}
2149
2150
/* Table 2:210 - Definition of TPM2B_CONTEXT_DATA Structure (StructuresTable()) */
2151
2152
UINT16
2153
TPM2B_CONTEXT_DATA_Marshal(TPM2B_CONTEXT_DATA  *source, BYTE **buffer, INT32 *size)
2154
0
{
2155
0
    UINT16 written = 0;
2156
0
    written += TPM2B_Marshal(&source->b, buffer, size);
2157
0
    return written;
2158
0
}
2159
2160
/* Table 2:211 - Definition of TPMS_CONTEXT Structure (StructuresTable()) */
2161
2162
UINT16
2163
TPMS_CONTEXT_Marshal(TPMS_CONTEXT *source, BYTE **buffer, INT32 *size)
2164
0
{
2165
0
    UINT16 written = 0;
2166
2167
0
    written += UINT64_Marshal(&source->sequence, buffer, size);
2168
0
    written += TPMI_DH_SAVED_Marshal(&source->savedHandle, buffer, size);
2169
0
    written += TPMI_RH_HIERARCHY_Marshal(&source->hierarchy, buffer, size);
2170
0
    written += TPM2B_CONTEXT_DATA_Marshal(&source->contextBlob, buffer, size);
2171
0
    return written;
2172
0
}
2173
2174
/* Table 2:213 - Definition of TPMS_CREATION_DATA Structure (StructuresTable()) */
2175
2176
UINT16
2177
TPMS_CREATION_DATA_Marshal(TPMS_CREATION_DATA *source, BYTE **buffer, INT32 *size)
2178
0
{
2179
0
    UINT16 written = 0;
2180
2181
0
    written += TPML_PCR_SELECTION_Marshal(&source->pcrSelect, buffer, size);
2182
0
    written += TPM2B_DIGEST_Marshal(&source->pcrDigest, buffer, size);
2183
0
    written += TPMA_LOCALITY_Marshal(&source->locality, buffer, size);
2184
0
    written += TPM_ALG_ID_Marshal(&source->parentNameAlg, buffer, size);
2185
0
    written += TPM2B_NAME_Marshal(&source->parentName, buffer, size);
2186
0
    written += TPM2B_NAME_Marshal(&source->parentQualifiedName, buffer, size);
2187
0
    written += TPM2B_DATA_Marshal(&source->outsideInfo, buffer, size);
2188
0
    return written;
2189
0
}
2190
2191
/* Table 2:214 - Definition of TPM2B_CREATION_DATA Structure (StructuresTable()) */
2192
2193
UINT16
2194
TPM2B_CREATION_DATA_Marshal(TPM2B_CREATION_DATA *source, BYTE **buffer, INT32 *size)
2195
0
{
2196
0
    UINT16 written = 0;
2197
0
    BYTE *sizePtr;
2198
2199
0
    if (buffer != NULL) {
2200
0
  sizePtr = *buffer;
2201
0
      *buffer += sizeof(UINT16);
2202
0
    }
2203
0
    written += TPMS_CREATION_DATA_Marshal(&source->creationData, buffer, size);
2204
0
    if (buffer != NULL) {
2205
0
  written += UINT16_Marshal(&written, &sizePtr, size);
2206
0
    }
2207
0
    else {
2208
0
  written += sizeof(UINT16);
2209
0
    }
2210
0
    return written;
2211
0
}
2212