Coverage Report

Created: 2023-06-07 06:46

/src/tpm2/tpm_generated.c
Line
Count
Source (jump to first uncovered line)
1
// Copyright 2015 The Chromium OS Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file.
4
5
// THIS CODE IS GENERATED - DO NOT MODIFY!
6
7
#include "tpm_generated.h"
8
9
81.9k
UINT16 uint8_t_Marshal(uint8_t* source, BYTE** buffer, INT32* size) {
10
81.9k
  uint8_t value_net = *source;
11
81.9k
  if (!size || *size < sizeof(uint8_t)) {
12
0
    return 0;  // Nothing has been marshaled.
13
0
  }
14
81.9k
  switch (sizeof(uint8_t)) {
15
0
    case 2:
16
0
      value_net = htobe16(*source);
17
0
      break;
18
0
    case 4:
19
0
      value_net = htobe32(*source);
20
0
      break;
21
0
    case 8:
22
0
      value_net = htobe64(*source);
23
0
      break;
24
81.9k
    default:
25
81.9k
      break;
26
81.9k
  }
27
81.9k
  memcpy(*buffer, &value_net, sizeof(uint8_t));
28
81.9k
  *buffer += sizeof(uint8_t);
29
81.9k
  *size -= sizeof(uint8_t);
30
81.9k
  return sizeof(uint8_t);
31
81.9k
}
32
33
45.9k
TPM_RC uint8_t_Unmarshal(uint8_t* target, BYTE** buffer, INT32* size) {
34
45.9k
  uint8_t value_net = 0;
35
45.9k
  if (!size || *size < sizeof(uint8_t)) {
36
404
    return TPM_RC_INSUFFICIENT;
37
404
  }
38
45.5k
  memcpy(&value_net, *buffer, sizeof(uint8_t));
39
45.5k
  switch (sizeof(uint8_t)) {
40
0
    case 2:
41
0
      *target = be16toh(value_net);
42
0
      break;
43
0
    case 4:
44
0
      *target = be32toh(value_net);
45
0
      break;
46
0
    case 8:
47
0
      *target = be64toh(value_net);
48
0
      break;
49
45.5k
    default:
50
45.5k
      *target = value_net;
51
45.5k
  }
52
45.5k
  *buffer += sizeof(uint8_t);
53
45.5k
  *size -= sizeof(uint8_t);
54
45.5k
  return TPM_RC_SUCCESS;
55
45.5k
}
56
57
0
UINT16 int8_t_Marshal(int8_t* source, BYTE** buffer, INT32* size) {
58
0
  int8_t value_net = *source;
59
0
  if (!size || *size < sizeof(int8_t)) {
60
0
    return 0;  // Nothing has been marshaled.
61
0
  }
62
0
  switch (sizeof(int8_t)) {
63
0
    case 2:
64
0
      value_net = htobe16(*source);
65
0
      break;
66
0
    case 4:
67
0
      value_net = htobe32(*source);
68
0
      break;
69
0
    case 8:
70
0
      value_net = htobe64(*source);
71
0
      break;
72
0
    default:
73
0
      break;
74
0
  }
75
0
  memcpy(*buffer, &value_net, sizeof(int8_t));
76
0
  *buffer += sizeof(int8_t);
77
0
  *size -= sizeof(int8_t);
78
0
  return sizeof(int8_t);
79
0
}
80
81
0
TPM_RC int8_t_Unmarshal(int8_t* target, BYTE** buffer, INT32* size) {
82
0
  int8_t value_net = 0;
83
0
  if (!size || *size < sizeof(int8_t)) {
84
0
    return TPM_RC_INSUFFICIENT;
85
0
  }
86
0
  memcpy(&value_net, *buffer, sizeof(int8_t));
87
0
  switch (sizeof(int8_t)) {
88
0
    case 2:
89
0
      *target = be16toh(value_net);
90
0
      break;
91
0
    case 4:
92
0
      *target = be32toh(value_net);
93
0
      break;
94
0
    case 8:
95
0
      *target = be64toh(value_net);
96
0
      break;
97
0
    default:
98
0
      *target = value_net;
99
0
  }
100
0
  *buffer += sizeof(int8_t);
101
0
  *size -= sizeof(int8_t);
102
0
  return TPM_RC_SUCCESS;
103
0
}
104
105
18.6k
UINT16 uint16_t_Marshal(uint16_t* source, BYTE** buffer, INT32* size) {
106
18.6k
  uint16_t value_net = *source;
107
18.6k
  if (!size || *size < sizeof(uint16_t)) {
108
0
    return 0;  // Nothing has been marshaled.
109
0
  }
110
18.6k
  switch (sizeof(uint16_t)) {
111
18.6k
    case 2:
112
18.6k
      value_net = htobe16(*source);
113
18.6k
      break;
114
0
    case 4:
115
0
      value_net = htobe32(*source);
116
0
      break;
117
0
    case 8:
118
0
      value_net = htobe64(*source);
119
0
      break;
120
0
    default:
121
0
      break;
122
18.6k
  }
123
18.6k
  memcpy(*buffer, &value_net, sizeof(uint16_t));
124
18.6k
  *buffer += sizeof(uint16_t);
125
18.6k
  *size -= sizeof(uint16_t);
126
18.6k
  return sizeof(uint16_t);
127
18.6k
}
128
129
32.1k
TPM_RC uint16_t_Unmarshal(uint16_t* target, BYTE** buffer, INT32* size) {
130
32.1k
  uint16_t value_net = 0;
131
32.1k
  if (!size || *size < sizeof(uint16_t)) {
132
321
    return TPM_RC_INSUFFICIENT;
133
321
  }
134
31.8k
  memcpy(&value_net, *buffer, sizeof(uint16_t));
135
31.8k
  switch (sizeof(uint16_t)) {
136
31.8k
    case 2:
137
31.8k
      *target = be16toh(value_net);
138
31.8k
      break;
139
0
    case 4:
140
0
      *target = be32toh(value_net);
141
0
      break;
142
0
    case 8:
143
0
      *target = be64toh(value_net);
144
0
      break;
145
0
    default:
146
0
      *target = value_net;
147
31.8k
  }
148
31.8k
  *buffer += sizeof(uint16_t);
149
31.8k
  *size -= sizeof(uint16_t);
150
31.8k
  return TPM_RC_SUCCESS;
151
31.8k
}
152
153
0
UINT16 int16_t_Marshal(int16_t* source, BYTE** buffer, INT32* size) {
154
0
  int16_t value_net = *source;
155
0
  if (!size || *size < sizeof(int16_t)) {
156
0
    return 0;  // Nothing has been marshaled.
157
0
  }
158
0
  switch (sizeof(int16_t)) {
159
0
    case 2:
160
0
      value_net = htobe16(*source);
161
0
      break;
162
0
    case 4:
163
0
      value_net = htobe32(*source);
164
0
      break;
165
0
    case 8:
166
0
      value_net = htobe64(*source);
167
0
      break;
168
0
    default:
169
0
      break;
170
0
  }
171
0
  memcpy(*buffer, &value_net, sizeof(int16_t));
172
0
  *buffer += sizeof(int16_t);
173
0
  *size -= sizeof(int16_t);
174
0
  return sizeof(int16_t);
175
0
}
176
177
0
TPM_RC int16_t_Unmarshal(int16_t* target, BYTE** buffer, INT32* size) {
178
0
  int16_t value_net = 0;
179
0
  if (!size || *size < sizeof(int16_t)) {
180
0
    return TPM_RC_INSUFFICIENT;
181
0
  }
182
0
  memcpy(&value_net, *buffer, sizeof(int16_t));
183
0
  switch (sizeof(int16_t)) {
184
0
    case 2:
185
0
      *target = be16toh(value_net);
186
0
      break;
187
0
    case 4:
188
0
      *target = be32toh(value_net);
189
0
      break;
190
0
    case 8:
191
0
      *target = be64toh(value_net);
192
0
      break;
193
0
    default:
194
0
      *target = value_net;
195
0
  }
196
0
  *buffer += sizeof(int16_t);
197
0
  *size -= sizeof(int16_t);
198
0
  return TPM_RC_SUCCESS;
199
0
}
200
201
29.4k
UINT16 uint32_t_Marshal(uint32_t* source, BYTE** buffer, INT32* size) {
202
29.4k
  uint32_t value_net = *source;
203
29.4k
  if (!size || *size < sizeof(uint32_t)) {
204
0
    return 0;  // Nothing has been marshaled.
205
0
  }
206
29.4k
  switch (sizeof(uint32_t)) {
207
0
    case 2:
208
0
      value_net = htobe16(*source);
209
0
      break;
210
29.4k
    case 4:
211
29.4k
      value_net = htobe32(*source);
212
29.4k
      break;
213
0
    case 8:
214
0
      value_net = htobe64(*source);
215
0
      break;
216
0
    default:
217
0
      break;
218
29.4k
  }
219
29.4k
  memcpy(*buffer, &value_net, sizeof(uint32_t));
220
29.4k
  *buffer += sizeof(uint32_t);
221
29.4k
  *size -= sizeof(uint32_t);
222
29.4k
  return sizeof(uint32_t);
223
29.4k
}
224
225
33.0k
TPM_RC uint32_t_Unmarshal(uint32_t* target, BYTE** buffer, INT32* size) {
226
33.0k
  uint32_t value_net = 0;
227
33.0k
  if (!size || *size < sizeof(uint32_t)) {
228
345
    return TPM_RC_INSUFFICIENT;
229
345
  }
230
32.7k
  memcpy(&value_net, *buffer, sizeof(uint32_t));
231
32.7k
  switch (sizeof(uint32_t)) {
232
0
    case 2:
233
0
      *target = be16toh(value_net);
234
0
      break;
235
32.7k
    case 4:
236
32.7k
      *target = be32toh(value_net);
237
32.7k
      break;
238
0
    case 8:
239
0
      *target = be64toh(value_net);
240
0
      break;
241
0
    default:
242
0
      *target = value_net;
243
32.7k
  }
244
32.7k
  *buffer += sizeof(uint32_t);
245
32.7k
  *size -= sizeof(uint32_t);
246
32.7k
  return TPM_RC_SUCCESS;
247
32.7k
}
248
249
0
UINT16 int32_t_Marshal(int32_t* source, BYTE** buffer, INT32* size) {
250
0
  int32_t value_net = *source;
251
0
  if (!size || *size < sizeof(int32_t)) {
252
0
    return 0;  // Nothing has been marshaled.
253
0
  }
254
0
  switch (sizeof(int32_t)) {
255
0
    case 2:
256
0
      value_net = htobe16(*source);
257
0
      break;
258
0
    case 4:
259
0
      value_net = htobe32(*source);
260
0
      break;
261
0
    case 8:
262
0
      value_net = htobe64(*source);
263
0
      break;
264
0
    default:
265
0
      break;
266
0
  }
267
0
  memcpy(*buffer, &value_net, sizeof(int32_t));
268
0
  *buffer += sizeof(int32_t);
269
0
  *size -= sizeof(int32_t);
270
0
  return sizeof(int32_t);
271
0
}
272
273
0
TPM_RC int32_t_Unmarshal(int32_t* target, BYTE** buffer, INT32* size) {
274
0
  int32_t value_net = 0;
275
0
  if (!size || *size < sizeof(int32_t)) {
276
0
    return TPM_RC_INSUFFICIENT;
277
0
  }
278
0
  memcpy(&value_net, *buffer, sizeof(int32_t));
279
0
  switch (sizeof(int32_t)) {
280
0
    case 2:
281
0
      *target = be16toh(value_net);
282
0
      break;
283
0
    case 4:
284
0
      *target = be32toh(value_net);
285
0
      break;
286
0
    case 8:
287
0
      *target = be64toh(value_net);
288
0
      break;
289
0
    default:
290
0
      *target = value_net;
291
0
  }
292
0
  *buffer += sizeof(int32_t);
293
0
  *size -= sizeof(int32_t);
294
0
  return TPM_RC_SUCCESS;
295
0
}
296
297
0
UINT16 uint64_t_Marshal(uint64_t* source, BYTE** buffer, INT32* size) {
298
0
  uint64_t value_net = *source;
299
0
  if (!size || *size < sizeof(uint64_t)) {
300
0
    return 0;  // Nothing has been marshaled.
301
0
  }
302
0
  switch (sizeof(uint64_t)) {
303
0
    case 2:
304
0
      value_net = htobe16(*source);
305
0
      break;
306
0
    case 4:
307
0
      value_net = htobe32(*source);
308
0
      break;
309
0
    case 8:
310
0
      value_net = htobe64(*source);
311
0
      break;
312
0
    default:
313
0
      break;
314
0
  }
315
0
  memcpy(*buffer, &value_net, sizeof(uint64_t));
316
0
  *buffer += sizeof(uint64_t);
317
0
  *size -= sizeof(uint64_t);
318
0
  return sizeof(uint64_t);
319
0
}
320
321
304
TPM_RC uint64_t_Unmarshal(uint64_t* target, BYTE** buffer, INT32* size) {
322
304
  uint64_t value_net = 0;
323
304
  if (!size || *size < sizeof(uint64_t)) {
324
4
    return TPM_RC_INSUFFICIENT;
325
4
  }
326
300
  memcpy(&value_net, *buffer, sizeof(uint64_t));
327
300
  switch (sizeof(uint64_t)) {
328
0
    case 2:
329
0
      *target = be16toh(value_net);
330
0
      break;
331
0
    case 4:
332
0
      *target = be32toh(value_net);
333
0
      break;
334
300
    case 8:
335
300
      *target = be64toh(value_net);
336
300
      break;
337
0
    default:
338
0
      *target = value_net;
339
300
  }
340
300
  *buffer += sizeof(uint64_t);
341
300
  *size -= sizeof(uint64_t);
342
300
  return TPM_RC_SUCCESS;
343
300
}
344
345
0
UINT16 int64_t_Marshal(int64_t* source, BYTE** buffer, INT32* size) {
346
0
  int64_t value_net = *source;
347
0
  if (!size || *size < sizeof(int64_t)) {
348
0
    return 0;  // Nothing has been marshaled.
349
0
  }
350
0
  switch (sizeof(int64_t)) {
351
0
    case 2:
352
0
      value_net = htobe16(*source);
353
0
      break;
354
0
    case 4:
355
0
      value_net = htobe32(*source);
356
0
      break;
357
0
    case 8:
358
0
      value_net = htobe64(*source);
359
0
      break;
360
0
    default:
361
0
      break;
362
0
  }
363
0
  memcpy(*buffer, &value_net, sizeof(int64_t));
364
0
  *buffer += sizeof(int64_t);
365
0
  *size -= sizeof(int64_t);
366
0
  return sizeof(int64_t);
367
0
}
368
369
0
TPM_RC int64_t_Unmarshal(int64_t* target, BYTE** buffer, INT32* size) {
370
0
  int64_t value_net = 0;
371
0
  if (!size || *size < sizeof(int64_t)) {
372
0
    return TPM_RC_INSUFFICIENT;
373
0
  }
374
0
  memcpy(&value_net, *buffer, sizeof(int64_t));
375
0
  switch (sizeof(int64_t)) {
376
0
    case 2:
377
0
      *target = be16toh(value_net);
378
0
      break;
379
0
    case 4:
380
0
      *target = be32toh(value_net);
381
0
      break;
382
0
    case 8:
383
0
      *target = be64toh(value_net);
384
0
      break;
385
0
    default:
386
0
      *target = value_net;
387
0
  }
388
0
  *buffer += sizeof(int64_t);
389
0
  *size -= sizeof(int64_t);
390
0
  return TPM_RC_SUCCESS;
391
0
}
392
393
80.2k
UINT16 BYTE_Marshal(BYTE* source, BYTE** buffer, INT32* size) {
394
80.2k
  return uint8_t_Marshal(source, buffer, size);
395
80.2k
}
396
397
44.5k
TPM_RC BYTE_Unmarshal(BYTE* target, BYTE** buffer, INT32* size) {
398
44.5k
  return uint8_t_Unmarshal(target, buffer, size);
399
44.5k
}
400
401
0
UINT16 INT16_Marshal(INT16* source, BYTE** buffer, INT32* size) {
402
0
  return int16_t_Marshal(source, buffer, size);
403
0
}
404
405
0
TPM_RC INT16_Unmarshal(INT16* target, BYTE** buffer, INT32* size) {
406
0
  return int16_t_Unmarshal(target, buffer, size);
407
0
}
408
409
0
UINT16 INT32_Marshal(INT32* source, BYTE** buffer, INT32* size) {
410
0
  return int32_t_Marshal(source, buffer, size);
411
0
}
412
413
0
TPM_RC INT32_Unmarshal(INT32* target, BYTE** buffer, INT32* size) {
414
0
  return int32_t_Unmarshal(target, buffer, size);
415
0
}
416
417
0
UINT16 INT64_Marshal(INT64* source, BYTE** buffer, INT32* size) {
418
0
  return int64_t_Marshal(source, buffer, size);
419
0
}
420
421
0
TPM_RC INT64_Unmarshal(INT64* target, BYTE** buffer, INT32* size) {
422
0
  return int64_t_Unmarshal(target, buffer, size);
423
0
}
424
425
0
UINT16 INT8_Marshal(INT8* source, BYTE** buffer, INT32* size) {
426
0
  return int8_t_Marshal(source, buffer, size);
427
0
}
428
429
0
TPM_RC INT8_Unmarshal(INT8* target, BYTE** buffer, INT32* size) {
430
0
  return int8_t_Unmarshal(target, buffer, size);
431
0
}
432
433
3.80k
UINT16 UINT16_Marshal(UINT16* source, BYTE** buffer, INT32* size) {
434
3.80k
  return uint16_t_Marshal(source, buffer, size);
435
3.80k
}
436
437
9.15k
TPM_RC UINT16_Unmarshal(UINT16* target, BYTE** buffer, INT32* size) {
438
9.15k
  return uint16_t_Unmarshal(target, buffer, size);
439
9.15k
}
440
441
0
UINT16 TPM2B_ATTEST_Marshal(TPM2B_ATTEST* source, BYTE** buffer, INT32* size) {
442
0
  UINT16 total_size = 0;
443
0
  INT32 i;
444
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
445
0
  for (i = 0; i < source->t.size; ++i) {
446
0
    total_size += BYTE_Marshal(&source->t.attestationData[i], buffer, size);
447
0
  }
448
0
  return total_size;
449
0
}
450
451
TPM_RC TPM2B_ATTEST_Unmarshal(TPM2B_ATTEST* target,
452
                              BYTE** buffer,
453
0
                              INT32* size) {
454
0
  TPM_RC result;
455
0
  INT32 i;
456
0
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
457
0
  if (result != TPM_RC_SUCCESS) {
458
0
    return result;
459
0
  }
460
0
  if (target->t.size == 0) {
461
0
    return TPM_RC_SUCCESS;
462
0
  }
463
0
  if (target->t.size > sizeof(TPMS_ATTEST)) {
464
0
    return TPM_RC_SIZE;
465
0
  }
466
0
  for (i = 0; i < target->t.size; ++i) {
467
0
    result = BYTE_Unmarshal(&target->t.attestationData[i], buffer, size);
468
0
    if (result != TPM_RC_SUCCESS) {
469
0
      return result;
470
0
    }
471
0
  }
472
0
  return TPM_RC_SUCCESS;
473
0
}
474
475
1.96k
UINT16 TPM2B_DIGEST_Marshal(TPM2B_DIGEST* source, BYTE** buffer, INT32* size) {
476
1.96k
  UINT16 total_size = 0;
477
1.96k
  INT32 i;
478
1.96k
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
479
35.1k
  for (i = 0; i < source->t.size; ++i) {
480
33.2k
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
481
33.2k
  }
482
1.96k
  return total_size;
483
1.96k
}
484
485
TPM_RC TPM2B_DIGEST_Unmarshal(TPM2B_DIGEST* target,
486
                              BYTE** buffer,
487
4.73k
                              INT32* size) {
488
4.73k
  TPM_RC result;
489
4.73k
  INT32 i;
490
4.73k
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
491
4.73k
  if (result != TPM_RC_SUCCESS) {
492
48
    return result;
493
48
  }
494
4.68k
  if (target->t.size == 0) {
495
4.05k
    return TPM_RC_SUCCESS;
496
4.05k
  }
497
637
  if (target->t.size > sizeof(TPMU_HA)) {
498
112
    return TPM_RC_SIZE;
499
112
  }
500
10.0k
  for (i = 0; i < target->t.size; ++i) {
501
9.65k
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
502
9.65k
    if (result != TPM_RC_SUCCESS) {
503
127
      return result;
504
127
    }
505
9.65k
  }
506
398
  return TPM_RC_SUCCESS;
507
525
}
508
509
0
UINT16 TPM2B_AUTH_Marshal(TPM2B_AUTH* source, BYTE** buffer, INT32* size) {
510
0
  return TPM2B_DIGEST_Marshal(source, buffer, size);
511
0
}
512
513
1.89k
TPM_RC TPM2B_AUTH_Unmarshal(TPM2B_AUTH* target, BYTE** buffer, INT32* size) {
514
1.89k
  return TPM2B_DIGEST_Unmarshal(target, buffer, size);
515
1.89k
}
516
517
UINT16 TPM2B_CONTEXT_DATA_Marshal(TPM2B_CONTEXT_DATA* source,
518
                                  BYTE** buffer,
519
0
                                  INT32* size) {
520
0
  UINT16 total_size = 0;
521
0
  INT32 i;
522
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
523
0
  for (i = 0; i < source->t.size; ++i) {
524
0
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
525
0
  }
526
0
  return total_size;
527
0
}
528
529
TPM_RC TPM2B_CONTEXT_DATA_Unmarshal(TPM2B_CONTEXT_DATA* target,
530
                                    BYTE** buffer,
531
70
                                    INT32* size) {
532
70
  TPM_RC result;
533
70
  INT32 i;
534
70
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
535
70
  if (result != TPM_RC_SUCCESS) {
536
4
    return result;
537
4
  }
538
66
  if (target->t.size == 0) {
539
6
    return TPM_RC_SUCCESS;
540
6
  }
541
60
  if (target->t.size > sizeof(TPMS_CONTEXT_DATA)) {
542
13
    return TPM_RC_SIZE;
543
13
  }
544
832
  for (i = 0; i < target->t.size; ++i) {
545
805
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
546
805
    if (result != TPM_RC_SUCCESS) {
547
20
      return result;
548
20
    }
549
805
  }
550
27
  return TPM_RC_SUCCESS;
551
47
}
552
553
UINT16 TPM2B_CONTEXT_SENSITIVE_Marshal(TPM2B_CONTEXT_SENSITIVE* source,
554
                                       BYTE** buffer,
555
0
                                       INT32* size) {
556
0
  UINT16 total_size = 0;
557
0
  INT32 i;
558
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
559
0
  for (i = 0; i < source->t.size; ++i) {
560
0
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
561
0
  }
562
0
  return total_size;
563
0
}
564
565
TPM_RC TPM2B_CONTEXT_SENSITIVE_Unmarshal(TPM2B_CONTEXT_SENSITIVE* target,
566
                                         BYTE** buffer,
567
0
                                         INT32* size) {
568
0
  TPM_RC result;
569
0
  INT32 i;
570
0
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
571
0
  if (result != TPM_RC_SUCCESS) {
572
0
    return result;
573
0
  }
574
0
  if (target->t.size == 0) {
575
0
    return TPM_RC_SUCCESS;
576
0
  }
577
0
  if (target->t.size > MAX_CONTEXT_SIZE) {
578
0
    return TPM_RC_SIZE;
579
0
  }
580
0
  for (i = 0; i < target->t.size; ++i) {
581
0
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
582
0
    if (result != TPM_RC_SUCCESS) {
583
0
      return result;
584
0
    }
585
0
  }
586
0
  return TPM_RC_SUCCESS;
587
0
}
588
589
439
UINT16 TPM_ALG_ID_Marshal(TPM_ALG_ID* source, BYTE** buffer, INT32* size) {
590
439
  return uint16_t_Marshal(source, buffer, size);
591
439
}
592
593
0
TPM_RC TPM_ALG_ID_Unmarshal(TPM_ALG_ID* target, BYTE** buffer, INT32* size) {
594
0
  TPM_RC result;
595
0
  result = uint16_t_Unmarshal(target, buffer, size);
596
0
  if (result != TPM_RC_SUCCESS) {
597
0
    return result;
598
0
  }
599
0
#ifdef TPM_ALG_ERROR
600
0
  if (*target == TPM_ALG_ERROR) {
601
0
    return TPM_RC_SUCCESS;
602
0
  }
603
0
#endif
604
0
#ifdef TPM_ALG_RSA
605
0
  if (*target == TPM_ALG_RSA) {
606
0
    return TPM_RC_SUCCESS;
607
0
  }
608
0
#endif
609
#ifdef TPM_ALG_SHA
610
  if (*target == TPM_ALG_SHA) {
611
    return TPM_RC_SUCCESS;
612
  }
613
#endif
614
0
#ifdef TPM_ALG_SHA1
615
0
  if (*target == TPM_ALG_SHA1) {
616
0
    return TPM_RC_SUCCESS;
617
0
  }
618
0
#endif
619
0
#ifdef TPM_ALG_HMAC
620
0
  if (*target == TPM_ALG_HMAC) {
621
0
    return TPM_RC_SUCCESS;
622
0
  }
623
0
#endif
624
0
#ifdef TPM_ALG_AES
625
0
  if (*target == TPM_ALG_AES) {
626
0
    return TPM_RC_SUCCESS;
627
0
  }
628
0
#endif
629
0
#ifdef TPM_ALG_MGF1
630
0
  if (*target == TPM_ALG_MGF1) {
631
0
    return TPM_RC_SUCCESS;
632
0
  }
633
0
#endif
634
0
#ifdef TPM_ALG_KEYEDHASH
635
0
  if (*target == TPM_ALG_KEYEDHASH) {
636
0
    return TPM_RC_SUCCESS;
637
0
  }
638
0
#endif
639
0
#ifdef TPM_ALG_XOR
640
0
  if (*target == TPM_ALG_XOR) {
641
0
    return TPM_RC_SUCCESS;
642
0
  }
643
0
#endif
644
0
#ifdef TPM_ALG_SHA256
645
0
  if (*target == TPM_ALG_SHA256) {
646
0
    return TPM_RC_SUCCESS;
647
0
  }
648
0
#endif
649
0
#ifdef TPM_ALG_SHA384
650
0
  if (*target == TPM_ALG_SHA384) {
651
0
    return TPM_RC_SUCCESS;
652
0
  }
653
0
#endif
654
0
#ifdef TPM_ALG_SHA512
655
0
  if (*target == TPM_ALG_SHA512) {
656
0
    return TPM_RC_SUCCESS;
657
0
  }
658
0
#endif
659
0
#ifdef TPM_ALG_NULL
660
0
  if (*target == TPM_ALG_NULL) {
661
0
    return TPM_RC_SUCCESS;
662
0
  }
663
0
#endif
664
#ifdef TPM_ALG_SM3_256
665
  if (*target == TPM_ALG_SM3_256) {
666
    return TPM_RC_SUCCESS;
667
  }
668
#endif
669
#ifdef TPM_ALG_SM4
670
  if (*target == TPM_ALG_SM4) {
671
    return TPM_RC_SUCCESS;
672
  }
673
#endif
674
0
#ifdef TPM_ALG_RSASSA
675
0
  if (*target == TPM_ALG_RSASSA) {
676
0
    return TPM_RC_SUCCESS;
677
0
  }
678
0
#endif
679
0
#ifdef TPM_ALG_RSAES
680
0
  if (*target == TPM_ALG_RSAES) {
681
0
    return TPM_RC_SUCCESS;
682
0
  }
683
0
#endif
684
0
#ifdef TPM_ALG_RSAPSS
685
0
  if (*target == TPM_ALG_RSAPSS) {
686
0
    return TPM_RC_SUCCESS;
687
0
  }
688
0
#endif
689
0
#ifdef TPM_ALG_OAEP
690
0
  if (*target == TPM_ALG_OAEP) {
691
0
    return TPM_RC_SUCCESS;
692
0
  }
693
0
#endif
694
0
#ifdef TPM_ALG_ECDSA
695
0
  if (*target == TPM_ALG_ECDSA) {
696
0
    return TPM_RC_SUCCESS;
697
0
  }
698
0
#endif
699
0
#ifdef TPM_ALG_ECDH
700
0
  if (*target == TPM_ALG_ECDH) {
701
0
    return TPM_RC_SUCCESS;
702
0
  }
703
0
#endif
704
0
#ifdef TPM_ALG_ECDAA
705
0
  if (*target == TPM_ALG_ECDAA) {
706
0
    return TPM_RC_SUCCESS;
707
0
  }
708
0
#endif
709
0
#ifdef TPM_ALG_SM2
710
0
  if (*target == TPM_ALG_SM2) {
711
0
    return TPM_RC_SUCCESS;
712
0
  }
713
0
#endif
714
0
#ifdef TPM_ALG_ECSCHNORR
715
0
  if (*target == TPM_ALG_ECSCHNORR) {
716
0
    return TPM_RC_SUCCESS;
717
0
  }
718
0
#endif
719
#ifdef TPM_ALG_ECMQV
720
  if (*target == TPM_ALG_ECMQV) {
721
    return TPM_RC_SUCCESS;
722
  }
723
#endif
724
0
#ifdef TPM_ALG_KDF1_SP800_56A
725
0
  if (*target == TPM_ALG_KDF1_SP800_56A) {
726
0
    return TPM_RC_SUCCESS;
727
0
  }
728
0
#endif
729
#ifdef TPM_ALG_KDF2
730
  if (*target == TPM_ALG_KDF2) {
731
    return TPM_RC_SUCCESS;
732
  }
733
#endif
734
0
#ifdef TPM_ALG_KDF1_SP800_108
735
0
  if (*target == TPM_ALG_KDF1_SP800_108) {
736
0
    return TPM_RC_SUCCESS;
737
0
  }
738
0
#endif
739
0
#ifdef TPM_ALG_ECC
740
0
  if (*target == TPM_ALG_ECC) {
741
0
    return TPM_RC_SUCCESS;
742
0
  }
743
0
#endif
744
0
#ifdef TPM_ALG_SYMCIPHER
745
0
  if (*target == TPM_ALG_SYMCIPHER) {
746
0
    return TPM_RC_SUCCESS;
747
0
  }
748
0
#endif
749
#ifdef TPM_ALG_CAMELLIA
750
  if (*target == TPM_ALG_CAMELLIA) {
751
    return TPM_RC_SUCCESS;
752
  }
753
#endif
754
0
#ifdef TPM_ALG_CTR
755
0
  if (*target == TPM_ALG_CTR) {
756
0
    return TPM_RC_SUCCESS;
757
0
  }
758
0
#endif
759
0
#ifdef TPM_ALG_OFB
760
0
  if (*target == TPM_ALG_OFB) {
761
0
    return TPM_RC_SUCCESS;
762
0
  }
763
0
#endif
764
0
#ifdef TPM_ALG_CBC
765
0
  if (*target == TPM_ALG_CBC) {
766
0
    return TPM_RC_SUCCESS;
767
0
  }
768
0
#endif
769
0
#ifdef TPM_ALG_CFB
770
0
  if (*target == TPM_ALG_CFB) {
771
0
    return TPM_RC_SUCCESS;
772
0
  }
773
0
#endif
774
0
#ifdef TPM_ALG_ECB
775
0
  if (*target == TPM_ALG_ECB) {
776
0
    return TPM_RC_SUCCESS;
777
0
  }
778
0
#endif
779
0
  return TPM_RC_VALUE;
780
0
}
781
782
244
UINT16 TPM2B_DATA_Marshal(TPM2B_DATA* source, BYTE** buffer, INT32* size) {
783
244
  UINT16 total_size = 0;
784
244
  INT32 i;
785
244
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
786
798
  for (i = 0; i < source->t.size; ++i) {
787
554
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
788
554
  }
789
244
  return total_size;
790
244
}
791
792
312
TPM_RC TPM2B_DATA_Unmarshal(TPM2B_DATA* target, BYTE** buffer, INT32* size) {
793
312
  TPM_RC result;
794
312
  INT32 i;
795
312
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
796
312
  if (result != TPM_RC_SUCCESS) {
797
4
    return result;
798
4
  }
799
308
  if (target->t.size == 0) {
800
254
    return TPM_RC_SUCCESS;
801
254
  }
802
54
  if (target->t.size > sizeof(TPMT_HA)) {
803
9
    return TPM_RC_SIZE;
804
9
  }
805
440
  for (i = 0; i < target->t.size; ++i) {
806
406
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
807
406
    if (result != TPM_RC_SUCCESS) {
808
11
      return result;
809
11
    }
810
406
  }
811
34
  return TPM_RC_SUCCESS;
812
45
}
813
814
UINT16 TPMA_LOCALITY_Marshal(TPMA_LOCALITY* source,
815
                             BYTE** buffer,
816
244
                             INT32* size) {
817
244
  return uint8_t_Marshal((uint8_t*)source, buffer, size);
818
244
}
819
820
TPM_RC TPMA_LOCALITY_Unmarshal(TPMA_LOCALITY* target,
821
                               BYTE** buffer,
822
0
                               INT32* size) {
823
0
  TPM_RC result;
824
0
  result = uint8_t_Unmarshal((uint8_t*)target, buffer, size);
825
0
  if (result != TPM_RC_SUCCESS) {
826
0
    return result;
827
0
  }
828
0
  return TPM_RC_SUCCESS;
829
0
}
830
831
645
UINT16 TPM2B_NAME_Marshal(TPM2B_NAME* source, BYTE** buffer, INT32* size) {
832
645
  UINT16 total_size = 0;
833
645
  INT32 i;
834
645
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
835
9.17k
  for (i = 0; i < source->t.size; ++i) {
836
8.52k
    total_size += BYTE_Marshal(&source->t.name[i], buffer, size);
837
8.52k
  }
838
645
  return total_size;
839
645
}
840
841
0
TPM_RC TPM2B_NAME_Unmarshal(TPM2B_NAME* target, BYTE** buffer, INT32* size) {
842
0
  TPM_RC result;
843
0
  INT32 i;
844
0
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
845
0
  if (result != TPM_RC_SUCCESS) {
846
0
    return result;
847
0
  }
848
0
  if (target->t.size == 0) {
849
0
    return TPM_RC_SUCCESS;
850
0
  }
851
0
  if (target->t.size > sizeof(TPMU_NAME)) {
852
0
    return TPM_RC_SIZE;
853
0
  }
854
0
  for (i = 0; i < target->t.size; ++i) {
855
0
    result = BYTE_Unmarshal(&target->t.name[i], buffer, size);
856
0
    if (result != TPM_RC_SUCCESS) {
857
0
      return result;
858
0
    }
859
0
  }
860
0
  return TPM_RC_SUCCESS;
861
0
}
862
863
UINT16 TPMI_ALG_HASH_Marshal(TPMI_ALG_HASH* source,
864
                             BYTE** buffer,
865
1.02k
                             INT32* size) {
866
1.02k
  return uint16_t_Marshal(source, buffer, size);
867
1.02k
}
868
869
TPM_RC TPMI_ALG_HASH_Unmarshal(TPMI_ALG_HASH* target,
870
                               BYTE** buffer,
871
                               INT32* size,
872
2.06k
                               BOOL allow_conditional_value) {
873
2.06k
  TPM_RC result;
874
2.06k
  BOOL has_valid_value = FALSE;
875
2.06k
  result = uint16_t_Unmarshal(target, buffer, size);
876
2.06k
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
877
86
    return result;
878
86
  }
879
1.97k
  if (*target == TPM_ALG_NULL) {
880
189
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_HASH;
881
189
  }
882
1.78k
  switch (*target) {
883
#ifdef TPM_ALG_SHA
884
    case TPM_ALG_SHA:
885
#endif
886
0
#ifdef TPM_ALG_SHA1
887
507
    case TPM_ALG_SHA1:
888
507
#endif
889
507
#ifdef TPM_ALG_SHA256
890
861
    case TPM_ALG_SHA256:
891
861
#endif
892
861
#ifdef TPM_ALG_SHA384
893
1.23k
    case TPM_ALG_SHA384:
894
1.23k
#endif
895
1.23k
#ifdef TPM_ALG_SHA512
896
1.68k
    case TPM_ALG_SHA512:
897
1.68k
#endif
898
#ifdef TPM_ALG_SM3_256
899
    case TPM_ALG_SM3_256:
900
#endif
901
1.68k
      has_valid_value = TRUE;
902
1.68k
      break;
903
1.78k
  }
904
1.78k
  if (!has_valid_value) {
905
101
    return TPM_RC_HASH;
906
101
  }
907
1.68k
  return TPM_RC_SUCCESS;
908
1.78k
}
909
910
394
UINT16 UINT8_Marshal(UINT8* source, BYTE** buffer, INT32* size) {
911
394
  return uint8_t_Marshal(source, buffer, size);
912
394
}
913
914
214
TPM_RC UINT8_Unmarshal(UINT8* target, BYTE** buffer, INT32* size) {
915
214
  return uint8_t_Unmarshal(target, buffer, size);
916
214
}
917
918
UINT16 TPMS_PCR_SELECTION_Marshal(TPMS_PCR_SELECTION* source,
919
                                  BYTE** buffer,
920
304
                                  INT32* size) {
921
304
  UINT16 total_size = 0;
922
304
  INT32 i;
923
304
  total_size += TPMI_ALG_HASH_Marshal(&source->hash, buffer, size);
924
304
  total_size += UINT8_Marshal(&source->sizeofSelect, buffer, size);
925
1.21k
  for (i = 0; i < source->sizeofSelect; ++i) {
926
912
    total_size += BYTE_Marshal(&source->pcrSelect[i], buffer, size);
927
912
  }
928
304
  return total_size;
929
304
}
930
931
TPM_RC TPMS_PCR_SELECTION_Unmarshal(TPMS_PCR_SELECTION* target,
932
                                    BYTE** buffer,
933
228
                                    INT32* size) {
934
228
  TPM_RC result;
935
228
  INT32 i;
936
228
  result = TPMI_ALG_HASH_Unmarshal(&target->hash, buffer, size, FALSE);
937
228
  if (result != TPM_RC_SUCCESS) {
938
14
    return result;
939
14
  }
940
214
  result = UINT8_Unmarshal(&target->sizeofSelect, buffer, size);
941
214
  if (result != TPM_RC_SUCCESS) {
942
17
    return result;
943
17
  }
944
197
  if (target->sizeofSelect > PCR_SELECT_MAX) {
945
7
    return TPM_RC_PCR;
946
7
  }
947
190
  if (target->sizeofSelect < PCR_SELECT_MIN) {
948
1
    return TPM_RC_PCR;
949
1
  }
950
742
  for (i = 0; i < target->sizeofSelect; ++i) {
951
561
    result = BYTE_Unmarshal(&target->pcrSelect[i], buffer, size);
952
561
    if (result != TPM_RC_SUCCESS) {
953
8
      return result;
954
8
    }
955
561
  }
956
181
  return TPM_RC_SUCCESS;
957
189
}
958
959
14.2k
UINT16 UINT32_Marshal(UINT32* source, BYTE** buffer, INT32* size) {
960
14.2k
  return uint32_t_Marshal(source, buffer, size);
961
14.2k
}
962
963
14.8k
TPM_RC UINT32_Unmarshal(UINT32* target, BYTE** buffer, INT32* size) {
964
14.8k
  return uint32_t_Unmarshal(target, buffer, size);
965
14.8k
}
966
967
UINT16 TPML_PCR_SELECTION_Marshal(TPML_PCR_SELECTION* source,
968
                                  BYTE** buffer,
969
325
                                  INT32* size) {
970
325
  UINT16 total_size = 0;
971
325
  INT32 i;
972
325
  total_size += UINT32_Marshal(&source->count, buffer, size);
973
629
  for (i = 0; i < source->count; ++i) {
974
304
    total_size +=
975
304
        TPMS_PCR_SELECTION_Marshal(&source->pcrSelections[i], buffer, size);
976
304
  }
977
325
  return total_size;
978
325
}
979
980
TPM_RC TPML_PCR_SELECTION_Unmarshal(TPML_PCR_SELECTION* target,
981
                                    BYTE** buffer,
982
388
                                    INT32* size) {
983
388
  TPM_RC result;
984
388
  INT32 i;
985
388
  result = UINT32_Unmarshal(&target->count, buffer, size);
986
388
  if (result != TPM_RC_SUCCESS) {
987
32
    return result;
988
32
  }
989
356
  if (target->count > HASH_COUNT) {
990
46
    return TPM_RC_SIZE;
991
46
  }
992
491
  for (i = 0; i < target->count; ++i) {
993
228
    result =
994
228
        TPMS_PCR_SELECTION_Unmarshal(&target->pcrSelections[i], buffer, size);
995
228
    if (result != TPM_RC_SUCCESS) {
996
47
      return result;
997
47
    }
998
228
  }
999
263
  return TPM_RC_SUCCESS;
1000
310
}
1001
1002
UINT16 TPMS_CREATION_DATA_Marshal(TPMS_CREATION_DATA* source,
1003
                                  BYTE** buffer,
1004
244
                                  INT32* size) {
1005
244
  UINT16 total_size = 0;
1006
244
  total_size += TPML_PCR_SELECTION_Marshal(&source->pcrSelect, buffer, size);
1007
244
  total_size += TPM2B_DIGEST_Marshal(&source->pcrDigest, buffer, size);
1008
244
  total_size += TPMA_LOCALITY_Marshal(&source->locality, buffer, size);
1009
244
  total_size += TPM_ALG_ID_Marshal(&source->parentNameAlg, buffer, size);
1010
244
  total_size += TPM2B_NAME_Marshal(&source->parentName, buffer, size);
1011
244
  total_size += TPM2B_NAME_Marshal(&source->parentQualifiedName, buffer, size);
1012
244
  total_size += TPM2B_DATA_Marshal(&source->outsideInfo, buffer, size);
1013
244
  return total_size;
1014
244
}
1015
1016
TPM_RC TPMS_CREATION_DATA_Unmarshal(TPMS_CREATION_DATA* target,
1017
                                    BYTE** buffer,
1018
0
                                    INT32* size) {
1019
0
  TPM_RC result;
1020
0
  result = TPML_PCR_SELECTION_Unmarshal(&target->pcrSelect, buffer, size);
1021
0
  if (result != TPM_RC_SUCCESS) {
1022
0
    return result;
1023
0
  }
1024
0
  result = TPM2B_DIGEST_Unmarshal(&target->pcrDigest, buffer, size);
1025
0
  if (result != TPM_RC_SUCCESS) {
1026
0
    return result;
1027
0
  }
1028
0
  result = TPMA_LOCALITY_Unmarshal(&target->locality, buffer, size);
1029
0
  if (result != TPM_RC_SUCCESS) {
1030
0
    return result;
1031
0
  }
1032
0
  result = TPM_ALG_ID_Unmarshal(&target->parentNameAlg, buffer, size);
1033
0
  if (result != TPM_RC_SUCCESS) {
1034
0
    return result;
1035
0
  }
1036
0
  result = TPM2B_NAME_Unmarshal(&target->parentName, buffer, size);
1037
0
  if (result != TPM_RC_SUCCESS) {
1038
0
    return result;
1039
0
  }
1040
0
  result = TPM2B_NAME_Unmarshal(&target->parentQualifiedName, buffer, size);
1041
0
  if (result != TPM_RC_SUCCESS) {
1042
0
    return result;
1043
0
  }
1044
0
  result = TPM2B_DATA_Unmarshal(&target->outsideInfo, buffer, size);
1045
0
  if (result != TPM_RC_SUCCESS) {
1046
0
    return result;
1047
0
  }
1048
0
  return TPM_RC_SUCCESS;
1049
0
}
1050
1051
UINT16 TPM2B_CREATION_DATA_Marshal(TPM2B_CREATION_DATA* source,
1052
                                   BYTE** buffer,
1053
122
                                   INT32* size) {
1054
122
  UINT16 total_size = 0;
1055
122
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1056
122
  total_size +=
1057
122
      TPMS_CREATION_DATA_Marshal(&source->t.creationData, buffer, size);
1058
122
  {
1059
122
    BYTE* size_location = *buffer - total_size;
1060
122
    INT32 size_field_size = sizeof(UINT16);
1061
122
    UINT16 payload_size = total_size - (UINT16)size_field_size;
1062
122
    UINT16_Marshal(&payload_size, &size_location, &size_field_size);
1063
122
  }
1064
122
  return total_size;
1065
122
}
1066
1067
TPM_RC TPM2B_CREATION_DATA_Unmarshal(TPM2B_CREATION_DATA* target,
1068
                                     BYTE** buffer,
1069
0
                                     INT32* size) {
1070
0
  TPM_RC result;
1071
0
  UINT32 start_size = *size;
1072
0
  UINT32 struct_size;
1073
0
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1074
0
  if (result != TPM_RC_SUCCESS) {
1075
0
    return result;
1076
0
  }
1077
0
  if (target->t.size == 0) {
1078
0
    return TPM_RC_SIZE;
1079
0
  }
1080
0
  result = TPMS_CREATION_DATA_Unmarshal(&target->t.creationData, buffer, size);
1081
0
  if (result != TPM_RC_SUCCESS) {
1082
0
    return result;
1083
0
  }
1084
0
  struct_size = start_size - *size - sizeof(target->t.size);
1085
0
  if (struct_size != target->t.size) {
1086
0
    return TPM_RC_SIZE;
1087
0
  }
1088
0
  return TPM_RC_SUCCESS;
1089
0
}
1090
1091
UINT16 TPM2B_DIGEST_VALUES_Marshal(TPM2B_DIGEST_VALUES* source,
1092
                                   BYTE** buffer,
1093
0
                                   INT32* size) {
1094
0
  UINT16 total_size = 0;
1095
0
  INT32 i;
1096
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1097
0
  for (i = 0; i < source->t.size; ++i) {
1098
0
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
1099
0
  }
1100
0
  return total_size;
1101
0
}
1102
1103
TPM_RC TPM2B_DIGEST_VALUES_Unmarshal(TPM2B_DIGEST_VALUES* target,
1104
                                     BYTE** buffer,
1105
0
                                     INT32* size) {
1106
0
  TPM_RC result;
1107
0
  INT32 i;
1108
0
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1109
0
  if (result != TPM_RC_SUCCESS) {
1110
0
    return result;
1111
0
  }
1112
0
  if (target->t.size == 0) {
1113
0
    return TPM_RC_SUCCESS;
1114
0
  }
1115
0
  if (target->t.size > sizeof(TPML_DIGEST_VALUES)) {
1116
0
    return TPM_RC_SIZE;
1117
0
  }
1118
0
  for (i = 0; i < target->t.size; ++i) {
1119
0
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
1120
0
    if (result != TPM_RC_SUCCESS) {
1121
0
      return result;
1122
0
    }
1123
0
  }
1124
0
  return TPM_RC_SUCCESS;
1125
0
}
1126
1127
UINT16 TPM2B_ECC_PARAMETER_Marshal(TPM2B_ECC_PARAMETER* source,
1128
                                   BYTE** buffer,
1129
183
                                   INT32* size) {
1130
183
  UINT16 total_size = 0;
1131
183
  INT32 i;
1132
183
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1133
3.95k
  for (i = 0; i < source->t.size; ++i) {
1134
3.77k
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
1135
3.77k
  }
1136
183
  return total_size;
1137
183
}
1138
1139
TPM_RC TPM2B_ECC_PARAMETER_Unmarshal(TPM2B_ECC_PARAMETER* target,
1140
                                     BYTE** buffer,
1141
320
                                     INT32* size) {
1142
320
  TPM_RC result;
1143
320
  INT32 i;
1144
320
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1145
320
  if (result != TPM_RC_SUCCESS) {
1146
17
    return result;
1147
17
  }
1148
303
  if (target->t.size == 0) {
1149
129
    return TPM_RC_SUCCESS;
1150
129
  }
1151
174
  if (target->t.size > MAX_ECC_KEY_BYTES) {
1152
54
    return TPM_RC_SIZE;
1153
54
  }
1154
1.76k
  for (i = 0; i < target->t.size; ++i) {
1155
1.68k
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
1156
1.68k
    if (result != TPM_RC_SUCCESS) {
1157
40
      return result;
1158
40
    }
1159
1.68k
  }
1160
80
  return TPM_RC_SUCCESS;
1161
120
}
1162
1163
UINT16 TPMS_ECC_POINT_Marshal(TPMS_ECC_POINT* source,
1164
                              BYTE** buffer,
1165
81
                              INT32* size) {
1166
81
  UINT16 total_size = 0;
1167
81
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->x, buffer, size);
1168
81
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->y, buffer, size);
1169
81
  return total_size;
1170
81
}
1171
1172
TPM_RC TPMS_ECC_POINT_Unmarshal(TPMS_ECC_POINT* target,
1173
                                BYTE** buffer,
1174
154
                                INT32* size) {
1175
154
  TPM_RC result;
1176
154
  result = TPM2B_ECC_PARAMETER_Unmarshal(&target->x, buffer, size);
1177
154
  if (result != TPM_RC_SUCCESS) {
1178
42
    return result;
1179
42
  }
1180
112
  result = TPM2B_ECC_PARAMETER_Unmarshal(&target->y, buffer, size);
1181
112
  if (result != TPM_RC_SUCCESS) {
1182
34
    return result;
1183
34
  }
1184
78
  return TPM_RC_SUCCESS;
1185
112
}
1186
1187
UINT16 TPM2B_ECC_POINT_Marshal(TPM2B_ECC_POINT* source,
1188
                               BYTE** buffer,
1189
0
                               INT32* size) {
1190
0
  UINT16 total_size = 0;
1191
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1192
0
  total_size += TPMS_ECC_POINT_Marshal(&source->t.point, buffer, size);
1193
0
  {
1194
0
    BYTE* size_location = *buffer - total_size;
1195
0
    INT32 size_field_size = sizeof(UINT16);
1196
0
    UINT16 payload_size = total_size - (UINT16)size_field_size;
1197
0
    UINT16_Marshal(&payload_size, &size_location, &size_field_size);
1198
0
  }
1199
0
  return total_size;
1200
0
}
1201
1202
TPM_RC TPM2B_ECC_POINT_Unmarshal(TPM2B_ECC_POINT* target,
1203
                                 BYTE** buffer,
1204
0
                                 INT32* size) {
1205
0
  TPM_RC result;
1206
0
  UINT32 start_size = *size;
1207
0
  UINT32 struct_size;
1208
0
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1209
0
  if (result != TPM_RC_SUCCESS) {
1210
0
    return result;
1211
0
  }
1212
0
  if (target->t.size == 0) {
1213
0
    return TPM_RC_SIZE;
1214
0
  }
1215
0
  result = TPMS_ECC_POINT_Unmarshal(&target->t.point, buffer, size);
1216
0
  if (result != TPM_RC_SUCCESS) {
1217
0
    return result;
1218
0
  }
1219
0
  struct_size = start_size - *size - sizeof(target->t.size);
1220
0
  if (struct_size != target->t.size) {
1221
0
    return TPM_RC_SIZE;
1222
0
  }
1223
0
  return TPM_RC_SUCCESS;
1224
0
}
1225
1226
UINT16 TPM2B_ENCRYPTED_SECRET_Marshal(TPM2B_ENCRYPTED_SECRET* source,
1227
                                      BYTE** buffer,
1228
0
                                      INT32* size) {
1229
0
  UINT16 total_size = 0;
1230
0
  INT32 i;
1231
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1232
0
  for (i = 0; i < source->t.size; ++i) {
1233
0
    total_size += BYTE_Marshal(&source->t.secret[i], buffer, size);
1234
0
  }
1235
0
  return total_size;
1236
0
}
1237
1238
TPM_RC TPM2B_ENCRYPTED_SECRET_Unmarshal(TPM2B_ENCRYPTED_SECRET* target,
1239
                                        BYTE** buffer,
1240
167
                                        INT32* size) {
1241
167
  TPM_RC result;
1242
167
  INT32 i;
1243
167
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1244
167
  if (result != TPM_RC_SUCCESS) {
1245
3
    return result;
1246
3
  }
1247
164
  if (target->t.size == 0) {
1248
104
    return TPM_RC_SUCCESS;
1249
104
  }
1250
60
  if (target->t.size > sizeof(TPMU_ENCRYPTED_SECRET)) {
1251
17
    return TPM_RC_SIZE;
1252
17
  }
1253
706
  for (i = 0; i < target->t.size; ++i) {
1254
683
    result = BYTE_Unmarshal(&target->t.secret[i], buffer, size);
1255
683
    if (result != TPM_RC_SUCCESS) {
1256
20
      return result;
1257
20
    }
1258
683
  }
1259
23
  return TPM_RC_SUCCESS;
1260
43
}
1261
1262
0
UINT16 TPM2B_EVENT_Marshal(TPM2B_EVENT* source, BYTE** buffer, INT32* size) {
1263
0
  UINT16 total_size = 0;
1264
0
  INT32 i;
1265
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1266
0
  for (i = 0; i < source->t.size; ++i) {
1267
0
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
1268
0
  }
1269
0
  return total_size;
1270
0
}
1271
1272
0
TPM_RC TPM2B_EVENT_Unmarshal(TPM2B_EVENT* target, BYTE** buffer, INT32* size) {
1273
0
  TPM_RC result;
1274
0
  INT32 i;
1275
0
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1276
0
  if (result != TPM_RC_SUCCESS) {
1277
0
    return result;
1278
0
  }
1279
0
  if (target->t.size == 0) {
1280
0
    return TPM_RC_SUCCESS;
1281
0
  }
1282
0
  if (target->t.size > 1024) {
1283
0
    return TPM_RC_SIZE;
1284
0
  }
1285
0
  for (i = 0; i < target->t.size; ++i) {
1286
0
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
1287
0
    if (result != TPM_RC_SUCCESS) {
1288
0
      return result;
1289
0
    }
1290
0
  }
1291
0
  return TPM_RC_SUCCESS;
1292
0
}
1293
1294
UINT16 TPM2B_ID_OBJECT_Marshal(TPM2B_ID_OBJECT* source,
1295
                               BYTE** buffer,
1296
0
                               INT32* size) {
1297
0
  UINT16 total_size = 0;
1298
0
  INT32 i;
1299
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1300
0
  for (i = 0; i < source->t.size; ++i) {
1301
0
    total_size += BYTE_Marshal(&source->t.credential[i], buffer, size);
1302
0
  }
1303
0
  return total_size;
1304
0
}
1305
1306
TPM_RC TPM2B_ID_OBJECT_Unmarshal(TPM2B_ID_OBJECT* target,
1307
                                 BYTE** buffer,
1308
0
                                 INT32* size) {
1309
0
  TPM_RC result;
1310
0
  INT32 i;
1311
0
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1312
0
  if (result != TPM_RC_SUCCESS) {
1313
0
    return result;
1314
0
  }
1315
0
  if (target->t.size == 0) {
1316
0
    return TPM_RC_SUCCESS;
1317
0
  }
1318
0
  if (target->t.size > sizeof(_ID_OBJECT)) {
1319
0
    return TPM_RC_SIZE;
1320
0
  }
1321
0
  for (i = 0; i < target->t.size; ++i) {
1322
0
    result = BYTE_Unmarshal(&target->t.credential[i], buffer, size);
1323
0
    if (result != TPM_RC_SUCCESS) {
1324
0
      return result;
1325
0
    }
1326
0
  }
1327
0
  return TPM_RC_SUCCESS;
1328
0
}
1329
1330
0
UINT16 TPM2B_IV_Marshal(TPM2B_IV* source, BYTE** buffer, INT32* size) {
1331
0
  UINT16 total_size = 0;
1332
0
  INT32 i;
1333
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1334
0
  for (i = 0; i < source->t.size; ++i) {
1335
0
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
1336
0
  }
1337
0
  return total_size;
1338
0
}
1339
1340
0
TPM_RC TPM2B_IV_Unmarshal(TPM2B_IV* target, BYTE** buffer, INT32* size) {
1341
0
  TPM_RC result;
1342
0
  INT32 i;
1343
0
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1344
0
  if (result != TPM_RC_SUCCESS) {
1345
0
    return result;
1346
0
  }
1347
0
  if (target->t.size == 0) {
1348
0
    return TPM_RC_SUCCESS;
1349
0
  }
1350
0
  if (target->t.size > MAX_SYM_BLOCK_SIZE) {
1351
0
    return TPM_RC_SIZE;
1352
0
  }
1353
0
  for (i = 0; i < target->t.size; ++i) {
1354
0
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
1355
0
    if (result != TPM_RC_SUCCESS) {
1356
0
      return result;
1357
0
    }
1358
0
  }
1359
0
  return TPM_RC_SUCCESS;
1360
0
}
1361
1362
UINT16 TPM2B_MAX_BUFFER_Marshal(TPM2B_MAX_BUFFER* source,
1363
                                BYTE** buffer,
1364
1
                                INT32* size) {
1365
1
  UINT16 total_size = 0;
1366
1
  INT32 i;
1367
1
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1368
1
  for (i = 0; i < source->t.size; ++i) {
1369
0
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
1370
0
  }
1371
1
  return total_size;
1372
1
}
1373
1374
TPM_RC TPM2B_MAX_BUFFER_Unmarshal(TPM2B_MAX_BUFFER* target,
1375
                                  BYTE** buffer,
1376
55
                                  INT32* size) {
1377
55
  TPM_RC result;
1378
55
  INT32 i;
1379
55
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1380
55
  if (result != TPM_RC_SUCCESS) {
1381
1
    return result;
1382
1
  }
1383
54
  if (target->t.size == 0) {
1384
17
    return TPM_RC_SUCCESS;
1385
17
  }
1386
37
  if (target->t.size > MAX_DIGEST_BUFFER) {
1387
9
    return TPM_RC_SIZE;
1388
9
  }
1389
255
  for (i = 0; i < target->t.size; ++i) {
1390
245
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
1391
245
    if (result != TPM_RC_SUCCESS) {
1392
18
      return result;
1393
18
    }
1394
245
  }
1395
10
  return TPM_RC_SUCCESS;
1396
28
}
1397
1398
UINT16 TPM2B_MAX_NV_BUFFER_Marshal(TPM2B_MAX_NV_BUFFER* source,
1399
                                   BYTE** buffer,
1400
0
                                   INT32* size) {
1401
0
  UINT16 total_size = 0;
1402
0
  INT32 i;
1403
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1404
0
  for (i = 0; i < source->t.size; ++i) {
1405
0
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
1406
0
  }
1407
0
  return total_size;
1408
0
}
1409
1410
TPM_RC TPM2B_MAX_NV_BUFFER_Unmarshal(TPM2B_MAX_NV_BUFFER* target,
1411
                                     BYTE** buffer,
1412
0
                                     INT32* size) {
1413
0
  TPM_RC result;
1414
0
  INT32 i;
1415
0
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1416
0
  if (result != TPM_RC_SUCCESS) {
1417
0
    return result;
1418
0
  }
1419
0
  if (target->t.size == 0) {
1420
0
    return TPM_RC_SUCCESS;
1421
0
  }
1422
0
  if (target->t.size > MAX_NV_BUFFER_SIZE) {
1423
0
    return TPM_RC_SIZE;
1424
0
  }
1425
0
  for (i = 0; i < target->t.size; ++i) {
1426
0
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
1427
0
    if (result != TPM_RC_SUCCESS) {
1428
0
      return result;
1429
0
    }
1430
0
  }
1431
0
  return TPM_RC_SUCCESS;
1432
0
}
1433
1434
245
UINT16 TPM2B_NONCE_Marshal(TPM2B_NONCE* source, BYTE** buffer, INT32* size) {
1435
245
  return TPM2B_DIGEST_Marshal(source, buffer, size);
1436
245
}
1437
1438
1.22k
TPM_RC TPM2B_NONCE_Unmarshal(TPM2B_NONCE* target, BYTE** buffer, INT32* size) {
1439
1.22k
  return TPM2B_DIGEST_Unmarshal(target, buffer, size);
1440
1.22k
}
1441
1442
UINT16 TPMI_RH_NV_INDEX_Marshal(TPMI_RH_NV_INDEX* source,
1443
                                BYTE** buffer,
1444
0
                                INT32* size) {
1445
0
  return uint32_t_Marshal(source, buffer, size);
1446
0
}
1447
1448
TPM_RC TPMI_RH_NV_INDEX_Unmarshal(TPMI_RH_NV_INDEX* target,
1449
                                  BYTE** buffer,
1450
366
                                  INT32* size) {
1451
366
  TPM_RC result;
1452
366
  BOOL has_valid_value = FALSE;
1453
366
  result = uint32_t_Unmarshal(target, buffer, size);
1454
366
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
1455
52
    return result;
1456
52
  }
1457
314
  if ((*target >= NV_INDEX_FIRST) && (*target <= NV_INDEX_LAST)) {
1458
196
    has_valid_value = TRUE;
1459
196
  }
1460
314
  if (!has_valid_value) {
1461
118
    return TPM_RC_VALUE;
1462
118
  }
1463
196
  return TPM_RC_SUCCESS;
1464
314
}
1465
1466
0
UINT16 TPMA_NV_Marshal(TPMA_NV* source, BYTE** buffer, INT32* size) {
1467
0
  return uint32_t_Marshal((uint32_t*)source, buffer, size);
1468
0
}
1469
1470
123
TPM_RC TPMA_NV_Unmarshal(TPMA_NV* target, BYTE** buffer, INT32* size) {
1471
123
  TPM_RC result;
1472
123
  result = uint32_t_Unmarshal((uint32_t*)target, buffer, size);
1473
123
  if (result != TPM_RC_SUCCESS) {
1474
6
    return result;
1475
6
  }
1476
117
  if (target->reserved7_9 != 0) {
1477
4
    return TPM_RC_RESERVED_BITS;
1478
4
  }
1479
113
  if (target->reserved20_24 != 0) {
1480
3
    return TPM_RC_RESERVED_BITS;
1481
3
  }
1482
110
  return TPM_RC_SUCCESS;
1483
113
}
1484
1485
UINT16 TPMS_NV_PUBLIC_Marshal(TPMS_NV_PUBLIC* source,
1486
                              BYTE** buffer,
1487
0
                              INT32* size) {
1488
0
  UINT16 total_size = 0;
1489
0
  total_size += TPMI_RH_NV_INDEX_Marshal(&source->nvIndex, buffer, size);
1490
0
  total_size += TPMI_ALG_HASH_Marshal(&source->nameAlg, buffer, size);
1491
0
  total_size += TPMA_NV_Marshal(&source->attributes, buffer, size);
1492
0
  total_size += TPM2B_DIGEST_Marshal(&source->authPolicy, buffer, size);
1493
0
  total_size += UINT16_Marshal(&source->dataSize, buffer, size);
1494
0
  return total_size;
1495
0
}
1496
1497
TPM_RC TPMS_NV_PUBLIC_Unmarshal(TPMS_NV_PUBLIC* target,
1498
                                BYTE** buffer,
1499
229
                                INT32* size) {
1500
229
  TPM_RC result;
1501
229
  result = TPMI_RH_NV_INDEX_Unmarshal(&target->nvIndex, buffer, size);
1502
229
  if (result != TPM_RC_SUCCESS) {
1503
74
    return result;
1504
74
  }
1505
155
  result = TPMI_ALG_HASH_Unmarshal(&target->nameAlg, buffer, size, FALSE);
1506
155
  if (result != TPM_RC_SUCCESS) {
1507
32
    return result;
1508
32
  }
1509
123
  result = TPMA_NV_Unmarshal(&target->attributes, buffer, size);
1510
123
  if (result != TPM_RC_SUCCESS) {
1511
13
    return result;
1512
13
  }
1513
110
  result = TPM2B_DIGEST_Unmarshal(&target->authPolicy, buffer, size);
1514
110
  if (result != TPM_RC_SUCCESS) {
1515
14
    return result;
1516
14
  }
1517
96
  result = UINT16_Unmarshal(&target->dataSize, buffer, size);
1518
96
  if (result != TPM_RC_SUCCESS) {
1519
2
    return result;
1520
2
  }
1521
94
  if (target->dataSize > MAX_NV_INDEX_SIZE) {
1522
9
    return TPM_RC_SIZE;
1523
9
  }
1524
85
  return TPM_RC_SUCCESS;
1525
94
}
1526
1527
UINT16 TPM2B_NV_PUBLIC_Marshal(TPM2B_NV_PUBLIC* source,
1528
                               BYTE** buffer,
1529
0
                               INT32* size) {
1530
0
  UINT16 total_size = 0;
1531
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1532
0
  total_size += TPMS_NV_PUBLIC_Marshal(&source->t.nvPublic, buffer, size);
1533
0
  {
1534
0
    BYTE* size_location = *buffer - total_size;
1535
0
    INT32 size_field_size = sizeof(UINT16);
1536
0
    UINT16 payload_size = total_size - (UINT16)size_field_size;
1537
0
    UINT16_Marshal(&payload_size, &size_location, &size_field_size);
1538
0
  }
1539
0
  return total_size;
1540
0
}
1541
1542
TPM_RC TPM2B_NV_PUBLIC_Unmarshal(TPM2B_NV_PUBLIC* target,
1543
                                 BYTE** buffer,
1544
231
                                 INT32* size) {
1545
231
  TPM_RC result;
1546
231
  UINT32 start_size = *size;
1547
231
  UINT32 struct_size;
1548
231
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1549
231
  if (result != TPM_RC_SUCCESS) {
1550
1
    return result;
1551
1
  }
1552
230
  if (target->t.size == 0) {
1553
1
    return TPM_RC_SIZE;
1554
1
  }
1555
229
  result = TPMS_NV_PUBLIC_Unmarshal(&target->t.nvPublic, buffer, size);
1556
229
  if (result != TPM_RC_SUCCESS) {
1557
144
    return result;
1558
144
  }
1559
85
  struct_size = start_size - *size - sizeof(target->t.size);
1560
85
  if (struct_size != target->t.size) {
1561
6
    return TPM_RC_SIZE;
1562
6
  }
1563
79
  return TPM_RC_SUCCESS;
1564
85
}
1565
1566
UINT16 TPM2B_OPERAND_Marshal(TPM2B_OPERAND* source,
1567
                             BYTE** buffer,
1568
0
                             INT32* size) {
1569
0
  return TPM2B_DIGEST_Marshal(source, buffer, size);
1570
0
}
1571
1572
TPM_RC TPM2B_OPERAND_Unmarshal(TPM2B_OPERAND* target,
1573
                               BYTE** buffer,
1574
0
                               INT32* size) {
1575
0
  return TPM2B_DIGEST_Unmarshal(target, buffer, size);
1576
0
}
1577
1578
UINT16 TPM2B_PRIVATE_Marshal(TPM2B_PRIVATE* source,
1579
                             BYTE** buffer,
1580
0
                             INT32* size) {
1581
0
  UINT16 total_size = 0;
1582
0
  INT32 i;
1583
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1584
0
  for (i = 0; i < source->t.size; ++i) {
1585
0
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
1586
0
  }
1587
0
  return total_size;
1588
0
}
1589
1590
TPM_RC TPM2B_PRIVATE_Unmarshal(TPM2B_PRIVATE* target,
1591
                               BYTE** buffer,
1592
0
                               INT32* size) {
1593
0
  TPM_RC result;
1594
0
  INT32 i;
1595
0
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1596
0
  if (result != TPM_RC_SUCCESS) {
1597
0
    return result;
1598
0
  }
1599
0
  if (target->t.size == 0) {
1600
0
    return TPM_RC_SUCCESS;
1601
0
  }
1602
0
  if (target->t.size > sizeof(_PRIVATE)) {
1603
0
    return TPM_RC_SIZE;
1604
0
  }
1605
0
  for (i = 0; i < target->t.size; ++i) {
1606
0
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
1607
0
    if (result != TPM_RC_SUCCESS) {
1608
0
      return result;
1609
0
    }
1610
0
  }
1611
0
  return TPM_RC_SUCCESS;
1612
0
}
1613
1614
UINT16 TPM2B_PRIVATE_KEY_RSA_Marshal(TPM2B_PRIVATE_KEY_RSA* source,
1615
                                     BYTE** buffer,
1616
0
                                     INT32* size) {
1617
0
  UINT16 total_size = 0;
1618
0
  INT32 i;
1619
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1620
0
  for (i = 0; i < source->t.size; ++i) {
1621
0
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
1622
0
  }
1623
0
  return total_size;
1624
0
}
1625
1626
TPM_RC TPM2B_PRIVATE_KEY_RSA_Unmarshal(TPM2B_PRIVATE_KEY_RSA* target,
1627
                                       BYTE** buffer,
1628
111
                                       INT32* size) {
1629
111
  TPM_RC result;
1630
111
  INT32 i;
1631
111
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1632
111
  if (result != TPM_RC_SUCCESS) {
1633
3
    return result;
1634
3
  }
1635
108
  if (target->t.size == 0) {
1636
11
    return TPM_RC_SUCCESS;
1637
11
  }
1638
97
  if (target->t.size > MAX_RSA_KEY_BYTES / 2) {
1639
15
    return TPM_RC_SIZE;
1640
15
  }
1641
7.52k
  for (i = 0; i < target->t.size; ++i) {
1642
7.45k
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
1643
7.45k
    if (result != TPM_RC_SUCCESS) {
1644
17
      return result;
1645
17
    }
1646
7.45k
  }
1647
65
  return TPM_RC_SUCCESS;
1648
82
}
1649
1650
UINT16 TPM2B_PRIVATE_VENDOR_SPECIFIC_Marshal(
1651
    TPM2B_PRIVATE_VENDOR_SPECIFIC* source,
1652
    BYTE** buffer,
1653
0
    INT32* size) {
1654
0
  UINT16 total_size = 0;
1655
0
  INT32 i;
1656
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1657
0
  for (i = 0; i < source->t.size; ++i) {
1658
0
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
1659
0
  }
1660
0
  return total_size;
1661
0
}
1662
1663
TPM_RC TPM2B_PRIVATE_VENDOR_SPECIFIC_Unmarshal(
1664
    TPM2B_PRIVATE_VENDOR_SPECIFIC* target,
1665
    BYTE** buffer,
1666
0
    INT32* size) {
1667
0
  TPM_RC result;
1668
0
  INT32 i;
1669
0
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1670
0
  if (result != TPM_RC_SUCCESS) {
1671
0
    return result;
1672
0
  }
1673
0
  if (target->t.size == 0) {
1674
0
    return TPM_RC_SUCCESS;
1675
0
  }
1676
0
  if (target->t.size > PRIVATE_VENDOR_SPECIFIC_BYTES) {
1677
0
    return TPM_RC_SIZE;
1678
0
  }
1679
0
  for (i = 0; i < target->t.size; ++i) {
1680
0
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
1681
0
    if (result != TPM_RC_SUCCESS) {
1682
0
      return result;
1683
0
    }
1684
0
  }
1685
0
  return TPM_RC_SUCCESS;
1686
0
}
1687
1688
564
UINT16 TPMA_OBJECT_Marshal(TPMA_OBJECT* source, BYTE** buffer, INT32* size) {
1689
564
  return uint32_t_Marshal((uint32_t*)source, buffer, size);
1690
564
}
1691
1692
986
TPM_RC TPMA_OBJECT_Unmarshal(TPMA_OBJECT* target, BYTE** buffer, INT32* size) {
1693
986
  TPM_RC result;
1694
986
  result = uint32_t_Unmarshal((uint32_t*)target, buffer, size);
1695
986
  if (result != TPM_RC_SUCCESS) {
1696
8
    return result;
1697
8
  }
1698
978
  if (target->reserved0 != 0) {
1699
1
    return TPM_RC_RESERVED_BITS;
1700
1
  }
1701
977
  if (target->reserved3 != 0) {
1702
1
    return TPM_RC_RESERVED_BITS;
1703
1
  }
1704
976
  if (target->reserved8_9 != 0) {
1705
4
    return TPM_RC_RESERVED_BITS;
1706
4
  }
1707
972
  if (target->reserved12_15 != 0) {
1708
1
    return TPM_RC_RESERVED_BITS;
1709
1
  }
1710
971
  if (target->reserved19_31 != 0) {
1711
24
    return TPM_RC_RESERVED_BITS;
1712
24
  }
1713
947
  return TPM_RC_SUCCESS;
1714
971
}
1715
1716
UINT16 TPMI_ALG_PUBLIC_Marshal(TPMI_ALG_PUBLIC* source,
1717
                               BYTE** buffer,
1718
564
                               INT32* size) {
1719
564
  return uint16_t_Marshal(source, buffer, size);
1720
564
}
1721
1722
TPM_RC TPMI_ALG_PUBLIC_Unmarshal(TPMI_ALG_PUBLIC* target,
1723
                                 BYTE** buffer,
1724
1.39k
                                 INT32* size) {
1725
1.39k
  TPM_RC result;
1726
1.39k
  BOOL has_valid_value = FALSE;
1727
1.39k
  result = uint16_t_Unmarshal(target, buffer, size);
1728
1.39k
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
1729
32
    return result;
1730
32
  }
1731
1.36k
  switch (*target) {
1732
0
#ifdef TPM_ALG_RSA
1733
513
    case TPM_ALG_RSA:
1734
513
#endif
1735
513
#ifdef TPM_ALG_KEYEDHASH
1736
697
    case TPM_ALG_KEYEDHASH:
1737
697
#endif
1738
697
#ifdef TPM_ALG_ECC
1739
1.10k
    case TPM_ALG_ECC:
1740
1.10k
#endif
1741
1.10k
#ifdef TPM_ALG_SYMCIPHER
1742
1.33k
    case TPM_ALG_SYMCIPHER:
1743
1.33k
#endif
1744
1.33k
      has_valid_value = TRUE;
1745
1.33k
      break;
1746
1.36k
  }
1747
1.36k
  if (!has_valid_value) {
1748
28
    return TPM_RC_TYPE;
1749
28
  }
1750
1.33k
  return TPM_RC_SUCCESS;
1751
1.36k
}
1752
1753
UINT16 TPM2B_PUBLIC_KEY_RSA_Marshal(TPM2B_PUBLIC_KEY_RSA* source,
1754
                                    BYTE** buffer,
1755
273
                                    INT32* size) {
1756
273
  UINT16 total_size = 0;
1757
273
  INT32 i;
1758
273
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1759
33.2k
  for (i = 0; i < source->t.size; ++i) {
1760
32.9k
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
1761
32.9k
  }
1762
273
  return total_size;
1763
273
}
1764
1765
TPM_RC TPM2B_PUBLIC_KEY_RSA_Unmarshal(TPM2B_PUBLIC_KEY_RSA* target,
1766
                                      BYTE** buffer,
1767
204
                                      INT32* size) {
1768
204
  TPM_RC result;
1769
204
  INT32 i;
1770
204
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1771
204
  if (result != TPM_RC_SUCCESS) {
1772
1
    return result;
1773
1
  }
1774
203
  if (target->t.size == 0) {
1775
103
    return TPM_RC_SUCCESS;
1776
103
  }
1777
100
  if (target->t.size > MAX_RSA_KEY_BYTES) {
1778
13
    return TPM_RC_SIZE;
1779
13
  }
1780
15.9k
  for (i = 0; i < target->t.size; ++i) {
1781
15.9k
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
1782
15.9k
    if (result != TPM_RC_SUCCESS) {
1783
12
      return result;
1784
12
    }
1785
15.9k
  }
1786
75
  return TPM_RC_SUCCESS;
1787
87
}
1788
1789
UINT16 TPMU_PUBLIC_ID_Marshal(TPMU_PUBLIC_ID* source,
1790
                              BYTE** buffer,
1791
                              INT32* size,
1792
564
                              UINT32 selector) {
1793
564
  switch (selector) {
1794
0
#ifdef TPM_ALG_KEYEDHASH
1795
107
    case TPM_ALG_KEYEDHASH:
1796
107
      return TPM2B_DIGEST_Marshal((TPM2B_DIGEST*)&source->keyedHash, buffer,
1797
107
                                  size);
1798
0
#endif
1799
0
#ifdef TPM_ALG_SYMCIPHER
1800
103
    case TPM_ALG_SYMCIPHER:
1801
103
      return TPM2B_DIGEST_Marshal((TPM2B_DIGEST*)&source->sym, buffer, size);
1802
0
#endif
1803
0
#ifdef TPM_ALG_RSA
1804
273
    case TPM_ALG_RSA:
1805
273
      return TPM2B_PUBLIC_KEY_RSA_Marshal((TPM2B_PUBLIC_KEY_RSA*)&source->rsa,
1806
273
                                          buffer, size);
1807
0
#endif
1808
0
#ifdef TPM_ALG_ECC
1809
81
    case TPM_ALG_ECC:
1810
81
      return TPMS_ECC_POINT_Marshal((TPMS_ECC_POINT*)&source->ecc, buffer,
1811
81
                                    size);
1812
564
#endif
1813
564
  }
1814
0
  return 0;
1815
564
}
1816
1817
TPM_RC TPMU_PUBLIC_ID_Unmarshal(TPMU_PUBLIC_ID* target,
1818
                                BYTE** buffer,
1819
                                INT32* size,
1820
584
                                UINT32 selector) {
1821
584
  switch (selector) {
1822
0
#ifdef TPM_ALG_KEYEDHASH
1823
108
    case TPM_ALG_KEYEDHASH:
1824
108
      return TPM2B_DIGEST_Unmarshal((TPM2B_DIGEST*)&target->keyedHash, buffer,
1825
108
                                    size);
1826
0
#endif
1827
0
#ifdef TPM_ALG_SYMCIPHER
1828
118
    case TPM_ALG_SYMCIPHER:
1829
118
      return TPM2B_DIGEST_Unmarshal((TPM2B_DIGEST*)&target->sym, buffer, size);
1830
0
#endif
1831
0
#ifdef TPM_ALG_RSA
1832
204
    case TPM_ALG_RSA:
1833
204
      return TPM2B_PUBLIC_KEY_RSA_Unmarshal((TPM2B_PUBLIC_KEY_RSA*)&target->rsa,
1834
204
                                            buffer, size);
1835
0
#endif
1836
0
#ifdef TPM_ALG_ECC
1837
154
    case TPM_ALG_ECC:
1838
154
      return TPMS_ECC_POINT_Unmarshal((TPMS_ECC_POINT*)&target->ecc, buffer,
1839
154
                                      size);
1840
584
#endif
1841
584
  }
1842
0
  return TPM_RC_SELECTOR;
1843
584
}
1844
1845
20
UINT16 TPM_KEY_BITS_Marshal(TPM_KEY_BITS* source, BYTE** buffer, INT32* size) {
1846
20
  return uint16_t_Marshal(source, buffer, size);
1847
20
}
1848
1849
TPM_RC TPM_KEY_BITS_Unmarshal(TPM_KEY_BITS* target,
1850
                              BYTE** buffer,
1851
124
                              INT32* size) {
1852
124
  return uint16_t_Unmarshal(target, buffer, size);
1853
124
}
1854
1855
UINT16 TPMI_AES_KEY_BITS_Marshal(TPMI_AES_KEY_BITS* source,
1856
                                 BYTE** buffer,
1857
20
                                 INT32* size) {
1858
20
  return TPM_KEY_BITS_Marshal(source, buffer, size);
1859
20
}
1860
1861
TPM_RC TPMI_AES_KEY_BITS_Unmarshal(TPMI_AES_KEY_BITS* target,
1862
                                   BYTE** buffer,
1863
124
                                   INT32* size) {
1864
124
  TPM_RC result;
1865
124
  uint16_t supported_values[] = AES_KEY_SIZES_BITS;
1866
124
  size_t length = sizeof(supported_values) / sizeof(supported_values[0]);
1867
124
  size_t i;
1868
124
  BOOL is_supported_value = FALSE;
1869
124
  result = TPM_KEY_BITS_Unmarshal(target, buffer, size);
1870
124
  if (result != TPM_RC_SUCCESS) {
1871
3
    return result;
1872
3
  }
1873
236
  for (i = 0; i < length; ++i) {
1874
213
    if (*target == supported_values[i]) {
1875
98
      is_supported_value = TRUE;
1876
98
      break;
1877
98
    }
1878
213
  }
1879
121
  if (!is_supported_value) {
1880
23
    return TPM_RC_VALUE;
1881
23
  }
1882
98
  return TPM_RC_SUCCESS;
1883
121
}
1884
1885
UINT16 TPMI_SM4_KEY_BITS_Marshal(TPMI_SM4_KEY_BITS* source,
1886
                                 BYTE** buffer,
1887
0
                                 INT32* size) {
1888
0
  return TPM_KEY_BITS_Marshal(source, buffer, size);
1889
0
}
1890
1891
TPM_RC TPMI_SM4_KEY_BITS_Unmarshal(TPMI_SM4_KEY_BITS* target,
1892
                                   BYTE** buffer,
1893
0
                                   INT32* size) {
1894
0
  TPM_RC result;
1895
0
  uint16_t supported_values[] = SM4_KEY_SIZES_BITS;
1896
0
  size_t length = sizeof(supported_values) / sizeof(supported_values[0]);
1897
0
  size_t i;
1898
0
  BOOL is_supported_value = FALSE;
1899
0
  result = TPM_KEY_BITS_Unmarshal(target, buffer, size);
1900
0
  if (result != TPM_RC_SUCCESS) {
1901
0
    return result;
1902
0
  }
1903
0
  for (i = 0; i < length; ++i) {
1904
0
    if (*target == supported_values[i]) {
1905
0
      is_supported_value = TRUE;
1906
0
      break;
1907
0
    }
1908
0
  }
1909
0
  if (!is_supported_value) {
1910
0
    return TPM_RC_VALUE;
1911
0
  }
1912
0
  return TPM_RC_SUCCESS;
1913
0
}
1914
1915
UINT16 TPMI_CAMELLIA_KEY_BITS_Marshal(TPMI_CAMELLIA_KEY_BITS* source,
1916
                                      BYTE** buffer,
1917
0
                                      INT32* size) {
1918
0
  return TPM_KEY_BITS_Marshal(source, buffer, size);
1919
0
}
1920
1921
TPM_RC TPMI_CAMELLIA_KEY_BITS_Unmarshal(TPMI_CAMELLIA_KEY_BITS* target,
1922
                                        BYTE** buffer,
1923
0
                                        INT32* size) {
1924
0
  TPM_RC result;
1925
0
  uint16_t supported_values[] = CAMELLIA_KEY_SIZES_BITS;
1926
0
  size_t length = sizeof(supported_values) / sizeof(supported_values[0]);
1927
0
  size_t i;
1928
0
  BOOL is_supported_value = FALSE;
1929
0
  result = TPM_KEY_BITS_Unmarshal(target, buffer, size);
1930
0
  if (result != TPM_RC_SUCCESS) {
1931
0
    return result;
1932
0
  }
1933
0
  for (i = 0; i < length; ++i) {
1934
0
    if (*target == supported_values[i]) {
1935
0
      is_supported_value = TRUE;
1936
0
      break;
1937
0
    }
1938
0
  }
1939
0
  if (!is_supported_value) {
1940
0
    return TPM_RC_VALUE;
1941
0
  }
1942
0
  return TPM_RC_SUCCESS;
1943
0
}
1944
1945
UINT16 TPMU_SYM_KEY_BITS_Marshal(TPMU_SYM_KEY_BITS* source,
1946
                                 BYTE** buffer,
1947
                                 INT32* size,
1948
457
                                 UINT32 selector) {
1949
457
  switch (selector) {
1950
0
#ifdef TPM_ALG_AES
1951
20
    case TPM_ALG_AES:
1952
20
      return TPMI_AES_KEY_BITS_Marshal((TPMI_AES_KEY_BITS*)&source->aes, buffer,
1953
20
                                       size);
1954
0
#endif
1955
#ifdef TPM_ALG_SM4
1956
    case TPM_ALG_SM4:
1957
      return TPMI_SM4_KEY_BITS_Marshal((TPMI_SM4_KEY_BITS*)&source->sm4, buffer,
1958
                                       size);
1959
#endif
1960
#ifdef TPM_ALG_CAMELLIA
1961
    case TPM_ALG_CAMELLIA:
1962
      return TPMI_CAMELLIA_KEY_BITS_Marshal(
1963
          (TPMI_CAMELLIA_KEY_BITS*)&source->camellia, buffer, size);
1964
#endif
1965
0
#ifdef TPM_ALG_XOR
1966
0
    case TPM_ALG_XOR:
1967
0
      return TPMI_ALG_HASH_Marshal((TPMI_ALG_HASH*)&source->xor_, buffer, size);
1968
0
#endif
1969
0
#ifdef TPM_ALG_NULL
1970
437
    case TPM_ALG_NULL:
1971
437
      return 0;
1972
457
#endif
1973
457
  }
1974
0
  return 0;
1975
457
}
1976
1977
TPM_RC TPMU_SYM_KEY_BITS_Unmarshal(TPMU_SYM_KEY_BITS* target,
1978
                                   BYTE** buffer,
1979
                                   INT32* size,
1980
844
                                   UINT32 selector) {
1981
844
  switch (selector) {
1982
0
#ifdef TPM_ALG_AES
1983
124
    case TPM_ALG_AES:
1984
124
      return TPMI_AES_KEY_BITS_Unmarshal((TPMI_AES_KEY_BITS*)&target->aes,
1985
124
                                         buffer, size);
1986
0
#endif
1987
#ifdef TPM_ALG_SM4
1988
    case TPM_ALG_SM4:
1989
      return TPMI_SM4_KEY_BITS_Unmarshal((TPMI_SM4_KEY_BITS*)&target->sm4,
1990
                                         buffer, size);
1991
#endif
1992
#ifdef TPM_ALG_CAMELLIA
1993
    case TPM_ALG_CAMELLIA:
1994
      return TPMI_CAMELLIA_KEY_BITS_Unmarshal(
1995
          (TPMI_CAMELLIA_KEY_BITS*)&target->camellia, buffer, size);
1996
#endif
1997
0
#ifdef TPM_ALG_XOR
1998
10
    case TPM_ALG_XOR:
1999
10
      return TPMI_ALG_HASH_Unmarshal(&target->xor_, buffer, size, FALSE);
2000
0
#endif
2001
0
#ifdef TPM_ALG_NULL
2002
710
    case TPM_ALG_NULL:
2003
710
      return TPM_RC_SUCCESS;
2004
844
#endif
2005
844
  }
2006
0
  return TPM_RC_SELECTOR;
2007
844
}
2008
2009
UINT16 TPMI_ALG_SYM_MODE_Marshal(TPMI_ALG_SYM_MODE* source,
2010
                                 BYTE** buffer,
2011
20
                                 INT32* size) {
2012
20
  return uint16_t_Marshal(source, buffer, size);
2013
20
}
2014
2015
TPM_RC TPMI_ALG_SYM_MODE_Unmarshal(TPMI_ALG_SYM_MODE* target,
2016
                                   BYTE** buffer,
2017
                                   INT32* size,
2018
98
                                   BOOL allow_conditional_value) {
2019
98
  TPM_RC result;
2020
98
  BOOL has_valid_value = FALSE;
2021
98
  result = uint16_t_Unmarshal(target, buffer, size);
2022
98
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
2023
4
    return result;
2024
4
  }
2025
94
  if (*target == TPM_ALG_NULL) {
2026
3
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_MODE;
2027
3
  }
2028
91
  switch (*target) {
2029
0
#ifdef TPM_ALG_CTR
2030
3
    case TPM_ALG_CTR:
2031
3
#endif
2032
3
#ifdef TPM_ALG_OFB
2033
6
    case TPM_ALG_OFB:
2034
6
#endif
2035
6
#ifdef TPM_ALG_CBC
2036
14
    case TPM_ALG_CBC:
2037
14
#endif
2038
14
#ifdef TPM_ALG_CFB
2039
21
    case TPM_ALG_CFB:
2040
21
#endif
2041
21
#ifdef TPM_ALG_ECB
2042
23
    case TPM_ALG_ECB:
2043
23
#endif
2044
23
      has_valid_value = TRUE;
2045
23
      break;
2046
91
  }
2047
91
  if (!has_valid_value) {
2048
68
    return TPM_RC_MODE;
2049
68
  }
2050
23
  return TPM_RC_SUCCESS;
2051
91
}
2052
2053
UINT16 TPMU_SYM_MODE_Marshal(TPMU_SYM_MODE* source,
2054
                             BYTE** buffer,
2055
                             INT32* size,
2056
457
                             UINT32 selector) {
2057
457
  switch (selector) {
2058
0
#ifdef TPM_ALG_AES
2059
20
    case TPM_ALG_AES:
2060
20
      return TPMI_ALG_SYM_MODE_Marshal((TPMI_ALG_SYM_MODE*)&source->aes, buffer,
2061
20
                                       size);
2062
0
#endif
2063
#ifdef TPM_ALG_SM4
2064
    case TPM_ALG_SM4:
2065
      return TPMI_ALG_SYM_MODE_Marshal((TPMI_ALG_SYM_MODE*)&source->sm4, buffer,
2066
                                       size);
2067
#endif
2068
#ifdef TPM_ALG_CAMELLIA
2069
    case TPM_ALG_CAMELLIA:
2070
      return TPMI_ALG_SYM_MODE_Marshal((TPMI_ALG_SYM_MODE*)&source->camellia,
2071
                                       buffer, size);
2072
#endif
2073
0
#ifdef TPM_ALG_XOR
2074
0
    case TPM_ALG_XOR:
2075
0
      return 0;
2076
0
#endif
2077
0
#ifdef TPM_ALG_NULL
2078
437
    case TPM_ALG_NULL:
2079
437
      return 0;
2080
457
#endif
2081
457
  }
2082
0
  return 0;
2083
457
}
2084
2085
TPM_RC TPMU_SYM_MODE_Unmarshal(TPMU_SYM_MODE* target,
2086
                               BYTE** buffer,
2087
                               INT32* size,
2088
813
                               UINT32 selector) {
2089
813
  switch (selector) {
2090
0
#ifdef TPM_ALG_AES
2091
98
    case TPM_ALG_AES:
2092
98
      return TPMI_ALG_SYM_MODE_Unmarshal(&target->aes, buffer, size, FALSE);
2093
0
#endif
2094
#ifdef TPM_ALG_SM4
2095
    case TPM_ALG_SM4:
2096
      return TPMI_ALG_SYM_MODE_Unmarshal(&target->sm4, buffer, size, FALSE);
2097
#endif
2098
#ifdef TPM_ALG_CAMELLIA
2099
    case TPM_ALG_CAMELLIA:
2100
      return TPMI_ALG_SYM_MODE_Unmarshal(&target->camellia, buffer, size,
2101
                                         FALSE);
2102
#endif
2103
0
#ifdef TPM_ALG_XOR
2104
5
    case TPM_ALG_XOR:
2105
5
      return TPM_RC_SUCCESS;
2106
0
#endif
2107
0
#ifdef TPM_ALG_NULL
2108
710
    case TPM_ALG_NULL:
2109
710
      return TPM_RC_SUCCESS;
2110
813
#endif
2111
813
  }
2112
0
  return TPM_RC_SELECTOR;
2113
813
}
2114
2115
UINT16 TPMI_ALG_SYM_OBJECT_Marshal(TPMI_ALG_SYM_OBJECT* source,
2116
                                   BYTE** buffer,
2117
457
                                   INT32* size) {
2118
457
  return uint16_t_Marshal(source, buffer, size);
2119
457
}
2120
2121
TPM_RC TPMI_ALG_SYM_OBJECT_Unmarshal(TPMI_ALG_SYM_OBJECT* target,
2122
                                     BYTE** buffer,
2123
                                     INT32* size,
2124
780
                                     BOOL allow_conditional_value) {
2125
780
  TPM_RC result;
2126
780
  BOOL has_valid_value = FALSE;
2127
780
  result = uint16_t_Unmarshal(target, buffer, size);
2128
780
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
2129
5
    return result;
2130
5
  }
2131
775
  if (*target == TPM_ALG_NULL) {
2132
682
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_SYMMETRIC;
2133
682
  }
2134
93
  switch (*target) {
2135
0
#ifdef TPM_ALG_AES
2136
66
    case TPM_ALG_AES:
2137
66
#endif
2138
#ifdef TPM_ALG_SM4
2139
    case TPM_ALG_SM4:
2140
#endif
2141
#ifdef TPM_ALG_CAMELLIA
2142
    case TPM_ALG_CAMELLIA:
2143
#endif
2144
66
      has_valid_value = TRUE;
2145
66
      break;
2146
93
  }
2147
93
  if (!has_valid_value) {
2148
27
    return TPM_RC_SYMMETRIC;
2149
27
  }
2150
66
  return TPM_RC_SUCCESS;
2151
93
}
2152
2153
UINT16 TPMT_SYM_DEF_OBJECT_Marshal(TPMT_SYM_DEF_OBJECT* source,
2154
                                   BYTE** buffer,
2155
457
                                   INT32* size) {
2156
457
  UINT16 total_size = 0;
2157
457
  total_size += TPMI_ALG_SYM_OBJECT_Marshal(&source->algorithm, buffer, size);
2158
457
  total_size += TPMU_SYM_KEY_BITS_Marshal(&source->keyBits, buffer, size,
2159
457
                                          source->algorithm);
2160
457
  total_size +=
2161
457
      TPMU_SYM_MODE_Marshal(&source->mode, buffer, size, source->algorithm);
2162
457
  return total_size;
2163
457
}
2164
2165
TPM_RC TPMT_SYM_DEF_OBJECT_Unmarshal(TPMT_SYM_DEF_OBJECT* target,
2166
                                     BYTE** buffer,
2167
780
                                     INT32* size) {
2168
780
  TPM_RC result;
2169
780
  result =
2170
780
      TPMI_ALG_SYM_OBJECT_Unmarshal(&target->algorithm, buffer, size, TRUE);
2171
780
  if (result != TPM_RC_SUCCESS) {
2172
32
    return result;
2173
32
  }
2174
748
  result = TPMU_SYM_KEY_BITS_Unmarshal(&target->keyBits, buffer, size,
2175
748
                                       target->algorithm);
2176
748
  if (result != TPM_RC_SUCCESS) {
2177
16
    return result;
2178
16
  }
2179
732
  result =
2180
732
      TPMU_SYM_MODE_Unmarshal(&target->mode, buffer, size, target->algorithm);
2181
732
  if (result != TPM_RC_SUCCESS) {
2182
32
    return result;
2183
32
  }
2184
700
  return TPM_RC_SUCCESS;
2185
732
}
2186
2187
UINT16 TPMI_ALG_RSA_SCHEME_Marshal(TPMI_ALG_RSA_SCHEME* source,
2188
                                   BYTE** buffer,
2189
273
                                   INT32* size) {
2190
273
  return uint16_t_Marshal(source, buffer, size);
2191
273
}
2192
2193
TPM_RC TPMI_ALG_RSA_SCHEME_Unmarshal(TPMI_ALG_RSA_SCHEME* target,
2194
                                     BYTE** buffer,
2195
                                     INT32* size,
2196
297
                                     BOOL allow_conditional_value) {
2197
297
  TPM_RC result;
2198
297
  BOOL has_valid_value = FALSE;
2199
297
  result = uint16_t_Unmarshal(target, buffer, size);
2200
297
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
2201
2
    return result;
2202
2
  }
2203
295
  if (*target == TPM_ALG_NULL) {
2204
100
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
2205
100
  }
2206
195
  switch (*target) {
2207
0
#ifdef TPM_ALG_RSAES
2208
68
    case TPM_ALG_RSAES:
2209
68
#endif
2210
68
#ifdef TPM_ALG_OAEP
2211
91
    case TPM_ALG_OAEP:
2212
91
#endif
2213
91
#ifdef TPM_ALG_RSASSA
2214
140
    case TPM_ALG_RSASSA:
2215
140
#endif
2216
140
#ifdef TPM_ALG_RSAPSS
2217
176
    case TPM_ALG_RSAPSS:
2218
176
#endif
2219
176
      has_valid_value = TRUE;
2220
176
      break;
2221
195
  }
2222
195
  if (!has_valid_value) {
2223
19
    return TPM_RC_VALUE;
2224
19
  }
2225
176
  return TPM_RC_SUCCESS;
2226
195
}
2227
2228
UINT16 TPMS_SCHEME_HASH_Marshal(TPMS_SCHEME_HASH* source,
2229
                                BYTE** buffer,
2230
148
                                INT32* size) {
2231
148
  UINT16 total_size = 0;
2232
148
  total_size += TPMI_ALG_HASH_Marshal(&source->hashAlg, buffer, size);
2233
148
  return total_size;
2234
148
}
2235
2236
TPM_RC TPMS_SCHEME_HASH_Unmarshal(TPMS_SCHEME_HASH* target,
2237
                                  BYTE** buffer,
2238
249
                                  INT32* size) {
2239
249
  TPM_RC result;
2240
249
  result = TPMI_ALG_HASH_Unmarshal(&target->hashAlg, buffer, size, FALSE);
2241
249
  if (result != TPM_RC_SUCCESS) {
2242
86
    return result;
2243
86
  }
2244
163
  return TPM_RC_SUCCESS;
2245
249
}
2246
2247
UINT16 TPMS_SIG_SCHEME_RSAPSS_Marshal(TPMS_SIG_SCHEME_RSAPSS* source,
2248
                                      BYTE** buffer,
2249
24
                                      INT32* size) {
2250
24
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2251
24
}
2252
2253
TPM_RC TPMS_SIG_SCHEME_RSAPSS_Unmarshal(TPMS_SIG_SCHEME_RSAPSS* target,
2254
                                        BYTE** buffer,
2255
50
                                        INT32* size) {
2256
50
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2257
50
}
2258
2259
UINT16 TPMS_SIG_SCHEME_SM2_Marshal(TPMS_SIG_SCHEME_SM2* source,
2260
                                   BYTE** buffer,
2261
10
                                   INT32* size) {
2262
10
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2263
10
}
2264
2265
TPM_RC TPMS_SIG_SCHEME_SM2_Unmarshal(TPMS_SIG_SCHEME_SM2* target,
2266
                                     BYTE** buffer,
2267
24
                                     INT32* size) {
2268
24
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2269
24
}
2270
2271
UINT16 TPMS_SIG_SCHEME_ECSCHNORR_Marshal(TPMS_SIG_SCHEME_ECSCHNORR* source,
2272
                                         BYTE** buffer,
2273
7
                                         INT32* size) {
2274
7
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2275
7
}
2276
2277
TPM_RC TPMS_SIG_SCHEME_ECSCHNORR_Unmarshal(TPMS_SIG_SCHEME_ECSCHNORR* target,
2278
                                           BYTE** buffer,
2279
30
                                           INT32* size) {
2280
30
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2281
30
}
2282
2283
UINT16 TPMS_SCHEME_ECDAA_Marshal(TPMS_SCHEME_ECDAA* source,
2284
                                 BYTE** buffer,
2285
4
                                 INT32* size) {
2286
4
  UINT16 total_size = 0;
2287
4
  total_size += TPMI_ALG_HASH_Marshal(&source->hashAlg, buffer, size);
2288
4
  total_size += UINT16_Marshal(&source->count, buffer, size);
2289
4
  return total_size;
2290
4
}
2291
2292
TPM_RC TPMS_SCHEME_ECDAA_Unmarshal(TPMS_SCHEME_ECDAA* target,
2293
                                   BYTE** buffer,
2294
32
                                   INT32* size) {
2295
32
  TPM_RC result;
2296
32
  result = TPMI_ALG_HASH_Unmarshal(&target->hashAlg, buffer, size, FALSE);
2297
32
  if (result != TPM_RC_SUCCESS) {
2298
10
    return result;
2299
10
  }
2300
22
  result = UINT16_Unmarshal(&target->count, buffer, size);
2301
22
  if (result != TPM_RC_SUCCESS) {
2302
9
    return result;
2303
9
  }
2304
13
  return TPM_RC_SUCCESS;
2305
22
}
2306
2307
UINT16 TPMS_SIG_SCHEME_ECDAA_Marshal(TPMS_SIG_SCHEME_ECDAA* source,
2308
                                     BYTE** buffer,
2309
4
                                     INT32* size) {
2310
4
  return TPMS_SCHEME_ECDAA_Marshal(source, buffer, size);
2311
4
}
2312
2313
TPM_RC TPMS_SIG_SCHEME_ECDAA_Unmarshal(TPMS_SIG_SCHEME_ECDAA* target,
2314
                                       BYTE** buffer,
2315
32
                                       INT32* size) {
2316
32
  return TPMS_SCHEME_ECDAA_Unmarshal(target, buffer, size);
2317
32
}
2318
2319
UINT16 TPMS_KEY_SCHEME_ECDH_Marshal(TPMS_KEY_SCHEME_ECDH* source,
2320
                                    BYTE** buffer,
2321
7
                                    INT32* size) {
2322
7
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2323
7
}
2324
2325
TPM_RC TPMS_KEY_SCHEME_ECDH_Unmarshal(TPMS_KEY_SCHEME_ECDH* target,
2326
                                      BYTE** buffer,
2327
26
                                      INT32* size) {
2328
26
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2329
26
}
2330
2331
UINT16 TPMS_KEY_SCHEME_ECMQV_Marshal(TPMS_KEY_SCHEME_ECMQV* source,
2332
                                     BYTE** buffer,
2333
0
                                     INT32* size) {
2334
0
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2335
0
}
2336
2337
TPM_RC TPMS_KEY_SCHEME_ECMQV_Unmarshal(TPMS_KEY_SCHEME_ECMQV* target,
2338
                                       BYTE** buffer,
2339
0
                                       INT32* size) {
2340
0
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2341
0
}
2342
2343
UINT16 TPMS_SIG_SCHEME_RSASSA_Marshal(TPMS_SIG_SCHEME_RSASSA* source,
2344
                                      BYTE** buffer,
2345
35
                                      INT32* size) {
2346
35
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2347
35
}
2348
2349
TPM_RC TPMS_SIG_SCHEME_RSASSA_Unmarshal(TPMS_SIG_SCHEME_RSASSA* target,
2350
                                        BYTE** buffer,
2351
61
                                        INT32* size) {
2352
61
#if defined(SUPPORT_PADDING_ONLY_RSASSA) && SUPPORT_PADDING_ONLY_RSASSA == YES
2353
61
  return TPMI_ALG_HASH_Unmarshal(&target->hashAlg, buffer, size, TRUE);
2354
#else
2355
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2356
#endif
2357
61
}
2358
2359
UINT16 TPMS_ENC_SCHEME_OAEP_Marshal(TPMS_ENC_SCHEME_OAEP* source,
2360
                                    BYTE** buffer,
2361
15
                                    INT32* size) {
2362
15
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2363
15
}
2364
2365
TPM_RC TPMS_ENC_SCHEME_OAEP_Unmarshal(TPMS_ENC_SCHEME_OAEP* target,
2366
                                      BYTE** buffer,
2367
23
                                      INT32* size) {
2368
23
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2369
23
}
2370
2371
103
UINT16 TPMS_EMPTY_Marshal(TPMS_EMPTY* source, BYTE** buffer, INT32* size) {
2372
103
  UINT16 total_size = 0;
2373
103
  return total_size;
2374
103
}
2375
2376
68
TPM_RC TPMS_EMPTY_Unmarshal(TPMS_EMPTY* target, BYTE** buffer, INT32* size) {
2377
68
  TPM_RC result;
2378
68
  (void)result;
2379
2380
68
  return TPM_RC_SUCCESS;
2381
68
}
2382
2383
UINT16 TPMS_ENC_SCHEME_RSAES_Marshal(TPMS_ENC_SCHEME_RSAES* source,
2384
                                     BYTE** buffer,
2385
103
                                     INT32* size) {
2386
103
  return TPMS_EMPTY_Marshal(source, buffer, size);
2387
103
}
2388
2389
TPM_RC TPMS_ENC_SCHEME_RSAES_Unmarshal(TPMS_ENC_SCHEME_RSAES* target,
2390
                                       BYTE** buffer,
2391
68
                                       INT32* size) {
2392
68
  return TPMS_EMPTY_Unmarshal(target, buffer, size);
2393
68
}
2394
2395
UINT16 TPMS_SIG_SCHEME_ECDSA_Marshal(TPMS_SIG_SCHEME_ECDSA* source,
2396
                                     BYTE** buffer,
2397
6
                                     INT32* size) {
2398
6
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2399
6
}
2400
2401
TPM_RC TPMS_SIG_SCHEME_ECDSA_Unmarshal(TPMS_SIG_SCHEME_ECDSA* target,
2402
                                       BYTE** buffer,
2403
38
                                       INT32* size) {
2404
38
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2405
38
}
2406
2407
UINT16 TPMU_ASYM_SCHEME_Marshal(TPMU_ASYM_SCHEME* source,
2408
                                BYTE** buffer,
2409
                                INT32* size,
2410
357
                                UINT32 selector) {
2411
357
  switch (selector) {
2412
0
#ifdef TPM_ALG_ECDH
2413
7
    case TPM_ALG_ECDH:
2414
7
      return TPMS_KEY_SCHEME_ECDH_Marshal((TPMS_KEY_SCHEME_ECDH*)&source->ecdh,
2415
7
                                          buffer, size);
2416
0
#endif
2417
#ifdef TPM_ALG_ECMQV
2418
    case TPM_ALG_ECMQV:
2419
      return TPMS_KEY_SCHEME_ECMQV_Marshal(
2420
          (TPMS_KEY_SCHEME_ECMQV*)&source->ecmqv, buffer, size);
2421
#endif
2422
0
#ifdef TPM_ALG_RSASSA
2423
35
    case TPM_ALG_RSASSA:
2424
35
      return TPMS_SIG_SCHEME_RSASSA_Marshal(
2425
35
          (TPMS_SIG_SCHEME_RSASSA*)&source->rsassa, buffer, size);
2426
0
#endif
2427
0
#ifdef TPM_ALG_RSAPSS
2428
24
    case TPM_ALG_RSAPSS:
2429
24
      return TPMS_SIG_SCHEME_RSAPSS_Marshal(
2430
24
          (TPMS_SIG_SCHEME_RSAPSS*)&source->rsapss, buffer, size);
2431
0
#endif
2432
0
#ifdef TPM_ALG_ECDSA
2433
6
    case TPM_ALG_ECDSA:
2434
6
      return TPMS_SIG_SCHEME_ECDSA_Marshal(
2435
6
          (TPMS_SIG_SCHEME_ECDSA*)&source->ecdsa, buffer, size);
2436
0
#endif
2437
0
#ifdef TPM_ALG_ECDAA
2438
4
    case TPM_ALG_ECDAA:
2439
4
      return TPMS_SIG_SCHEME_ECDAA_Marshal(
2440
4
          (TPMS_SIG_SCHEME_ECDAA*)&source->ecdaa, buffer, size);
2441
0
#endif
2442
0
#ifdef TPM_ALG_SM2
2443
10
    case TPM_ALG_SM2:
2444
10
      return TPMS_SIG_SCHEME_SM2_Marshal((TPMS_SIG_SCHEME_SM2*)&source->sm2,
2445
10
                                         buffer, size);
2446
0
#endif
2447
0
#ifdef TPM_ALG_ECSCHNORR
2448
7
    case TPM_ALG_ECSCHNORR:
2449
7
      return TPMS_SIG_SCHEME_ECSCHNORR_Marshal(
2450
7
          (TPMS_SIG_SCHEME_ECSCHNORR*)&source->ecschnorr, buffer, size);
2451
0
#endif
2452
0
#ifdef TPM_ALG_RSAES
2453
103
    case TPM_ALG_RSAES:
2454
103
      return TPMS_ENC_SCHEME_RSAES_Marshal(
2455
103
          (TPMS_ENC_SCHEME_RSAES*)&source->rsaes, buffer, size);
2456
0
#endif
2457
0
#ifdef TPM_ALG_OAEP
2458
15
    case TPM_ALG_OAEP:
2459
15
      return TPMS_ENC_SCHEME_OAEP_Marshal((TPMS_ENC_SCHEME_OAEP*)&source->oaep,
2460
15
                                          buffer, size);
2461
0
#endif
2462
0
#ifdef TPM_ALG_NULL
2463
146
    case TPM_ALG_NULL:
2464
146
      return 0;
2465
357
#endif
2466
357
  }
2467
0
  return 0;
2468
357
}
2469
2470
TPM_RC TPMU_ASYM_SCHEME_Unmarshal(TPMU_ASYM_SCHEME* target,
2471
                                  BYTE** buffer,
2472
                                  INT32* size,
2473
534
                                  UINT32 selector) {
2474
534
  switch (selector) {
2475
0
#ifdef TPM_ALG_ECDH
2476
26
    case TPM_ALG_ECDH:
2477
26
      return TPMS_KEY_SCHEME_ECDH_Unmarshal(
2478
26
          (TPMS_KEY_SCHEME_ECDH*)&target->ecdh, buffer, size);
2479
0
#endif
2480
#ifdef TPM_ALG_ECMQV
2481
    case TPM_ALG_ECMQV:
2482
      return TPMS_KEY_SCHEME_ECMQV_Unmarshal(
2483
          (TPMS_KEY_SCHEME_ECMQV*)&target->ecmqv, buffer, size);
2484
#endif
2485
0
#ifdef TPM_ALG_RSASSA
2486
49
    case TPM_ALG_RSASSA:
2487
49
      return TPMS_SIG_SCHEME_RSASSA_Unmarshal(
2488
49
          (TPMS_SIG_SCHEME_RSASSA*)&target->rsassa, buffer, size);
2489
0
#endif
2490
0
#ifdef TPM_ALG_RSAPSS
2491
36
    case TPM_ALG_RSAPSS:
2492
36
      return TPMS_SIG_SCHEME_RSAPSS_Unmarshal(
2493
36
          (TPMS_SIG_SCHEME_RSAPSS*)&target->rsapss, buffer, size);
2494
0
#endif
2495
0
#ifdef TPM_ALG_ECDSA
2496
25
    case TPM_ALG_ECDSA:
2497
25
      return TPMS_SIG_SCHEME_ECDSA_Unmarshal(
2498
25
          (TPMS_SIG_SCHEME_ECDSA*)&target->ecdsa, buffer, size);
2499
0
#endif
2500
0
#ifdef TPM_ALG_ECDAA
2501
24
    case TPM_ALG_ECDAA:
2502
24
      return TPMS_SIG_SCHEME_ECDAA_Unmarshal(
2503
24
          (TPMS_SIG_SCHEME_ECDAA*)&target->ecdaa, buffer, size);
2504
0
#endif
2505
0
#ifdef TPM_ALG_SM2
2506
17
    case TPM_ALG_SM2:
2507
17
      return TPMS_SIG_SCHEME_SM2_Unmarshal((TPMS_SIG_SCHEME_SM2*)&target->sm2,
2508
17
                                           buffer, size);
2509
0
#endif
2510
0
#ifdef TPM_ALG_ECSCHNORR
2511
23
    case TPM_ALG_ECSCHNORR:
2512
23
      return TPMS_SIG_SCHEME_ECSCHNORR_Unmarshal(
2513
23
          (TPMS_SIG_SCHEME_ECSCHNORR*)&target->ecschnorr, buffer, size);
2514
0
#endif
2515
0
#ifdef TPM_ALG_RSAES
2516
68
    case TPM_ALG_RSAES:
2517
68
      return TPMS_ENC_SCHEME_RSAES_Unmarshal(
2518
68
          (TPMS_ENC_SCHEME_RSAES*)&target->rsaes, buffer, size);
2519
0
#endif
2520
0
#ifdef TPM_ALG_OAEP
2521
23
    case TPM_ALG_OAEP:
2522
23
      return TPMS_ENC_SCHEME_OAEP_Unmarshal(
2523
23
          (TPMS_ENC_SCHEME_OAEP*)&target->oaep, buffer, size);
2524
0
#endif
2525
0
#ifdef TPM_ALG_NULL
2526
243
    case TPM_ALG_NULL:
2527
243
      return TPM_RC_SUCCESS;
2528
534
#endif
2529
534
  }
2530
0
  return TPM_RC_SELECTOR;
2531
534
}
2532
2533
UINT16 TPMT_RSA_SCHEME_Marshal(TPMT_RSA_SCHEME* source,
2534
                               BYTE** buffer,
2535
273
                               INT32* size) {
2536
273
  UINT16 total_size = 0;
2537
273
  total_size += TPMI_ALG_RSA_SCHEME_Marshal(&source->scheme, buffer, size);
2538
273
  total_size +=
2539
273
      TPMU_ASYM_SCHEME_Marshal(&source->details, buffer, size, source->scheme);
2540
273
  return total_size;
2541
273
}
2542
2543
TPM_RC TPMT_RSA_SCHEME_Unmarshal(TPMT_RSA_SCHEME* target,
2544
                                 BYTE** buffer,
2545
297
                                 INT32* size) {
2546
297
  TPM_RC result;
2547
297
  result = TPMI_ALG_RSA_SCHEME_Unmarshal(&target->scheme, buffer, size, TRUE);
2548
297
  if (result != TPM_RC_SUCCESS) {
2549
21
    return result;
2550
21
  }
2551
276
  result = TPMU_ASYM_SCHEME_Unmarshal(&target->details, buffer, size,
2552
276
                                      target->scheme);
2553
276
  if (result != TPM_RC_SUCCESS) {
2554
25
    return result;
2555
25
  }
2556
251
  return TPM_RC_SUCCESS;
2557
276
}
2558
2559
UINT16 TPMI_RSA_KEY_BITS_Marshal(TPMI_RSA_KEY_BITS* source,
2560
                                 BYTE** buffer,
2561
273
                                 INT32* size) {
2562
273
  return uint16_t_Marshal(source, buffer, size);
2563
273
}
2564
2565
TPM_RC TPMI_RSA_KEY_BITS_Unmarshal(TPMI_RSA_KEY_BITS* target,
2566
                                   BYTE** buffer,
2567
251
                                   INT32* size) {
2568
251
  TPM_RC result;
2569
251
  uint16_t supported_values[] = RSA_KEY_SIZES_BITS;
2570
251
  size_t length = sizeof(supported_values) / sizeof(supported_values[0]);
2571
251
  size_t i;
2572
251
  BOOL is_supported_value = FALSE;
2573
251
  result = uint16_t_Unmarshal(target, buffer, size);
2574
251
  if (result != TPM_RC_SUCCESS) {
2575
16
    return result;
2576
16
  }
2577
398
  for (i = 0; i < length; ++i) {
2578
369
    if (*target == supported_values[i]) {
2579
206
      is_supported_value = TRUE;
2580
206
      break;
2581
206
    }
2582
369
  }
2583
235
  if (!is_supported_value) {
2584
29
    return TPM_RC_VALUE;
2585
29
  }
2586
206
  return TPM_RC_SUCCESS;
2587
235
}
2588
2589
UINT16 TPMS_RSA_PARMS_Marshal(TPMS_RSA_PARMS* source,
2590
                              BYTE** buffer,
2591
273
                              INT32* size) {
2592
273
  UINT16 total_size = 0;
2593
273
  total_size += TPMT_SYM_DEF_OBJECT_Marshal(&source->symmetric, buffer, size);
2594
273
  total_size += TPMT_RSA_SCHEME_Marshal(&source->scheme, buffer, size);
2595
273
  total_size += TPMI_RSA_KEY_BITS_Marshal(&source->keyBits, buffer, size);
2596
273
  total_size += UINT32_Marshal(&source->exponent, buffer, size);
2597
273
  return total_size;
2598
273
}
2599
2600
TPM_RC TPMS_RSA_PARMS_Unmarshal(TPMS_RSA_PARMS* target,
2601
                                BYTE** buffer,
2602
331
                                INT32* size) {
2603
331
  TPM_RC result;
2604
331
  result = TPMT_SYM_DEF_OBJECT_Unmarshal(&target->symmetric, buffer, size);
2605
331
  if (result != TPM_RC_SUCCESS) {
2606
34
    return result;
2607
34
  }
2608
297
  result = TPMT_RSA_SCHEME_Unmarshal(&target->scheme, buffer, size);
2609
297
  if (result != TPM_RC_SUCCESS) {
2610
46
    return result;
2611
46
  }
2612
251
  result = TPMI_RSA_KEY_BITS_Unmarshal(&target->keyBits, buffer, size);
2613
251
  if (result != TPM_RC_SUCCESS) {
2614
45
    return result;
2615
45
  }
2616
206
  result = UINT32_Unmarshal(&target->exponent, buffer, size);
2617
206
  if (result != TPM_RC_SUCCESS) {
2618
2
    return result;
2619
2
  }
2620
204
  return TPM_RC_SUCCESS;
2621
206
}
2622
2623
UINT16 TPMS_SYMCIPHER_PARMS_Marshal(TPMS_SYMCIPHER_PARMS* source,
2624
                                    BYTE** buffer,
2625
103
                                    INT32* size) {
2626
103
  UINT16 total_size = 0;
2627
103
  total_size += TPMT_SYM_DEF_OBJECT_Marshal(&source->sym, buffer, size);
2628
103
  return total_size;
2629
103
}
2630
2631
TPM_RC TPMS_SYMCIPHER_PARMS_Unmarshal(TPMS_SYMCIPHER_PARMS* target,
2632
                                      BYTE** buffer,
2633
141
                                      INT32* size) {
2634
141
  TPM_RC result;
2635
141
  result = TPMT_SYM_DEF_OBJECT_Unmarshal(&target->sym, buffer, size);
2636
141
  if (result != TPM_RC_SUCCESS) {
2637
23
    return result;
2638
23
  }
2639
118
  return TPM_RC_SUCCESS;
2640
141
}
2641
2642
UINT16 TPMI_ALG_ASYM_SCHEME_Marshal(TPMI_ALG_ASYM_SCHEME* source,
2643
                                    BYTE** buffer,
2644
0
                                    INT32* size) {
2645
0
  return uint16_t_Marshal(source, buffer, size);
2646
0
}
2647
2648
TPM_RC TPMI_ALG_ASYM_SCHEME_Unmarshal(TPMI_ALG_ASYM_SCHEME* target,
2649
                                      BYTE** buffer,
2650
                                      INT32* size,
2651
0
                                      BOOL allow_conditional_value) {
2652
0
  TPM_RC result;
2653
0
  BOOL has_valid_value = FALSE;
2654
0
  result = uint16_t_Unmarshal(target, buffer, size);
2655
0
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
2656
0
    return result;
2657
0
  }
2658
0
  if (*target == TPM_ALG_NULL) {
2659
0
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
2660
0
  }
2661
0
  switch (*target) {
2662
0
#ifdef TPM_ALG_ECDH
2663
0
    case TPM_ALG_ECDH:
2664
0
#endif
2665
#ifdef TPM_ALG_ECMQV
2666
    case TPM_ALG_ECMQV:
2667
#endif
2668
0
#ifdef TPM_ALG_RSASSA
2669
0
    case TPM_ALG_RSASSA:
2670
0
#endif
2671
0
#ifdef TPM_ALG_RSAPSS
2672
0
    case TPM_ALG_RSAPSS:
2673
0
#endif
2674
0
#ifdef TPM_ALG_ECDSA
2675
0
    case TPM_ALG_ECDSA:
2676
0
#endif
2677
0
#ifdef TPM_ALG_ECDAA
2678
0
    case TPM_ALG_ECDAA:
2679
0
#endif
2680
0
#ifdef TPM_ALG_SM2
2681
0
    case TPM_ALG_SM2:
2682
0
#endif
2683
0
#ifdef TPM_ALG_ECSCHNORR
2684
0
    case TPM_ALG_ECSCHNORR:
2685
0
#endif
2686
0
#ifdef TPM_ALG_RSAES
2687
0
    case TPM_ALG_RSAES:
2688
0
#endif
2689
0
#ifdef TPM_ALG_OAEP
2690
0
    case TPM_ALG_OAEP:
2691
0
#endif
2692
0
      has_valid_value = TRUE;
2693
0
      break;
2694
0
  }
2695
0
  if (!has_valid_value) {
2696
0
    return TPM_RC_VALUE;
2697
0
  }
2698
0
  return TPM_RC_SUCCESS;
2699
0
}
2700
2701
UINT16 TPMT_ASYM_SCHEME_Marshal(TPMT_ASYM_SCHEME* source,
2702
                                BYTE** buffer,
2703
0
                                INT32* size) {
2704
0
  UINT16 total_size = 0;
2705
0
  total_size += TPMI_ALG_ASYM_SCHEME_Marshal(&source->scheme, buffer, size);
2706
0
  total_size +=
2707
0
      TPMU_ASYM_SCHEME_Marshal(&source->details, buffer, size, source->scheme);
2708
0
  return total_size;
2709
0
}
2710
2711
TPM_RC TPMT_ASYM_SCHEME_Unmarshal(TPMT_ASYM_SCHEME* target,
2712
                                  BYTE** buffer,
2713
0
                                  INT32* size) {
2714
0
  TPM_RC result;
2715
0
  result = TPMI_ALG_ASYM_SCHEME_Unmarshal(&target->scheme, buffer, size, TRUE);
2716
0
  if (result != TPM_RC_SUCCESS) {
2717
0
    return result;
2718
0
  }
2719
0
  result = TPMU_ASYM_SCHEME_Unmarshal(&target->details, buffer, size,
2720
0
                                      target->scheme);
2721
0
  if (result != TPM_RC_SUCCESS) {
2722
0
    return result;
2723
0
  }
2724
0
  return TPM_RC_SUCCESS;
2725
0
}
2726
2727
UINT16 TPMS_ASYM_PARMS_Marshal(TPMS_ASYM_PARMS* source,
2728
                               BYTE** buffer,
2729
0
                               INT32* size) {
2730
0
  UINT16 total_size = 0;
2731
0
  total_size += TPMT_SYM_DEF_OBJECT_Marshal(&source->symmetric, buffer, size);
2732
0
  total_size += TPMT_ASYM_SCHEME_Marshal(&source->scheme, buffer, size);
2733
0
  return total_size;
2734
0
}
2735
2736
TPM_RC TPMS_ASYM_PARMS_Unmarshal(TPMS_ASYM_PARMS* target,
2737
                                 BYTE** buffer,
2738
0
                                 INT32* size) {
2739
0
  TPM_RC result;
2740
0
  result = TPMT_SYM_DEF_OBJECT_Unmarshal(&target->symmetric, buffer, size);
2741
0
  if (result != TPM_RC_SUCCESS) {
2742
0
    return result;
2743
0
  }
2744
0
  result = TPMT_ASYM_SCHEME_Unmarshal(&target->scheme, buffer, size);
2745
0
  if (result != TPM_RC_SUCCESS) {
2746
0
    return result;
2747
0
  }
2748
0
  return TPM_RC_SUCCESS;
2749
0
}
2750
2751
91
UINT16 TPMI_ALG_KDF_Marshal(TPMI_ALG_KDF* source, BYTE** buffer, INT32* size) {
2752
91
  return uint16_t_Marshal(source, buffer, size);
2753
91
}
2754
2755
TPM_RC TPMI_ALG_KDF_Unmarshal(TPMI_ALG_KDF* target,
2756
                              BYTE** buffer,
2757
                              INT32* size,
2758
196
                              BOOL allow_conditional_value) {
2759
196
  TPM_RC result;
2760
196
  BOOL has_valid_value = FALSE;
2761
196
  result = uint16_t_Unmarshal(target, buffer, size);
2762
196
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
2763
8
    return result;
2764
8
  }
2765
188
  if (*target == TPM_ALG_NULL) {
2766
143
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_KDF;
2767
143
  }
2768
45
  switch (*target) {
2769
0
#ifdef TPM_ALG_MGF1
2770
11
    case TPM_ALG_MGF1:
2771
11
#endif
2772
11
#ifdef TPM_ALG_KDF1_SP800_56A
2773
25
    case TPM_ALG_KDF1_SP800_56A:
2774
25
#endif
2775
#ifdef TPM_ALG_KDF2
2776
    case TPM_ALG_KDF2:
2777
#endif
2778
25
#ifdef TPM_ALG_KDF1_SP800_108
2779
37
    case TPM_ALG_KDF1_SP800_108:
2780
37
#endif
2781
37
      has_valid_value = TRUE;
2782
37
      break;
2783
45
  }
2784
45
  if (!has_valid_value) {
2785
8
    return TPM_RC_KDF;
2786
8
  }
2787
37
  return TPM_RC_SUCCESS;
2788
45
}
2789
2790
UINT16 TPMS_SCHEME_KDF1_SP800_108_Marshal(TPMS_SCHEME_KDF1_SP800_108* source,
2791
                                          BYTE** buffer,
2792
0
                                          INT32* size) {
2793
0
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2794
0
}
2795
2796
TPM_RC TPMS_SCHEME_KDF1_SP800_108_Unmarshal(TPMS_SCHEME_KDF1_SP800_108* target,
2797
                                            BYTE** buffer,
2798
8
                                            INT32* size) {
2799
8
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2800
8
}
2801
2802
UINT16 TPMS_SCHEME_KDF2_Marshal(TPMS_SCHEME_KDF2* source,
2803
                                BYTE** buffer,
2804
0
                                INT32* size) {
2805
0
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2806
0
}
2807
2808
TPM_RC TPMS_SCHEME_KDF2_Unmarshal(TPMS_SCHEME_KDF2* target,
2809
                                  BYTE** buffer,
2810
0
                                  INT32* size) {
2811
0
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2812
0
}
2813
2814
UINT16 TPMS_SCHEME_KDF1_SP800_56A_Marshal(TPMS_SCHEME_KDF1_SP800_56A* source,
2815
                                          BYTE** buffer,
2816
2
                                          INT32* size) {
2817
2
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2818
2
}
2819
2820
TPM_RC TPMS_SCHEME_KDF1_SP800_56A_Unmarshal(TPMS_SCHEME_KDF1_SP800_56A* target,
2821
                                            BYTE** buffer,
2822
7
                                            INT32* size) {
2823
7
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2824
7
}
2825
2826
UINT16 TPMS_SCHEME_MGF1_Marshal(TPMS_SCHEME_MGF1* source,
2827
                                BYTE** buffer,
2828
0
                                INT32* size) {
2829
0
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2830
0
}
2831
2832
TPM_RC TPMS_SCHEME_MGF1_Unmarshal(TPMS_SCHEME_MGF1* target,
2833
                                  BYTE** buffer,
2834
8
                                  INT32* size) {
2835
8
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2836
8
}
2837
2838
UINT16 TPMU_KDF_SCHEME_Marshal(TPMU_KDF_SCHEME* source,
2839
                               BYTE** buffer,
2840
                               INT32* size,
2841
84
                               UINT32 selector) {
2842
84
  switch (selector) {
2843
0
#ifdef TPM_ALG_MGF1
2844
0
    case TPM_ALG_MGF1:
2845
0
      return TPMS_SCHEME_MGF1_Marshal((TPMS_SCHEME_MGF1*)&source->mgf1, buffer,
2846
0
                                      size);
2847
0
#endif
2848
0
#ifdef TPM_ALG_KDF1_SP800_56A
2849
2
    case TPM_ALG_KDF1_SP800_56A:
2850
2
      return TPMS_SCHEME_KDF1_SP800_56A_Marshal(
2851
2
          (TPMS_SCHEME_KDF1_SP800_56A*)&source->kdf1_sp800_56a, buffer, size);
2852
0
#endif
2853
#ifdef TPM_ALG_KDF2
2854
    case TPM_ALG_KDF2:
2855
      return TPMS_SCHEME_KDF2_Marshal((TPMS_SCHEME_KDF2*)&source->kdf2, buffer,
2856
                                      size);
2857
#endif
2858
0
#ifdef TPM_ALG_KDF1_SP800_108
2859
0
    case TPM_ALG_KDF1_SP800_108:
2860
0
      return TPMS_SCHEME_KDF1_SP800_108_Marshal(
2861
0
          (TPMS_SCHEME_KDF1_SP800_108*)&source->kdf1_sp800_108, buffer, size);
2862
0
#endif
2863
0
#ifdef TPM_ALG_NULL
2864
82
    case TPM_ALG_NULL:
2865
82
      return 0;
2866
84
#endif
2867
84
  }
2868
0
  return 0;
2869
84
}
2870
2871
TPM_RC TPMU_KDF_SCHEME_Unmarshal(TPMU_KDF_SCHEME* target,
2872
                                 BYTE** buffer,
2873
                                 INT32* size,
2874
163
                                 UINT32 selector) {
2875
163
  switch (selector) {
2876
0
#ifdef TPM_ALG_MGF1
2877
8
    case TPM_ALG_MGF1:
2878
8
      return TPMS_SCHEME_MGF1_Unmarshal((TPMS_SCHEME_MGF1*)&target->mgf1,
2879
8
                                        buffer, size);
2880
0
#endif
2881
0
#ifdef TPM_ALG_KDF1_SP800_56A
2882
7
    case TPM_ALG_KDF1_SP800_56A:
2883
7
      return TPMS_SCHEME_KDF1_SP800_56A_Unmarshal(
2884
7
          (TPMS_SCHEME_KDF1_SP800_56A*)&target->kdf1_sp800_56a, buffer, size);
2885
0
#endif
2886
#ifdef TPM_ALG_KDF2
2887
    case TPM_ALG_KDF2:
2888
      return TPMS_SCHEME_KDF2_Unmarshal((TPMS_SCHEME_KDF2*)&target->kdf2,
2889
                                        buffer, size);
2890
#endif
2891
0
#ifdef TPM_ALG_KDF1_SP800_108
2892
8
    case TPM_ALG_KDF1_SP800_108:
2893
8
      return TPMS_SCHEME_KDF1_SP800_108_Unmarshal(
2894
8
          (TPMS_SCHEME_KDF1_SP800_108*)&target->kdf1_sp800_108, buffer, size);
2895
0
#endif
2896
0
#ifdef TPM_ALG_NULL
2897
140
    case TPM_ALG_NULL:
2898
140
      return TPM_RC_SUCCESS;
2899
163
#endif
2900
163
  }
2901
0
  return TPM_RC_SELECTOR;
2902
163
}
2903
2904
UINT16 TPMT_KDF_SCHEME_Marshal(TPMT_KDF_SCHEME* source,
2905
                               BYTE** buffer,
2906
84
                               INT32* size) {
2907
84
  UINT16 total_size = 0;
2908
84
  total_size += TPMI_ALG_KDF_Marshal(&source->scheme, buffer, size);
2909
84
  total_size +=
2910
84
      TPMU_KDF_SCHEME_Marshal(&source->details, buffer, size, source->scheme);
2911
84
  return total_size;
2912
84
}
2913
2914
TPM_RC TPMT_KDF_SCHEME_Unmarshal(TPMT_KDF_SCHEME* target,
2915
                                 BYTE** buffer,
2916
170
                                 INT32* size) {
2917
170
  TPM_RC result;
2918
170
  result = TPMI_ALG_KDF_Unmarshal(&target->scheme, buffer, size, TRUE);
2919
170
  if (result != TPM_RC_SUCCESS) {
2920
7
    return result;
2921
7
  }
2922
163
  result =
2923
163
      TPMU_KDF_SCHEME_Unmarshal(&target->details, buffer, size, target->scheme);
2924
163
  if (result != TPM_RC_SUCCESS) {
2925
9
    return result;
2926
9
  }
2927
154
  return TPM_RC_SUCCESS;
2928
163
}
2929
2930
UINT16 TPMI_ALG_ECC_SCHEME_Marshal(TPMI_ALG_ECC_SCHEME* source,
2931
                                   BYTE** buffer,
2932
84
                                   INT32* size) {
2933
84
  return uint16_t_Marshal(source, buffer, size);
2934
84
}
2935
2936
TPM_RC TPMI_ALG_ECC_SCHEME_Unmarshal(TPMI_ALG_ECC_SCHEME* target,
2937
                                     BYTE** buffer,
2938
                                     INT32* size,
2939
285
                                     BOOL allow_conditional_value) {
2940
285
  TPM_RC result;
2941
285
  BOOL has_valid_value = FALSE;
2942
285
  result = uint16_t_Unmarshal(target, buffer, size);
2943
285
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
2944
2
    return result;
2945
2
  }
2946
283
  if (*target == TPM_ALG_NULL) {
2947
143
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_SCHEME;
2948
143
  }
2949
140
  switch (*target) {
2950
0
#ifdef TPM_ALG_ECDSA
2951
25
    case TPM_ALG_ECDSA:
2952
25
#endif
2953
25
#ifdef TPM_ALG_ECDAA
2954
49
    case TPM_ALG_ECDAA:
2955
49
#endif
2956
49
#ifdef TPM_ALG_SM2
2957
66
    case TPM_ALG_SM2:
2958
66
#endif
2959
66
#ifdef TPM_ALG_ECSCHNORR
2960
89
    case TPM_ALG_ECSCHNORR:
2961
89
#endif
2962
89
#ifdef TPM_ALG_ECDH
2963
115
    case TPM_ALG_ECDH:
2964
115
#endif
2965
#ifdef TPM_ALG_ECMQV
2966
    case TPM_ALG_ECMQV:
2967
#endif
2968
115
      has_valid_value = TRUE;
2969
115
      break;
2970
140
  }
2971
140
  if (!has_valid_value) {
2972
25
    return TPM_RC_SCHEME;
2973
25
  }
2974
115
  return TPM_RC_SUCCESS;
2975
140
}
2976
2977
UINT16 TPMT_ECC_SCHEME_Marshal(TPMT_ECC_SCHEME* source,
2978
                               BYTE** buffer,
2979
84
                               INT32* size) {
2980
84
  UINT16 total_size = 0;
2981
84
  total_size += TPMI_ALG_ECC_SCHEME_Marshal(&source->scheme, buffer, size);
2982
84
  total_size +=
2983
84
      TPMU_ASYM_SCHEME_Marshal(&source->details, buffer, size, source->scheme);
2984
84
  return total_size;
2985
84
}
2986
2987
TPM_RC TPMT_ECC_SCHEME_Unmarshal(TPMT_ECC_SCHEME* target,
2988
                                 BYTE** buffer,
2989
285
                                 INT32* size) {
2990
285
  TPM_RC result;
2991
285
  result = TPMI_ALG_ECC_SCHEME_Unmarshal(&target->scheme, buffer, size, TRUE);
2992
285
  if (result != TPM_RC_SUCCESS) {
2993
27
    return result;
2994
27
  }
2995
258
  result = TPMU_ASYM_SCHEME_Unmarshal(&target->details, buffer, size,
2996
258
                                      target->scheme);
2997
258
  if (result != TPM_RC_SUCCESS) {
2998
40
    return result;
2999
40
  }
3000
218
  return TPM_RC_SUCCESS;
3001
258
}
3002
3003
UINT16 TPMI_ECC_CURVE_Marshal(TPMI_ECC_CURVE* source,
3004
                              BYTE** buffer,
3005
81
                              INT32* size) {
3006
81
  return uint16_t_Marshal(source, buffer, size);
3007
81
}
3008
3009
TPM_RC TPMI_ECC_CURVE_Unmarshal(TPMI_ECC_CURVE* target,
3010
                                BYTE** buffer,
3011
242
                                INT32* size) {
3012
242
  TPM_RC result;
3013
242
  uint16_t supported_values[] = ECC_CURVES;
3014
242
  size_t length = sizeof(supported_values) / sizeof(supported_values[0]);
3015
242
  size_t i;
3016
242
  BOOL is_supported_value = FALSE;
3017
242
  result = uint16_t_Unmarshal(target, buffer, size);
3018
242
  if (result != TPM_RC_SUCCESS) {
3019
20
    return result;
3020
20
  }
3021
553
  for (i = 0; i < length; ++i) {
3022
507
    if (*target == supported_values[i]) {
3023
176
      is_supported_value = TRUE;
3024
176
      break;
3025
176
    }
3026
507
  }
3027
222
  if (!is_supported_value) {
3028
46
    return TPM_RC_CURVE;
3029
46
  }
3030
176
  return TPM_RC_SUCCESS;
3031
222
}
3032
3033
UINT16 TPMS_ECC_PARMS_Marshal(TPMS_ECC_PARMS* source,
3034
                              BYTE** buffer,
3035
81
                              INT32* size) {
3036
81
  UINT16 total_size = 0;
3037
81
  total_size += TPMT_SYM_DEF_OBJECT_Marshal(&source->symmetric, buffer, size);
3038
81
  total_size += TPMT_ECC_SCHEME_Marshal(&source->scheme, buffer, size);
3039
81
  total_size += TPMI_ECC_CURVE_Marshal(&source->curveID, buffer, size);
3040
81
  total_size += TPMT_KDF_SCHEME_Marshal(&source->kdf, buffer, size);
3041
81
  return total_size;
3042
81
}
3043
3044
TPM_RC TPMS_ECC_PARMS_Unmarshal(TPMS_ECC_PARMS* target,
3045
                                BYTE** buffer,
3046
308
                                INT32* size) {
3047
308
  TPM_RC result;
3048
308
  result = TPMT_SYM_DEF_OBJECT_Unmarshal(&target->symmetric, buffer, size);
3049
308
  if (result != TPM_RC_SUCCESS) {
3050
23
    return result;
3051
23
  }
3052
285
  result = TPMT_ECC_SCHEME_Unmarshal(&target->scheme, buffer, size);
3053
285
  if (result != TPM_RC_SUCCESS) {
3054
67
    return result;
3055
67
  }
3056
218
  result = TPMI_ECC_CURVE_Unmarshal(&target->curveID, buffer, size);
3057
218
  if (result != TPM_RC_SUCCESS) {
3058
48
    return result;
3059
48
  }
3060
170
  result = TPMT_KDF_SCHEME_Unmarshal(&target->kdf, buffer, size);
3061
170
  if (result != TPM_RC_SUCCESS) {
3062
16
    return result;
3063
16
  }
3064
154
  return TPM_RC_SUCCESS;
3065
170
}
3066
3067
UINT16 TPMI_ALG_KEYEDHASH_SCHEME_Marshal(TPMI_ALG_KEYEDHASH_SCHEME* source,
3068
                                         BYTE** buffer,
3069
107
                                         INT32* size) {
3070
107
  return uint16_t_Marshal(source, buffer, size);
3071
107
}
3072
3073
TPM_RC TPMI_ALG_KEYEDHASH_SCHEME_Unmarshal(TPMI_ALG_KEYEDHASH_SCHEME* target,
3074
                                           BYTE** buffer,
3075
                                           INT32* size,
3076
129
                                           BOOL allow_conditional_value) {
3077
129
  TPM_RC result;
3078
129
  BOOL has_valid_value = FALSE;
3079
129
  result = uint16_t_Unmarshal(target, buffer, size);
3080
129
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
3081
2
    return result;
3082
2
  }
3083
127
  if (*target == TPM_ALG_NULL) {
3084
73
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
3085
73
  }
3086
54
  switch (*target) {
3087
0
#ifdef TPM_ALG_HMAC
3088
24
    case TPM_ALG_HMAC:
3089
24
#endif
3090
24
#ifdef TPM_ALG_XOR
3091
53
    case TPM_ALG_XOR:
3092
53
#endif
3093
53
      has_valid_value = TRUE;
3094
53
      break;
3095
54
  }
3096
54
  if (!has_valid_value) {
3097
1
    return TPM_RC_VALUE;
3098
1
  }
3099
53
  return TPM_RC_SUCCESS;
3100
54
}
3101
3102
UINT16 TPMS_SCHEME_HMAC_Marshal(TPMS_SCHEME_HMAC* source,
3103
                                BYTE** buffer,
3104
42
                                INT32* size) {
3105
42
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
3106
42
}
3107
3108
TPM_RC TPMS_SCHEME_HMAC_Unmarshal(TPMS_SCHEME_HMAC* target,
3109
                                  BYTE** buffer,
3110
35
                                  INT32* size) {
3111
35
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
3112
35
}
3113
3114
UINT16 TPMS_SCHEME_XOR_Marshal(TPMS_SCHEME_XOR* source,
3115
                               BYTE** buffer,
3116
7
                               INT32* size) {
3117
7
  UINT16 total_size = 0;
3118
7
  total_size += TPMI_ALG_HASH_Marshal(&source->hashAlg, buffer, size);
3119
7
  total_size += TPMI_ALG_KDF_Marshal(&source->kdf, buffer, size);
3120
7
  return total_size;
3121
7
}
3122
3123
TPM_RC TPMS_SCHEME_XOR_Unmarshal(TPMS_SCHEME_XOR* target,
3124
                                 BYTE** buffer,
3125
29
                                 INT32* size) {
3126
29
  TPM_RC result;
3127
29
  result = TPMI_ALG_HASH_Unmarshal(&target->hashAlg, buffer, size, TRUE);
3128
29
  if (result != TPM_RC_SUCCESS) {
3129
3
    return result;
3130
3
  }
3131
26
  result = TPMI_ALG_KDF_Unmarshal(&target->kdf, buffer, size, FALSE);
3132
26
  if (result != TPM_RC_SUCCESS) {
3133
12
    return result;
3134
12
  }
3135
14
  return TPM_RC_SUCCESS;
3136
26
}
3137
3138
UINT16 TPMU_SCHEME_KEYEDHASH_Marshal(TPMU_SCHEME_KEYEDHASH* source,
3139
                                     BYTE** buffer,
3140
                                     INT32* size,
3141
107
                                     UINT32 selector) {
3142
107
  switch (selector) {
3143
0
#ifdef TPM_ALG_HMAC
3144
42
    case TPM_ALG_HMAC:
3145
42
      return TPMS_SCHEME_HMAC_Marshal((TPMS_SCHEME_HMAC*)&source->hmac, buffer,
3146
42
                                      size);
3147
0
#endif
3148
0
#ifdef TPM_ALG_XOR
3149
7
    case TPM_ALG_XOR:
3150
7
      return TPMS_SCHEME_XOR_Marshal((TPMS_SCHEME_XOR*)&source->xor_, buffer,
3151
7
                                     size);
3152
0
#endif
3153
0
#ifdef TPM_ALG_NULL
3154
58
    case TPM_ALG_NULL:
3155
58
      return 0;
3156
107
#endif
3157
107
  }
3158
0
  return 0;
3159
107
}
3160
3161
TPM_RC TPMU_SCHEME_KEYEDHASH_Unmarshal(TPMU_SCHEME_KEYEDHASH* target,
3162
                                       BYTE** buffer,
3163
                                       INT32* size,
3164
126
                                       UINT32 selector) {
3165
126
  switch (selector) {
3166
0
#ifdef TPM_ALG_HMAC
3167
24
    case TPM_ALG_HMAC:
3168
24
      return TPMS_SCHEME_HMAC_Unmarshal((TPMS_SCHEME_HMAC*)&target->hmac,
3169
24
                                        buffer, size);
3170
0
#endif
3171
0
#ifdef TPM_ALG_XOR
3172
29
    case TPM_ALG_XOR:
3173
29
      return TPMS_SCHEME_XOR_Unmarshal((TPMS_SCHEME_XOR*)&target->xor_, buffer,
3174
29
                                       size);
3175
0
#endif
3176
0
#ifdef TPM_ALG_NULL
3177
73
    case TPM_ALG_NULL:
3178
73
      return TPM_RC_SUCCESS;
3179
126
#endif
3180
126
  }
3181
0
  return TPM_RC_SELECTOR;
3182
126
}
3183
3184
UINT16 TPMT_KEYEDHASH_SCHEME_Marshal(TPMT_KEYEDHASH_SCHEME* source,
3185
                                     BYTE** buffer,
3186
107
                                     INT32* size) {
3187
107
  UINT16 total_size = 0;
3188
107
  total_size +=
3189
107
      TPMI_ALG_KEYEDHASH_SCHEME_Marshal(&source->scheme, buffer, size);
3190
107
  total_size += TPMU_SCHEME_KEYEDHASH_Marshal(&source->details, buffer, size,
3191
107
                                              source->scheme);
3192
107
  return total_size;
3193
107
}
3194
3195
TPM_RC TPMT_KEYEDHASH_SCHEME_Unmarshal(TPMT_KEYEDHASH_SCHEME* target,
3196
                                       BYTE** buffer,
3197
129
                                       INT32* size) {
3198
129
  TPM_RC result;
3199
129
  result =
3200
129
      TPMI_ALG_KEYEDHASH_SCHEME_Unmarshal(&target->scheme, buffer, size, TRUE);
3201
129
  if (result != TPM_RC_SUCCESS) {
3202
3
    return result;
3203
3
  }
3204
126
  result = TPMU_SCHEME_KEYEDHASH_Unmarshal(&target->details, buffer, size,
3205
126
                                           target->scheme);
3206
126
  if (result != TPM_RC_SUCCESS) {
3207
18
    return result;
3208
18
  }
3209
108
  return TPM_RC_SUCCESS;
3210
126
}
3211
3212
UINT16 TPMS_KEYEDHASH_PARMS_Marshal(TPMS_KEYEDHASH_PARMS* source,
3213
                                    BYTE** buffer,
3214
107
                                    INT32* size) {
3215
107
  UINT16 total_size = 0;
3216
107
  total_size += TPMT_KEYEDHASH_SCHEME_Marshal(&source->scheme, buffer, size);
3217
107
  return total_size;
3218
107
}
3219
3220
TPM_RC TPMS_KEYEDHASH_PARMS_Unmarshal(TPMS_KEYEDHASH_PARMS* target,
3221
                                      BYTE** buffer,
3222
129
                                      INT32* size) {
3223
129
  TPM_RC result;
3224
129
  result = TPMT_KEYEDHASH_SCHEME_Unmarshal(&target->scheme, buffer, size);
3225
129
  if (result != TPM_RC_SUCCESS) {
3226
21
    return result;
3227
21
  }
3228
108
  return TPM_RC_SUCCESS;
3229
129
}
3230
3231
UINT16 TPMU_PUBLIC_PARMS_Marshal(TPMU_PUBLIC_PARMS* source,
3232
                                 BYTE** buffer,
3233
                                 INT32* size,
3234
564
                                 UINT32 selector) {
3235
564
  switch (selector) {
3236
0
#ifdef TPM_ALG_KEYEDHASH
3237
107
    case TPM_ALG_KEYEDHASH:
3238
107
      return TPMS_KEYEDHASH_PARMS_Marshal(
3239
107
          (TPMS_KEYEDHASH_PARMS*)&source->keyedHashDetail, buffer, size);
3240
0
#endif
3241
0
#ifdef TPM_ALG_SYMCIPHER
3242
103
    case TPM_ALG_SYMCIPHER:
3243
103
      return TPMS_SYMCIPHER_PARMS_Marshal(
3244
103
          (TPMS_SYMCIPHER_PARMS*)&source->symDetail, buffer, size);
3245
0
#endif
3246
0
#ifdef TPM_ALG_RSA
3247
273
    case TPM_ALG_RSA:
3248
273
      return TPMS_RSA_PARMS_Marshal((TPMS_RSA_PARMS*)&source->rsaDetail, buffer,
3249
273
                                    size);
3250
0
#endif
3251
0
#ifdef TPM_ALG_ECC
3252
81
    case TPM_ALG_ECC:
3253
81
      return TPMS_ECC_PARMS_Marshal((TPMS_ECC_PARMS*)&source->eccDetail, buffer,
3254
81
                                    size);
3255
564
#endif
3256
564
  }
3257
0
  return 0;
3258
564
}
3259
3260
TPM_RC TPMU_PUBLIC_PARMS_Unmarshal(TPMU_PUBLIC_PARMS* target,
3261
                                   BYTE** buffer,
3262
                                   INT32* size,
3263
909
                                   UINT32 selector) {
3264
909
  switch (selector) {
3265
0
#ifdef TPM_ALG_KEYEDHASH
3266
129
    case TPM_ALG_KEYEDHASH:
3267
129
      return TPMS_KEYEDHASH_PARMS_Unmarshal(
3268
129
          (TPMS_KEYEDHASH_PARMS*)&target->keyedHashDetail, buffer, size);
3269
0
#endif
3270
0
#ifdef TPM_ALG_SYMCIPHER
3271
141
    case TPM_ALG_SYMCIPHER:
3272
141
      return TPMS_SYMCIPHER_PARMS_Unmarshal(
3273
141
          (TPMS_SYMCIPHER_PARMS*)&target->symDetail, buffer, size);
3274
0
#endif
3275
0
#ifdef TPM_ALG_RSA
3276
331
    case TPM_ALG_RSA:
3277
331
      return TPMS_RSA_PARMS_Unmarshal((TPMS_RSA_PARMS*)&target->rsaDetail,
3278
331
                                      buffer, size);
3279
0
#endif
3280
0
#ifdef TPM_ALG_ECC
3281
308
    case TPM_ALG_ECC:
3282
308
      return TPMS_ECC_PARMS_Unmarshal((TPMS_ECC_PARMS*)&target->eccDetail,
3283
308
                                      buffer, size);
3284
909
#endif
3285
909
  }
3286
0
  return TPM_RC_SELECTOR;
3287
909
}
3288
3289
564
UINT16 TPMT_PUBLIC_Marshal(TPMT_PUBLIC* source, BYTE** buffer, INT32* size) {
3290
564
  UINT16 total_size = 0;
3291
564
  total_size += TPMI_ALG_PUBLIC_Marshal(&source->type, buffer, size);
3292
564
  total_size += TPMI_ALG_HASH_Marshal(&source->nameAlg, buffer, size);
3293
564
  total_size += TPMA_OBJECT_Marshal(&source->objectAttributes, buffer, size);
3294
564
  total_size += TPM2B_DIGEST_Marshal(&source->authPolicy, buffer, size);
3295
564
  total_size += TPMU_PUBLIC_PARMS_Marshal(&source->parameters, buffer, size,
3296
564
                                          source->type);
3297
564
  total_size +=
3298
564
      TPMU_PUBLIC_ID_Marshal(&source->unique, buffer, size, source->type);
3299
564
  return total_size;
3300
564
}
3301
3302
1.03k
TPM_RC TPMT_PUBLIC_Unmarshal(TPMT_PUBLIC* target, BYTE** buffer, INT32* size) {
3303
1.03k
  TPM_RC result;
3304
1.03k
  result = TPMI_ALG_PUBLIC_Unmarshal(&target->type, buffer, size);
3305
1.03k
  if (result != TPM_RC_SUCCESS) {
3306
42
    return result;
3307
42
  }
3308
990
  result = TPMI_ALG_HASH_Unmarshal(&target->nameAlg, buffer, size, TRUE);
3309
990
  if (result != TPM_RC_SUCCESS) {
3310
4
    return result;
3311
4
  }
3312
986
  result = TPMA_OBJECT_Unmarshal(&target->objectAttributes, buffer, size);
3313
986
  if (result != TPM_RC_SUCCESS) {
3314
39
    return result;
3315
39
  }
3316
947
  result = TPM2B_DIGEST_Unmarshal(&target->authPolicy, buffer, size);
3317
947
  if (result != TPM_RC_SUCCESS) {
3318
38
    return result;
3319
38
  }
3320
909
  result = TPMU_PUBLIC_PARMS_Unmarshal(&target->parameters, buffer, size,
3321
909
                                       target->type);
3322
909
  if (result != TPM_RC_SUCCESS) {
3323
325
    return result;
3324
325
  }
3325
584
  result =
3326
584
      TPMU_PUBLIC_ID_Unmarshal(&target->unique, buffer, size, target->type);
3327
584
  if (result != TPM_RC_SUCCESS) {
3328
161
    return result;
3329
161
  }
3330
423
  return TPM_RC_SUCCESS;
3331
584
}
3332
3333
122
UINT16 TPM2B_PUBLIC_Marshal(TPM2B_PUBLIC* source, BYTE** buffer, INT32* size) {
3334
122
  UINT16 total_size = 0;
3335
122
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
3336
122
  total_size += TPMT_PUBLIC_Marshal(&source->t.publicArea, buffer, size);
3337
122
  {
3338
122
    BYTE* size_location = *buffer - total_size;
3339
122
    INT32 size_field_size = sizeof(UINT16);
3340
122
    UINT16 payload_size = total_size - (UINT16)size_field_size;
3341
122
    UINT16_Marshal(&payload_size, &size_location, &size_field_size);
3342
122
  }
3343
122
  return total_size;
3344
122
}
3345
3346
TPM_RC TPM2B_PUBLIC_Unmarshal(TPM2B_PUBLIC* target,
3347
                              BYTE** buffer,
3348
1.05k
                              INT32* size) {
3349
1.05k
  TPM_RC result;
3350
1.05k
  UINT32 start_size = *size;
3351
1.05k
  UINT32 struct_size;
3352
1.05k
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
3353
1.05k
  if (result != TPM_RC_SUCCESS) {
3354
16
    return result;
3355
16
  }
3356
1.03k
  if (target->t.size == 0) {
3357
3
    return TPM_RC_SIZE;
3358
3
  }
3359
1.03k
  result = TPMT_PUBLIC_Unmarshal(&target->t.publicArea, buffer, size);
3360
1.03k
  if (result != TPM_RC_SUCCESS) {
3361
609
    return result;
3362
609
  }
3363
423
  struct_size = start_size - *size - sizeof(target->t.size);
3364
423
  if (struct_size != target->t.size) {
3365
32
    return TPM_RC_SIZE;
3366
32
  }
3367
391
  return TPM_RC_SUCCESS;
3368
423
}
3369
3370
UINT16 TPM2B_SENSITIVE_DATA_Marshal(TPM2B_SENSITIVE_DATA* source,
3371
                                    BYTE** buffer,
3372
0
                                    INT32* size) {
3373
0
  UINT16 total_size = 0;
3374
0
  INT32 i;
3375
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
3376
0
  for (i = 0; i < source->t.size; ++i) {
3377
0
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
3378
0
  }
3379
0
  return total_size;
3380
0
}
3381
3382
TPM_RC TPM2B_SENSITIVE_DATA_Unmarshal(TPM2B_SENSITIVE_DATA* target,
3383
                                      BYTE** buffer,
3384
345
                                      INT32* size) {
3385
345
  TPM_RC result;
3386
345
  INT32 i;
3387
345
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
3388
345
  if (result != TPM_RC_SUCCESS) {
3389
8
    return result;
3390
8
  }
3391
337
  if (target->t.size == 0) {
3392
228
    return TPM_RC_SUCCESS;
3393
228
  }
3394
109
  if (target->t.size > MAX_SYM_DATA) {
3395
38
    return TPM_RC_SIZE;
3396
38
  }
3397
1.32k
  for (i = 0; i < target->t.size; ++i) {
3398
1.29k
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
3399
1.29k
    if (result != TPM_RC_SUCCESS) {
3400
41
      return result;
3401
41
    }
3402
1.29k
  }
3403
30
  return TPM_RC_SUCCESS;
3404
71
}
3405
3406
UINT16 TPM2B_SYM_KEY_Marshal(TPM2B_SYM_KEY* source,
3407
                             BYTE** buffer,
3408
0
                             INT32* size) {
3409
0
  UINT16 total_size = 0;
3410
0
  INT32 i;
3411
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
3412
0
  for (i = 0; i < source->t.size; ++i) {
3413
0
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
3414
0
  }
3415
0
  return total_size;
3416
0
}
3417
3418
TPM_RC TPM2B_SYM_KEY_Unmarshal(TPM2B_SYM_KEY* target,
3419
                               BYTE** buffer,
3420
74
                               INT32* size) {
3421
74
  TPM_RC result;
3422
74
  INT32 i;
3423
74
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
3424
74
  if (result != TPM_RC_SUCCESS) {
3425
3
    return result;
3426
3
  }
3427
71
  if (target->t.size == 0) {
3428
28
    return TPM_RC_SUCCESS;
3429
28
  }
3430
43
  if (target->t.size > MAX_SYM_KEY_BYTES) {
3431
14
    return TPM_RC_SIZE;
3432
14
  }
3433
164
  for (i = 0; i < target->t.size; ++i) {
3434
146
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
3435
146
    if (result != TPM_RC_SUCCESS) {
3436
11
      return result;
3437
11
    }
3438
146
  }
3439
18
  return TPM_RC_SUCCESS;
3440
29
}
3441
3442
UINT16 TPMU_SENSITIVE_COMPOSITE_Marshal(TPMU_SENSITIVE_COMPOSITE* source,
3443
                                        BYTE** buffer,
3444
                                        INT32* size,
3445
0
                                        UINT32 selector) {
3446
0
  switch (selector) {
3447
0
#ifdef TPM_ALG_RSA
3448
0
    case TPM_ALG_RSA:
3449
0
      return TPM2B_PRIVATE_KEY_RSA_Marshal((TPM2B_PRIVATE_KEY_RSA*)&source->rsa,
3450
0
                                           buffer, size);
3451
0
#endif
3452
0
#ifdef TPM_ALG_ECC
3453
0
    case TPM_ALG_ECC:
3454
0
      return TPM2B_ECC_PARAMETER_Marshal((TPM2B_ECC_PARAMETER*)&source->ecc,
3455
0
                                         buffer, size);
3456
0
#endif
3457
0
#ifdef TPM_ALG_KEYEDHASH
3458
0
    case TPM_ALG_KEYEDHASH:
3459
0
      return TPM2B_SENSITIVE_DATA_Marshal((TPM2B_SENSITIVE_DATA*)&source->bits,
3460
0
                                          buffer, size);
3461
0
#endif
3462
0
#ifdef TPM_ALG_SYMCIPHER
3463
0
    case TPM_ALG_SYMCIPHER:
3464
0
      return TPM2B_SYM_KEY_Marshal((TPM2B_SYM_KEY*)&source->sym, buffer, size);
3465
0
#endif
3466
0
  }
3467
0
  return 0;
3468
0
}
3469
3470
TPM_RC TPMU_SENSITIVE_COMPOSITE_Unmarshal(TPMU_SENSITIVE_COMPOSITE* target,
3471
                                          BYTE** buffer,
3472
                                          INT32* size,
3473
273
                                          UINT32 selector) {
3474
273
  switch (selector) {
3475
0
#ifdef TPM_ALG_RSA
3476
111
    case TPM_ALG_RSA:
3477
111
      return TPM2B_PRIVATE_KEY_RSA_Unmarshal(
3478
111
          (TPM2B_PRIVATE_KEY_RSA*)&target->rsa, buffer, size);
3479
0
#endif
3480
0
#ifdef TPM_ALG_ECC
3481
54
    case TPM_ALG_ECC:
3482
54
      return TPM2B_ECC_PARAMETER_Unmarshal((TPM2B_ECC_PARAMETER*)&target->ecc,
3483
54
                                           buffer, size);
3484
0
#endif
3485
0
#ifdef TPM_ALG_KEYEDHASH
3486
34
    case TPM_ALG_KEYEDHASH:
3487
34
      return TPM2B_SENSITIVE_DATA_Unmarshal(
3488
34
          (TPM2B_SENSITIVE_DATA*)&target->bits, buffer, size);
3489
0
#endif
3490
0
#ifdef TPM_ALG_SYMCIPHER
3491
74
    case TPM_ALG_SYMCIPHER:
3492
74
      return TPM2B_SYM_KEY_Unmarshal((TPM2B_SYM_KEY*)&target->sym, buffer,
3493
74
                                     size);
3494
273
#endif
3495
273
  }
3496
0
  return TPM_RC_SELECTOR;
3497
273
}
3498
3499
UINT16 TPMT_SENSITIVE_Marshal(TPMT_SENSITIVE* source,
3500
                              BYTE** buffer,
3501
0
                              INT32* size) {
3502
0
  UINT16 total_size = 0;
3503
0
  total_size += TPMI_ALG_PUBLIC_Marshal(&source->sensitiveType, buffer, size);
3504
0
  total_size += TPM2B_AUTH_Marshal(&source->authValue, buffer, size);
3505
0
  total_size += TPM2B_DIGEST_Marshal(&source->seedValue, buffer, size);
3506
0
  total_size += TPMU_SENSITIVE_COMPOSITE_Marshal(&source->sensitive, buffer,
3507
0
                                                 size, source->sensitiveType);
3508
0
  return total_size;
3509
0
}
3510
3511
TPM_RC TPMT_SENSITIVE_Unmarshal(TPMT_SENSITIVE* target,
3512
                                BYTE** buffer,
3513
362
                                INT32* size) {
3514
362
  TPM_RC result;
3515
362
  result = TPMI_ALG_PUBLIC_Unmarshal(&target->sensitiveType, buffer, size);
3516
362
  if (result != TPM_RC_SUCCESS) {
3517
18
    return result;
3518
18
  }
3519
344
  result = TPM2B_AUTH_Unmarshal(&target->authValue, buffer, size);
3520
344
  if (result != TPM_RC_SUCCESS) {
3521
39
    return result;
3522
39
  }
3523
305
  result = TPM2B_DIGEST_Unmarshal(&target->seedValue, buffer, size);
3524
305
  if (result != TPM_RC_SUCCESS) {
3525
32
    return result;
3526
32
  }
3527
273
  result = TPMU_SENSITIVE_COMPOSITE_Unmarshal(&target->sensitive, buffer, size,
3528
273
                                              target->sensitiveType);
3529
273
  if (result != TPM_RC_SUCCESS) {
3530
124
    return result;
3531
124
  }
3532
149
  return TPM_RC_SUCCESS;
3533
273
}
3534
3535
UINT16 TPM2B_SENSITIVE_Marshal(TPM2B_SENSITIVE* source,
3536
                               BYTE** buffer,
3537
0
                               INT32* size) {
3538
0
  UINT16 total_size = 0;
3539
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
3540
0
  total_size += TPMT_SENSITIVE_Marshal(&source->t.sensitiveArea, buffer, size);
3541
0
  return total_size;
3542
0
}
3543
3544
TPM_RC TPM2B_SENSITIVE_Unmarshal(TPM2B_SENSITIVE* target,
3545
                                 BYTE** buffer,
3546
1.04k
                                 INT32* size) {
3547
1.04k
  TPM_RC result;
3548
1.04k
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
3549
1.04k
  if (result != TPM_RC_SUCCESS) {
3550
2
    return result;
3551
2
  }
3552
1.04k
  if (target->t.size == 0) {
3553
683
    return TPM_RC_SUCCESS;
3554
683
  }
3555
362
  result = TPMT_SENSITIVE_Unmarshal(&target->t.sensitiveArea, buffer, size);
3556
362
  if (result != TPM_RC_SUCCESS) {
3557
213
    return result;
3558
213
  }
3559
149
  return TPM_RC_SUCCESS;
3560
362
}
3561
3562
UINT16 TPMS_SENSITIVE_CREATE_Marshal(TPMS_SENSITIVE_CREATE* source,
3563
                                     BYTE** buffer,
3564
0
                                     INT32* size) {
3565
0
  UINT16 total_size = 0;
3566
0
  total_size += TPM2B_AUTH_Marshal(&source->userAuth, buffer, size);
3567
0
  total_size += TPM2B_SENSITIVE_DATA_Marshal(&source->data, buffer, size);
3568
0
  return total_size;
3569
0
}
3570
3571
TPM_RC TPMS_SENSITIVE_CREATE_Unmarshal(TPMS_SENSITIVE_CREATE* target,
3572
                                       BYTE** buffer,
3573
282
                                       INT32* size) {
3574
282
  TPM_RC result;
3575
282
  result = TPM2B_AUTH_Unmarshal(&target->userAuth, buffer, size);
3576
282
  if (result != TPM_RC_SUCCESS) {
3577
24
    return result;
3578
24
  }
3579
258
  result = TPM2B_SENSITIVE_DATA_Unmarshal(&target->data, buffer, size);
3580
258
  if (result != TPM_RC_SUCCESS) {
3581
32
    return result;
3582
32
  }
3583
226
  return TPM_RC_SUCCESS;
3584
258
}
3585
3586
UINT16 TPM2B_SENSITIVE_CREATE_Marshal(TPM2B_SENSITIVE_CREATE* source,
3587
                                      BYTE** buffer,
3588
0
                                      INT32* size) {
3589
0
  UINT16 total_size = 0;
3590
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
3591
0
  total_size +=
3592
0
      TPMS_SENSITIVE_CREATE_Marshal(&source->t.sensitive, buffer, size);
3593
0
  {
3594
0
    BYTE* size_location = *buffer - total_size;
3595
0
    INT32 size_field_size = sizeof(UINT16);
3596
0
    UINT16 payload_size = total_size - (UINT16)size_field_size;
3597
0
    UINT16_Marshal(&payload_size, &size_location, &size_field_size);
3598
0
  }
3599
0
  return total_size;
3600
0
}
3601
3602
TPM_RC TPM2B_SENSITIVE_CREATE_Unmarshal(TPM2B_SENSITIVE_CREATE* target,
3603
                                        BYTE** buffer,
3604
287
                                        INT32* size) {
3605
287
  TPM_RC result;
3606
287
  UINT32 start_size = *size;
3607
287
  UINT32 struct_size;
3608
287
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
3609
287
  if (result != TPM_RC_SUCCESS) {
3610
4
    return result;
3611
4
  }
3612
283
  if (target->t.size == 0) {
3613
1
    return TPM_RC_SIZE;
3614
1
  }
3615
282
  result = TPMS_SENSITIVE_CREATE_Unmarshal(&target->t.sensitive, buffer, size);
3616
282
  if (result != TPM_RC_SUCCESS) {
3617
56
    return result;
3618
56
  }
3619
226
  struct_size = start_size - *size - sizeof(target->t.size);
3620
226
  if (struct_size != target->t.size) {
3621
7
    return TPM_RC_SIZE;
3622
7
  }
3623
219
  return TPM_RC_SUCCESS;
3624
226
}
3625
3626
UINT16 TPM2B_TIMEOUT_Marshal(TPM2B_TIMEOUT* source,
3627
                             BYTE** buffer,
3628
0
                             INT32* size) {
3629
0
  UINT16 total_size = 0;
3630
0
  INT32 i;
3631
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
3632
0
  for (i = 0; i < source->t.size; ++i) {
3633
0
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
3634
0
  }
3635
0
  return total_size;
3636
0
}
3637
3638
TPM_RC TPM2B_TIMEOUT_Unmarshal(TPM2B_TIMEOUT* target,
3639
                               BYTE** buffer,
3640
0
                               INT32* size) {
3641
0
  TPM_RC result;
3642
0
  INT32 i;
3643
0
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
3644
0
  if (result != TPM_RC_SUCCESS) {
3645
0
    return result;
3646
0
  }
3647
0
  if (target->t.size == 0) {
3648
0
    return TPM_RC_SUCCESS;
3649
0
  }
3650
0
  if (target->t.size > sizeof(UINT64)) {
3651
0
    return TPM_RC_SIZE;
3652
0
  }
3653
0
  for (i = 0; i < target->t.size; ++i) {
3654
0
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
3655
0
    if (result != TPM_RC_SUCCESS) {
3656
0
      return result;
3657
0
    }
3658
0
  }
3659
0
  return TPM_RC_SUCCESS;
3660
0
}
3661
3662
UINT16 TPMA_ALGORITHM_Marshal(TPMA_ALGORITHM* source,
3663
                              BYTE** buffer,
3664
195
                              INT32* size) {
3665
195
  return uint32_t_Marshal((uint32_t*)source, buffer, size);
3666
195
}
3667
3668
TPM_RC TPMA_ALGORITHM_Unmarshal(TPMA_ALGORITHM* target,
3669
                                BYTE** buffer,
3670
0
                                INT32* size) {
3671
0
  TPM_RC result;
3672
0
  result = uint32_t_Unmarshal((uint32_t*)target, buffer, size);
3673
0
  if (result != TPM_RC_SUCCESS) {
3674
0
    return result;
3675
0
  }
3676
0
  if (target->reserved4_7 != 0) {
3677
0
    return TPM_RC_RESERVED_BITS;
3678
0
  }
3679
0
  if (target->reserved11_31 != 0) {
3680
0
    return TPM_RC_RESERVED_BITS;
3681
0
  }
3682
0
  return TPM_RC_SUCCESS;
3683
0
}
3684
3685
680
UINT16 TPMA_CC_Marshal(TPMA_CC* source, BYTE** buffer, INT32* size) {
3686
680
  return uint32_t_Marshal((uint32_t*)source, buffer, size);
3687
680
}
3688
3689
0
TPM_RC TPMA_CC_Unmarshal(TPMA_CC* target, BYTE** buffer, INT32* size) {
3690
0
  TPM_RC result;
3691
0
  result = uint32_t_Unmarshal((uint32_t*)target, buffer, size);
3692
0
  if (result != TPM_RC_SUCCESS) {
3693
0
    return result;
3694
0
  }
3695
0
  if (target->reserved16_21 != 0) {
3696
0
    return TPM_RC_RESERVED_BITS;
3697
0
  }
3698
0
  return TPM_RC_SUCCESS;
3699
0
}
3700
3701
0
UINT16 TPMA_MEMORY_Marshal(TPMA_MEMORY* source, BYTE** buffer, INT32* size) {
3702
0
  return uint32_t_Marshal((uint32_t*)source, buffer, size);
3703
0
}
3704
3705
0
TPM_RC TPMA_MEMORY_Unmarshal(TPMA_MEMORY* target, BYTE** buffer, INT32* size) {
3706
0
  TPM_RC result;
3707
0
  result = uint32_t_Unmarshal((uint32_t*)target, buffer, size);
3708
0
  if (result != TPM_RC_SUCCESS) {
3709
0
    return result;
3710
0
  }
3711
0
  if (target->reserved3_31 != 0) {
3712
0
    return TPM_RC_RESERVED_BITS;
3713
0
  }
3714
0
  return TPM_RC_SUCCESS;
3715
0
}
3716
3717
UINT16 TPMA_PERMANENT_Marshal(TPMA_PERMANENT* source,
3718
                              BYTE** buffer,
3719
0
                              INT32* size) {
3720
0
  return uint32_t_Marshal((uint32_t*)source, buffer, size);
3721
0
}
3722
3723
TPM_RC TPMA_PERMANENT_Unmarshal(TPMA_PERMANENT* target,
3724
                                BYTE** buffer,
3725
0
                                INT32* size) {
3726
0
  TPM_RC result;
3727
0
  result = uint32_t_Unmarshal((uint32_t*)target, buffer, size);
3728
0
  if (result != TPM_RC_SUCCESS) {
3729
0
    return result;
3730
0
  }
3731
0
  if (target->reserved3_7 != 0) {
3732
0
    return TPM_RC_RESERVED_BITS;
3733
0
  }
3734
0
  if (target->reserved11_31 != 0) {
3735
0
    return TPM_RC_RESERVED_BITS;
3736
0
  }
3737
0
  return TPM_RC_SUCCESS;
3738
0
}
3739
3740
230
UINT16 TPMA_SESSION_Marshal(TPMA_SESSION* source, BYTE** buffer, INT32* size) {
3741
230
  return uint8_t_Marshal((uint8_t*)source, buffer, size);
3742
230
}
3743
3744
TPM_RC TPMA_SESSION_Unmarshal(TPMA_SESSION* target,
3745
                              BYTE** buffer,
3746
1.02k
                              INT32* size) {
3747
1.02k
  TPM_RC result;
3748
1.02k
  result = uint8_t_Unmarshal((uint8_t*)target, buffer, size);
3749
1.02k
  if (result != TPM_RC_SUCCESS) {
3750
3
    return result;
3751
3
  }
3752
1.01k
  if (target->reserved3_4 != 0) {
3753
3
    return TPM_RC_RESERVED_BITS;
3754
3
  }
3755
1.01k
  return TPM_RC_SUCCESS;
3756
1.01k
}
3757
3758
UINT16 TPMA_STARTUP_CLEAR_Marshal(TPMA_STARTUP_CLEAR* source,
3759
                                  BYTE** buffer,
3760
0
                                  INT32* size) {
3761
0
  return uint32_t_Marshal((uint32_t*)source, buffer, size);
3762
0
}
3763
3764
TPM_RC TPMA_STARTUP_CLEAR_Unmarshal(TPMA_STARTUP_CLEAR* target,
3765
                                    BYTE** buffer,
3766
0
                                    INT32* size) {
3767
0
  TPM_RC result;
3768
0
  result = uint32_t_Unmarshal((uint32_t*)target, buffer, size);
3769
0
  if (result != TPM_RC_SUCCESS) {
3770
0
    return result;
3771
0
  }
3772
0
  if (target->reserved4_30 != 0) {
3773
0
    return TPM_RC_RESERVED_BITS;
3774
0
  }
3775
0
  return TPM_RC_SUCCESS;
3776
0
}
3777
3778
UINT16 TPMI_ALG_ASYM_Marshal(TPMI_ALG_ASYM* source,
3779
                             BYTE** buffer,
3780
0
                             INT32* size) {
3781
0
  return uint16_t_Marshal(source, buffer, size);
3782
0
}
3783
3784
TPM_RC TPMI_ALG_ASYM_Unmarshal(TPMI_ALG_ASYM* target,
3785
                               BYTE** buffer,
3786
                               INT32* size,
3787
0
                               BOOL allow_conditional_value) {
3788
0
  TPM_RC result;
3789
0
  BOOL has_valid_value = FALSE;
3790
0
  result = uint16_t_Unmarshal(target, buffer, size);
3791
0
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
3792
0
    return result;
3793
0
  }
3794
0
  if (*target == TPM_ALG_NULL) {
3795
0
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_ASYMMETRIC;
3796
0
  }
3797
0
  switch (*target) {
3798
0
#ifdef TPM_ALG_RSA
3799
0
    case TPM_ALG_RSA:
3800
0
#endif
3801
0
#ifdef TPM_ALG_ECC
3802
0
    case TPM_ALG_ECC:
3803
0
#endif
3804
0
      has_valid_value = TRUE;
3805
0
      break;
3806
0
  }
3807
0
  if (!has_valid_value) {
3808
0
    return TPM_RC_ASYMMETRIC;
3809
0
  }
3810
0
  return TPM_RC_SUCCESS;
3811
0
}
3812
3813
UINT16 TPMI_ALG_RSA_DECRYPT_Marshal(TPMI_ALG_RSA_DECRYPT* source,
3814
                                    BYTE** buffer,
3815
0
                                    INT32* size) {
3816
0
  return uint16_t_Marshal(source, buffer, size);
3817
0
}
3818
3819
TPM_RC TPMI_ALG_RSA_DECRYPT_Unmarshal(TPMI_ALG_RSA_DECRYPT* target,
3820
                                      BYTE** buffer,
3821
                                      INT32* size,
3822
0
                                      BOOL allow_conditional_value) {
3823
0
  TPM_RC result;
3824
0
  BOOL has_valid_value = FALSE;
3825
0
  result = uint16_t_Unmarshal(target, buffer, size);
3826
0
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
3827
0
    return result;
3828
0
  }
3829
0
  if (*target == TPM_ALG_NULL) {
3830
0
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
3831
0
  }
3832
0
  switch (*target) {
3833
0
#ifdef TPM_ALG_RSAES
3834
0
    case TPM_ALG_RSAES:
3835
0
#endif
3836
0
#ifdef TPM_ALG_OAEP
3837
0
    case TPM_ALG_OAEP:
3838
0
#endif
3839
0
      has_valid_value = TRUE;
3840
0
      break;
3841
0
  }
3842
0
  if (!has_valid_value) {
3843
0
    return TPM_RC_VALUE;
3844
0
  }
3845
0
  return TPM_RC_SUCCESS;
3846
0
}
3847
3848
UINT16 TPMI_ALG_SIG_SCHEME_Marshal(TPMI_ALG_SIG_SCHEME* source,
3849
                                   BYTE** buffer,
3850
0
                                   INT32* size) {
3851
0
  return uint16_t_Marshal(source, buffer, size);
3852
0
}
3853
3854
TPM_RC TPMI_ALG_SIG_SCHEME_Unmarshal(TPMI_ALG_SIG_SCHEME* target,
3855
                                     BYTE** buffer,
3856
                                     INT32* size,
3857
84
                                     BOOL allow_conditional_value) {
3858
84
  TPM_RC result;
3859
84
  BOOL has_valid_value = FALSE;
3860
84
  result = uint16_t_Unmarshal(target, buffer, size);
3861
84
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
3862
5
    return result;
3863
5
  }
3864
79
  if (*target == TPM_ALG_NULL) {
3865
3
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_SCHEME;
3866
3
  }
3867
76
  switch (*target) {
3868
0
#ifdef TPM_ALG_RSASSA
3869
12
    case TPM_ALG_RSASSA:
3870
12
#endif
3871
12
#ifdef TPM_ALG_RSAPSS
3872
26
    case TPM_ALG_RSAPSS:
3873
26
#endif
3874
26
#ifdef TPM_ALG_ECDSA
3875
39
    case TPM_ALG_ECDSA:
3876
39
#endif
3877
39
#ifdef TPM_ALG_ECDAA
3878
47
    case TPM_ALG_ECDAA:
3879
47
#endif
3880
47
#ifdef TPM_ALG_SM2
3881
54
    case TPM_ALG_SM2:
3882
54
#endif
3883
54
#ifdef TPM_ALG_ECSCHNORR
3884
61
    case TPM_ALG_ECSCHNORR:
3885
61
#endif
3886
61
#ifdef TPM_ALG_HMAC
3887
72
    case TPM_ALG_HMAC:
3888
72
#endif
3889
72
      has_valid_value = TRUE;
3890
72
      break;
3891
76
  }
3892
76
  if (!has_valid_value) {
3893
4
    return TPM_RC_SCHEME;
3894
4
  }
3895
72
  return TPM_RC_SUCCESS;
3896
76
}
3897
3898
0
UINT16 TPMI_ALG_SYM_Marshal(TPMI_ALG_SYM* source, BYTE** buffer, INT32* size) {
3899
0
  return uint16_t_Marshal(source, buffer, size);
3900
0
}
3901
3902
TPM_RC TPMI_ALG_SYM_Unmarshal(TPMI_ALG_SYM* target,
3903
                              BYTE** buffer,
3904
                              INT32* size,
3905
111
                              BOOL allow_conditional_value) {
3906
111
  TPM_RC result;
3907
111
  BOOL has_valid_value = FALSE;
3908
111
  result = uint16_t_Unmarshal(target, buffer, size);
3909
111
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
3910
4
    return result;
3911
4
  }
3912
107
  if (*target == TPM_ALG_NULL) {
3913
28
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_SYMMETRIC;
3914
28
  }
3915
79
  switch (*target) {
3916
0
#ifdef TPM_ALG_AES
3917
58
    case TPM_ALG_AES:
3918
58
#endif
3919
#ifdef TPM_ALG_SM4
3920
    case TPM_ALG_SM4:
3921
#endif
3922
#ifdef TPM_ALG_CAMELLIA
3923
    case TPM_ALG_CAMELLIA:
3924
#endif
3925
58
#ifdef TPM_ALG_XOR
3926
68
    case TPM_ALG_XOR:
3927
68
#endif
3928
68
      has_valid_value = TRUE;
3929
68
      break;
3930
79
  }
3931
79
  if (!has_valid_value) {
3932
11
    return TPM_RC_SYMMETRIC;
3933
11
  }
3934
68
  return TPM_RC_SUCCESS;
3935
79
}
3936
3937
UINT16 TPMI_DH_CONTEXT_Marshal(TPMI_DH_CONTEXT* source,
3938
                               BYTE** buffer,
3939
0
                               INT32* size) {
3940
0
  return uint32_t_Marshal(source, buffer, size);
3941
0
}
3942
3943
TPM_RC TPMI_DH_CONTEXT_Unmarshal(TPMI_DH_CONTEXT* target,
3944
                                 BYTE** buffer,
3945
453
                                 INT32* size) {
3946
453
  TPM_RC result;
3947
453
  BOOL has_valid_value = FALSE;
3948
453
  result = uint32_t_Unmarshal(target, buffer, size);
3949
453
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
3950
7
    return result;
3951
7
  }
3952
446
  if ((*target >= HMAC_SESSION_FIRST) && (*target <= HMAC_SESSION_LAST)) {
3953
94
    has_valid_value = TRUE;
3954
94
  }
3955
446
  if ((*target >= POLICY_SESSION_FIRST) && (*target <= POLICY_SESSION_LAST)) {
3956
79
    has_valid_value = TRUE;
3957
79
  }
3958
446
  if ((*target >= TRANSIENT_FIRST) && (*target <= TRANSIENT_LAST)) {
3959
31
    has_valid_value = TRUE;
3960
31
  }
3961
446
  if (!has_valid_value) {
3962
242
    return TPM_RC_VALUE;
3963
242
  }
3964
204
  return TPM_RC_SUCCESS;
3965
446
}
3966
3967
UINT16 TPMI_DH_ENTITY_Marshal(TPMI_DH_ENTITY* source,
3968
                              BYTE** buffer,
3969
0
                              INT32* size) {
3970
0
  return uint32_t_Marshal(source, buffer, size);
3971
0
}
3972
3973
TPM_RC TPMI_DH_ENTITY_Unmarshal(TPMI_DH_ENTITY* target,
3974
                                BYTE** buffer,
3975
                                INT32* size,
3976
481
                                BOOL allow_conditional_value) {
3977
481
  TPM_RC result;
3978
481
  BOOL has_valid_value = FALSE;
3979
481
  result = uint32_t_Unmarshal(target, buffer, size);
3980
481
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
3981
5
    return result;
3982
5
  }
3983
476
  if (*target == TPM_RH_NULL) {
3984
16
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
3985
16
  }
3986
460
  switch (*target) {
3987
26
    case TPM_RH_OWNER:
3988
33
    case TPM_RH_ENDORSEMENT:
3989
44
    case TPM_RH_PLATFORM:
3990
53
    case TPM_RH_LOCKOUT:
3991
53
      has_valid_value = TRUE;
3992
53
      break;
3993
460
  }
3994
460
  if ((*target >= TRANSIENT_FIRST) && (*target <= TRANSIENT_LAST)) {
3995
3
    has_valid_value = TRUE;
3996
3
  }
3997
460
  if ((*target >= PERSISTENT_FIRST) && (*target <= PERSISTENT_LAST)) {
3998
25
    has_valid_value = TRUE;
3999
25
  }
4000
460
  if ((*target >= NV_INDEX_FIRST) && (*target <= NV_INDEX_LAST)) {
4001
29
    has_valid_value = TRUE;
4002
29
  }
4003
460
  if ((*target >= PCR_FIRST) && (*target <= PCR_LAST)) {
4004
134
    has_valid_value = TRUE;
4005
134
  }
4006
460
  if ((*target >= TPM_RH_AUTH_00) && (*target <= TPM_RH_AUTH_FF)) {
4007
23
    has_valid_value = TRUE;
4008
23
  }
4009
460
  if (!has_valid_value) {
4010
193
    return TPM_RC_VALUE;
4011
193
  }
4012
267
  return TPM_RC_SUCCESS;
4013
460
}
4014
4015
UINT16 TPMI_DH_OBJECT_Marshal(TPMI_DH_OBJECT* source,
4016
                              BYTE** buffer,
4017
0
                              INT32* size) {
4018
0
  return uint32_t_Marshal(source, buffer, size);
4019
0
}
4020
4021
TPM_RC TPMI_DH_OBJECT_Unmarshal(TPMI_DH_OBJECT* target,
4022
                                BYTE** buffer,
4023
                                INT32* size,
4024
553
                                BOOL allow_conditional_value) {
4025
553
  TPM_RC result;
4026
553
  BOOL has_valid_value = FALSE;
4027
553
  result = uint32_t_Unmarshal(target, buffer, size);
4028
553
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4029
33
    return result;
4030
33
  }
4031
520
  if (*target == TPM_RH_NULL) {
4032
316
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
4033
316
  }
4034
204
  if ((*target >= TRANSIENT_FIRST) && (*target <= TRANSIENT_LAST)) {
4035
7
    has_valid_value = TRUE;
4036
7
  }
4037
204
  if ((*target >= PERSISTENT_FIRST) && (*target <= PERSISTENT_LAST)) {
4038
89
    has_valid_value = TRUE;
4039
89
  }
4040
204
  if (!has_valid_value) {
4041
108
    return TPM_RC_VALUE;
4042
108
  }
4043
96
  return TPM_RC_SUCCESS;
4044
204
}
4045
4046
0
UINT16 TPMI_DH_PCR_Marshal(TPMI_DH_PCR* source, BYTE** buffer, INT32* size) {
4047
0
  return uint32_t_Marshal(source, buffer, size);
4048
0
}
4049
4050
TPM_RC TPMI_DH_PCR_Unmarshal(TPMI_DH_PCR* target,
4051
                             BYTE** buffer,
4052
                             INT32* size,
4053
216
                             BOOL allow_conditional_value) {
4054
216
  TPM_RC result;
4055
216
  BOOL has_valid_value = FALSE;
4056
216
  result = uint32_t_Unmarshal(target, buffer, size);
4057
216
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4058
4
    return result;
4059
4
  }
4060
212
  if (*target == TPM_RH_NULL) {
4061
27
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
4062
27
  }
4063
185
  if ((*target >= PCR_FIRST) && (*target <= PCR_LAST)) {
4064
116
    has_valid_value = TRUE;
4065
116
  }
4066
185
  if (!has_valid_value) {
4067
69
    return TPM_RC_VALUE;
4068
69
  }
4069
116
  return TPM_RC_SUCCESS;
4070
185
}
4071
4072
UINT16 TPMI_DH_PERSISTENT_Marshal(TPMI_DH_PERSISTENT* source,
4073
                                  BYTE** buffer,
4074
0
                                  INT32* size) {
4075
0
  return uint32_t_Marshal(source, buffer, size);
4076
0
}
4077
4078
TPM_RC TPMI_DH_PERSISTENT_Unmarshal(TPMI_DH_PERSISTENT* target,
4079
                                    BYTE** buffer,
4080
0
                                    INT32* size) {
4081
0
  TPM_RC result;
4082
0
  BOOL has_valid_value = FALSE;
4083
0
  result = uint32_t_Unmarshal(target, buffer, size);
4084
0
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4085
0
    return result;
4086
0
  }
4087
0
  if ((*target >= PERSISTENT_FIRST) && (*target <= PERSISTENT_LAST)) {
4088
0
    has_valid_value = TRUE;
4089
0
  }
4090
0
  if (!has_valid_value) {
4091
0
    return TPM_RC_VALUE;
4092
0
  }
4093
0
  return TPM_RC_SUCCESS;
4094
0
}
4095
4096
UINT16 TPMI_ECC_KEY_EXCHANGE_Marshal(TPMI_ECC_KEY_EXCHANGE* source,
4097
                                     BYTE** buffer,
4098
0
                                     INT32* size) {
4099
0
  return uint16_t_Marshal(source, buffer, size);
4100
0
}
4101
4102
TPM_RC TPMI_ECC_KEY_EXCHANGE_Unmarshal(TPMI_ECC_KEY_EXCHANGE* target,
4103
                                       BYTE** buffer,
4104
                                       INT32* size,
4105
0
                                       BOOL allow_conditional_value) {
4106
0
  TPM_RC result;
4107
0
  BOOL has_valid_value = FALSE;
4108
0
  result = uint16_t_Unmarshal(target, buffer, size);
4109
0
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4110
0
    return result;
4111
0
  }
4112
0
  if (*target == TPM_ALG_NULL) {
4113
0
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_SCHEME;
4114
0
  }
4115
0
  switch (*target) {
4116
0
#ifdef TPM_ALG_ECDH
4117
0
    case TPM_ALG_ECDH:
4118
0
#endif
4119
#ifdef TPM_ALG_ECMQV
4120
    case TPM_ALG_ECMQV:
4121
#endif
4122
0
#ifdef TPM_ALG_SM2
4123
0
    case TPM_ALG_SM2:
4124
0
#endif
4125
0
      has_valid_value = TRUE;
4126
0
      break;
4127
0
  }
4128
0
  if (!has_valid_value) {
4129
0
    return TPM_RC_SCHEME;
4130
0
  }
4131
0
  return TPM_RC_SUCCESS;
4132
0
}
4133
4134
UINT16 TPMI_RH_CLEAR_Marshal(TPMI_RH_CLEAR* source,
4135
                             BYTE** buffer,
4136
0
                             INT32* size) {
4137
0
  return uint32_t_Marshal(source, buffer, size);
4138
0
}
4139
4140
TPM_RC TPMI_RH_CLEAR_Unmarshal(TPMI_RH_CLEAR* target,
4141
                               BYTE** buffer,
4142
77
                               INT32* size) {
4143
77
  TPM_RC result;
4144
77
  BOOL has_valid_value = FALSE;
4145
77
  result = uint32_t_Unmarshal(target, buffer, size);
4146
77
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4147
3
    return result;
4148
3
  }
4149
74
  switch (*target) {
4150
5
    case TPM_RH_LOCKOUT:
4151
13
    case TPM_RH_PLATFORM:
4152
13
      has_valid_value = TRUE;
4153
13
      break;
4154
74
  }
4155
74
  if (!has_valid_value) {
4156
61
    return TPM_RC_VALUE;
4157
61
  }
4158
13
  return TPM_RC_SUCCESS;
4159
74
}
4160
4161
UINT16 TPMI_RH_ENABLES_Marshal(TPMI_RH_ENABLES* source,
4162
                               BYTE** buffer,
4163
0
                               INT32* size) {
4164
0
  return uint32_t_Marshal(source, buffer, size);
4165
0
}
4166
4167
TPM_RC TPMI_RH_ENABLES_Unmarshal(TPMI_RH_ENABLES* target,
4168
                                 BYTE** buffer,
4169
                                 INT32* size,
4170
80
                                 BOOL allow_conditional_value) {
4171
80
  TPM_RC result;
4172
80
  BOOL has_valid_value = FALSE;
4173
80
  result = uint32_t_Unmarshal(target, buffer, size);
4174
80
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4175
4
    return result;
4176
4
  }
4177
76
  if (*target == TPM_RH_NULL) {
4178
1
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
4179
1
  }
4180
75
  switch (*target) {
4181
4
    case TPM_RH_OWNER:
4182
7
    case TPM_RH_PLATFORM:
4183
12
    case TPM_RH_ENDORSEMENT:
4184
15
    case TPM_RH_PLATFORM_NV:
4185
15
      has_valid_value = TRUE;
4186
15
      break;
4187
75
  }
4188
75
  if (!has_valid_value) {
4189
60
    return TPM_RC_VALUE;
4190
60
  }
4191
15
  return TPM_RC_SUCCESS;
4192
75
}
4193
4194
UINT16 TPMI_RH_ENDORSEMENT_Marshal(TPMI_RH_ENDORSEMENT* source,
4195
                                   BYTE** buffer,
4196
0
                                   INT32* size) {
4197
0
  return uint32_t_Marshal(source, buffer, size);
4198
0
}
4199
4200
TPM_RC TPMI_RH_ENDORSEMENT_Unmarshal(TPMI_RH_ENDORSEMENT* target,
4201
                                     BYTE** buffer,
4202
                                     INT32* size,
4203
0
                                     BOOL allow_conditional_value) {
4204
0
  TPM_RC result;
4205
0
  BOOL has_valid_value = FALSE;
4206
0
  result = uint32_t_Unmarshal(target, buffer, size);
4207
0
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4208
0
    return result;
4209
0
  }
4210
0
  if (*target == TPM_RH_NULL) {
4211
0
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
4212
0
  }
4213
0
  switch (*target) {
4214
0
    case TPM_RH_ENDORSEMENT:
4215
0
      has_valid_value = TRUE;
4216
0
      break;
4217
0
  }
4218
0
  if (!has_valid_value) {
4219
0
    return TPM_RC_VALUE;
4220
0
  }
4221
0
  return TPM_RC_SUCCESS;
4222
0
}
4223
4224
UINT16 TPMI_RH_HIERARCHY_Marshal(TPMI_RH_HIERARCHY* source,
4225
                                 BYTE** buffer,
4226
137
                                 INT32* size) {
4227
137
  return uint32_t_Marshal(source, buffer, size);
4228
137
}
4229
4230
TPM_RC TPMI_RH_HIERARCHY_Unmarshal(TPMI_RH_HIERARCHY* target,
4231
                                   BYTE** buffer,
4232
                                   INT32* size,
4233
880
                                   BOOL allow_conditional_value) {
4234
880
  TPM_RC result;
4235
880
  BOOL has_valid_value = FALSE;
4236
880
  result = uint32_t_Unmarshal(target, buffer, size);
4237
880
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4238
23
    return result;
4239
23
  }
4240
857
  if (*target == TPM_RH_NULL) {
4241
183
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
4242
183
  }
4243
674
  switch (*target) {
4244
204
    case TPM_RH_OWNER:
4245
337
    case TPM_RH_PLATFORM:
4246
471
    case TPM_RH_ENDORSEMENT:
4247
471
      has_valid_value = TRUE;
4248
471
      break;
4249
674
  }
4250
674
  if (!has_valid_value) {
4251
203
    return TPM_RC_VALUE;
4252
203
  }
4253
471
  return TPM_RC_SUCCESS;
4254
674
}
4255
4256
UINT16 TPMI_RH_HIERARCHY_AUTH_Marshal(TPMI_RH_HIERARCHY_AUTH* source,
4257
                                      BYTE** buffer,
4258
0
                                      INT32* size) {
4259
0
  return uint32_t_Marshal(source, buffer, size);
4260
0
}
4261
4262
TPM_RC TPMI_RH_HIERARCHY_AUTH_Unmarshal(TPMI_RH_HIERARCHY_AUTH* target,
4263
                                        BYTE** buffer,
4264
77
                                        INT32* size) {
4265
77
  TPM_RC result;
4266
77
  BOOL has_valid_value = FALSE;
4267
77
  result = uint32_t_Unmarshal(target, buffer, size);
4268
77
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4269
1
    return result;
4270
1
  }
4271
76
  switch (*target) {
4272
10
    case TPM_RH_OWNER:
4273
19
    case TPM_RH_PLATFORM:
4274
24
    case TPM_RH_ENDORSEMENT:
4275
29
    case TPM_RH_LOCKOUT:
4276
29
      has_valid_value = TRUE;
4277
29
      break;
4278
76
  }
4279
76
  if (!has_valid_value) {
4280
47
    return TPM_RC_VALUE;
4281
47
  }
4282
29
  return TPM_RC_SUCCESS;
4283
76
}
4284
4285
UINT16 TPMI_RH_LOCKOUT_Marshal(TPMI_RH_LOCKOUT* source,
4286
                               BYTE** buffer,
4287
0
                               INT32* size) {
4288
0
  return uint32_t_Marshal(source, buffer, size);
4289
0
}
4290
4291
TPM_RC TPMI_RH_LOCKOUT_Unmarshal(TPMI_RH_LOCKOUT* target,
4292
                                 BYTE** buffer,
4293
71
                                 INT32* size) {
4294
71
  TPM_RC result;
4295
71
  BOOL has_valid_value = FALSE;
4296
71
  result = uint32_t_Unmarshal(target, buffer, size);
4297
71
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4298
3
    return result;
4299
3
  }
4300
68
  switch (*target) {
4301
20
    case TPM_RH_LOCKOUT:
4302
20
      has_valid_value = TRUE;
4303
20
      break;
4304
68
  }
4305
68
  if (!has_valid_value) {
4306
48
    return TPM_RC_VALUE;
4307
48
  }
4308
20
  return TPM_RC_SUCCESS;
4309
68
}
4310
4311
UINT16 TPMI_RH_NV_AUTH_Marshal(TPMI_RH_NV_AUTH* source,
4312
                               BYTE** buffer,
4313
0
                               INT32* size) {
4314
0
  return uint32_t_Marshal(source, buffer, size);
4315
0
}
4316
4317
TPM_RC TPMI_RH_NV_AUTH_Unmarshal(TPMI_RH_NV_AUTH* target,
4318
                                 BYTE** buffer,
4319
126
                                 INT32* size) {
4320
126
  TPM_RC result;
4321
126
  BOOL has_valid_value = FALSE;
4322
126
  result = uint32_t_Unmarshal(target, buffer, size);
4323
126
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4324
9
    return result;
4325
9
  }
4326
117
  switch (*target) {
4327
1
    case TPM_RH_PLATFORM:
4328
2
    case TPM_RH_OWNER:
4329
2
      has_valid_value = TRUE;
4330
2
      break;
4331
117
  }
4332
117
  if ((*target >= NV_INDEX_FIRST) && (*target <= NV_INDEX_LAST)) {
4333
43
    has_valid_value = TRUE;
4334
43
  }
4335
117
  if (!has_valid_value) {
4336
72
    return TPM_RC_VALUE;
4337
72
  }
4338
45
  return TPM_RC_SUCCESS;
4339
117
}
4340
4341
UINT16 TPMI_RH_OWNER_Marshal(TPMI_RH_OWNER* source,
4342
                             BYTE** buffer,
4343
0
                             INT32* size) {
4344
0
  return uint32_t_Marshal(source, buffer, size);
4345
0
}
4346
4347
TPM_RC TPMI_RH_OWNER_Unmarshal(TPMI_RH_OWNER* target,
4348
                               BYTE** buffer,
4349
                               INT32* size,
4350
0
                               BOOL allow_conditional_value) {
4351
0
  TPM_RC result;
4352
0
  BOOL has_valid_value = FALSE;
4353
0
  result = uint32_t_Unmarshal(target, buffer, size);
4354
0
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4355
0
    return result;
4356
0
  }
4357
0
  if (*target == TPM_RH_NULL) {
4358
0
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
4359
0
  }
4360
0
  switch (*target) {
4361
0
    case TPM_RH_OWNER:
4362
0
      has_valid_value = TRUE;
4363
0
      break;
4364
0
  }
4365
0
  if (!has_valid_value) {
4366
0
    return TPM_RC_VALUE;
4367
0
  }
4368
0
  return TPM_RC_SUCCESS;
4369
0
}
4370
4371
UINT16 TPMI_RH_PLATFORM_Marshal(TPMI_RH_PLATFORM* source,
4372
                                BYTE** buffer,
4373
0
                                INT32* size) {
4374
0
  return uint32_t_Marshal(source, buffer, size);
4375
0
}
4376
4377
TPM_RC TPMI_RH_PLATFORM_Unmarshal(TPMI_RH_PLATFORM* target,
4378
                                  BYTE** buffer,
4379
57
                                  INT32* size) {
4380
57
  TPM_RC result;
4381
57
  BOOL has_valid_value = FALSE;
4382
57
  result = uint32_t_Unmarshal(target, buffer, size);
4383
57
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4384
24
    return result;
4385
24
  }
4386
33
  switch (*target) {
4387
27
    case TPM_RH_PLATFORM:
4388
27
      has_valid_value = TRUE;
4389
27
      break;
4390
33
  }
4391
33
  if (!has_valid_value) {
4392
6
    return TPM_RC_VALUE;
4393
6
  }
4394
27
  return TPM_RC_SUCCESS;
4395
33
}
4396
4397
UINT16 TPMI_RH_PROVISION_Marshal(TPMI_RH_PROVISION* source,
4398
                                 BYTE** buffer,
4399
0
                                 INT32* size) {
4400
0
  return uint32_t_Marshal(source, buffer, size);
4401
0
}
4402
4403
TPM_RC TPMI_RH_PROVISION_Unmarshal(TPMI_RH_PROVISION* target,
4404
                                   BYTE** buffer,
4405
299
                                   INT32* size) {
4406
299
  TPM_RC result;
4407
299
  BOOL has_valid_value = FALSE;
4408
299
  result = uint32_t_Unmarshal(target, buffer, size);
4409
299
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4410
5
    return result;
4411
5
  }
4412
294
  switch (*target) {
4413
105
    case TPM_RH_OWNER:
4414
239
    case TPM_RH_PLATFORM:
4415
239
      has_valid_value = TRUE;
4416
239
      break;
4417
294
  }
4418
294
  if (!has_valid_value) {
4419
55
    return TPM_RC_VALUE;
4420
55
  }
4421
239
  return TPM_RC_SUCCESS;
4422
294
}
4423
4424
UINT16 TPMI_SH_AUTH_SESSION_Marshal(TPMI_SH_AUTH_SESSION* source,
4425
                                    BYTE** buffer,
4426
15
                                    INT32* size) {
4427
15
  return uint32_t_Marshal(source, buffer, size);
4428
15
}
4429
4430
TPM_RC TPMI_SH_AUTH_SESSION_Unmarshal(TPMI_SH_AUTH_SESSION* target,
4431
                                      BYTE** buffer,
4432
                                      INT32* size,
4433
1.14k
                                      BOOL allow_conditional_value) {
4434
1.14k
  TPM_RC result;
4435
1.14k
  BOOL has_valid_value = FALSE;
4436
1.14k
  result = uint32_t_Unmarshal(target, buffer, size);
4437
1.14k
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4438
2
    return result;
4439
2
  }
4440
1.14k
  if (*target == TPM_RS_PW) {
4441
993
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
4442
993
  }
4443
150
  if ((*target >= HMAC_SESSION_FIRST) && (*target <= HMAC_SESSION_LAST)) {
4444
23
    has_valid_value = TRUE;
4445
23
  }
4446
150
  if ((*target >= POLICY_SESSION_FIRST) && (*target <= POLICY_SESSION_LAST)) {
4447
15
    has_valid_value = TRUE;
4448
15
  }
4449
150
  if (!has_valid_value) {
4450
112
    return TPM_RC_VALUE;
4451
112
  }
4452
38
  return TPM_RC_SUCCESS;
4453
150
}
4454
4455
0
UINT16 TPMI_SH_HMAC_Marshal(TPMI_SH_HMAC* source, BYTE** buffer, INT32* size) {
4456
0
  return uint32_t_Marshal(source, buffer, size);
4457
0
}
4458
4459
TPM_RC TPMI_SH_HMAC_Unmarshal(TPMI_SH_HMAC* target,
4460
                              BYTE** buffer,
4461
0
                              INT32* size) {
4462
0
  TPM_RC result;
4463
0
  BOOL has_valid_value = FALSE;
4464
0
  result = uint32_t_Unmarshal(target, buffer, size);
4465
0
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4466
0
    return result;
4467
0
  }
4468
0
  if ((*target >= HMAC_SESSION_FIRST) && (*target <= HMAC_SESSION_LAST)) {
4469
0
    has_valid_value = TRUE;
4470
0
  }
4471
0
  if (!has_valid_value) {
4472
0
    return TPM_RC_VALUE;
4473
0
  }
4474
0
  return TPM_RC_SUCCESS;
4475
0
}
4476
4477
UINT16 TPMI_SH_POLICY_Marshal(TPMI_SH_POLICY* source,
4478
                              BYTE** buffer,
4479
0
                              INT32* size) {
4480
0
  return uint32_t_Marshal(source, buffer, size);
4481
0
}
4482
4483
TPM_RC TPMI_SH_POLICY_Unmarshal(TPMI_SH_POLICY* target,
4484
                                BYTE** buffer,
4485
169
                                INT32* size) {
4486
169
  TPM_RC result;
4487
169
  BOOL has_valid_value = FALSE;
4488
169
  result = uint32_t_Unmarshal(target, buffer, size);
4489
169
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4490
78
    return result;
4491
78
  }
4492
91
  if ((*target >= POLICY_SESSION_FIRST) && (*target <= POLICY_SESSION_LAST)) {
4493
20
    has_valid_value = TRUE;
4494
20
  }
4495
91
  if (!has_valid_value) {
4496
71
    return TPM_RC_VALUE;
4497
71
  }
4498
20
  return TPM_RC_SUCCESS;
4499
91
}
4500
4501
UINT16 TPMI_ST_ATTEST_Marshal(TPMI_ST_ATTEST* source,
4502
                              BYTE** buffer,
4503
0
                              INT32* size) {
4504
0
  return uint16_t_Marshal(source, buffer, size);
4505
0
}
4506
4507
TPM_RC TPMI_ST_ATTEST_Unmarshal(TPMI_ST_ATTEST* target,
4508
                                BYTE** buffer,
4509
0
                                INT32* size) {
4510
0
  TPM_RC result;
4511
0
  BOOL has_valid_value = FALSE;
4512
0
  result = uint16_t_Unmarshal(target, buffer, size);
4513
0
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4514
0
    return result;
4515
0
  }
4516
0
  switch (*target) {
4517
0
    case TPM_ST_ATTEST_CERTIFY:
4518
0
    case TPM_ST_ATTEST_QUOTE:
4519
0
    case TPM_ST_ATTEST_SESSION_AUDIT:
4520
0
    case TPM_ST_ATTEST_COMMAND_AUDIT:
4521
0
    case TPM_ST_ATTEST_TIME:
4522
0
    case TPM_ST_ATTEST_CREATION:
4523
0
    case TPM_ST_ATTEST_NV:
4524
0
      has_valid_value = TRUE;
4525
0
      break;
4526
0
  }
4527
0
  if (!has_valid_value) {
4528
0
    return TPM_RC_VALUE;
4529
0
  }
4530
0
  return TPM_RC_SUCCESS;
4531
0
}
4532
4533
UINT16 TPMI_ST_COMMAND_TAG_Marshal(TPMI_ST_COMMAND_TAG* source,
4534
                                   BYTE** buffer,
4535
0
                                   INT32* size) {
4536
0
  return uint16_t_Marshal(source, buffer, size);
4537
0
}
4538
4539
TPM_RC TPMI_ST_COMMAND_TAG_Unmarshal(TPMI_ST_COMMAND_TAG* target,
4540
                                     BYTE** buffer,
4541
11.2k
                                     INT32* size) {
4542
11.2k
  TPM_RC result;
4543
11.2k
  BOOL has_valid_value = FALSE;
4544
11.2k
  result = uint16_t_Unmarshal(target, buffer, size);
4545
11.2k
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4546
2
    return result;
4547
2
  }
4548
11.2k
  switch (*target) {
4549
9.32k
    case TPM_ST_NO_SESSIONS:
4550
11.2k
    case TPM_ST_SESSIONS:
4551
11.2k
      has_valid_value = TRUE;
4552
11.2k
      break;
4553
11.2k
  }
4554
11.2k
  if (!has_valid_value) {
4555
38
    return TPM_RC_BAD_TAG;
4556
38
  }
4557
11.2k
  return TPM_RC_SUCCESS;
4558
11.2k
}
4559
4560
797
UINT16 TPMI_YES_NO_Marshal(TPMI_YES_NO* source, BYTE** buffer, INT32* size) {
4561
797
  return uint8_t_Marshal(source, buffer, size);
4562
797
}
4563
4564
31
TPM_RC TPMI_YES_NO_Unmarshal(TPMI_YES_NO* target, BYTE** buffer, INT32* size) {
4565
31
  TPM_RC result;
4566
31
  BOOL has_valid_value = FALSE;
4567
31
  result = uint8_t_Unmarshal(target, buffer, size);
4568
31
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4569
5
    return result;
4570
5
  }
4571
26
  switch (*target) {
4572
13
    case NO:
4573
22
    case YES:
4574
22
      has_valid_value = TRUE;
4575
22
      break;
4576
26
  }
4577
26
  if (!has_valid_value) {
4578
4
    return TPM_RC_VALUE;
4579
4
  }
4580
22
  return TPM_RC_SUCCESS;
4581
26
}
4582
4583
0
UINT16 TPML_ALG_Marshal(TPML_ALG* source, BYTE** buffer, INT32* size) {
4584
0
  UINT16 total_size = 0;
4585
0
  INT32 i;
4586
0
  total_size += UINT32_Marshal(&source->count, buffer, size);
4587
0
  for (i = 0; i < source->count; ++i) {
4588
0
    total_size += TPM_ALG_ID_Marshal(&source->algorithms[i], buffer, size);
4589
0
  }
4590
0
  return total_size;
4591
0
}
4592
4593
0
TPM_RC TPML_ALG_Unmarshal(TPML_ALG* target, BYTE** buffer, INT32* size) {
4594
0
  TPM_RC result;
4595
0
  INT32 i;
4596
0
  result = UINT32_Unmarshal(&target->count, buffer, size);
4597
0
  if (result != TPM_RC_SUCCESS) {
4598
0
    return result;
4599
0
  }
4600
0
  if (target->count > MAX_ALG_LIST_SIZE) {
4601
0
    return TPM_RC_SIZE;
4602
0
  }
4603
0
  for (i = 0; i < target->count; ++i) {
4604
0
    result = TPM_ALG_ID_Unmarshal(&target->algorithms[i], buffer, size);
4605
0
    if (result != TPM_RC_SUCCESS) {
4606
0
      return result;
4607
0
    }
4608
0
  }
4609
0
  return TPM_RC_SUCCESS;
4610
0
}
4611
4612
UINT16 TPMS_ALG_PROPERTY_Marshal(TPMS_ALG_PROPERTY* source,
4613
                                 BYTE** buffer,
4614
195
                                 INT32* size) {
4615
195
  UINT16 total_size = 0;
4616
195
  total_size += TPM_ALG_ID_Marshal(&source->alg, buffer, size);
4617
195
  total_size += TPMA_ALGORITHM_Marshal(&source->algProperties, buffer, size);
4618
195
  return total_size;
4619
195
}
4620
4621
TPM_RC TPMS_ALG_PROPERTY_Unmarshal(TPMS_ALG_PROPERTY* target,
4622
                                   BYTE** buffer,
4623
0
                                   INT32* size) {
4624
0
  TPM_RC result;
4625
0
  result = TPM_ALG_ID_Unmarshal(&target->alg, buffer, size);
4626
0
  if (result != TPM_RC_SUCCESS) {
4627
0
    return result;
4628
0
  }
4629
0
  result = TPMA_ALGORITHM_Unmarshal(&target->algProperties, buffer, size);
4630
0
  if (result != TPM_RC_SUCCESS) {
4631
0
    return result;
4632
0
  }
4633
0
  return TPM_RC_SUCCESS;
4634
0
}
4635
4636
UINT16 TPML_ALG_PROPERTY_Marshal(TPML_ALG_PROPERTY* source,
4637
                                 BYTE** buffer,
4638
24
                                 INT32* size) {
4639
24
  UINT16 total_size = 0;
4640
24
  INT32 i;
4641
24
  total_size += UINT32_Marshal(&source->count, buffer, size);
4642
219
  for (i = 0; i < source->count; ++i) {
4643
195
    total_size +=
4644
195
        TPMS_ALG_PROPERTY_Marshal(&source->algProperties[i], buffer, size);
4645
195
  }
4646
24
  return total_size;
4647
24
}
4648
4649
TPM_RC TPML_ALG_PROPERTY_Unmarshal(TPML_ALG_PROPERTY* target,
4650
                                   BYTE** buffer,
4651
0
                                   INT32* size) {
4652
0
  TPM_RC result;
4653
0
  INT32 i;
4654
0
  result = UINT32_Unmarshal(&target->count, buffer, size);
4655
0
  if (result != TPM_RC_SUCCESS) {
4656
0
    return result;
4657
0
  }
4658
0
  if (target->count > MAX_CAP_ALGS) {
4659
0
    return TPM_RC_SIZE;
4660
0
  }
4661
0
  for (i = 0; i < target->count; ++i) {
4662
0
    result =
4663
0
        TPMS_ALG_PROPERTY_Unmarshal(&target->algProperties[i], buffer, size);
4664
0
    if (result != TPM_RC_SUCCESS) {
4665
0
      return result;
4666
0
    }
4667
0
  }
4668
0
  return TPM_RC_SUCCESS;
4669
0
}
4670
4671
0
UINT16 TPM_CC_Marshal(TPM_CC* source, BYTE** buffer, INT32* size) {
4672
0
  return uint32_t_Marshal(source, buffer, size);
4673
0
}
4674
4675
11.1k
TPM_RC TPM_CC_Unmarshal(TPM_CC* target, BYTE** buffer, INT32* size) {
4676
11.1k
  TPM_RC result;
4677
11.1k
  result = uint32_t_Unmarshal(target, buffer, size);
4678
11.1k
  if (result != TPM_RC_SUCCESS) {
4679
4
    return result;
4680
4
  }
4681
11.1k
#if IS_CC_ENABLED(NV_UndefineSpaceSpecial)
4682
11.1k
  if (*target == TPM_CC_NV_UndefineSpaceSpecial) {
4683
61
    return TPM_RC_SUCCESS;
4684
61
  }
4685
11.1k
#endif
4686
11.1k
#if IS_CC_ENABLED(EvictControl)
4687
11.1k
  if (*target == TPM_CC_EvictControl) {
4688
18
    return TPM_RC_SUCCESS;
4689
18
  }
4690
11.0k
#endif
4691
11.0k
#if IS_CC_ENABLED(HierarchyControl)
4692
11.0k
  if (*target == TPM_CC_HierarchyControl) {
4693
124
    return TPM_RC_SUCCESS;
4694
124
  }
4695
10.9k
#endif
4696
10.9k
#if IS_CC_ENABLED(NV_UndefineSpace)
4697
10.9k
  if (*target == TPM_CC_NV_UndefineSpace) {
4698
22
    return TPM_RC_SUCCESS;
4699
22
  }
4700
10.9k
#endif
4701
#if IS_CC_ENABLED(ChangeEPS)
4702
  if (*target == TPM_CC_ChangeEPS) {
4703
    return TPM_RC_SUCCESS;
4704
  }
4705
#endif
4706
#if IS_CC_ENABLED(ChangePPS)
4707
  if (*target == TPM_CC_ChangePPS) {
4708
    return TPM_RC_SUCCESS;
4709
  }
4710
#endif
4711
10.9k
#if IS_CC_ENABLED(Clear)
4712
10.9k
  if (*target == TPM_CC_Clear) {
4713
77
    return TPM_RC_SUCCESS;
4714
77
  }
4715
10.8k
#endif
4716
#if IS_CC_ENABLED(ClearControl)
4717
  if (*target == TPM_CC_ClearControl) {
4718
    return TPM_RC_SUCCESS;
4719
  }
4720
#endif
4721
#if IS_CC_ENABLED(ClockSet)
4722
  if (*target == TPM_CC_ClockSet) {
4723
    return TPM_RC_SUCCESS;
4724
  }
4725
#endif
4726
10.8k
#if IS_CC_ENABLED(HierarchyChangeAuth)
4727
10.8k
  if (*target == TPM_CC_HierarchyChangeAuth) {
4728
77
    return TPM_RC_SUCCESS;
4729
77
  }
4730
10.7k
#endif
4731
10.7k
#if IS_CC_ENABLED(NV_DefineSpace)
4732
10.7k
  if (*target == TPM_CC_NV_DefineSpace) {
4733
259
    return TPM_RC_SUCCESS;
4734
259
  }
4735
10.5k
#endif
4736
10.5k
#if IS_CC_ENABLED(PCR_Allocate)
4737
10.5k
  if (*target == TPM_CC_PCR_Allocate) {
4738
34
    return TPM_RC_SUCCESS;
4739
34
  }
4740
10.4k
#endif
4741
#if IS_CC_ENABLED(PCR_SetAuthPolicy)
4742
  if (*target == TPM_CC_PCR_SetAuthPolicy) {
4743
    return TPM_RC_SUCCESS;
4744
  }
4745
#endif
4746
#if IS_CC_ENABLED(PP_Commands)
4747
  if (*target == TPM_CC_PP_Commands) {
4748
    return TPM_RC_SUCCESS;
4749
  }
4750
#endif
4751
#if IS_CC_ENABLED(SetPrimaryPolicy)
4752
  if (*target == TPM_CC_SetPrimaryPolicy) {
4753
    return TPM_RC_SUCCESS;
4754
  }
4755
#endif
4756
#if IS_CC_ENABLED(FieldUpgradeStart)
4757
  if (*target == TPM_CC_FieldUpgradeStart) {
4758
    return TPM_RC_SUCCESS;
4759
  }
4760
#endif
4761
#if IS_CC_ENABLED(ClockRateAdjust)
4762
  if (*target == TPM_CC_ClockRateAdjust) {
4763
    return TPM_RC_SUCCESS;
4764
  }
4765
#endif
4766
10.4k
#if IS_CC_ENABLED(CreatePrimary)
4767
10.4k
  if (*target == TPM_CC_CreatePrimary) {
4768
372
    return TPM_RC_SUCCESS;
4769
372
  }
4770
10.1k
#endif
4771
#if IS_CC_ENABLED(NV_GlobalWriteLock)
4772
  if (*target == TPM_CC_NV_GlobalWriteLock) {
4773
    return TPM_RC_SUCCESS;
4774
  }
4775
#endif
4776
#if IS_CC_ENABLED(GetCommandAuditDigest)
4777
  if (*target == TPM_CC_GetCommandAuditDigest) {
4778
    return TPM_RC_SUCCESS;
4779
  }
4780
#endif
4781
10.1k
#if IS_CC_ENABLED(NV_Increment)
4782
10.1k
  if (*target == TPM_CC_NV_Increment) {
4783
26
    return TPM_RC_SUCCESS;
4784
26
  }
4785
10.0k
#endif
4786
#if IS_CC_ENABLED(NV_SetBits)
4787
  if (*target == TPM_CC_NV_SetBits) {
4788
    return TPM_RC_SUCCESS;
4789
  }
4790
#endif
4791
10.0k
#if IS_CC_ENABLED(NV_Extend)
4792
10.0k
  if (*target == TPM_CC_NV_Extend) {
4793
14
    return TPM_RC_SUCCESS;
4794
14
  }
4795
10.0k
#endif
4796
10.0k
#if IS_CC_ENABLED(NV_Write)
4797
10.0k
  if (*target == TPM_CC_NV_Write) {
4798
17
    return TPM_RC_SUCCESS;
4799
17
  }
4800
10.0k
#endif
4801
10.0k
#if IS_CC_ENABLED(NV_WriteLock)
4802
10.0k
  if (*target == TPM_CC_NV_WriteLock) {
4803
27
    return TPM_RC_SUCCESS;
4804
27
  }
4805
10.0k
#endif
4806
10.0k
#if IS_CC_ENABLED(DictionaryAttackLockReset)
4807
10.0k
  if (*target == TPM_CC_DictionaryAttackLockReset) {
4808
44
    return TPM_RC_SUCCESS;
4809
44
  }
4810
9.99k
#endif
4811
9.99k
#if IS_CC_ENABLED(DictionaryAttackParameters)
4812
9.99k
  if (*target == TPM_CC_DictionaryAttackParameters) {
4813
27
    return TPM_RC_SUCCESS;
4814
27
  }
4815
9.96k
#endif
4816
#if IS_CC_ENABLED(NV_ChangeAuth)
4817
  if (*target == TPM_CC_NV_ChangeAuth) {
4818
    return TPM_RC_SUCCESS;
4819
  }
4820
#endif
4821
#if IS_CC_ENABLED(PCR_Event)
4822
  if (*target == TPM_CC_PCR_Event) {
4823
    return TPM_RC_SUCCESS;
4824
  }
4825
#endif
4826
9.96k
#if IS_CC_ENABLED(PCR_Reset)
4827
9.96k
  if (*target == TPM_CC_PCR_Reset) {
4828
65
    return TPM_RC_SUCCESS;
4829
65
  }
4830
9.90k
#endif
4831
#if IS_CC_ENABLED(SequenceComplete)
4832
  if (*target == TPM_CC_SequenceComplete) {
4833
    return TPM_RC_SUCCESS;
4834
  }
4835
#endif
4836
#if IS_CC_ENABLED(SetAlgorithmSet)
4837
  if (*target == TPM_CC_SetAlgorithmSet) {
4838
    return TPM_RC_SUCCESS;
4839
  }
4840
#endif
4841
#if IS_CC_ENABLED(SetCommandCodeAuditStatus)
4842
  if (*target == TPM_CC_SetCommandCodeAuditStatus) {
4843
    return TPM_RC_SUCCESS;
4844
  }
4845
#endif
4846
#if IS_CC_ENABLED(FieldUpgradeData)
4847
  if (*target == TPM_CC_FieldUpgradeData) {
4848
    return TPM_RC_SUCCESS;
4849
  }
4850
#endif
4851
#if IS_CC_ENABLED(IncrementalSelfTest)
4852
  if (*target == TPM_CC_IncrementalSelfTest) {
4853
    return TPM_RC_SUCCESS;
4854
  }
4855
#endif
4856
9.90k
#if IS_CC_ENABLED(SelfTest)
4857
9.90k
  if (*target == TPM_CC_SelfTest) {
4858
69
    return TPM_RC_SUCCESS;
4859
69
  }
4860
9.83k
#endif
4861
9.83k
#if IS_CC_ENABLED(Startup)
4862
9.83k
  if (*target == TPM_CC_Startup) {
4863
5.63k
    return TPM_RC_SUCCESS;
4864
5.63k
  }
4865
4.19k
#endif
4866
4.19k
#if IS_CC_ENABLED(Shutdown)
4867
4.19k
  if (*target == TPM_CC_Shutdown) {
4868
26
    return TPM_RC_SUCCESS;
4869
26
  }
4870
4.16k
#endif
4871
4.16k
#if IS_CC_ENABLED(StirRandom)
4872
4.16k
  if (*target == TPM_CC_StirRandom) {
4873
63
    return TPM_RC_SUCCESS;
4874
63
  }
4875
4.10k
#endif
4876
4.10k
#if IS_CC_ENABLED(ActivateCredential)
4877
4.10k
  if (*target == TPM_CC_ActivateCredential) {
4878
10
    return TPM_RC_SUCCESS;
4879
10
  }
4880
4.09k
#endif
4881
4.09k
#if IS_CC_ENABLED(Certify)
4882
4.09k
  if (*target == TPM_CC_Certify) {
4883
8
    return TPM_RC_SUCCESS;
4884
8
  }
4885
4.08k
#endif
4886
#if IS_CC_ENABLED(PolicyNV)
4887
  if (*target == TPM_CC_PolicyNV) {
4888
    return TPM_RC_SUCCESS;
4889
  }
4890
#endif
4891
4.08k
#if IS_CC_ENABLED(CertifyCreation)
4892
4.08k
  if (*target == TPM_CC_CertifyCreation) {
4893
8
    return TPM_RC_SUCCESS;
4894
8
  }
4895
4.07k
#endif
4896
#if IS_CC_ENABLED(Duplicate)
4897
  if (*target == TPM_CC_Duplicate) {
4898
    return TPM_RC_SUCCESS;
4899
  }
4900
#endif
4901
#if IS_CC_ENABLED(GetTime)
4902
  if (*target == TPM_CC_GetTime) {
4903
    return TPM_RC_SUCCESS;
4904
  }
4905
#endif
4906
#if IS_CC_ENABLED(GetSessionAuditDigest)
4907
  if (*target == TPM_CC_GetSessionAuditDigest) {
4908
    return TPM_RC_SUCCESS;
4909
  }
4910
#endif
4911
4.07k
#if IS_CC_ENABLED(NV_Read)
4912
4.07k
  if (*target == TPM_CC_NV_Read) {
4913
17
    return TPM_RC_SUCCESS;
4914
17
  }
4915
4.06k
#endif
4916
4.06k
#if IS_CC_ENABLED(NV_ReadLock)
4917
4.06k
  if (*target == TPM_CC_NV_ReadLock) {
4918
21
    return TPM_RC_SUCCESS;
4919
21
  }
4920
4.04k
#endif
4921
4.04k
#if IS_CC_ENABLED(ObjectChangeAuth)
4922
4.04k
  if (*target == TPM_CC_ObjectChangeAuth) {
4923
13
    return TPM_RC_SUCCESS;
4924
13
  }
4925
4.02k
#endif
4926
4.02k
#if IS_CC_ENABLED(PolicySecret)
4927
4.02k
  if (*target == TPM_CC_PolicySecret) {
4928
275
    return TPM_RC_SUCCESS;
4929
275
  }
4930
3.75k
#endif
4931
#if IS_CC_ENABLED(Rewrap)
4932
  if (*target == TPM_CC_Rewrap) {
4933
    return TPM_RC_SUCCESS;
4934
  }
4935
#endif
4936
3.75k
#if IS_CC_ENABLED(Create)
4937
3.75k
  if (*target == TPM_CC_Create) {
4938
9
    return TPM_RC_SUCCESS;
4939
9
  }
4940
3.74k
#endif
4941
3.74k
#if IS_CC_ENABLED(ECDH_ZGen)
4942
3.74k
  if (*target == TPM_CC_ECDH_ZGen) {
4943
13
    return TPM_RC_SUCCESS;
4944
13
  }
4945
3.73k
#endif
4946
3.73k
#if IS_CC_ENABLED(HMAC)
4947
3.73k
  if (*target == TPM_CC_HMAC) {
4948
20
    return TPM_RC_SUCCESS;
4949
20
  }
4950
3.71k
#endif
4951
3.71k
#if IS_CC_ENABLED(Import)
4952
3.71k
  if (*target == TPM_CC_Import) {
4953
11
    return TPM_RC_SUCCESS;
4954
11
  }
4955
3.70k
#endif
4956
3.70k
#if IS_CC_ENABLED(Load)
4957
3.70k
  if (*target == TPM_CC_Load) {
4958
6
    return TPM_RC_SUCCESS;
4959
6
  }
4960
3.69k
#endif
4961
3.69k
#if IS_CC_ENABLED(Quote)
4962
3.69k
  if (*target == TPM_CC_Quote) {
4963
114
    return TPM_RC_SUCCESS;
4964
114
  }
4965
3.58k
#endif
4966
3.58k
#if IS_CC_ENABLED(RSA_Decrypt)
4967
3.58k
  if (*target == TPM_CC_RSA_Decrypt) {
4968
18
    return TPM_RC_SUCCESS;
4969
18
  }
4970
3.56k
#endif
4971
#if IS_CC_ENABLED(HMAC_Start)
4972
  if (*target == TPM_CC_HMAC_Start) {
4973
    return TPM_RC_SUCCESS;
4974
  }
4975
#endif
4976
#if IS_CC_ENABLED(SequenceUpdate)
4977
  if (*target == TPM_CC_SequenceUpdate) {
4978
    return TPM_RC_SUCCESS;
4979
  }
4980
#endif
4981
3.56k
#if IS_CC_ENABLED(Sign)
4982
3.56k
  if (*target == TPM_CC_Sign) {
4983
8
    return TPM_RC_SUCCESS;
4984
8
  }
4985
3.55k
#endif
4986
3.55k
#if IS_CC_ENABLED(Unseal)
4987
3.55k
  if (*target == TPM_CC_Unseal) {
4988
8
    return TPM_RC_SUCCESS;
4989
8
  }
4990
3.54k
#endif
4991
3.54k
#if IS_CC_ENABLED(PolicySigned)
4992
3.54k
  if (*target == TPM_CC_PolicySigned) {
4993
15
    return TPM_RC_SUCCESS;
4994
15
  }
4995
3.53k
#endif
4996
3.53k
#if IS_CC_ENABLED(ContextLoad)
4997
3.53k
  if (*target == TPM_CC_ContextLoad) {
4998
311
    return TPM_RC_SUCCESS;
4999
311
  }
5000
3.22k
#endif
5001
3.22k
#if IS_CC_ENABLED(ContextSave)
5002
3.22k
  if (*target == TPM_CC_ContextSave) {
5003
85
    return TPM_RC_SUCCESS;
5004
85
  }
5005
3.13k
#endif
5006
3.13k
#if IS_CC_ENABLED(ECDH_KeyGen)
5007
3.13k
  if (*target == TPM_CC_ECDH_KeyGen) {
5008
11
    return TPM_RC_SUCCESS;
5009
11
  }
5010
3.12k
#endif
5011
#if IS_CC_ENABLED(EncryptDecrypt)
5012
  if (*target == TPM_CC_EncryptDecrypt) {
5013
    return TPM_RC_SUCCESS;
5014
  }
5015
#endif
5016
3.12k
#if IS_CC_ENABLED(FlushContext)
5017
3.12k
  if (*target == TPM_CC_FlushContext) {
5018
74
    return TPM_RC_SUCCESS;
5019
74
  }
5020
3.05k
#endif
5021
3.05k
#if IS_CC_ENABLED(LoadExternal)
5022
3.05k
  if (*target == TPM_CC_LoadExternal) {
5023
1.06k
    return TPM_RC_SUCCESS;
5024
1.06k
  }
5025
1.99k
#endif
5026
#if IS_CC_ENABLED(MakeCredential)
5027
  if (*target == TPM_CC_MakeCredential) {
5028
    return TPM_RC_SUCCESS;
5029
  }
5030
#endif
5031
1.99k
#if IS_CC_ENABLED(NV_ReadPublic)
5032
1.99k
  if (*target == TPM_CC_NV_ReadPublic) {
5033
29
    return TPM_RC_SUCCESS;
5034
29
  }
5035
1.96k
#endif
5036
#if IS_CC_ENABLED(PolicyAuthorize)
5037
  if (*target == TPM_CC_PolicyAuthorize) {
5038
    return TPM_RC_SUCCESS;
5039
  }
5040
#endif
5041
1.96k
#if IS_CC_ENABLED(PolicyAuthValue)
5042
1.96k
  if (*target == TPM_CC_PolicyAuthValue) {
5043
18
    return TPM_RC_SUCCESS;
5044
18
  }
5045
1.94k
#endif
5046
1.94k
#if IS_CC_ENABLED(PolicyCommandCode)
5047
1.94k
  if (*target == TPM_CC_PolicyCommandCode) {
5048
11
    return TPM_RC_SUCCESS;
5049
11
  }
5050
1.93k
#endif
5051
#if IS_CC_ENABLED(PolicyCounterTimer)
5052
  if (*target == TPM_CC_PolicyCounterTimer) {
5053
    return TPM_RC_SUCCESS;
5054
  }
5055
#endif
5056
#if IS_CC_ENABLED(PolicyCpHash)
5057
  if (*target == TPM_CC_PolicyCpHash) {
5058
    return TPM_RC_SUCCESS;
5059
  }
5060
#endif
5061
#if IS_CC_ENABLED(PolicyLocality)
5062
  if (*target == TPM_CC_PolicyLocality) {
5063
    return TPM_RC_SUCCESS;
5064
  }
5065
#endif
5066
#if IS_CC_ENABLED(PolicyNameHash)
5067
  if (*target == TPM_CC_PolicyNameHash) {
5068
    return TPM_RC_SUCCESS;
5069
  }
5070
#endif
5071
1.93k
#if IS_CC_ENABLED(PolicyOR)
5072
1.93k
  if (*target == TPM_CC_PolicyOR) {
5073
9
    return TPM_RC_SUCCESS;
5074
9
  }
5075
1.92k
#endif
5076
#if IS_CC_ENABLED(PolicyTicket)
5077
  if (*target == TPM_CC_PolicyTicket) {
5078
    return TPM_RC_SUCCESS;
5079
  }
5080
#endif
5081
1.92k
#if IS_CC_ENABLED(ReadPublic)
5082
1.92k
  if (*target == TPM_CC_ReadPublic) {
5083
12
    return TPM_RC_SUCCESS;
5084
12
  }
5085
1.91k
#endif
5086
1.91k
#if IS_CC_ENABLED(RSA_Encrypt)
5087
1.91k
  if (*target == TPM_CC_RSA_Encrypt) {
5088
11
    return TPM_RC_SUCCESS;
5089
11
  }
5090
1.90k
#endif
5091
1.90k
#if IS_CC_ENABLED(StartAuthSession)
5092
1.90k
  if (*target == TPM_CC_StartAuthSession) {
5093
214
    return TPM_RC_SUCCESS;
5094
214
  }
5095
1.68k
#endif
5096
1.68k
#if IS_CC_ENABLED(VerifySignature)
5097
1.68k
  if (*target == TPM_CC_VerifySignature) {
5098
7
    return TPM_RC_SUCCESS;
5099
7
  }
5100
1.67k
#endif
5101
1.67k
#if IS_CC_ENABLED(ECC_Parameters)
5102
1.67k
  if (*target == TPM_CC_ECC_Parameters) {
5103
31
    return TPM_RC_SUCCESS;
5104
31
  }
5105
1.64k
#endif
5106
#if IS_CC_ENABLED(FirmwareRead)
5107
  if (*target == TPM_CC_FirmwareRead) {
5108
    return TPM_RC_SUCCESS;
5109
  }
5110
#endif
5111
1.64k
#if IS_CC_ENABLED(GetCapability)
5112
1.64k
  if (*target == TPM_CC_GetCapability) {
5113
926
    return TPM_RC_SUCCESS;
5114
926
  }
5115
722
#endif
5116
722
#if IS_CC_ENABLED(GetRandom)
5117
722
  if (*target == TPM_CC_GetRandom) {
5118
41
    return TPM_RC_SUCCESS;
5119
41
  }
5120
681
#endif
5121
681
#if IS_CC_ENABLED(GetTestResult)
5122
681
  if (*target == TPM_CC_GetTestResult) {
5123
72
    return TPM_RC_SUCCESS;
5124
72
  }
5125
609
#endif
5126
609
#if IS_CC_ENABLED(Hash)
5127
609
  if (*target == TPM_CC_Hash) {
5128
77
    return TPM_RC_SUCCESS;
5129
77
  }
5130
532
#endif
5131
532
#if IS_CC_ENABLED(PCR_Read)
5132
532
  if (*target == TPM_CC_PCR_Read) {
5133
137
    return TPM_RC_SUCCESS;
5134
137
  }
5135
395
#endif
5136
395
#if IS_CC_ENABLED(PolicyPCR)
5137
395
  if (*target == TPM_CC_PolicyPCR) {
5138
11
    return TPM_RC_SUCCESS;
5139
11
  }
5140
384
#endif
5141
384
#if IS_CC_ENABLED(PolicyRestart)
5142
384
  if (*target == TPM_CC_PolicyRestart) {
5143
22
    return TPM_RC_SUCCESS;
5144
22
  }
5145
362
#endif
5146
#if IS_CC_ENABLED(ReadClock)
5147
  if (*target == TPM_CC_ReadClock) {
5148
    return TPM_RC_SUCCESS;
5149
  }
5150
#endif
5151
362
#if IS_CC_ENABLED(PCR_Extend)
5152
362
  if (*target == TPM_CC_PCR_Extend) {
5153
151
    return TPM_RC_SUCCESS;
5154
151
  }
5155
211
#endif
5156
#if IS_CC_ENABLED(PCR_SetAuthValue)
5157
  if (*target == TPM_CC_PCR_SetAuthValue) {
5158
    return TPM_RC_SUCCESS;
5159
  }
5160
#endif
5161
211
#if IS_CC_ENABLED(NV_Certify)
5162
211
  if (*target == TPM_CC_NV_Certify) {
5163
5
    return TPM_RC_SUCCESS;
5164
5
  }
5165
206
#endif
5166
#if IS_CC_ENABLED(EventSequenceComplete)
5167
  if (*target == TPM_CC_EventSequenceComplete) {
5168
    return TPM_RC_SUCCESS;
5169
  }
5170
#endif
5171
#if IS_CC_ENABLED(HashSequenceStart)
5172
  if (*target == TPM_CC_HashSequenceStart) {
5173
    return TPM_RC_SUCCESS;
5174
  }
5175
#endif
5176
#if IS_CC_ENABLED(PolicyPhysicalPresence)
5177
  if (*target == TPM_CC_PolicyPhysicalPresence) {
5178
    return TPM_RC_SUCCESS;
5179
  }
5180
#endif
5181
#if IS_CC_ENABLED(PolicyDuplicationSelect)
5182
  if (*target == TPM_CC_PolicyDuplicationSelect) {
5183
    return TPM_RC_SUCCESS;
5184
  }
5185
#endif
5186
206
#if IS_CC_ENABLED(PolicyGetDigest)
5187
206
  if (*target == TPM_CC_PolicyGetDigest) {
5188
9
    return TPM_RC_SUCCESS;
5189
9
  }
5190
197
#endif
5191
#if IS_CC_ENABLED(TestParms)
5192
  if (*target == TPM_CC_TestParms) {
5193
    return TPM_RC_SUCCESS;
5194
  }
5195
#endif
5196
197
#if IS_CC_ENABLED(Commit)
5197
197
  if (*target == TPM_CC_Commit) {
5198
6
    return TPM_RC_SUCCESS;
5199
6
  }
5200
191
#endif
5201
#if IS_CC_ENABLED(PolicyPassword)
5202
  if (*target == TPM_CC_PolicyPassword) {
5203
    return TPM_RC_SUCCESS;
5204
  }
5205
#endif
5206
#if IS_CC_ENABLED(ZGen_2Phase)
5207
  if (*target == TPM_CC_ZGen_2Phase) {
5208
    return TPM_RC_SUCCESS;
5209
  }
5210
#endif
5211
#if IS_CC_ENABLED(EC_Ephemeral)
5212
  if (*target == TPM_CC_EC_Ephemeral) {
5213
    return TPM_RC_SUCCESS;
5214
  }
5215
#endif
5216
#if IS_CC_ENABLED(PolicyNvWritten)
5217
  if (*target == TPM_CC_PolicyNvWritten) {
5218
    return TPM_RC_SUCCESS;
5219
  }
5220
#endif
5221
191
#if IS_CCE_ENABLED(PolicyFidoSigned)
5222
191
  if (*target == TPM_CCE_PolicyFidoSigned) {
5223
7
    return TPM_RC_SUCCESS;
5224
7
  }
5225
184
#endif
5226
184
  return TPM_RC_COMMAND_CODE;
5227
191
}
5228
5229
131
UINT16 TPML_CC_Marshal(TPML_CC* source, BYTE** buffer, INT32* size) {
5230
131
  UINT16 total_size = 0;
5231
131
  INT32 i;
5232
131
  total_size += UINT32_Marshal(&source->count, buffer, size);
5233
131
  for (i = 0; i < source->count; ++i) {
5234
0
    total_size += TPM_CC_Marshal(&source->commandCodes[i], buffer, size);
5235
0
  }
5236
131
  return total_size;
5237
131
}
5238
5239
0
TPM_RC TPML_CC_Unmarshal(TPML_CC* target, BYTE** buffer, INT32* size) {
5240
0
  TPM_RC result;
5241
0
  INT32 i;
5242
0
  result = UINT32_Unmarshal(&target->count, buffer, size);
5243
0
  if (result != TPM_RC_SUCCESS) {
5244
0
    return result;
5245
0
  }
5246
0
  if (target->count > MAX_CAP_CC_ALL) {
5247
0
    return TPM_RC_SIZE;
5248
0
  }
5249
0
  for (i = 0; i < target->count; ++i) {
5250
0
    result = TPM_CC_Unmarshal(&target->commandCodes[i], buffer, size);
5251
0
    if (result != TPM_RC_SUCCESS) {
5252
0
      return result;
5253
0
    }
5254
0
  }
5255
0
  return TPM_RC_SUCCESS;
5256
0
}
5257
5258
91
UINT16 TPML_CCA_Marshal(TPML_CCA* source, BYTE** buffer, INT32* size) {
5259
91
  UINT16 total_size = 0;
5260
91
  INT32 i;
5261
91
  total_size += UINT32_Marshal(&source->count, buffer, size);
5262
771
  for (i = 0; i < source->count; ++i) {
5263
680
    total_size += TPMA_CC_Marshal(&source->commandAttributes[i], buffer, size);
5264
680
  }
5265
91
  return total_size;
5266
91
}
5267
5268
0
TPM_RC TPML_CCA_Unmarshal(TPML_CCA* target, BYTE** buffer, INT32* size) {
5269
0
  TPM_RC result;
5270
0
  INT32 i;
5271
0
  result = UINT32_Unmarshal(&target->count, buffer, size);
5272
0
  if (result != TPM_RC_SUCCESS) {
5273
0
    return result;
5274
0
  }
5275
0
  if (target->count > MAX_CAP_CC_ALL) {
5276
0
    return TPM_RC_SIZE;
5277
0
  }
5278
0
  for (i = 0; i < target->count; ++i) {
5279
0
    result = TPMA_CC_Unmarshal(&target->commandAttributes[i], buffer, size);
5280
0
    if (result != TPM_RC_SUCCESS) {
5281
0
      return result;
5282
0
    }
5283
0
  }
5284
0
  return TPM_RC_SUCCESS;
5285
0
}
5286
5287
31
UINT16 TPML_DIGEST_Marshal(TPML_DIGEST* source, BYTE** buffer, INT32* size) {
5288
31
  UINT16 total_size = 0;
5289
31
  INT32 i;
5290
31
  total_size += UINT32_Marshal(&source->count, buffer, size);
5291
212
  for (i = 0; i < source->count; ++i) {
5292
181
    total_size += TPM2B_DIGEST_Marshal(&source->digests[i], buffer, size);
5293
181
  }
5294
31
  return total_size;
5295
31
}
5296
5297
0
TPM_RC TPML_DIGEST_Unmarshal(TPML_DIGEST* target, BYTE** buffer, INT32* size) {
5298
0
  TPM_RC result;
5299
0
  INT32 i;
5300
0
  result = UINT32_Unmarshal(&target->count, buffer, size);
5301
0
  if (result != TPM_RC_SUCCESS) {
5302
0
    return result;
5303
0
  }
5304
0
  if (target->count > 8) {
5305
0
    return TPM_RC_SIZE;
5306
0
  }
5307
0
  if (target->count < 2) {
5308
0
    return TPM_RC_SIZE;
5309
0
  }
5310
0
  for (i = 0; i < target->count; ++i) {
5311
0
    result = TPM2B_DIGEST_Unmarshal(&target->digests[i], buffer, size);
5312
0
    if (result != TPM_RC_SUCCESS) {
5313
0
      return result;
5314
0
    }
5315
0
  }
5316
0
  return TPM_RC_SUCCESS;
5317
0
}
5318
5319
UINT16 TPMU_HA_Marshal(TPMU_HA* source,
5320
                       BYTE** buffer,
5321
                       INT32* size,
5322
0
                       UINT32 selector) {
5323
0
  INT32 i;
5324
0
  UINT16 total_size = 0;
5325
0
  switch (selector) {
5326
#ifdef TPM_ALG_SHA
5327
    case TPM_ALG_SHA:
5328
      for (i = 0; i < SHA_DIGEST_SIZE; ++i) {
5329
        total_size += BYTE_Marshal(&source->sha[i], buffer, size);
5330
      }
5331
      return total_size;
5332
#endif
5333
0
#ifdef TPM_ALG_SHA1
5334
0
    case TPM_ALG_SHA1:
5335
0
      for (i = 0; i < SHA1_DIGEST_SIZE; ++i) {
5336
0
        total_size += BYTE_Marshal(&source->sha1[i], buffer, size);
5337
0
      }
5338
0
      return total_size;
5339
0
#endif
5340
0
#ifdef TPM_ALG_SHA256
5341
0
    case TPM_ALG_SHA256:
5342
0
      for (i = 0; i < SHA256_DIGEST_SIZE; ++i) {
5343
0
        total_size += BYTE_Marshal(&source->sha256[i], buffer, size);
5344
0
      }
5345
0
      return total_size;
5346
0
#endif
5347
0
#ifdef TPM_ALG_SHA384
5348
0
    case TPM_ALG_SHA384:
5349
0
      for (i = 0; i < SHA384_DIGEST_SIZE; ++i) {
5350
0
        total_size += BYTE_Marshal(&source->sha384[i], buffer, size);
5351
0
      }
5352
0
      return total_size;
5353
0
#endif
5354
0
#ifdef TPM_ALG_SHA512
5355
0
    case TPM_ALG_SHA512:
5356
0
      for (i = 0; i < SHA512_DIGEST_SIZE; ++i) {
5357
0
        total_size += BYTE_Marshal(&source->sha512[i], buffer, size);
5358
0
      }
5359
0
      return total_size;
5360
0
#endif
5361
#ifdef TPM_ALG_SM3_256
5362
    case TPM_ALG_SM3_256:
5363
      for (i = 0; i < SM3_256_DIGEST_SIZE; ++i) {
5364
        total_size += BYTE_Marshal(&source->sm3_256[i], buffer, size);
5365
      }
5366
      return total_size;
5367
#endif
5368
0
#ifdef TPM_ALG_NULL
5369
0
    case TPM_ALG_NULL:
5370
0
      return 0;
5371
0
#endif
5372
0
  }
5373
0
  return 0;
5374
0
}
5375
5376
TPM_RC TPMU_HA_Unmarshal(TPMU_HA* target,
5377
                         BYTE** buffer,
5378
                         INT32* size,
5379
218
                         UINT32 selector) {
5380
218
  switch (selector) {
5381
0
    INT32 i;
5382
0
    TPM_RC result;
5383
#ifdef TPM_ALG_SHA
5384
    case TPM_ALG_SHA:
5385
      for (i = 0; i < SHA_DIGEST_SIZE; ++i) {
5386
        result = BYTE_Unmarshal(&target->sha[i], buffer, size);
5387
        if (result != TPM_RC_SUCCESS) {
5388
          return result;
5389
        }
5390
      }
5391
      return TPM_RC_SUCCESS;
5392
#endif
5393
0
#ifdef TPM_ALG_SHA1
5394
74
    case TPM_ALG_SHA1:
5395
1.37k
      for (i = 0; i < SHA1_DIGEST_SIZE; ++i) {
5396
1.31k
        result = BYTE_Unmarshal(&target->sha1[i], buffer, size);
5397
1.31k
        if (result != TPM_RC_SUCCESS) {
5398
12
          return result;
5399
12
        }
5400
1.31k
      }
5401
62
      return TPM_RC_SUCCESS;
5402
0
#endif
5403
0
#ifdef TPM_ALG_SHA256
5404
40
    case TPM_ALG_SHA256:
5405
985
      for (i = 0; i < SHA256_DIGEST_SIZE; ++i) {
5406
958
        result = BYTE_Unmarshal(&target->sha256[i], buffer, size);
5407
958
        if (result != TPM_RC_SUCCESS) {
5408
13
          return result;
5409
13
        }
5410
958
      }
5411
27
      return TPM_RC_SUCCESS;
5412
0
#endif
5413
0
#ifdef TPM_ALG_SHA384
5414
44
    case TPM_ALG_SHA384:
5415
1.66k
      for (i = 0; i < SHA384_DIGEST_SIZE; ++i) {
5416
1.63k
        result = BYTE_Unmarshal(&target->sha384[i], buffer, size);
5417
1.63k
        if (result != TPM_RC_SUCCESS) {
5418
13
          return result;
5419
13
        }
5420
1.63k
      }
5421
31
      return TPM_RC_SUCCESS;
5422
0
#endif
5423
0
#ifdef TPM_ALG_SHA512
5424
40
    case TPM_ALG_SHA512:
5425
1.83k
      for (i = 0; i < SHA512_DIGEST_SIZE; ++i) {
5426
1.80k
        result = BYTE_Unmarshal(&target->sha512[i], buffer, size);
5427
1.80k
        if (result != TPM_RC_SUCCESS) {
5428
13
          return result;
5429
13
        }
5430
1.80k
      }
5431
27
      return TPM_RC_SUCCESS;
5432
0
#endif
5433
#ifdef TPM_ALG_SM3_256
5434
    case TPM_ALG_SM3_256:
5435
      for (i = 0; i < SM3_256_DIGEST_SIZE; ++i) {
5436
        result = BYTE_Unmarshal(&target->sm3_256[i], buffer, size);
5437
        if (result != TPM_RC_SUCCESS) {
5438
          return result;
5439
        }
5440
      }
5441
      return TPM_RC_SUCCESS;
5442
#endif
5443
0
#ifdef TPM_ALG_NULL
5444
20
    case TPM_ALG_NULL:
5445
20
      return TPM_RC_SUCCESS;
5446
218
#endif
5447
218
  }
5448
0
  return TPM_RC_SELECTOR;
5449
218
}
5450
5451
0
UINT16 TPMT_HA_Marshal(TPMT_HA* source, BYTE** buffer, INT32* size) {
5452
0
  UINT16 total_size = 0;
5453
0
  total_size += TPMI_ALG_HASH_Marshal(&source->hashAlg, buffer, size);
5454
0
  total_size += TPMU_HA_Marshal(&source->digest, buffer, size, source->hashAlg);
5455
0
  return total_size;
5456
0
}
5457
5458
243
TPM_RC TPMT_HA_Unmarshal(TPMT_HA* target, BYTE** buffer, INT32* size) {
5459
243
  TPM_RC result;
5460
243
  result = TPMI_ALG_HASH_Unmarshal(&target->hashAlg, buffer, size, TRUE);
5461
243
  if (result != TPM_RC_SUCCESS) {
5462
25
    return result;
5463
25
  }
5464
218
  result = TPMU_HA_Unmarshal(&target->digest, buffer, size, target->hashAlg);
5465
218
  if (result != TPM_RC_SUCCESS) {
5466
51
    return result;
5467
51
  }
5468
167
  return TPM_RC_SUCCESS;
5469
218
}
5470
5471
UINT16 TPML_DIGEST_VALUES_Marshal(TPML_DIGEST_VALUES* source,
5472
                                  BYTE** buffer,
5473
0
                                  INT32* size) {
5474
0
  UINT16 total_size = 0;
5475
0
  INT32 i;
5476
0
  total_size += UINT32_Marshal(&source->count, buffer, size);
5477
0
  for (i = 0; i < source->count; ++i) {
5478
0
    total_size += TPMT_HA_Marshal(&source->digests[i], buffer, size);
5479
0
  }
5480
0
  return total_size;
5481
0
}
5482
5483
TPM_RC TPML_DIGEST_VALUES_Unmarshal(TPML_DIGEST_VALUES* target,
5484
                                    BYTE** buffer,
5485
122
                                    INT32* size) {
5486
122
  TPM_RC result;
5487
122
  INT32 i;
5488
122
  result = UINT32_Unmarshal(&target->count, buffer, size);
5489
122
  if (result != TPM_RC_SUCCESS) {
5490
2
    return result;
5491
2
  }
5492
120
  if (target->count > HASH_COUNT) {
5493
1
    return TPM_RC_SIZE;
5494
1
  }
5495
286
  for (i = 0; i < target->count; ++i) {
5496
243
    result = TPMT_HA_Unmarshal(&target->digests[i], buffer, size);
5497
243
    if (result != TPM_RC_SUCCESS) {
5498
76
      return result;
5499
76
    }
5500
243
  }
5501
43
  return TPM_RC_SUCCESS;
5502
119
}
5503
5504
UINT16 TPM_ECC_CURVE_Marshal(TPM_ECC_CURVE* source,
5505
                             BYTE** buffer,
5506
25
                             INT32* size) {
5507
25
  return uint16_t_Marshal(source, buffer, size);
5508
25
}
5509
5510
TPM_RC TPM_ECC_CURVE_Unmarshal(TPM_ECC_CURVE* target,
5511
                               BYTE** buffer,
5512
0
                               INT32* size) {
5513
0
  TPM_RC result;
5514
0
  result = uint16_t_Unmarshal(target, buffer, size);
5515
0
  if (result != TPM_RC_SUCCESS) {
5516
0
    return result;
5517
0
  }
5518
0
  if (*target == TPM_ECC_NONE) {
5519
0
    return TPM_RC_SUCCESS;
5520
0
  }
5521
0
  if (*target == TPM_ECC_NIST_P192) {
5522
0
    return TPM_RC_SUCCESS;
5523
0
  }
5524
0
  if (*target == TPM_ECC_NIST_P224) {
5525
0
    return TPM_RC_SUCCESS;
5526
0
  }
5527
0
  if (*target == TPM_ECC_NIST_P256) {
5528
0
    return TPM_RC_SUCCESS;
5529
0
  }
5530
0
  if (*target == TPM_ECC_NIST_P384) {
5531
0
    return TPM_RC_SUCCESS;
5532
0
  }
5533
0
  if (*target == TPM_ECC_NIST_P521) {
5534
0
    return TPM_RC_SUCCESS;
5535
0
  }
5536
0
  if (*target == TPM_ECC_BN_P256) {
5537
0
    return TPM_RC_SUCCESS;
5538
0
  }
5539
0
  if (*target == TPM_ECC_BN_P638) {
5540
0
    return TPM_RC_SUCCESS;
5541
0
  }
5542
0
  if (*target == TPM_ECC_SM2_P256) {
5543
0
    return TPM_RC_SUCCESS;
5544
0
  }
5545
0
  return TPM_RC_CURVE;
5546
0
}
5547
5548
UINT16 TPML_ECC_CURVE_Marshal(TPML_ECC_CURVE* source,
5549
                              BYTE** buffer,
5550
13
                              INT32* size) {
5551
13
  UINT16 total_size = 0;
5552
13
  INT32 i;
5553
13
  total_size += UINT32_Marshal(&source->count, buffer, size);
5554
35
  for (i = 0; i < source->count; ++i) {
5555
22
    total_size += TPM_ECC_CURVE_Marshal(&source->eccCurves[i], buffer, size);
5556
22
  }
5557
13
  return total_size;
5558
13
}
5559
5560
TPM_RC TPML_ECC_CURVE_Unmarshal(TPML_ECC_CURVE* target,
5561
                                BYTE** buffer,
5562
0
                                INT32* size) {
5563
0
  TPM_RC result;
5564
0
  INT32 i;
5565
0
  result = UINT32_Unmarshal(&target->count, buffer, size);
5566
0
  if (result != TPM_RC_SUCCESS) {
5567
0
    return result;
5568
0
  }
5569
0
  if (target->count > MAX_ECC_CURVES) {
5570
0
    return TPM_RC_SIZE;
5571
0
  }
5572
0
  for (i = 0; i < target->count; ++i) {
5573
0
    result = TPM_ECC_CURVE_Unmarshal(&target->eccCurves[i], buffer, size);
5574
0
    if (result != TPM_RC_SUCCESS) {
5575
0
      return result;
5576
0
    }
5577
0
  }
5578
0
  return TPM_RC_SUCCESS;
5579
0
}
5580
5581
373
UINT16 TPM_HANDLE_Marshal(TPM_HANDLE* source, BYTE** buffer, INT32* size) {
5582
373
  return uint32_t_Marshal(source, buffer, size);
5583
373
}
5584
5585
0
TPM_RC TPM_HANDLE_Unmarshal(TPM_HANDLE* target, BYTE** buffer, INT32* size) {
5586
0
  return uint32_t_Unmarshal(target, buffer, size);
5587
0
}
5588
5589
295
UINT16 TPML_HANDLE_Marshal(TPML_HANDLE* source, BYTE** buffer, INT32* size) {
5590
295
  UINT16 total_size = 0;
5591
295
  INT32 i;
5592
295
  total_size += UINT32_Marshal(&source->count, buffer, size);
5593
379
  for (i = 0; i < source->count; ++i) {
5594
84
    total_size += TPM_HANDLE_Marshal(&source->handle[i], buffer, size);
5595
84
  }
5596
295
  return total_size;
5597
295
}
5598
5599
0
TPM_RC TPML_HANDLE_Unmarshal(TPML_HANDLE* target, BYTE** buffer, INT32* size) {
5600
0
  TPM_RC result;
5601
0
  INT32 i;
5602
0
  result = UINT32_Unmarshal(&target->count, buffer, size);
5603
0
  if (result != TPM_RC_SUCCESS) {
5604
0
    return result;
5605
0
  }
5606
0
  if (target->count > MAX_CAP_HANDLES) {
5607
0
    return TPM_RC_SIZE;
5608
0
  }
5609
0
  for (i = 0; i < target->count; ++i) {
5610
0
    result = TPM_HANDLE_Unmarshal(&target->handle[i], buffer, size);
5611
0
    if (result != TPM_RC_SUCCESS) {
5612
0
      return result;
5613
0
    }
5614
0
  }
5615
0
  return TPM_RC_SUCCESS;
5616
0
}
5617
5618
1.23k
UINT16 TPM_PT_Marshal(TPM_PT* source, BYTE** buffer, INT32* size) {
5619
1.23k
  return uint32_t_Marshal(source, buffer, size);
5620
1.23k
}
5621
5622
0
TPM_RC TPM_PT_Unmarshal(TPM_PT* target, BYTE** buffer, INT32* size) {
5623
0
  TPM_RC result;
5624
0
  result = uint32_t_Unmarshal(target, buffer, size);
5625
0
  if (result != TPM_RC_SUCCESS) {
5626
0
    return result;
5627
0
  }
5628
0
  if (*target == TPM_PT_NONE) {
5629
0
    return TPM_RC_SUCCESS;
5630
0
  }
5631
0
  if (*target == PT_GROUP) {
5632
0
    return TPM_RC_SUCCESS;
5633
0
  }
5634
0
  if (*target == PT_FIXED) {
5635
0
    return TPM_RC_SUCCESS;
5636
0
  }
5637
0
  if (*target == TPM_PT_FAMILY_INDICATOR) {
5638
0
    return TPM_RC_SUCCESS;
5639
0
  }
5640
0
  if (*target == TPM_PT_LEVEL) {
5641
0
    return TPM_RC_SUCCESS;
5642
0
  }
5643
0
  if (*target == TPM_PT_REVISION) {
5644
0
    return TPM_RC_SUCCESS;
5645
0
  }
5646
0
  if (*target == TPM_PT_DAY_OF_YEAR) {
5647
0
    return TPM_RC_SUCCESS;
5648
0
  }
5649
0
  if (*target == TPM_PT_YEAR) {
5650
0
    return TPM_RC_SUCCESS;
5651
0
  }
5652
0
  if (*target == TPM_PT_MANUFACTURER) {
5653
0
    return TPM_RC_SUCCESS;
5654
0
  }
5655
0
  if (*target == TPM_PT_VENDOR_STRING_1) {
5656
0
    return TPM_RC_SUCCESS;
5657
0
  }
5658
0
  if (*target == TPM_PT_VENDOR_STRING_2) {
5659
0
    return TPM_RC_SUCCESS;
5660
0
  }
5661
0
  if (*target == TPM_PT_VENDOR_STRING_3) {
5662
0
    return TPM_RC_SUCCESS;
5663
0
  }
5664
0
  if (*target == TPM_PT_VENDOR_STRING_4) {
5665
0
    return TPM_RC_SUCCESS;
5666
0
  }
5667
0
  if (*target == TPM_PT_VENDOR_TPM_TYPE) {
5668
0
    return TPM_RC_SUCCESS;
5669
0
  }
5670
0
  if (*target == TPM_PT_FIRMWARE_VERSION_1) {
5671
0
    return TPM_RC_SUCCESS;
5672
0
  }
5673
0
  if (*target == TPM_PT_FIRMWARE_VERSION_2) {
5674
0
    return TPM_RC_SUCCESS;
5675
0
  }
5676
0
  if (*target == TPM_PT_INPUT_BUFFER) {
5677
0
    return TPM_RC_SUCCESS;
5678
0
  }
5679
0
  if (*target == TPM_PT_HR_TRANSIENT_MIN) {
5680
0
    return TPM_RC_SUCCESS;
5681
0
  }
5682
0
  if (*target == TPM_PT_HR_PERSISTENT_MIN) {
5683
0
    return TPM_RC_SUCCESS;
5684
0
  }
5685
0
  if (*target == TPM_PT_HR_LOADED_MIN) {
5686
0
    return TPM_RC_SUCCESS;
5687
0
  }
5688
0
  if (*target == TPM_PT_ACTIVE_SESSIONS_MAX) {
5689
0
    return TPM_RC_SUCCESS;
5690
0
  }
5691
0
  if (*target == TPM_PT_PCR_COUNT) {
5692
0
    return TPM_RC_SUCCESS;
5693
0
  }
5694
0
  if (*target == TPM_PT_PCR_SELECT_MIN) {
5695
0
    return TPM_RC_SUCCESS;
5696
0
  }
5697
0
  if (*target == TPM_PT_CONTEXT_GAP_MAX) {
5698
0
    return TPM_RC_SUCCESS;
5699
0
  }
5700
0
  if (*target == TPM_PT_NV_COUNTERS_MAX) {
5701
0
    return TPM_RC_SUCCESS;
5702
0
  }
5703
0
  if (*target == TPM_PT_NV_INDEX_MAX) {
5704
0
    return TPM_RC_SUCCESS;
5705
0
  }
5706
0
  if (*target == TPM_PT_MEMORY) {
5707
0
    return TPM_RC_SUCCESS;
5708
0
  }
5709
0
  if (*target == TPM_PT_CLOCK_UPDATE) {
5710
0
    return TPM_RC_SUCCESS;
5711
0
  }
5712
0
  if (*target == TPM_PT_CONTEXT_HASH) {
5713
0
    return TPM_RC_SUCCESS;
5714
0
  }
5715
0
  if (*target == TPM_PT_CONTEXT_SYM) {
5716
0
    return TPM_RC_SUCCESS;
5717
0
  }
5718
0
  if (*target == TPM_PT_CONTEXT_SYM_SIZE) {
5719
0
    return TPM_RC_SUCCESS;
5720
0
  }
5721
0
  if (*target == TPM_PT_ORDERLY_COUNT) {
5722
0
    return TPM_RC_SUCCESS;
5723
0
  }
5724
0
  if (*target == TPM_PT_MAX_COMMAND_SIZE) {
5725
0
    return TPM_RC_SUCCESS;
5726
0
  }
5727
0
  if (*target == TPM_PT_MAX_RESPONSE_SIZE) {
5728
0
    return TPM_RC_SUCCESS;
5729
0
  }
5730
0
  if (*target == TPM_PT_MAX_DIGEST) {
5731
0
    return TPM_RC_SUCCESS;
5732
0
  }
5733
0
  if (*target == TPM_PT_MAX_OBJECT_CONTEXT) {
5734
0
    return TPM_RC_SUCCESS;
5735
0
  }
5736
0
  if (*target == TPM_PT_MAX_SESSION_CONTEXT) {
5737
0
    return TPM_RC_SUCCESS;
5738
0
  }
5739
0
  if (*target == TPM_PT_PS_FAMILY_INDICATOR) {
5740
0
    return TPM_RC_SUCCESS;
5741
0
  }
5742
0
  if (*target == TPM_PT_PS_LEVEL) {
5743
0
    return TPM_RC_SUCCESS;
5744
0
  }
5745
0
  if (*target == TPM_PT_PS_REVISION) {
5746
0
    return TPM_RC_SUCCESS;
5747
0
  }
5748
0
  if (*target == TPM_PT_PS_DAY_OF_YEAR) {
5749
0
    return TPM_RC_SUCCESS;
5750
0
  }
5751
0
  if (*target == TPM_PT_PS_YEAR) {
5752
0
    return TPM_RC_SUCCESS;
5753
0
  }
5754
0
  if (*target == TPM_PT_SPLIT_MAX) {
5755
0
    return TPM_RC_SUCCESS;
5756
0
  }
5757
0
  if (*target == TPM_PT_TOTAL_COMMANDS) {
5758
0
    return TPM_RC_SUCCESS;
5759
0
  }
5760
0
  if (*target == TPM_PT_LIBRARY_COMMANDS) {
5761
0
    return TPM_RC_SUCCESS;
5762
0
  }
5763
0
  if (*target == TPM_PT_VENDOR_COMMANDS) {
5764
0
    return TPM_RC_SUCCESS;
5765
0
  }
5766
0
  if (*target == TPM_PT_NV_BUFFER_MAX) {
5767
0
    return TPM_RC_SUCCESS;
5768
0
  }
5769
0
  if (*target == PT_VAR) {
5770
0
    return TPM_RC_SUCCESS;
5771
0
  }
5772
0
  if (*target == TPM_PT_PERMANENT) {
5773
0
    return TPM_RC_SUCCESS;
5774
0
  }
5775
0
  if (*target == TPM_PT_STARTUP_CLEAR) {
5776
0
    return TPM_RC_SUCCESS;
5777
0
  }
5778
0
  if (*target == TPM_PT_HR_NV_INDEX) {
5779
0
    return TPM_RC_SUCCESS;
5780
0
  }
5781
0
  if (*target == TPM_PT_HR_LOADED) {
5782
0
    return TPM_RC_SUCCESS;
5783
0
  }
5784
0
  if (*target == TPM_PT_HR_LOADED_AVAIL) {
5785
0
    return TPM_RC_SUCCESS;
5786
0
  }
5787
0
  if (*target == TPM_PT_HR_ACTIVE) {
5788
0
    return TPM_RC_SUCCESS;
5789
0
  }
5790
0
  if (*target == TPM_PT_HR_ACTIVE_AVAIL) {
5791
0
    return TPM_RC_SUCCESS;
5792
0
  }
5793
0
  if (*target == TPM_PT_HR_TRANSIENT_AVAIL) {
5794
0
    return TPM_RC_SUCCESS;
5795
0
  }
5796
0
  if (*target == TPM_PT_HR_PERSISTENT) {
5797
0
    return TPM_RC_SUCCESS;
5798
0
  }
5799
0
  if (*target == TPM_PT_HR_PERSISTENT_AVAIL) {
5800
0
    return TPM_RC_SUCCESS;
5801
0
  }
5802
0
  if (*target == TPM_PT_NV_COUNTERS) {
5803
0
    return TPM_RC_SUCCESS;
5804
0
  }
5805
0
  if (*target == TPM_PT_NV_COUNTERS_AVAIL) {
5806
0
    return TPM_RC_SUCCESS;
5807
0
  }
5808
0
  if (*target == TPM_PT_ALGORITHM_SET) {
5809
0
    return TPM_RC_SUCCESS;
5810
0
  }
5811
0
  if (*target == TPM_PT_LOADED_CURVES) {
5812
0
    return TPM_RC_SUCCESS;
5813
0
  }
5814
0
  if (*target == TPM_PT_LOCKOUT_COUNTER) {
5815
0
    return TPM_RC_SUCCESS;
5816
0
  }
5817
0
  if (*target == TPM_PT_MAX_AUTH_FAIL) {
5818
0
    return TPM_RC_SUCCESS;
5819
0
  }
5820
0
  if (*target == TPM_PT_LOCKOUT_INTERVAL) {
5821
0
    return TPM_RC_SUCCESS;
5822
0
  }
5823
0
  if (*target == TPM_PT_LOCKOUT_RECOVERY) {
5824
0
    return TPM_RC_SUCCESS;
5825
0
  }
5826
0
  if (*target == TPM_PT_NV_WRITE_RECOVERY) {
5827
0
    return TPM_RC_SUCCESS;
5828
0
  }
5829
0
  if (*target == TPM_PT_AUDIT_COUNTER_0) {
5830
0
    return TPM_RC_SUCCESS;
5831
0
  }
5832
0
  if (*target == TPM_PT_AUDIT_COUNTER_1) {
5833
0
    return TPM_RC_SUCCESS;
5834
0
  }
5835
0
  return TPM_RC_VALUE;
5836
0
}
5837
5838
UINT16 TPMS_TAGGED_PCR_SELECT_Marshal(TPMS_TAGGED_PCR_SELECT* source,
5839
                                      BYTE** buffer,
5840
90
                                      INT32* size) {
5841
90
  UINT16 total_size = 0;
5842
90
  INT32 i;
5843
90
  total_size += TPM_PT_Marshal(&source->tag, buffer, size);
5844
90
  total_size += UINT8_Marshal(&source->sizeofSelect, buffer, size);
5845
360
  for (i = 0; i < source->sizeofSelect; ++i) {
5846
270
    total_size += BYTE_Marshal(&source->pcrSelect[i], buffer, size);
5847
270
  }
5848
90
  return total_size;
5849
90
}
5850
5851
TPM_RC TPMS_TAGGED_PCR_SELECT_Unmarshal(TPMS_TAGGED_PCR_SELECT* target,
5852
                                        BYTE** buffer,
5853
0
                                        INT32* size) {
5854
0
  TPM_RC result;
5855
0
  INT32 i;
5856
0
  result = TPM_PT_Unmarshal(&target->tag, buffer, size);
5857
0
  if (result != TPM_RC_SUCCESS) {
5858
0
    return result;
5859
0
  }
5860
0
  result = UINT8_Unmarshal(&target->sizeofSelect, buffer, size);
5861
0
  if (result != TPM_RC_SUCCESS) {
5862
0
    return result;
5863
0
  }
5864
0
  if (target->sizeofSelect > PCR_SELECT_MAX) {
5865
0
    return TPM_RC_VALUE;
5866
0
  }
5867
0
  if (target->sizeofSelect < PCR_SELECT_MIN) {
5868
0
    return TPM_RC_VALUE;
5869
0
  }
5870
0
  for (i = 0; i < target->sizeofSelect; ++i) {
5871
0
    result = BYTE_Unmarshal(&target->pcrSelect[i], buffer, size);
5872
0
    if (result != TPM_RC_SUCCESS) {
5873
0
      return result;
5874
0
    }
5875
0
  }
5876
0
  return TPM_RC_SUCCESS;
5877
0
}
5878
5879
UINT16 TPML_TAGGED_PCR_PROPERTY_Marshal(TPML_TAGGED_PCR_PROPERTY* source,
5880
                                        BYTE** buffer,
5881
79
                                        INT32* size) {
5882
79
  UINT16 total_size = 0;
5883
79
  INT32 i;
5884
79
  total_size += UINT32_Marshal(&source->count, buffer, size);
5885
169
  for (i = 0; i < source->count; ++i) {
5886
90
    total_size +=
5887
90
        TPMS_TAGGED_PCR_SELECT_Marshal(&source->pcrProperty[i], buffer, size);
5888
90
  }
5889
79
  return total_size;
5890
79
}
5891
5892
TPM_RC TPML_TAGGED_PCR_PROPERTY_Unmarshal(TPML_TAGGED_PCR_PROPERTY* target,
5893
                                          BYTE** buffer,
5894
0
                                          INT32* size) {
5895
0
  TPM_RC result;
5896
0
  INT32 i;
5897
0
  result = UINT32_Unmarshal(&target->count, buffer, size);
5898
0
  if (result != TPM_RC_SUCCESS) {
5899
0
    return result;
5900
0
  }
5901
0
  if (target->count > MAX_PCR_PROPERTIES) {
5902
0
    return TPM_RC_SIZE;
5903
0
  }
5904
0
  for (i = 0; i < target->count; ++i) {
5905
0
    result =
5906
0
        TPMS_TAGGED_PCR_SELECT_Unmarshal(&target->pcrProperty[i], buffer, size);
5907
0
    if (result != TPM_RC_SUCCESS) {
5908
0
      return result;
5909
0
    }
5910
0
  }
5911
0
  return TPM_RC_SUCCESS;
5912
0
}
5913
5914
UINT16 TPMS_TAGGED_PROPERTY_Marshal(TPMS_TAGGED_PROPERTY* source,
5915
                                    BYTE** buffer,
5916
1.14k
                                    INT32* size) {
5917
1.14k
  UINT16 total_size = 0;
5918
1.14k
  total_size += TPM_PT_Marshal(&source->property, buffer, size);
5919
1.14k
  total_size += UINT32_Marshal(&source->value, buffer, size);
5920
1.14k
  return total_size;
5921
1.14k
}
5922
5923
TPM_RC TPMS_TAGGED_PROPERTY_Unmarshal(TPMS_TAGGED_PROPERTY* target,
5924
                                      BYTE** buffer,
5925
0
                                      INT32* size) {
5926
0
  TPM_RC result;
5927
0
  result = TPM_PT_Unmarshal(&target->property, buffer, size);
5928
0
  if (result != TPM_RC_SUCCESS) {
5929
0
    return result;
5930
0
  }
5931
0
  result = UINT32_Unmarshal(&target->value, buffer, size);
5932
0
  if (result != TPM_RC_SUCCESS) {
5933
0
    return result;
5934
0
  }
5935
0
  return TPM_RC_SUCCESS;
5936
0
}
5937
5938
UINT16 TPML_TAGGED_TPM_PROPERTY_Marshal(TPML_TAGGED_TPM_PROPERTY* source,
5939
                                        BYTE** buffer,
5940
93
                                        INT32* size) {
5941
93
  UINT16 total_size = 0;
5942
93
  INT32 i;
5943
93
  total_size += UINT32_Marshal(&source->count, buffer, size);
5944
1.23k
  for (i = 0; i < source->count; ++i) {
5945
1.14k
    total_size +=
5946
1.14k
        TPMS_TAGGED_PROPERTY_Marshal(&source->tpmProperty[i], buffer, size);
5947
1.14k
  }
5948
93
  return total_size;
5949
93
}
5950
5951
TPM_RC TPML_TAGGED_TPM_PROPERTY_Unmarshal(TPML_TAGGED_TPM_PROPERTY* target,
5952
                                          BYTE** buffer,
5953
0
                                          INT32* size) {
5954
0
  TPM_RC result;
5955
0
  INT32 i;
5956
0
  result = UINT32_Unmarshal(&target->count, buffer, size);
5957
0
  if (result != TPM_RC_SUCCESS) {
5958
0
    return result;
5959
0
  }
5960
0
  if (target->count > MAX_TPM_PROPERTIES) {
5961
0
    return TPM_RC_SIZE;
5962
0
  }
5963
0
  for (i = 0; i < target->count; ++i) {
5964
0
    result =
5965
0
        TPMS_TAGGED_PROPERTY_Unmarshal(&target->tpmProperty[i], buffer, size);
5966
0
    if (result != TPM_RC_SUCCESS) {
5967
0
      return result;
5968
0
    }
5969
0
  }
5970
0
  return TPM_RC_SUCCESS;
5971
0
}
5972
5973
UINT16 TPMS_ALGORITHM_DESCRIPTION_Marshal(TPMS_ALGORITHM_DESCRIPTION* source,
5974
                                          BYTE** buffer,
5975
0
                                          INT32* size) {
5976
0
  UINT16 total_size = 0;
5977
0
  total_size += TPM_ALG_ID_Marshal(&source->alg, buffer, size);
5978
0
  total_size += TPMA_ALGORITHM_Marshal(&source->attributes, buffer, size);
5979
0
  return total_size;
5980
0
}
5981
5982
TPM_RC TPMS_ALGORITHM_DESCRIPTION_Unmarshal(TPMS_ALGORITHM_DESCRIPTION* target,
5983
                                            BYTE** buffer,
5984
0
                                            INT32* size) {
5985
0
  TPM_RC result;
5986
0
  result = TPM_ALG_ID_Unmarshal(&target->alg, buffer, size);
5987
0
  if (result != TPM_RC_SUCCESS) {
5988
0
    return result;
5989
0
  }
5990
0
  result = TPMA_ALGORITHM_Unmarshal(&target->attributes, buffer, size);
5991
0
  if (result != TPM_RC_SUCCESS) {
5992
0
    return result;
5993
0
  }
5994
0
  return TPM_RC_SUCCESS;
5995
0
}
5996
5997
UINT16 TPMS_ALGORITHM_DETAIL_ECC_Marshal(TPMS_ALGORITHM_DETAIL_ECC* source,
5998
                                         BYTE** buffer,
5999
3
                                         INT32* size) {
6000
3
  UINT16 total_size = 0;
6001
3
  total_size += TPM_ECC_CURVE_Marshal(&source->curveID, buffer, size);
6002
3
  total_size += UINT16_Marshal(&source->keySize, buffer, size);
6003
3
  total_size += TPMT_KDF_SCHEME_Marshal(&source->kdf, buffer, size);
6004
3
  total_size += TPMT_ECC_SCHEME_Marshal(&source->sign, buffer, size);
6005
3
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->p, buffer, size);
6006
3
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->a, buffer, size);
6007
3
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->b, buffer, size);
6008
3
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->gX, buffer, size);
6009
3
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->gY, buffer, size);
6010
3
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->n, buffer, size);
6011
3
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->h, buffer, size);
6012
3
  return total_size;
6013
3
}
6014
6015
TPM_RC TPMS_ALGORITHM_DETAIL_ECC_Unmarshal(TPMS_ALGORITHM_DETAIL_ECC* target,
6016
                                           BYTE** buffer,
6017
0
                                           INT32* size) {
6018
0
  TPM_RC result;
6019
0
  result = TPM_ECC_CURVE_Unmarshal(&target->curveID, buffer, size);
6020
0
  if (result != TPM_RC_SUCCESS) {
6021
0
    return result;
6022
0
  }
6023
0
  result = UINT16_Unmarshal(&target->keySize, buffer, size);
6024
0
  if (result != TPM_RC_SUCCESS) {
6025
0
    return result;
6026
0
  }
6027
0
  result = TPMT_KDF_SCHEME_Unmarshal(&target->kdf, buffer, size);
6028
0
  if (result != TPM_RC_SUCCESS) {
6029
0
    return result;
6030
0
  }
6031
0
  result = TPMT_ECC_SCHEME_Unmarshal(&target->sign, buffer, size);
6032
0
  if (result != TPM_RC_SUCCESS) {
6033
0
    return result;
6034
0
  }
6035
0
  result = TPM2B_ECC_PARAMETER_Unmarshal(&target->p, buffer, size);
6036
0
  if (result != TPM_RC_SUCCESS) {
6037
0
    return result;
6038
0
  }
6039
0
  result = TPM2B_ECC_PARAMETER_Unmarshal(&target->a, buffer, size);
6040
0
  if (result != TPM_RC_SUCCESS) {
6041
0
    return result;
6042
0
  }
6043
0
  result = TPM2B_ECC_PARAMETER_Unmarshal(&target->b, buffer, size);
6044
0
  if (result != TPM_RC_SUCCESS) {
6045
0
    return result;
6046
0
  }
6047
0
  result = TPM2B_ECC_PARAMETER_Unmarshal(&target->gX, buffer, size);
6048
0
  if (result != TPM_RC_SUCCESS) {
6049
0
    return result;
6050
0
  }
6051
0
  result = TPM2B_ECC_PARAMETER_Unmarshal(&target->gY, buffer, size);
6052
0
  if (result != TPM_RC_SUCCESS) {
6053
0
    return result;
6054
0
  }
6055
0
  result = TPM2B_ECC_PARAMETER_Unmarshal(&target->n, buffer, size);
6056
0
  if (result != TPM_RC_SUCCESS) {
6057
0
    return result;
6058
0
  }
6059
0
  result = TPM2B_ECC_PARAMETER_Unmarshal(&target->h, buffer, size);
6060
0
  if (result != TPM_RC_SUCCESS) {
6061
0
    return result;
6062
0
  }
6063
0
  return TPM_RC_SUCCESS;
6064
0
}
6065
6066
0
UINT16 UINT64_Marshal(UINT64* source, BYTE** buffer, INT32* size) {
6067
0
  return uint64_t_Marshal(source, buffer, size);
6068
0
}
6069
6070
304
TPM_RC UINT64_Unmarshal(UINT64* target, BYTE** buffer, INT32* size) {
6071
304
  return uint64_t_Unmarshal(target, buffer, size);
6072
304
}
6073
6074
UINT16 TPM_GENERATED_Marshal(TPM_GENERATED* source,
6075
                             BYTE** buffer,
6076
7
                             INT32* size) {
6077
7
  return uint32_t_Marshal(source, buffer, size);
6078
7
}
6079
6080
TPM_RC TPM_GENERATED_Unmarshal(TPM_GENERATED* target,
6081
                               BYTE** buffer,
6082
0
                               INT32* size) {
6083
0
  TPM_RC result;
6084
0
  result = uint32_t_Unmarshal(target, buffer, size);
6085
0
  if (result != TPM_RC_SUCCESS) {
6086
0
    return result;
6087
0
  }
6088
0
  if (*target == TPM_GENERATED_VALUE) {
6089
0
    return TPM_RC_SUCCESS;
6090
0
  }
6091
0
  return TPM_RC_VALUE;
6092
0
}
6093
6094
UINT16 TPMS_CREATION_INFO_Marshal(TPMS_CREATION_INFO* source,
6095
                                  BYTE** buffer,
6096
0
                                  INT32* size) {
6097
0
  UINT16 total_size = 0;
6098
0
  total_size += TPM2B_NAME_Marshal(&source->objectName, buffer, size);
6099
0
  total_size += TPM2B_DIGEST_Marshal(&source->creationHash, buffer, size);
6100
0
  return total_size;
6101
0
}
6102
6103
TPM_RC TPMS_CREATION_INFO_Unmarshal(TPMS_CREATION_INFO* target,
6104
                                    BYTE** buffer,
6105
0
                                    INT32* size) {
6106
0
  TPM_RC result;
6107
0
  result = TPM2B_NAME_Unmarshal(&target->objectName, buffer, size);
6108
0
  if (result != TPM_RC_SUCCESS) {
6109
0
    return result;
6110
0
  }
6111
0
  result = TPM2B_DIGEST_Unmarshal(&target->creationHash, buffer, size);
6112
0
  if (result != TPM_RC_SUCCESS) {
6113
0
    return result;
6114
0
  }
6115
0
  return TPM_RC_SUCCESS;
6116
0
}
6117
6118
UINT16 TPMS_COMMAND_AUDIT_INFO_Marshal(TPMS_COMMAND_AUDIT_INFO* source,
6119
                                       BYTE** buffer,
6120
0
                                       INT32* size) {
6121
0
  UINT16 total_size = 0;
6122
0
  total_size += UINT64_Marshal(&source->auditCounter, buffer, size);
6123
0
  total_size += TPM_ALG_ID_Marshal(&source->digestAlg, buffer, size);
6124
0
  total_size += TPM2B_DIGEST_Marshal(&source->auditDigest, buffer, size);
6125
0
  total_size += TPM2B_DIGEST_Marshal(&source->commandDigest, buffer, size);
6126
0
  return total_size;
6127
0
}
6128
6129
TPM_RC TPMS_COMMAND_AUDIT_INFO_Unmarshal(TPMS_COMMAND_AUDIT_INFO* target,
6130
                                         BYTE** buffer,
6131
0
                                         INT32* size) {
6132
0
  TPM_RC result;
6133
0
  result = UINT64_Unmarshal(&target->auditCounter, buffer, size);
6134
0
  if (result != TPM_RC_SUCCESS) {
6135
0
    return result;
6136
0
  }
6137
0
  result = TPM_ALG_ID_Unmarshal(&target->digestAlg, buffer, size);
6138
0
  if (result != TPM_RC_SUCCESS) {
6139
0
    return result;
6140
0
  }
6141
0
  result = TPM2B_DIGEST_Unmarshal(&target->auditDigest, buffer, size);
6142
0
  if (result != TPM_RC_SUCCESS) {
6143
0
    return result;
6144
0
  }
6145
0
  result = TPM2B_DIGEST_Unmarshal(&target->commandDigest, buffer, size);
6146
0
  if (result != TPM_RC_SUCCESS) {
6147
0
    return result;
6148
0
  }
6149
0
  return TPM_RC_SUCCESS;
6150
0
}
6151
6152
UINT16 TPMS_QUOTE_INFO_Marshal(TPMS_QUOTE_INFO* source,
6153
                               BYTE** buffer,
6154
0
                               INT32* size) {
6155
0
  UINT16 total_size = 0;
6156
0
  total_size += TPML_PCR_SELECTION_Marshal(&source->pcrSelect, buffer, size);
6157
0
  total_size += TPM2B_DIGEST_Marshal(&source->pcrDigest, buffer, size);
6158
0
  return total_size;
6159
0
}
6160
6161
TPM_RC TPMS_QUOTE_INFO_Unmarshal(TPMS_QUOTE_INFO* target,
6162
                                 BYTE** buffer,
6163
0
                                 INT32* size) {
6164
0
  TPM_RC result;
6165
0
  result = TPML_PCR_SELECTION_Unmarshal(&target->pcrSelect, buffer, size);
6166
0
  if (result != TPM_RC_SUCCESS) {
6167
0
    return result;
6168
0
  }
6169
0
  result = TPM2B_DIGEST_Unmarshal(&target->pcrDigest, buffer, size);
6170
0
  if (result != TPM_RC_SUCCESS) {
6171
0
    return result;
6172
0
  }
6173
0
  return TPM_RC_SUCCESS;
6174
0
}
6175
6176
UINT16 TPMS_CERTIFY_INFO_Marshal(TPMS_CERTIFY_INFO* source,
6177
                                 BYTE** buffer,
6178
0
                                 INT32* size) {
6179
0
  UINT16 total_size = 0;
6180
0
  total_size += TPM2B_NAME_Marshal(&source->name, buffer, size);
6181
0
  total_size += TPM2B_NAME_Marshal(&source->qualifiedName, buffer, size);
6182
0
  return total_size;
6183
0
}
6184
6185
TPM_RC TPMS_CERTIFY_INFO_Unmarshal(TPMS_CERTIFY_INFO* target,
6186
                                   BYTE** buffer,
6187
0
                                   INT32* size) {
6188
0
  TPM_RC result;
6189
0
  result = TPM2B_NAME_Unmarshal(&target->name, buffer, size);
6190
0
  if (result != TPM_RC_SUCCESS) {
6191
0
    return result;
6192
0
  }
6193
0
  result = TPM2B_NAME_Unmarshal(&target->qualifiedName, buffer, size);
6194
0
  if (result != TPM_RC_SUCCESS) {
6195
0
    return result;
6196
0
  }
6197
0
  return TPM_RC_SUCCESS;
6198
0
}
6199
6200
UINT16 TPMS_SESSION_AUDIT_INFO_Marshal(TPMS_SESSION_AUDIT_INFO* source,
6201
                                       BYTE** buffer,
6202
0
                                       INT32* size) {
6203
0
  UINT16 total_size = 0;
6204
0
  total_size += TPMI_YES_NO_Marshal(&source->exclusiveSession, buffer, size);
6205
0
  total_size += TPM2B_DIGEST_Marshal(&source->sessionDigest, buffer, size);
6206
0
  return total_size;
6207
0
}
6208
6209
TPM_RC TPMS_SESSION_AUDIT_INFO_Unmarshal(TPMS_SESSION_AUDIT_INFO* target,
6210
                                         BYTE** buffer,
6211
0
                                         INT32* size) {
6212
0
  TPM_RC result;
6213
0
  result = TPMI_YES_NO_Unmarshal(&target->exclusiveSession, buffer, size);
6214
0
  if (result != TPM_RC_SUCCESS) {
6215
0
    return result;
6216
0
  }
6217
0
  result = TPM2B_DIGEST_Unmarshal(&target->sessionDigest, buffer, size);
6218
0
  if (result != TPM_RC_SUCCESS) {
6219
0
    return result;
6220
0
  }
6221
0
  return TPM_RC_SUCCESS;
6222
0
}
6223
6224
UINT16 TPMS_CLOCK_INFO_Marshal(TPMS_CLOCK_INFO* source,
6225
                               BYTE** buffer,
6226
0
                               INT32* size) {
6227
0
  UINT16 total_size = 0;
6228
0
  total_size += UINT64_Marshal(&source->clock, buffer, size);
6229
0
  total_size += UINT32_Marshal(&source->resetCount, buffer, size);
6230
0
  total_size += UINT32_Marshal(&source->restartCount, buffer, size);
6231
0
  total_size += TPMI_YES_NO_Marshal(&source->safe, buffer, size);
6232
0
  return total_size;
6233
0
}
6234
6235
TPM_RC TPMS_CLOCK_INFO_Unmarshal(TPMS_CLOCK_INFO* target,
6236
                                 BYTE** buffer,
6237
0
                                 INT32* size) {
6238
0
  TPM_RC result;
6239
0
  result = UINT64_Unmarshal(&target->clock, buffer, size);
6240
0
  if (result != TPM_RC_SUCCESS) {
6241
0
    return result;
6242
0
  }
6243
0
  result = UINT32_Unmarshal(&target->resetCount, buffer, size);
6244
0
  if (result != TPM_RC_SUCCESS) {
6245
0
    return result;
6246
0
  }
6247
0
  result = UINT32_Unmarshal(&target->restartCount, buffer, size);
6248
0
  if (result != TPM_RC_SUCCESS) {
6249
0
    return result;
6250
0
  }
6251
0
  result = TPMI_YES_NO_Unmarshal(&target->safe, buffer, size);
6252
0
  if (result != TPM_RC_SUCCESS) {
6253
0
    return result;
6254
0
  }
6255
0
  return TPM_RC_SUCCESS;
6256
0
}
6257
6258
UINT16 TPMS_TIME_INFO_Marshal(TPMS_TIME_INFO* source,
6259
                              BYTE** buffer,
6260
0
                              INT32* size) {
6261
0
  UINT16 total_size = 0;
6262
0
  total_size += UINT64_Marshal(&source->time, buffer, size);
6263
0
  total_size += TPMS_CLOCK_INFO_Marshal(&source->clockInfo, buffer, size);
6264
0
  return total_size;
6265
0
}
6266
6267
TPM_RC TPMS_TIME_INFO_Unmarshal(TPMS_TIME_INFO* target,
6268
                                BYTE** buffer,
6269
0
                                INT32* size) {
6270
0
  TPM_RC result;
6271
0
  result = UINT64_Unmarshal(&target->time, buffer, size);
6272
0
  if (result != TPM_RC_SUCCESS) {
6273
0
    return result;
6274
0
  }
6275
0
  result = TPMS_CLOCK_INFO_Unmarshal(&target->clockInfo, buffer, size);
6276
0
  if (result != TPM_RC_SUCCESS) {
6277
0
    return result;
6278
0
  }
6279
0
  return TPM_RC_SUCCESS;
6280
0
}
6281
6282
UINT16 TPMS_TIME_ATTEST_INFO_Marshal(TPMS_TIME_ATTEST_INFO* source,
6283
                                     BYTE** buffer,
6284
0
                                     INT32* size) {
6285
0
  UINT16 total_size = 0;
6286
0
  total_size += TPMS_TIME_INFO_Marshal(&source->time, buffer, size);
6287
0
  total_size += UINT64_Marshal(&source->firmwareVersion, buffer, size);
6288
0
  return total_size;
6289
0
}
6290
6291
TPM_RC TPMS_TIME_ATTEST_INFO_Unmarshal(TPMS_TIME_ATTEST_INFO* target,
6292
                                       BYTE** buffer,
6293
0
                                       INT32* size) {
6294
0
  TPM_RC result;
6295
0
  result = TPMS_TIME_INFO_Unmarshal(&target->time, buffer, size);
6296
0
  if (result != TPM_RC_SUCCESS) {
6297
0
    return result;
6298
0
  }
6299
0
  result = UINT64_Unmarshal(&target->firmwareVersion, buffer, size);
6300
0
  if (result != TPM_RC_SUCCESS) {
6301
0
    return result;
6302
0
  }
6303
0
  return TPM_RC_SUCCESS;
6304
0
}
6305
6306
UINT16 TPMS_NV_CERTIFY_INFO_Marshal(TPMS_NV_CERTIFY_INFO* source,
6307
                                    BYTE** buffer,
6308
0
                                    INT32* size) {
6309
0
  UINT16 total_size = 0;
6310
0
  total_size += TPM2B_NAME_Marshal(&source->indexName, buffer, size);
6311
0
  total_size += UINT16_Marshal(&source->offset, buffer, size);
6312
0
  total_size += TPM2B_MAX_NV_BUFFER_Marshal(&source->nvContents, buffer, size);
6313
0
  return total_size;
6314
0
}
6315
6316
TPM_RC TPMS_NV_CERTIFY_INFO_Unmarshal(TPMS_NV_CERTIFY_INFO* target,
6317
                                      BYTE** buffer,
6318
0
                                      INT32* size) {
6319
0
  TPM_RC result;
6320
0
  result = TPM2B_NAME_Unmarshal(&target->indexName, buffer, size);
6321
0
  if (result != TPM_RC_SUCCESS) {
6322
0
    return result;
6323
0
  }
6324
0
  result = UINT16_Unmarshal(&target->offset, buffer, size);
6325
0
  if (result != TPM_RC_SUCCESS) {
6326
0
    return result;
6327
0
  }
6328
0
  result = TPM2B_MAX_NV_BUFFER_Unmarshal(&target->nvContents, buffer, size);
6329
0
  if (result != TPM_RC_SUCCESS) {
6330
0
    return result;
6331
0
  }
6332
0
  return TPM_RC_SUCCESS;
6333
0
}
6334
6335
UINT16 TPMU_ATTEST_Marshal(TPMU_ATTEST* source,
6336
                           BYTE** buffer,
6337
                           INT32* size,
6338
0
                           UINT32 selector) {
6339
0
  switch (selector) {
6340
0
    case TPM_ST_ATTEST_CERTIFY:
6341
0
      return TPMS_CERTIFY_INFO_Marshal((TPMS_CERTIFY_INFO*)&source->certify,
6342
0
                                       buffer, size);
6343
0
    case TPM_ST_ATTEST_CREATION:
6344
0
      return TPMS_CREATION_INFO_Marshal((TPMS_CREATION_INFO*)&source->creation,
6345
0
                                        buffer, size);
6346
0
    case TPM_ST_ATTEST_QUOTE:
6347
0
      return TPMS_QUOTE_INFO_Marshal((TPMS_QUOTE_INFO*)&source->quote, buffer,
6348
0
                                     size);
6349
0
    case TPM_ST_ATTEST_COMMAND_AUDIT:
6350
0
      return TPMS_COMMAND_AUDIT_INFO_Marshal(
6351
0
          (TPMS_COMMAND_AUDIT_INFO*)&source->commandAudit, buffer, size);
6352
0
    case TPM_ST_ATTEST_SESSION_AUDIT:
6353
0
      return TPMS_SESSION_AUDIT_INFO_Marshal(
6354
0
          (TPMS_SESSION_AUDIT_INFO*)&source->sessionAudit, buffer, size);
6355
0
    case TPM_ST_ATTEST_TIME:
6356
0
      return TPMS_TIME_ATTEST_INFO_Marshal(
6357
0
          (TPMS_TIME_ATTEST_INFO*)&source->time, buffer, size);
6358
0
    case TPM_ST_ATTEST_NV:
6359
0
      return TPMS_NV_CERTIFY_INFO_Marshal((TPMS_NV_CERTIFY_INFO*)&source->nv,
6360
0
                                          buffer, size);
6361
0
  }
6362
0
  return 0;
6363
0
}
6364
6365
TPM_RC TPMU_ATTEST_Unmarshal(TPMU_ATTEST* target,
6366
                             BYTE** buffer,
6367
                             INT32* size,
6368
0
                             UINT32 selector) {
6369
0
  switch (selector) {
6370
0
    case TPM_ST_ATTEST_CERTIFY:
6371
0
      return TPMS_CERTIFY_INFO_Unmarshal((TPMS_CERTIFY_INFO*)&target->certify,
6372
0
                                         buffer, size);
6373
0
    case TPM_ST_ATTEST_CREATION:
6374
0
      return TPMS_CREATION_INFO_Unmarshal(
6375
0
          (TPMS_CREATION_INFO*)&target->creation, buffer, size);
6376
0
    case TPM_ST_ATTEST_QUOTE:
6377
0
      return TPMS_QUOTE_INFO_Unmarshal((TPMS_QUOTE_INFO*)&target->quote, buffer,
6378
0
                                       size);
6379
0
    case TPM_ST_ATTEST_COMMAND_AUDIT:
6380
0
      return TPMS_COMMAND_AUDIT_INFO_Unmarshal(
6381
0
          (TPMS_COMMAND_AUDIT_INFO*)&target->commandAudit, buffer, size);
6382
0
    case TPM_ST_ATTEST_SESSION_AUDIT:
6383
0
      return TPMS_SESSION_AUDIT_INFO_Unmarshal(
6384
0
          (TPMS_SESSION_AUDIT_INFO*)&target->sessionAudit, buffer, size);
6385
0
    case TPM_ST_ATTEST_TIME:
6386
0
      return TPMS_TIME_ATTEST_INFO_Unmarshal(
6387
0
          (TPMS_TIME_ATTEST_INFO*)&target->time, buffer, size);
6388
0
    case TPM_ST_ATTEST_NV:
6389
0
      return TPMS_NV_CERTIFY_INFO_Unmarshal((TPMS_NV_CERTIFY_INFO*)&target->nv,
6390
0
                                            buffer, size);
6391
0
  }
6392
0
  return TPM_RC_SELECTOR;
6393
0
}
6394
6395
0
UINT16 TPMS_ATTEST_Marshal(TPMS_ATTEST* source, BYTE** buffer, INT32* size) {
6396
0
  UINT16 total_size = 0;
6397
0
  total_size += TPM_GENERATED_Marshal(&source->magic, buffer, size);
6398
0
  total_size += TPMI_ST_ATTEST_Marshal(&source->type, buffer, size);
6399
0
  total_size += TPM2B_NAME_Marshal(&source->qualifiedSigner, buffer, size);
6400
0
  total_size += TPM2B_DATA_Marshal(&source->extraData, buffer, size);
6401
0
  total_size += TPMS_CLOCK_INFO_Marshal(&source->clockInfo, buffer, size);
6402
0
  total_size += UINT64_Marshal(&source->firmwareVersion, buffer, size);
6403
0
  total_size +=
6404
0
      TPMU_ATTEST_Marshal(&source->attested, buffer, size, source->type);
6405
0
  return total_size;
6406
0
}
6407
6408
0
TPM_RC TPMS_ATTEST_Unmarshal(TPMS_ATTEST* target, BYTE** buffer, INT32* size) {
6409
0
  TPM_RC result;
6410
0
  result = TPM_GENERATED_Unmarshal(&target->magic, buffer, size);
6411
0
  if (result != TPM_RC_SUCCESS) {
6412
0
    return result;
6413
0
  }
6414
0
  result = TPMI_ST_ATTEST_Unmarshal(&target->type, buffer, size);
6415
0
  if (result != TPM_RC_SUCCESS) {
6416
0
    return result;
6417
0
  }
6418
0
  result = TPM2B_NAME_Unmarshal(&target->qualifiedSigner, buffer, size);
6419
0
  if (result != TPM_RC_SUCCESS) {
6420
0
    return result;
6421
0
  }
6422
0
  result = TPM2B_DATA_Unmarshal(&target->extraData, buffer, size);
6423
0
  if (result != TPM_RC_SUCCESS) {
6424
0
    return result;
6425
0
  }
6426
0
  result = TPMS_CLOCK_INFO_Unmarshal(&target->clockInfo, buffer, size);
6427
0
  if (result != TPM_RC_SUCCESS) {
6428
0
    return result;
6429
0
  }
6430
0
  result = UINT64_Unmarshal(&target->firmwareVersion, buffer, size);
6431
0
  if (result != TPM_RC_SUCCESS) {
6432
0
    return result;
6433
0
  }
6434
0
  result = TPMU_ATTEST_Unmarshal(&target->attested, buffer, size, target->type);
6435
0
  if (result != TPM_RC_SUCCESS) {
6436
0
    return result;
6437
0
  }
6438
0
  return TPM_RC_SUCCESS;
6439
0
}
6440
6441
UINT16 TPMS_AUTH_COMMAND_Marshal(TPMS_AUTH_COMMAND* source,
6442
                                 BYTE** buffer,
6443
0
                                 INT32* size) {
6444
0
  UINT16 total_size = 0;
6445
0
  total_size +=
6446
0
      TPMI_SH_AUTH_SESSION_Marshal(&source->sessionHandle, buffer, size);
6447
0
  total_size += TPM2B_NONCE_Marshal(&source->nonce, buffer, size);
6448
0
  total_size += TPMA_SESSION_Marshal(&source->sessionAttributes, buffer, size);
6449
0
  total_size += TPM2B_AUTH_Marshal(&source->hmac, buffer, size);
6450
0
  return total_size;
6451
0
}
6452
6453
TPM_RC TPMS_AUTH_COMMAND_Unmarshal(TPMS_AUTH_COMMAND* target,
6454
                                   BYTE** buffer,
6455
0
                                   INT32* size) {
6456
0
  TPM_RC result;
6457
0
  result = TPMI_SH_AUTH_SESSION_Unmarshal(&target->sessionHandle, buffer, size,
6458
0
                                          TRUE);
6459
0
  if (result != TPM_RC_SUCCESS) {
6460
0
    return result;
6461
0
  }
6462
0
  result = TPM2B_NONCE_Unmarshal(&target->nonce, buffer, size);
6463
0
  if (result != TPM_RC_SUCCESS) {
6464
0
    return result;
6465
0
  }
6466
0
  result = TPMA_SESSION_Unmarshal(&target->sessionAttributes, buffer, size);
6467
0
  if (result != TPM_RC_SUCCESS) {
6468
0
    return result;
6469
0
  }
6470
0
  result = TPM2B_AUTH_Unmarshal(&target->hmac, buffer, size);
6471
0
  if (result != TPM_RC_SUCCESS) {
6472
0
    return result;
6473
0
  }
6474
0
  return TPM_RC_SUCCESS;
6475
0
}
6476
6477
UINT16 TPMS_AUTH_RESPONSE_Marshal(TPMS_AUTH_RESPONSE* source,
6478
                                  BYTE** buffer,
6479
0
                                  INT32* size) {
6480
0
  UINT16 total_size = 0;
6481
0
  total_size += TPM2B_NONCE_Marshal(&source->nonce, buffer, size);
6482
0
  total_size += TPMA_SESSION_Marshal(&source->sessionAttributes, buffer, size);
6483
0
  total_size += TPM2B_AUTH_Marshal(&source->hmac, buffer, size);
6484
0
  return total_size;
6485
0
}
6486
6487
TPM_RC TPMS_AUTH_RESPONSE_Unmarshal(TPMS_AUTH_RESPONSE* target,
6488
                                    BYTE** buffer,
6489
0
                                    INT32* size) {
6490
0
  TPM_RC result;
6491
0
  result = TPM2B_NONCE_Unmarshal(&target->nonce, buffer, size);
6492
0
  if (result != TPM_RC_SUCCESS) {
6493
0
    return result;
6494
0
  }
6495
0
  result = TPMA_SESSION_Unmarshal(&target->sessionAttributes, buffer, size);
6496
0
  if (result != TPM_RC_SUCCESS) {
6497
0
    return result;
6498
0
  }
6499
0
  result = TPM2B_AUTH_Unmarshal(&target->hmac, buffer, size);
6500
0
  if (result != TPM_RC_SUCCESS) {
6501
0
    return result;
6502
0
  }
6503
0
  return TPM_RC_SUCCESS;
6504
0
}
6505
6506
776
UINT16 TPM_CAP_Marshal(TPM_CAP* source, BYTE** buffer, INT32* size) {
6507
776
  return uint32_t_Marshal(source, buffer, size);
6508
776
}
6509
6510
911
TPM_RC TPM_CAP_Unmarshal(TPM_CAP* target, BYTE** buffer, INT32* size) {
6511
911
  TPM_RC result;
6512
911
  result = uint32_t_Unmarshal(target, buffer, size);
6513
911
  if (result != TPM_RC_SUCCESS) {
6514
3
    return result;
6515
3
  }
6516
908
  if (*target == TPM_CAP_FIRST) {
6517
26
    return TPM_RC_SUCCESS;
6518
26
  }
6519
882
  if (*target == TPM_CAP_ALGS) {
6520
0
    return TPM_RC_SUCCESS;
6521
0
  }
6522
882
  if (*target == TPM_CAP_HANDLES) {
6523
298
    return TPM_RC_SUCCESS;
6524
298
  }
6525
584
  if (*target == TPM_CAP_COMMANDS) {
6526
92
    return TPM_RC_SUCCESS;
6527
92
  }
6528
492
  if (*target == TPM_CAP_PP_COMMANDS) {
6529
80
    return TPM_RC_SUCCESS;
6530
80
  }
6531
412
  if (*target == TPM_CAP_AUDIT_COMMANDS) {
6532
53
    return TPM_RC_SUCCESS;
6533
53
  }
6534
359
  if (*target == TPM_CAP_PCRS) {
6535
93
    return TPM_RC_SUCCESS;
6536
93
  }
6537
266
  if (*target == TPM_CAP_TPM_PROPERTIES) {
6538
94
    return TPM_RC_SUCCESS;
6539
94
  }
6540
172
  if (*target == TPM_CAP_PCR_PROPERTIES) {
6541
80
    return TPM_RC_SUCCESS;
6542
80
  }
6543
92
  if (*target == TPM_CAP_ECC_CURVES) {
6544
14
    return TPM_RC_SUCCESS;
6545
14
  }
6546
78
  if (*target == TPM_CAP_LAST) {
6547
0
    return TPM_RC_SUCCESS;
6548
0
  }
6549
78
  if (*target == TPM_CAP_VENDOR_PROPERTY) {
6550
2
    return TPM_RC_SUCCESS;
6551
2
  }
6552
76
  return TPM_RC_VALUE;
6553
78
}
6554
6555
UINT16 TPMU_CAPABILITIES_Marshal(TPMU_CAPABILITIES* source,
6556
                                 BYTE** buffer,
6557
                                 INT32* size,
6558
776
                                 UINT32 selector) {
6559
776
  switch (selector) {
6560
24
    case TPM_CAP_ALGS:
6561
24
      return TPML_ALG_PROPERTY_Marshal((TPML_ALG_PROPERTY*)&source->algorithms,
6562
24
                                       buffer, size);
6563
295
    case TPM_CAP_HANDLES:
6564
295
      return TPML_HANDLE_Marshal((TPML_HANDLE*)&source->handles, buffer, size);
6565
91
    case TPM_CAP_COMMANDS:
6566
91
      return TPML_CCA_Marshal((TPML_CCA*)&source->command, buffer, size);
6567
79
    case TPM_CAP_PP_COMMANDS:
6568
79
      return TPML_CC_Marshal((TPML_CC*)&source->ppCommands, buffer, size);
6569
52
    case TPM_CAP_AUDIT_COMMANDS:
6570
52
      return TPML_CC_Marshal((TPML_CC*)&source->auditCommands, buffer, size);
6571
50
    case TPM_CAP_PCRS:
6572
50
      return TPML_PCR_SELECTION_Marshal(
6573
50
          (TPML_PCR_SELECTION*)&source->assignedPCR, buffer, size);
6574
93
    case TPM_CAP_TPM_PROPERTIES:
6575
93
      return TPML_TAGGED_TPM_PROPERTY_Marshal(
6576
93
          (TPML_TAGGED_TPM_PROPERTY*)&source->tpmProperties, buffer, size);
6577
79
    case TPM_CAP_PCR_PROPERTIES:
6578
79
      return TPML_TAGGED_PCR_PROPERTY_Marshal(
6579
79
          (TPML_TAGGED_PCR_PROPERTY*)&source->pcrProperties, buffer, size);
6580
13
    case TPM_CAP_ECC_CURVES:
6581
13
      return TPML_ECC_CURVE_Marshal((TPML_ECC_CURVE*)&source->eccCurves, buffer,
6582
13
                                    size);
6583
776
  }
6584
0
  return 0;
6585
776
}
6586
6587
TPM_RC TPMU_CAPABILITIES_Unmarshal(TPMU_CAPABILITIES* target,
6588
                                   BYTE** buffer,
6589
                                   INT32* size,
6590
0
                                   UINT32 selector) {
6591
0
  switch (selector) {
6592
0
    case TPM_CAP_ALGS:
6593
0
      return TPML_ALG_PROPERTY_Unmarshal(
6594
0
          (TPML_ALG_PROPERTY*)&target->algorithms, buffer, size);
6595
0
    case TPM_CAP_HANDLES:
6596
0
      return TPML_HANDLE_Unmarshal((TPML_HANDLE*)&target->handles, buffer,
6597
0
                                   size);
6598
0
    case TPM_CAP_COMMANDS:
6599
0
      return TPML_CCA_Unmarshal((TPML_CCA*)&target->command, buffer, size);
6600
0
    case TPM_CAP_PP_COMMANDS:
6601
0
      return TPML_CC_Unmarshal((TPML_CC*)&target->ppCommands, buffer, size);
6602
0
    case TPM_CAP_AUDIT_COMMANDS:
6603
0
      return TPML_CC_Unmarshal((TPML_CC*)&target->auditCommands, buffer, size);
6604
0
    case TPM_CAP_PCRS:
6605
0
      return TPML_PCR_SELECTION_Unmarshal(
6606
0
          (TPML_PCR_SELECTION*)&target->assignedPCR, buffer, size);
6607
0
    case TPM_CAP_TPM_PROPERTIES:
6608
0
      return TPML_TAGGED_TPM_PROPERTY_Unmarshal(
6609
0
          (TPML_TAGGED_TPM_PROPERTY*)&target->tpmProperties, buffer, size);
6610
0
    case TPM_CAP_PCR_PROPERTIES:
6611
0
      return TPML_TAGGED_PCR_PROPERTY_Unmarshal(
6612
0
          (TPML_TAGGED_PCR_PROPERTY*)&target->pcrProperties, buffer, size);
6613
0
    case TPM_CAP_ECC_CURVES:
6614
0
      return TPML_ECC_CURVE_Unmarshal((TPML_ECC_CURVE*)&target->eccCurves,
6615
0
                                      buffer, size);
6616
0
  }
6617
0
  return TPM_RC_SELECTOR;
6618
0
}
6619
6620
UINT16 TPMS_CAPABILITY_DATA_Marshal(TPMS_CAPABILITY_DATA* source,
6621
                                    BYTE** buffer,
6622
776
                                    INT32* size) {
6623
776
  UINT16 total_size = 0;
6624
776
  total_size += TPM_CAP_Marshal(&source->capability, buffer, size);
6625
776
  total_size += TPMU_CAPABILITIES_Marshal(&source->data, buffer, size,
6626
776
                                          source->capability);
6627
776
  return total_size;
6628
776
}
6629
6630
TPM_RC TPMS_CAPABILITY_DATA_Unmarshal(TPMS_CAPABILITY_DATA* target,
6631
                                      BYTE** buffer,
6632
0
                                      INT32* size) {
6633
0
  TPM_RC result;
6634
0
  result = TPM_CAP_Unmarshal(&target->capability, buffer, size);
6635
0
  if (result != TPM_RC_SUCCESS) {
6636
0
    return result;
6637
0
  }
6638
0
  result = TPMU_CAPABILITIES_Unmarshal(&target->data, buffer, size,
6639
0
                                       target->capability);
6640
0
  if (result != TPM_RC_SUCCESS) {
6641
0
    return result;
6642
0
  }
6643
0
  return TPM_RC_SUCCESS;
6644
0
}
6645
6646
0
UINT16 TPMS_CONTEXT_Marshal(TPMS_CONTEXT* source, BYTE** buffer, INT32* size) {
6647
0
  UINT16 total_size = 0;
6648
0
  total_size += UINT64_Marshal(&source->sequence, buffer, size);
6649
0
  total_size += TPMI_DH_CONTEXT_Marshal(&source->savedHandle, buffer, size);
6650
0
  total_size += TPMI_RH_HIERARCHY_Marshal(&source->hierarchy, buffer, size);
6651
0
  total_size += TPM2B_CONTEXT_DATA_Marshal(&source->contextBlob, buffer, size);
6652
0
  return total_size;
6653
0
}
6654
6655
TPM_RC TPMS_CONTEXT_Unmarshal(TPMS_CONTEXT* target,
6656
                              BYTE** buffer,
6657
304
                              INT32* size) {
6658
304
  TPM_RC result;
6659
304
  result = UINT64_Unmarshal(&target->sequence, buffer, size);
6660
304
  if (result != TPM_RC_SUCCESS) {
6661
4
    return result;
6662
4
  }
6663
300
  result = TPMI_DH_CONTEXT_Unmarshal(&target->savedHandle, buffer, size);
6664
300
  if (result != TPM_RC_SUCCESS) {
6665
123
    return result;
6666
123
  }
6667
177
  result = TPMI_RH_HIERARCHY_Unmarshal(&target->hierarchy, buffer, size, TRUE);
6668
177
  if (result != TPM_RC_SUCCESS) {
6669
107
    return result;
6670
107
  }
6671
70
  result = TPM2B_CONTEXT_DATA_Unmarshal(&target->contextBlob, buffer, size);
6672
70
  if (result != TPM_RC_SUCCESS) {
6673
37
    return result;
6674
37
  }
6675
33
  return TPM_RC_SUCCESS;
6676
70
}
6677
6678
UINT16 TPMS_CONTEXT_DATA_Marshal(TPMS_CONTEXT_DATA* source,
6679
                                 BYTE** buffer,
6680
0
                                 INT32* size) {
6681
0
  UINT16 total_size = 0;
6682
0
  total_size += TPM2B_DIGEST_Marshal(&source->integrity, buffer, size);
6683
0
  total_size +=
6684
0
      TPM2B_CONTEXT_SENSITIVE_Marshal(&source->encrypted, buffer, size);
6685
0
  return total_size;
6686
0
}
6687
6688
TPM_RC TPMS_CONTEXT_DATA_Unmarshal(TPMS_CONTEXT_DATA* target,
6689
                                   BYTE** buffer,
6690
0
                                   INT32* size) {
6691
0
  TPM_RC result;
6692
0
  result = TPM2B_DIGEST_Unmarshal(&target->integrity, buffer, size);
6693
0
  if (result != TPM_RC_SUCCESS) {
6694
0
    return result;
6695
0
  }
6696
0
  result = TPM2B_CONTEXT_SENSITIVE_Unmarshal(&target->encrypted, buffer, size);
6697
0
  if (result != TPM_RC_SUCCESS) {
6698
0
    return result;
6699
0
  }
6700
0
  return TPM_RC_SUCCESS;
6701
0
}
6702
6703
UINT16 TPMS_PCR_SELECT_Marshal(TPMS_PCR_SELECT* source,
6704
                               BYTE** buffer,
6705
0
                               INT32* size) {
6706
0
  UINT16 total_size = 0;
6707
0
  INT32 i;
6708
0
  total_size += UINT8_Marshal(&source->sizeofSelect, buffer, size);
6709
0
  for (i = 0; i < source->sizeofSelect; ++i) {
6710
0
    total_size += BYTE_Marshal(&source->pcrSelect[i], buffer, size);
6711
0
  }
6712
0
  return total_size;
6713
0
}
6714
6715
TPM_RC TPMS_PCR_SELECT_Unmarshal(TPMS_PCR_SELECT* target,
6716
                                 BYTE** buffer,
6717
0
                                 INT32* size) {
6718
0
  TPM_RC result;
6719
0
  INT32 i;
6720
0
  result = UINT8_Unmarshal(&target->sizeofSelect, buffer, size);
6721
0
  if (result != TPM_RC_SUCCESS) {
6722
0
    return result;
6723
0
  }
6724
0
  if (target->sizeofSelect > PCR_SELECT_MAX) {
6725
0
    return TPM_RC_VALUE;
6726
0
  }
6727
0
  if (target->sizeofSelect < PCR_SELECT_MIN) {
6728
0
    return TPM_RC_VALUE;
6729
0
  }
6730
0
  for (i = 0; i < target->sizeofSelect; ++i) {
6731
0
    result = BYTE_Unmarshal(&target->pcrSelect[i], buffer, size);
6732
0
    if (result != TPM_RC_SUCCESS) {
6733
0
      return result;
6734
0
    }
6735
0
  }
6736
0
  return TPM_RC_SUCCESS;
6737
0
}
6738
6739
UINT16 TPMS_SIGNATURE_ECC_Marshal(TPMS_SIGNATURE_ECC* source,
6740
                                  BYTE** buffer,
6741
0
                                  INT32* size) {
6742
0
  UINT16 total_size = 0;
6743
0
  total_size += TPMI_ALG_HASH_Marshal(&source->hash, buffer, size);
6744
0
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->signatureR, buffer, size);
6745
0
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->signatureS, buffer, size);
6746
0
  return total_size;
6747
0
}
6748
6749
TPM_RC TPMS_SIGNATURE_ECC_Unmarshal(TPMS_SIGNATURE_ECC* target,
6750
                                    BYTE** buffer,
6751
0
                                    INT32* size) {
6752
0
  TPM_RC result;
6753
0
  result = TPMI_ALG_HASH_Unmarshal(&target->hash, buffer, size, FALSE);
6754
0
  if (result != TPM_RC_SUCCESS) {
6755
0
    return result;
6756
0
  }
6757
0
  result = TPM2B_ECC_PARAMETER_Unmarshal(&target->signatureR, buffer, size);
6758
0
  if (result != TPM_RC_SUCCESS) {
6759
0
    return result;
6760
0
  }
6761
0
  result = TPM2B_ECC_PARAMETER_Unmarshal(&target->signatureS, buffer, size);
6762
0
  if (result != TPM_RC_SUCCESS) {
6763
0
    return result;
6764
0
  }
6765
0
  return TPM_RC_SUCCESS;
6766
0
}
6767
6768
UINT16 TPMS_SIGNATURE_ECDAA_Marshal(TPMS_SIGNATURE_ECDAA* source,
6769
                                    BYTE** buffer,
6770
0
                                    INT32* size) {
6771
0
  return TPMS_SIGNATURE_ECC_Marshal(source, buffer, size);
6772
0
}
6773
6774
TPM_RC TPMS_SIGNATURE_ECDAA_Unmarshal(TPMS_SIGNATURE_ECDAA* target,
6775
                                      BYTE** buffer,
6776
0
                                      INT32* size) {
6777
0
  return TPMS_SIGNATURE_ECC_Unmarshal(target, buffer, size);
6778
0
}
6779
6780
UINT16 TPMS_SIGNATURE_ECDSA_Marshal(TPMS_SIGNATURE_ECDSA* source,
6781
                                    BYTE** buffer,
6782
0
                                    INT32* size) {
6783
0
  return TPMS_SIGNATURE_ECC_Marshal(source, buffer, size);
6784
0
}
6785
6786
TPM_RC TPMS_SIGNATURE_ECDSA_Unmarshal(TPMS_SIGNATURE_ECDSA* target,
6787
                                      BYTE** buffer,
6788
0
                                      INT32* size) {
6789
0
  return TPMS_SIGNATURE_ECC_Unmarshal(target, buffer, size);
6790
0
}
6791
6792
UINT16 TPMS_SIGNATURE_ECSCHNORR_Marshal(TPMS_SIGNATURE_ECSCHNORR* source,
6793
                                        BYTE** buffer,
6794
0
                                        INT32* size) {
6795
0
  return TPMS_SIGNATURE_ECC_Marshal(source, buffer, size);
6796
0
}
6797
6798
TPM_RC TPMS_SIGNATURE_ECSCHNORR_Unmarshal(TPMS_SIGNATURE_ECSCHNORR* target,
6799
                                          BYTE** buffer,
6800
0
                                          INT32* size) {
6801
0
  return TPMS_SIGNATURE_ECC_Unmarshal(target, buffer, size);
6802
0
}
6803
6804
UINT16 TPMS_SIGNATURE_RSA_Marshal(TPMS_SIGNATURE_RSA* source,
6805
                                  BYTE** buffer,
6806
0
                                  INT32* size) {
6807
0
  UINT16 total_size = 0;
6808
0
  total_size += TPMI_ALG_HASH_Marshal(&source->hash, buffer, size);
6809
0
  total_size += TPM2B_PUBLIC_KEY_RSA_Marshal(&source->sig, buffer, size);
6810
0
  return total_size;
6811
0
}
6812
6813
TPM_RC TPMS_SIGNATURE_RSA_Unmarshal(TPMS_SIGNATURE_RSA* target,
6814
                                    BYTE** buffer,
6815
0
                                    INT32* size) {
6816
0
  TPM_RC result;
6817
0
  result = TPMI_ALG_HASH_Unmarshal(&target->hash, buffer, size, FALSE);
6818
0
  if (result != TPM_RC_SUCCESS) {
6819
0
    return result;
6820
0
  }
6821
0
  result = TPM2B_PUBLIC_KEY_RSA_Unmarshal(&target->sig, buffer, size);
6822
0
  if (result != TPM_RC_SUCCESS) {
6823
0
    return result;
6824
0
  }
6825
0
  return TPM_RC_SUCCESS;
6826
0
}
6827
6828
UINT16 TPMS_SIGNATURE_RSAPSS_Marshal(TPMS_SIGNATURE_RSAPSS* source,
6829
                                     BYTE** buffer,
6830
0
                                     INT32* size) {
6831
0
  return TPMS_SIGNATURE_RSA_Marshal(source, buffer, size);
6832
0
}
6833
6834
TPM_RC TPMS_SIGNATURE_RSAPSS_Unmarshal(TPMS_SIGNATURE_RSAPSS* target,
6835
                                       BYTE** buffer,
6836
0
                                       INT32* size) {
6837
0
  return TPMS_SIGNATURE_RSA_Unmarshal(target, buffer, size);
6838
0
}
6839
6840
UINT16 TPMS_SIGNATURE_RSASSA_Marshal(TPMS_SIGNATURE_RSASSA* source,
6841
                                     BYTE** buffer,
6842
0
                                     INT32* size) {
6843
0
  return TPMS_SIGNATURE_RSA_Marshal(source, buffer, size);
6844
0
}
6845
6846
TPM_RC TPMS_SIGNATURE_RSASSA_Unmarshal(TPMS_SIGNATURE_RSASSA* target,
6847
                                       BYTE** buffer,
6848
0
                                       INT32* size) {
6849
0
  return TPMS_SIGNATURE_RSA_Unmarshal(target, buffer, size);
6850
0
}
6851
6852
UINT16 TPMS_SIGNATURE_SM2_Marshal(TPMS_SIGNATURE_SM2* source,
6853
                                  BYTE** buffer,
6854
0
                                  INT32* size) {
6855
0
  return TPMS_SIGNATURE_ECC_Marshal(source, buffer, size);
6856
0
}
6857
6858
TPM_RC TPMS_SIGNATURE_SM2_Unmarshal(TPMS_SIGNATURE_SM2* target,
6859
                                    BYTE** buffer,
6860
0
                                    INT32* size) {
6861
0
  return TPMS_SIGNATURE_ECC_Unmarshal(target, buffer, size);
6862
0
}
6863
6864
UINT16 TPMT_PUBLIC_PARMS_Marshal(TPMT_PUBLIC_PARMS* source,
6865
                                 BYTE** buffer,
6866
0
                                 INT32* size) {
6867
0
  UINT16 total_size = 0;
6868
0
  total_size += TPMI_ALG_PUBLIC_Marshal(&source->type, buffer, size);
6869
0
  total_size += TPMU_PUBLIC_PARMS_Marshal(&source->parameters, buffer, size,
6870
0
                                          source->type);
6871
0
  return total_size;
6872
0
}
6873
6874
TPM_RC TPMT_PUBLIC_PARMS_Unmarshal(TPMT_PUBLIC_PARMS* target,
6875
                                   BYTE** buffer,
6876
0
                                   INT32* size) {
6877
0
  TPM_RC result;
6878
0
  result = TPMI_ALG_PUBLIC_Unmarshal(&target->type, buffer, size);
6879
0
  if (result != TPM_RC_SUCCESS) {
6880
0
    return result;
6881
0
  }
6882
0
  result = TPMU_PUBLIC_PARMS_Unmarshal(&target->parameters, buffer, size,
6883
0
                                       target->type);
6884
0
  if (result != TPM_RC_SUCCESS) {
6885
0
    return result;
6886
0
  }
6887
0
  return TPM_RC_SUCCESS;
6888
0
}
6889
6890
UINT16 TPMT_RSA_DECRYPT_Marshal(TPMT_RSA_DECRYPT* source,
6891
                                BYTE** buffer,
6892
0
                                INT32* size) {
6893
0
  UINT16 total_size = 0;
6894
0
  total_size += TPMI_ALG_RSA_DECRYPT_Marshal(&source->scheme, buffer, size);
6895
0
  total_size +=
6896
0
      TPMU_ASYM_SCHEME_Marshal(&source->details, buffer, size, source->scheme);
6897
0
  return total_size;
6898
0
}
6899
6900
TPM_RC TPMT_RSA_DECRYPT_Unmarshal(TPMT_RSA_DECRYPT* target,
6901
                                  BYTE** buffer,
6902
0
                                  INT32* size) {
6903
0
  TPM_RC result;
6904
0
  result = TPMI_ALG_RSA_DECRYPT_Unmarshal(&target->scheme, buffer, size, TRUE);
6905
0
  if (result != TPM_RC_SUCCESS) {
6906
0
    return result;
6907
0
  }
6908
0
  result = TPMU_ASYM_SCHEME_Unmarshal(&target->details, buffer, size,
6909
0
                                      target->scheme);
6910
0
  if (result != TPM_RC_SUCCESS) {
6911
0
    return result;
6912
0
  }
6913
0
  return TPM_RC_SUCCESS;
6914
0
}
6915
6916
UINT16 TPMU_SIGNATURE_Marshal(TPMU_SIGNATURE* source,
6917
                              BYTE** buffer,
6918
                              INT32* size,
6919
0
                              UINT32 selector) {
6920
0
  switch (selector) {
6921
0
#ifdef TPM_ALG_RSASSA
6922
0
    case TPM_ALG_RSASSA:
6923
0
      return TPMS_SIGNATURE_RSASSA_Marshal(
6924
0
          (TPMS_SIGNATURE_RSASSA*)&source->rsassa, buffer, size);
6925
0
#endif
6926
0
#ifdef TPM_ALG_RSAPSS
6927
0
    case TPM_ALG_RSAPSS:
6928
0
      return TPMS_SIGNATURE_RSAPSS_Marshal(
6929
0
          (TPMS_SIGNATURE_RSAPSS*)&source->rsapss, buffer, size);
6930
0
#endif
6931
0
#ifdef TPM_ALG_ECDSA
6932
0
    case TPM_ALG_ECDSA:
6933
0
      return TPMS_SIGNATURE_ECDSA_Marshal((TPMS_SIGNATURE_ECDSA*)&source->ecdsa,
6934
0
                                          buffer, size);
6935
0
#endif
6936
0
#ifdef TPM_ALG_ECDAA
6937
0
    case TPM_ALG_ECDAA:
6938
0
      return TPMS_SIGNATURE_ECDAA_Marshal((TPMS_SIGNATURE_ECDAA*)&source->ecdaa,
6939
0
                                          buffer, size);
6940
0
#endif
6941
0
#ifdef TPM_ALG_SM2
6942
0
    case TPM_ALG_SM2:
6943
0
      return TPMS_SIGNATURE_SM2_Marshal((TPMS_SIGNATURE_SM2*)&source->sm2,
6944
0
                                        buffer, size);
6945
0
#endif
6946
0
#ifdef TPM_ALG_ECSCHNORR
6947
0
    case TPM_ALG_ECSCHNORR:
6948
0
      return TPMS_SIGNATURE_ECSCHNORR_Marshal(
6949
0
          (TPMS_SIGNATURE_ECSCHNORR*)&source->ecschnorr, buffer, size);
6950
0
#endif
6951
0
#ifdef TPM_ALG_HMAC
6952
0
    case TPM_ALG_HMAC:
6953
0
      return TPMT_HA_Marshal((TPMT_HA*)&source->hmac, buffer, size);
6954
0
#endif
6955
0
#ifdef TPM_ALG_NULL
6956
0
    case TPM_ALG_NULL:
6957
0
      return 0;
6958
0
#endif
6959
0
  }
6960
0
  return 0;
6961
0
}
6962
6963
TPM_RC TPMU_SIGNATURE_Unmarshal(TPMU_SIGNATURE* target,
6964
                                BYTE** buffer,
6965
                                INT32* size,
6966
0
                                UINT32 selector) {
6967
0
  switch (selector) {
6968
0
#ifdef TPM_ALG_RSASSA
6969
0
    case TPM_ALG_RSASSA:
6970
0
      return TPMS_SIGNATURE_RSASSA_Unmarshal(
6971
0
          (TPMS_SIGNATURE_RSASSA*)&target->rsassa, buffer, size);
6972
0
#endif
6973
0
#ifdef TPM_ALG_RSAPSS
6974
0
    case TPM_ALG_RSAPSS:
6975
0
      return TPMS_SIGNATURE_RSAPSS_Unmarshal(
6976
0
          (TPMS_SIGNATURE_RSAPSS*)&target->rsapss, buffer, size);
6977
0
#endif
6978
0
#ifdef TPM_ALG_ECDSA
6979
0
    case TPM_ALG_ECDSA:
6980
0
      return TPMS_SIGNATURE_ECDSA_Unmarshal(
6981
0
          (TPMS_SIGNATURE_ECDSA*)&target->ecdsa, buffer, size);
6982
0
#endif
6983
0
#ifdef TPM_ALG_ECDAA
6984
0
    case TPM_ALG_ECDAA:
6985
0
      return TPMS_SIGNATURE_ECDAA_Unmarshal(
6986
0
          (TPMS_SIGNATURE_ECDAA*)&target->ecdaa, buffer, size);
6987
0
#endif
6988
0
#ifdef TPM_ALG_SM2
6989
0
    case TPM_ALG_SM2:
6990
0
      return TPMS_SIGNATURE_SM2_Unmarshal((TPMS_SIGNATURE_SM2*)&target->sm2,
6991
0
                                          buffer, size);
6992
0
#endif
6993
0
#ifdef TPM_ALG_ECSCHNORR
6994
0
    case TPM_ALG_ECSCHNORR:
6995
0
      return TPMS_SIGNATURE_ECSCHNORR_Unmarshal(
6996
0
          (TPMS_SIGNATURE_ECSCHNORR*)&target->ecschnorr, buffer, size);
6997
0
#endif
6998
0
#ifdef TPM_ALG_HMAC
6999
0
    case TPM_ALG_HMAC:
7000
0
      return TPMT_HA_Unmarshal((TPMT_HA*)&target->hmac, buffer, size);
7001
0
#endif
7002
0
#ifdef TPM_ALG_NULL
7003
0
    case TPM_ALG_NULL:
7004
0
      return TPM_RC_SUCCESS;
7005
0
#endif
7006
0
  }
7007
0
  return TPM_RC_SELECTOR;
7008
0
}
7009
7010
UINT16 TPMT_SIGNATURE_Marshal(TPMT_SIGNATURE* source,
7011
                              BYTE** buffer,
7012
0
                              INT32* size) {
7013
0
  UINT16 total_size = 0;
7014
0
  total_size += TPMI_ALG_SIG_SCHEME_Marshal(&source->sigAlg, buffer, size);
7015
0
  total_size +=
7016
0
      TPMU_SIGNATURE_Marshal(&source->signature, buffer, size, source->sigAlg);
7017
0
  return total_size;
7018
0
}
7019
7020
TPM_RC TPMT_SIGNATURE_Unmarshal(TPMT_SIGNATURE* target,
7021
                                BYTE** buffer,
7022
0
                                INT32* size) {
7023
0
  TPM_RC result;
7024
0
  result = TPMI_ALG_SIG_SCHEME_Unmarshal(&target->sigAlg, buffer, size, TRUE);
7025
0
  if (result != TPM_RC_SUCCESS) {
7026
0
    return result;
7027
0
  }
7028
0
  result = TPMU_SIGNATURE_Unmarshal(&target->signature, buffer, size,
7029
0
                                    target->sigAlg);
7030
0
  if (result != TPM_RC_SUCCESS) {
7031
0
    return result;
7032
0
  }
7033
0
  return TPM_RC_SUCCESS;
7034
0
}
7035
7036
UINT16 TPMU_SIG_SCHEME_Marshal(TPMU_SIG_SCHEME* source,
7037
                               BYTE** buffer,
7038
                               INT32* size,
7039
0
                               UINT32 selector) {
7040
0
  switch (selector) {
7041
0
#ifdef TPM_ALG_RSASSA
7042
0
    case TPM_ALG_RSASSA:
7043
0
      return TPMS_SIG_SCHEME_RSASSA_Marshal(
7044
0
          (TPMS_SIG_SCHEME_RSASSA*)&source->rsassa, buffer, size);
7045
0
#endif
7046
0
#ifdef TPM_ALG_RSAPSS
7047
0
    case TPM_ALG_RSAPSS:
7048
0
      return TPMS_SIG_SCHEME_RSAPSS_Marshal(
7049
0
          (TPMS_SIG_SCHEME_RSAPSS*)&source->rsapss, buffer, size);
7050
0
#endif
7051
0
#ifdef TPM_ALG_ECDSA
7052
0
    case TPM_ALG_ECDSA:
7053
0
      return TPMS_SIG_SCHEME_ECDSA_Marshal(
7054
0
          (TPMS_SIG_SCHEME_ECDSA*)&source->ecdsa, buffer, size);
7055
0
#endif
7056
0
#ifdef TPM_ALG_ECDAA
7057
0
    case TPM_ALG_ECDAA:
7058
0
      return TPMS_SIG_SCHEME_ECDAA_Marshal(
7059
0
          (TPMS_SIG_SCHEME_ECDAA*)&source->ecdaa, buffer, size);
7060
0
#endif
7061
0
#ifdef TPM_ALG_SM2
7062
0
    case TPM_ALG_SM2:
7063
0
      return TPMS_SIG_SCHEME_SM2_Marshal((TPMS_SIG_SCHEME_SM2*)&source->sm2,
7064
0
                                         buffer, size);
7065
0
#endif
7066
0
#ifdef TPM_ALG_ECSCHNORR
7067
0
    case TPM_ALG_ECSCHNORR:
7068
0
      return TPMS_SIG_SCHEME_ECSCHNORR_Marshal(
7069
0
          (TPMS_SIG_SCHEME_ECSCHNORR*)&source->ecschnorr, buffer, size);
7070
0
#endif
7071
0
#ifdef TPM_ALG_HMAC
7072
0
    case TPM_ALG_HMAC:
7073
0
      return TPMS_SCHEME_HMAC_Marshal((TPMS_SCHEME_HMAC*)&source->hmac, buffer,
7074
0
                                      size);
7075
0
#endif
7076
0
#ifdef TPM_ALG_NULL
7077
0
    case TPM_ALG_NULL:
7078
0
      return 0;
7079
0
#endif
7080
0
  }
7081
0
  return 0;
7082
0
}
7083
7084
TPM_RC TPMU_SIG_SCHEME_Unmarshal(TPMU_SIG_SCHEME* target,
7085
                                 BYTE** buffer,
7086
                                 INT32* size,
7087
75
                                 UINT32 selector) {
7088
75
  switch (selector) {
7089
0
#ifdef TPM_ALG_RSASSA
7090
12
    case TPM_ALG_RSASSA:
7091
12
      return TPMS_SIG_SCHEME_RSASSA_Unmarshal(
7092
12
          (TPMS_SIG_SCHEME_RSASSA*)&target->rsassa, buffer, size);
7093
0
#endif
7094
0
#ifdef TPM_ALG_RSAPSS
7095
14
    case TPM_ALG_RSAPSS:
7096
14
      return TPMS_SIG_SCHEME_RSAPSS_Unmarshal(
7097
14
          (TPMS_SIG_SCHEME_RSAPSS*)&target->rsapss, buffer, size);
7098
0
#endif
7099
0
#ifdef TPM_ALG_ECDSA
7100
13
    case TPM_ALG_ECDSA:
7101
13
      return TPMS_SIG_SCHEME_ECDSA_Unmarshal(
7102
13
          (TPMS_SIG_SCHEME_ECDSA*)&target->ecdsa, buffer, size);
7103
0
#endif
7104
0
#ifdef TPM_ALG_ECDAA
7105
8
    case TPM_ALG_ECDAA:
7106
8
      return TPMS_SIG_SCHEME_ECDAA_Unmarshal(
7107
8
          (TPMS_SIG_SCHEME_ECDAA*)&target->ecdaa, buffer, size);
7108
0
#endif
7109
0
#ifdef TPM_ALG_SM2
7110
7
    case TPM_ALG_SM2:
7111
7
      return TPMS_SIG_SCHEME_SM2_Unmarshal((TPMS_SIG_SCHEME_SM2*)&target->sm2,
7112
7
                                           buffer, size);
7113
0
#endif
7114
0
#ifdef TPM_ALG_ECSCHNORR
7115
7
    case TPM_ALG_ECSCHNORR:
7116
7
      return TPMS_SIG_SCHEME_ECSCHNORR_Unmarshal(
7117
7
          (TPMS_SIG_SCHEME_ECSCHNORR*)&target->ecschnorr, buffer, size);
7118
0
#endif
7119
0
#ifdef TPM_ALG_HMAC
7120
11
    case TPM_ALG_HMAC:
7121
11
      return TPMS_SCHEME_HMAC_Unmarshal((TPMS_SCHEME_HMAC*)&target->hmac,
7122
11
                                        buffer, size);
7123
0
#endif
7124
0
#ifdef TPM_ALG_NULL
7125
3
    case TPM_ALG_NULL:
7126
3
      return TPM_RC_SUCCESS;
7127
75
#endif
7128
75
  }
7129
0
  return TPM_RC_SELECTOR;
7130
75
}
7131
7132
UINT16 TPMT_SIG_SCHEME_Marshal(TPMT_SIG_SCHEME* source,
7133
                               BYTE** buffer,
7134
0
                               INT32* size) {
7135
0
  UINT16 total_size = 0;
7136
0
  total_size += TPMI_ALG_SIG_SCHEME_Marshal(&source->scheme, buffer, size);
7137
0
  total_size +=
7138
0
      TPMU_SIG_SCHEME_Marshal(&source->details, buffer, size, source->scheme);
7139
0
  return total_size;
7140
0
}
7141
7142
TPM_RC TPMT_SIG_SCHEME_Unmarshal(TPMT_SIG_SCHEME* target,
7143
                                 BYTE** buffer,
7144
84
                                 INT32* size) {
7145
84
  TPM_RC result;
7146
84
  result = TPMI_ALG_SIG_SCHEME_Unmarshal(&target->scheme, buffer, size, TRUE);
7147
84
  if (result != TPM_RC_SUCCESS) {
7148
9
    return result;
7149
9
  }
7150
75
  result =
7151
75
      TPMU_SIG_SCHEME_Unmarshal(&target->details, buffer, size, target->scheme);
7152
75
  if (result != TPM_RC_SUCCESS) {
7153
43
    return result;
7154
43
  }
7155
32
  return TPM_RC_SUCCESS;
7156
75
}
7157
7158
0
UINT16 TPMT_SYM_DEF_Marshal(TPMT_SYM_DEF* source, BYTE** buffer, INT32* size) {
7159
0
  UINT16 total_size = 0;
7160
0
  total_size += TPMI_ALG_SYM_Marshal(&source->algorithm, buffer, size);
7161
0
  total_size += TPMU_SYM_KEY_BITS_Marshal(&source->keyBits, buffer, size,
7162
0
                                          source->algorithm);
7163
0
  total_size +=
7164
0
      TPMU_SYM_MODE_Marshal(&source->mode, buffer, size, source->algorithm);
7165
0
  return total_size;
7166
0
}
7167
7168
TPM_RC TPMT_SYM_DEF_Unmarshal(TPMT_SYM_DEF* target,
7169
                              BYTE** buffer,
7170
111
                              INT32* size) {
7171
111
  TPM_RC result;
7172
111
  result = TPMI_ALG_SYM_Unmarshal(&target->algorithm, buffer, size, TRUE);
7173
111
  if (result != TPM_RC_SUCCESS) {
7174
15
    return result;
7175
15
  }
7176
96
  result = TPMU_SYM_KEY_BITS_Unmarshal(&target->keyBits, buffer, size,
7177
96
                                       target->algorithm);
7178
96
  if (result != TPM_RC_SUCCESS) {
7179
15
    return result;
7180
15
  }
7181
81
  result =
7182
81
      TPMU_SYM_MODE_Unmarshal(&target->mode, buffer, size, target->algorithm);
7183
81
  if (result != TPM_RC_SUCCESS) {
7184
43
    return result;
7185
43
  }
7186
38
  return TPM_RC_SUCCESS;
7187
81
}
7188
7189
11.4k
UINT16 TPM_ST_Marshal(TPM_ST* source, BYTE** buffer, INT32* size) {
7190
11.4k
  return uint16_t_Marshal(source, buffer, size);
7191
11.4k
}
7192
7193
0
TPM_RC TPM_ST_Unmarshal(TPM_ST* target, BYTE** buffer, INT32* size) {
7194
0
  TPM_RC result;
7195
0
  result = uint16_t_Unmarshal(target, buffer, size);
7196
0
  if (result != TPM_RC_SUCCESS) {
7197
0
    return result;
7198
0
  }
7199
0
  if (*target == TPM_ST_RSP_COMMAND) {
7200
0
    return TPM_RC_SUCCESS;
7201
0
  }
7202
0
  if (*target == TPM_ST_NULL) {
7203
0
    return TPM_RC_SUCCESS;
7204
0
  }
7205
0
  if (*target == TPM_ST_NO_SESSIONS) {
7206
0
    return TPM_RC_SUCCESS;
7207
0
  }
7208
0
  if (*target == TPM_ST_SESSIONS) {
7209
0
    return TPM_RC_SUCCESS;
7210
0
  }
7211
0
  if (*target == TPM_ST_ATTEST_NV) {
7212
0
    return TPM_RC_SUCCESS;
7213
0
  }
7214
0
  if (*target == TPM_ST_ATTEST_COMMAND_AUDIT) {
7215
0
    return TPM_RC_SUCCESS;
7216
0
  }
7217
0
  if (*target == TPM_ST_ATTEST_SESSION_AUDIT) {
7218
0
    return TPM_RC_SUCCESS;
7219
0
  }
7220
0
  if (*target == TPM_ST_ATTEST_CERTIFY) {
7221
0
    return TPM_RC_SUCCESS;
7222
0
  }
7223
0
  if (*target == TPM_ST_ATTEST_QUOTE) {
7224
0
    return TPM_RC_SUCCESS;
7225
0
  }
7226
0
  if (*target == TPM_ST_ATTEST_TIME) {
7227
0
    return TPM_RC_SUCCESS;
7228
0
  }
7229
0
  if (*target == TPM_ST_ATTEST_CREATION) {
7230
0
    return TPM_RC_SUCCESS;
7231
0
  }
7232
0
  if (*target == TPM_ST_CREATION) {
7233
0
    return TPM_RC_SUCCESS;
7234
0
  }
7235
0
  if (*target == TPM_ST_VERIFIED) {
7236
0
    return TPM_RC_SUCCESS;
7237
0
  }
7238
0
  if (*target == TPM_ST_AUTH_SECRET) {
7239
0
    return TPM_RC_SUCCESS;
7240
0
  }
7241
0
  if (*target == TPM_ST_HASHCHECK) {
7242
0
    return TPM_RC_SUCCESS;
7243
0
  }
7244
0
  if (*target == TPM_ST_AUTH_SIGNED) {
7245
0
    return TPM_RC_SUCCESS;
7246
0
  }
7247
0
  if (*target == TPM_ST_FU_MANIFEST) {
7248
0
    return TPM_RC_SUCCESS;
7249
0
  }
7250
0
  return TPM_RC_VALUE;
7251
0
}
7252
7253
0
UINT16 TPMT_TK_AUTH_Marshal(TPMT_TK_AUTH* source, BYTE** buffer, INT32* size) {
7254
0
  UINT16 total_size = 0;
7255
0
  total_size += TPM_ST_Marshal(&source->tag, buffer, size);
7256
0
  total_size += TPMI_RH_HIERARCHY_Marshal(&source->hierarchy, buffer, size);
7257
0
  total_size += TPM2B_DIGEST_Marshal(&source->digest, buffer, size);
7258
0
  return total_size;
7259
0
}
7260
7261
TPM_RC TPMT_TK_AUTH_Unmarshal(TPMT_TK_AUTH* target,
7262
                              BYTE** buffer,
7263
0
                              INT32* size) {
7264
0
  TPM_RC result;
7265
0
  result = TPM_ST_Unmarshal(&target->tag, buffer, size);
7266
0
  if (result != TPM_RC_SUCCESS) {
7267
0
    return result;
7268
0
  }
7269
0
  result = TPMI_RH_HIERARCHY_Unmarshal(&target->hierarchy, buffer, size, TRUE);
7270
0
  if (result != TPM_RC_SUCCESS) {
7271
0
    return result;
7272
0
  }
7273
0
  result = TPM2B_DIGEST_Unmarshal(&target->digest, buffer, size);
7274
0
  if (result != TPM_RC_SUCCESS) {
7275
0
    return result;
7276
0
  }
7277
0
  return TPM_RC_SUCCESS;
7278
0
}
7279
7280
UINT16 TPMT_TK_CREATION_Marshal(TPMT_TK_CREATION* source,
7281
                                BYTE** buffer,
7282
122
                                INT32* size) {
7283
122
  UINT16 total_size = 0;
7284
122
  total_size += TPM_ST_Marshal(&source->tag, buffer, size);
7285
122
  total_size += TPMI_RH_HIERARCHY_Marshal(&source->hierarchy, buffer, size);
7286
122
  total_size += TPM2B_DIGEST_Marshal(&source->digest, buffer, size);
7287
122
  return total_size;
7288
122
}
7289
7290
TPM_RC TPMT_TK_CREATION_Unmarshal(TPMT_TK_CREATION* target,
7291
                                  BYTE** buffer,
7292
0
                                  INT32* size) {
7293
0
  TPM_RC result;
7294
0
  result = TPM_ST_Unmarshal(&target->tag, buffer, size);
7295
0
  if (result != TPM_RC_SUCCESS) {
7296
0
    return result;
7297
0
  }
7298
0
  result = TPMI_RH_HIERARCHY_Unmarshal(&target->hierarchy, buffer, size, TRUE);
7299
0
  if (result != TPM_RC_SUCCESS) {
7300
0
    return result;
7301
0
  }
7302
0
  result = TPM2B_DIGEST_Unmarshal(&target->digest, buffer, size);
7303
0
  if (result != TPM_RC_SUCCESS) {
7304
0
    return result;
7305
0
  }
7306
0
  return TPM_RC_SUCCESS;
7307
0
}
7308
7309
UINT16 TPMT_TK_HASHCHECK_Marshal(TPMT_TK_HASHCHECK* source,
7310
                                 BYTE** buffer,
7311
15
                                 INT32* size) {
7312
15
  UINT16 total_size = 0;
7313
15
  total_size += TPM_ST_Marshal(&source->tag, buffer, size);
7314
15
  total_size += TPMI_RH_HIERARCHY_Marshal(&source->hierarchy, buffer, size);
7315
15
  total_size += TPM2B_DIGEST_Marshal(&source->digest, buffer, size);
7316
15
  return total_size;
7317
15
}
7318
7319
TPM_RC TPMT_TK_HASHCHECK_Unmarshal(TPMT_TK_HASHCHECK* target,
7320
                                   BYTE** buffer,
7321
0
                                   INT32* size) {
7322
0
  TPM_RC result;
7323
0
  result = TPM_ST_Unmarshal(&target->tag, buffer, size);
7324
0
  if (result != TPM_RC_SUCCESS) {
7325
0
    return result;
7326
0
  }
7327
0
  result = TPMI_RH_HIERARCHY_Unmarshal(&target->hierarchy, buffer, size, TRUE);
7328
0
  if (result != TPM_RC_SUCCESS) {
7329
0
    return result;
7330
0
  }
7331
0
  result = TPM2B_DIGEST_Unmarshal(&target->digest, buffer, size);
7332
0
  if (result != TPM_RC_SUCCESS) {
7333
0
    return result;
7334
0
  }
7335
0
  return TPM_RC_SUCCESS;
7336
0
}
7337
7338
UINT16 TPMT_TK_VERIFIED_Marshal(TPMT_TK_VERIFIED* source,
7339
                                BYTE** buffer,
7340
0
                                INT32* size) {
7341
0
  UINT16 total_size = 0;
7342
0
  total_size += TPM_ST_Marshal(&source->tag, buffer, size);
7343
0
  total_size += TPMI_RH_HIERARCHY_Marshal(&source->hierarchy, buffer, size);
7344
0
  total_size += TPM2B_DIGEST_Marshal(&source->digest, buffer, size);
7345
0
  return total_size;
7346
0
}
7347
7348
TPM_RC TPMT_TK_VERIFIED_Unmarshal(TPMT_TK_VERIFIED* target,
7349
                                  BYTE** buffer,
7350
0
                                  INT32* size) {
7351
0
  TPM_RC result;
7352
0
  result = TPM_ST_Unmarshal(&target->tag, buffer, size);
7353
0
  if (result != TPM_RC_SUCCESS) {
7354
0
    return result;
7355
0
  }
7356
0
  result = TPMI_RH_HIERARCHY_Unmarshal(&target->hierarchy, buffer, size, TRUE);
7357
0
  if (result != TPM_RC_SUCCESS) {
7358
0
    return result;
7359
0
  }
7360
0
  result = TPM2B_DIGEST_Unmarshal(&target->digest, buffer, size);
7361
0
  if (result != TPM_RC_SUCCESS) {
7362
0
    return result;
7363
0
  }
7364
0
  return TPM_RC_SUCCESS;
7365
0
}
7366
7367
UINT16 TPMU_SYM_DETAILS_Marshal(TPMU_SYM_DETAILS* source,
7368
                                BYTE** buffer,
7369
                                INT32* size,
7370
0
                                UINT32 selector) {
7371
0
  switch (selector) {
7372
0
#ifdef TPM_ALG_AES
7373
0
    case TPM_ALG_AES:
7374
0
      return 0;
7375
0
#endif
7376
#ifdef TPM_ALG_SM4
7377
    case TPM_ALG_SM4:
7378
      return 0;
7379
#endif
7380
#ifdef TPM_ALG_CAMELLIA
7381
    case TPM_ALG_CAMELLIA:
7382
      return 0;
7383
#endif
7384
0
#ifdef TPM_ALG_XOR
7385
0
    case TPM_ALG_XOR:
7386
0
      return 0;
7387
0
#endif
7388
0
#ifdef TPM_ALG_NULL
7389
0
    case TPM_ALG_NULL:
7390
0
      return 0;
7391
0
#endif
7392
0
  }
7393
0
  return 0;
7394
0
}
7395
7396
TPM_RC TPMU_SYM_DETAILS_Unmarshal(TPMU_SYM_DETAILS* target,
7397
                                  BYTE** buffer,
7398
                                  INT32* size,
7399
0
                                  UINT32 selector) {
7400
0
  switch (selector) {
7401
0
#ifdef TPM_ALG_AES
7402
0
    case TPM_ALG_AES:
7403
0
      return TPM_RC_SUCCESS;
7404
0
#endif
7405
#ifdef TPM_ALG_SM4
7406
    case TPM_ALG_SM4:
7407
      return TPM_RC_SUCCESS;
7408
#endif
7409
#ifdef TPM_ALG_CAMELLIA
7410
    case TPM_ALG_CAMELLIA:
7411
      return TPM_RC_SUCCESS;
7412
#endif
7413
0
#ifdef TPM_ALG_XOR
7414
0
    case TPM_ALG_XOR:
7415
0
      return TPM_RC_SUCCESS;
7416
0
#endif
7417
0
#ifdef TPM_ALG_NULL
7418
0
    case TPM_ALG_NULL:
7419
0
      return TPM_RC_SUCCESS;
7420
0
#endif
7421
0
  }
7422
0
  return TPM_RC_SELECTOR;
7423
0
}
7424
7425
UINT16 TPM_ALGORITHM_ID_Marshal(TPM_ALGORITHM_ID* source,
7426
                                BYTE** buffer,
7427
0
                                INT32* size) {
7428
0
  return uint32_t_Marshal(source, buffer, size);
7429
0
}
7430
7431
TPM_RC TPM_ALGORITHM_ID_Unmarshal(TPM_ALGORITHM_ID* target,
7432
                                  BYTE** buffer,
7433
0
                                  INT32* size) {
7434
0
  return uint32_t_Unmarshal(target, buffer, size);
7435
0
}
7436
7437
UINT16 TPM_AUTHORIZATION_SIZE_Marshal(TPM_AUTHORIZATION_SIZE* source,
7438
                                      BYTE** buffer,
7439
0
                                      INT32* size) {
7440
0
  return uint32_t_Marshal(source, buffer, size);
7441
0
}
7442
7443
TPM_RC TPM_AUTHORIZATION_SIZE_Unmarshal(TPM_AUTHORIZATION_SIZE* target,
7444
                                        BYTE** buffer,
7445
0
                                        INT32* size) {
7446
0
  return uint32_t_Unmarshal(target, buffer, size);
7447
0
}
7448
7449
UINT16 TPM_CLOCK_ADJUST_Marshal(TPM_CLOCK_ADJUST* source,
7450
                                BYTE** buffer,
7451
0
                                INT32* size) {
7452
0
  return int8_t_Marshal(source, buffer, size);
7453
0
}
7454
7455
TPM_RC TPM_CLOCK_ADJUST_Unmarshal(TPM_CLOCK_ADJUST* target,
7456
                                  BYTE** buffer,
7457
0
                                  INT32* size) {
7458
0
  TPM_RC result;
7459
0
  result = int8_t_Unmarshal(target, buffer, size);
7460
0
  if (result != TPM_RC_SUCCESS) {
7461
0
    return result;
7462
0
  }
7463
0
  if (*target == TPM_CLOCK_COARSE_SLOWER) {
7464
0
    return TPM_RC_SUCCESS;
7465
0
  }
7466
0
  if (*target == TPM_CLOCK_MEDIUM_SLOWER) {
7467
0
    return TPM_RC_SUCCESS;
7468
0
  }
7469
0
  if (*target == TPM_CLOCK_FINE_SLOWER) {
7470
0
    return TPM_RC_SUCCESS;
7471
0
  }
7472
0
  if (*target == TPM_CLOCK_NO_CHANGE) {
7473
0
    return TPM_RC_SUCCESS;
7474
0
  }
7475
0
  if (*target == TPM_CLOCK_FINE_FASTER) {
7476
0
    return TPM_RC_SUCCESS;
7477
0
  }
7478
0
  if (*target == TPM_CLOCK_MEDIUM_FASTER) {
7479
0
    return TPM_RC_SUCCESS;
7480
0
  }
7481
0
  if (*target == TPM_CLOCK_COARSE_FASTER) {
7482
0
    return TPM_RC_SUCCESS;
7483
0
  }
7484
0
  return TPM_RC_VALUE;
7485
0
}
7486
7487
0
UINT16 TPM_EO_Marshal(TPM_EO* source, BYTE** buffer, INT32* size) {
7488
0
  return uint16_t_Marshal(source, buffer, size);
7489
0
}
7490
7491
0
TPM_RC TPM_EO_Unmarshal(TPM_EO* target, BYTE** buffer, INT32* size) {
7492
0
  TPM_RC result;
7493
0
  result = uint16_t_Unmarshal(target, buffer, size);
7494
0
  if (result != TPM_RC_SUCCESS) {
7495
0
    return result;
7496
0
  }
7497
0
  if (*target == TPM_EO_EQ) {
7498
0
    return TPM_RC_SUCCESS;
7499
0
  }
7500
0
  if (*target == TPM_EO_NEQ) {
7501
0
    return TPM_RC_SUCCESS;
7502
0
  }
7503
0
  if (*target == TPM_EO_SIGNED_GT) {
7504
0
    return TPM_RC_SUCCESS;
7505
0
  }
7506
0
  if (*target == TPM_EO_UNSIGNED_GT) {
7507
0
    return TPM_RC_SUCCESS;
7508
0
  }
7509
0
  if (*target == TPM_EO_SIGNED_LT) {
7510
0
    return TPM_RC_SUCCESS;
7511
0
  }
7512
0
  if (*target == TPM_EO_UNSIGNED_LT) {
7513
0
    return TPM_RC_SUCCESS;
7514
0
  }
7515
0
  if (*target == TPM_EO_SIGNED_GE) {
7516
0
    return TPM_RC_SUCCESS;
7517
0
  }
7518
0
  if (*target == TPM_EO_UNSIGNED_GE) {
7519
0
    return TPM_RC_SUCCESS;
7520
0
  }
7521
0
  if (*target == TPM_EO_SIGNED_LE) {
7522
0
    return TPM_RC_SUCCESS;
7523
0
  }
7524
0
  if (*target == TPM_EO_UNSIGNED_LE) {
7525
0
    return TPM_RC_SUCCESS;
7526
0
  }
7527
0
  if (*target == TPM_EO_BITSET) {
7528
0
    return TPM_RC_SUCCESS;
7529
0
  }
7530
0
  if (*target == TPM_EO_BITCLEAR) {
7531
0
    return TPM_RC_SUCCESS;
7532
0
  }
7533
0
  return TPM_RC_VALUE;
7534
0
}
7535
7536
0
UINT16 TPM_HC_Marshal(TPM_HC* source, BYTE** buffer, INT32* size) {
7537
0
  return uint32_t_Marshal(source, buffer, size);
7538
0
}
7539
7540
0
TPM_RC TPM_HC_Unmarshal(TPM_HC* target, BYTE** buffer, INT32* size) {
7541
0
  TPM_RC result;
7542
0
  result = uint32_t_Unmarshal(target, buffer, size);
7543
0
  if (result != TPM_RC_SUCCESS) {
7544
0
    return result;
7545
0
  }
7546
0
  if (*target == HR_HANDLE_MASK) {
7547
0
    return TPM_RC_SUCCESS;
7548
0
  }
7549
0
  if (*target == HR_RANGE_MASK) {
7550
0
    return TPM_RC_SUCCESS;
7551
0
  }
7552
0
  if (*target == HR_SHIFT) {
7553
0
    return TPM_RC_SUCCESS;
7554
0
  }
7555
0
  if (*target == HR_PCR) {
7556
0
    return TPM_RC_SUCCESS;
7557
0
  }
7558
0
  if (*target == HR_HMAC_SESSION) {
7559
0
    return TPM_RC_SUCCESS;
7560
0
  }
7561
0
  if (*target == HR_POLICY_SESSION) {
7562
0
    return TPM_RC_SUCCESS;
7563
0
  }
7564
0
  if (*target == HR_TRANSIENT) {
7565
0
    return TPM_RC_SUCCESS;
7566
0
  }
7567
0
  if (*target == HR_PERSISTENT) {
7568
0
    return TPM_RC_SUCCESS;
7569
0
  }
7570
0
  if (*target == HR_NV_INDEX) {
7571
0
    return TPM_RC_SUCCESS;
7572
0
  }
7573
0
  if (*target == HR_PERMANENT) {
7574
0
    return TPM_RC_SUCCESS;
7575
0
  }
7576
0
  if (*target == PCR_FIRST) {
7577
0
    return TPM_RC_SUCCESS;
7578
0
  }
7579
0
  if (*target == PCR_LAST) {
7580
0
    return TPM_RC_SUCCESS;
7581
0
  }
7582
0
  if (*target == HMAC_SESSION_FIRST) {
7583
0
    return TPM_RC_SUCCESS;
7584
0
  }
7585
0
  if (*target == HMAC_SESSION_LAST) {
7586
0
    return TPM_RC_SUCCESS;
7587
0
  }
7588
0
  if (*target == LOADED_SESSION_FIRST) {
7589
0
    return TPM_RC_SUCCESS;
7590
0
  }
7591
0
  if (*target == LOADED_SESSION_LAST) {
7592
0
    return TPM_RC_SUCCESS;
7593
0
  }
7594
0
  if (*target == POLICY_SESSION_FIRST) {
7595
0
    return TPM_RC_SUCCESS;
7596
0
  }
7597
0
  if (*target == POLICY_SESSION_LAST) {
7598
0
    return TPM_RC_SUCCESS;
7599
0
  }
7600
0
  if (*target == TRANSIENT_FIRST) {
7601
0
    return TPM_RC_SUCCESS;
7602
0
  }
7603
0
  if (*target == ACTIVE_SESSION_FIRST) {
7604
0
    return TPM_RC_SUCCESS;
7605
0
  }
7606
0
  if (*target == ACTIVE_SESSION_LAST) {
7607
0
    return TPM_RC_SUCCESS;
7608
0
  }
7609
0
  if (*target == TRANSIENT_LAST) {
7610
0
    return TPM_RC_SUCCESS;
7611
0
  }
7612
0
  if (*target == PERSISTENT_FIRST) {
7613
0
    return TPM_RC_SUCCESS;
7614
0
  }
7615
0
  if (*target == PERSISTENT_LAST) {
7616
0
    return TPM_RC_SUCCESS;
7617
0
  }
7618
0
  if (*target == PLATFORM_PERSISTENT) {
7619
0
    return TPM_RC_SUCCESS;
7620
0
  }
7621
0
  if (*target == NV_INDEX_FIRST) {
7622
0
    return TPM_RC_SUCCESS;
7623
0
  }
7624
0
  if (*target == NV_INDEX_LAST) {
7625
0
    return TPM_RC_SUCCESS;
7626
0
  }
7627
0
  if (*target == PERMANENT_FIRST) {
7628
0
    return TPM_RC_SUCCESS;
7629
0
  }
7630
0
  if (*target == PERMANENT_LAST) {
7631
0
    return TPM_RC_SUCCESS;
7632
0
  }
7633
0
  return TPM_RC_VALUE;
7634
0
}
7635
7636
0
UINT16 TPM_HT_Marshal(TPM_HT* source, BYTE** buffer, INT32* size) {
7637
0
  return uint8_t_Marshal(source, buffer, size);
7638
0
}
7639
7640
0
TPM_RC TPM_HT_Unmarshal(TPM_HT* target, BYTE** buffer, INT32* size) {
7641
0
  TPM_RC result;
7642
0
  result = uint8_t_Unmarshal(target, buffer, size);
7643
0
  if (result != TPM_RC_SUCCESS) {
7644
0
    return result;
7645
0
  }
7646
0
  if (*target == TPM_HT_PCR) {
7647
0
    return TPM_RC_SUCCESS;
7648
0
  }
7649
0
  if (*target == TPM_HT_NV_INDEX) {
7650
0
    return TPM_RC_SUCCESS;
7651
0
  }
7652
0
  if (*target == TPM_HT_HMAC_SESSION) {
7653
0
    return TPM_RC_SUCCESS;
7654
0
  }
7655
0
  if (*target == TPM_HT_LOADED_SESSION) {
7656
0
    return TPM_RC_SUCCESS;
7657
0
  }
7658
0
  if (*target == TPM_HT_POLICY_SESSION) {
7659
0
    return TPM_RC_SUCCESS;
7660
0
  }
7661
0
  if (*target == TPM_HT_ACTIVE_SESSION) {
7662
0
    return TPM_RC_SUCCESS;
7663
0
  }
7664
0
  if (*target == TPM_HT_PERMANENT) {
7665
0
    return TPM_RC_SUCCESS;
7666
0
  }
7667
0
  if (*target == TPM_HT_TRANSIENT) {
7668
0
    return TPM_RC_SUCCESS;
7669
0
  }
7670
0
  if (*target == TPM_HT_PERSISTENT) {
7671
0
    return TPM_RC_SUCCESS;
7672
0
  }
7673
0
  return TPM_RC_VALUE;
7674
0
}
7675
7676
0
UINT16 TPM_KEY_SIZE_Marshal(TPM_KEY_SIZE* source, BYTE** buffer, INT32* size) {
7677
0
  return uint16_t_Marshal(source, buffer, size);
7678
0
}
7679
7680
TPM_RC TPM_KEY_SIZE_Unmarshal(TPM_KEY_SIZE* target,
7681
                              BYTE** buffer,
7682
0
                              INT32* size) {
7683
0
  return uint16_t_Unmarshal(target, buffer, size);
7684
0
}
7685
7686
UINT16 TPM_MODIFIER_INDICATOR_Marshal(TPM_MODIFIER_INDICATOR* source,
7687
                                      BYTE** buffer,
7688
0
                                      INT32* size) {
7689
0
  return uint32_t_Marshal(source, buffer, size);
7690
0
}
7691
7692
TPM_RC TPM_MODIFIER_INDICATOR_Unmarshal(TPM_MODIFIER_INDICATOR* target,
7693
                                        BYTE** buffer,
7694
0
                                        INT32* size) {
7695
0
  return uint32_t_Unmarshal(target, buffer, size);
7696
0
}
7697
7698
0
UINT16 TPM_NV_INDEX_Marshal(TPM_NV_INDEX* source, BYTE** buffer, INT32* size) {
7699
0
  return uint32_t_Marshal((uint32_t*)source, buffer, size);
7700
0
}
7701
7702
TPM_RC TPM_NV_INDEX_Unmarshal(TPM_NV_INDEX* target,
7703
                              BYTE** buffer,
7704
0
                              INT32* size) {
7705
0
  TPM_RC result;
7706
0
  result = uint32_t_Unmarshal((uint32_t*)target, buffer, size);
7707
0
  if (result != TPM_RC_SUCCESS) {
7708
0
    return result;
7709
0
  }
7710
0
  return TPM_RC_SUCCESS;
7711
0
}
7712
7713
UINT16 TPM_PARAMETER_SIZE_Marshal(TPM_PARAMETER_SIZE* source,
7714
                                  BYTE** buffer,
7715
0
                                  INT32* size) {
7716
0
  return uint32_t_Marshal(source, buffer, size);
7717
0
}
7718
7719
TPM_RC TPM_PARAMETER_SIZE_Unmarshal(TPM_PARAMETER_SIZE* target,
7720
                                    BYTE** buffer,
7721
0
                                    INT32* size) {
7722
0
  return uint32_t_Unmarshal(target, buffer, size);
7723
0
}
7724
7725
0
UINT16 TPM_PS_Marshal(TPM_PS* source, BYTE** buffer, INT32* size) {
7726
0
  return uint32_t_Marshal(source, buffer, size);
7727
0
}
7728
7729
0
TPM_RC TPM_PS_Unmarshal(TPM_PS* target, BYTE** buffer, INT32* size) {
7730
0
  TPM_RC result;
7731
0
  result = uint32_t_Unmarshal(target, buffer, size);
7732
0
  if (result != TPM_RC_SUCCESS) {
7733
0
    return result;
7734
0
  }
7735
0
  if (*target == TPM_PS_MAIN) {
7736
0
    return TPM_RC_SUCCESS;
7737
0
  }
7738
0
  if (*target == TPM_PS_PC) {
7739
0
    return TPM_RC_SUCCESS;
7740
0
  }
7741
0
  if (*target == TPM_PS_PDA) {
7742
0
    return TPM_RC_SUCCESS;
7743
0
  }
7744
0
  if (*target == TPM_PS_CELL_PHONE) {
7745
0
    return TPM_RC_SUCCESS;
7746
0
  }
7747
0
  if (*target == TPM_PS_SERVER) {
7748
0
    return TPM_RC_SUCCESS;
7749
0
  }
7750
0
  if (*target == TPM_PS_PERIPHERAL) {
7751
0
    return TPM_RC_SUCCESS;
7752
0
  }
7753
0
  if (*target == TPM_PS_TSS) {
7754
0
    return TPM_RC_SUCCESS;
7755
0
  }
7756
0
  if (*target == TPM_PS_STORAGE) {
7757
0
    return TPM_RC_SUCCESS;
7758
0
  }
7759
0
  if (*target == TPM_PS_AUTHENTICATION) {
7760
0
    return TPM_RC_SUCCESS;
7761
0
  }
7762
0
  if (*target == TPM_PS_EMBEDDED) {
7763
0
    return TPM_RC_SUCCESS;
7764
0
  }
7765
0
  if (*target == TPM_PS_HARDCOPY) {
7766
0
    return TPM_RC_SUCCESS;
7767
0
  }
7768
0
  if (*target == TPM_PS_INFRASTRUCTURE) {
7769
0
    return TPM_RC_SUCCESS;
7770
0
  }
7771
0
  if (*target == TPM_PS_VIRTUALIZATION) {
7772
0
    return TPM_RC_SUCCESS;
7773
0
  }
7774
0
  if (*target == TPM_PS_TNC) {
7775
0
    return TPM_RC_SUCCESS;
7776
0
  }
7777
0
  if (*target == TPM_PS_MULTI_TENANT) {
7778
0
    return TPM_RC_SUCCESS;
7779
0
  }
7780
0
  if (*target == TPM_PS_TC) {
7781
0
    return TPM_RC_SUCCESS;
7782
0
  }
7783
0
  return TPM_RC_VALUE;
7784
0
}
7785
7786
0
UINT16 TPM_PT_PCR_Marshal(TPM_PT_PCR* source, BYTE** buffer, INT32* size) {
7787
0
  return uint32_t_Marshal(source, buffer, size);
7788
0
}
7789
7790
0
TPM_RC TPM_PT_PCR_Unmarshal(TPM_PT_PCR* target, BYTE** buffer, INT32* size) {
7791
0
  TPM_RC result;
7792
0
  result = uint32_t_Unmarshal(target, buffer, size);
7793
0
  if (result != TPM_RC_SUCCESS) {
7794
0
    return result;
7795
0
  }
7796
0
  if (*target == TPM_PT_PCR_FIRST) {
7797
0
    return TPM_RC_SUCCESS;
7798
0
  }
7799
0
  if (*target == TPM_PT_PCR_SAVE) {
7800
0
    return TPM_RC_SUCCESS;
7801
0
  }
7802
0
  if (*target == TPM_PT_PCR_EXTEND_L0) {
7803
0
    return TPM_RC_SUCCESS;
7804
0
  }
7805
0
  if (*target == TPM_PT_PCR_RESET_L0) {
7806
0
    return TPM_RC_SUCCESS;
7807
0
  }
7808
0
  if (*target == TPM_PT_PCR_EXTEND_L1) {
7809
0
    return TPM_RC_SUCCESS;
7810
0
  }
7811
0
  if (*target == TPM_PT_PCR_RESET_L1) {
7812
0
    return TPM_RC_SUCCESS;
7813
0
  }
7814
0
  if (*target == TPM_PT_PCR_EXTEND_L2) {
7815
0
    return TPM_RC_SUCCESS;
7816
0
  }
7817
0
  if (*target == TPM_PT_PCR_RESET_L2) {
7818
0
    return TPM_RC_SUCCESS;
7819
0
  }
7820
0
  if (*target == TPM_PT_PCR_EXTEND_L3) {
7821
0
    return TPM_RC_SUCCESS;
7822
0
  }
7823
0
  if (*target == TPM_PT_PCR_RESET_L3) {
7824
0
    return TPM_RC_SUCCESS;
7825
0
  }
7826
0
  if (*target == TPM_PT_PCR_EXTEND_L4) {
7827
0
    return TPM_RC_SUCCESS;
7828
0
  }
7829
0
  if (*target == TPM_PT_PCR_RESET_L4) {
7830
0
    return TPM_RC_SUCCESS;
7831
0
  }
7832
0
  if (*target == TPM_PT_PCR_NO_INCREMENT) {
7833
0
    return TPM_RC_SUCCESS;
7834
0
  }
7835
0
  if (*target == TPM_PT_PCR_DRTM_RESET) {
7836
0
    return TPM_RC_SUCCESS;
7837
0
  }
7838
0
  if (*target == TPM_PT_PCR_POLICY) {
7839
0
    return TPM_RC_SUCCESS;
7840
0
  }
7841
0
  if (*target == TPM_PT_PCR_AUTH) {
7842
0
    return TPM_RC_SUCCESS;
7843
0
  }
7844
0
  if (*target == TPM_PT_PCR_LAST) {
7845
0
    return TPM_RC_SUCCESS;
7846
0
  }
7847
0
  return TPM_RC_VALUE;
7848
0
}
7849
7850
11.2k
UINT16 TPM_RC_Marshal(TPM_RC* source, BYTE** buffer, INT32* size) {
7851
11.2k
  return uint32_t_Marshal(source, buffer, size);
7852
11.2k
}
7853
7854
0
TPM_RC TPM_RC_Unmarshal(TPM_RC* target, BYTE** buffer, INT32* size) {
7855
0
  TPM_RC result;
7856
0
  result = uint32_t_Unmarshal(target, buffer, size);
7857
0
  if (result != TPM_RC_SUCCESS) {
7858
0
    return result;
7859
0
  }
7860
0
  if (*target == TPM_RC_SUCCESS) {
7861
0
    return TPM_RC_SUCCESS;
7862
0
  }
7863
0
  if (*target == TPM_RC_BAD_TAG) {
7864
0
    return TPM_RC_SUCCESS;
7865
0
  }
7866
0
  if (*target == RC_VER1) {
7867
0
    return TPM_RC_SUCCESS;
7868
0
  }
7869
0
  if (*target == TPM_RC_INITIALIZE) {
7870
0
    return TPM_RC_SUCCESS;
7871
0
  }
7872
0
  if (*target == TPM_RC_FAILURE) {
7873
0
    return TPM_RC_SUCCESS;
7874
0
  }
7875
0
  if (*target == TPM_RC_SEQUENCE) {
7876
0
    return TPM_RC_SUCCESS;
7877
0
  }
7878
0
  if (*target == TPM_RC_PRIVATE) {
7879
0
    return TPM_RC_SUCCESS;
7880
0
  }
7881
0
  if (*target == TPM_RC_HMAC) {
7882
0
    return TPM_RC_SUCCESS;
7883
0
  }
7884
0
  if (*target == TPM_RC_DISABLED) {
7885
0
    return TPM_RC_SUCCESS;
7886
0
  }
7887
0
  if (*target == TPM_RC_EXCLUSIVE) {
7888
0
    return TPM_RC_SUCCESS;
7889
0
  }
7890
0
  if (*target == TPM_RC_AUTH_TYPE) {
7891
0
    return TPM_RC_SUCCESS;
7892
0
  }
7893
0
  if (*target == TPM_RC_AUTH_MISSING) {
7894
0
    return TPM_RC_SUCCESS;
7895
0
  }
7896
0
  if (*target == TPM_RC_POLICY) {
7897
0
    return TPM_RC_SUCCESS;
7898
0
  }
7899
0
  if (*target == TPM_RC_PCR) {
7900
0
    return TPM_RC_SUCCESS;
7901
0
  }
7902
0
  if (*target == TPM_RC_PCR_CHANGED) {
7903
0
    return TPM_RC_SUCCESS;
7904
0
  }
7905
0
  if (*target == TPM_RC_UPGRADE) {
7906
0
    return TPM_RC_SUCCESS;
7907
0
  }
7908
0
  if (*target == TPM_RC_TOO_MANY_CONTEXTS) {
7909
0
    return TPM_RC_SUCCESS;
7910
0
  }
7911
0
  if (*target == TPM_RC_AUTH_UNAVAILABLE) {
7912
0
    return TPM_RC_SUCCESS;
7913
0
  }
7914
0
  if (*target == TPM_RC_REBOOT) {
7915
0
    return TPM_RC_SUCCESS;
7916
0
  }
7917
0
  if (*target == TPM_RC_UNBALANCED) {
7918
0
    return TPM_RC_SUCCESS;
7919
0
  }
7920
0
  if (*target == TPM_RC_COMMAND_SIZE) {
7921
0
    return TPM_RC_SUCCESS;
7922
0
  }
7923
0
  if (*target == TPM_RC_COMMAND_CODE) {
7924
0
    return TPM_RC_SUCCESS;
7925
0
  }
7926
0
  if (*target == TPM_RC_AUTHSIZE) {
7927
0
    return TPM_RC_SUCCESS;
7928
0
  }
7929
0
  if (*target == TPM_RC_AUTH_CONTEXT) {
7930
0
    return TPM_RC_SUCCESS;
7931
0
  }
7932
0
  if (*target == TPM_RC_NV_RANGE) {
7933
0
    return TPM_RC_SUCCESS;
7934
0
  }
7935
0
  if (*target == TPM_RC_NV_SIZE) {
7936
0
    return TPM_RC_SUCCESS;
7937
0
  }
7938
0
  if (*target == TPM_RC_NV_LOCKED) {
7939
0
    return TPM_RC_SUCCESS;
7940
0
  }
7941
0
  if (*target == TPM_RC_NV_AUTHORIZATION) {
7942
0
    return TPM_RC_SUCCESS;
7943
0
  }
7944
0
  if (*target == TPM_RC_NV_UNINITIALIZED) {
7945
0
    return TPM_RC_SUCCESS;
7946
0
  }
7947
0
  if (*target == TPM_RC_NV_SPACE) {
7948
0
    return TPM_RC_SUCCESS;
7949
0
  }
7950
0
  if (*target == TPM_RC_NV_DEFINED) {
7951
0
    return TPM_RC_SUCCESS;
7952
0
  }
7953
0
  if (*target == TPM_RC_BAD_CONTEXT) {
7954
0
    return TPM_RC_SUCCESS;
7955
0
  }
7956
0
  if (*target == TPM_RC_CPHASH) {
7957
0
    return TPM_RC_SUCCESS;
7958
0
  }
7959
0
  if (*target == TPM_RC_PARENT) {
7960
0
    return TPM_RC_SUCCESS;
7961
0
  }
7962
0
  if (*target == TPM_RC_NEEDS_TEST) {
7963
0
    return TPM_RC_SUCCESS;
7964
0
  }
7965
0
  if (*target == TPM_RC_NO_RESULT) {
7966
0
    return TPM_RC_SUCCESS;
7967
0
  }
7968
0
  if (*target == TPM_RC_SENSITIVE) {
7969
0
    return TPM_RC_SUCCESS;
7970
0
  }
7971
0
  if (*target == RC_MAX_FM0) {
7972
0
    return TPM_RC_SUCCESS;
7973
0
  }
7974
0
  if (*target == RC_FMT1) {
7975
0
    return TPM_RC_SUCCESS;
7976
0
  }
7977
0
  if (*target == TPM_RC_ASYMMETRIC) {
7978
0
    return TPM_RC_SUCCESS;
7979
0
  }
7980
0
  if (*target == TPM_RC_ATTRIBUTES) {
7981
0
    return TPM_RC_SUCCESS;
7982
0
  }
7983
0
  if (*target == TPM_RC_HASH) {
7984
0
    return TPM_RC_SUCCESS;
7985
0
  }
7986
0
  if (*target == TPM_RC_VALUE) {
7987
0
    return TPM_RC_SUCCESS;
7988
0
  }
7989
0
  if (*target == TPM_RC_HIERARCHY) {
7990
0
    return TPM_RC_SUCCESS;
7991
0
  }
7992
0
  if (*target == TPM_RC_KEY_SIZE) {
7993
0
    return TPM_RC_SUCCESS;
7994
0
  }
7995
0
  if (*target == TPM_RC_MGF) {
7996
0
    return TPM_RC_SUCCESS;
7997
0
  }
7998
0
  if (*target == TPM_RC_MODE) {
7999
0
    return TPM_RC_SUCCESS;
8000
0
  }
8001
0
  if (*target == TPM_RC_TYPE) {
8002
0
    return TPM_RC_SUCCESS;
8003
0
  }
8004
0
  if (*target == TPM_RC_HANDLE) {
8005
0
    return TPM_RC_SUCCESS;
8006
0
  }
8007
0
  if (*target == TPM_RC_KDF) {
8008
0
    return TPM_RC_SUCCESS;
8009
0
  }
8010
0
  if (*target == TPM_RC_RANGE) {
8011
0
    return TPM_RC_SUCCESS;
8012
0
  }
8013
0
  if (*target == TPM_RC_AUTH_FAIL) {
8014
0
    return TPM_RC_SUCCESS;
8015
0
  }
8016
0
  if (*target == TPM_RC_NONCE) {
8017
0
    return TPM_RC_SUCCESS;
8018
0
  }
8019
0
  if (*target == TPM_RC_PP) {
8020
0
    return TPM_RC_SUCCESS;
8021
0
  }
8022
0
  if (*target == TPM_RC_SCHEME) {
8023
0
    return TPM_RC_SUCCESS;
8024
0
  }
8025
0
  if (*target == TPM_RC_SIZE) {
8026
0
    return TPM_RC_SUCCESS;
8027
0
  }
8028
0
  if (*target == TPM_RC_SYMMETRIC) {
8029
0
    return TPM_RC_SUCCESS;
8030
0
  }
8031
0
  if (*target == TPM_RC_TAG) {
8032
0
    return TPM_RC_SUCCESS;
8033
0
  }
8034
0
  if (*target == TPM_RC_SELECTOR) {
8035
0
    return TPM_RC_SUCCESS;
8036
0
  }
8037
0
  if (*target == TPM_RC_INSUFFICIENT) {
8038
0
    return TPM_RC_SUCCESS;
8039
0
  }
8040
0
  if (*target == TPM_RC_SIGNATURE) {
8041
0
    return TPM_RC_SUCCESS;
8042
0
  }
8043
0
  if (*target == TPM_RC_KEY) {
8044
0
    return TPM_RC_SUCCESS;
8045
0
  }
8046
0
  if (*target == TPM_RC_POLICY_FAIL) {
8047
0
    return TPM_RC_SUCCESS;
8048
0
  }
8049
0
  if (*target == TPM_RC_INTEGRITY) {
8050
0
    return TPM_RC_SUCCESS;
8051
0
  }
8052
0
  if (*target == TPM_RC_TICKET) {
8053
0
    return TPM_RC_SUCCESS;
8054
0
  }
8055
0
  if (*target == TPM_RC_RESERVED_BITS) {
8056
0
    return TPM_RC_SUCCESS;
8057
0
  }
8058
0
  if (*target == TPM_RC_BAD_AUTH) {
8059
0
    return TPM_RC_SUCCESS;
8060
0
  }
8061
0
  if (*target == TPM_RC_EXPIRED) {
8062
0
    return TPM_RC_SUCCESS;
8063
0
  }
8064
0
  if (*target == TPM_RC_POLICY_CC) {
8065
0
    return TPM_RC_SUCCESS;
8066
0
  }
8067
0
  if (*target == TPM_RC_BINDING) {
8068
0
    return TPM_RC_SUCCESS;
8069
0
  }
8070
0
  if (*target == TPM_RC_CURVE) {
8071
0
    return TPM_RC_SUCCESS;
8072
0
  }
8073
0
  if (*target == TPM_RC_ECC_POINT) {
8074
0
    return TPM_RC_SUCCESS;
8075
0
  }
8076
0
  if (*target == RC_WARN) {
8077
0
    return TPM_RC_SUCCESS;
8078
0
  }
8079
0
  if (*target == TPM_RC_CONTEXT_GAP) {
8080
0
    return TPM_RC_SUCCESS;
8081
0
  }
8082
0
  if (*target == TPM_RC_OBJECT_MEMORY) {
8083
0
    return TPM_RC_SUCCESS;
8084
0
  }
8085
0
  if (*target == TPM_RC_SESSION_MEMORY) {
8086
0
    return TPM_RC_SUCCESS;
8087
0
  }
8088
0
  if (*target == TPM_RC_MEMORY) {
8089
0
    return TPM_RC_SUCCESS;
8090
0
  }
8091
0
  if (*target == TPM_RC_SESSION_HANDLES) {
8092
0
    return TPM_RC_SUCCESS;
8093
0
  }
8094
0
  if (*target == TPM_RC_OBJECT_HANDLES) {
8095
0
    return TPM_RC_SUCCESS;
8096
0
  }
8097
0
  if (*target == TPM_RC_LOCALITY) {
8098
0
    return TPM_RC_SUCCESS;
8099
0
  }
8100
0
  if (*target == TPM_RC_YIELDED) {
8101
0
    return TPM_RC_SUCCESS;
8102
0
  }
8103
0
  if (*target == TPM_RC_CANCELED) {
8104
0
    return TPM_RC_SUCCESS;
8105
0
  }
8106
0
  if (*target == TPM_RC_TESTING) {
8107
0
    return TPM_RC_SUCCESS;
8108
0
  }
8109
0
  if (*target == TPM_RC_REFERENCE_H0) {
8110
0
    return TPM_RC_SUCCESS;
8111
0
  }
8112
0
  if (*target == TPM_RC_REFERENCE_H1) {
8113
0
    return TPM_RC_SUCCESS;
8114
0
  }
8115
0
  if (*target == TPM_RC_REFERENCE_H2) {
8116
0
    return TPM_RC_SUCCESS;
8117
0
  }
8118
0
  if (*target == TPM_RC_REFERENCE_H3) {
8119
0
    return TPM_RC_SUCCESS;
8120
0
  }
8121
0
  if (*target == TPM_RC_REFERENCE_H4) {
8122
0
    return TPM_RC_SUCCESS;
8123
0
  }
8124
0
  if (*target == TPM_RC_REFERENCE_H5) {
8125
0
    return TPM_RC_SUCCESS;
8126
0
  }
8127
0
  if (*target == TPM_RC_REFERENCE_H6) {
8128
0
    return TPM_RC_SUCCESS;
8129
0
  }
8130
0
  if (*target == TPM_RC_REFERENCE_S0) {
8131
0
    return TPM_RC_SUCCESS;
8132
0
  }
8133
0
  if (*target == TPM_RC_REFERENCE_S1) {
8134
0
    return TPM_RC_SUCCESS;
8135
0
  }
8136
0
  if (*target == TPM_RC_REFERENCE_S2) {
8137
0
    return TPM_RC_SUCCESS;
8138
0
  }
8139
0
  if (*target == TPM_RC_REFERENCE_S3) {
8140
0
    return TPM_RC_SUCCESS;
8141
0
  }
8142
0
  if (*target == TPM_RC_REFERENCE_S4) {
8143
0
    return TPM_RC_SUCCESS;
8144
0
  }
8145
0
  if (*target == TPM_RC_REFERENCE_S5) {
8146
0
    return TPM_RC_SUCCESS;
8147
0
  }
8148
0
  if (*target == TPM_RC_REFERENCE_S6) {
8149
0
    return TPM_RC_SUCCESS;
8150
0
  }
8151
0
  if (*target == TPM_RC_NV_RATE) {
8152
0
    return TPM_RC_SUCCESS;
8153
0
  }
8154
0
  if (*target == TPM_RC_LOCKOUT) {
8155
0
    return TPM_RC_SUCCESS;
8156
0
  }
8157
0
  if (*target == TPM_RC_RETRY) {
8158
0
    return TPM_RC_SUCCESS;
8159
0
  }
8160
0
  if (*target == TPM_RC_NV_UNAVAILABLE) {
8161
0
    return TPM_RC_SUCCESS;
8162
0
  }
8163
0
  if (*target == TPM_RC_NOT_USED) {
8164
0
    return TPM_RC_SUCCESS;
8165
0
  }
8166
0
  if (*target == TPM_RC_H) {
8167
0
    return TPM_RC_SUCCESS;
8168
0
  }
8169
0
  if (*target == TPM_RC_P) {
8170
0
    return TPM_RC_SUCCESS;
8171
0
  }
8172
0
  if (*target == TPM_RC_S) {
8173
0
    return TPM_RC_SUCCESS;
8174
0
  }
8175
0
  if (*target == TPM_RC_1) {
8176
0
    return TPM_RC_SUCCESS;
8177
0
  }
8178
0
  if (*target == TPM_RC_2) {
8179
0
    return TPM_RC_SUCCESS;
8180
0
  }
8181
0
  if (*target == TPM_RC_3) {
8182
0
    return TPM_RC_SUCCESS;
8183
0
  }
8184
0
  if (*target == TPM_RC_4) {
8185
0
    return TPM_RC_SUCCESS;
8186
0
  }
8187
0
  if (*target == TPM_RC_5) {
8188
0
    return TPM_RC_SUCCESS;
8189
0
  }
8190
0
  if (*target == TPM_RC_6) {
8191
0
    return TPM_RC_SUCCESS;
8192
0
  }
8193
0
  if (*target == TPM_RC_7) {
8194
0
    return TPM_RC_SUCCESS;
8195
0
  }
8196
0
  if (*target == TPM_RC_8) {
8197
0
    return TPM_RC_SUCCESS;
8198
0
  }
8199
0
  if (*target == TPM_RC_9) {
8200
0
    return TPM_RC_SUCCESS;
8201
0
  }
8202
0
  if (*target == TPM_RC_A) {
8203
0
    return TPM_RC_SUCCESS;
8204
0
  }
8205
0
  if (*target == TPM_RC_B) {
8206
0
    return TPM_RC_SUCCESS;
8207
0
  }
8208
0
  if (*target == TPM_RC_C) {
8209
0
    return TPM_RC_SUCCESS;
8210
0
  }
8211
0
  if (*target == TPM_RC_D) {
8212
0
    return TPM_RC_SUCCESS;
8213
0
  }
8214
0
  if (*target == TPM_RC_E) {
8215
0
    return TPM_RC_SUCCESS;
8216
0
  }
8217
0
  if (*target == TPM_RC_F) {
8218
0
    return TPM_RC_SUCCESS;
8219
0
  }
8220
0
  if (*target == TPM_RC_N_MASK) {
8221
0
    return TPM_RC_SUCCESS;
8222
0
  }
8223
0
  return TPM_RC_VALUE;
8224
0
}
8225
8226
0
UINT16 TPM_RH_Marshal(TPM_RH* source, BYTE** buffer, INT32* size) {
8227
0
  return uint32_t_Marshal(source, buffer, size);
8228
0
}
8229
8230
0
TPM_RC TPM_RH_Unmarshal(TPM_RH* target, BYTE** buffer, INT32* size) {
8231
0
  TPM_RC result;
8232
0
  result = uint32_t_Unmarshal(target, buffer, size);
8233
0
  if (result != TPM_RC_SUCCESS) {
8234
0
    return result;
8235
0
  }
8236
0
  if (*target == TPM_RH_FIRST) {
8237
0
    return TPM_RC_SUCCESS;
8238
0
  }
8239
0
  if (*target == TPM_RH_SRK) {
8240
0
    return TPM_RC_SUCCESS;
8241
0
  }
8242
0
  if (*target == TPM_RH_OWNER) {
8243
0
    return TPM_RC_SUCCESS;
8244
0
  }
8245
0
  if (*target == TPM_RH_REVOKE) {
8246
0
    return TPM_RC_SUCCESS;
8247
0
  }
8248
0
  if (*target == TPM_RH_TRANSPORT) {
8249
0
    return TPM_RC_SUCCESS;
8250
0
  }
8251
0
  if (*target == TPM_RH_OPERATOR) {
8252
0
    return TPM_RC_SUCCESS;
8253
0
  }
8254
0
  if (*target == TPM_RH_ADMIN) {
8255
0
    return TPM_RC_SUCCESS;
8256
0
  }
8257
0
  if (*target == TPM_RH_EK) {
8258
0
    return TPM_RC_SUCCESS;
8259
0
  }
8260
0
  if (*target == TPM_RH_NULL) {
8261
0
    return TPM_RC_SUCCESS;
8262
0
  }
8263
0
  if (*target == TPM_RH_UNASSIGNED) {
8264
0
    return TPM_RC_SUCCESS;
8265
0
  }
8266
0
  if (*target == TPM_RS_PW) {
8267
0
    return TPM_RC_SUCCESS;
8268
0
  }
8269
0
  if (*target == TPM_RH_LOCKOUT) {
8270
0
    return TPM_RC_SUCCESS;
8271
0
  }
8272
0
  if (*target == TPM_RH_ENDORSEMENT) {
8273
0
    return TPM_RC_SUCCESS;
8274
0
  }
8275
0
  if (*target == TPM_RH_PLATFORM) {
8276
0
    return TPM_RC_SUCCESS;
8277
0
  }
8278
0
  if (*target == TPM_RH_PLATFORM_NV) {
8279
0
    return TPM_RC_SUCCESS;
8280
0
  }
8281
0
  if (*target == TPM_RH_AUTH_00) {
8282
0
    return TPM_RC_SUCCESS;
8283
0
  }
8284
0
  if (*target == TPM_RH_AUTH_FF) {
8285
0
    return TPM_RC_SUCCESS;
8286
0
  }
8287
0
  if (*target == TPM_RH_LAST) {
8288
0
    return TPM_RC_SUCCESS;
8289
0
  }
8290
0
  return TPM_RC_VALUE;
8291
0
}
8292
8293
0
UINT16 TPM_SE_Marshal(TPM_SE* source, BYTE** buffer, INT32* size) {
8294
0
  return uint8_t_Marshal(source, buffer, size);
8295
0
}
8296
8297
127
TPM_RC TPM_SE_Unmarshal(TPM_SE* target, BYTE** buffer, INT32* size) {
8298
127
  TPM_RC result;
8299
127
  result = uint8_t_Unmarshal(target, buffer, size);
8300
127
  if (result != TPM_RC_SUCCESS) {
8301
3
    return result;
8302
3
  }
8303
124
  if (*target == TPM_SE_HMAC) {
8304
86
    return TPM_RC_SUCCESS;
8305
86
  }
8306
38
  if (*target == TPM_SE_POLICY) {
8307
9
    return TPM_RC_SUCCESS;
8308
9
  }
8309
29
  if (*target == TPM_SE_TRIAL) {
8310
16
    return TPM_RC_SUCCESS;
8311
16
  }
8312
13
  return TPM_RC_VALUE;
8313
29
}
8314
8315
0
UINT16 TPM_SPEC_Marshal(TPM_SPEC* source, BYTE** buffer, INT32* size) {
8316
0
  return uint32_t_Marshal(source, buffer, size);
8317
0
}
8318
8319
0
TPM_RC TPM_SPEC_Unmarshal(TPM_SPEC* target, BYTE** buffer, INT32* size) {
8320
0
  TPM_RC result;
8321
0
  result = uint32_t_Unmarshal(target, buffer, size);
8322
0
  if (result != TPM_RC_SUCCESS) {
8323
0
    return result;
8324
0
  }
8325
0
  if (*target == TPM_SPEC_FAMILY) {
8326
0
    return TPM_RC_SUCCESS;
8327
0
  }
8328
0
  if (*target == TPM_SPEC_LEVEL) {
8329
0
    return TPM_RC_SUCCESS;
8330
0
  }
8331
0
  if (*target == TPM_SPEC_VERSION) {
8332
0
    return TPM_RC_SUCCESS;
8333
0
  }
8334
0
  if (*target == TPM_SPEC_YEAR) {
8335
0
    return TPM_RC_SUCCESS;
8336
0
  }
8337
0
  if (*target == TPM_SPEC_DAY_OF_YEAR) {
8338
0
    return TPM_RC_SUCCESS;
8339
0
  }
8340
0
  return TPM_RC_VALUE;
8341
0
}
8342
8343
0
UINT16 TPM_SU_Marshal(TPM_SU* source, BYTE** buffer, INT32* size) {
8344
0
  return uint16_t_Marshal(source, buffer, size);
8345
0
}
8346
8347
5.65k
TPM_RC TPM_SU_Unmarshal(TPM_SU* target, BYTE** buffer, INT32* size) {
8348
5.65k
  TPM_RC result;
8349
5.65k
  result = uint16_t_Unmarshal(target, buffer, size);
8350
5.65k
  if (result != TPM_RC_SUCCESS) {
8351
2
    return result;
8352
2
  }
8353
5.65k
  if (*target == TPM_SU_CLEAR) {
8354
5.64k
    return TPM_RC_SUCCESS;
8355
5.64k
  }
8356
14
  if (*target == TPM_SU_STATE) {
8357
1
    return TPM_RC_SUCCESS;
8358
1
  }
8359
13
  return TPM_RC_VALUE;
8360
14
}
8361
8362
0
UINT16 _ID_OBJECT_Marshal(_ID_OBJECT* source, BYTE** buffer, INT32* size) {
8363
0
  UINT16 total_size = 0;
8364
0
  total_size += TPM2B_DIGEST_Marshal(&source->integrityHMAC, buffer, size);
8365
0
  total_size += TPM2B_DIGEST_Marshal(&source->encIdentity, buffer, size);
8366
0
  return total_size;
8367
0
}
8368
8369
0
TPM_RC _ID_OBJECT_Unmarshal(_ID_OBJECT* target, BYTE** buffer, INT32* size) {
8370
0
  TPM_RC result;
8371
0
  result = TPM2B_DIGEST_Unmarshal(&target->integrityHMAC, buffer, size);
8372
0
  if (result != TPM_RC_SUCCESS) {
8373
0
    return result;
8374
0
  }
8375
0
  result = TPM2B_DIGEST_Unmarshal(&target->encIdentity, buffer, size);
8376
0
  if (result != TPM_RC_SUCCESS) {
8377
0
    return result;
8378
0
  }
8379
0
  return TPM_RC_SUCCESS;
8380
0
}
8381
8382
0
UINT16 _PRIVATE_Marshal(_PRIVATE* source, BYTE** buffer, INT32* size) {
8383
0
  UINT16 total_size = 0;
8384
0
  total_size += TPM2B_DIGEST_Marshal(&source->integrityOuter, buffer, size);
8385
0
  total_size += TPM2B_DIGEST_Marshal(&source->integrityInner, buffer, size);
8386
0
  total_size += TPMT_SENSITIVE_Marshal(&source->sensitive, buffer, size);
8387
0
  return total_size;
8388
0
}
8389
8390
0
TPM_RC _PRIVATE_Unmarshal(_PRIVATE* target, BYTE** buffer, INT32* size) {
8391
0
  TPM_RC result;
8392
0
  result = TPM2B_DIGEST_Unmarshal(&target->integrityOuter, buffer, size);
8393
0
  if (result != TPM_RC_SUCCESS) {
8394
0
    return result;
8395
0
  }
8396
0
  result = TPM2B_DIGEST_Unmarshal(&target->integrityInner, buffer, size);
8397
0
  if (result != TPM_RC_SUCCESS) {
8398
0
    return result;
8399
0
  }
8400
0
  result = TPMT_SENSITIVE_Unmarshal(&target->sensitive, buffer, size);
8401
0
  if (result != TPM_RC_SUCCESS) {
8402
0
    return result;
8403
0
  }
8404
0
  return TPM_RC_SUCCESS;
8405
0
}