Coverage Report

Created: 2025-10-10 06:20

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/tpm2/tpm_generated.c
Line
Count
Source
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
57.9k
UINT16 uint8_t_Marshal(uint8_t* source, BYTE** buffer, INT32* size) {
10
57.9k
  uint8_t value_net = *source;
11
57.9k
  if (!size || *size < sizeof(uint8_t)) {
12
0
    return 0;  // Nothing has been marshaled.
13
0
  }
14
57.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
57.9k
    default:
25
57.9k
      break;
26
57.9k
  }
27
57.9k
  memcpy(*buffer, &value_net, sizeof(uint8_t));
28
57.9k
  *buffer += sizeof(uint8_t);
29
57.9k
  *size -= sizeof(uint8_t);
30
57.9k
  return sizeof(uint8_t);
31
57.9k
}
32
33
36.3k
TPM_RC uint8_t_Unmarshal(uint8_t* target, BYTE** buffer, INT32* size) {
34
36.3k
  uint8_t value_net = 0;
35
36.3k
  if (!size || *size < sizeof(uint8_t)) {
36
43
    return TPM_RC_INSUFFICIENT;
37
43
  }
38
36.2k
  memcpy(&value_net, *buffer, sizeof(uint8_t));
39
36.2k
  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
36.2k
    default:
50
36.2k
      *target = value_net;
51
36.2k
  }
52
36.2k
  *buffer += sizeof(uint8_t);
53
36.2k
  *size -= sizeof(uint8_t);
54
36.2k
  return TPM_RC_SUCCESS;
55
36.2k
}
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
6.06k
UINT16 uint16_t_Marshal(uint16_t* source, BYTE** buffer, INT32* size) {
106
6.06k
  uint16_t value_net = *source;
107
6.06k
  if (!size || *size < sizeof(uint16_t)) {
108
0
    return 0;  // Nothing has been marshaled.
109
0
  }
110
6.06k
  switch (sizeof(uint16_t)) {
111
6.06k
    case 2:
112
6.06k
      value_net = htobe16(*source);
113
6.06k
      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
6.06k
  }
123
6.06k
  memcpy(*buffer, &value_net, sizeof(uint16_t));
124
6.06k
  *buffer += sizeof(uint16_t);
125
6.06k
  *size -= sizeof(uint16_t);
126
6.06k
  return sizeof(uint16_t);
127
6.06k
}
128
129
5.94k
TPM_RC uint16_t_Unmarshal(uint16_t* target, BYTE** buffer, INT32* size) {
130
5.94k
  uint16_t value_net = 0;
131
5.94k
  if (!size || *size < sizeof(uint16_t)) {
132
6
    return TPM_RC_INSUFFICIENT;
133
6
  }
134
5.94k
  memcpy(&value_net, *buffer, sizeof(uint16_t));
135
5.94k
  switch (sizeof(uint16_t)) {
136
5.94k
    case 2:
137
5.94k
      *target = be16toh(value_net);
138
5.94k
      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
5.94k
  }
148
5.94k
  *buffer += sizeof(uint16_t);
149
5.94k
  *size -= sizeof(uint16_t);
150
5.94k
  return TPM_RC_SUCCESS;
151
5.94k
}
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
3.54k
UINT16 uint32_t_Marshal(uint32_t* source, BYTE** buffer, INT32* size) {
202
3.54k
  uint32_t value_net = *source;
203
3.54k
  if (!size || *size < sizeof(uint32_t)) {
204
0
    return 0;  // Nothing has been marshaled.
205
0
  }
206
3.54k
  switch (sizeof(uint32_t)) {
207
0
    case 2:
208
0
      value_net = htobe16(*source);
209
0
      break;
210
3.54k
    case 4:
211
3.54k
      value_net = htobe32(*source);
212
3.54k
      break;
213
0
    case 8:
214
0
      value_net = htobe64(*source);
215
0
      break;
216
0
    default:
217
0
      break;
218
3.54k
  }
219
3.54k
  memcpy(*buffer, &value_net, sizeof(uint32_t));
220
3.54k
  *buffer += sizeof(uint32_t);
221
3.54k
  *size -= sizeof(uint32_t);
222
3.54k
  return sizeof(uint32_t);
223
3.54k
}
224
225
3.84k
TPM_RC uint32_t_Unmarshal(uint32_t* target, BYTE** buffer, INT32* size) {
226
3.84k
  uint32_t value_net = 0;
227
3.84k
  if (!size || *size < sizeof(uint32_t)) {
228
0
    return TPM_RC_INSUFFICIENT;
229
0
  }
230
3.84k
  memcpy(&value_net, *buffer, sizeof(uint32_t));
231
3.84k
  switch (sizeof(uint32_t)) {
232
0
    case 2:
233
0
      *target = be16toh(value_net);
234
0
      break;
235
3.84k
    case 4:
236
3.84k
      *target = be32toh(value_net);
237
3.84k
      break;
238
0
    case 8:
239
0
      *target = be64toh(value_net);
240
0
      break;
241
0
    default:
242
0
      *target = value_net;
243
3.84k
  }
244
3.84k
  *buffer += sizeof(uint32_t);
245
3.84k
  *size -= sizeof(uint32_t);
246
3.84k
  return TPM_RC_SUCCESS;
247
3.84k
}
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
21
TPM_RC uint64_t_Unmarshal(uint64_t* target, BYTE** buffer, INT32* size) {
322
21
  uint64_t value_net = 0;
323
21
  if (!size || *size < sizeof(uint64_t)) {
324
0
    return TPM_RC_INSUFFICIENT;
325
0
  }
326
21
  memcpy(&value_net, *buffer, sizeof(uint64_t));
327
21
  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
21
    case 8:
335
21
      *target = be64toh(value_net);
336
21
      break;
337
0
    default:
338
0
      *target = value_net;
339
21
  }
340
21
  *buffer += sizeof(uint64_t);
341
21
  *size -= sizeof(uint64_t);
342
21
  return TPM_RC_SUCCESS;
343
21
}
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
57.4k
UINT16 BYTE_Marshal(BYTE* source, BYTE** buffer, INT32* size) {
394
57.4k
  return uint8_t_Marshal(source, buffer, size);
395
57.4k
}
396
397
35.9k
TPM_RC BYTE_Unmarshal(BYTE* target, BYTE** buffer, INT32* size) {
398
35.9k
  return uint8_t_Unmarshal(target, buffer, size);
399
35.9k
}
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
2.62k
UINT16 UINT16_Marshal(UINT16* source, BYTE** buffer, INT32* size) {
434
2.62k
  return uint16_t_Marshal(source, buffer, size);
435
2.62k
}
436
437
2.61k
TPM_RC UINT16_Unmarshal(UINT16* target, BYTE** buffer, INT32* size) {
438
2.61k
  return uint16_t_Unmarshal(target, buffer, size);
439
2.61k
}
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.20k
UINT16 TPM2B_DIGEST_Marshal(TPM2B_DIGEST* source, BYTE** buffer, INT32* size) {
476
1.20k
  UINT16 total_size = 0;
477
1.20k
  INT32 i;
478
1.20k
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
479
21.3k
  for (i = 0; i < source->t.size; ++i) {
480
20.1k
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
481
20.1k
  }
482
1.20k
  return total_size;
483
1.20k
}
484
485
TPM_RC TPM2B_DIGEST_Unmarshal(TPM2B_DIGEST* target,
486
                              BYTE** buffer,
487
1.32k
                              INT32* size) {
488
1.32k
  TPM_RC result;
489
1.32k
  INT32 i;
490
1.32k
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
491
1.32k
  if (result != TPM_RC_SUCCESS) {
492
0
    return result;
493
0
  }
494
1.32k
  if (target->t.size == 0) {
495
1.12k
    return TPM_RC_SUCCESS;
496
1.12k
  }
497
199
  if (target->t.size > sizeof(TPMU_HA)) {
498
7
    return TPM_RC_SIZE;
499
7
  }
500
4.88k
  for (i = 0; i < target->t.size; ++i) {
501
4.69k
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
502
4.69k
    if (result != TPM_RC_SUCCESS) {
503
10
      return result;
504
10
    }
505
4.69k
  }
506
182
  return TPM_RC_SUCCESS;
507
192
}
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
581
TPM_RC TPM2B_AUTH_Unmarshal(TPM2B_AUTH* target, BYTE** buffer, INT32* size) {
514
581
  return TPM2B_DIGEST_Unmarshal(target, buffer, size);
515
581
}
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
20
                                    INT32* size) {
532
20
  TPM_RC result;
533
20
  INT32 i;
534
20
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
535
20
  if (result != TPM_RC_SUCCESS) {
536
0
    return result;
537
0
  }
538
20
  if (target->t.size == 0) {
539
0
    return TPM_RC_SUCCESS;
540
0
  }
541
20
  if (target->t.size > sizeof(TPMS_CONTEXT_DATA)) {
542
2
    return TPM_RC_SIZE;
543
2
  }
544
1.05k
  for (i = 0; i < target->t.size; ++i) {
545
1.03k
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
546
1.03k
    if (result != TPM_RC_SUCCESS) {
547
3
      return result;
548
3
    }
549
1.03k
  }
550
15
  return TPM_RC_SUCCESS;
551
18
}
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
200
UINT16 TPM_ALG_ID_Marshal(TPM_ALG_ID* source, BYTE** buffer, INT32* size) {
590
200
  return uint16_t_Marshal(source, buffer, size);
591
200
}
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
200
UINT16 TPM2B_DATA_Marshal(TPM2B_DATA* source, BYTE** buffer, INT32* size) {
783
200
  UINT16 total_size = 0;
784
200
  INT32 i;
785
200
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
786
522
  for (i = 0; i < source->t.size; ++i) {
787
322
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
788
322
  }
789
200
  return total_size;
790
200
}
791
792
162
TPM_RC TPM2B_DATA_Unmarshal(TPM2B_DATA* target, BYTE** buffer, INT32* size) {
793
162
  TPM_RC result;
794
162
  INT32 i;
795
162
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
796
162
  if (result != TPM_RC_SUCCESS) {
797
0
    return result;
798
0
  }
799
162
  if (target->t.size == 0) {
800
133
    return TPM_RC_SUCCESS;
801
133
  }
802
29
  if (target->t.size > sizeof(TPMT_HA)) {
803
1
    return TPM_RC_SIZE;
804
1
  }
805
290
  for (i = 0; i < target->t.size; ++i) {
806
263
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
807
263
    if (result != TPM_RC_SUCCESS) {
808
1
      return result;
809
1
    }
810
263
  }
811
27
  return TPM_RC_SUCCESS;
812
28
}
813
814
UINT16 TPMA_LOCALITY_Marshal(TPMA_LOCALITY* source,
815
                             BYTE** buffer,
816
200
                             INT32* size) {
817
200
  return uint8_t_Marshal((uint8_t*)source, buffer, size);
818
200
}
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
502
UINT16 TPM2B_NAME_Marshal(TPM2B_NAME* source, BYTE** buffer, INT32* size) {
832
502
  UINT16 total_size = 0;
833
502
  INT32 i;
834
502
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
835
6.56k
  for (i = 0; i < source->t.size; ++i) {
836
6.06k
    total_size += BYTE_Marshal(&source->t.name[i], buffer, size);
837
6.06k
  }
838
502
  return total_size;
839
502
}
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
645
                             INT32* size) {
866
645
  return uint16_t_Marshal(source, buffer, size);
867
645
}
868
869
TPM_RC TPMI_ALG_HASH_Unmarshal(TPMI_ALG_HASH* target,
870
                               BYTE** buffer,
871
                               INT32* size,
872
636
                               BOOL allow_conditional_value) {
873
636
  TPM_RC result;
874
636
  BOOL has_valid_value = FALSE;
875
636
  result = uint16_t_Unmarshal(target, buffer, size);
876
636
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
877
2
    return result;
878
2
  }
879
634
  if (*target == TPM_ALG_NULL) {
880
5
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_HASH;
881
5
  }
882
629
  switch (*target) {
883
#ifdef TPM_ALG_SHA
884
    case TPM_ALG_SHA:
885
#endif
886
0
#ifdef TPM_ALG_SHA1
887
165
    case TPM_ALG_SHA1:
888
165
#endif
889
165
#ifdef TPM_ALG_SHA256
890
277
    case TPM_ALG_SHA256:
891
277
#endif
892
277
#ifdef TPM_ALG_SHA384
893
429
    case TPM_ALG_SHA384:
894
429
#endif
895
429
#ifdef TPM_ALG_SHA512
896
605
    case TPM_ALG_SHA512:
897
605
#endif
898
#ifdef TPM_ALG_SM3_256
899
    case TPM_ALG_SM3_256:
900
#endif
901
605
      has_valid_value = TRUE;
902
605
      break;
903
629
  }
904
629
  if (!has_valid_value) {
905
24
    return TPM_RC_HASH;
906
24
  }
907
605
  return TPM_RC_SUCCESS;
908
629
}
909
910
114
UINT16 UINT8_Marshal(UINT8* source, BYTE** buffer, INT32* size) {
911
114
  return uint8_t_Marshal(source, buffer, size);
912
114
}
913
914
93
TPM_RC UINT8_Unmarshal(UINT8* target, BYTE** buffer, INT32* size) {
915
93
  return uint8_t_Unmarshal(target, buffer, size);
916
93
}
917
918
UINT16 TPMS_PCR_SELECTION_Marshal(TPMS_PCR_SELECTION* source,
919
                                  BYTE** buffer,
920
114
                                  INT32* size) {
921
114
  UINT16 total_size = 0;
922
114
  INT32 i;
923
114
  total_size += TPMI_ALG_HASH_Marshal(&source->hash, buffer, size);
924
114
  total_size += UINT8_Marshal(&source->sizeofSelect, buffer, size);
925
456
  for (i = 0; i < source->sizeofSelect; ++i) {
926
342
    total_size += BYTE_Marshal(&source->pcrSelect[i], buffer, size);
927
342
  }
928
114
  return total_size;
929
114
}
930
931
TPM_RC TPMS_PCR_SELECTION_Unmarshal(TPMS_PCR_SELECTION* target,
932
                                    BYTE** buffer,
933
93
                                    INT32* size) {
934
93
  TPM_RC result;
935
93
  INT32 i;
936
93
  result = TPMI_ALG_HASH_Unmarshal(&target->hash, buffer, size, FALSE);
937
93
  if (result != TPM_RC_SUCCESS) {
938
0
    return result;
939
0
  }
940
93
  result = UINT8_Unmarshal(&target->sizeofSelect, buffer, size);
941
93
  if (result != TPM_RC_SUCCESS) {
942
0
    return result;
943
0
  }
944
93
  if (target->sizeofSelect > PCR_SELECT_MAX) {
945
1
    return TPM_RC_PCR;
946
1
  }
947
92
  if (target->sizeofSelect < PCR_SELECT_MIN) {
948
1
    return TPM_RC_PCR;
949
1
  }
950
364
  for (i = 0; i < target->sizeofSelect; ++i) {
951
273
    result = BYTE_Unmarshal(&target->pcrSelect[i], buffer, size);
952
273
    if (result != TPM_RC_SUCCESS) {
953
0
      return result;
954
0
    }
955
273
  }
956
91
  return TPM_RC_SUCCESS;
957
91
}
958
959
1.76k
UINT16 UINT32_Marshal(UINT32* source, BYTE** buffer, INT32* size) {
960
1.76k
  return uint32_t_Marshal(source, buffer, size);
961
1.76k
}
962
963
1.72k
TPM_RC UINT32_Unmarshal(UINT32* target, BYTE** buffer, INT32* size) {
964
1.72k
  return uint32_t_Unmarshal(target, buffer, size);
965
1.72k
}
966
967
UINT16 TPML_PCR_SELECTION_Marshal(TPML_PCR_SELECTION* source,
968
                                  BYTE** buffer,
969
200
                                  INT32* size) {
970
200
  UINT16 total_size = 0;
971
200
  INT32 i;
972
200
  total_size += UINT32_Marshal(&source->count, buffer, size);
973
314
  for (i = 0; i < source->count; ++i) {
974
114
    total_size +=
975
114
        TPMS_PCR_SELECTION_Marshal(&source->pcrSelections[i], buffer, size);
976
114
  }
977
200
  return total_size;
978
200
}
979
980
TPM_RC TPML_PCR_SELECTION_Unmarshal(TPML_PCR_SELECTION* target,
981
                                    BYTE** buffer,
982
167
                                    INT32* size) {
983
167
  TPM_RC result;
984
167
  INT32 i;
985
167
  result = UINT32_Unmarshal(&target->count, buffer, size);
986
167
  if (result != TPM_RC_SUCCESS) {
987
0
    return result;
988
0
  }
989
167
  if (target->count > HASH_COUNT) {
990
3
    return TPM_RC_SIZE;
991
3
  }
992
255
  for (i = 0; i < target->count; ++i) {
993
93
    result =
994
93
        TPMS_PCR_SELECTION_Unmarshal(&target->pcrSelections[i], buffer, size);
995
93
    if (result != TPM_RC_SUCCESS) {
996
2
      return result;
997
2
    }
998
93
  }
999
162
  return TPM_RC_SUCCESS;
1000
164
}
1001
1002
UINT16 TPMS_CREATION_DATA_Marshal(TPMS_CREATION_DATA* source,
1003
                                  BYTE** buffer,
1004
200
                                  INT32* size) {
1005
200
  UINT16 total_size = 0;
1006
200
  total_size += TPML_PCR_SELECTION_Marshal(&source->pcrSelect, buffer, size);
1007
200
  total_size += TPM2B_DIGEST_Marshal(&source->pcrDigest, buffer, size);
1008
200
  total_size += TPMA_LOCALITY_Marshal(&source->locality, buffer, size);
1009
200
  total_size += TPM_ALG_ID_Marshal(&source->parentNameAlg, buffer, size);
1010
200
  total_size += TPM2B_NAME_Marshal(&source->parentName, buffer, size);
1011
200
  total_size += TPM2B_NAME_Marshal(&source->parentQualifiedName, buffer, size);
1012
200
  total_size += TPM2B_DATA_Marshal(&source->outsideInfo, buffer, size);
1013
200
  return total_size;
1014
200
}
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
100
                                   INT32* size) {
1054
100
  UINT16 total_size = 0;
1055
100
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1056
100
  total_size +=
1057
100
      TPMS_CREATION_DATA_Marshal(&source->t.creationData, buffer, size);
1058
100
  {
1059
100
    BYTE* size_location = *buffer - total_size;
1060
100
    INT32 size_field_size = sizeof(UINT16);
1061
100
    UINT16 payload_size = total_size - (UINT16)size_field_size;
1062
100
    UINT16_Marshal(&payload_size, &size_location, &size_field_size);
1063
100
  }
1064
100
  return total_size;
1065
100
}
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
98
                                   INT32* size) {
1130
98
  UINT16 total_size = 0;
1131
98
  INT32 i;
1132
98
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1133
2.65k
  for (i = 0; i < source->t.size; ++i) {
1134
2.55k
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
1135
2.55k
  }
1136
98
  return total_size;
1137
98
}
1138
1139
TPM_RC TPM2B_ECC_PARAMETER_Unmarshal(TPM2B_ECC_PARAMETER* target,
1140
                                     BYTE** buffer,
1141
79
                                     INT32* size) {
1142
79
  TPM_RC result;
1143
79
  INT32 i;
1144
79
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1145
79
  if (result != TPM_RC_SUCCESS) {
1146
0
    return result;
1147
0
  }
1148
79
  if (target->t.size == 0) {
1149
35
    return TPM_RC_SUCCESS;
1150
35
  }
1151
44
  if (target->t.size > MAX_ECC_KEY_BYTES) {
1152
0
    return TPM_RC_SIZE;
1153
0
  }
1154
1.14k
  for (i = 0; i < target->t.size; ++i) {
1155
1.10k
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
1156
1.10k
    if (result != TPM_RC_SUCCESS) {
1157
2
      return result;
1158
2
    }
1159
1.10k
  }
1160
42
  return TPM_RC_SUCCESS;
1161
44
}
1162
1163
UINT16 TPMS_ECC_POINT_Marshal(TPMS_ECC_POINT* source,
1164
                              BYTE** buffer,
1165
49
                              INT32* size) {
1166
49
  UINT16 total_size = 0;
1167
49
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->x, buffer, size);
1168
49
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->y, buffer, size);
1169
49
  return total_size;
