6#ifndef FAPI_TPM_JSON_DESERIALIZE_H
7#define FAPI_TPM_JSON_DESERIALIZE_H
10#include <json-c/json.h>
11#include <json-c/json_util.h>
13#include "tss2_tpm2_types.h"
20#define SUBTYPE_FILTER(type, parenttype, ...) \
22 type tab[] = { __VA_ARGS__ }; \
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++) { \
29 return TSS2_RC_SUCCESS; \
32 LOG_ERROR("Bad sub-value"); \
33 return TSS2_FAPI_RC_BAD_VALUE;
36ifapi_parse_json(
const char *jstring) ;
39ifapi_hex_to_byte_ary(
const char hex[], UINT32 vlen, BYTE val[]);
42ifapi_json_BYTE_array_deserialize(
size_t max, json_object *jso, BYTE *out);
45ifapi_json_UINT8_ARY_deserialize(json_object *jso,
UINT8_ARY *out);
48ifapi_get_sub_object(json_object *jso,
char *name, json_object **sub_jso);
51ifapi_json_BYTE_deserialize(json_object *jso, BYTE *out);
54ifapi_json_UINT16_deserialize(json_object *jso, UINT16 *out);
57ifapi_json_UINT32_deserialize(json_object *jso, UINT32 *out);
60ifapi_json_UINT64_deserialize(json_object *jso, UINT64 *out);
63ifapi_json_TPM2_GENERATED_deserialize(json_object *jso, TPM2_GENERATED *out);
66ifapi_json_TPM2_ALG_ID_deserialize(json_object *jso, TPM2_ALG_ID *out);
69ifapi_json_TPM2_ECC_CURVE_deserialize(json_object *jso, TPM2_ECC_CURVE *out);
72ifapi_json_TPM2_CC_deserialize(json_object *jso, TPM2_CC *out);
75ifapi_json_TPM2_EO_deserialize(json_object *jso, TPM2_EO *out);
78ifapi_json_TPM2_ST_deserialize(json_object *jso, TPM2_ST *out);
81ifapi_json_TPM2_PT_PCR_deserialize(json_object *jso, TPM2_PT_PCR *out);
84ifapi_json_TPM2_HANDLE_deserialize(json_object *jso, TPM2_HANDLE *out);
87ifapi_json_TPMA_OBJECT_deserialize(json_object *jso, TPMA_OBJECT *out);
90ifapi_json_TPMA_LOCALITY_deserialize(json_object *jso, TPMA_LOCALITY *out);
93ifapi_json_TPMA_ACT_deserialize(json_object *jso, TPMA_ACT *out);
96ifapi_json_TPMI_YES_NO_deserialize(json_object *jso, TPMI_YES_NO *out);
99ifapi_json_TPMI_RH_HIERARCHY_deserialize(json_object *jso,
100 TPMI_RH_HIERARCHY *out);
103ifapi_json_TPMI_RH_NV_INDEX_deserialize(json_object *jso,
104 TPMI_RH_NV_INDEX *out);
107ifapi_json_TPMI_ALG_HASH_deserialize(json_object *jso, TPMI_ALG_HASH *out);
110ifapi_json_TPMI_ALG_SYM_deserialize(json_object *jso, TPMI_ALG_SYM *out);
113ifapi_json_TPMI_ALG_SYM_OBJECT_deserialize(json_object *jso,
114 TPMI_ALG_SYM_OBJECT *out);
117ifapi_json_TPMI_ALG_CIPHER_MODE_deserialize(json_object *jso,
118 TPMI_ALG_CIPHER_MODE *out);
121ifapi_json_TPMI_ALG_SYM_MODE_deserialize(json_object *jso,
122 TPMI_ALG_SYM_MODE *out);
125ifapi_json_TPMI_ALG_KDF_deserialize(json_object *jso, TPMI_ALG_KDF *out);
128ifapi_json_TPMI_ALG_SIG_SCHEME_deserialize(json_object *jso,
129 TPMI_ALG_SIG_SCHEME *out);
132ifapi_json_TPMS_EMPTY_deserialize(json_object *jso, TPMS_EMPTY *out);
135ifapi_json_TPMU_HA_deserialize(UINT32 selector, json_object *jso, TPMU_HA *out);
138ifapi_json_TPMT_HA_deserialize(json_object *jso, TPMT_HA *out);
141ifapi_json_TPM2B_DIGEST_deserialize(json_object *jso, TPM2B_DIGEST *out);
144ifapi_json_TPM2B_DATA_deserialize(json_object *jso, TPM2B_DATA *out);
147ifapi_json_TPM2B_NONCE_deserialize(json_object *jso, TPM2B_NONCE *out);
150ifapi_json_TPM2B_OPERAND_deserialize(json_object *jso, TPM2B_OPERAND *out);
153ifapi_json_TPM2B_EVENT_deserialize(json_object *jso, TPM2B_EVENT *out);
156ifapi_json_TPM2B_MAX_NV_BUFFER_deserialize(json_object *jso,
157 TPM2B_MAX_NV_BUFFER *out);
160ifapi_json_TPM2B_NAME_deserialize(json_object *jso, TPM2B_NAME *out);
163ifapi_json_TPMS_PCR_SELECT_deserialize(json_object *jso, TPMS_PCR_SELECT *out);
166ifapi_json_TPMS_PCR_SELECTION_deserialize(json_object *jso,
167 TPMS_PCR_SELECTION *out);
170ifapi_json_TPMS_TAGGED_POLICY_deserialize(json_object *jso,
171 TPMS_TAGGED_POLICY *out);
174ifapi_json_TPMS_ACT_DATA_deserialize(json_object *jso,
178ifapi_json_TPMT_TK_CREATION_deserialize(json_object *jso,
179 TPMT_TK_CREATION *out);
182ifapi_json_TPML_DIGEST_VALUES_deserialize(json_object *jso,
183 TPML_DIGEST_VALUES *out);
186ifapi_json_TPML_PCR_SELECTION_deserialize(json_object *jso,
187 TPML_PCR_SELECTION *out);
190ifapi_json_TPMS_CLOCK_INFO_deserialize(json_object *jso, TPMS_CLOCK_INFO *out);
193ifapi_json_TPMS_TIME_INFO_deserialize(json_object *jso, TPMS_TIME_INFO *out);
196ifapi_json_TPMS_TIME_ATTEST_INFO_deserialize(json_object *jso,
197 TPMS_TIME_ATTEST_INFO *out);
200ifapi_json_TPMS_CERTIFY_INFO_deserialize(json_object *jso,
201 TPMS_CERTIFY_INFO *out);
204ifapi_json_TPMS_QUOTE_INFO_deserialize(json_object *jso, TPMS_QUOTE_INFO *out);
207ifapi_json_TPMS_COMMAND_AUDIT_INFO_deserialize(json_object *jso,
208 TPMS_COMMAND_AUDIT_INFO *out);
211ifapi_json_TPMS_SESSION_AUDIT_INFO_deserialize(json_object *jso,
212 TPMS_SESSION_AUDIT_INFO *out);
215ifapi_json_TPMS_CREATION_INFO_deserialize(json_object *jso,
216 TPMS_CREATION_INFO *out);
219ifapi_json_TPMS_NV_CERTIFY_INFO_deserialize(json_object *jso,
220 TPMS_NV_CERTIFY_INFO *out);
223ifapi_json_TPMI_ST_ATTEST_deserialize(json_object *jso, TPMI_ST_ATTEST *out);
226ifapi_json_TPMU_ATTEST_deserialize(UINT32 selector, json_object *jso,
230ifapi_json_TPMS_ATTEST_deserialize(json_object *jso, TPMS_ATTEST *out);
233ifapi_json_TPMI_AES_KEY_BITS_deserialize(json_object *jso,
234 TPMI_AES_KEY_BITS *out);
237ifapi_json_TPMU_SYM_KEY_BITS_deserialize(UINT32 selector, json_object *jso,
238 TPMU_SYM_KEY_BITS *out);
241ifapi_json_TPMU_SYM_MODE_deserialize(UINT32 selector, json_object *jso,
245ifapi_json_TPMT_SYM_DEF_deserialize(json_object *jso, TPMT_SYM_DEF *out);
248ifapi_json_TPMT_SYM_DEF_OBJECT_deserialize(json_object *jso,
249 TPMT_SYM_DEF_OBJECT *out);
252ifapi_json_TPMS_SYMCIPHER_PARMS_deserialize(json_object *jso,
253 TPMS_SYMCIPHER_PARMS *out);
256ifapi_json_TPMS_SCHEME_HASH_deserialize(json_object *jso,
257 TPMS_SCHEME_HASH *out);
260ifapi_json_TPMS_SCHEME_ECDAA_deserialize(json_object *jso,
261 TPMS_SCHEME_ECDAA *out);
264ifapi_json_TPMI_ALG_KEYEDHASH_SCHEME_deserialize(json_object *jso,
265 TPMI_ALG_KEYEDHASH_SCHEME *out);
268ifapi_json_TPMS_SCHEME_HMAC_deserialize(json_object *jso,
269 TPMS_SCHEME_HMAC *out);
272ifapi_json_TPMS_SCHEME_XOR_deserialize(json_object *jso, TPMS_SCHEME_XOR *out);
275ifapi_json_TPMU_SCHEME_KEYEDHASH_deserialize(UINT32 selector, json_object *jso,
276 TPMU_SCHEME_KEYEDHASH *out);
279ifapi_json_TPMT_KEYEDHASH_SCHEME_deserialize(json_object *jso,
280 TPMT_KEYEDHASH_SCHEME *out);
283ifapi_json_TPMS_SIG_SCHEME_RSASSA_deserialize(json_object *jso,
284 TPMS_SIG_SCHEME_RSASSA *out);
287ifapi_json_TPMS_SIG_SCHEME_RSAPSS_deserialize(json_object *jso,
288 TPMS_SIG_SCHEME_RSAPSS *out);
291ifapi_json_TPMS_SIG_SCHEME_ECDSA_deserialize(json_object *jso,
292 TPMS_SIG_SCHEME_ECDSA *out);
295ifapi_json_TPMS_SIG_SCHEME_SM2_deserialize(json_object *jso,
296 TPMS_SIG_SCHEME_SM2 *out);
299ifapi_json_TPMS_SIG_SCHEME_ECSCHNORR_deserialize(json_object *jso,
300 TPMS_SIG_SCHEME_ECSCHNORR *out);
303ifapi_json_TPMS_SIG_SCHEME_ECDAA_deserialize(json_object *jso,
304 TPMS_SIG_SCHEME_ECDAA *out);
307ifapi_json_TPMU_SIG_SCHEME_deserialize(UINT32 selector, json_object *jso,
308 TPMU_SIG_SCHEME *out);
311ifapi_json_TPMT_SIG_SCHEME_deserialize(json_object *jso, TPMT_SIG_SCHEME *out);
314ifapi_json_TPMS_ENC_SCHEME_OAEP_deserialize(json_object *jso,
315 TPMS_ENC_SCHEME_OAEP *out);
318ifapi_json_TPMS_ENC_SCHEME_RSAES_deserialize(json_object *jso,
319 TPMS_ENC_SCHEME_RSAES *out);
322ifapi_json_TPMS_KEY_SCHEME_ECDH_deserialize(json_object *jso,
323 TPMS_KEY_SCHEME_ECDH *out);
326ifapi_json_TPMS_SCHEME_MGF1_deserialize(json_object *jso,
327 TPMS_SCHEME_MGF1 *out);
330ifapi_json_TPMS_SCHEME_KDF1_SP800_56A_deserialize(json_object *jso,
331 TPMS_SCHEME_KDF1_SP800_56A *out);
334ifapi_json_TPMS_SCHEME_KDF1_SP800_108_deserialize(json_object *jso,
335 TPMS_SCHEME_KDF1_SP800_108 *out);
338ifapi_json_TPMU_KDF_SCHEME_deserialize(UINT32 selector, json_object *jso,
339 TPMU_KDF_SCHEME *out);
342ifapi_json_TPMT_KDF_SCHEME_deserialize(json_object *jso, TPMT_KDF_SCHEME *out);
345ifapi_json_TPMU_ASYM_SCHEME_deserialize(UINT32 selector, json_object *jso,
346 TPMU_ASYM_SCHEME *out);
349ifapi_json_TPMI_ALG_RSA_SCHEME_deserialize(json_object *jso,
350 TPMI_ALG_RSA_SCHEME *out);
353ifapi_json_TPMT_RSA_SCHEME_deserialize(json_object *jso, TPMT_RSA_SCHEME *out);
356ifapi_json_TPMI_ALG_RSA_DECRYPT_deserialize(json_object *jso,
357 TPMI_ALG_RSA_DECRYPT *out);
360ifapi_json_TPMT_RSA_DECRYPT_deserialize(json_object *jso,
361 TPMT_RSA_DECRYPT *out);
364ifapi_json_TPM2B_PUBLIC_KEY_RSA_deserialize(json_object *jso,
365 TPM2B_PUBLIC_KEY_RSA *out);
368ifapi_json_TPMI_RSA_KEY_BITS_deserialize(json_object *jso,
369 TPMI_RSA_KEY_BITS *out);
372ifapi_json_TPM2B_ECC_PARAMETER_deserialize(json_object *jso,
373 TPM2B_ECC_PARAMETER *out);
376ifapi_json_TPMS_ECC_POINT_deserialize(json_object *jso, TPMS_ECC_POINT *out);
379ifapi_json_TPMI_ALG_ECC_SCHEME_deserialize(json_object *jso,
380 TPMI_ALG_ECC_SCHEME *out);
383ifapi_json_TPMI_ECC_CURVE_deserialize(json_object *jso, TPMI_ECC_CURVE *out);
386ifapi_json_TPMT_ECC_SCHEME_deserialize(json_object *jso, TPMT_ECC_SCHEME *out);
389ifapi_json_TPMS_SIGNATURE_RSA_deserialize(json_object *jso,
390 TPMS_SIGNATURE_RSA *out);
393ifapi_json_TPMS_SIGNATURE_RSASSA_deserialize(json_object *jso,
394 TPMS_SIGNATURE_RSASSA *out);
397ifapi_json_TPMS_SIGNATURE_RSAPSS_deserialize(json_object *jso,
398 TPMS_SIGNATURE_RSAPSS *out);
401ifapi_json_TPMS_SIGNATURE_ECC_deserialize(json_object *jso,
402 TPMS_SIGNATURE_ECC *out);
405ifapi_json_TPMS_SIGNATURE_ECDSA_deserialize(json_object *jso,
406 TPMS_SIGNATURE_ECDSA *out);
409ifapi_json_TPMS_SIGNATURE_ECDAA_deserialize(json_object *jso,
410 TPMS_SIGNATURE_ECDAA *out);
413ifapi_json_TPMS_SIGNATURE_SM2_deserialize(json_object *jso,
414 TPMS_SIGNATURE_SM2 *out);
417ifapi_json_TPMS_SIGNATURE_ECSCHNORR_deserialize(json_object *jso,
418 TPMS_SIGNATURE_ECSCHNORR *out);
421ifapi_json_TPMU_SIGNATURE_deserialize(UINT32 selector, json_object *jso,
422 TPMU_SIGNATURE *out);
425ifapi_json_TPMT_SIGNATURE_deserialize(json_object *jso, TPMT_SIGNATURE *out);
428ifapi_json_TPM2B_ENCRYPTED_SECRET_deserialize(json_object *jso,
429 TPM2B_ENCRYPTED_SECRET *out);
432ifapi_json_TPMI_ALG_PUBLIC_deserialize(json_object *jso, TPMI_ALG_PUBLIC *out);
435ifapi_json_TPMU_PUBLIC_ID_deserialize(UINT32 selector, json_object *jso,
436 TPMU_PUBLIC_ID *out);
439ifapi_json_TPMS_KEYEDHASH_PARMS_deserialize(json_object *jso,
440 TPMS_KEYEDHASH_PARMS *out);
443ifapi_json_TPMS_RSA_PARMS_deserialize(json_object *jso, TPMS_RSA_PARMS *out);
446ifapi_json_TPMS_ECC_PARMS_deserialize(json_object *jso, TPMS_ECC_PARMS *out);
449ifapi_json_TPMU_PUBLIC_PARMS_deserialize(UINT32 selector, json_object *jso,
450 TPMU_PUBLIC_PARMS *out);
453ifapi_json_TPMT_PUBLIC_deserialize(json_object *jso, TPMT_PUBLIC *out);
456ifapi_json_TPM2B_PUBLIC_deserialize(json_object *jso, TPM2B_PUBLIC *out);
459ifapi_json_TPM2B_PRIVATE_deserialize(json_object *jso, TPM2B_PRIVATE *out);
462ifapi_json_TPM2_NT_deserialize(json_object *jso, TPM2_NT *out);
465ifapi_json_TPMA_NV_deserialize(json_object *jso, TPMA_NV *out);
468ifapi_json_TPMS_NV_PUBLIC_deserialize(json_object *jso, TPMS_NV_PUBLIC *out);
471ifapi_json_TPM2B_NV_PUBLIC_deserialize(json_object *jso, TPM2B_NV_PUBLIC *out);
474ifapi_json_TPMS_CREATION_DATA_deserialize(json_object *jso,
475 TPMS_CREATION_DATA *out);
478ifapi_json_TPM2B_CREATION_DATA_deserialize(json_object *jso,
479 TPM2B_CREATION_DATA *out);
Definition fapi_types.h:15