tpm2-tss 4.1.0
TPM Software stack 2.0 TCG spec compliant implementation
tpm_json_deserialize.h
1/* SPDX-License-Identifier: BSD-2-Clause */
2/*******************************************************************************
3 * Copyright 2018-2019, Fraunhofer SIT sponsored by Infineon Technologies AG
4 * All rights reserved.
5 ******************************************************************************/
6#ifndef FAPI_TPM_JSON_DESERIALIZE_H
7#define FAPI_TPM_JSON_DESERIALIZE_H
8
9#include <stdbool.h>
10#include <json-c/json.h>
11#include <json-c/json_util.h>
12
13#include "tss2_tpm2_types.h"
14#include "fapi_int.h"
15#define YES 1
16#define NO 0
17
18/* Deserialize according to the rules of parenttype and then filter against values
19 provided in the ... list. */
20#define SUBTYPE_FILTER(type, parenttype, ...) \
21 TSS2_RC r; \
22 type tab[] = { __VA_ARGS__ }; \
23 type v; \
24 r = ifapi_json_ ## parenttype ## _deserialize(jso, &v); \
25 return_if_error(r, "Bad value"); \
26 for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) { \
27 if (v == tab[i]) { \
28 *out = v; \
29 return TSS2_RC_SUCCESS; \
30 } \
31 } \
32 LOG_ERROR("Bad sub-value"); \
33 return TSS2_FAPI_RC_BAD_VALUE;
34
35json_object*
36ifapi_parse_json(const char *jstring) ;
37
38TSS2_RC
39ifapi_hex_to_byte_ary(const char hex[], UINT32 vlen, BYTE val[]);
40
41TSS2_RC
42ifapi_json_BYTE_array_deserialize(size_t max, json_object *jso, BYTE *out);
43
44TSS2_RC
45ifapi_json_UINT8_ARY_deserialize(json_object *jso, UINT8_ARY *out);
46
47bool
48ifapi_get_sub_object(json_object *jso, char *name, json_object **sub_jso);
49
50TSS2_RC
51ifapi_json_BYTE_deserialize(json_object *jso, BYTE *out);
52
53TSS2_RC
54ifapi_json_UINT16_deserialize(json_object *jso, UINT16 *out);
55
56TSS2_RC
57ifapi_json_UINT32_deserialize(json_object *jso, UINT32 *out);
58
59TSS2_RC
60ifapi_json_UINT64_deserialize(json_object *jso, UINT64 *out);
61
62TSS2_RC
63ifapi_json_TPM2_GENERATED_deserialize(json_object *jso, TPM2_GENERATED *out);
64
65TSS2_RC
66ifapi_json_TPM2_ALG_ID_deserialize(json_object *jso, TPM2_ALG_ID *out);
67
68TSS2_RC
69ifapi_json_TPM2_ECC_CURVE_deserialize(json_object *jso, TPM2_ECC_CURVE *out);
70
71TSS2_RC
72ifapi_json_TPM2_CC_deserialize(json_object *jso, TPM2_CC *out);
73
74TSS2_RC
75ifapi_json_TPM2_EO_deserialize(json_object *jso, TPM2_EO *out);
76
77TSS2_RC
78ifapi_json_TPM2_ST_deserialize(json_object *jso, TPM2_ST *out);
79
80TSS2_RC
81ifapi_json_TPM2_PT_PCR_deserialize(json_object *jso, TPM2_PT_PCR *out);
82
83TSS2_RC
84ifapi_json_TPM2_HANDLE_deserialize(json_object *jso, TPM2_HANDLE *out);
85
86TSS2_RC
87ifapi_json_TPMA_OBJECT_deserialize(json_object *jso, TPMA_OBJECT *out);
88
89TSS2_RC
90ifapi_json_TPMA_LOCALITY_deserialize(json_object *jso, TPMA_LOCALITY *out);
91
92TSS2_RC
93ifapi_json_TPMA_ACT_deserialize(json_object *jso, TPMA_ACT *out);
94
95TSS2_RC
96ifapi_json_TPMI_YES_NO_deserialize(json_object *jso, TPMI_YES_NO *out);
97
98TSS2_RC
99ifapi_json_TPMI_RH_HIERARCHY_deserialize(json_object *jso,
100 TPMI_RH_HIERARCHY *out);
101
102TSS2_RC
103ifapi_json_TPMI_RH_NV_INDEX_deserialize(json_object *jso,
104 TPMI_RH_NV_INDEX *out);
105
106TSS2_RC
107ifapi_json_TPMI_ALG_HASH_deserialize(json_object *jso, TPMI_ALG_HASH *out);
108
109TSS2_RC
110ifapi_json_TPMI_ALG_SYM_deserialize(json_object *jso, TPMI_ALG_SYM *out);
111
112TSS2_RC
113ifapi_json_TPMI_ALG_SYM_OBJECT_deserialize(json_object *jso,
114 TPMI_ALG_SYM_OBJECT *out);
115
116TSS2_RC
117ifapi_json_TPMI_ALG_CIPHER_MODE_deserialize(json_object *jso,
118 TPMI_ALG_CIPHER_MODE *out);
119
120TSS2_RC
121ifapi_json_TPMI_ALG_SYM_MODE_deserialize(json_object *jso,
122 TPMI_ALG_SYM_MODE *out);
123
124TSS2_RC
125ifapi_json_TPMI_ALG_KDF_deserialize(json_object *jso, TPMI_ALG_KDF *out);
126
127TSS2_RC
128ifapi_json_TPMI_ALG_SIG_SCHEME_deserialize(json_object *jso,
129 TPMI_ALG_SIG_SCHEME *out);
130
131TSS2_RC
132ifapi_json_TPMS_EMPTY_deserialize(json_object *jso, TPMS_EMPTY *out);
133
134TSS2_RC
135ifapi_json_TPMU_HA_deserialize(UINT32 selector, json_object *jso, TPMU_HA *out);
136
137TSS2_RC
138ifapi_json_TPMT_HA_deserialize(json_object *jso, TPMT_HA *out);
139
140TSS2_RC
141ifapi_json_TPM2B_DIGEST_deserialize(json_object *jso, TPM2B_DIGEST *out);
142
143TSS2_RC
144ifapi_json_TPM2B_DATA_deserialize(json_object *jso, TPM2B_DATA *out);
145
146TSS2_RC
147ifapi_json_TPM2B_NONCE_deserialize(json_object *jso, TPM2B_NONCE *out);
148
149TSS2_RC
150ifapi_json_TPM2B_OPERAND_deserialize(json_object *jso, TPM2B_OPERAND *out);
151
152TSS2_RC
153ifapi_json_TPM2B_EVENT_deserialize(json_object *jso, TPM2B_EVENT *out);
154
155TSS2_RC
156ifapi_json_TPM2B_MAX_NV_BUFFER_deserialize(json_object *jso,
157 TPM2B_MAX_NV_BUFFER *out);
158
159TSS2_RC
160ifapi_json_TPM2B_NAME_deserialize(json_object *jso, TPM2B_NAME *out);
161
162TSS2_RC
163ifapi_json_TPMS_PCR_SELECT_deserialize(json_object *jso, TPMS_PCR_SELECT *out);
164
165TSS2_RC
166ifapi_json_TPMS_PCR_SELECTION_deserialize(json_object *jso,
167 TPMS_PCR_SELECTION *out);
168
169TSS2_RC
170ifapi_json_TPMS_TAGGED_POLICY_deserialize(json_object *jso,
171 TPMS_TAGGED_POLICY *out);
172
173TSS2_RC
174ifapi_json_TPMS_ACT_DATA_deserialize(json_object *jso,
175 TPMS_ACT_DATA *out);
176
177TSS2_RC
178ifapi_json_TPMT_TK_CREATION_deserialize(json_object *jso,
179 TPMT_TK_CREATION *out);
180
181TSS2_RC
182ifapi_json_TPML_DIGEST_VALUES_deserialize(json_object *jso,
183 TPML_DIGEST_VALUES *out);
184
185TSS2_RC
186ifapi_json_TPML_PCR_SELECTION_deserialize(json_object *jso,
187 TPML_PCR_SELECTION *out);
188
189TSS2_RC
190ifapi_json_TPMS_CLOCK_INFO_deserialize(json_object *jso, TPMS_CLOCK_INFO *out);
191
192TSS2_RC
193ifapi_json_TPMS_TIME_INFO_deserialize(json_object *jso, TPMS_TIME_INFO *out);
194
195TSS2_RC
196ifapi_json_TPMS_TIME_ATTEST_INFO_deserialize(json_object *jso,
197 TPMS_TIME_ATTEST_INFO *out);
198
199TSS2_RC
200ifapi_json_TPMS_CERTIFY_INFO_deserialize(json_object *jso,
201 TPMS_CERTIFY_INFO *out);
202
203TSS2_RC
204ifapi_json_TPMS_QUOTE_INFO_deserialize(json_object *jso, TPMS_QUOTE_INFO *out);
205
206TSS2_RC
207ifapi_json_TPMS_COMMAND_AUDIT_INFO_deserialize(json_object *jso,
208 TPMS_COMMAND_AUDIT_INFO *out);
209
210TSS2_RC
211ifapi_json_TPMS_SESSION_AUDIT_INFO_deserialize(json_object *jso,
212 TPMS_SESSION_AUDIT_INFO *out);
213
214TSS2_RC
215ifapi_json_TPMS_CREATION_INFO_deserialize(json_object *jso,
216 TPMS_CREATION_INFO *out);
217
218TSS2_RC
219ifapi_json_TPMS_NV_CERTIFY_INFO_deserialize(json_object *jso,
220 TPMS_NV_CERTIFY_INFO *out);
221
222TSS2_RC
223ifapi_json_TPMI_ST_ATTEST_deserialize(json_object *jso, TPMI_ST_ATTEST *out);
224
225TSS2_RC
226ifapi_json_TPMU_ATTEST_deserialize(UINT32 selector, json_object *jso,
227 TPMU_ATTEST *out);
228
229TSS2_RC
230ifapi_json_TPMS_ATTEST_deserialize(json_object *jso, TPMS_ATTEST *out);
231
232TSS2_RC
233ifapi_json_TPMI_AES_KEY_BITS_deserialize(json_object *jso,
234 TPMI_AES_KEY_BITS *out);
235
236TSS2_RC
237ifapi_json_TPMU_SYM_KEY_BITS_deserialize(UINT32 selector, json_object *jso,
238 TPMU_SYM_KEY_BITS *out);
239
240TSS2_RC
241ifapi_json_TPMU_SYM_MODE_deserialize(UINT32 selector, json_object *jso,
242 TPMU_SYM_MODE *out);
243
244TSS2_RC
245ifapi_json_TPMT_SYM_DEF_deserialize(json_object *jso, TPMT_SYM_DEF *out);
246
247TSS2_RC
248ifapi_json_TPMT_SYM_DEF_OBJECT_deserialize(json_object *jso,
249 TPMT_SYM_DEF_OBJECT *out);
250
251TSS2_RC
252ifapi_json_TPMS_SYMCIPHER_PARMS_deserialize(json_object *jso,
253 TPMS_SYMCIPHER_PARMS *out);
254
255TSS2_RC
256ifapi_json_TPMS_SCHEME_HASH_deserialize(json_object *jso,
257 TPMS_SCHEME_HASH *out);
258
259TSS2_RC
260ifapi_json_TPMS_SCHEME_ECDAA_deserialize(json_object *jso,
261 TPMS_SCHEME_ECDAA *out);
262
263TSS2_RC
264ifapi_json_TPMI_ALG_KEYEDHASH_SCHEME_deserialize(json_object *jso,
265 TPMI_ALG_KEYEDHASH_SCHEME *out);
266
267TSS2_RC
268ifapi_json_TPMS_SCHEME_HMAC_deserialize(json_object *jso,
269 TPMS_SCHEME_HMAC *out);
270
271TSS2_RC
272ifapi_json_TPMS_SCHEME_XOR_deserialize(json_object *jso, TPMS_SCHEME_XOR *out);
273
274TSS2_RC
275ifapi_json_TPMU_SCHEME_KEYEDHASH_deserialize(UINT32 selector, json_object *jso,
276 TPMU_SCHEME_KEYEDHASH *out);
277
278TSS2_RC
279ifapi_json_TPMT_KEYEDHASH_SCHEME_deserialize(json_object *jso,
280 TPMT_KEYEDHASH_SCHEME *out);
281
282TSS2_RC
283ifapi_json_TPMS_SIG_SCHEME_RSASSA_deserialize(json_object *jso,
284 TPMS_SIG_SCHEME_RSASSA *out);
285
286TSS2_RC
287ifapi_json_TPMS_SIG_SCHEME_RSAPSS_deserialize(json_object *jso,
288 TPMS_SIG_SCHEME_RSAPSS *out);
289
290TSS2_RC
291ifapi_json_TPMS_SIG_SCHEME_ECDSA_deserialize(json_object *jso,
292 TPMS_SIG_SCHEME_ECDSA *out);
293
294TSS2_RC
295ifapi_json_TPMS_SIG_SCHEME_SM2_deserialize(json_object *jso,
296 TPMS_SIG_SCHEME_SM2 *out);
297
298TSS2_RC
299ifapi_json_TPMS_SIG_SCHEME_ECSCHNORR_deserialize(json_object *jso,
300 TPMS_SIG_SCHEME_ECSCHNORR *out);
301
302TSS2_RC
303ifapi_json_TPMS_SIG_SCHEME_ECDAA_deserialize(json_object *jso,
304 TPMS_SIG_SCHEME_ECDAA *out);
305
306TSS2_RC
307ifapi_json_TPMU_SIG_SCHEME_deserialize(UINT32 selector, json_object *jso,
308 TPMU_SIG_SCHEME *out);
309
310TSS2_RC
311ifapi_json_TPMT_SIG_SCHEME_deserialize(json_object *jso, TPMT_SIG_SCHEME *out);
312
313TSS2_RC
314ifapi_json_TPMS_ENC_SCHEME_OAEP_deserialize(json_object *jso,
315 TPMS_ENC_SCHEME_OAEP *out);
316
317TSS2_RC
318ifapi_json_TPMS_ENC_SCHEME_RSAES_deserialize(json_object *jso,
319 TPMS_ENC_SCHEME_RSAES *out);
320
321TSS2_RC
322ifapi_json_TPMS_KEY_SCHEME_ECDH_deserialize(json_object *jso,
323 TPMS_KEY_SCHEME_ECDH *out);
324
325TSS2_RC
326ifapi_json_TPMS_SCHEME_MGF1_deserialize(json_object *jso,
327 TPMS_SCHEME_MGF1 *out);
328
329TSS2_RC
330ifapi_json_TPMS_SCHEME_KDF1_SP800_56A_deserialize(json_object *jso,
331 TPMS_SCHEME_KDF1_SP800_56A *out);
332
333TSS2_RC
334ifapi_json_TPMS_SCHEME_KDF1_SP800_108_deserialize(json_object *jso,
335 TPMS_SCHEME_KDF1_SP800_108 *out);
336
337TSS2_RC
338ifapi_json_TPMU_KDF_SCHEME_deserialize(UINT32 selector, json_object *jso,
339 TPMU_KDF_SCHEME *out);
340
341TSS2_RC
342ifapi_json_TPMT_KDF_SCHEME_deserialize(json_object *jso, TPMT_KDF_SCHEME *out);
343
344TSS2_RC
345ifapi_json_TPMU_ASYM_SCHEME_deserialize(UINT32 selector, json_object *jso,
346 TPMU_ASYM_SCHEME *out);
347
348TSS2_RC
349ifapi_json_TPMI_ALG_RSA_SCHEME_deserialize(json_object *jso,
350 TPMI_ALG_RSA_SCHEME *out);
351
352TSS2_RC
353ifapi_json_TPMT_RSA_SCHEME_deserialize(json_object *jso, TPMT_RSA_SCHEME *out);
354
355TSS2_RC
356ifapi_json_TPMI_ALG_RSA_DECRYPT_deserialize(json_object *jso,
357 TPMI_ALG_RSA_DECRYPT *out);
358
359TSS2_RC
360ifapi_json_TPMT_RSA_DECRYPT_deserialize(json_object *jso,
361 TPMT_RSA_DECRYPT *out);
362
363TSS2_RC
364ifapi_json_TPM2B_PUBLIC_KEY_RSA_deserialize(json_object *jso,
365 TPM2B_PUBLIC_KEY_RSA *out);
366
367TSS2_RC
368ifapi_json_TPMI_RSA_KEY_BITS_deserialize(json_object *jso,
369 TPMI_RSA_KEY_BITS *out);
370
371TSS2_RC
372ifapi_json_TPM2B_ECC_PARAMETER_deserialize(json_object *jso,
373 TPM2B_ECC_PARAMETER *out);
374
375TSS2_RC
376ifapi_json_TPMS_ECC_POINT_deserialize(json_object *jso, TPMS_ECC_POINT *out);
377
378TSS2_RC
379ifapi_json_TPMI_ALG_ECC_SCHEME_deserialize(json_object *jso,
380 TPMI_ALG_ECC_SCHEME *out);
381
382TSS2_RC
383ifapi_json_TPMI_ECC_CURVE_deserialize(json_object *jso, TPMI_ECC_CURVE *out);
384
385TSS2_RC
386ifapi_json_TPMT_ECC_SCHEME_deserialize(json_object *jso, TPMT_ECC_SCHEME *out);
387
388TSS2_RC
389ifapi_json_TPMS_SIGNATURE_RSA_deserialize(json_object *jso,
390 TPMS_SIGNATURE_RSA *out);
391
392TSS2_RC
393ifapi_json_TPMS_SIGNATURE_RSASSA_deserialize(json_object *jso,
394 TPMS_SIGNATURE_RSASSA *out);
395
396TSS2_RC
397ifapi_json_TPMS_SIGNATURE_RSAPSS_deserialize(json_object *jso,
398 TPMS_SIGNATURE_RSAPSS *out);
399
400TSS2_RC
401ifapi_json_TPMS_SIGNATURE_ECC_deserialize(json_object *jso,
402 TPMS_SIGNATURE_ECC *out);
403
404TSS2_RC
405ifapi_json_TPMS_SIGNATURE_ECDSA_deserialize(json_object *jso,
406 TPMS_SIGNATURE_ECDSA *out);
407
408TSS2_RC
409ifapi_json_TPMS_SIGNATURE_ECDAA_deserialize(json_object *jso,
410 TPMS_SIGNATURE_ECDAA *out);
411
412TSS2_RC
413ifapi_json_TPMS_SIGNATURE_SM2_deserialize(json_object *jso,
414 TPMS_SIGNATURE_SM2 *out);
415
416TSS2_RC
417ifapi_json_TPMS_SIGNATURE_ECSCHNORR_deserialize(json_object *jso,
418 TPMS_SIGNATURE_ECSCHNORR *out);
419
420TSS2_RC
421ifapi_json_TPMU_SIGNATURE_deserialize(UINT32 selector, json_object *jso,
422 TPMU_SIGNATURE *out);
423
424TSS2_RC
425ifapi_json_TPMT_SIGNATURE_deserialize(json_object *jso, TPMT_SIGNATURE *out);
426
427TSS2_RC
428ifapi_json_TPM2B_ENCRYPTED_SECRET_deserialize(json_object *jso,
429 TPM2B_ENCRYPTED_SECRET *out);
430
431TSS2_RC
432ifapi_json_TPMI_ALG_PUBLIC_deserialize(json_object *jso, TPMI_ALG_PUBLIC *out);
433
434TSS2_RC
435ifapi_json_TPMU_PUBLIC_ID_deserialize(UINT32 selector, json_object *jso,
436 TPMU_PUBLIC_ID *out);
437
438TSS2_RC
439ifapi_json_TPMS_KEYEDHASH_PARMS_deserialize(json_object *jso,
440 TPMS_KEYEDHASH_PARMS *out);
441
442TSS2_RC
443ifapi_json_TPMS_RSA_PARMS_deserialize(json_object *jso, TPMS_RSA_PARMS *out);
444
445TSS2_RC
446ifapi_json_TPMS_ECC_PARMS_deserialize(json_object *jso, TPMS_ECC_PARMS *out);
447
448TSS2_RC
449ifapi_json_TPMU_PUBLIC_PARMS_deserialize(UINT32 selector, json_object *jso,
450 TPMU_PUBLIC_PARMS *out);
451
452TSS2_RC
453ifapi_json_TPMT_PUBLIC_deserialize(json_object *jso, TPMT_PUBLIC *out);
454
455TSS2_RC
456ifapi_json_TPM2B_PUBLIC_deserialize(json_object *jso, TPM2B_PUBLIC *out);
457
458TSS2_RC
459ifapi_json_TPM2B_PRIVATE_deserialize(json_object *jso, TPM2B_PRIVATE *out);
460
461TSS2_RC
462ifapi_json_TPM2_NT_deserialize(json_object *jso, TPM2_NT *out);
463
464TSS2_RC
465ifapi_json_TPMA_NV_deserialize(json_object *jso, TPMA_NV *out);
466
467TSS2_RC
468ifapi_json_TPMS_NV_PUBLIC_deserialize(json_object *jso, TPMS_NV_PUBLIC *out);
469
470TSS2_RC
471ifapi_json_TPM2B_NV_PUBLIC_deserialize(json_object *jso, TPM2B_NV_PUBLIC *out);
472
473TSS2_RC
474ifapi_json_TPMS_CREATION_DATA_deserialize(json_object *jso,
475 TPMS_CREATION_DATA *out);
476
477TSS2_RC
478ifapi_json_TPM2B_CREATION_DATA_deserialize(json_object *jso,
479 TPM2B_CREATION_DATA *out);
480
481#endif /* FAPI_TPM_JSON_DESERIALIZE_H */
Definition fapi_types.h:15