1170
49
}
1171
1172
TPM_RC TPMS_ECC_POINT_Unmarshal(TPMS_ECC_POINT* target,
1173
                                BYTE** buffer,
1174
34
                                INT32* size) {
1175
34
  TPM_RC result;
1176
34
  result = TPM2B_ECC_PARAMETER_Unmarshal(&target->x, buffer, size);
1177
34
  if (result != TPM_RC_SUCCESS) {
1178
1
    return result;
1179
1
  }
1180
33
  result = TPM2B_ECC_PARAMETER_Unmarshal(&target->y, buffer, size);
1181
33
  if (result != TPM_RC_SUCCESS) {
1182
1
    return result;
1183
1
  }
1184
32
  return TPM_RC_SUCCESS;
1185
33
}
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
14
                                        INT32* size) {
1241
14
  TPM_RC result;
1242
14
  INT32 i;
1243
14
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1244
14
  if (result != TPM_RC_SUCCESS) {
1245
0
    return result;
1246
0
  }
1247
14
  if (target->t.size == 0) {
1248
8
    return TPM_RC_SUCCESS;
1249
8
  }
1250
6
  if (target->t.size > sizeof(TPMU_ENCRYPTED_SECRET)) {
1251
1
    return TPM_RC_SIZE;
1252
1
  }
1253
503
  for (i = 0; i < target->t.size; ++i) {
1254
500
    result = BYTE_Unmarshal(&target->t.secret[i], buffer, size);
1255
500
    if (result != TPM_RC_SUCCESS) {
1256
2
      return result;
1257
2
    }
1258
500
  }
1259
3
  return TPM_RC_SUCCESS;
1260
5
}
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
0
                                INT32* size) {
1365
0
  UINT16 total_size = 0;
1366
0
  INT32 i;
1367
0
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1368
0
  for (i = 0; i < source->t.size; ++i) {
1369
0
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
1370
0
  }
1371
0
  return total_size;
1372
0
}
1373
1374
TPM_RC TPM2B_MAX_BUFFER_Unmarshal(TPM2B_MAX_BUFFER* target,
1375
                                  BYTE** buffer,
1376
8
                                  INT32* size) {
1377
8
  TPM_RC result;
1378
8
  INT32 i;
1379
8
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1380
8
  if (result != TPM_RC_SUCCESS) {
1381
0
    return result;
1382
0
  }
1383
8
  if (target->t.size == 0) {
1384
2
    return TPM_RC_SUCCESS;
1385
2
  }
1386
6
  if (target->t.size > MAX_DIGEST_BUFFER) {
1387
0
    return TPM_RC_SIZE;
1388
0
  }
1389
1.60k
  for (i = 0; i < target->t.size; ++i) {
1390
1.60k
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
1391
1.60k
    if (result != TPM_RC_SUCCESS) {
1392
2
      return result;
1393
2
    }
1394
1.60k
  }
1395
4
  return TPM_RC_SUCCESS;
1396
6
}
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
136
UINT16 TPM2B_NONCE_Marshal(TPM2B_NONCE* source, BYTE** buffer, INT32* size) {
1435
136
  return TPM2B_DIGEST_Marshal(source, buffer, size);
1436
136
}
1437
1438
303
TPM_RC TPM2B_NONCE_Unmarshal(TPM2B_NONCE* target, BYTE** buffer, INT32* size) {
1439
303
  return TPM2B_DIGEST_Unmarshal(target, buffer, size);
1440
303
}
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
20
                                  INT32* size) {
1451
20
  TPM_RC result;
1452
20
  BOOL has_valid_value = FALSE;
1453
20
  result = uint32_t_Unmarshal(target, buffer, size);
1454
20
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
1455
0
    return result;
1456
0
  }
1457
20
  if ((*target >= NV_INDEX_FIRST) && (*target <= NV_INDEX_LAST)) {
1458
18
    has_valid_value = TRUE;
1459
18
  }
1460
20
  if (!has_valid_value) {
1461
2
    return TPM_RC_VALUE;
1462
2
  }
1463
18
  return TPM_RC_SUCCESS;
1464
20
}
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
15
TPM_RC TPMA_NV_Unmarshal(TPMA_NV* target, BYTE** buffer, INT32* size) {
1471
15
  TPM_RC result;
1472
15
  result = uint32_t_Unmarshal((uint32_t*)target, buffer, size);
1473
15
  if (result != TPM_RC_SUCCESS) {
1474
0
    return result;
1475
0
  }
1476
15
  if (target->reserved7_9 != 0) {
1477
0
    return TPM_RC_RESERVED_BITS;
1478
0
  }
1479
15
  if (target->reserved20_24 != 0) {
1480
0
    return TPM_RC_RESERVED_BITS;
1481
0
  }
1482
15
  return TPM_RC_SUCCESS;
1483
15
}
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
17
                                INT32* size) {
1500
17
  TPM_RC result;
1501
17
  result = TPMI_RH_NV_INDEX_Unmarshal(&target->nvIndex, buffer, size);
1502
17
  if (result != TPM_RC_SUCCESS) {
1503
1
    return result;
1504
1
  }
1505
16
  result = TPMI_ALG_HASH_Unmarshal(&target->nameAlg, buffer, size, FALSE);
1506
16
  if (result != TPM_RC_SUCCESS) {
1507
1
    return result;
1508
1
  }
1509
15
  result = TPMA_NV_Unmarshal(&target->attributes, buffer, size);
1510
15
  if (result != TPM_RC_SUCCESS) {
1511
0
    return result;
1512
0
  }
1513
15
  result = TPM2B_DIGEST_Unmarshal(&target->authPolicy, buffer, size);
1514
15
  if (result != TPM_RC_SUCCESS) {
1515
4
    return result;
1516
4
  }
1517
11
  result = UINT16_Unmarshal(&target->dataSize, buffer, size);
1518
11
  if (result != TPM_RC_SUCCESS) {
1519
0
    return result;
1520
0
  }
1521
11
  if (target->dataSize > MAX_NV_INDEX_SIZE) {
1522
1
    return TPM_RC_SIZE;
1523
1
  }
1524
10
  return TPM_RC_SUCCESS;
1525
11
}
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
17
                                 INT32* size) {
1545
17
  TPM_RC result;
1546
17
  UINT32 start_size = *size;
1547
17
  UINT32 struct_size;
1548
17
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1549
17
  if (result != TPM_RC_SUCCESS) {
1550
0
    return result;
1551
0
  }
1552
17
  if (target->t.size == 0) {
1553
0
    return TPM_RC_SIZE;
1554
0
  }
1555
17
  result = TPMS_NV_PUBLIC_Unmarshal(&target->t.nvPublic, buffer, size);
1556
17
  if (result != TPM_RC_SUCCESS) {
1557
7
    return result;
1558
7
  }
1559
10
  struct_size = start_size - *size - sizeof(target->t.size);
1560
10
  if (struct_size != target->t.size) {
1561
2
    return TPM_RC_SIZE;
1562
2
  }
1563
8
  return TPM_RC_SUCCESS;
1564
10
}
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
70
                                       INT32* size) {
1629
70
  TPM_RC result;
1630
70
  INT32 i;
1631
70
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1632
70
  if (result != TPM_RC_SUCCESS) {
1633
0
    return result;
1634
0
  }
1635
70
  if (target->t.size == 0) {
1636
10
    return TPM_RC_SUCCESS;
1637
10
  }
1638
60
  if (target->t.size > MAX_RSA_KEY_BYTES / 2) {
1639
2
    return TPM_RC_SIZE;
1640
2
  }
1641
7.24k
  for (i = 0; i < target->t.size; ++i) {
1642
7.18k
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
1643
7.18k
    if (result != TPM_RC_SUCCESS) {
1644
0
      return result;
1645
0
    }
1646
7.18k
  }
1647
58
  return TPM_RC_SUCCESS;
1648
58
}
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
400
UINT16 TPMA_OBJECT_Marshal(TPMA_OBJECT* source, BYTE** buffer, INT32* size) {
1689
400
  return uint32_t_Marshal((uint32_t*)source, buffer, size);
1690
400
}
1691
1692
255
TPM_RC TPMA_OBJECT_Unmarshal(TPMA_OBJECT* target, BYTE** buffer, INT32* size) {
1693
255
  TPM_RC result;
1694
255
  result = uint32_t_Unmarshal((uint32_t*)target, buffer, size);
1695
255
  if (result != TPM_RC_SUCCESS) {
1696
0
    return result;
1697
0
  }
1698
255
  if (target->reserved0 != 0) {
1699
0
    return TPM_RC_RESERVED_BITS;
1700
0
  }
1701
255
  if (target->reserved3 != 0) {
1702
0
    return TPM_RC_RESERVED_BITS;
1703
0
  }
1704
255
  if (target->reserved8_9 != 0) {
1705
0
    return TPM_RC_RESERVED_BITS;
1706
0
  }
1707
255
  if (target->reserved12_15 != 0) {
1708
0
    return TPM_RC_RESERVED_BITS;
1709
0
  }
1710
255
  if (target->reserved19_31 != 0) {
1711
0
    return TPM_RC_RESERVED_BITS;
1712
0
  }
1713
255
  return TPM_RC_SUCCESS;
1714
255
}
1715
1716
UINT16 TPMI_ALG_PUBLIC_Marshal(TPMI_ALG_PUBLIC* source,
1717
                               BYTE** buffer,
1718
400
                               INT32* size) {
1719
400
  return uint16_t_Marshal(source, buffer, size);
1720
400
}
1721
1722
TPM_RC TPMI_ALG_PUBLIC_Unmarshal(TPMI_ALG_PUBLIC* target,
1723
                                 BYTE** buffer,
1724
374
                                 INT32* size) {
1725
374
  TPM_RC result;
1726
374
  BOOL has_valid_value = FALSE;
1727
374
  result = uint16_t_Unmarshal(target, buffer, size);
1728
374
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
1729
0
    return result;
1730
0
  }
1731
374
  switch (*target) {
1732
0
#ifdef TPM_ALG_RSA
1733
221
    case TPM_ALG_RSA:
1734
221
#endif
1735
221
#ifdef TPM_ALG_KEYEDHASH
1736
282
    case TPM_ALG_KEYEDHASH:
1737
282
#endif
1738
282
#ifdef TPM_ALG_ECC
1739
337
    case TPM_ALG_ECC:
1740
337
#endif
1741
337
#ifdef TPM_ALG_SYMCIPHER
1742
360
    case TPM_ALG_SYMCIPHER:
1743
360
#endif
1744
360
      has_valid_value = TRUE;
1745
360
      break;
1746
374
  }
1747
374
  if (!has_valid_value) {
1748
14
    return TPM_RC_TYPE;
1749
14
  }
1750
360
  return TPM_RC_SUCCESS;
