Coverage Report

Created: 2025-07-18 06:10

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