6#ifndef FAPI_TPM_JSON_SERIALIZE_H
7#define FAPI_TPM_JSON_SERIALIZE_H
10#include <json-c/json.h>
11#include <json-c/json_util.h>
13#include "tss2_tpm2_types.h"
19#define CHECK_IN_LIST(type, needle, ...) \
20 type tab[] = { __VA_ARGS__ }; \
22 for(i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) \
23 if (needle == tab[i]) \
25 if (i == sizeof(tab) / sizeof(tab[0])) { \
26 LOG_ERROR("Bad value"); \
27 return TSS2_FAPI_RC_BAD_VALUE; \
30#define JSON_CLEAR(jso) \
32 json_object_put(jso); \
35#define return_if_jso_error(r,msg, jso) \
36 if (r != TSS2_RC_SUCCESS) { \
37 LOG_ERROR("%s " TPM2_ERROR_FORMAT, msg, TPM2_ERROR_TEXT(r)); \
39 json_object_put(jso); \
45ifapi_json_TPM2_HANDLE_serialize(
const TPM2_HANDLE in, json_object **jso);
48ifapi_json_UINT16_serialize(
const UINT16 in, json_object **jso);
51ifapi_json_UINT32_serialize(
const UINT32 in, json_object **jso);
54ifapi_json_INT32_serialize(
const INT32 in, json_object **jso);
57ifapi_json_UINT64_serialize(
const UINT64 in, json_object **jso);
60ifapi_json_TPM2_GENERATED_serialize(
const TPM2_GENERATED in, json_object **jso);
63ifapi_json_TPM2_ALG_ID_serialize(
const TPM2_ALG_ID in, json_object **jso);
66ifapi_json_TPM2_ECC_CURVE_serialize(
const TPM2_ECC_CURVE in, json_object **jso);
69ifapi_json_TPM2_CC_serialize(
const TPM2_CC in, json_object **jso);
72ifapi_json_TPM2_EO_serialize(
const TPM2_EO in, json_object **jso);
75ifapi_json_TPM2_ST_serialize(
const TPM2_ST in, json_object **jso);
78ifapi_json_TPM2_CAP_serialize(
const TPM2_CAP in, json_object **jso);
81ifapi_json_TPM2_PT_serialize(
const TPM2_PT in, json_object **jso);
84ifapi_json_TPM2_PT_PCR_serialize(
const TPM2_PT_PCR in, json_object **jso);
87ifapi_json_TPMA_ALGORITHM_serialize(
const TPMA_ALGORITHM in, json_object **jso);
90ifapi_json_TPMA_OBJECT_serialize(
const TPMA_OBJECT in, json_object **jso);
93ifapi_json_TPMA_LOCALITY_serialize(
const TPMA_LOCALITY in, json_object **jso);
96ifapi_json_TPMA_CC_serialize(
const TPMA_CC in, json_object **jso);
99ifapi_json_TPMA_ACT_serialize(
const TPMA_ACT in, json_object **jso);
102ifapi_json_TPMI_YES_NO_serialize(
const TPMI_YES_NO in, json_object **jso);
105ifapi_json_TPMI_RH_HIERARCHY_serialize(
const TPMI_RH_HIERARCHY in,
109ifapi_json_TPMI_RH_NV_INDEX_serialize(
const TPMI_RH_NV_INDEX in,
113ifapi_json_TPMI_ALG_HASH_serialize(
const TPMI_ALG_HASH in, json_object **jso);
116ifapi_json_TPMI_ALG_SYM_OBJECT_serialize(
const TPMI_ALG_SYM_OBJECT in,
120ifapi_json_TPMI_ALG_SYM_MODE_serialize(
const TPMI_ALG_SYM_MODE in,
124ifapi_json_TPMI_ALG_CIPHER_MODE_serialize(
const TPMI_ALG_CIPHER_MODE in,
128ifapi_json_TPMI_ALG_KDF_serialize(
const TPMI_ALG_KDF in, json_object **jso);
131ifapi_json_TPMI_ALG_SIG_SCHEME_serialize(
const TPMI_ALG_SIG_SCHEME in,
135ifapi_json_TPMS_EMPTY_serialize(
const TPMS_EMPTY *in, json_object **jso);
138ifapi_json_TPMU_HA_serialize(
const TPMU_HA *in, UINT32 selector,
142ifapi_json_TPMT_HA_serialize(
const TPMT_HA *in, json_object **jso);
145ifapi_json_TPM2B_DIGEST_serialize(
const TPM2B_DIGEST *in, json_object **jso);
148ifapi_json_TPM2B_DATA_serialize(
const TPM2B_DATA *in, json_object **jso);
151ifapi_json_TPM2B_NONCE_serialize(
const TPM2B_NONCE *in, json_object **jso);
154ifapi_json_TPM2B_OPERAND_serialize(
const TPM2B_OPERAND *in, json_object **jso);
157ifapi_json_TPM2B_EVENT_serialize(
const TPM2B_EVENT *in, json_object **jso);
160ifapi_json_TPM2B_MAX_NV_BUFFER_serialize(
const TPM2B_MAX_NV_BUFFER *in,
164ifapi_json_TPM2B_NAME_serialize(
const TPM2B_NAME *in, json_object **jso);
167ifapi_json_TPMS_PCR_SELECT_serialize(
const TPMS_PCR_SELECT *in,
171ifapi_json_TPMS_PCR_SELECTION_serialize(
const TPMS_PCR_SELECTION *in,
175ifapi_json_TPMT_TK_CREATION_serialize(
const TPMT_TK_CREATION *in,
179ifapi_json_TPMS_ALG_PROPERTY_serialize(
const TPMS_ALG_PROPERTY *in,
183ifapi_json_TPMS_TAGGED_PROPERTY_serialize(
const TPMS_TAGGED_PROPERTY *in,
187ifapi_json_TPMS_TAGGED_PCR_SELECT_serialize(
const TPMS_TAGGED_PCR_SELECT *in,
191ifapi_json_TPMS_TAGGED_POLICY_serialize(
const TPMS_TAGGED_POLICY *in,
195ifapi_json_TPMS_ACT_DATA_serialize(
const TPMS_ACT_DATA *in, json_object **jso);
198ifapi_json_TPML_CC_serialize(
const TPML_CC *in, json_object **jso);
201ifapi_json_TPML_CCA_serialize(
const TPML_CCA *in, json_object **jso);
204ifapi_json_TPML_HANDLE_serialize(
const TPML_HANDLE *in, json_object **jso);
207ifapi_json_TPML_DIGEST_VALUES_serialize(
const TPML_DIGEST_VALUES *in,
211ifapi_json_TPML_PCR_SELECTION_serialize(
const TPML_PCR_SELECTION *in,
215ifapi_json_TPML_ALG_PROPERTY_serialize(
const TPML_ALG_PROPERTY *in,
219ifapi_json_TPML_TAGGED_TPM_PROPERTY_serialize(
const TPML_TAGGED_TPM_PROPERTY
220 *in, json_object **jso);
223ifapi_json_TPML_TAGGED_PCR_PROPERTY_serialize(
const TPML_TAGGED_PCR_PROPERTY
224 *in, json_object **jso);
227ifapi_json_TPML_ECC_CURVE_serialize(
const TPML_ECC_CURVE *in,
231ifapi_json_TPML_TAGGED_POLICY_serialize(
const TPML_TAGGED_POLICY *in,
235ifapi_json_TPML_ACT_DATA_serialize(
const TPML_ACT_DATA *in, json_object **jso);
238ifapi_json_TPMU_CAPABILITIES_serialize(
const TPMU_CAPABILITIES *in,
239 UINT32 selector, json_object **jso);
242ifapi_json_TPMS_CAPABILITY_DATA_serialize(
const TPMS_CAPABILITY_DATA *in,
246ifapi_json_TPMS_CLOCK_INFO_serialize(
const TPMS_CLOCK_INFO *in,
250ifapi_json_TPMS_TIME_INFO_serialize(
const TPMS_TIME_INFO *in,
254ifapi_json_TPMS_TIME_ATTEST_INFO_serialize(
const TPMS_TIME_ATTEST_INFO *in,
258ifapi_json_TPMS_CERTIFY_INFO_serialize(
const TPMS_CERTIFY_INFO *in,
262ifapi_json_TPMS_QUOTE_INFO_serialize(
const TPMS_QUOTE_INFO *in,
266ifapi_json_TPMS_COMMAND_AUDIT_INFO_serialize(
const TPMS_COMMAND_AUDIT_INFO *in,
270ifapi_json_TPMS_SESSION_AUDIT_INFO_serialize(
const TPMS_SESSION_AUDIT_INFO *in,
274ifapi_json_TPMS_CREATION_INFO_serialize(
const TPMS_CREATION_INFO *in,
278ifapi_json_TPMS_NV_CERTIFY_INFO_serialize(
const TPMS_NV_CERTIFY_INFO *in,
282ifapi_json_TPMI_ST_ATTEST_serialize(
const TPMI_ST_ATTEST in, json_object **jso);
285ifapi_json_TPMU_ATTEST_serialize(
const TPMU_ATTEST *in, UINT32 selector,
289ifapi_json_TPMS_ATTEST_serialize(
const TPMS_ATTEST *in, json_object **jso);
292ifapi_json_TPMI_AES_KEY_BITS_serialize(
const TPMI_AES_KEY_BITS in,
296ifapi_json_TPMU_SYM_KEY_BITS_serialize(
const TPMU_SYM_KEY_BITS *in,
297 UINT32 selector, json_object **jso);
300ifapi_json_TPMU_SYM_MODE_serialize(
const TPMU_SYM_MODE *in, UINT32 selector,
304ifapi_json_TPMT_SYM_DEF_OBJECT_serialize(
const TPMT_SYM_DEF_OBJECT *in,
308ifapi_json_TPMS_SYMCIPHER_PARMS_serialize(
const TPMS_SYMCIPHER_PARMS *in,
312ifapi_json_TPMS_SCHEME_HASH_serialize(
const TPMS_SCHEME_HASH *in,
316ifapi_json_TPMS_SCHEME_ECDAA_serialize(
const TPMS_SCHEME_ECDAA *in,
320ifapi_json_TPMI_ALG_KEYEDHASH_SCHEME_serialize(
const TPMI_ALG_KEYEDHASH_SCHEME
321 in, json_object **jso);
324ifapi_json_TPMS_SCHEME_HMAC_serialize(
const TPMS_SCHEME_HMAC *in,
328ifapi_json_TPMS_SCHEME_XOR_serialize(
const TPMS_SCHEME_XOR *in,
332ifapi_json_TPMU_SCHEME_KEYEDHASH_serialize(
const TPMU_SCHEME_KEYEDHASH *in,
333 UINT32 selector, json_object **jso);
336ifapi_json_TPMT_KEYEDHASH_SCHEME_serialize(
const TPMT_KEYEDHASH_SCHEME *in,
340ifapi_json_TPMS_SIG_SCHEME_RSASSA_serialize(
const TPMS_SIG_SCHEME_RSASSA *in,
344ifapi_json_TPMS_SIG_SCHEME_RSAPSS_serialize(
const TPMS_SIG_SCHEME_RSAPSS *in,
348ifapi_json_TPMS_SIG_SCHEME_ECDSA_serialize(
const TPMS_SIG_SCHEME_ECDSA *in,
352ifapi_json_TPMS_SIG_SCHEME_SM2_serialize(
const TPMS_SIG_SCHEME_SM2 *in,
356ifapi_json_TPMS_SIG_SCHEME_ECSCHNORR_serialize(
const TPMS_SIG_SCHEME_ECSCHNORR
357 *in, json_object **jso);
360ifapi_json_TPMS_SIG_SCHEME_ECDAA_serialize(
const TPMS_SIG_SCHEME_ECDAA *in,
364ifapi_json_TPMU_SIG_SCHEME_serialize(
const TPMU_SIG_SCHEME *in, UINT32 selector,
368ifapi_json_TPMT_SIG_SCHEME_serialize(
const TPMT_SIG_SCHEME *in,
372ifapi_json_TPMS_ENC_SCHEME_OAEP_serialize(
const TPMS_ENC_SCHEME_OAEP *in,
376ifapi_json_TPMS_ENC_SCHEME_RSAES_serialize(
const TPMS_ENC_SCHEME_RSAES *in,
380ifapi_json_TPMS_KEY_SCHEME_ECDH_serialize(
const TPMS_KEY_SCHEME_ECDH *in,
384ifapi_json_TPMS_SCHEME_MGF1_serialize(
const TPMS_SCHEME_MGF1 *in,
388ifapi_json_TPMS_SCHEME_KDF1_SP800_56A_serialize(
const TPMS_SCHEME_KDF1_SP800_56A
389 *in, json_object **jso);
392ifapi_json_TPMS_SCHEME_KDF1_SP800_108_serialize(
const TPMS_SCHEME_KDF1_SP800_108
393 *in, json_object **jso);
396ifapi_json_TPMU_KDF_SCHEME_serialize(
const TPMU_KDF_SCHEME *in, UINT32 selector,
400ifapi_json_TPMT_KDF_SCHEME_serialize(
const TPMT_KDF_SCHEME *in,
404ifapi_json_TPMI_ALG_ASYM_SCHEME_serialize(
const TPMI_ALG_ASYM_SCHEME in,
408ifapi_json_TPMU_ASYM_SCHEME_serialize(
const TPMU_ASYM_SCHEME *in,
409 UINT32 selector, json_object **jso);
412ifapi_json_TPMT_ASYM_SCHEME_serialize(
const TPMT_ASYM_SCHEME *in,
416ifapi_json_TPMI_ALG_RSA_SCHEME_serialize(
const TPMI_ALG_RSA_SCHEME in,
420ifapi_json_TPMT_RSA_SCHEME_serialize(
const TPMT_RSA_SCHEME *in,
424ifapi_json_TPM2B_PUBLIC_KEY_RSA_serialize(
const TPM2B_PUBLIC_KEY_RSA *in,
428ifapi_json_TPMI_RSA_KEY_BITS_serialize(
const TPMI_RSA_KEY_BITS in,
432ifapi_json_TPM2B_ECC_PARAMETER_serialize(
const TPM2B_ECC_PARAMETER *in,
436ifapi_json_TPMS_ECC_POINT_serialize(
const TPMS_ECC_POINT *in,
440ifapi_json_TPMI_ALG_ECC_SCHEME_serialize(
const TPMI_ALG_ECC_SCHEME in,
444ifapi_json_TPMI_ECC_CURVE_serialize(
const TPMI_ECC_CURVE in, json_object **jso);
447ifapi_json_TPMT_ECC_SCHEME_serialize(
const TPMT_ECC_SCHEME *in,
451ifapi_json_TPMS_SIGNATURE_RSA_serialize(
const TPMS_SIGNATURE_RSA *in,
455ifapi_json_TPMS_SIGNATURE_RSASSA_serialize(
const TPMS_SIGNATURE_RSASSA *in,
459ifapi_json_TPMS_SIGNATURE_RSAPSS_serialize(
const TPMS_SIGNATURE_RSAPSS *in,
463ifapi_json_TPMS_SIGNATURE_ECC_serialize(
const TPMS_SIGNATURE_ECC *in,
467ifapi_json_TPMS_SIGNATURE_ECDSA_serialize(
const TPMS_SIGNATURE_ECDSA *in,
471ifapi_json_TPMS_SIGNATURE_ECDAA_serialize(
const TPMS_SIGNATURE_ECDAA *in,
475ifapi_json_TPMS_SIGNATURE_SM2_serialize(
const TPMS_SIGNATURE_SM2 *in,
479ifapi_json_TPMS_SIGNATURE_ECSCHNORR_serialize(
const TPMS_SIGNATURE_ECSCHNORR
480 *in, json_object **jso);
483ifapi_json_TPMU_SIGNATURE_serialize(
const TPMU_SIGNATURE *in, UINT32 selector,
487ifapi_json_TPMT_SIGNATURE_serialize(
const TPMT_SIGNATURE *in,
491ifapi_json_TPM2B_ENCRYPTED_SECRET_serialize(
const TPM2B_ENCRYPTED_SECRET *in,
495ifapi_json_TPMI_ALG_PUBLIC_serialize(
const TPMI_ALG_PUBLIC in,
499ifapi_json_TPMU_PUBLIC_ID_serialize(
const TPMU_PUBLIC_ID *in, UINT32 selector,
503ifapi_json_TPMS_KEYEDHASH_PARMS_serialize(
const TPMS_KEYEDHASH_PARMS *in,
507ifapi_json_TPMS_RSA_PARMS_serialize(
const TPMS_RSA_PARMS *in,
511ifapi_json_TPMS_ECC_PARMS_serialize(
const TPMS_ECC_PARMS *in,
515ifapi_json_TPMU_PUBLIC_PARMS_serialize(
const TPMU_PUBLIC_PARMS *in,
516 UINT32 selector, json_object **jso);
519ifapi_json_TPMT_PUBLIC_serialize(
const TPMT_PUBLIC *in, json_object **jso);
522ifapi_json_TPM2B_PUBLIC_serialize(
const TPM2B_PUBLIC *in, json_object **jso);
525ifapi_json_TPM2B_PRIVATE_serialize(
const TPM2B_PRIVATE *in, json_object **jso);
528ifapi_json_TPM2_NT_serialize(
const TPM2_NT in, json_object **jso);
531ifapi_json_TPMA_NV_serialize(
const TPMA_NV in, json_object **jso);
534ifapi_json_TPMS_NV_PUBLIC_serialize(
const TPMS_NV_PUBLIC *in,
538ifapi_json_TPM2B_NV_PUBLIC_serialize(
const TPM2B_NV_PUBLIC *in,
542ifapi_json_TPMS_CREATION_DATA_serialize(
const TPMS_CREATION_DATA *in,
546ifapi_json_TPM2B_CREATION_DATA_serialize(
const TPM2B_CREATION_DATA *in,