1751
374
}
1752
1753
UINT16 TPM2B_PUBLIC_KEY_RSA_Marshal(TPM2B_PUBLIC_KEY_RSA* source,
1754
                                    BYTE** buffer,
1755
218
                                    INT32* size) {
1756
218
  UINT16 total_size = 0;
1757
218
  INT32 i;
1758
218
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
1759
28.2k
  for (i = 0; i < source->t.size; ++i) {
1760
28.0k
    total_size += BYTE_Marshal(&source->t.buffer[i], buffer, size);
1761
28.0k
  }
1762
218
  return total_size;
1763
218
}
1764
1765
TPM_RC TPM2B_PUBLIC_KEY_RSA_Unmarshal(TPM2B_PUBLIC_KEY_RSA* target,
1766
                                      BYTE** buffer,
1767
145
                                      INT32* size) {
1768
145
  TPM_RC result;
1769
145
  INT32 i;
1770
145
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
1771
145
  if (result != TPM_RC_SUCCESS) {
1772
0
    return result;
1773
0
  }
1774
145
  if (target->t.size == 0) {
1775
79
    return TPM_RC_SUCCESS;
1776
79
  }
1777
66
  if (target->t.size > MAX_RSA_KEY_BYTES) {
1778
1
    return TPM_RC_SIZE;
1779
1
  }
1780
14.3k
  for (i = 0; i < target->t.size; ++i) {
1781
14.3k
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
1782
14.3k
    if (result != TPM_RC_SUCCESS) {
1783
3
      return result;
1784
3
    }
1785
14.3k
  }
1786
62
  return TPM_RC_SUCCESS;
1787
65
}
1788
1789
UINT16 TPMU_PUBLIC_ID_Marshal(TPMU_PUBLIC_ID* source,
1790
                              BYTE** buffer,
1791
                              INT32* size,
1792
400
                              UINT32 selector) {
1793
400
  switch (selector) {
1794
0
#ifdef TPM_ALG_KEYEDHASH
1795
121
    case TPM_ALG_KEYEDHASH:
1796
121
      return TPM2B_DIGEST_Marshal((TPM2B_DIGEST*)&source->keyedHash, buffer,
1797
121
                                  size);
1798
0
#endif
1799
0
#ifdef TPM_ALG_SYMCIPHER
1800
12
    case TPM_ALG_SYMCIPHER:
1801
12
      return TPM2B_DIGEST_Marshal((TPM2B_DIGEST*)&source->sym, buffer, size);
1802
0
#endif
1803
0
#ifdef TPM_ALG_RSA
1804
218
    case TPM_ALG_RSA:
1805
218
      return TPM2B_PUBLIC_KEY_RSA_Marshal((TPM2B_PUBLIC_KEY_RSA*)&source->rsa,
1806
218
                                          buffer, size);
1807
0
#endif
1808
0
#ifdef TPM_ALG_ECC
1809
49
    case TPM_ALG_ECC:
1810
49
      return TPMS_ECC_POINT_Marshal((TPMS_ECC_POINT*)&source->ecc, buffer,
1811
49
                                    size);
1812
400
#endif
1813
400
  }
1814
0
  return 0;
1815
400
}
1816
1817
TPM_RC TPMU_PUBLIC_ID_Unmarshal(TPMU_PUBLIC_ID* target,
1818
                                BYTE** buffer,
1819
                                INT32* size,
1820
240
                                UINT32 selector) {
1821
240
  switch (selector) {
1822
0
#ifdef TPM_ALG_KEYEDHASH
1823
52
    case TPM_ALG_KEYEDHASH:
1824
52
      return TPM2B_DIGEST_Unmarshal((TPM2B_DIGEST*)&target->keyedHash, buffer,
1825
52
                                    size);
1826
0
#endif
1827
0
#ifdef TPM_ALG_SYMCIPHER
1828
9
    case TPM_ALG_SYMCIPHER:
1829
9
      return TPM2B_DIGEST_Unmarshal((TPM2B_DIGEST*)&target->sym, buffer, size);
1830
0
#endif
1831
0
#ifdef TPM_ALG_RSA
1832
145
    case TPM_ALG_RSA:
1833
145
      return TPM2B_PUBLIC_KEY_RSA_Unmarshal((TPM2B_PUBLIC_KEY_RSA*)&target->rsa,
1834
145
                                            buffer, size);
1835
0
#endif
1836
0
#ifdef TPM_ALG_ECC
1837
34
    case TPM_ALG_ECC:
1838
34
      return TPMS_ECC_POINT_Unmarshal((TPMS_ECC_POINT*)&target->ecc, buffer,
1839
34
                                      size);
1840
240
#endif
1841
240
  }
1842
0
  return TPM_RC_SELECTOR;
1843
240
}
1844
1845
12
UINT16 TPM_KEY_BITS_Marshal(TPM_KEY_BITS* source, BYTE** buffer, INT32* size) {
1846
12
  return uint16_t_Marshal(source, buffer, size);
1847
12
}
1848
1849
TPM_RC TPM_KEY_BITS_Unmarshal(TPM_KEY_BITS* target,
1850
                              BYTE** buffer,
1851
7
                              INT32* size) {
1852
7
  return uint16_t_Unmarshal(target, buffer, size);
1853
7
}
1854
1855
UINT16 TPMI_AES_KEY_BITS_Marshal(TPMI_AES_KEY_BITS* source,
1856
                                 BYTE** buffer,
1857
12
                                 INT32* size) {
1858
12
  return TPM_KEY_BITS_Marshal(source, buffer, size);
1859
12
}
1860
1861
TPM_RC TPMI_AES_KEY_BITS_Unmarshal(TPMI_AES_KEY_BITS* target,
1862
                                   BYTE** buffer,
1863
7
                                   INT32* size) {
1864
7
  TPM_RC result;
1865
7
  uint16_t supported_values[] = AES_KEY_SIZES_BITS;
1866
7
  size_t length = sizeof(supported_values) / sizeof(supported_values[0]);
1867
7
  size_t i;
1868
7
  BOOL is_supported_value = FALSE;
1869
7
  result = TPM_KEY_BITS_Unmarshal(target, buffer, size);
1870
7
  if (result != TPM_RC_SUCCESS) {
1871
0
    return result;
1872
0
  }
1873
8
  for (i = 0; i < length; ++i) {
1874
8
    if (*target == supported_values[i]) {
1875
7
      is_supported_value = TRUE;
1876
7
      break;
1877
7
    }
1878
8
  }
1879
7
  if (!is_supported_value) {
1880
0
    return TPM_RC_VALUE;
1881
0
  }
1882
7
  return TPM_RC_SUCCESS;
1883
7
}
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
279
                                 UINT32 selector) {
1949
279
  switch (selector) {
1950
0
#ifdef TPM_ALG_AES
1951
12
    case TPM_ALG_AES:
1952
12
      return TPMI_AES_KEY_BITS_Marshal((TPMI_AES_KEY_BITS*)&source->aes, buffer,
1953
12
                                       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
267
    case TPM_ALG_NULL:
1971
267
      return 0;
1972
279
#endif
1973
279
  }
1974
0
  return 0;
1975
279
}
1976
1977
TPM_RC TPMU_SYM_KEY_BITS_Unmarshal(TPMU_SYM_KEY_BITS* target,
1978
                                   BYTE** buffer,
1979
                                   INT32* size,
1980
198
                                   UINT32 selector) {
1981
198
  switch (selector) {
1982
0
#ifdef TPM_ALG_AES
1983
7
    case TPM_ALG_AES:
1984
7
      return TPMI_AES_KEY_BITS_Unmarshal((TPMI_AES_KEY_BITS*)&target->aes,
1985
7
                                         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
0
    case TPM_ALG_XOR:
1999
0
      return TPMI_ALG_HASH_Unmarshal(&target->xor_, buffer, size, FALSE);
2000
0
#endif
2001
0
#ifdef TPM_ALG_NULL
2002
191
    case TPM_ALG_NULL:
2003
191
      return TPM_RC_SUCCESS;
2004
198
#endif
2005
198
  }
2006
0
  return TPM_RC_SELECTOR;
2007
198
}
2008
2009
UINT16 TPMI_ALG_SYM_MODE_Marshal(TPMI_ALG_SYM_MODE* source,
2010
                                 BYTE** buffer,
2011
12
                                 INT32* size) {
2012
12
  return uint16_t_Marshal(source, buffer, size);
2013
12
}
2014
2015
TPM_RC TPMI_ALG_SYM_MODE_Unmarshal(TPMI_ALG_SYM_MODE* target,
2016
                                   BYTE** buffer,
2017
                                   INT32* size,
2018
7
                                   BOOL allow_conditional_value) {
2019
7
  TPM_RC result;
2020
7
  BOOL has_valid_value = FALSE;
2021
7
  result = uint16_t_Unmarshal(target, buffer, size);
2022
7
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
2023
0
    return result;
2024
0
  }
2025
7
  if (*target == TPM_ALG_NULL) {
2026
0
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_MODE;
2027
0
  }
2028
7
  switch (*target) {
2029
0
#ifdef TPM_ALG_CTR
2030
3
    case TPM_ALG_CTR:
2031
3
#endif
2032
3
#ifdef TPM_ALG_OFB
2033
4
    case TPM_ALG_OFB:
2034
4
#endif
2035
4
#ifdef TPM_ALG_CBC
2036
6
    case TPM_ALG_CBC:
2037
6
#endif
2038
6
#ifdef TPM_ALG_CFB
2039
7
    case TPM_ALG_CFB:
2040
7
#endif
2041
7
#ifdef TPM_ALG_ECB
2042
7
    case TPM_ALG_ECB:
2043
7
#endif
2044
7
      has_valid_value = TRUE;
2045
7
      break;
2046
7
  }
2047
7
  if (!has_valid_value) {
2048
0
    return TPM_RC_MODE;
2049
0
  }
2050
7
  return TPM_RC_SUCCESS;
2051
7
}
2052
2053
UINT16 TPMU_SYM_MODE_Marshal(TPMU_SYM_MODE* source,
2054
                             BYTE** buffer,
2055
                             INT32* size,
2056
279
                             UINT32 selector) {
2057
279
  switch (selector) {
2058
0
#ifdef TPM_ALG_AES
2059
12
    case TPM_ALG_AES:
2060
12
      return TPMI_ALG_SYM_MODE_Marshal((TPMI_ALG_SYM_MODE*)&source->aes, buffer,
2061
12
                                       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
267
    case TPM_ALG_NULL:
2079
267
      return 0;
2080
279
#endif
2081
279
  }
2082
0
  return 0;
2083
279
}
2084
2085
TPM_RC TPMU_SYM_MODE_Unmarshal(TPMU_SYM_MODE* target,
2086
                               BYTE** buffer,
2087
                               INT32* size,
2088
198
                               UINT32 selector) {
2089
198
  switch (selector) {
2090
0
#ifdef TPM_ALG_AES
2091
7
    case TPM_ALG_AES:
2092
7
      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
0
    case TPM_ALG_XOR:
2105
0
      return TPM_RC_SUCCESS;
2106
0
#endif
2107
0
#ifdef TPM_ALG_NULL
2108
191
    case TPM_ALG_NULL:
2109
191
      return TPM_RC_SUCCESS;
2110
198
#endif
2111
198
  }
2112
0
  return TPM_RC_SELECTOR;
2113
198
}
2114
2115
UINT16 TPMI_ALG_SYM_OBJECT_Marshal(TPMI_ALG_SYM_OBJECT* source,
2116
                                   BYTE** buffer,
2117
279
                                   INT32* size) {
2118
279
  return uint16_t_Marshal(source, buffer, size);
2119
279
}
2120
2121
TPM_RC TPMI_ALG_SYM_OBJECT_Unmarshal(TPMI_ALG_SYM_OBJECT* target,
2122
                                     BYTE** buffer,
2123
                                     INT32* size,
2124
198
                                     BOOL allow_conditional_value) {
2125
198
  TPM_RC result;
2126
198
  BOOL has_valid_value = FALSE;
2127
198
  result = uint16_t_Unmarshal(target, buffer, size);
2128
198
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
2129
0
    return result;
2130
0
  }
2131
198
  if (*target == TPM_ALG_NULL) {
2132
189
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_SYMMETRIC;
2133
189
  }
2134
9
  switch (*target) {
2135
0
#ifdef TPM_ALG_AES
2136
7
    case TPM_ALG_AES:
2137
7
#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
7
      has_valid_value = TRUE;
2145
7
      break;
2146
9
  }
2147
9
  if (!has_valid_value) {
2148
2
    return TPM_RC_SYMMETRIC;
2149
2
  }
2150
7
  return TPM_RC_SUCCESS;
2151
9
}
2152
2153
UINT16 TPMT_SYM_DEF_OBJECT_Marshal(TPMT_SYM_DEF_OBJECT* source,
2154
                                   BYTE** buffer,
2155
279
                                   INT32* size) {
2156
279
  UINT16 total_size = 0;
2157
279
  total_size += TPMI_ALG_SYM_OBJECT_Marshal(&source->algorithm, buffer, size);
2158
279
  total_size += TPMU_SYM_KEY_BITS_Marshal(&source->keyBits, buffer, size,
2159
279
                                          source->algorithm);
2160
279
  total_size +=
2161
279
      TPMU_SYM_MODE_Marshal(&source->mode, buffer, size, source->algorithm);
2162
279
  return total_size;
2163
279
}
2164
2165
TPM_RC TPMT_SYM_DEF_OBJECT_Unmarshal(TPMT_SYM_DEF_OBJECT* target,
2166
                                     BYTE** buffer,
2167
198
                                     INT32* size) {
2168
198
  TPM_RC result;
2169
198
  result =
2170
198
      TPMI_ALG_SYM_OBJECT_Unmarshal(&target->algorithm, buffer, size, TRUE);
2171
198
  if (result != TPM_RC_SUCCESS) {
2172
2
    return result;
2173
2
  }
2174
196
  result = TPMU_SYM_KEY_BITS_Unmarshal(&target->keyBits, buffer, size,
2175
196
                                       target->algorithm);
2176
196
  if (result != TPM_RC_SUCCESS) {
2177
0
    return result;
2178
0
  }
2179
196
  result =
2180
196
      TPMU_SYM_MODE_Unmarshal(&target->mode, buffer, size, target->algorithm);
2181
196
  if (result != TPM_RC_SUCCESS) {
2182
0
    return result;
2183
0
  }
2184
196
  return TPM_RC_SUCCESS;
2185
196
}
2186
2187
UINT16 TPMI_ALG_RSA_SCHEME_Marshal(TPMI_ALG_RSA_SCHEME* source,
2188
                                   BYTE** buffer,
2189
218
                                   INT32* size) {
2190
218
  return uint16_t_Marshal(source, buffer, size);
2191
218
}
2192
2193
TPM_RC TPMI_ALG_RSA_SCHEME_Unmarshal(TPMI_ALG_RSA_SCHEME* target,
2194
                                     BYTE** buffer,
2195
                                     INT32* size,
2196
147
                                     BOOL allow_conditional_value) {
2197
147
  TPM_RC result;
2198
147
  BOOL has_valid_value = FALSE;
2199
147
  result = uint16_t_Unmarshal(target, buffer, size);
2200
147
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
2201
0
    return result;
2202
0
  }
2203
147
  if (*target == TPM_ALG_NULL) {
2204
58
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
2205
58
  }
2206
89
  switch (*target) {
2207
0
#ifdef TPM_ALG_RSAES
2208
21
    case TPM_ALG_RSAES:
2209
21
#endif
2210
21
#ifdef TPM_ALG_OAEP
2211
34
    case TPM_ALG_OAEP:
2212
34
#endif
2213
34
#ifdef TPM_ALG_RSASSA
2214
49
    case TPM_ALG_RSASSA:
2215
49
#endif
2216
49
#ifdef TPM_ALG_RSAPSS
2217
89
    case TPM_ALG_RSAPSS:
2218
89
#endif
2219
89
      has_valid_value = TRUE;
2220
89
      break;
2221
89
  }
2222
89
  if (!has_valid_value) {
2223
0
    return TPM_RC_VALUE;
2224
0
  }
2225
89
  return TPM_RC_SUCCESS;
2226
89
}
2227
2228
UINT16 TPMS_SCHEME_HASH_Marshal(TPMS_SCHEME_HASH* source,
2229
                                BYTE** buffer,
2230
125
                                INT32* size) {
2231
125
  UINT16 total_size = 0;
2232
125
  total_size += TPMI_ALG_HASH_Marshal(&source->hashAlg, buffer, size);
2233
125
  return total_size;
2234
125
}
2235
2236
TPM_RC TPMS_SCHEME_HASH_Unmarshal(TPMS_SCHEME_HASH* target,
2237
                                  BYTE** buffer,
2238
97
                                  INT32* size) {
2239
97
  TPM_RC result;
2240
97
  result = TPMI_ALG_HASH_Unmarshal(&target->hashAlg, buffer, size, FALSE);
2241
97
  if (result != TPM_RC_SUCCESS) {
2242
7
    return result;
2243
7
  }
2244
90
  return TPM_RC_SUCCESS;
2245
97
}
2246
2247
UINT16 TPMS_SIG_SCHEME_RSAPSS_Marshal(TPMS_SIG_SCHEME_RSAPSS* source,
2248
                                      BYTE** buffer,
2249
37
                                      INT32* size) {
2250
37
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2251
37
}
2252
2253
TPM_RC TPMS_SIG_SCHEME_RSAPSS_Unmarshal(TPMS_SIG_SCHEME_RSAPSS* target,
2254
                                        BYTE** buffer,
2255
40
                                        INT32* size) {
2256
40
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2257
40
}
2258
2259
UINT16 TPMS_SIG_SCHEME_SM2_Marshal(TPMS_SIG_SCHEME_SM2* source,
2260
                                   BYTE** buffer,
2261
3
                                   INT32* size) {
2262
3
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2263
3
}
2264
2265
TPM_RC TPMS_SIG_SCHEME_SM2_Unmarshal(TPMS_SIG_SCHEME_SM2* target,
2266
                                     BYTE** buffer,
2267
3
                                     INT32* size) {
2268
3
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2269
3
}
2270
2271
UINT16 TPMS_SIG_SCHEME_ECSCHNORR_Marshal(TPMS_SIG_SCHEME_ECSCHNORR* source,
2272
                                         BYTE** buffer,
2273
6
                                         INT32* size) {
2274
6
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2275
6
}
2276
2277
TPM_RC TPMS_SIG_SCHEME_ECSCHNORR_Unmarshal(TPMS_SIG_SCHEME_ECSCHNORR* target,
2278
                                           BYTE** buffer,
2279
9
                                           INT32* size) {
2280
9
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2281
9
}
2282
2283
UINT16 TPMS_SCHEME_ECDAA_Marshal(TPMS_SCHEME_ECDAA* source,
2284
                                 BYTE** buffer,
2285
0
                                 INT32* size) {
2286
0
  UINT16 total_size = 0;
2287
0
  total_size += TPMI_ALG_HASH_Marshal(&source->hashAlg, buffer, size);
2288
0
  total_size += UINT16_Marshal(&source->count, buffer, size);
2289
0
  return total_size;
2290
0
}
2291
2292
TPM_RC TPMS_SCHEME_ECDAA_Unmarshal(TPMS_SCHEME_ECDAA* target,
2293
                                   BYTE** buffer,
2294
8
                                   INT32* size) {
2295
8
  TPM_RC result;
2296
8
  result = TPMI_ALG_HASH_Unmarshal(&target->hashAlg, buffer, size, FALSE);
2297
8
  if (result != TPM_RC_SUCCESS) {
2298
1
    return result;
2299
1
  }
2300
7
  result = UINT16_Unmarshal(&target->count, buffer, size);
2301
7
  if (result != TPM_RC_SUCCESS) {
2302
0
    return result;
2303
0
  }
2304
7
  return TPM_RC_SUCCESS;
2305
7
}
2306
2307
UINT16 TPMS_SIG_SCHEME_ECDAA_Marshal(TPMS_SIG_SCHEME_ECDAA* source,
2308
                                     BYTE** buffer,
2309
0
                                     INT32* size) {
2310
0
  return TPMS_SCHEME_ECDAA_Marshal(source, buffer, size);
2311
0
}
2312
2313
TPM_RC TPMS_SIG_SCHEME_ECDAA_Unmarshal(TPMS_SIG_SCHEME_ECDAA* target,
2314
                                       BYTE** buffer,
2315
8
                                       INT32* size) {
2316
8
  return TPMS_SCHEME_ECDAA_Unmarshal(target, buffer, size);
2317
8
}
2318
2319
UINT16 TPMS_KEY_SCHEME_ECDH_Marshal(TPMS_KEY_SCHEME_ECDH* source,
2320
                                    BYTE** buffer,
2321
6
                                    INT32* size) {
2322
6
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2323
6
}
2324
2325
TPM_RC TPMS_KEY_SCHEME_ECDH_Unmarshal(TPMS_KEY_SCHEME_ECDH* target,
2326
                                      BYTE** buffer,
2327
7
                                      INT32* size) {
2328
7
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2329
7
}
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
17
                                      INT32* size) {
2346
17
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2347
17
}
2348
2349
TPM_RC TPMS_SIG_SCHEME_RSASSA_Unmarshal(TPMS_SIG_SCHEME_RSASSA* target,
2350
                                        BYTE** buffer,
2351
15
                                        INT32* size) {
2352
15
#if defined(SUPPORT_PADDING_ONLY_RSASSA) && SUPPORT_PADDING_ONLY_RSASSA == YES
2353
15
  return TPMI_ALG_HASH_Unmarshal(&target->hashAlg, buffer, size, TRUE);
2354
#else
2355
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2356
#endif
2357
15
}
2358
2359
UINT16 TPMS_ENC_SCHEME_OAEP_Marshal(TPMS_ENC_SCHEME_OAEP* source,
2360
                                    BYTE** buffer,
2361
16
                                    INT32* size) {
2362
16
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2363
16
}
2364
2365
TPM_RC TPMS_ENC_SCHEME_OAEP_Unmarshal(TPMS_ENC_SCHEME_OAEP* target,
2366
                                      BYTE** buffer,
2367
13
                                      INT32* size) {
2368
13
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2369
13
}
2370
2371
39
UINT16 TPMS_EMPTY_Marshal(TPMS_EMPTY* source, BYTE** buffer, INT32* size) {
2372
39
  UINT16 total_size = 0;
2373
39
  return total_size;
2374
39
}
2375
2376
21
TPM_RC TPMS_EMPTY_Unmarshal(TPMS_EMPTY* target, BYTE** buffer, INT32* size) {
2377
21
  TPM_RC result;
2378
21
  (void)result;
2379
2380
21
  return TPM_RC_SUCCESS;
2381
21
}
2382
2383
UINT16 TPMS_ENC_SCHEME_RSAES_Marshal(TPMS_ENC_SCHEME_RSAES* source,
2384
                                     BYTE** buffer,
2385
39
                                     INT32* size) {
2386
39
  return TPMS_EMPTY_Marshal(source, buffer, size);
2387
39
}
2388
2389
TPM_RC TPMS_ENC_SCHEME_RSAES_Unmarshal(TPMS_ENC_SCHEME_RSAES* target,
2390
                                       BYTE** buffer,
2391
21
                                       INT32* size) {
2392
21
  return TPMS_EMPTY_Unmarshal(target, buffer, size);
2393
21
}
2394
2395
UINT16 TPMS_SIG_SCHEME_ECDSA_Marshal(TPMS_SIG_SCHEME_ECDSA* source,
2396
                                     BYTE** buffer,
2397
7
                                     INT32* size) {
2398
7
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2399
7
}
2400
2401
TPM_RC TPMS_SIG_SCHEME_ECDSA_Unmarshal(TPMS_SIG_SCHEME_ECDSA* target,
2402
                                       BYTE** buffer,
2403
9
                                       INT32* size) {
2404
9
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2405
9
}
2406
2407
UINT16 TPMU_ASYM_SCHEME_Marshal(TPMU_ASYM_SCHEME* source,
2408
                                BYTE** buffer,
2409
                                INT32* size,
2410
267
                                UINT32 selector) {
2411
267
  switch (selector) {
2412
0
#ifdef TPM_ALG_ECDH
2413
6
    case TPM_ALG_ECDH:
2414
6
      return TPMS_KEY_SCHEME_ECDH_Marshal((TPMS_KEY_SCHEME_ECDH*)&source->ecdh,
2415
6
                                          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
17
    case TPM_ALG_RSASSA:
2424
17
      return TPMS_SIG_SCHEME_RSASSA_Marshal(
2425
17
          (TPMS_SIG_SCHEME_RSASSA*)&source->rsassa, buffer, size);
2426
0
#endif
2427
0
#ifdef TPM_ALG_RSAPSS
2428
37
    case TPM_ALG_RSAPSS:
2429
37
      return TPMS_SIG_SCHEME_RSAPSS_Marshal(
2430
37
          (TPMS_SIG_SCHEME_RSAPSS*)&source->rsapss, buffer, size);
2431
0
#endif
2432
0
#ifdef TPM_ALG_ECDSA
2433
7
    case TPM_ALG_ECDSA:
2434
7
      return TPMS_SIG_SCHEME_ECDSA_Marshal(
2435
7
          (TPMS_SIG_SCHEME_ECDSA*)&source->ecdsa, buffer, size);
2436
0
#endif
2437
0
#ifdef TPM_ALG_ECDAA
2438
0
    case TPM_ALG_ECDAA:
2439
0
      return TPMS_SIG_SCHEME_ECDAA_Marshal(
2440
0
          (TPMS_SIG_SCHEME_ECDAA*)&source->ecdaa, buffer, size);
2441
0
#endif
2442
0
#ifdef TPM_ALG_SM2
2443
3
    case TPM_ALG_SM2:
2444
3
      return TPMS_SIG_SCHEME_SM2_Marshal((TPMS_SIG_SCHEME_SM2*)&source->sm2,
2445
3
                                         buffer, size);
2446
0
#endif
2447
0
#ifdef TPM_ALG_ECSCHNORR
2448
6
    case TPM_ALG_ECSCHNORR:
2449
6
      return TPMS_SIG_SCHEME_ECSCHNORR_Marshal(
2450
6
          (TPMS_SIG_SCHEME_ECSCHNORR*)&source->ecschnorr, buffer, size);
2451
0
#endif
2452
0
#ifdef TPM_ALG_RSAES
2453
39
    case TPM_ALG_RSAES:
2454
39
      return TPMS_ENC_SCHEME_RSAES_Marshal(
2455
39
          (TPMS_ENC_SCHEME_RSAES*)&source->rsaes, buffer, size);
2456
0
#endif
2457
0
#ifdef TPM_ALG_OAEP
2458
16
    case TPM_ALG_OAEP:
2459
16
      return TPMS_ENC_SCHEME_OAEP_Marshal((TPMS_ENC_SCHEME_OAEP*)&source->oaep,
2460
16
                                          buffer, size);
2461
0
#endif
2462
0
#ifdef TPM_ALG_NULL
2463
136
    case TPM_ALG_NULL:
2464
136
      return 0;
2465
267
#endif
2466
267
  }
2467
0
  return 0;
2468
267
}
2469
2470
TPM_RC TPMU_ASYM_SCHEME_Unmarshal(TPMU_ASYM_SCHEME* target,
2471
                                  BYTE** buffer,
2472
                                  INT32* size,
2473
187
                                  UINT32 selector) {
2474
187
  switch (selector) {
2475
0
#ifdef TPM_ALG_ECDH
2476
7
    case TPM_ALG_ECDH:
2477
7
      return TPMS_KEY_SCHEME_ECDH_Unmarshal(
2478
7
          (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
15
    case TPM_ALG_RSASSA:
2487
15
      return TPMS_SIG_SCHEME_RSASSA_Unmarshal(
2488
15
          (TPMS_SIG_SCHEME_RSASSA*)&target->rsassa, buffer, size);
2489
0
#endif
2490
0
#ifdef TPM_ALG_RSAPSS
2491
40
    case TPM_ALG_RSAPSS:
2492
40
      return TPMS_SIG_SCHEME_RSAPSS_Unmarshal(
2493
40
          (TPMS_SIG_SCHEME_RSAPSS*)&target->rsapss, buffer, size);
2494
0
#endif
2495
0
#ifdef TPM_ALG_ECDSA
2496
9
    case TPM_ALG_ECDSA:
2497
9
      return TPMS_SIG_SCHEME_ECDSA_Unmarshal(
2498
9
          (TPMS_SIG_SCHEME_ECDSA*)&target->ecdsa, buffer, size);
2499
0
#endif
2500
0
#ifdef TPM_ALG_ECDAA
2501
2
    case TPM_ALG_ECDAA:
2502
2
      return TPMS_SIG_SCHEME_ECDAA_Unmarshal(
2503
2
          (TPMS_SIG_SCHEME_ECDAA*)&target->ecdaa, buffer, size);
2504
0
#endif
2505
0
#ifdef TPM_ALG_SM2
2506
3
    case TPM_ALG_SM2:
2507
3
      return TPMS_SIG_SCHEME_SM2_Unmarshal((TPMS_SIG_SCHEME_SM2*)&target->sm2,
2508
3
                                           buffer, size);
2509
0
#endif
2510
0
#ifdef TPM_ALG_ECSCHNORR
2511
5
    case TPM_ALG_ECSCHNORR:
2512
5
      return TPMS_SIG_SCHEME_ECSCHNORR_Unmarshal(
2513
5
          (TPMS_SIG_SCHEME_ECSCHNORR*)&target->ecschnorr, buffer, size);
2514
0
#endif
2515
0
#ifdef TPM_ALG_RSAES
2516
21
    case TPM_ALG_RSAES:
2517
21
      return TPMS_ENC_SCHEME_RSAES_Unmarshal(
2518
21
          (TPMS_ENC_SCHEME_RSAES*)&target->rsaes, buffer, size);
2519
0
#endif
2520
0
#ifdef TPM_ALG_OAEP
2521
13
    case TPM_ALG_OAEP:
2522
13
      return TPMS_ENC_SCHEME_OAEP_Unmarshal(
2523
13
          (TPMS_ENC_SCHEME_OAEP*)&target->oaep, buffer, size);
2524
0
#endif
2525
0
#ifdef TPM_ALG_NULL
2526
72
    case TPM_ALG_NULL:
2527
72
      return TPM_RC_SUCCESS;
2528
187
#endif
2529
187
  }
2530
0
  return TPM_RC_SELECTOR;
2531
187
}
2532
2533
UINT16 TPMT_RSA_SCHEME_Marshal(TPMT_RSA_SCHEME* source,
2534
                               BYTE** buffer,
2535
218
                               INT32* size) {
2536
218
  UINT16 total_size = 0;
2537
218
  total_size += TPMI_ALG_RSA_SCHEME_Marshal(&source->scheme, buffer, size);
2538
218
  total_size +=
2539
218
      TPMU_ASYM_SCHEME_Marshal(&source->details, buffer, size, source->scheme);
2540
218
  return total_size;
2541
218
}
2542
2543
TPM_RC TPMT_RSA_SCHEME_Unmarshal(TPMT_RSA_SCHEME* target,
2544
                                 BYTE** buffer,
2545
147
                                 INT32* size) {
2546
147
  TPM_RC result;
2547
147
  result = TPMI_ALG_RSA_SCHEME_Unmarshal(&target->scheme, buffer, size, TRUE);
2548
147
  if (result != TPM_RC_SUCCESS) {
2549
0
    return result;
2550
0
  }
2551
147
  result = TPMU_ASYM_SCHEME_Unmarshal(&target->details, buffer, size,
2552
147
                                      target->scheme);
2553
147
  if (result != TPM_RC_SUCCESS) {
2554
2
    return result;
2555
2
  }
2556
145
  return TPM_RC_SUCCESS;
2557
147
}
2558
2559
UINT16 TPMI_RSA_KEY_BITS_Marshal(TPMI_RSA_KEY_BITS* source,
2560
                                 BYTE** buffer,
2561
218
                                 INT32* size) {
2562
218
  return uint16_t_Marshal(source, buffer, size);
2563
218
}
2564
2565
TPM_RC TPMI_RSA_KEY_BITS_Unmarshal(TPMI_RSA_KEY_BITS* target,
2566
                                   BYTE** buffer,
2567
145
                                   INT32* size) {
2568
145
  TPM_RC result;
2569
145
  uint16_t supported_values[] = RSA_KEY_SIZES_BITS;
2570
145
  size_t length = sizeof(supported_values) / sizeof(supported_values[0]);
2571
145
  size_t i;
2572
145
  BOOL is_supported_value = FALSE;
2573
145
  result = uint16_t_Unmarshal(target, buffer, size);
2574
145
  if (result != TPM_RC_SUCCESS) {
2575
0
    return result;
2576
0
  }
2577
229
  for (i = 0; i < length; ++i) {
2578
229
    if (*target == supported_values[i]) {
2579
145
      is_supported_value = TRUE;
2580
145
      break;
2581
145
    }
2582
229
  }
2583
145
  if (!is_supported_value) {
2584
0
    return TPM_RC_VALUE;
2585
0
  }
2586
145
  return TPM_RC_SUCCESS;
2587
145
}
2588
2589
UINT16 TPMS_RSA_PARMS_Marshal(TPMS_RSA_PARMS* source,
2590
                              BYTE** buffer,
2591
218
                              INT32* size) {
2592
218
  UINT16 total_size = 0;
2593
218
  total_size += TPMT_SYM_DEF_OBJECT_Marshal(&source->symmetric, buffer, size);
2594
218
  total_size += TPMT_RSA_SCHEME_Marshal(&source->scheme, buffer, size);
2595
218
  total_size += TPMI_RSA_KEY_BITS_Marshal(&source->keyBits, buffer, size);
2596
218
  total_size += UINT32_Marshal(&source->exponent, buffer, size);
2597
218
  return total_size;
2598
218
}
2599
2600
TPM_RC TPMS_RSA_PARMS_Unmarshal(TPMS_RSA_PARMS* target,
2601
                                BYTE** buffer,
2602
149
                                INT32* size) {
2603
149
  TPM_RC result;
2604
149
  result = TPMT_SYM_DEF_OBJECT_Unmarshal(&target->symmetric, buffer, size);
2605
149
  if (result != TPM_RC_SUCCESS) {
2606
2
    return result;
2607
2
  }
2608
147
  result = TPMT_RSA_SCHEME_Unmarshal(&target->scheme, buffer, size);
2609
147
  if (result != TPM_RC_SUCCESS) {
2610
2
    return result;
2611
2
  }
2612
145
  result = TPMI_RSA_KEY_BITS_Unmarshal(&target->keyBits, buffer, size);
2613
145
  if (result != TPM_RC_SUCCESS) {
2614
0
    return result;
2615
0
  }
2616
145
  result = UINT32_Unmarshal(&target->exponent, buffer, size);
2617
145
  if (result != TPM_RC_SUCCESS) {
2618
0
    return result;
2619
0
  }
2620
145
  return TPM_RC_SUCCESS;
2621
145
}
2622
2623
UINT16 TPMS_SYMCIPHER_PARMS_Marshal(TPMS_SYMCIPHER_PARMS* source,
2624
                                    BYTE** buffer,
2625
12
                                    INT32* size) {
2626
12
  UINT16 total_size = 0;
2627
12
  total_size += TPMT_SYM_DEF_OBJECT_Marshal(&source->sym, buffer, size);
2628
12
  return total_size;
2629
12
}
2630
2631
TPM_RC TPMS_SYMCIPHER_PARMS_Unmarshal(TPMS_SYMCIPHER_PARMS* target,
2632
                                      BYTE** buffer,
2633
9
                                      INT32* size) {
2634
9
  TPM_RC result;
2635
9
  result = TPMT_SYM_DEF_OBJECT_Unmarshal(&target->sym, buffer, size);
2636
9
  if (result != TPM_RC_SUCCESS) {
2637
0
    return result;
2638
0
  }
2639
9
  return TPM_RC_SUCCESS;
2640
9
}
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
55
UINT16 TPMI_ALG_KDF_Marshal(TPMI_ALG_KDF* source, BYTE** buffer, INT32* size) {
2752
55
  return uint16_t_Marshal(source, buffer, size);
2753
55
}
2754
2755
TPM_RC TPMI_ALG_KDF_Unmarshal(TPMI_ALG_KDF* target,
2756
                              BYTE** buffer,
2757
                              INT32* size,
2758
37
                              BOOL allow_conditional_value) {
2759
37
  TPM_RC result;
2760
37
  BOOL has_valid_value = FALSE;
2761
37
  result = uint16_t_Unmarshal(target, buffer, size);
2762
37
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
2763
0
    return result;
2764
0
  }
2765
37
  if (*target == TPM_ALG_NULL) {
2766
34
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_KDF;
2767
34
  }
2768
3
  switch (*target) {
2769
0
#ifdef TPM_ALG_MGF1
2770
1
    case TPM_ALG_MGF1:
2771
1
#endif
2772
1
#ifdef TPM_ALG_KDF1_SP800_56A
2773
2
    case TPM_ALG_KDF1_SP800_56A:
2774
2
#endif
2775
#ifdef TPM_ALG_KDF2
2776
    case TPM_ALG_KDF2:
2777
#endif
2778
2
#ifdef TPM_ALG_KDF1_SP800_108
2779
2
    case TPM_ALG_KDF1_SP800_108:
2780
2
#endif
2781
2
      has_valid_value = TRUE;
2782
2
      break;
2783
3
  }
2784
3
  if (!has_valid_value) {
2785
1
    return TPM_RC_KDF;
2786
1
  }
2787
2
  return TPM_RC_SUCCESS;
2788
3
}
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
0
                                            INT32* size) {
2799
0
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2800
0
}
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
0
                                          INT32* size) {
2817
0
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
2818
0
}
2819
2820
TPM_RC TPMS_SCHEME_KDF1_SP800_56A_Unmarshal(TPMS_SCHEME_KDF1_SP800_56A* target,
2821
                                            BYTE** buffer,
2822
0
                                            INT32* size) {
2823
0
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2824
0
}
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
0
                                  INT32* size) {
2835
0
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
2836
0
}
2837
2838
UINT16 TPMU_KDF_SCHEME_Marshal(TPMU_KDF_SCHEME* source,
2839
                               BYTE** buffer,
2840
                               INT32* size,
2841
49
                               UINT32 selector) {
2842
49
  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
0
    case TPM_ALG_KDF1_SP800_56A:
2850
0
      return TPMS_SCHEME_KDF1_SP800_56A_Marshal(
2851
0
          (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
49
    case TPM_ALG_NULL:
2865
49
      return 0;
2866
49
#endif
2867
49
  }
2868
0
  return 0;
2869
49
}
2870
2871
TPM_RC TPMU_KDF_SCHEME_Unmarshal(TPMU_KDF_SCHEME* target,
2872
                                 BYTE** buffer,
2873
                                 INT32* size,
2874
34
                                 UINT32 selector) {
2875
34
  switch (selector) {
2876
0
#ifdef TPM_ALG_MGF1
2877
0
    case TPM_ALG_MGF1:
2878
0
      return TPMS_SCHEME_MGF1_Unmarshal((TPMS_SCHEME_MGF1*)&target->mgf1,
2879
0
                                        buffer, size);
2880
0
#endif
2881
0
#ifdef TPM_ALG_KDF1_SP800_56A
2882
0
    case TPM_ALG_KDF1_SP800_56A:
2883
0
      return TPMS_SCHEME_KDF1_SP800_56A_Unmarshal(
2884
0
          (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
0
    case TPM_ALG_KDF1_SP800_108:
2893
0
      return TPMS_SCHEME_KDF1_SP800_108_Unmarshal(
2894
0
          (TPMS_SCHEME_KDF1_SP800_108*)&target->kdf1_sp800_108, buffer, size);
2895
0
#endif
2896
0
#ifdef TPM_ALG_NULL
2897
34
    case TPM_ALG_NULL:
2898
34
      return TPM_RC_SUCCESS;
2899
34
#endif
2900
34
  }
2901
0
  return TPM_RC_SELECTOR;
2902
34
}
2903
2904
UINT16 TPMT_KDF_SCHEME_Marshal(TPMT_KDF_SCHEME* source,
2905
                               BYTE** buffer,
2906
49
                               INT32* size) {
2907
49
  UINT16 total_size = 0;
2908
49
  total_size += TPMI_ALG_KDF_Marshal(&source->scheme, buffer, size);
2909
49
  total_size +=
2910
49
      TPMU_KDF_SCHEME_Marshal(&source->details, buffer, size, source->scheme);
2911
49
  return total_size;
2912
49
}
2913
2914
TPM_RC TPMT_KDF_SCHEME_Unmarshal(TPMT_KDF_SCHEME* target,
2915
                                 BYTE** buffer,
2916
35
                                 INT32* size) {
2917
35
  TPM_RC result;
2918
35
  result = TPMI_ALG_KDF_Unmarshal(&target->scheme, buffer, size, TRUE);
2919
35
  if (result != TPM_RC_SUCCESS) {
2920
1
    return result;
2921
1
  }
2922
34
  result =
2923
34
      TPMU_KDF_SCHEME_Unmarshal(&target->details, buffer, size, target->scheme);
2924
34
  if (result != TPM_RC_SUCCESS) {
2925
0
    return result;
2926
0
  }
2927
34
  return TPM_RC_SUCCESS;
2928
34
}
2929
2930
UINT16 TPMI_ALG_ECC_SCHEME_Marshal(TPMI_ALG_ECC_SCHEME* source,
2931
                                   BYTE** buffer,
2932
49
                                   INT32* size) {
2933
49
  return uint16_t_Marshal(source, buffer, size);
2934
49
}
2935
2936
TPM_RC TPMI_ALG_ECC_SCHEME_Unmarshal(TPMI_ALG_ECC_SCHEME* target,
2937
                                     BYTE** buffer,
2938
                                     INT32* size,
2939
40
                                     BOOL allow_conditional_value) {
2940
40
  TPM_RC result;
2941
40
  BOOL has_valid_value = FALSE;
2942
40
  result = uint16_t_Unmarshal(target, buffer, size);
2943
40
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
2944
0
    return result;
2945
0
  }
2946
40
  if (*target == TPM_ALG_NULL) {
2947
14
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_SCHEME;
2948
14
  }
2949
26
  switch (*target) {
2950
0
#ifdef TPM_ALG_ECDSA
2951
9
    case TPM_ALG_ECDSA:
2952
9
#endif
2953
9
#ifdef TPM_ALG_ECDAA
2954
11
    case TPM_ALG_ECDAA:
2955
11
#endif
2956
11
#ifdef TPM_ALG_SM2
2957
14
    case TPM_ALG_SM2:
2958
14
#endif
2959
14
#ifdef TPM_ALG_ECSCHNORR
2960
19
    case TPM_ALG_ECSCHNORR:
2961
19
#endif
2962
19
#ifdef TPM_ALG_ECDH
2963
26
    case TPM_ALG_ECDH:
2964
26
#endif
2965
#ifdef TPM_ALG_ECMQV
2966
    case TPM_ALG_ECMQV:
2967
#endif
2968
26
      has_valid_value = TRUE;
2969
26
      break;
2970
26
  }
2971
26
  if (!has_valid_value) {
2972
0
    return TPM_RC_SCHEME;
2973
0
  }
2974
26
  return TPM_RC_SUCCESS;
2975
26
}
2976
2977
UINT16 TPMT_ECC_SCHEME_Marshal(TPMT_ECC_SCHEME* source,
2978
                               BYTE** buffer,
2979
49
                               INT32* size) {
2980
49
  UINT16 total_size = 0;
2981
49
  total_size += TPMI_ALG_ECC_SCHEME_Marshal(&source->scheme, buffer, size);
2982
49
  total_size +=
2983
49
      TPMU_ASYM_SCHEME_Marshal(&source->details, buffer, size, source->scheme);
2984
49
  return total_size;
2985
49
}
2986
2987
TPM_RC TPMT_ECC_SCHEME_Unmarshal(TPMT_ECC_SCHEME* target,
2988
                                 BYTE** buffer,
2989
40
                                 INT32* size) {
2990
40
  TPM_RC result;
2991
40
  result = TPMI_ALG_ECC_SCHEME_Unmarshal(&target->scheme, buffer, size, TRUE);
2992
40
  if (result != TPM_RC_SUCCESS) {
2993
0
    return result;
2994
0
  }
2995
40
  result = TPMU_ASYM_SCHEME_Unmarshal(&target->details, buffer, size,
2996
40
                                      target->scheme);
2997
40
  if (result != TPM_RC_SUCCESS) {
2998
1
    return result;
2999
1
  }
3000
39
  return TPM_RC_SUCCESS;
3001
40
}
3002
3003
UINT16 TPMI_ECC_CURVE_Marshal(TPMI_ECC_CURVE* source,
3004
                              BYTE** buffer,
3005
49
                              INT32* size) {
3006
49
  return uint16_t_Marshal(source, buffer, size);
3007
49
}
3008
3009
TPM_RC TPMI_ECC_CURVE_Unmarshal(TPMI_ECC_CURVE* target,
3010
                                BYTE** buffer,
3011
39
                                INT32* size) {
3012
39
  TPM_RC result;
3013
39
  uint16_t supported_values[] = ECC_CURVES;
3014
39
  size_t length = sizeof(supported_values) / sizeof(supported_values[0]);
3015
39
  size_t i;
3016
39
  BOOL is_supported_value = FALSE;
3017
39
  result = uint16_t_Unmarshal(target, buffer, size);
3018
39
  if (result != TPM_RC_SUCCESS) {
3019
0
    return result;
3020
0
  }
3021
85
  for (i = 0; i < length; ++i) {
3022
81
    if (*target == supported_values[i]) {
3023
35
      is_supported_value = TRUE;
3024
35
      break;
3025
35
    }
3026
81
  }
3027
39
  if (!is_supported_value) {
3028
4
    return TPM_RC_CURVE;
3029
4
  }
3030
35
  return TPM_RC_SUCCESS;
3031
39
}
3032
3033
UINT16 TPMS_ECC_PARMS_Marshal(TPMS_ECC_PARMS* source,
3034
                              BYTE** buffer,
3035
49
                              INT32* size) {
3036
49
  UINT16 total_size = 0;
3037
49
  total_size += TPMT_SYM_DEF_OBJECT_Marshal(&source->symmetric, buffer, size);
3038
49
  total_size += TPMT_ECC_SCHEME_Marshal(&source->scheme, buffer, size);
3039
49
  total_size += TPMI_ECC_CURVE_Marshal(&source->curveID, buffer, size);
3040
49
  total_size += TPMT_KDF_SCHEME_Marshal(&source->kdf, buffer, size);
3041
49
  return total_size;
3042
49
}
3043
3044
TPM_RC TPMS_ECC_PARMS_Unmarshal(TPMS_ECC_PARMS* target,
3045
                                BYTE** buffer,
3046
40
                                INT32* size) {
3047
40
  TPM_RC result;
3048
40
  result = TPMT_SYM_DEF_OBJECT_Unmarshal(&target->symmetric, buffer, size);
3049
40
  if (result != TPM_RC_SUCCESS) {
3050
0
    return result;
3051
0
  }
3052
40
  result = TPMT_ECC_SCHEME_Unmarshal(&target->scheme, buffer, size);
3053
40
  if (result != TPM_RC_SUCCESS) {
3054
1
    return result;
3055
1
  }
3056
39
  result = TPMI_ECC_CURVE_Unmarshal(&target->curveID, buffer, size);
3057
39
  if (result != TPM_RC_SUCCESS) {
3058
4
    return result;
3059
4
  }
3060
35
  result = TPMT_KDF_SCHEME_Unmarshal(&target->kdf, buffer, size);
3061
35
  if (result != TPM_RC_SUCCESS) {
3062
1
    return result;
3063
1
  }
3064
34
  return TPM_RC_SUCCESS;
3065
35
}
3066
3067
UINT16 TPMI_ALG_KEYEDHASH_SCHEME_Marshal(TPMI_ALG_KEYEDHASH_SCHEME* source,
3068
                                         BYTE** buffer,
3069
121
                                         INT32* size) {
3070
121
  return uint16_t_Marshal(source, buffer, size);
3071
121
}
3072
3073
TPM_RC TPMI_ALG_KEYEDHASH_SCHEME_Unmarshal(TPMI_ALG_KEYEDHASH_SCHEME* target,
3074
                                           BYTE** buffer,
3075
                                           INT32* size,
3076
58
                                           BOOL allow_conditional_value) {
3077
58
  TPM_RC result;
3078
58
  BOOL has_valid_value = FALSE;
3079
58
  result = uint16_t_Unmarshal(target, buffer, size);
3080
58
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
3081
0
    return result;
3082
0
  }
3083
58
  if (*target == TPM_ALG_NULL) {
3084
37
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
3085
37
  }
3086
21
  switch (*target) {
3087
0
#ifdef TPM_ALG_HMAC
3088
15
    case TPM_ALG_HMAC:
3089
15
#endif
3090
15
#ifdef TPM_ALG_XOR
3091
21
    case TPM_ALG_XOR:
3092
21
#endif
3093
21
      has_valid_value = TRUE;
3094
21
      break;
3095
21
  }
3096
21
  if (!has_valid_value) {
3097
0
    return TPM_RC_VALUE;
3098
0
  }
3099
21
  return TPM_RC_SUCCESS;
3100
21
}
3101
3102
UINT16 TPMS_SCHEME_HMAC_Marshal(TPMS_SCHEME_HMAC* source,
3103
                                BYTE** buffer,
3104
33
                                INT32* size) {
3105
33
  return TPMS_SCHEME_HASH_Marshal(source, buffer, size);
3106
33
}
3107
3108
TPM_RC TPMS_SCHEME_HMAC_Unmarshal(TPMS_SCHEME_HMAC* target,
3109
                                  BYTE** buffer,
3110
16
                                  INT32* size) {
3111
16
  return TPMS_SCHEME_HASH_Unmarshal(target, buffer, size);
3112
16
}
3113
3114
UINT16 TPMS_SCHEME_XOR_Marshal(TPMS_SCHEME_XOR* source,
3115
                               BYTE** buffer,
3116
6
                               INT32* size) {
3117
6
  UINT16 total_size = 0;
3118
6
  total_size += TPMI_ALG_HASH_Marshal(&source->hashAlg, buffer, size);
3119
6
  total_size += TPMI_ALG_KDF_Marshal(&source->kdf, buffer, size);
3120
6
  return total_size;
3121
6
}
3122
3123
TPM_RC TPMS_SCHEME_XOR_Unmarshal(TPMS_SCHEME_XOR* target,
3124
                                 BYTE** buffer,
3125
6
                                 INT32* size) {
3126
6
  TPM_RC result;
3127
6
  result = TPMI_ALG_HASH_Unmarshal(&target->hashAlg, buffer, size, TRUE);
3128
6
  if (result != TPM_RC_SUCCESS) {
3129
4
    return result;
3130
4
  }
3131
2
  result = TPMI_ALG_KDF_Unmarshal(&target->kdf, buffer, size, FALSE);
3132
2
  if (result != TPM_RC_SUCCESS) {
3133
0
    return result;
3134
0
  }
3135
2
  return TPM_RC_SUCCESS;
3136
2
}
3137
3138
UINT16 TPMU_SCHEME_KEYEDHASH_Marshal(TPMU_SCHEME_KEYEDHASH* source,
3139
                                     BYTE** buffer,
3140
                                     INT32* size,
3141
121
                                     UINT32 selector) {
3142
121
  switch (selector) {
3143
0
#ifdef TPM_ALG_HMAC
3144
33
    case TPM_ALG_HMAC:
3145
33
      return TPMS_SCHEME_HMAC_Marshal((TPMS_SCHEME_HMAC*)&source->hmac, buffer,
3146
33
                                      size);
3147
0
#endif
3148
0
#ifdef TPM_ALG_XOR
3149
6
    case TPM_ALG_XOR:
3150
6
      return TPMS_SCHEME_XOR_Marshal((TPMS_SCHEME_XOR*)&source->xor_, buffer,
3151
6
                                     size);
3152
0
#endif
3153
0
#ifdef TPM_ALG_NULL
3154
82
    case TPM_ALG_NULL:
3155
82
      return 0;
3156
121
#endif
3157
121
  }
3158
0
  return 0;
3159
121
}
3160
3161
TPM_RC TPMU_SCHEME_KEYEDHASH_Unmarshal(TPMU_SCHEME_KEYEDHASH* target,
3162
                                       BYTE** buffer,
3163
                                       INT32* size,
3164
58
                                       UINT32 selector) {
3165
58
  switch (selector) {
3166
0
#ifdef TPM_ALG_HMAC
3167
15
    case TPM_ALG_HMAC:
3168
15
      return TPMS_SCHEME_HMAC_Unmarshal((TPMS_SCHEME_HMAC*)&target->hmac,
3169
15
                                        buffer, size);
3170
0
#endif
3171
0
#ifdef TPM_ALG_XOR
3172
6
    case TPM_ALG_XOR:
3173
6
      return TPMS_SCHEME_XOR_Unmarshal((TPMS_SCHEME_XOR*)&target->xor_, buffer,
3174
6
                                       size);
3175
0
#endif
3176
0
#ifdef TPM_ALG_NULL
3177
37
    case TPM_ALG_NULL:
3178
37
      return TPM_RC_SUCCESS;
3179
58
#endif
3180
58
  }
3181
0
  return TPM_RC_SELECTOR;
3182
58
}
3183
3184
UINT16 TPMT_KEYEDHASH_SCHEME_Marshal(TPMT_KEYEDHASH_SCHEME* source,
3185
                                     BYTE** buffer,
3186
121
                                     INT32* size) {
3187
121
  UINT16 total_size = 0;
3188
121
  total_size +=
3189
121
      TPMI_ALG_KEYEDHASH_SCHEME_Marshal(&source->scheme, buffer, size);
3190
121
  total_size += TPMU_SCHEME_KEYEDHASH_Marshal(&source->details, buffer, size,
3191
121
                                              source->scheme);
3192
121
  return total_size;
3193
121
}
3194
3195
TPM_RC TPMT_KEYEDHASH_SCHEME_Unmarshal(TPMT_KEYEDHASH_SCHEME* target,
3196
                                       BYTE** buffer,
3197
58
                                       INT32* size) {
3198
58
  TPM_RC result;
3199
58
  result =
3200
58
      TPMI_ALG_KEYEDHASH_SCHEME_Unmarshal(&target->scheme, buffer, size, TRUE);
3201
58
  if (result != TPM_RC_SUCCESS) {
3202
0
    return result;
3203
0
  }
3204
58
  result = TPMU_SCHEME_KEYEDHASH_Unmarshal(&target->details, buffer, size,
3205
58
                                           target->scheme);
3206
58
  if (result != TPM_RC_SUCCESS) {
3207
6
    return result;
3208
6
  }
3209
52
  return TPM_RC_SUCCESS;
3210
58
}
3211
3212
UINT16 TPMS_KEYEDHASH_PARMS_Marshal(TPMS_KEYEDHASH_PARMS* source,
3213
                                    BYTE** buffer,
3214
121
                                    INT32* size) {
3215
121
  UINT16 total_size = 0;
3216
121
  total_size += TPMT_KEYEDHASH_SCHEME_Marshal(&source->scheme, buffer, size);
3217
121
  return total_size;
3218
121
}
3219
3220
TPM_RC TPMS_KEYEDHASH_PARMS_Unmarshal(TPMS_KEYEDHASH_PARMS* target,
3221
                                      BYTE** buffer,
3222
58
                                      INT32* size) {
3223
58
  TPM_RC result;
3224
58
  result = TPMT_KEYEDHASH_SCHEME_Unmarshal(&target->scheme, buffer, size);
3225
58
  if (result != TPM_RC_SUCCESS) {
3226
6
    return result;
3227
6
  }
3228
52
  return TPM_RC_SUCCESS;
3229
58
}
3230
3231
UINT16 TPMU_PUBLIC_PARMS_Marshal(TPMU_PUBLIC_PARMS* source,
3232
                                 BYTE** buffer,
3233
                                 INT32* size,
3234
400
                                 UINT32 selector) {
3235
400
  switch (selector) {
3236
0
#ifdef TPM_ALG_KEYEDHASH
3237
121
    case TPM_ALG_KEYEDHASH:
3238
121
      return TPMS_KEYEDHASH_PARMS_Marshal(
3239
121
          (TPMS_KEYEDHASH_PARMS*)&source->keyedHashDetail, buffer, size);
3240
0
#endif
3241
0
#ifdef TPM_ALG_SYMCIPHER
3242
12
    case TPM_ALG_SYMCIPHER:
3243
12
      return TPMS_SYMCIPHER_PARMS_Marshal(
3244
12
          (TPMS_SYMCIPHER_PARMS*)&source->symDetail, buffer, size);
3245
0
#endif
3246
0
#ifdef TPM_ALG_RSA
3247
218
    case TPM_ALG_RSA:
3248
218
      return TPMS_RSA_PARMS_Marshal((TPMS_RSA_PARMS*)&source->rsaDetail, buffer,
3249
218
                                    size);
3250
0
#endif
3251
0
#ifdef TPM_ALG_ECC
3252
49
    case TPM_ALG_ECC:
3253
49
      return TPMS_ECC_PARMS_Marshal((TPMS_ECC_PARMS*)&source->eccDetail, buffer,
3254
49
                                    size);
3255
400
#endif
3256
400
  }
3257
0
  return 0;
3258
400
}
3259
3260
TPM_RC TPMU_PUBLIC_PARMS_Unmarshal(TPMU_PUBLIC_PARMS* target,
3261
                                   BYTE** buffer,
3262
                                   INT32* size,
3263
256
                                   UINT32 selector) {
3264
256
  switch (selector) {
3265
0
#ifdef TPM_ALG_KEYEDHASH
3266
58
    case TPM_ALG_KEYEDHASH:
3267
58
      return TPMS_KEYEDHASH_PARMS_Unmarshal(
3268
58
          (TPMS_KEYEDHASH_PARMS*)&target->keyedHashDetail, buffer, size);
3269
0
#endif
3270
0
#ifdef TPM_ALG_SYMCIPHER
3271
9
    case TPM_ALG_SYMCIPHER:
3272
9
      return TPMS_SYMCIPHER_PARMS_Unmarshal(
3273
9
          (TPMS_SYMCIPHER_PARMS*)&target->symDetail, buffer, size);
3274
0
#endif
3275
0
#ifdef TPM_ALG_RSA
3276
149
    case TPM_ALG_RSA:
3277
149
      return TPMS_RSA_PARMS_Unmarshal((TPMS_RSA_PARMS*)&target->rsaDetail,
3278
149
                                      buffer, size);
3279
0
#endif
3280
0
#ifdef TPM_ALG_ECC
3281
40
    case TPM_ALG_ECC:
3282
40
      return TPMS_ECC_PARMS_Unmarshal((TPMS_ECC_PARMS*)&target->eccDetail,
3283
40
                                      buffer, size);
3284
256
#endif
3285
256
  }
3286
0
  return TPM_RC_SELECTOR;
3287
256
}
3288
3289
400
UINT16 TPMT_PUBLIC_Marshal(TPMT_PUBLIC* source, BYTE** buffer, INT32* size) {
3290
400
  UINT16 total_size = 0;
3291
400
  total_size += TPMI_ALG_PUBLIC_Marshal(&source->type, buffer, size);
3292
400
  total_size += TPMI_ALG_HASH_Marshal(&source->nameAlg, buffer, size);
3293
400
  total_size += TPMA_OBJECT_Marshal(&source->objectAttributes, buffer, size);
3294
400
  total_size += TPM2B_DIGEST_Marshal(&source->authPolicy, buffer, size);
3295
400
  total_size += TPMU_PUBLIC_PARMS_Marshal(&source->parameters, buffer, size,
3296
400
                                          source->type);
3297
400
  total_size +=
3298
400
      TPMU_PUBLIC_ID_Marshal(&source->unique, buffer, size, source->type);
3299
400
  return total_size;
3300
400
}
3301
3302
268
TPM_RC TPMT_PUBLIC_Unmarshal(TPMT_PUBLIC* target, BYTE** buffer, INT32* size) {
3303
268
  TPM_RC result;
3304
268
  result = TPMI_ALG_PUBLIC_Unmarshal(&target->type, buffer, size);
3305
268
  if (result != TPM_RC_SUCCESS) {
3306
11
    return result;
3307
11
  }
3308
257
  result = TPMI_ALG_HASH_Unmarshal(&target->nameAlg, buffer, size, TRUE);
3309
257
  if (result != TPM_RC_SUCCESS) {
3310
2
    return result;
3311
2
  }
3312
255
  result = TPMA_OBJECT_Unmarshal(&target->objectAttributes, buffer, size);
3313
255
  if (result != TPM_RC_SUCCESS) {
3314
0
    return result;
3315
0
  }
3316
255
  result = TPM2B_DIGEST_Unmarshal(&target->authPolicy, buffer, size);
3317
255
  if (result != TPM_RC_SUCCESS) {
3318
2
    return result;
3319
2
  }
3320
253
  result = TPMU_PUBLIC_PARMS_Unmarshal(&target->parameters, buffer, size,
3321
253
                                       target->type);
3322
253
  if (result != TPM_RC_SUCCESS) {
3323
13
    return result;
3324
13
  }
3325
240
  result =
3326
240
      TPMU_PUBLIC_ID_Unmarshal(&target->unique, buffer, size, target->type);
3327
240
  if (result != TPM_RC_SUCCESS) {
3328
8
    return result;
3329
8
  }
3330
232
  return TPM_RC_SUCCESS;
3331
240
}
3332
3333
100
UINT16 TPM2B_PUBLIC_Marshal(TPM2B_PUBLIC* source, BYTE** buffer, INT32* size) {
3334
100
  UINT16 total_size = 0;
3335
100
  total_size += UINT16_Marshal(&source->t.size, buffer, size);
3336
100
  total_size += TPMT_PUBLIC_Marshal(&source->t.publicArea, buffer, size);
3337
100
  {
3338
100
    BYTE* size_location = *buffer - total_size;
3339
100
    INT32 size_field_size = sizeof(UINT16);
3340
100
    UINT16 payload_size = total_size - (UINT16)size_field_size;
3341
100
    UINT16_Marshal(&payload_size, &size_location, &size_field_size);
3342
100
  }
3343
100
  return total_size;
3344
100
}
3345
3346
TPM_RC TPM2B_PUBLIC_Unmarshal(TPM2B_PUBLIC* target,
3347
                              BYTE** buffer,
3348
276
                              INT32* size) {
3349
276
  TPM_RC result;
3350
276
  UINT32 start_size = *size;
3351
276
  UINT32 struct_size;
3352
276
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
3353
276
  if (result != TPM_RC_SUCCESS) {
3354
2
    return result;
3355
2
  }
3356
274
  if (target->t.size == 0) {
3357
6
    return TPM_RC_SIZE;
3358
6
  }
3359
268
  result = TPMT_PUBLIC_Unmarshal(&target->t.publicArea, buffer, size);
3360
268
  if (result != TPM_RC_SUCCESS) {
3361
36
    return result;
3362
36
  }
3363
232
  struct_size = start_size - *size - sizeof(target->t.size);
3364
232
  if (struct_size != target->t.size) {
3365
15
    return TPM_RC_SIZE;
3366
15
  }
3367
217
  return TPM_RC_SUCCESS;
3368
232
}
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
174
                                      INT32* size) {
3385
174
  TPM_RC result;
3386
174
  INT32 i;
3387
174
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
3388
174
  if (result != TPM_RC_SUCCESS) {
3389
1
    return result;
3390
1
  }
3391
173
  if (target->t.size == 0) {
3392
153
    return TPM_RC_SUCCESS;
3393
153
  }
3394
20
  if (target->t.size > MAX_SYM_DATA) {
3395
3
    return TPM_RC_SIZE;
3396
3
  }
3397
859
  for (i = 0; i < target->t.size; ++i) {
3398
844
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
3399
844
    if (result != TPM_RC_SUCCESS) {
3400
2
      return result;
3401
2
    }
3402
844
  }
3403
15
  return TPM_RC_SUCCESS;
3404
17
}
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
13
                               INT32* size) {
3421
13
  TPM_RC result;
3422
13
  INT32 i;
3423
13
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
3424
13
  if (result != TPM_RC_SUCCESS) {
3425
0
    return result;
3426
0
  }
3427
13
  if (target->t.size == 0) {
3428
7
    return TPM_RC_SUCCESS;
3429
7
  }
3430
6
  if (target->t.size > MAX_SYM_KEY_BYTES) {
3431
3
    return TPM_RC_SIZE;
3432
3
  }
3433
25
  for (i = 0; i < target->t.size; ++i) {
3434
22
    result = BYTE_Unmarshal(&target->t.buffer[i], buffer, size);
3435
22
    if (result != TPM_RC_SUCCESS) {
3436
0
      return result;
3437
0
    }
3438
22
  }
3439
3
  return TPM_RC_SUCCESS;
3440
3
}
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
98
                                          UINT32 selector) {
3474
98
  switch (selector) {
3475
0
#ifdef TPM_ALG_RSA
3476
70
    case TPM_ALG_RSA:
3477
70
      return TPM2B_PRIVATE_KEY_RSA_Unmarshal(
3478
70
          (TPM2B_PRIVATE_KEY_RSA*)&target->rsa, buffer, size);
3479
0
#endif
3480
0
#ifdef TPM_ALG_ECC
3481
12
    case TPM_ALG_ECC:
3482
12
      return TPM2B_ECC_PARAMETER_Unmarshal((TPM2B_ECC_PARAMETER*)&target->ecc,
3483
12
                                           buffer, size);
3484
0
#endif
3485
0
#ifdef TPM_ALG_KEYEDHASH
3486
3
    case TPM_ALG_KEYEDHASH:
3487
3
      return TPM2B_SENSITIVE_DATA_Unmarshal(
3488
3
          (TPM2B_SENSITIVE_DATA*)&target->bits, buffer, size);
3489
0
#endif
3490
0
#ifdef TPM_ALG_SYMCIPHER
3491
13
    case TPM_ALG_SYMCIPHER:
3492
13
      return TPM2B_SYM_KEY_Unmarshal((TPM2B_SYM_KEY*)&target->sym, buffer,
3493
13
                                     size);
3494
98
#endif
3495
98
  }
3496
0
  return TPM_RC_SELECTOR;
3497
98
}
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
100
                                INT32* size) {
3514
100
  TPM_RC result;
3515
100
  result = TPMI_ALG_PUBLIC_Unmarshal(&target->sensitiveType, buffer, size);
3516
100
  if (result != TPM_RC_SUCCESS) {
3517
0
    return result;
3518
0
  }
3519
100
  result = TPM2B_AUTH_Unmarshal(&target->authValue, buffer, size);
3520
100
  if (result != TPM_RC_SUCCESS) {
3521
1
    return result;
3522
1
  }
3523
99
  result = TPM2B_DIGEST_Unmarshal(&target->seedValue, buffer, size);
3524
99
  if (result != TPM_RC_SUCCESS) {
3525
1
    return result;
3526
1
  }
3527
98
  result = TPMU_SENSITIVE_COMPOSITE_Unmarshal(&target->sensitive, buffer, size,
3528
98
                                              target->sensitiveType);
3529
98
  if (result != TPM_RC_SUCCESS) {
3530
6
    return result;
3531
6
  }
3532
92
  return TPM_RC_SUCCESS;
3533
98
}
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
130
                                 INT32* size) {
3547
130
  TPM_RC result;
3548
130
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
3549
130
  if (result != TPM_RC_SUCCESS) {
3550
0
    return result;
3551
0
  }
3552
130
  if (target->t.size == 0) {
3553
30
    return TPM_RC_SUCCESS;
3554
30
  }
3555
100
  result = TPMT_SENSITIVE_Unmarshal(&target->t.sensitiveArea, buffer, size);
3556
100
  if (result != TPM_RC_SUCCESS) {
3557
8
    return result;
3558
8
  }
3559
92
  return TPM_RC_SUCCESS;
3560
100
}
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
166
                                       INT32* size) {
3574
166
  TPM_RC result;
3575
166
  result = TPM2B_AUTH_Unmarshal(&target->userAuth, buffer, size);
3576
166
  if (result != TPM_RC_SUCCESS) {
3577
3
    return result;
3578
3
  }
3579
163
  result = TPM2B_SENSITIVE_DATA_Unmarshal(&target->data, buffer, size);
3580
163
  if (result != TPM_RC_SUCCESS) {
3581
3
    return result;
3582
3
  }
3583
160
  return TPM_RC_SUCCESS;
3584
163
}
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
167
                                        INT32* size) {
3605
167
  TPM_RC result;
3606
167
  UINT32 start_size = *size;
3607
167
  UINT32 struct_size;
3608
167
  result = UINT16_Unmarshal(&target->t.size, buffer, size);
3609
167
  if (result != TPM_RC_SUCCESS) {
3610
1
    return result;
3611
1
  }
3612
166
  if (target->t.size == 0) {
3613
0
    return TPM_RC_SIZE;
3614
0
  }
3615
166
  result = TPMS_SENSITIVE_CREATE_Unmarshal(&target->t.sensitive, buffer, size);
3616
166
  if (result != TPM_RC_SUCCESS) {
3617
6
    return result;
3618
6
  }
3619
160
  struct_size = start_size - *size - sizeof(target->t.size);
3620
160
  if (struct_size != target->t.size) {
3621
6
    return TPM_RC_SIZE;
3622
6
  }
3623
154
  return TPM_RC_SUCCESS;
3624
160
}
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
0
                              INT32* size) {
3665
0
  return uint32_t_Marshal((uint32_t*)source, buffer, size);
3666
0
}
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
0
UINT16 TPMA_CC_Marshal(TPMA_CC* source, BYTE** buffer, INT32* size) {
3686
0
  return uint32_t_Marshal((uint32_t*)source, buffer, size);
3687
0
}
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
134
UINT16 TPMA_SESSION_Marshal(TPMA_SESSION* source, BYTE** buffer, INT32* size) {
3741
134
  return uint8_t_Marshal((uint8_t*)source, buffer, size);
3742
134
}
3743
3744
TPM_RC TPMA_SESSION_Unmarshal(TPMA_SESSION* target,
3745
                              BYTE** buffer,
3746
289
                              INT32* size) {
3747
289
  TPM_RC result;
3748
289
  result = uint8_t_Unmarshal((uint8_t*)target, buffer, size);
3749
289
  if (result != TPM_RC_SUCCESS) {
3750
0
    return result;
3751
0
  }
3752
289
  if (target->reserved3_4 != 0) {
3753
1
    return TPM_RC_RESERVED_BITS;
3754
1
  }
3755
288
  return TPM_RC_SUCCESS;
3756
289
}
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
11
                                     BOOL allow_conditional_value) {
3858
11
  TPM_RC result;
3859
11
  BOOL has_valid_value = FALSE;
3860
11
  result = uint16_t_Unmarshal(target, buffer, size);
3861
11
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
3862
0
    return result;
3863
0
  }
3864
11
  if (*target == TPM_ALG_NULL) {
3865
0
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_SCHEME;
3866
0
  }
3867
11
  switch (*target) {
3868
0
#ifdef TPM_ALG_RSASSA
3869
0
    case TPM_ALG_RSASSA:
3870
0
#endif
3871
0
#ifdef TPM_ALG_RSAPSS
3872
0
    case TPM_ALG_RSAPSS:
3873
0
#endif
3874
0
#ifdef TPM_ALG_ECDSA
3875
0
    case TPM_ALG_ECDSA:
3876
0
#endif
3877
0
#ifdef TPM_ALG_ECDAA
3878
6
    case TPM_ALG_ECDAA:
3879
6
#endif
3880
6
#ifdef TPM_ALG_SM2
3881
6
    case TPM_ALG_SM2:
3882
6
#endif
3883
6
#ifdef TPM_ALG_ECSCHNORR
3884
10
    case TPM_ALG_ECSCHNORR:
3885
10
#endif
3886
10
#ifdef TPM_ALG_HMAC
3887
11
    case TPM_ALG_HMAC:
3888
11
#endif
3889
11
      has_valid_value = TRUE;
3890
11
      break;
3891
11
  }
3892
11
  if (!has_valid_value) {
3893
0
    return TPM_RC_SCHEME;
3894
0
  }
3895
11
  return TPM_RC_SUCCESS;
3896
11
}
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
8
                              BOOL allow_conditional_value) {
3906
8
  TPM_RC result;
3907
8
  BOOL has_valid_value = FALSE;
3908
8
  result = uint16_t_Unmarshal(target, buffer, size);
3909
8
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
3910
0
    return result;
3911
0
  }
3912
8
  if (*target == TPM_ALG_NULL) {
3913
2
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_SYMMETRIC;
3914
2
  }
3915
6
  switch (*target) {
3916
0
#ifdef TPM_ALG_AES
3917
0
    case TPM_ALG_AES:
3918
0
#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
0
#ifdef TPM_ALG_XOR
3926
0
    case TPM_ALG_XOR:
3927
0
#endif
3928
0
      has_valid_value = TRUE;
3929
0
      break;
3930
6
  }
3931
6
  if (!has_valid_value) {
3932
6
    return TPM_RC_SYMMETRIC;
3933
6
  }
3934
0
  return TPM_RC_SUCCESS;
3935
6
}
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
22
                                 INT32* size) {
3946
22
  TPM_RC result;
3947
22
  BOOL has_valid_value = FALSE;
3948
22
  result = uint32_t_Unmarshal(target, buffer, size);
3949
22
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
3950
0
    return result;
3951
0
  }
3952
22
  if ((*target >= HMAC_SESSION_FIRST) && (*target <= HMAC_SESSION_LAST)) {
3953
5
    has_valid_value = TRUE;
3954
5
  }
3955
22
  if ((*target >= POLICY_SESSION_FIRST) && (*target <= POLICY_SESSION_LAST)) {
3956
3
    has_valid_value = TRUE;
3957
3
  }
3958
22
  if ((*target >= TRANSIENT_FIRST) && (*target <= TRANSIENT_LAST)) {
3959
13
    has_valid_value = TRUE;
3960
13
  }
3961
22
  if (!has_valid_value) {
3962
1
    return TPM_RC_VALUE;
3963
1
  }
3964
21
  return TPM_RC_SUCCESS;
3965
22
}
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
18
                                BOOL allow_conditional_value) {
3977
18
  TPM_RC result;
3978
18
  BOOL has_valid_value = FALSE;
3979
18
  result = uint32_t_Unmarshal(target, buffer, size);
3980
18
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
3981
0
    return result;
3982
0
  }
3983
18
  if (*target == TPM_RH_NULL) {
3984
0
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
3985
0
  }
3986
18
  switch (*target) {
3987
2
    case TPM_RH_OWNER:
3988
2
    case TPM_RH_ENDORSEMENT:
3989
4
    case TPM_RH_PLATFORM:
3990
4
    case TPM_RH_LOCKOUT:
3991
4
      has_valid_value = TRUE;
3992
4
      break;
3993
18
  }
3994
18
  if ((*target >= TRANSIENT_FIRST) && (*target <= TRANSIENT_LAST)) {
3995
0
    has_valid_value = TRUE;
3996
0
  }
3997
18
  if ((*target >= PERSISTENT_FIRST) && (*target <= PERSISTENT_LAST)) {
3998
0
    has_valid_value = TRUE;
3999
0
  }
4000
18
  if ((*target >= NV_INDEX_FIRST) && (*target <= NV_INDEX_LAST)) {
4001
2
    has_valid_value = TRUE;
4002
2
  }
4003
18
  if ((*target >= PCR_FIRST) && (*target <= PCR_LAST)) {
4004
11
    has_valid_value = TRUE;
4005
11
  }
4006
18
  if ((*target >= TPM_RH_AUTH_00) && (*target <= TPM_RH_AUTH_FF)) {
4007
0
    has_valid_value = TRUE;
4008
0
  }
4009
18
  if (!has_valid_value) {
4010
1
    return TPM_RC_VALUE;
4011
1
  }
4012
17
  return TPM_RC_SUCCESS;
4013
18
}
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
26
                                BOOL allow_conditional_value) {
4025
26
  TPM_RC result;
4026
26
  BOOL has_valid_value = FALSE;
4027
26
  result = uint32_t_Unmarshal(target, buffer, size);
4028
26
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4029
0
    return result;
4030
0
  }
4031
26
  if (*target == TPM_RH_NULL) {
4032
26
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
4033
26
  }
4034
0
  if ((*target >= TRANSIENT_FIRST) && (*target <= TRANSIENT_LAST)) {
4035
0
    has_valid_value = TRUE;
4036
0
  }
4037
0
  if ((*target >= PERSISTENT_FIRST) && (*target <= PERSISTENT_LAST)) {
4038
0
    has_valid_value = TRUE;
4039
0
  }
4040
0
  if (!has_valid_value) {
4041
0
    return TPM_RC_VALUE;
4042
0
  }
4043
0
  return TPM_RC_SUCCESS;
4044
0
}
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
56
                             BOOL allow_conditional_value) {
4054
56
  TPM_RC result;
4055
56
  BOOL has_valid_value = FALSE;
4056
56
  result = uint32_t_Unmarshal(target, buffer, size);
4057
56
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4058
0
    return result;
4059
0
  }
4060
56
  if (*target == TPM_RH_NULL) {
4061
5
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
4062
5
  }
4063
51
  if ((*target >= PCR_FIRST) && (*target <= PCR_LAST)) {
4064
47
    has_valid_value = TRUE;
4065
47
  }
4066
51
  if (!has_valid_value) {
4067
4
    return TPM_RC_VALUE;
4068
4
  }
4069
47
  return TPM_RC_SUCCESS;
4070
51
}
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
11
                               INT32* size) {
4143
11
  TPM_RC result;
4144
11
  BOOL has_valid_value = FALSE;
4145
11
  result = uint32_t_Unmarshal(target, buffer, size);
4146
11
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4147
0
    return result;
4148
0
  }
4149
11
  switch (*target) {
4150
0
    case TPM_RH_LOCKOUT:
4151
6
    case TPM_RH_PLATFORM:
4152
6
      has_valid_value = TRUE;
4153
6
      break;
4154
11
  }
4155
11
  if (!has_valid_value) {
4156
5
    return TPM_RC_VALUE;
4157
5
  }
4158
6
  return TPM_RC_SUCCESS;
4159
11
}
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
1
                                 BOOL allow_conditional_value) {
4171
1
  TPM_RC result;
4172
1
  BOOL has_valid_value = FALSE;
4173
1
  result = uint32_t_Unmarshal(target, buffer, size);
4174
1
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4175
0
    return result;
4176
0
  }
4177
1
  if (*target == TPM_RH_NULL) {
4178
0
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
4179
0
  }
4180
1
  switch (*target) {
4181
0
    case TPM_RH_OWNER:
4182
0
    case TPM_RH_PLATFORM:
4183
0
    case TPM_RH_ENDORSEMENT:
4184
0
    case TPM_RH_PLATFORM_NV:
4185
0
      has_valid_value = TRUE;
4186
0
      break;
4187
1
  }
4188
1
  if (!has_valid_value) {
4189
1
    return TPM_RC_VALUE;
4190
1
  }
4191
0
  return TPM_RC_SUCCESS;
4192
1
}
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
101
                                 INT32* size) {
4227
101
  return uint32_t_Marshal(source, buffer, size);
4228
101
}
4229
4230
TPM_RC TPMI_RH_HIERARCHY_Unmarshal(TPMI_RH_HIERARCHY* target,
4231
                                   BYTE** buffer,
4232
                                   INT32* size,
4233
272
                                   BOOL allow_conditional_value) {
4234
272
  TPM_RC result;
4235
272
  BOOL has_valid_value = FALSE;
4236
272
  result = uint32_t_Unmarshal(target, buffer, size);
4237
272
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4238
0
    return result;
4239
0
  }
4240
272
  if (*target == TPM_RH_NULL) {
4241
91
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
4242
91
  }
4243
181
  switch (*target) {
4244
80
    case TPM_RH_OWNER:
4245
116
    case TPM_RH_PLATFORM:
4246
181
    case TPM_RH_ENDORSEMENT:
4247
181
      has_valid_value = TRUE;
4248
181
      break;
4249
181
  }
4250
181
  if (!has_valid_value) {
4251
0
    return TPM_RC_VALUE;
4252
0
  }
4253
181
  return TPM_RC_SUCCESS;
4254
181
}
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
14
                                        INT32* size) {
4265
14
  TPM_RC result;
4266
14
  BOOL has_valid_value = FALSE;
4267
14
  result = uint32_t_Unmarshal(target, buffer, size);
4268
14
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4269
0
    return result;
4270
0
  }
4271
14
  switch (*target) {
4272
3
    case TPM_RH_OWNER:
4273
7
    case TPM_RH_PLATFORM:
4274
7
    case TPM_RH_ENDORSEMENT:
4275
10
    case TPM_RH_LOCKOUT:
4276
10
      has_valid_value = TRUE;
4277
10
      break;
4278
14
  }
4279
14
  if (!has_valid_value) {
4280
4
    return TPM_RC_VALUE;
4281
4
  }
4282
10
  return TPM_RC_SUCCESS;
4283
14
}
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
6
                                 INT32* size) {
4294
6
  TPM_RC result;
4295
6
  BOOL has_valid_value = FALSE;
4296
6
  result = uint32_t_Unmarshal(target, buffer, size);
4297
6
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4298
0
    return result;
4299
0
  }
4300
6
  switch (*target) {
4301
1
    case TPM_RH_LOCKOUT:
4302
1
      has_valid_value = TRUE;
4303
1
      break;
4304
6
  }
4305
6
  if (!has_valid_value) {
4306
5
    return TPM_RC_VALUE;
4307
5
  }
4308
1
  return TPM_RC_SUCCESS;
4309
6
}
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
1
                                 INT32* size) {
4320
1
  TPM_RC result;
4321
1
  BOOL has_valid_value = FALSE;
4322
1
  result = uint32_t_Unmarshal(target, buffer, size);
4323
1
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4324
0
    return result;
4325
0
  }
4326
1
  switch (*target) {
4327
0
    case TPM_RH_PLATFORM:
4328
0
    case TPM_RH_OWNER:
4329
0
      has_valid_value = TRUE;
4330
0
      break;
4331
1
  }
4332
1
  if ((*target >= NV_INDEX_FIRST) && (*target <= NV_INDEX_LAST)) {
4333
1
    has_valid_value = TRUE;
4334
1
  }
4335
1
  if (!has_valid_value) {
4336
0
    return TPM_RC_VALUE;
4337
0
  }
4338
1
  return TPM_RC_SUCCESS;
4339
1
}
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
12
                                  INT32* size) {
4380
12
  TPM_RC result;
4381
12
  BOOL has_valid_value = FALSE;
4382
12
  result = uint32_t_Unmarshal(target, buffer, size);
4383
12
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4384
0
    return result;
4385
0
  }
4386
12
  switch (*target) {
4387
9
    case TPM_RH_PLATFORM:
4388
9
      has_valid_value = TRUE;
4389
9
      break;
4390
12
  }
4391
12
  if (!has_valid_value) {
4392
3
    return TPM_RC_VALUE;
4393
3
  }
4394
9
  return TPM_RC_SUCCESS;
4395
12
}
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
22
                                   INT32* size) {
4406
22
  TPM_RC result;
4407
22
  BOOL has_valid_value = FALSE;
4408
22
  result = uint32_t_Unmarshal(target, buffer, size);
4409
22
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4410
0
    return result;
4411
0
  }
4412
22
  switch (*target) {
4413
12
    case TPM_RH_OWNER:
4414
18
    case TPM_RH_PLATFORM:
4415
18
      has_valid_value = TRUE;
4416
18
      break;
4417
22
  }
4418
22
  if (!has_valid_value) {
4419
4
    return TPM_RC_VALUE;
4420
4
  }
4421
18
  return TPM_RC_SUCCESS;
4422
22
}
4423
4424
UINT16 TPMI_SH_AUTH_SESSION_Marshal(TPMI_SH_AUTH_SESSION* source,
4425
                                    BYTE** buffer,
4426
2
                                    INT32* size) {
4427
2
  return uint32_t_Marshal(source, buffer, size);
4428
2
}
4429
4430
TPM_RC TPMI_SH_AUTH_SESSION_Unmarshal(TPMI_SH_AUTH_SESSION* target,
4431
                                      BYTE** buffer,
4432
                                      INT32* size,
4433
297
                                      BOOL allow_conditional_value) {
4434
297
  TPM_RC result;
4435
297
  BOOL has_valid_value = FALSE;
4436
297
  result = uint32_t_Unmarshal(target, buffer, size);
4437
297
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4438
0
    return result;
4439
0
  }
4440
297
  if (*target == TPM_RS_PW) {
4441
289
    return allow_conditional_value ? TPM_RC_SUCCESS : TPM_RC_VALUE;
4442
289
  }
4443
8
  if ((*target >= HMAC_SESSION_FIRST) && (*target <= HMAC_SESSION_LAST)) {
4444
0
    has_valid_value = TRUE;
4445
0
  }
4446
8
  if ((*target >= POLICY_SESSION_FIRST) && (*target <= POLICY_SESSION_LAST)) {
4447
0
    has_valid_value = TRUE;
4448
0
  }
4449
8
  if (!has_valid_value) {
4450
8
    return TPM_RC_VALUE;
4451
8
  }
4452
0
  return TPM_RC_SUCCESS;
4453
8
}
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
3
                                INT32* size) {
4486
3
  TPM_RC result;
4487
3
  BOOL has_valid_value = FALSE;
4488
3
  result = uint32_t_Unmarshal(target, buffer, size);
4489
3
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4490
0
    return result;
4491
0
  }
4492
3
  if ((*target >= POLICY_SESSION_FIRST) && (*target <= POLICY_SESSION_LAST)) {
4493
0
    has_valid_value = TRUE;
4494
0
  }
4495
3
  if (!has_valid_value) {
4496
3
    return TPM_RC_VALUE;
4497
3
  }
4498
0
  return TPM_RC_SUCCESS;
4499
3
}
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
1.07k
                                     INT32* size) {
4542
1.07k
  TPM_RC result;
4543
1.07k
  BOOL has_valid_value = FALSE;
4544
1.07k
  result = uint16_t_Unmarshal(target, buffer, size);
4545
1.07k
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4546
0
    return result;
4547
0
  }
4548
1.07k
  switch (*target) {
4549
763
    case TPM_ST_NO_SESSIONS:
4550
1.07k
    case TPM_ST_SESSIONS:
4551
1.07k
      has_valid_value = TRUE;
4552
1.07k
      break;
4553
1.07k
  }
4554
1.07k
  if (!has_valid_value) {
4555
3
    return TPM_RC_BAD_TAG;
4556
3
  }
4557
1.07k
  return TPM_RC_SUCCESS;
4558
1.07k
}
4559
4560
8
UINT16 TPMI_YES_NO_Marshal(TPMI_YES_NO* source, BYTE** buffer, INT32* size) {
4561
8
  return uint8_t_Marshal(source, buffer, size);
4562
8
}
4563
4564
3
TPM_RC TPMI_YES_NO_Unmarshal(TPMI_YES_NO* target, BYTE** buffer, INT32* size) {
4565
3
  TPM_RC result;
4566
3
  BOOL has_valid_value = FALSE;
4567
3
  result = uint8_t_Unmarshal(target, buffer, size);
4568
3
  if ((result != TPM_RC_VALUE) && (result != TPM_RC_SUCCESS)) {
4569
0
    return result;
4570
0
  }
4571
3
  switch (*target) {
4572
1
    case NO:
4573
3
    case YES:
4574
3
      has_valid_value = TRUE;
4575
3
      break;
4576
3
  }
4577
3
  if (!has_valid_value) {
4578
0
    return TPM_RC_VALUE;
4579
0
  }
4580
3
  return TPM_RC_SUCCESS;
4581
3
}
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
0
                                 INT32* size) {
4615
0
  UINT16 total_size = 0;
4616
0
  total_size += TPM_ALG_ID_Marshal(&source->alg, buffer, size);
4617
0
  total_size += TPMA_ALGORITHM_Marshal(&source->algProperties, buffer, size);
4618
0
  return total_size;
4619
0
}
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
0
                                 INT32* size) {
4639
0
  UINT16 total_size = 0;
4640
0
  INT32 i;
4641
0
  total_size += UINT32_Marshal(&source->count, buffer, size);
4642
0
  for (i = 0; i < source->count; ++i) {
4643
0
    total_size +=
4644
0
        TPMS_ALG_PROPERTY_Marshal(&source->algProperties[i], buffer, size);
4645
0
  }
4646
0
  return total_size;
4647
0
}
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
1.06k
TPM_RC TPM_CC_Unmarshal(TPM_CC* target, BYTE** buffer, INT32* size) {
4676
1.06k
  TPM_RC result;
4677
1.06k
  result = uint32_t_Unmarshal(target, buffer, size);
4678
1.06k
  if (result != TPM_RC_SUCCESS) {
4679
0
    return result;
4680
0
  }
4681
1.06k
#if IS_CC_ENABLED(NV_UndefineSpaceSpecial)
4682
1.06k
  if (*target == TPM_CC_NV_UndefineSpaceSpecial) {
4683
2
    return TPM_RC_SUCCESS;
4684
2
  }
4685
1.06k
#endif
4686
1.06k
#if IS_CC_ENABLED(EvictControl)
4687
1.06k
  if (*target == TPM_CC_EvictControl) {
4688
2
    return TPM_RC_SUCCESS;
4689
2
  }
4690
1.05k
#endif
4691
1.05k
#if IS_CC_ENABLED(HierarchyControl)
4692
1.05k
  if (*target == TPM_CC_HierarchyControl) {
4693
1
    return TPM_RC_SUCCESS;
4694
1
  }
4695
1.05k
#endif
4696
1.05k
#if IS_CC_ENABLED(NV_UndefineSpace)
4697
1.05k
  if (*target == TPM_CC_NV_UndefineSpace) {
4698
1
    return TPM_RC_SUCCESS;
4699
1
  }
4700
1.05k
#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
1.05k
#if IS_CC_ENABLED(Clear)
4712
1.05k
  if (*target == TPM_CC_Clear) {
4713
11
    return TPM_RC_SUCCESS;
4714
11
  }
4715
1.04k
#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
1.04k
#if IS_CC_ENABLED(HierarchyChangeAuth)
4727
1.04k
  if (*target == TPM_CC_HierarchyChangeAuth) {
4728
14
    return TPM_RC_SUCCESS;
4729
14
  }
4730
1.03k
#endif
4731
1.03k
#if IS_CC_ENABLED(NV_DefineSpace)
4732
1.03k
  if (*target == TPM_CC_NV_DefineSpace) {
4733
19
    return TPM_RC_SUCCESS;
4734
19
  }
4735
1.01k
#endif
4736
1.01k
#if IS_CC_ENABLED(PCR_Allocate)
4737
1.01k
  if (*target == TPM_CC_PCR_Allocate) {
4738
10
    return TPM_RC_SUCCESS;
4739
10
  }
4740
1.00k
#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
1.00k
#if IS_CC_ENABLED(CreatePrimary)
4767
1.00k
  if (*target == TPM_CC_CreatePrimary) {
4768
183
    return TPM_RC_SUCCESS;
4769
183
  }
4770
819
#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
819
#if IS_CC_ENABLED(NV_Increment)
4782
819
  if (*target == TPM_CC_NV_Increment) {
4783
0
    return TPM_RC_SUCCESS;
4784
0
  }
4785
819
#endif
4786
#if IS_CC_ENABLED(NV_SetBits)
4787
  if (*target == TPM_CC_NV_SetBits) {
4788
    return TPM_RC_SUCCESS;
4789
  }
4790
#endif
4791
819
#if IS_CC_ENABLED(NV_Extend)
4792
819
  if (*target == TPM_CC_NV_Extend) {
4793
0
    return TPM_RC_SUCCESS;
4794
0
  }
4795
819
#endif
4796
819
#if IS_CC_ENABLED(NV_Write)
4797
819
  if (*target == TPM_CC_NV_Write) {
4798
0
    return TPM_RC_SUCCESS;
4799
0
  }
4800
819
#endif
4801
819
#if IS_CC_ENABLED(NV_WriteLock)
4802
819
  if (*target == TPM_CC_NV_WriteLock) {
4803
0
    return TPM_RC_SUCCESS;
4804
0
  }
4805
819
#endif
4806
819
#if IS_CC_ENABLED(DictionaryAttackLockReset)
4807
819
  if (*target == TPM_CC_DictionaryAttackLockReset) {
4808
3
    return TPM_RC_SUCCESS;
4809
3
  }
4810
816
#endif
4811
816
#if IS_CC_ENABLED(DictionaryAttackParameters)
4812
816
  if (*target == TPM_CC_DictionaryAttackParameters) {
4813
3
    return TPM_RC_SUCCESS;
4814
3
  }
4815
813
#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
#if IS_CC_ENABLED(PCR_Reset)
4827
  if (*target == TPM_CC_PCR_Reset) {
4828
    return TPM_RC_SUCCESS;
4829
  }
4830
#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
813
#if IS_CC_ENABLED(SelfTest)
4857
813
  if (*target == TPM_CC_SelfTest) {
4858
3
    return TPM_RC_SUCCESS;
4859
3
  }
4860
810
#endif
4861
810
#if IS_CC_ENABLED(Startup)
4862
810
  if (*target == TPM_CC_Startup) {
4863
539
    return TPM_RC_SUCCESS;
4864
539
  }
4865
271
#endif
4866
271
#if IS_CC_ENABLED(Shutdown)
4867
271
  if (*target == TPM_CC_Shutdown) {
4868
4
    return TPM_RC_SUCCESS;
4869
4
  }
4870
267
#endif
4871
267
#if IS_CC_ENABLED(StirRandom)
4872
267
  if (*target == TPM_CC_StirRandom) {
4873
8
    return TPM_RC_SUCCESS;
4874
8
  }
4875
259
#endif
4876
259
#if IS_CC_ENABLED(ActivateCredential)
4877
259
  if (*target == TPM_CC_ActivateCredential) {
4878
0
    return TPM_RC_SUCCESS;
4879
0
  }
4880
259
#endif
4881
259
#if IS_CC_ENABLED(Certify)
4882
259
  if (*target == TPM_CC_Certify) {
4883
0
    return TPM_RC_SUCCESS;
4884
0
  }
4885
259
#endif
4886
#if IS_CC_ENABLED(PolicyNV)
4887
  if (*target == TPM_CC_PolicyNV) {
4888
    return TPM_RC_SUCCESS;
4889
  }
4890
#endif
4891
259
#if IS_CC_ENABLED(CertifyCreation)
4892
259
  if (*target == TPM_CC_CertifyCreation) {
4893
0
    return TPM_RC_SUCCESS;
4894
0
  }
4895
259
#endif
4896
259
#if IS_CC_ENABLED(Duplicate)
4897
259
  if (*target == TPM_CC_Duplicate) {
4898
0
    return TPM_RC_SUCCESS;
4899
0
  }
4900
259
#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
259
#if IS_CC_ENABLED(NV_Read)
4912
259
  if (*target == TPM_CC_NV_Read) {
4913
0
    return TPM_RC_SUCCESS;
4914
0
  }
4915
259
#endif
4916
259
#if IS_CC_ENABLED(NV_ReadLock)
4917
259
  if (*target == TPM_CC_NV_ReadLock) {
4918
1
    return TPM_RC_SUCCESS;
4919
1
  }
4920
258
#endif
4921
258
#if IS_CC_ENABLED(ObjectChangeAuth)
4922
258
  if (*target == TPM_CC_ObjectChangeAuth) {
4923
0
    return TPM_RC_SUCCESS;
4924
0
  }
4925
258
#endif
4926
258
#if IS_CC_ENABLED(PolicySecret)
4927
258
  if (*target == TPM_CC_PolicySecret) {
4928
4
    return TPM_RC_SUCCESS;
4929
4
  }
4930
254
#endif
4931
#if IS_CC_ENABLED(Rewrap)
4932
  if (*target == TPM_CC_Rewrap) {
4933
    return TPM_RC_SUCCESS;
4934
  }
4935
#endif
4936
254
#if IS_CC_ENABLED(Create)
4937
254
  if (*target == TPM_CC_Create) {
4938
0
    return TPM_RC_SUCCESS;
4939
0
  }
4940
254
#endif
4941
254
#if IS_CC_ENABLED(ECDH_ZGen)
4942
254
  if (*target == TPM_CC_ECDH_ZGen) {
4943
0
    return TPM_RC_SUCCESS;
4944
0
  }
4945
254
#endif
4946
254
#if IS_CC_ENABLED(HMAC)
4947
254
  if (*target == TPM_CC_HMAC) {
4948
0
    return TPM_RC_SUCCESS;
4949
0
  }
4950
254
#endif
4951
254
#if IS_CC_ENABLED(Import)
4952
254
  if (*target == TPM_CC_Import) {
4953
0
    return TPM_RC_SUCCESS;
4954
0
  }
4955
254
#endif
4956
254
#if IS_CC_ENABLED(Load)
4957
254
  if (*target == TPM_CC_Load) {
4958
0
    return TPM_RC_SUCCESS;
4959
0
  }
4960
254
#endif
4961
254
#if IS_CC_ENABLED(Quote)
4962
254
  if (*target == TPM_CC_Quote) {
4963
12
    return TPM_RC_SUCCESS;
4964
12
  }
4965
242
#endif
4966
242
#if IS_CC_ENABLED(RSA_Decrypt)
4967
242
  if (*target == TPM_CC_RSA_Decrypt) {
4968
0
    return TPM_RC_SUCCESS;
4969
0
  }
4970
242
#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
242
#if IS_CC_ENABLED(Sign)
4982
242
  if (*target == TPM_CC_Sign) {
4983
0
    return TPM_RC_SUCCESS;
4984
0
  }
4985
242
#endif
4986
242
#if IS_CC_ENABLED(Unseal)
4987
242
  if (*target == TPM_CC_Unseal) {
4988
0
    return TPM_RC_SUCCESS;
4989
0
  }
4990
242
#endif
4991
242
#if IS_CC_ENABLED(PolicySigned)
4992
242
  if (*target == TPM_CC_PolicySigned) {
4993
0
    return TPM_RC_SUCCESS;
4994
0
  }
4995
242
#endif
4996
242
#if IS_CC_ENABLED(ContextLoad)
4997
242
  if (*target == TPM_CC_ContextLoad) {
4998
21
    return TPM_RC_SUCCESS;
4999
21
  }
5000
221
#endif
5001
221
#if IS_CC_ENABLED(ContextSave)
5002
221
  if (*target == TPM_CC_ContextSave) {
5003
0
    return TPM_RC_SUCCESS;
5004
0
  }
5005
221
#endif
5006
221
#if IS_CC_ENABLED(ECDH_KeyGen)
5007
221
  if (*target == TPM_CC_ECDH_KeyGen) {
5008
0
    return TPM_RC_SUCCESS;
5009
0
  }
5010
221
#endif
5011
#if IS_CC_ENABLED(EncryptDecrypt)
5012
  if (*target == TPM_CC_EncryptDecrypt) {
5013
    return TPM_RC_SUCCESS;
5014
  }
5015
#endif
5016
221
#if IS_CC_ENABLED(FlushContext)
5017
221
  if (*target == TPM_CC_FlushContext) {
5018
1
    return TPM_RC_SUCCESS;
5019
1
  }
5020
220
#endif
5021
220
#if IS_CC_ENABLED(LoadExternal)
5022
220
  if (*target == TPM_CC_LoadExternal) {
5023
130
    return TPM_RC_SUCCESS;
5024
130
  }
5025
90
#endif
5026
#if IS_CC_ENABLED(MakeCredential)
5027
  if (*target == TPM_CC_MakeCredential) {
5028
    return TPM_RC_SUCCESS;
5029
  }
5030
#endif
5031
90
#if IS_CC_ENABLED(NV_ReadPublic)
5032
90
  if (*target == TPM_CC_NV_ReadPublic) {
5033
0
    return TPM_RC_SUCCESS;
5034
0
  }
5035
90
#endif
5036
#if IS_CC_ENABLED(PolicyAuthorize)
5037
  if (*target == TPM_CC_PolicyAuthorize) {
5038
    return TPM_RC_SUCCESS;
5039
  }
5040
#endif
5041
90
#if IS_CC_ENABLED(PolicyAuthValue)
5042
90
  if (*target == TPM_CC_PolicyAuthValue) {
5043
0
    return TPM_RC_SUCCESS;
5044
0
  }
5045
90
#endif
5046
90
#if IS_CC_ENABLED(PolicyCommandCode)
5047
90
  if (*target == TPM_CC_PolicyCommandCode) {
5048
0
    return TPM_RC_SUCCESS;
5049
0
  }
5050
90
#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
90
#if IS_CC_ENABLED(PolicyOR)
5072
90
  if (*target == TPM_CC_PolicyOR) {
5073
0
    return TPM_RC_SUCCESS;
5074
0
  }
5075
90
#endif
5076
#if IS_CC_ENABLED(PolicyTicket)
5077
  if (*target == TPM_CC_PolicyTicket) {
5078
    return TPM_RC_SUCCESS;
5079
  }
5080
#endif
5081
90
#if IS_CC_ENABLED(ReadPublic)
5082
90
  if (*target == TPM_CC_ReadPublic) {
5083
0
    return TPM_RC_SUCCESS;
5084
0
  }
5085
90
#endif
5086
90
#if IS_CC_ENABLED(RSA_Encrypt)
5087
90
  if (*target == TPM_CC_RSA_Encrypt) {
5088
0
    return TPM_RC_SUCCESS;
5089
0
  }
5090
90
#endif
5091
90
#if IS_CC_ENABLED(StartAuthSession)
5092
90
  if (*target == TPM_CC_StartAuthSession) {
5093
14
    return TPM_RC_SUCCESS;
5094
14
  }
5095
76
#endif
5096
76
#if IS_CC_ENABLED(VerifySignature)
5097
76
  if (*target == TPM_CC_VerifySignature) {
5098
0
    return TPM_RC_SUCCESS;
5099
0
  }
5100
76
#endif
5101
76
#if IS_CC_ENABLED(ECC_Parameters)
5102
76
  if (*target == TPM_CC_ECC_Parameters) {
5103
0
    return TPM_RC_SUCCESS;
5104
0
  }
5105
76
#endif
5106
#if IS_CC_ENABLED(FirmwareRead)
5107
  if (*target == TPM_CC_FirmwareRead) {
5108
    return TPM_RC_SUCCESS;
5109
  }
5110
#endif
5111
76
#if IS_CC_ENABLED(GetCapability)
5112
76
  if (*target == TPM_CC_GetCapability) {
5113
0
    return TPM_RC_SUCCESS;
5114
0
  }
5115
76
#endif
5116
76
#if IS_CC_ENABLED(GetRandom)
5117
76
  if (*target == TPM_CC_GetRandom) {
5118
2
    return TPM_RC_SUCCESS;
5119
2
  }
5120
74
#endif
5121
74
#if IS_CC_ENABLED(GetTestResult)
5122
74
  if (*target == TPM_CC_GetTestResult) {
5123
0
    return TPM_RC_SUCCESS;
5124
0
  }
5125
74
#endif
5126
74
#if IS_CC_ENABLED(Hash)
5127
74
  if (*target == TPM_CC_Hash) {
5128
8
    return TPM_RC_SUCCESS;
5129
8
  }
5130
66
#endif
5131
66
#if IS_CC_ENABLED(PCR_Read)
5132
66
  if (*target == TPM_CC_PCR_Read) {
5133
2
    return TPM_RC_SUCCESS;
5134
2
  }
5135
64
#endif
5136
64
#if IS_CC_ENABLED(PolicyPCR)
5137
64
  if (*target == TPM_CC_PolicyPCR) {
5138
0
    return TPM_RC_SUCCESS;
5139
0
  }
5140
64
#endif
5141
64
#if IS_CC_ENABLED(PolicyRestart)
5142
64
  if (*target == TPM_CC_PolicyRestart) {
5143
0
    return TPM_RC_SUCCESS;
5144
0
  }
5145
64
#endif
5146
#if IS_CC_ENABLED(ReadClock)
5147
  if (*target == TPM_CC_ReadClock) {
5148
    return TPM_RC_SUCCESS;
5149
  }
5150
#endif
5151
64
#if IS_CC_ENABLED(PCR_Extend)
5152
64
  if (*target == TPM_CC_PCR_Extend) {
5153
56
    return TPM_RC_SUCCESS;
5154
56
  }
5155
8
#endif
5156
#if IS_CC_ENABLED(PCR_SetAuthValue)
5157
  if (*target == TPM_CC_PCR_SetAuthValue) {
5158
    return TPM_RC_SUCCESS;
5159
  }
5160
#endif
5161
8
#if IS_CC_ENABLED(NV_Certify)
5162
8
  if (*target == TPM_CC_NV_Certify) {
5163
0
    return TPM_RC_SUCCESS;
5164
0
  }
5165
8
#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
8
#if IS_CC_ENABLED(PolicyGetDigest)
5187
8
  if (*target == TPM_CC_PolicyGetDigest) {
5188
0
    return TPM_RC_SUCCESS;
5189
0
  }
5190
8
#endif
5191
8
#if IS_CC_ENABLED(TestParms)
5192
8
  if (*target == TPM_CC_TestParms) {
5193
6
    return TPM_RC_SUCCESS;
5194
6
  }
5195
2
#endif
5196
#if IS_CC_ENABLED(Commit)
5197
  if (*target == TPM_CC_Commit) {
5198
    return TPM_RC_SUCCESS;
5199
  }
5200
#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
2
#if IS_CCE_ENABLED(PolicyFidoSigned)
5222
2
  if (*target == TPM_CCE_PolicyFidoSigned) {
5223
0
    return TPM_RC_SUCCESS;
5224
0
  }
5225
2
#endif
5226
2
  return TPM_RC_COMMAND_CODE;
5227
2
}
5228
5229
0
UINT16 TPML_CC_Marshal(TPML_CC* source, BYTE** buffer, INT32* size) {
5230
0
  UINT16 total_size = 0;
5231
0
  INT32 i;
5232
0
  total_size += UINT32_Marshal(&source->count, buffer, size);
5233
0
  for (i = 0; i < source->count; ++i) {
5234
0
    total_size += TPM_CC_Marshal(&source->commandCodes[i], buffer, size);
5235
0
  }
5236
0
  return total_size;
5237
0
}
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
0
UINT16 TPML_CCA_Marshal(TPML_CCA* source, BYTE** buffer, INT32* size) {
5259
0
  UINT16 total_size = 0;
5260
0
  INT32 i;
5261
0
  total_size += UINT32_Marshal(&source->count, buffer, size);
5262
0
  for (i = 0; i < source->count; ++i) {
5263
0
    total_size += TPMA_CC_Marshal(&source->commandAttributes[i], buffer, size);
5264
0
  }
5265
0
  return total_size;
5266
0
}
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
0
UINT16 TPML_DIGEST_Marshal(TPML_DIGEST* source, BYTE** buffer, INT32* size) {
5288
0
  UINT16 total_size = 0;
5289
0
  INT32 i;
5290
0
  total_size += UINT32_Marshal(&source->count, buffer, size);
5291
0
  for (i = 0; i < source->count; ++i) {
5292
0
    total_size += TPM2B_DIGEST_Marshal(&source->digests[i], buffer, size);
5293
0
  }
5294
0
  return total_size;
5295
0
}
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
130
                         UINT32 selector) {
5380
130
  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
53
    case TPM_ALG_SHA1:
5395
1.03k
      for (i = 0; i < SHA1_DIGEST_SIZE; ++i) {
5396
990
        result = BYTE_Unmarshal(&target->sha1[i], buffer, size);
5397
990
        if (result != TPM_RC_SUCCESS) {
5398
5
          return result;
5399
5
        }
5400
990
      }
5401
48
      return TPM_RC_SUCCESS;
5402
0
#endif
5403
0
#ifdef TPM_ALG_SHA256
5404
25
    case TPM_ALG_SHA256:
5405
704
      for (i = 0; i < SHA256_DIGEST_SIZE; ++i) {
5406
683
        result = BYTE_Unmarshal(&target->sha256[i], buffer, size);
5407
683
        if (result != TPM_RC_SUCCESS) {
5408
4
          return result;
5409
4
        }
5410
683
      }
5411
21
      return TPM_RC_SUCCESS;
5412
0
#endif
5413
0
#ifdef TPM_ALG_SHA384
5414
30
    case TPM_ALG_SHA384:
5415
1.31k
      for (i = 0; i < SHA384_DIGEST_SIZE; ++i) {
5416
1.29k
        result = BYTE_Unmarshal(&target->sha384[i], buffer, size);
5417
1.29k
        if (result != TPM_RC_SUCCESS) {
5418
4
          return result;
5419
4
        }
5420
1.29k
      }
5421
26
      return TPM_RC_SUCCESS;
5422
0
#endif
5423
0
#ifdef TPM_ALG_SHA512
5424
21
    case TPM_ALG_SHA512:
5425
1.15k
      for (i = 0; i < SHA512_DIGEST_SIZE; ++i) {
5426
1.13k
        result = BYTE_Unmarshal(&target->sha512[i], buffer, size);
5427
1.13k
        if (result != TPM_RC_SUCCESS) {
5428
4
          return result;
5429
4
        }
5430
1.13k
      }
5431
17
      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
1
    case TPM_ALG_NULL:
5445
1
      return TPM_RC_SUCCESS;
5446
130
#endif
5447
130
  }
5448
0
  return TPM_RC_SELECTOR;
5449
130
}
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
136
TPM_RC TPMT_HA_Unmarshal(TPMT_HA* target, BYTE** buffer, INT32* size) {
5459
136
  TPM_RC result;
5460
136
  result = TPMI_ALG_HASH_Unmarshal(&target->hashAlg, buffer, size, TRUE);
5461
136
  if (result != TPM_RC_SUCCESS) {
5462
6
    return result;
5463
6
  }
5464
130
  result = TPMU_HA_Unmarshal(&target->digest, buffer, size, target->hashAlg);
5465
130
  if (result != TPM_RC_SUCCESS) {
5466
17
    return result;
5467
17
  }
5468
113
  return TPM_RC_SUCCESS;
5469
130
}
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
50
                                    INT32* size) {
5486
50
  TPM_RC result;
5487
50
  INT32 i;
5488
50
  result = UINT32_Unmarshal(&target->count, buffer, size);
5489
50
  if (result != TPM_RC_SUCCESS) {
5490
0
    return result;
5491
0
  }
5492
50
  if (target->count > HASH_COUNT) {
5493
0
    return TPM_RC_SIZE;
5494
0
  }
5495
163
  for (i = 0; i < target->count; ++i) {
5496
136
    result = TPMT_HA_Unmarshal(&target->digests[i], buffer, size);
5497
136
    if (result != TPM_RC_SUCCESS) {
5498
23
      return result;
5499
23
    }
5500
136
  }
5501
27
  return TPM_RC_SUCCESS;
5502
50
}
5503
5504
UINT16 TPM_ECC_CURVE_Marshal(TPM_ECC_CURVE* source,
5505
                             BYTE** buffer,
5506
0
                             INT32* size) {
5507
0
  return uint16_t_Marshal(source, buffer, size);
5508
0
}
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
0
                              INT32* size) {
5551
0
  UINT16 total_size = 0;
5552
0
  INT32 i;
5553
0
  total_size += UINT32_Marshal(&source->count, buffer, size);
5554
0
  for (i = 0; i < source->count; ++i) {
5555
0
    total_size += TPM_ECC_CURVE_Marshal(&source->eccCurves[i], buffer, size);
5556
0
  }
5557
0
  return total_size;
5558
0
}
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
204
UINT16 TPM_HANDLE_Marshal(TPM_HANDLE* source, BYTE** buffer, INT32* size) {
5582
204
  return uint32_t_Marshal(source, buffer, size);
5583
204
}
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
0
UINT16 TPML_HANDLE_Marshal(TPML_HANDLE* source, BYTE** buffer, INT32* size) {
5590
0
  UINT16 total_size = 0;
5591
0
  INT32 i;
5592
0
  total_size += UINT32_Marshal(&source->count, buffer, size);
5593
0
  for (i = 0; i < source->count; ++i) {
5594
0
    total_size += TPM_HANDLE_Marshal(&source->handle[i], buffer, size);
5595
0
  }
5596
0
  return total_size;
5597
0
}
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
0
UINT16 TPM_PT_Marshal(TPM_PT* source, BYTE** buffer, INT32* size) {
5619
0
  return uint32_t_Marshal(source, buffer, size);
5620
0
}
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
0
                                      INT32* size) {
5841
0
  UINT16 total_size = 0;
5842
0
  INT32 i;
5843
0
  total_size += TPM_PT_Marshal(&source->tag, buffer, size);
5844
0
  total_size += UINT8_Marshal(&source->sizeofSelect, buffer, size);
5845
0
  for (i = 0; i < source->sizeofSelect; ++i) {
5846
0
    total_size += BYTE_Marshal(&source->pcrSelect[i], buffer, size);
5847
0
  }
5848
0
  return total_size;
5849
0
}
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
0
                                        INT32* size) {
5882
0
  UINT16 total_size = 0;
5883
0
  INT32 i;
5884
0
  total_size += UINT32_Marshal(&source->count, buffer, size);
5885
0
  for (i = 0; i < source->count; ++i) {
5886
0
    total_size +=
5887
0
        TPMS_TAGGED_PCR_SELECT_Marshal(&source->pcrProperty[i], buffer, size);
5888
0
  }
5889
0
  return total_size;
5890
0
}
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
0
                                    INT32* size) {
5917
0
  UINT16 total_size = 0;
5918
0
  total_size += TPM_PT_Marshal(&source->property, buffer, size);
5919
0
  total_size += UINT32_Marshal(&source->value, buffer, size);
5920
0
  return total_size;
5921
0
}
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
0
                                        INT32* size) {
5941
0
  UINT16 total_size = 0;
5942
0
  INT32 i;
5943
0
  total_size += UINT32_Marshal(&source->count, buffer, size);
5944
0
  for (i = 0; i < source->count; ++i) {
5945
0
    total_size +=
5946
0
        TPMS_TAGGED_PROPERTY_Marshal(&source->tpmProperty[i], buffer, size);
5947
0
  }
5948
0
  return total_size;
5949
0
}
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
0
                                         INT32* size) {
6000
0
  UINT16 total_size = 0;
6001
0
  total_size += TPM_ECC_CURVE_Marshal(&source->curveID, buffer, size);
6002
0
  total_size += UINT16_Marshal(&source->keySize, buffer, size);
6003
0
  total_size += TPMT_KDF_SCHEME_Marshal(&source->kdf, buffer, size);
6004
0
  total_size += TPMT_ECC_SCHEME_Marshal(&source->sign, buffer, size);
6005
0
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->p, buffer, size);
6006
0
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->a, buffer, size);
6007
0
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->b, buffer, size);
6008
0
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->gX, buffer, size);
6009
0
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->gY, buffer, size);
6010
0
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->n, buffer, size);
6011
0
  total_size += TPM2B_ECC_PARAMETER_Marshal(&source->h, buffer, size);
6012
0
  return total_size;
6013
0
}
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
21
TPM_RC UINT64_Unmarshal(UINT64* target, BYTE** buffer, INT32* size) {
6071
21
  return uint64_t_Unmarshal(target, buffer, size);
6072
21
}
6073
6074
UINT16 TPM_GENERATED_Marshal(TPM_GENERATED* source,
6075
                             BYTE** buffer,
6076
1
                             INT32* size) {
6077
1
  return uint32_t_Marshal(source, buffer, size);
6078
1
}
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
0
UINT16 TPM_CAP_Marshal(TPM_CAP* source, BYTE** buffer, INT32* size) {
6507
0
  return uint32_t_Marshal(source, buffer, size);
6508
0
}
6509
6510
0
TPM_RC TPM_CAP_Unmarshal(TPM_CAP* target, BYTE** buffer, INT32* size) {
6511
0
  TPM_RC result;
6512
0
  result = uint32_t_Unmarshal(target, buffer, size);
6513
0
  if (result != TPM_RC_SUCCESS) {
6514
0
    return result;
6515
0
  }
6516
0
  if (*target == TPM_CAP_FIRST) {
6517
0
    return TPM_RC_SUCCESS;
6518
0
  }
6519
0
  if (*target == TPM_CAP_ALGS) {
6520
0
    return TPM_RC_SUCCESS;
6521
0
  }
6522
0
  if (*target == TPM_CAP_HANDLES) {
6523
0
    return TPM_RC_SUCCESS;
6524
0
  }
6525
0
  if (*target == TPM_CAP_COMMANDS) {
6526
0
    return TPM_RC_SUCCESS;
6527
0
  }
6528
0
  if (*target == TPM_CAP_PP_COMMANDS) {
6529
0
    return TPM_RC_SUCCESS;
6530
0
  }
6531
0
  if (*target == TPM_CAP_AUDIT_COMMANDS) {
6532
0
    return TPM_RC_SUCCESS;
6533
0
  }
6534
0
  if (*target == TPM_CAP_PCRS) {
6535
0
    return TPM_RC_SUCCESS;
6536
0
  }
6537
0
  if (*target == TPM_CAP_TPM_PROPERTIES) {
6538
0
    return TPM_RC_SUCCESS;
6539
0
  }
6540
0
  if (*target == TPM_CAP_PCR_PROPERTIES) {
6541
0
    return TPM_RC_SUCCESS;
6542
0
  }
6543
0
  if (*target == TPM_CAP_ECC_CURVES) {
6544
0
    return TPM_RC_SUCCESS;
6545
0
  }
6546
0
  if (*target == TPM_CAP_LAST) {
6547
0
    return TPM_RC_SUCCESS;
6548
0
  }
6549
0
  if (*target == TPM_CAP_VENDOR_PROPERTY) {
6550
0
    return TPM_RC_SUCCESS;
6551
0
  }
6552
0
  return TPM_RC_VALUE;
6553
0
}
6554
6555
UINT16 TPMU_CAPABILITIES_Marshal(TPMU_CAPABILITIES* source,
6556
                                 BYTE** buffer,
6557
                                 INT32* size,
6558
0
                                 UINT32 selector) {
6559
0
  switch (selector) {
6560
0
    case TPM_CAP_ALGS:
6561
0
      return TPML_ALG_PROPERTY_Marshal((TPML_ALG_PROPERTY*)&source->algorithms,
6562
0
                                       buffer, size);
6563
0
    case TPM_CAP_HANDLES:
6564
0
      return TPML_HANDLE_Marshal((TPML_HANDLE*)&source->handles, buffer, size);
6565
0
    case TPM_CAP_COMMANDS:
6566
0
      return TPML_CCA_Marshal((TPML_CCA*)&source->command, buffer, size);
6567
0
    case TPM_CAP_PP_COMMANDS:
6568
0
      return TPML_CC_Marshal((TPML_CC*)&source->ppCommands, buffer, size);
6569
0
    case TPM_CAP_AUDIT_COMMANDS:
6570
0
      return TPML_CC_Marshal((TPML_CC*)&source->auditCommands, buffer, size);
6571
0
    case TPM_CAP_PCRS:
6572
0
      return TPML_PCR_SELECTION_Marshal(
6573
0
          (TPML_PCR_SELECTION*)&source->assignedPCR, buffer, size);
6574
0
    case TPM_CAP_TPM_PROPERTIES:
6575
0
      return TPML_TAGGED_TPM_PROPERTY_Marshal(
6576
0
          (TPML_TAGGED_TPM_PROPERTY*)&source->tpmProperties, buffer, size);
6577
0
    case TPM_CAP_PCR_PROPERTIES:
6578
0
      return TPML_TAGGED_PCR_PROPERTY_Marshal(
6579
0
          (TPML_TAGGED_PCR_PROPERTY*)&source->pcrProperties, buffer, size);
6580
0
    case TPM_CAP_ECC_CURVES:
6581
0
      return TPML_ECC_CURVE_Marshal((TPML_ECC_CURVE*)&source->eccCurves, buffer,
6582
0
                                    size);
6583
0
  }
6584
0
  return 0;
6585
0
}
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
0
                                    INT32* size) {
6623
0
  UINT16 total_size = 0;
6624
0
  total_size += TPM_CAP_Marshal(&source->capability, buffer, size);
6625
0
  total_size += TPMU_CAPABILITIES_Marshal(&source->data, buffer, size,
6626
0
                                          source->capability);
6627
0
  return total_size;
6628
0
}
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
21
                              INT32* size) {
6658
21
  TPM_RC result;
6659
21
  result = UINT64_Unmarshal(&target->sequence, buffer, size);
6660
21
  if (result != TPM_RC_SUCCESS) {
6661
0
    return result;
6662
0
  }
6663
21
  result = TPMI_DH_CONTEXT_Unmarshal(&target->savedHandle, buffer, size);
6664
21
  if (result != TPM_RC_SUCCESS) {
6665
1
    return result;
6666
1
  }
6667
20
  result = TPMI_RH_HIERARCHY_Unmarshal(&target->hierarchy, buffer, size, TRUE);
6668
20
  if (result != TPM_RC_SUCCESS) {
6669
0
    return result;
6670
0
  }
6671
20
  result = TPM2B_CONTEXT_DATA_Unmarshal(&target->contextBlob, buffer, size);
6672
20
  if (result != TPM_RC_SUCCESS) {
6673
5
    return result;
6674
5
  }
6675
15
  return TPM_RC_SUCCESS;
6676
20
}
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
6
                                   INT32* size) {
6877
6
  TPM_RC result;
6878
6
  result = TPMI_ALG_PUBLIC_Unmarshal(&target->type, buffer, size);
6879
6
  if (result != TPM_RC_SUCCESS) {
6880
3
    return result;
6881
3
  }
6882
3
  result = TPMU_PUBLIC_PARMS_Unmarshal(&target->parameters, buffer, size,
6883
3
                                       target->type);
6884
3
  if (result != TPM_RC_SUCCESS) {
6885
3
    return result;
6886
3
  }
6887
0
  return TPM_RC_SUCCESS;
6888
3
}
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
11
                                 UINT32 selector) {
7088
11
  switch (selector) {
7089
0
#ifdef TPM_ALG_RSASSA
7090
0
    case TPM_ALG_RSASSA:
7091
0
      return TPMS_SIG_SCHEME_RSASSA_Unmarshal(
7092
0
          (TPMS_SIG_SCHEME_RSASSA*)&target->rsassa, buffer, size);
7093
0
#endif
7094
0
#ifdef TPM_ALG_RSAPSS
7095
0
    case TPM_ALG_RSAPSS:
7096
0
      return TPMS_SIG_SCHEME_RSAPSS_Unmarshal(
7097
0
          (TPMS_SIG_SCHEME_RSAPSS*)&target->rsapss, buffer, size);
7098
0
#endif
7099
0
#ifdef TPM_ALG_ECDSA
7100
0
    case TPM_ALG_ECDSA:
7101
0
      return TPMS_SIG_SCHEME_ECDSA_Unmarshal(
7102
0
          (TPMS_SIG_SCHEME_ECDSA*)&target->ecdsa, buffer, size);
7103
0
#endif
7104
0
#ifdef TPM_ALG_ECDAA
7105
6
    case TPM_ALG_ECDAA:
7106
6
      return TPMS_SIG_SCHEME_ECDAA_Unmarshal(
7107
6
          (TPMS_SIG_SCHEME_ECDAA*)&target->ecdaa, buffer, size);
7108
0
#endif
7109
0
#ifdef TPM_ALG_SM2
7110
0
    case TPM_ALG_SM2:
7111
0
      return TPMS_SIG_SCHEME_SM2_Unmarshal((TPMS_SIG_SCHEME_SM2*)&target->sm2,
7112
0
                                           buffer, size);
7113
0
#endif
7114
0
#ifdef TPM_ALG_ECSCHNORR
7115
4
    case TPM_ALG_ECSCHNORR:
7116
4
      return TPMS_SIG_SCHEME_ECSCHNORR_Unmarshal(
7117
4
          (TPMS_SIG_SCHEME_ECSCHNORR*)&target->ecschnorr, buffer, size);
7118
0
#endif
7119
0
#ifdef TPM_ALG_HMAC
7120
1
    case TPM_ALG_HMAC:
7121
1
      return TPMS_SCHEME_HMAC_Unmarshal((TPMS_SCHEME_HMAC*)&target->hmac,
7122
1
                                        buffer, size);
7123
0
#endif
7124
0
#ifdef TPM_ALG_NULL
7125
0
    case TPM_ALG_NULL:
7126
0
      return TPM_RC_SUCCESS;
7127
11
#endif
7128
11
  }
7129
0
  return TPM_RC_SELECTOR;
7130
11
}
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
11
                                 INT32* size) {
7145
11
  TPM_RC result;
7146
11
  result = TPMI_ALG_SIG_SCHEME_Unmarshal(&target->scheme, buffer, size, TRUE);
7147
11
  if (result != TPM_RC_SUCCESS) {
7148
0
    return result;
7149
0
  }
7150
11
  result =
7151
11
      TPMU_SIG_SCHEME_Unmarshal(&target->details, buffer, size, target->scheme);
7152
11
  if (result != TPM_RC_SUCCESS) {
7153
3
    return result;
7154
3
  }
7155
8
  return TPM_RC_SUCCESS;
7156
11
}
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
8
                              INT32* size) {
7171
8
  TPM_RC result;
7172
8
  result = TPMI_ALG_SYM_Unmarshal(&target->algorithm, buffer, size, TRUE);
7173
8
  if (result != TPM_RC_SUCCESS) {
7174
6
    return result;
7175
6
  }
7176
2
  result = TPMU_SYM_KEY_BITS_Unmarshal(&target->keyBits, buffer, size,
7177
2
                                       target->algorithm);
7178
2
  if (result != TPM_RC_SUCCESS) {
7179
0
    return result;
7180
0
  }
7181
2
  result =
7182
2
      TPMU_SYM_MODE_Unmarshal(&target->mode, buffer, size, target->algorithm);
7183
2
  if (result != TPM_RC_SUCCESS) {
7184
0
    return result;
7185
0
  }
7186
2
  return TPM_RC_SUCCESS;
7187
2
}
7188
7189
1.17k
UINT16 TPM_ST_Marshal(TPM_ST* source, BYTE** buffer, INT32* size) {
7190
1.17k
  return uint16_t_Marshal(source, buffer, size);
7191
1.17k
}
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
100
                                INT32* size) {
7283
100
  UINT16 total_size = 0;
7284
100
  total_size += TPM_ST_Marshal(&source->tag, buffer, size);
7285
100
  total_size += TPMI_RH_HIERARCHY_Marshal(&source->hierarchy, buffer, size);
7286
100
  total_size += TPM2B_DIGEST_Marshal(&source->digest, buffer, size);
7287
100
  return total_size;
7288
100
}
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
1
                                 INT32* size) {
7312
1
  UINT16 total_size = 0;
7313
1
  total_size += TPM_ST_Marshal(&source->tag, buffer, size);
7314
1
  total_size += TPMI_RH_HIERARCHY_Marshal(&source->hierarchy, buffer, size);
7315
1
  total_size += TPM2B_DIGEST_Marshal(&source->digest, buffer, size);
7316
1
  return total_size;
7317
1
}
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
1.07k
UINT16 TPM_RC_Marshal(TPM_RC* source, BYTE** buffer, INT32* size) {
7851
1.07k
  return uint32_t_Marshal(source, buffer, size);
7852
1.07k
}
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
11
TPM_RC TPM_SE_Unmarshal(TPM_SE* target, BYTE** buffer, INT32* size) {
8298
11
  TPM_RC result;
8299
11
  result = uint8_t_Unmarshal(target, buffer, size);
8300
11
  if (result != TPM_RC_SUCCESS) {
8301
1
    return result;
8302
1
  }
8303
10
  if (*target == TPM_SE_HMAC) {
8304
8
    return TPM_RC_SUCCESS;
8305
8
  }
8306
2
  if (*target == TPM_SE_POLICY) {
8307
0
    return TPM_RC_SUCCESS;
8308
0
  }
8309
2
  if (*target == TPM_SE_TRIAL) {
8310
0
    return TPM_RC_SUCCESS;
8311
0
  }
8312
2
  return TPM_RC_VALUE;
8313
2
}
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
543
TPM_RC TPM_SU_Unmarshal(TPM_SU* target, BYTE** buffer, INT32* size) {
8348
543
  TPM_RC result;
8349
543
  result = uint16_t_Unmarshal(target, buffer, size);
8350
543
  if (result != TPM_RC_SUCCESS) {
8351
0
    return result;
8352
0
  }
8353
543
  if (*target == TPM_SU_CLEAR) {
8354
542
    return TPM_RC_SUCCESS;
8355
542
  }
8356
1
  if (*target == TPM_SU_STATE) {
8357
1
    return TPM_RC_SUCCESS;
8358
1
  }
8359
0
  return TPM_RC_VALUE;
8360
1
}
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
}