1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */
2*758e9fbaSOystein Eftevaag /*******************************************************************************
3*758e9fbaSOystein Eftevaag * Copyright 2018-2019, Fraunhofer SIT sponsored by Infineon Technologies AG
4*758e9fbaSOystein Eftevaag * All rights reserved.
5*758e9fbaSOystein Eftevaag ******************************************************************************/
6*758e9fbaSOystein Eftevaag
7*758e9fbaSOystein Eftevaag #ifdef HAVE_CONFIG_H
8*758e9fbaSOystein Eftevaag #include <config.h>
9*758e9fbaSOystein Eftevaag #endif
10*758e9fbaSOystein Eftevaag
11*758e9fbaSOystein Eftevaag #include <stdio.h>
12*758e9fbaSOystein Eftevaag
13*758e9fbaSOystein Eftevaag #include "tpm_json_serialize.h"
14*758e9fbaSOystein Eftevaag #define LOGMODULE fapijson
15*758e9fbaSOystein Eftevaag #include "util/log.h"
16*758e9fbaSOystein Eftevaag #include "util/aux_util.h"
17*758e9fbaSOystein Eftevaag
18*758e9fbaSOystein Eftevaag #define CHECK_IN_LIST(type, needle, ...) \
19*758e9fbaSOystein Eftevaag type tab[] = { __VA_ARGS__ }; \
20*758e9fbaSOystein Eftevaag size_t i; \
21*758e9fbaSOystein Eftevaag for(i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) \
22*758e9fbaSOystein Eftevaag if (needle == tab[i]) \
23*758e9fbaSOystein Eftevaag break; \
24*758e9fbaSOystein Eftevaag if (i == sizeof(tab) / sizeof(tab[0])) { \
25*758e9fbaSOystein Eftevaag LOG_ERROR("Bad value"); \
26*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE; \
27*758e9fbaSOystein Eftevaag }
28*758e9fbaSOystein Eftevaag
29*758e9fbaSOystein Eftevaag /** Serialize a TPMS_EMPTY.
30*758e9fbaSOystein Eftevaag *
31*758e9fbaSOystein Eftevaag * @param[in] in not used.
32*758e9fbaSOystein Eftevaag * @param[in] jso not used.
33*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS is always returnde.
34*758e9fbaSOystein Eftevaag */
35*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_EMPTY_serialize(const TPMS_EMPTY * in,json_object ** jso)36*758e9fbaSOystein Eftevaag ifapi_json_TPMS_EMPTY_serialize(const TPMS_EMPTY *in, json_object **jso)
37*758e9fbaSOystein Eftevaag {
38*758e9fbaSOystein Eftevaag (void)(in);
39*758e9fbaSOystein Eftevaag (void)(jso);
40*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
41*758e9fbaSOystein Eftevaag }
42*758e9fbaSOystein Eftevaag
43*758e9fbaSOystein Eftevaag /** Serialize a pcr selection to json
44*758e9fbaSOystein Eftevaag *
45*758e9fbaSOystein Eftevaag * @param[in] sizeofSelect size of selection byte array.
46*758e9fbaSOystein Eftevaag * @param[in] pcrSelect selection array.
47*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
48*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
49*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
50*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if sizeofSelect is too big.
51*758e9fbaSOystein Eftevaag */
52*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_pcr_select_serialize(const UINT8 sizeofSelect,const BYTE pcrSelect[],json_object ** jso)53*758e9fbaSOystein Eftevaag ifapi_json_pcr_select_serialize(
54*758e9fbaSOystein Eftevaag const UINT8 sizeofSelect,
55*758e9fbaSOystein Eftevaag const BYTE pcrSelect[],
56*758e9fbaSOystein Eftevaag json_object **jso)
57*758e9fbaSOystein Eftevaag {
58*758e9fbaSOystein Eftevaag if (*jso == NULL) {
59*758e9fbaSOystein Eftevaag *jso = json_object_new_array();
60*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
61*758e9fbaSOystein Eftevaag }
62*758e9fbaSOystein Eftevaag if (sizeofSelect > TPM2_PCR_SELECT_MAX) {
63*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_PCR_SELECT_MAX)",
64*758e9fbaSOystein Eftevaag (size_t)sizeofSelect, (size_t)TPM2_PCR_SELECT_MAX);
65*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
66*758e9fbaSOystein Eftevaag }
67*758e9fbaSOystein Eftevaag UINT32 i1, i2;
68*758e9fbaSOystein Eftevaag json_object *jso2;
69*758e9fbaSOystein Eftevaag for (i1 = 0; i1 < TPM2_PCR_LAST - TPM2_PCR_FIRST; i1++) {
70*758e9fbaSOystein Eftevaag i2 = i1 + TPM2_PCR_FIRST;
71*758e9fbaSOystein Eftevaag if (pcrSelect[i2 / 8] & (BYTE)(1 << (i2 % 8))) {
72*758e9fbaSOystein Eftevaag jso2 = json_object_new_int(i2);
73*758e9fbaSOystein Eftevaag return_if_null(jso2, "Out of memory.", TSS2_FAPI_RC_MEMORY);
74*758e9fbaSOystein Eftevaag json_object_array_add(*jso, jso2);
75*758e9fbaSOystein Eftevaag }
76*758e9fbaSOystein Eftevaag }
77*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
78*758e9fbaSOystein Eftevaag }
79*758e9fbaSOystein Eftevaag
80*758e9fbaSOystein Eftevaag /** Serialize a TPMS_PCR_SELECT structure to json.
81*758e9fbaSOystein Eftevaag *
82*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
83*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
84*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
85*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
86*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_PCR_SELECTION.
87*758e9fbaSOystein Eftevaag */
88*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_PCR_SELECT_serialize(const TPMS_PCR_SELECT * in,json_object ** jso)89*758e9fbaSOystein Eftevaag ifapi_json_TPMS_PCR_SELECT_serialize(const TPMS_PCR_SELECT *in,
90*758e9fbaSOystein Eftevaag json_object **jso)
91*758e9fbaSOystein Eftevaag {
92*758e9fbaSOystein Eftevaag TSS2_RC r;
93*758e9fbaSOystein Eftevaag
94*758e9fbaSOystein Eftevaag r = ifapi_json_pcr_select_serialize(in->sizeofSelect, &in->pcrSelect[0], jso);
95*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize pcr selection");
96*758e9fbaSOystein Eftevaag
97*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
98*758e9fbaSOystein Eftevaag }
99*758e9fbaSOystein Eftevaag
100*758e9fbaSOystein Eftevaag
101*758e9fbaSOystein Eftevaag /** Serialize a TPMS_PCR_SELECTION structure to json.
102*758e9fbaSOystein Eftevaag *
103*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
104*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
105*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
106*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
107*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_PCR_SELECTION.
108*758e9fbaSOystein Eftevaag */
109*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_PCR_SELECTION_serialize(const TPMS_PCR_SELECTION * in,json_object ** jso)110*758e9fbaSOystein Eftevaag ifapi_json_TPMS_PCR_SELECTION_serialize(const TPMS_PCR_SELECTION *in,
111*758e9fbaSOystein Eftevaag json_object **jso)
112*758e9fbaSOystein Eftevaag {
113*758e9fbaSOystein Eftevaag if (*jso == NULL) {
114*758e9fbaSOystein Eftevaag *jso = json_object_new_object();
115*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
116*758e9fbaSOystein Eftevaag }
117*758e9fbaSOystein Eftevaag TSS2_RC r;
118*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
119*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_HASH_serialize(in->hash, &jso2);
120*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize pcr selection");
121*758e9fbaSOystein Eftevaag
122*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "hash", jso2);
123*758e9fbaSOystein Eftevaag jso2 = NULL;
124*758e9fbaSOystein Eftevaag r = ifapi_json_pcr_select_serialize(in->sizeofSelect, &in->pcrSelect[0], &jso2);
125*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize pcr selection");
126*758e9fbaSOystein Eftevaag
127*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "pcrSelect", jso2);
128*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
129*758e9fbaSOystein Eftevaag }
130*758e9fbaSOystein Eftevaag
131*758e9fbaSOystein Eftevaag /** Serialize a TPMS_TAGGED_PCR_SELECT structure to json.
132*758e9fbaSOystein Eftevaag *
133*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
134*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
135*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
136*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
137*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_TAGGED_PCR_SELECT.
138*758e9fbaSOystein Eftevaag */
139*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_TAGGED_PCR_SELECT_serialize(const TPMS_TAGGED_PCR_SELECT * in,json_object ** jso)140*758e9fbaSOystein Eftevaag ifapi_json_TPMS_TAGGED_PCR_SELECT_serialize(const TPMS_TAGGED_PCR_SELECT *in,
141*758e9fbaSOystein Eftevaag json_object **jso)
142*758e9fbaSOystein Eftevaag {
143*758e9fbaSOystein Eftevaag TSS2_RC r;
144*758e9fbaSOystein Eftevaag if (*jso == NULL)
145*758e9fbaSOystein Eftevaag *jso = json_object_new_object();
146*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
147*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2_PT_PCR_serialize(in->tag, &jso2);
148*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize pcr selection");
149*758e9fbaSOystein Eftevaag
150*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "tag", jso2);
151*758e9fbaSOystein Eftevaag jso2 = NULL;
152*758e9fbaSOystein Eftevaag r = ifapi_json_pcr_select_serialize(in->sizeofSelect, &in->pcrSelect[0], &jso2);
153*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize pcr selection");
154*758e9fbaSOystein Eftevaag
155*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "pcrSelect", jso2);
156*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
157*758e9fbaSOystein Eftevaag }
158*758e9fbaSOystein Eftevaag
159*758e9fbaSOystein Eftevaag /** Serialize a base_type UINT16 to json.
160*758e9fbaSOystein Eftevaag *
161*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
162*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
163*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
164*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
165*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type UINT16.
166*758e9fbaSOystein Eftevaag */
167*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_UINT16_serialize(const UINT16 in,json_object ** jso)168*758e9fbaSOystein Eftevaag ifapi_json_UINT16_serialize(const UINT16 in, json_object **jso)
169*758e9fbaSOystein Eftevaag {
170*758e9fbaSOystein Eftevaag *jso = json_object_new_int64(in);
171*758e9fbaSOystein Eftevaag if (*jso == NULL) {
172*758e9fbaSOystein Eftevaag LOG_ERROR("Bad value %04"PRIx16"", in);
173*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
174*758e9fbaSOystein Eftevaag }
175*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
176*758e9fbaSOystein Eftevaag }
177*758e9fbaSOystein Eftevaag
178*758e9fbaSOystein Eftevaag /** Serialize a base_type UINT32 to json.
179*758e9fbaSOystein Eftevaag *
180*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
181*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
182*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
183*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
184*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type UINT32.
185*758e9fbaSOystein Eftevaag */
186*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_UINT32_serialize(const UINT32 in,json_object ** jso)187*758e9fbaSOystein Eftevaag ifapi_json_UINT32_serialize(const UINT32 in, json_object **jso)
188*758e9fbaSOystein Eftevaag {
189*758e9fbaSOystein Eftevaag *jso = json_object_new_int64(in);
190*758e9fbaSOystein Eftevaag if (*jso == NULL) {
191*758e9fbaSOystein Eftevaag LOG_ERROR("Bad value %"PRIx32 "", in);
192*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
193*758e9fbaSOystein Eftevaag }
194*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
195*758e9fbaSOystein Eftevaag }
196*758e9fbaSOystein Eftevaag
197*758e9fbaSOystein Eftevaag /** Serialize a base_type INT32 to json.
198*758e9fbaSOystein Eftevaag *
199*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
200*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
201*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
202*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
203*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type INT32.
204*758e9fbaSOystein Eftevaag */
205*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_INT32_serialize(const INT32 in,json_object ** jso)206*758e9fbaSOystein Eftevaag ifapi_json_INT32_serialize(const INT32 in, json_object **jso)
207*758e9fbaSOystein Eftevaag {
208*758e9fbaSOystein Eftevaag *jso = json_object_new_int64(in);
209*758e9fbaSOystein Eftevaag if (*jso == NULL) {
210*758e9fbaSOystein Eftevaag LOG_ERROR("Bad value %"PRIi32 "", in);
211*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
212*758e9fbaSOystein Eftevaag }
213*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
214*758e9fbaSOystein Eftevaag }
215*758e9fbaSOystein Eftevaag
216*758e9fbaSOystein Eftevaag /** Serialize a base_type UINT64 to json.
217*758e9fbaSOystein Eftevaag *
218*758e9fbaSOystein Eftevaag * @param[in] in variable to be serialized.
219*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
220*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
221*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
222*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type UINT64.
223*758e9fbaSOystein Eftevaag */
224*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_UINT64_serialize(UINT64 in,json_object ** jso)225*758e9fbaSOystein Eftevaag ifapi_json_UINT64_serialize(UINT64 in, json_object **jso)
226*758e9fbaSOystein Eftevaag {
227*758e9fbaSOystein Eftevaag json_object *jso1 = NULL, *jso2 = NULL;
228*758e9fbaSOystein Eftevaag if (in < 0x1000000000000) {
229*758e9fbaSOystein Eftevaag *jso = json_object_new_int64(in);
230*758e9fbaSOystein Eftevaag if (*jso == NULL) {
231*758e9fbaSOystein Eftevaag LOG_ERROR("Bad value %"PRIu32 "", (uint32_t)in);
232*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
233*758e9fbaSOystein Eftevaag }
234*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
235*758e9fbaSOystein Eftevaag }
236*758e9fbaSOystein Eftevaag
237*758e9fbaSOystein Eftevaag jso1 = json_object_new_int64(in / 0x100000000);
238*758e9fbaSOystein Eftevaag return_if_null(jso1, "Out of memory.", TSS2_FAPI_RC_MEMORY);
239*758e9fbaSOystein Eftevaag
240*758e9fbaSOystein Eftevaag in %= 0x100000000;
241*758e9fbaSOystein Eftevaag
242*758e9fbaSOystein Eftevaag jso2 = json_object_new_int64(in);
243*758e9fbaSOystein Eftevaag if (!jso2) json_object_put(jso1);
244*758e9fbaSOystein Eftevaag return_if_null(jso2, "Out of memory.", TSS2_FAPI_RC_MEMORY);
245*758e9fbaSOystein Eftevaag
246*758e9fbaSOystein Eftevaag *jso = json_object_new_array();
247*758e9fbaSOystein Eftevaag if (!*jso) json_object_put(jso1);
248*758e9fbaSOystein Eftevaag if (!*jso) json_object_put(jso2);
249*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
250*758e9fbaSOystein Eftevaag
251*758e9fbaSOystein Eftevaag json_object_array_add(*jso, jso1);
252*758e9fbaSOystein Eftevaag json_object_array_add(*jso, jso2);
253*758e9fbaSOystein Eftevaag
254*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
255*758e9fbaSOystein Eftevaag }
256*758e9fbaSOystein Eftevaag
257*758e9fbaSOystein Eftevaag /** Serialize TPM2_GENERATED to json.
258*758e9fbaSOystein Eftevaag *
259*758e9fbaSOystein Eftevaag * @param[in] in constant to be serialized.
260*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
261*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
262*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
263*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_GENERATED.
264*758e9fbaSOystein Eftevaag */
265*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2_GENERATED_serialize(const TPM2_GENERATED in,json_object ** jso)266*758e9fbaSOystein Eftevaag ifapi_json_TPM2_GENERATED_serialize(const TPM2_GENERATED in, json_object **jso)
267*758e9fbaSOystein Eftevaag {
268*758e9fbaSOystein Eftevaag if (in != TPM2_GENERATED_VALUE) {
269*758e9fbaSOystein Eftevaag return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
270*758e9fbaSOystein Eftevaag }
271*758e9fbaSOystein Eftevaag
272*758e9fbaSOystein Eftevaag *jso = json_object_new_string("VALUE");
273*758e9fbaSOystein Eftevaag check_oom(*jso);
274*758e9fbaSOystein Eftevaag
275*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
276*758e9fbaSOystein Eftevaag }
277*758e9fbaSOystein Eftevaag
278*758e9fbaSOystein Eftevaag /** Serialize TPM2_ALG_ID to json.
279*758e9fbaSOystein Eftevaag *
280*758e9fbaSOystein Eftevaag * @param[in] in constant to be serialized.
281*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
282*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
283*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
284*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_ALG_ID.
285*758e9fbaSOystein Eftevaag */
286*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2_ALG_ID_serialize(const TPM2_ALG_ID in,json_object ** jso)287*758e9fbaSOystein Eftevaag ifapi_json_TPM2_ALG_ID_serialize(const TPM2_ALG_ID in, json_object **jso)
288*758e9fbaSOystein Eftevaag {
289*758e9fbaSOystein Eftevaag static const struct { TPM2_ALG_ID in; const char *name; } tab[] = {
290*758e9fbaSOystein Eftevaag { TPM2_ALG_ERROR, "ERROR" },
291*758e9fbaSOystein Eftevaag { TPM2_ALG_RSA, "RSA" },
292*758e9fbaSOystein Eftevaag { TPM2_ALG_TDES, "TDES" },
293*758e9fbaSOystein Eftevaag /* We prefer SHA1 as output over SHA */
294*758e9fbaSOystein Eftevaag /* { TPM2_ALG_SHA, "SHA" },*/
295*758e9fbaSOystein Eftevaag { TPM2_ALG_SHA1, "SHA1" },
296*758e9fbaSOystein Eftevaag { TPM2_ALG_CMAC, "CMAC" },
297*758e9fbaSOystein Eftevaag { TPM2_ALG_HMAC, "HMAC" },
298*758e9fbaSOystein Eftevaag { TPM2_ALG_AES, "AES" },
299*758e9fbaSOystein Eftevaag { TPM2_ALG_MGF1, "MGF1" },
300*758e9fbaSOystein Eftevaag { TPM2_ALG_KEYEDHASH, "KEYEDHASH" },
301*758e9fbaSOystein Eftevaag { TPM2_ALG_XOR, "XOR" },
302*758e9fbaSOystein Eftevaag { TPM2_ALG_SHA256, "SHA256" },
303*758e9fbaSOystein Eftevaag { TPM2_ALG_SHA384, "SHA384" },
304*758e9fbaSOystein Eftevaag { TPM2_ALG_SHA512, "SHA512" },
305*758e9fbaSOystein Eftevaag { TPM2_ALG_NULL, "NULL" },
306*758e9fbaSOystein Eftevaag { TPM2_ALG_SM3_256, "SM3_256" },
307*758e9fbaSOystein Eftevaag { TPM2_ALG_SM4, "SM4" },
308*758e9fbaSOystein Eftevaag { TPM2_ALG_RSASSA, "RSASSA" },
309*758e9fbaSOystein Eftevaag { TPM2_ALG_RSAES, "RSAES" },
310*758e9fbaSOystein Eftevaag { TPM2_ALG_RSAPSS, "RSAPSS" },
311*758e9fbaSOystein Eftevaag { TPM2_ALG_OAEP, "OAEP" },
312*758e9fbaSOystein Eftevaag { TPM2_ALG_ECDSA, "ECDSA" },
313*758e9fbaSOystein Eftevaag { TPM2_ALG_ECDH, "ECDH" },
314*758e9fbaSOystein Eftevaag { TPM2_ALG_ECDAA, "ECDAA" },
315*758e9fbaSOystein Eftevaag { TPM2_ALG_SM2, "SM2" },
316*758e9fbaSOystein Eftevaag { TPM2_ALG_ECSCHNORR, "ECSCHNORR" },
317*758e9fbaSOystein Eftevaag { TPM2_ALG_ECMQV, "ECMQV" },
318*758e9fbaSOystein Eftevaag { TPM2_ALG_KDF1_SP800_56A, "KDF1_SP800_56A" },
319*758e9fbaSOystein Eftevaag { TPM2_ALG_KDF2, "KDF2" },
320*758e9fbaSOystein Eftevaag { TPM2_ALG_KDF1_SP800_108, "KDF1_SP800_108" },
321*758e9fbaSOystein Eftevaag { TPM2_ALG_ECC, "ECC" },
322*758e9fbaSOystein Eftevaag { TPM2_ALG_SYMCIPHER, "SYMCIPHER" },
323*758e9fbaSOystein Eftevaag { TPM2_ALG_CAMELLIA, "CAMELLIA" },
324*758e9fbaSOystein Eftevaag { TPM2_ALG_CTR, "CTR" },
325*758e9fbaSOystein Eftevaag { TPM2_ALG_OFB, "OFB" },
326*758e9fbaSOystein Eftevaag { TPM2_ALG_CBC, "CBC" },
327*758e9fbaSOystein Eftevaag { TPM2_ALG_CFB, "CFB" },
328*758e9fbaSOystein Eftevaag { TPM2_ALG_ECB, "ECB" },
329*758e9fbaSOystein Eftevaag };
330*758e9fbaSOystein Eftevaag
331*758e9fbaSOystein Eftevaag for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
332*758e9fbaSOystein Eftevaag if (tab[i].in == in) {
333*758e9fbaSOystein Eftevaag *jso = json_object_new_string(tab[i].name);
334*758e9fbaSOystein Eftevaag check_oom(*jso);
335*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
336*758e9fbaSOystein Eftevaag }
337*758e9fbaSOystein Eftevaag }
338*758e9fbaSOystein Eftevaag return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
339*758e9fbaSOystein Eftevaag }
340*758e9fbaSOystein Eftevaag
341*758e9fbaSOystein Eftevaag /** Serialize TPM2_ECC_CURVE to json.
342*758e9fbaSOystein Eftevaag *
343*758e9fbaSOystein Eftevaag * @param[in] in constant to be serialized.
344*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
345*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
346*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
347*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_ECC_CURVE.
348*758e9fbaSOystein Eftevaag */
349*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2_ECC_CURVE_serialize(const TPM2_ECC_CURVE in,json_object ** jso)350*758e9fbaSOystein Eftevaag ifapi_json_TPM2_ECC_CURVE_serialize(const TPM2_ECC_CURVE in, json_object **jso)
351*758e9fbaSOystein Eftevaag {
352*758e9fbaSOystein Eftevaag static const struct { TPM2_ECC_CURVE in; char *name; } tab[] = {
353*758e9fbaSOystein Eftevaag { TPM2_ECC_NONE, "NONE" },
354*758e9fbaSOystein Eftevaag { TPM2_ECC_NIST_P192, "NIST_P192" },
355*758e9fbaSOystein Eftevaag { TPM2_ECC_NIST_P224, "NIST_P224" },
356*758e9fbaSOystein Eftevaag { TPM2_ECC_NIST_P256, "NIST_P256" },
357*758e9fbaSOystein Eftevaag { TPM2_ECC_NIST_P384, "NIST_P384" },
358*758e9fbaSOystein Eftevaag { TPM2_ECC_NIST_P521, "NIST_P521" },
359*758e9fbaSOystein Eftevaag { TPM2_ECC_BN_P256, "BN_P256" },
360*758e9fbaSOystein Eftevaag { TPM2_ECC_BN_P638, "BN_P638" },
361*758e9fbaSOystein Eftevaag { TPM2_ECC_SM2_P256, "SM2_P256" },
362*758e9fbaSOystein Eftevaag };
363*758e9fbaSOystein Eftevaag
364*758e9fbaSOystein Eftevaag for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
365*758e9fbaSOystein Eftevaag if (tab[i].in == in) {
366*758e9fbaSOystein Eftevaag *jso = json_object_new_string(tab[i].name);
367*758e9fbaSOystein Eftevaag check_oom(*jso);
368*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
369*758e9fbaSOystein Eftevaag }
370*758e9fbaSOystein Eftevaag }
371*758e9fbaSOystein Eftevaag return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
372*758e9fbaSOystein Eftevaag }
373*758e9fbaSOystein Eftevaag
374*758e9fbaSOystein Eftevaag /** Serialize TPM2_CC to json.
375*758e9fbaSOystein Eftevaag *
376*758e9fbaSOystein Eftevaag * @param[in] in constant to be serialized.
377*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
378*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
379*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
380*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_CC.
381*758e9fbaSOystein Eftevaag */
382*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2_CC_serialize(const TPM2_CC in,json_object ** jso)383*758e9fbaSOystein Eftevaag ifapi_json_TPM2_CC_serialize(const TPM2_CC in, json_object **jso)
384*758e9fbaSOystein Eftevaag {
385*758e9fbaSOystein Eftevaag static const struct { TPM2_CC in; char *name; } tab[] = {
386*758e9fbaSOystein Eftevaag /* We don't want to return FIRST but the actual value */
387*758e9fbaSOystein Eftevaag /* { TPM2_CC_FIRST, "FIRST" }, */
388*758e9fbaSOystein Eftevaag { TPM2_CC_NV_UndefineSpaceSpecial, "NV_UndefineSpaceSpecial" },
389*758e9fbaSOystein Eftevaag { TPM2_CC_EvictControl, "EvictControl" },
390*758e9fbaSOystein Eftevaag { TPM2_CC_HierarchyControl, "HierarchyControl" },
391*758e9fbaSOystein Eftevaag { TPM2_CC_NV_UndefineSpace, "NV_UndefineSpace" },
392*758e9fbaSOystein Eftevaag { TPM2_CC_ChangeEPS, "ChangeEPS" },
393*758e9fbaSOystein Eftevaag { TPM2_CC_ChangePPS, "ChangePPS" },
394*758e9fbaSOystein Eftevaag { TPM2_CC_Clear, "Clear" },
395*758e9fbaSOystein Eftevaag { TPM2_CC_ClearControl, "ClearControl" },
396*758e9fbaSOystein Eftevaag { TPM2_CC_ClockSet, "ClockSet" },
397*758e9fbaSOystein Eftevaag { TPM2_CC_HierarchyChangeAuth, "HierarchyChangeAuth" },
398*758e9fbaSOystein Eftevaag { TPM2_CC_NV_DefineSpace, "NV_DefineSpace" },
399*758e9fbaSOystein Eftevaag { TPM2_CC_PCR_Allocate, "PCR_Allocate" },
400*758e9fbaSOystein Eftevaag { TPM2_CC_PCR_SetAuthPolicy, "PCR_SetAuthPolicy" },
401*758e9fbaSOystein Eftevaag { TPM2_CC_PP_Commands, "PP_Commands" },
402*758e9fbaSOystein Eftevaag { TPM2_CC_SetPrimaryPolicy, "SetPrimaryPolicy" },
403*758e9fbaSOystein Eftevaag { TPM2_CC_FieldUpgradeStart, "FieldUpgradeStart" },
404*758e9fbaSOystein Eftevaag { TPM2_CC_ClockRateAdjust, "ClockRateAdjust" },
405*758e9fbaSOystein Eftevaag { TPM2_CC_CreatePrimary, "CreatePrimary" },
406*758e9fbaSOystein Eftevaag { TPM2_CC_NV_GlobalWriteLock, "NV_GlobalWriteLock" },
407*758e9fbaSOystein Eftevaag { TPM2_CC_GetCommandAuditDigest, "GetCommandAuditDigest" },
408*758e9fbaSOystein Eftevaag { TPM2_CC_NV_Increment, "NV_Increment" },
409*758e9fbaSOystein Eftevaag { TPM2_CC_NV_SetBits, "NV_SetBits" },
410*758e9fbaSOystein Eftevaag { TPM2_CC_NV_Extend, "NV_Extend" },
411*758e9fbaSOystein Eftevaag { TPM2_CC_NV_Write, "NV_Write" },
412*758e9fbaSOystein Eftevaag { TPM2_CC_NV_WriteLock, "NV_WriteLock" },
413*758e9fbaSOystein Eftevaag { TPM2_CC_DictionaryAttackLockReset, "DictionaryAttackLockReset" },
414*758e9fbaSOystein Eftevaag { TPM2_CC_DictionaryAttackParameters, "DictionaryAttackParameters" },
415*758e9fbaSOystein Eftevaag { TPM2_CC_NV_ChangeAuth, "NV_ChangeAuth" },
416*758e9fbaSOystein Eftevaag { TPM2_CC_PCR_Event, "PCR_Event" },
417*758e9fbaSOystein Eftevaag { TPM2_CC_PCR_Reset, "PCR_Reset" },
418*758e9fbaSOystein Eftevaag { TPM2_CC_SequenceComplete, "SequenceComplete" },
419*758e9fbaSOystein Eftevaag { TPM2_CC_SetAlgorithmSet, "SetAlgorithmSet" },
420*758e9fbaSOystein Eftevaag { TPM2_CC_SetCommandCodeAuditStatus, "SetCommandCodeAuditStatus" },
421*758e9fbaSOystein Eftevaag { TPM2_CC_FieldUpgradeData, "FieldUpgradeData" },
422*758e9fbaSOystein Eftevaag { TPM2_CC_IncrementalSelfTest, "IncrementalSelfTest" },
423*758e9fbaSOystein Eftevaag { TPM2_CC_SelfTest, "SelfTest" },
424*758e9fbaSOystein Eftevaag { TPM2_CC_Startup, "Startup" },
425*758e9fbaSOystein Eftevaag { TPM2_CC_Shutdown, "Shutdown" },
426*758e9fbaSOystein Eftevaag { TPM2_CC_StirRandom, "StirRandom" },
427*758e9fbaSOystein Eftevaag { TPM2_CC_ActivateCredential, "ActivateCredential" },
428*758e9fbaSOystein Eftevaag { TPM2_CC_Certify, "Certify" },
429*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyNV, "PolicyNV" },
430*758e9fbaSOystein Eftevaag { TPM2_CC_CertifyCreation, "CertifyCreation" },
431*758e9fbaSOystein Eftevaag { TPM2_CC_Duplicate, "Duplicate" },
432*758e9fbaSOystein Eftevaag { TPM2_CC_GetTime, "GetTime" },
433*758e9fbaSOystein Eftevaag { TPM2_CC_GetSessionAuditDigest, "GetSessionAuditDigest" },
434*758e9fbaSOystein Eftevaag { TPM2_CC_NV_Read, "NV_Read" },
435*758e9fbaSOystein Eftevaag { TPM2_CC_NV_ReadLock, "NV_ReadLock" },
436*758e9fbaSOystein Eftevaag { TPM2_CC_ObjectChangeAuth, "ObjectChangeAuth" },
437*758e9fbaSOystein Eftevaag { TPM2_CC_PolicySecret, "PolicySecret" },
438*758e9fbaSOystein Eftevaag { TPM2_CC_Rewrap, "Rewrap" },
439*758e9fbaSOystein Eftevaag { TPM2_CC_Create, "Create" },
440*758e9fbaSOystein Eftevaag { TPM2_CC_ECDH_ZGen, "ECDH_ZGen" },
441*758e9fbaSOystein Eftevaag { TPM2_CC_HMAC, "HMAC" },
442*758e9fbaSOystein Eftevaag { TPM2_CC_Import, "Import" },
443*758e9fbaSOystein Eftevaag { TPM2_CC_Load, "Load" },
444*758e9fbaSOystein Eftevaag { TPM2_CC_Quote, "Quote" },
445*758e9fbaSOystein Eftevaag { TPM2_CC_RSA_Decrypt, "RSA_Decrypt" },
446*758e9fbaSOystein Eftevaag { TPM2_CC_HMAC_Start, "HMAC_Start" },
447*758e9fbaSOystein Eftevaag { TPM2_CC_SequenceUpdate, "SequenceUpdate" },
448*758e9fbaSOystein Eftevaag { TPM2_CC_Sign, "Sign" },
449*758e9fbaSOystein Eftevaag { TPM2_CC_Unseal, "Unseal" },
450*758e9fbaSOystein Eftevaag { TPM2_CC_PolicySigned, "PolicySigned" },
451*758e9fbaSOystein Eftevaag { TPM2_CC_ContextLoad, "ContextLoad" },
452*758e9fbaSOystein Eftevaag { TPM2_CC_ContextSave, "ContextSave" },
453*758e9fbaSOystein Eftevaag { TPM2_CC_ECDH_KeyGen, "ECDH_KeyGen" },
454*758e9fbaSOystein Eftevaag { TPM2_CC_EncryptDecrypt, "EncryptDecrypt" },
455*758e9fbaSOystein Eftevaag { TPM2_CC_FlushContext, "FlushContext" },
456*758e9fbaSOystein Eftevaag { TPM2_CC_LoadExternal, "LoadExternal" },
457*758e9fbaSOystein Eftevaag { TPM2_CC_MakeCredential, "MakeCredential" },
458*758e9fbaSOystein Eftevaag { TPM2_CC_NV_ReadPublic, "NV_ReadPublic" },
459*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyAuthorize, "PolicyAuthorize" },
460*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyAuthValue, "PolicyAuthValue" },
461*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyCommandCode, "PolicyCommandCode" },
462*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyCounterTimer, "PolicyCounterTimer" },
463*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyCpHash, "PolicyCpHash" },
464*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyLocality, "PolicyLocality" },
465*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyNameHash, "PolicyNameHash" },
466*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyOR, "PolicyOR" },
467*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyTicket, "PolicyTicket" },
468*758e9fbaSOystein Eftevaag { TPM2_CC_ReadPublic, "ReadPublic" },
469*758e9fbaSOystein Eftevaag { TPM2_CC_RSA_Encrypt, "RSA_Encrypt" },
470*758e9fbaSOystein Eftevaag { TPM2_CC_StartAuthSession, "StartAuthSession" },
471*758e9fbaSOystein Eftevaag { TPM2_CC_VerifySignature, "VerifySignature" },
472*758e9fbaSOystein Eftevaag { TPM2_CC_ECC_Parameters, "ECC_Parameters" },
473*758e9fbaSOystein Eftevaag { TPM2_CC_FirmwareRead, "FirmwareRead" },
474*758e9fbaSOystein Eftevaag { TPM2_CC_GetCapability, "GetCapability" },
475*758e9fbaSOystein Eftevaag { TPM2_CC_GetRandom, "GetRandom" },
476*758e9fbaSOystein Eftevaag { TPM2_CC_GetTestResult, "GetTestResult" },
477*758e9fbaSOystein Eftevaag { TPM2_CC_Hash, "Hash" },
478*758e9fbaSOystein Eftevaag { TPM2_CC_PCR_Read, "PCR_Read" },
479*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyPCR, "PolicyPCR" },
480*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyRestart, "PolicyRestart" },
481*758e9fbaSOystein Eftevaag { TPM2_CC_ReadClock, "ReadClock" },
482*758e9fbaSOystein Eftevaag { TPM2_CC_PCR_Extend, "PCR_Extend" },
483*758e9fbaSOystein Eftevaag { TPM2_CC_PCR_SetAuthValue, "PCR_SetAuthValue" },
484*758e9fbaSOystein Eftevaag { TPM2_CC_NV_Certify, "NV_Certify" },
485*758e9fbaSOystein Eftevaag { TPM2_CC_EventSequenceComplete, "EventSequenceComplete" },
486*758e9fbaSOystein Eftevaag { TPM2_CC_HashSequenceStart, "HashSequenceStart" },
487*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyPhysicalPresence, "PolicyPhysicalPresence" },
488*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyDuplicationSelect, "PolicyDuplicationSelect" },
489*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyGetDigest, "PolicyGetDigest" },
490*758e9fbaSOystein Eftevaag { TPM2_CC_TestParms, "TestParms" },
491*758e9fbaSOystein Eftevaag { TPM2_CC_Commit, "Commit" },
492*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyPassword, "PolicyPassword" },
493*758e9fbaSOystein Eftevaag { TPM2_CC_ZGen_2Phase, "ZGen_2Phase" },
494*758e9fbaSOystein Eftevaag { TPM2_CC_EC_Ephemeral, "EC_Ephemeral" },
495*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyNvWritten, "PolicyNvWritten" },
496*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyTemplate, "PolicyTemplate" },
497*758e9fbaSOystein Eftevaag { TPM2_CC_CreateLoaded, "CreateLoaded" },
498*758e9fbaSOystein Eftevaag { TPM2_CC_PolicyAuthorizeNV, "PolicyAuthorizeNV" },
499*758e9fbaSOystein Eftevaag { TPM2_CC_EncryptDecrypt2, "EncryptDecrypt2" },
500*758e9fbaSOystein Eftevaag /* We don't want to return LAST but the actual value */
501*758e9fbaSOystein Eftevaag /* { TPM2_CC_LAST, "LAST" }, */
502*758e9fbaSOystein Eftevaag { TPM2_CC_Vendor_TCG_Test, "Vendor_TCG_Test" },
503*758e9fbaSOystein Eftevaag };
504*758e9fbaSOystein Eftevaag
505*758e9fbaSOystein Eftevaag for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
506*758e9fbaSOystein Eftevaag if (tab[i].in == in) {
507*758e9fbaSOystein Eftevaag *jso = json_object_new_string(tab[i].name);
508*758e9fbaSOystein Eftevaag check_oom(*jso);
509*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
510*758e9fbaSOystein Eftevaag }
511*758e9fbaSOystein Eftevaag }
512*758e9fbaSOystein Eftevaag return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
513*758e9fbaSOystein Eftevaag }
514*758e9fbaSOystein Eftevaag
515*758e9fbaSOystein Eftevaag /** Serialize TPM2_EO to json.
516*758e9fbaSOystein Eftevaag *
517*758e9fbaSOystein Eftevaag * @param[in] in constant to be serialized.
518*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
519*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
520*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
521*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_EO.
522*758e9fbaSOystein Eftevaag */
523*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2_EO_serialize(const TPM2_EO in,json_object ** jso)524*758e9fbaSOystein Eftevaag ifapi_json_TPM2_EO_serialize(const TPM2_EO in, json_object **jso)
525*758e9fbaSOystein Eftevaag {
526*758e9fbaSOystein Eftevaag static const struct { TPM2_EO in; char *name; } tab[] = {
527*758e9fbaSOystein Eftevaag { TPM2_EO_EQ, "EQ" },
528*758e9fbaSOystein Eftevaag { TPM2_EO_NEQ, "TPM2_EO_NEQ" },
529*758e9fbaSOystein Eftevaag { TPM2_EO_SIGNED_GT, "SIGNED_GT" },
530*758e9fbaSOystein Eftevaag { TPM2_EO_UNSIGNED_GT, "UNSIGNED_GT" },
531*758e9fbaSOystein Eftevaag { TPM2_EO_SIGNED_LT, "SIGNED_LT" },
532*758e9fbaSOystein Eftevaag { TPM2_EO_UNSIGNED_LT, "UNSIGNED_LT" },
533*758e9fbaSOystein Eftevaag { TPM2_EO_SIGNED_GE, "SIGNED_GE" },
534*758e9fbaSOystein Eftevaag { TPM2_EO_UNSIGNED_GE, "UNSIGNED_GE" },
535*758e9fbaSOystein Eftevaag { TPM2_EO_SIGNED_LE, "SIGNED_LE" },
536*758e9fbaSOystein Eftevaag { TPM2_EO_UNSIGNED_LE, "UNSIGNED_LE" },
537*758e9fbaSOystein Eftevaag { TPM2_EO_BITSET, "BITSET" },
538*758e9fbaSOystein Eftevaag { TPM2_EO_BITCLEAR, "BITCLEAR" },
539*758e9fbaSOystein Eftevaag };
540*758e9fbaSOystein Eftevaag
541*758e9fbaSOystein Eftevaag for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
542*758e9fbaSOystein Eftevaag if (tab[i].in == in) {
543*758e9fbaSOystein Eftevaag *jso = json_object_new_string(tab[i].name);
544*758e9fbaSOystein Eftevaag check_oom(*jso);
545*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
546*758e9fbaSOystein Eftevaag }
547*758e9fbaSOystein Eftevaag }
548*758e9fbaSOystein Eftevaag return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
549*758e9fbaSOystein Eftevaag }
550*758e9fbaSOystein Eftevaag
551*758e9fbaSOystein Eftevaag /** Serialize TPM2_ST to json.
552*758e9fbaSOystein Eftevaag *
553*758e9fbaSOystein Eftevaag * @param[in] in constant to be serialized.
554*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
555*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
556*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
557*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_ST.
558*758e9fbaSOystein Eftevaag */
559*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2_ST_serialize(const TPM2_ST in,json_object ** jso)560*758e9fbaSOystein Eftevaag ifapi_json_TPM2_ST_serialize(const TPM2_ST in, json_object **jso)
561*758e9fbaSOystein Eftevaag {
562*758e9fbaSOystein Eftevaag static const struct { TPM2_ST in; char *name; } tab[] = {
563*758e9fbaSOystein Eftevaag { TPM2_ST_RSP_COMMAND, "RSP_COMMAND" },
564*758e9fbaSOystein Eftevaag { TPM2_ST_NULL, "NULL" },
565*758e9fbaSOystein Eftevaag { TPM2_ST_NO_SESSIONS, "NO_SESSIONS" },
566*758e9fbaSOystein Eftevaag { TPM2_ST_SESSIONS, "SESSIONS" },
567*758e9fbaSOystein Eftevaag { TPM2_ST_ATTEST_NV, "ATTEST_NV" },
568*758e9fbaSOystein Eftevaag { TPM2_ST_ATTEST_COMMAND_AUDIT, "ATTEST_COMMAND_AUDIT" },
569*758e9fbaSOystein Eftevaag { TPM2_ST_ATTEST_SESSION_AUDIT, "ATTEST_SESSION_AUDIT" },
570*758e9fbaSOystein Eftevaag { TPM2_ST_ATTEST_CERTIFY, "ATTEST_CERTIFY" },
571*758e9fbaSOystein Eftevaag { TPM2_ST_ATTEST_QUOTE, "ATTEST_QUOTE" },
572*758e9fbaSOystein Eftevaag { TPM2_ST_ATTEST_TIME, "ATTEST_TIME" },
573*758e9fbaSOystein Eftevaag { TPM2_ST_ATTEST_CREATION, "ATTEST_CREATION" },
574*758e9fbaSOystein Eftevaag { TPM2_ST_CREATION, "CREATION" },
575*758e9fbaSOystein Eftevaag { TPM2_ST_VERIFIED, "VERIFIED" },
576*758e9fbaSOystein Eftevaag { TPM2_ST_AUTH_SECRET, "AUTH_SECRET" },
577*758e9fbaSOystein Eftevaag { TPM2_ST_HASHCHECK, "HASHCHECK" },
578*758e9fbaSOystein Eftevaag { TPM2_ST_AUTH_SIGNED, "AUTH_SIGNED" },
579*758e9fbaSOystein Eftevaag { TPM2_ST_FU_MANIFEST, "FU_MANIFEST" },
580*758e9fbaSOystein Eftevaag };
581*758e9fbaSOystein Eftevaag
582*758e9fbaSOystein Eftevaag for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
583*758e9fbaSOystein Eftevaag if (tab[i].in == in) {
584*758e9fbaSOystein Eftevaag *jso = json_object_new_string(tab[i].name);
585*758e9fbaSOystein Eftevaag check_oom(*jso);
586*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
587*758e9fbaSOystein Eftevaag }
588*758e9fbaSOystein Eftevaag }
589*758e9fbaSOystein Eftevaag return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
590*758e9fbaSOystein Eftevaag }
591*758e9fbaSOystein Eftevaag
592*758e9fbaSOystein Eftevaag /** Serialize TPM2_CAP to json.
593*758e9fbaSOystein Eftevaag *
594*758e9fbaSOystein Eftevaag * @param[in] in constant to be serialized.
595*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
596*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
597*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
598*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_CAP.
599*758e9fbaSOystein Eftevaag */
600*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2_CAP_serialize(const TPM2_CAP in,json_object ** jso)601*758e9fbaSOystein Eftevaag ifapi_json_TPM2_CAP_serialize(const TPM2_CAP in, json_object **jso)
602*758e9fbaSOystein Eftevaag {
603*758e9fbaSOystein Eftevaag static const struct { TPM2_CAP in; char *name; } tab[] = {
604*758e9fbaSOystein Eftevaag { TPM2_CAP_ALGS, "ALGS" },
605*758e9fbaSOystein Eftevaag { TPM2_CAP_HANDLES, "HANDLES" },
606*758e9fbaSOystein Eftevaag { TPM2_CAP_COMMANDS, "COMMANDS" },
607*758e9fbaSOystein Eftevaag { TPM2_CAP_PP_COMMANDS, "PP_COMMANDS" },
608*758e9fbaSOystein Eftevaag { TPM2_CAP_AUDIT_COMMANDS, "AUDIT_COMMANDS" },
609*758e9fbaSOystein Eftevaag { TPM2_CAP_PCRS, "PCRS" },
610*758e9fbaSOystein Eftevaag { TPM2_CAP_TPM_PROPERTIES, "TPM_PROPERTIES" },
611*758e9fbaSOystein Eftevaag { TPM2_CAP_PCR_PROPERTIES, "PCR_PROPERTIES" },
612*758e9fbaSOystein Eftevaag { TPM2_CAP_ECC_CURVES, "ECC_CURVES" },
613*758e9fbaSOystein Eftevaag { TPM2_CAP_LAST, "LAST" },
614*758e9fbaSOystein Eftevaag { TPM2_CAP_VENDOR_PROPERTY, "VENDOR_PROPERTY" },
615*758e9fbaSOystein Eftevaag };
616*758e9fbaSOystein Eftevaag
617*758e9fbaSOystein Eftevaag for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
618*758e9fbaSOystein Eftevaag if (tab[i].in == in) {
619*758e9fbaSOystein Eftevaag *jso = json_object_new_string(tab[i].name);
620*758e9fbaSOystein Eftevaag check_oom(*jso);
621*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
622*758e9fbaSOystein Eftevaag }
623*758e9fbaSOystein Eftevaag }
624*758e9fbaSOystein Eftevaag return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
625*758e9fbaSOystein Eftevaag }
626*758e9fbaSOystein Eftevaag
627*758e9fbaSOystein Eftevaag /** Serialize TPM2_PT to json.
628*758e9fbaSOystein Eftevaag *
629*758e9fbaSOystein Eftevaag * @param[in] in constant to be serialized.
630*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
631*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
632*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
633*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_PT.
634*758e9fbaSOystein Eftevaag */
635*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2_PT_serialize(const TPM2_PT in,json_object ** jso)636*758e9fbaSOystein Eftevaag ifapi_json_TPM2_PT_serialize(const TPM2_PT in, json_object **jso)
637*758e9fbaSOystein Eftevaag {
638*758e9fbaSOystein Eftevaag static const struct { TPM2_PT in; char *name; } tab[] = {
639*758e9fbaSOystein Eftevaag { TPM2_PT_NONE, "NONE" },
640*758e9fbaSOystein Eftevaag { TPM2_PT_GROUP, "GROUP" },
641*758e9fbaSOystein Eftevaag { TPM2_PT_FIXED, "FIXED" },
642*758e9fbaSOystein Eftevaag { TPM2_PT_FAMILY_INDICATOR, "FAMILY_INDICATOR" },
643*758e9fbaSOystein Eftevaag { TPM2_PT_LEVEL, "LEVEL" },
644*758e9fbaSOystein Eftevaag { TPM2_PT_REVISION, "REVISION" },
645*758e9fbaSOystein Eftevaag { TPM2_PT_DAY_OF_YEAR, "DAY_OF_YEAR" },
646*758e9fbaSOystein Eftevaag { TPM2_PT_YEAR, "YEAR" },
647*758e9fbaSOystein Eftevaag { TPM2_PT_MANUFACTURER, "MANUFACTURER" },
648*758e9fbaSOystein Eftevaag { TPM2_PT_VENDOR_STRING_1, "VENDOR_STRING_1" },
649*758e9fbaSOystein Eftevaag { TPM2_PT_VENDOR_STRING_2, "VENDOR_STRING_2" },
650*758e9fbaSOystein Eftevaag { TPM2_PT_VENDOR_STRING_3, "VENDOR_STRING_3" },
651*758e9fbaSOystein Eftevaag { TPM2_PT_VENDOR_STRING_4, "VENDOR_STRING_4" },
652*758e9fbaSOystein Eftevaag { TPM2_PT_VENDOR_TPM_TYPE, "VENDOR_TPM_TYPE" },
653*758e9fbaSOystein Eftevaag { TPM2_PT_FIRMWARE_VERSION_1, "FIRMWARE_VERSION_1" },
654*758e9fbaSOystein Eftevaag { TPM2_PT_FIRMWARE_VERSION_2, "FIRMWARE_VERSION_2" },
655*758e9fbaSOystein Eftevaag { TPM2_PT_INPUT_BUFFER, "INPUT_BUFFER" },
656*758e9fbaSOystein Eftevaag { TPM2_PT_HR_TRANSIENT_MIN, "HR_TRANSIENT_MIN" },
657*758e9fbaSOystein Eftevaag { TPM2_PT_HR_PERSISTENT_MIN, "HR_PERSISTENT_MIN" },
658*758e9fbaSOystein Eftevaag { TPM2_PT_HR_LOADED_MIN, "HR_LOADED_MIN" },
659*758e9fbaSOystein Eftevaag { TPM2_PT_ACTIVE_SESSIONS_MAX, "ACTIVE_SESSIONS_MAX" },
660*758e9fbaSOystein Eftevaag { TPM2_PT_PCR_COUNT, "PCR_COUNT" },
661*758e9fbaSOystein Eftevaag { TPM2_PT_PCR_SELECT_MIN, "PCR_SELECT_MIN" },
662*758e9fbaSOystein Eftevaag { TPM2_PT_CONTEXT_GAP_MAX, "CONTEXT_GAP_MAX" },
663*758e9fbaSOystein Eftevaag { TPM2_PT_NV_COUNTERS_MAX, "NV_COUNTERS_MAX" },
664*758e9fbaSOystein Eftevaag { TPM2_PT_NV_INDEX_MAX, "NV_INDEX_MAX" },
665*758e9fbaSOystein Eftevaag { TPM2_PT_MEMORY, "MEMORY" },
666*758e9fbaSOystein Eftevaag { TPM2_PT_CLOCK_UPDATE, "CLOCK_UPDATE" },
667*758e9fbaSOystein Eftevaag { TPM2_PT_CONTEXT_HASH, "CONTEXT_HASH" },
668*758e9fbaSOystein Eftevaag { TPM2_PT_CONTEXT_SYM, "CONTEXT_SYM" },
669*758e9fbaSOystein Eftevaag { TPM2_PT_CONTEXT_SYM_SIZE, "CONTEXT_SYM_SIZE" },
670*758e9fbaSOystein Eftevaag { TPM2_PT_ORDERLY_COUNT, "ORDERLY_COUNT" },
671*758e9fbaSOystein Eftevaag { TPM2_PT_MAX_COMMAND_SIZE, "MAX_COMMAND_SIZE" },
672*758e9fbaSOystein Eftevaag { TPM2_PT_MAX_RESPONSE_SIZE, "MAX_RESPONSE_SIZE" },
673*758e9fbaSOystein Eftevaag { TPM2_PT_MAX_DIGEST, "MAX_DIGEST" },
674*758e9fbaSOystein Eftevaag { TPM2_PT_MAX_OBJECT_CONTEXT, "MAX_OBJECT_CONTEXT" },
675*758e9fbaSOystein Eftevaag { TPM2_PT_MAX_SESSION_CONTEXT, "MAX_SESSION_CONTEXT" },
676*758e9fbaSOystein Eftevaag { TPM2_PT_PS_FAMILY_INDICATOR, "PS_FAMILY_INDICATOR" },
677*758e9fbaSOystein Eftevaag { TPM2_PT_PS_LEVEL, "PS_LEVEL" },
678*758e9fbaSOystein Eftevaag { TPM2_PT_PS_REVISION, "PS_REVISION" },
679*758e9fbaSOystein Eftevaag { TPM2_PT_PS_DAY_OF_YEAR, "PS_DAY_OF_YEAR" },
680*758e9fbaSOystein Eftevaag { TPM2_PT_PS_YEAR, "PS_YEAR" },
681*758e9fbaSOystein Eftevaag { TPM2_PT_SPLIT_MAX, "SPLIT_MAX" },
682*758e9fbaSOystein Eftevaag { TPM2_PT_TOTAL_COMMANDS, "TOTAL_COMMANDS" },
683*758e9fbaSOystein Eftevaag { TPM2_PT_LIBRARY_COMMANDS, "LIBRARY_COMMANDS" },
684*758e9fbaSOystein Eftevaag { TPM2_PT_VENDOR_COMMANDS, "VENDOR_COMMANDS" },
685*758e9fbaSOystein Eftevaag { TPM2_PT_NV_BUFFER_MAX, "NV_BUFFER_MAX" },
686*758e9fbaSOystein Eftevaag { TPM2_PT_MODES, "MODES" },
687*758e9fbaSOystein Eftevaag { TPM2_PT_MAX_CAP_BUFFER, "MAX_CAP_BUFFER" },
688*758e9fbaSOystein Eftevaag { TPM2_PT_VAR, "VAR" },
689*758e9fbaSOystein Eftevaag { TPM2_PT_PERMANENT, "PERMANENT" },
690*758e9fbaSOystein Eftevaag { TPM2_PT_STARTUP_CLEAR, "STARTUP_CLEAR" },
691*758e9fbaSOystein Eftevaag { TPM2_PT_HR_NV_INDEX, "HR_NV_INDEX" },
692*758e9fbaSOystein Eftevaag { TPM2_PT_HR_LOADED, "HR_LOADED" },
693*758e9fbaSOystein Eftevaag { TPM2_PT_HR_LOADED_AVAIL, "HR_LOADED_AVAIL" },
694*758e9fbaSOystein Eftevaag { TPM2_PT_HR_ACTIVE, "HR_ACTIVE" },
695*758e9fbaSOystein Eftevaag { TPM2_PT_HR_ACTIVE_AVAIL, "HR_ACTIVE_AVAIL" },
696*758e9fbaSOystein Eftevaag { TPM2_PT_HR_TRANSIENT_AVAIL, "HR_TRANSIENT_AVAIL" },
697*758e9fbaSOystein Eftevaag { TPM2_PT_HR_PERSISTENT, "HR_PERSISTENT" },
698*758e9fbaSOystein Eftevaag { TPM2_PT_HR_PERSISTENT_AVAIL, "HR_PERSISTENT_AVAIL" },
699*758e9fbaSOystein Eftevaag { TPM2_PT_NV_COUNTERS, "NV_COUNTERS" },
700*758e9fbaSOystein Eftevaag { TPM2_PT_NV_COUNTERS_AVAIL, "NV_COUNTERS_AVAIL" },
701*758e9fbaSOystein Eftevaag { TPM2_PT_ALGORITHM_SET, "ALGORITHM_SET" },
702*758e9fbaSOystein Eftevaag { TPM2_PT_LOADED_CURVES, "LOADED_CURVES" },
703*758e9fbaSOystein Eftevaag { TPM2_PT_LOCKOUT_COUNTER, "LOCKOUT_COUNTER" },
704*758e9fbaSOystein Eftevaag { TPM2_PT_MAX_AUTH_FAIL, "MAX_AUTH_FAIL" },
705*758e9fbaSOystein Eftevaag { TPM2_PT_LOCKOUT_INTERVAL, "LOCKOUT_INTERVAL" },
706*758e9fbaSOystein Eftevaag { TPM2_PT_LOCKOUT_RECOVERY, "LOCKOUT_RECOVERY" },
707*758e9fbaSOystein Eftevaag { TPM2_PT_NV_WRITE_RECOVERY, "NV_WRITE_RECOVERY" },
708*758e9fbaSOystein Eftevaag { TPM2_PT_AUDIT_COUNTER_0, "AUDIT_COUNTER_0" },
709*758e9fbaSOystein Eftevaag { TPM2_PT_AUDIT_COUNTER_1, "AUDIT_COUNTER_1" },
710*758e9fbaSOystein Eftevaag };
711*758e9fbaSOystein Eftevaag
712*758e9fbaSOystein Eftevaag for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
713*758e9fbaSOystein Eftevaag if (tab[i].in == in) {
714*758e9fbaSOystein Eftevaag *jso = json_object_new_string(tab[i].name);
715*758e9fbaSOystein Eftevaag check_oom(*jso);
716*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
717*758e9fbaSOystein Eftevaag }
718*758e9fbaSOystein Eftevaag }
719*758e9fbaSOystein Eftevaag return_error2(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant: %"PRIx32, in);
720*758e9fbaSOystein Eftevaag }
721*758e9fbaSOystein Eftevaag
722*758e9fbaSOystein Eftevaag /** Serialize TPM2_PT_PCR to json.
723*758e9fbaSOystein Eftevaag *
724*758e9fbaSOystein Eftevaag * @param[in] in constant to be serialized.
725*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
726*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
727*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
728*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_PT_PCR.
729*758e9fbaSOystein Eftevaag */
730*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2_PT_PCR_serialize(const TPM2_PT_PCR in,json_object ** jso)731*758e9fbaSOystein Eftevaag ifapi_json_TPM2_PT_PCR_serialize(const TPM2_PT_PCR in, json_object **jso)
732*758e9fbaSOystein Eftevaag {
733*758e9fbaSOystein Eftevaag static const struct { TPM2_PT_PCR in; char *name; } tab[] = {
734*758e9fbaSOystein Eftevaag { TPM2_PT_PCR_SAVE, "SAVE" },
735*758e9fbaSOystein Eftevaag { TPM2_PT_PCR_EXTEND_L0, "EXTEND_L0" },
736*758e9fbaSOystein Eftevaag { TPM2_PT_PCR_RESET_L0, "RESET_L0" },
737*758e9fbaSOystein Eftevaag { TPM2_PT_PCR_EXTEND_L1, "EXTEND_L1" },
738*758e9fbaSOystein Eftevaag { TPM2_PT_PCR_RESET_L1, "RESET_L1" },
739*758e9fbaSOystein Eftevaag { TPM2_PT_PCR_EXTEND_L2, "EXTEND_L2" },
740*758e9fbaSOystein Eftevaag { TPM2_PT_PCR_RESET_L2, "RESET_L2" },
741*758e9fbaSOystein Eftevaag { TPM2_PT_PCR_EXTEND_L3, "EXTEND_L3" },
742*758e9fbaSOystein Eftevaag { TPM2_PT_PCR_RESET_L3, "RESET_L3" },
743*758e9fbaSOystein Eftevaag { TPM2_PT_PCR_EXTEND_L4, "EXTEND_L4" },
744*758e9fbaSOystein Eftevaag { TPM2_PT_PCR_RESET_L4, "RESET_L4" },
745*758e9fbaSOystein Eftevaag { TPM2_PT_PCR_NO_INCREMENT, "NO_INCREMENT" },
746*758e9fbaSOystein Eftevaag { TPM2_PT_PCR_DRTM_RESET, "DRTM_RESET" },
747*758e9fbaSOystein Eftevaag { TPM2_PT_PCR_POLICY, "POLICY" },
748*758e9fbaSOystein Eftevaag { TPM2_PT_PCR_AUTH, "AUTH" },
749*758e9fbaSOystein Eftevaag };
750*758e9fbaSOystein Eftevaag
751*758e9fbaSOystein Eftevaag for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
752*758e9fbaSOystein Eftevaag if (tab[i].in == in) {
753*758e9fbaSOystein Eftevaag *jso = json_object_new_string(tab[i].name);
754*758e9fbaSOystein Eftevaag check_oom(*jso);
755*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
756*758e9fbaSOystein Eftevaag }
757*758e9fbaSOystein Eftevaag }
758*758e9fbaSOystein Eftevaag return_error2(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant: %"PRIx32, in);
759*758e9fbaSOystein Eftevaag }
760*758e9fbaSOystein Eftevaag
761*758e9fbaSOystein Eftevaag /** Serialize value of type TPM2_HANDLE to json.
762*758e9fbaSOystein Eftevaag *
763*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
764*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
765*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
766*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
767*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2_HANDLE.
768*758e9fbaSOystein Eftevaag */
769*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2_HANDLE_serialize(const TPM2_HANDLE in,json_object ** jso)770*758e9fbaSOystein Eftevaag ifapi_json_TPM2_HANDLE_serialize(const TPM2_HANDLE in, json_object **jso)
771*758e9fbaSOystein Eftevaag {
772*758e9fbaSOystein Eftevaag *jso = json_object_new_int(in);
773*758e9fbaSOystein Eftevaag if (*jso == NULL) {
774*758e9fbaSOystein Eftevaag LOG_ERROR("Bad value %"PRIx32 "", in);
775*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
776*758e9fbaSOystein Eftevaag }
777*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
778*758e9fbaSOystein Eftevaag }
779*758e9fbaSOystein Eftevaag /** Serialize a TPMA_ALGORITHM to json.
780*758e9fbaSOystein Eftevaag *
781*758e9fbaSOystein Eftevaag * This function expects the Bitfield to be encoded as unsigned int in host-endianess.
782*758e9fbaSOystein Eftevaag *
783*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
784*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
785*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
786*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
787*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPMA_ALGORITHM.
788*758e9fbaSOystein Eftevaag */
789*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMA_ALGORITHM_serialize(const TPMA_ALGORITHM in,json_object ** jso)790*758e9fbaSOystein Eftevaag ifapi_json_TPMA_ALGORITHM_serialize(const TPMA_ALGORITHM in, json_object **jso)
791*758e9fbaSOystein Eftevaag {
792*758e9fbaSOystein Eftevaag static const struct { TPMA_ALGORITHM in; char *name; } tab[] = {
793*758e9fbaSOystein Eftevaag { TPMA_ALGORITHM_ASYMMETRIC, "asymmetric" },
794*758e9fbaSOystein Eftevaag { TPMA_ALGORITHM_SYMMETRIC, "symmetric" },
795*758e9fbaSOystein Eftevaag { TPMA_ALGORITHM_HASH, "hash" },
796*758e9fbaSOystein Eftevaag { TPMA_ALGORITHM_OBJECT, "object" },
797*758e9fbaSOystein Eftevaag { TPMA_ALGORITHM_SIGNING, "signing" },
798*758e9fbaSOystein Eftevaag { TPMA_ALGORITHM_ENCRYPTING, "encrypting" },
799*758e9fbaSOystein Eftevaag { TPMA_ALGORITHM_METHOD, "method" },
800*758e9fbaSOystein Eftevaag };
801*758e9fbaSOystein Eftevaag
802*758e9fbaSOystein Eftevaag UINT32 input;
803*758e9fbaSOystein Eftevaag input = (UINT32) in;
804*758e9fbaSOystein Eftevaag json_object *jso_bit;
805*758e9fbaSOystein Eftevaag if (*jso == NULL) {
806*758e9fbaSOystein Eftevaag *jso = json_object_new_object();
807*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
808*758e9fbaSOystein Eftevaag }
809*758e9fbaSOystein Eftevaag for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
810*758e9fbaSOystein Eftevaag if (tab[i].in & input)
811*758e9fbaSOystein Eftevaag jso_bit = json_object_new_int(1);
812*758e9fbaSOystein Eftevaag else
813*758e9fbaSOystein Eftevaag jso_bit = json_object_new_int(0);
814*758e9fbaSOystein Eftevaag return_if_null(jso_bit, "Out of memory.", TSS2_FAPI_RC_MEMORY);
815*758e9fbaSOystein Eftevaag
816*758e9fbaSOystein Eftevaag json_object_object_add(*jso, tab[i].name, jso_bit);
817*758e9fbaSOystein Eftevaag }
818*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
819*758e9fbaSOystein Eftevaag }
820*758e9fbaSOystein Eftevaag
821*758e9fbaSOystein Eftevaag /** Serialize a TPMA_OBJECT to json.
822*758e9fbaSOystein Eftevaag *
823*758e9fbaSOystein Eftevaag * This function expects the Bitfield to be encoded as unsigned int in host-endianess.
824*758e9fbaSOystein Eftevaag *
825*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
826*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
827*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
828*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
829*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPMA_OBJECT.
830*758e9fbaSOystein Eftevaag */
831*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMA_OBJECT_serialize(const TPMA_OBJECT in,json_object ** jso)832*758e9fbaSOystein Eftevaag ifapi_json_TPMA_OBJECT_serialize(const TPMA_OBJECT in, json_object **jso)
833*758e9fbaSOystein Eftevaag {
834*758e9fbaSOystein Eftevaag static const struct { TPMA_OBJECT in; char *name; } tab[] = {
835*758e9fbaSOystein Eftevaag { TPMA_OBJECT_FIXEDTPM, "fixedTPM" },
836*758e9fbaSOystein Eftevaag { TPMA_OBJECT_STCLEAR, "stClear" },
837*758e9fbaSOystein Eftevaag { TPMA_OBJECT_FIXEDPARENT, "fixedParent" },
838*758e9fbaSOystein Eftevaag { TPMA_OBJECT_SENSITIVEDATAORIGIN, "sensitiveDataOrigin" },
839*758e9fbaSOystein Eftevaag { TPMA_OBJECT_USERWITHAUTH, "userWithAuth" },
840*758e9fbaSOystein Eftevaag { TPMA_OBJECT_ADMINWITHPOLICY, "adminWithPolicy" },
841*758e9fbaSOystein Eftevaag { TPMA_OBJECT_NODA, "noDA" },
842*758e9fbaSOystein Eftevaag { TPMA_OBJECT_ENCRYPTEDDUPLICATION, "encryptedDuplication" },
843*758e9fbaSOystein Eftevaag { TPMA_OBJECT_RESTRICTED, "restricted" },
844*758e9fbaSOystein Eftevaag { TPMA_OBJECT_DECRYPT, "decrypt" },
845*758e9fbaSOystein Eftevaag { TPMA_OBJECT_SIGN_ENCRYPT, "sign" },
846*758e9fbaSOystein Eftevaag };
847*758e9fbaSOystein Eftevaag UINT32 input;
848*758e9fbaSOystein Eftevaag input = (UINT32) in;
849*758e9fbaSOystein Eftevaag json_object *jso_bit;
850*758e9fbaSOystein Eftevaag if (*jso == NULL) {
851*758e9fbaSOystein Eftevaag *jso = json_object_new_object();
852*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
853*758e9fbaSOystein Eftevaag }
854*758e9fbaSOystein Eftevaag for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
855*758e9fbaSOystein Eftevaag if (tab[i].in & input)
856*758e9fbaSOystein Eftevaag jso_bit = json_object_new_int(1);
857*758e9fbaSOystein Eftevaag else
858*758e9fbaSOystein Eftevaag jso_bit = json_object_new_int(0);
859*758e9fbaSOystein Eftevaag return_if_null(jso_bit, "Out of memory.", TSS2_FAPI_RC_MEMORY);
860*758e9fbaSOystein Eftevaag
861*758e9fbaSOystein Eftevaag json_object_object_add(*jso, tab[i].name, jso_bit);
862*758e9fbaSOystein Eftevaag }
863*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
864*758e9fbaSOystein Eftevaag }
865*758e9fbaSOystein Eftevaag
866*758e9fbaSOystein Eftevaag /** Serialize a TPMA_LOCALITY to json.
867*758e9fbaSOystein Eftevaag *
868*758e9fbaSOystein Eftevaag * This function expects the Bitfield to be encoded as unsigned int in host-endianess.
869*758e9fbaSOystein Eftevaag *
870*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
871*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
872*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
873*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
874*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPMA_LOCALITY.
875*758e9fbaSOystein Eftevaag */
876*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMA_LOCALITY_serialize(const TPMA_LOCALITY in,json_object ** jso)877*758e9fbaSOystein Eftevaag ifapi_json_TPMA_LOCALITY_serialize(const TPMA_LOCALITY in, json_object **jso)
878*758e9fbaSOystein Eftevaag {
879*758e9fbaSOystein Eftevaag static const struct { TPMA_LOCALITY in; char *name; } tab[] = {
880*758e9fbaSOystein Eftevaag { TPMA_LOCALITY_TPM2_LOC_ZERO, "ZERO" },
881*758e9fbaSOystein Eftevaag { TPMA_LOCALITY_TPM2_LOC_ONE, "ONE" },
882*758e9fbaSOystein Eftevaag { TPMA_LOCALITY_TPM2_LOC_TWO, "TWO" },
883*758e9fbaSOystein Eftevaag { TPMA_LOCALITY_TPM2_LOC_THREE, "THREE" },
884*758e9fbaSOystein Eftevaag { TPMA_LOCALITY_TPM2_LOC_FOUR, "FOUR" },
885*758e9fbaSOystein Eftevaag };
886*758e9fbaSOystein Eftevaag
887*758e9fbaSOystein Eftevaag UINT8 input;
888*758e9fbaSOystein Eftevaag input = (UINT8) in;
889*758e9fbaSOystein Eftevaag json_object *jso_bit;
890*758e9fbaSOystein Eftevaag json_object *jso_bit_idx;
891*758e9fbaSOystein Eftevaag if (*jso == NULL) {
892*758e9fbaSOystein Eftevaag *jso = json_object_new_object();
893*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
894*758e9fbaSOystein Eftevaag }
895*758e9fbaSOystein Eftevaag for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
896*758e9fbaSOystein Eftevaag if (tab[i].in & input)
897*758e9fbaSOystein Eftevaag jso_bit = json_object_new_int(1);
898*758e9fbaSOystein Eftevaag else
899*758e9fbaSOystein Eftevaag jso_bit = json_object_new_int(0);
900*758e9fbaSOystein Eftevaag return_if_null(jso_bit, "Out of memory.", TSS2_FAPI_RC_MEMORY);
901*758e9fbaSOystein Eftevaag
902*758e9fbaSOystein Eftevaag json_object_object_add(*jso, tab[i].name, jso_bit);
903*758e9fbaSOystein Eftevaag }
904*758e9fbaSOystein Eftevaag jso_bit_idx = json_object_new_int64((TPMA_LOCALITY_EXTENDED_MASK & input) >>
905*758e9fbaSOystein Eftevaag 5);
906*758e9fbaSOystein Eftevaag return_if_null(jso_bit_idx, "Out of memory.", TSS2_FAPI_RC_MEMORY);
907*758e9fbaSOystein Eftevaag
908*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "Extended", jso_bit_idx);
909*758e9fbaSOystein Eftevaag
910*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
911*758e9fbaSOystein Eftevaag }
912*758e9fbaSOystein Eftevaag
913*758e9fbaSOystein Eftevaag /** Serialize a TPMA_CC to json.
914*758e9fbaSOystein Eftevaag *
915*758e9fbaSOystein Eftevaag * This function expects the Bitfield to be encoded as unsigned int in host-endianess.
916*758e9fbaSOystein Eftevaag *
917*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
918*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
919*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
920*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
921*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPMA_CC.
922*758e9fbaSOystein Eftevaag */
923*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMA_CC_serialize(const TPMA_CC in,json_object ** jso)924*758e9fbaSOystein Eftevaag ifapi_json_TPMA_CC_serialize(const TPMA_CC in, json_object **jso)
925*758e9fbaSOystein Eftevaag {
926*758e9fbaSOystein Eftevaag static const struct { TPMA_CC in; char *name; } tab[] = {
927*758e9fbaSOystein Eftevaag { TPMA_CC_NV, "nv" },
928*758e9fbaSOystein Eftevaag { TPMA_CC_EXTENSIVE, "extensive" },
929*758e9fbaSOystein Eftevaag { TPMA_CC_FLUSHED, "flushed" },
930*758e9fbaSOystein Eftevaag { TPMA_CC_RHANDLE, "rHandle" },
931*758e9fbaSOystein Eftevaag { TPMA_CC_V, "V" },
932*758e9fbaSOystein Eftevaag };
933*758e9fbaSOystein Eftevaag TPM2_CC input;
934*758e9fbaSOystein Eftevaag input = (TPM2_CC) in;
935*758e9fbaSOystein Eftevaag json_object *jso_bit;
936*758e9fbaSOystein Eftevaag json_object *jso_bit_idx;
937*758e9fbaSOystein Eftevaag if (*jso == NULL) {
938*758e9fbaSOystein Eftevaag *jso = json_object_new_object();
939*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
940*758e9fbaSOystein Eftevaag }
941*758e9fbaSOystein Eftevaag for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
942*758e9fbaSOystein Eftevaag if (tab[i].in & input)
943*758e9fbaSOystein Eftevaag jso_bit = json_object_new_int(1);
944*758e9fbaSOystein Eftevaag else
945*758e9fbaSOystein Eftevaag jso_bit = json_object_new_int(0);
946*758e9fbaSOystein Eftevaag return_if_null(jso_bit, "Out of memory.", TSS2_FAPI_RC_MEMORY);
947*758e9fbaSOystein Eftevaag
948*758e9fbaSOystein Eftevaag json_object_object_add(*jso, tab[i].name, jso_bit);
949*758e9fbaSOystein Eftevaag }
950*758e9fbaSOystein Eftevaag jso_bit_idx = json_object_new_int64((TPMA_CC_COMMANDINDEX_MASK & input) >> 0);
951*758e9fbaSOystein Eftevaag return_if_null(jso_bit_idx, "Out of memory.", TSS2_FAPI_RC_MEMORY);
952*758e9fbaSOystein Eftevaag
953*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "commandIndex", jso_bit_idx);
954*758e9fbaSOystein Eftevaag
955*758e9fbaSOystein Eftevaag jso_bit_idx = json_object_new_int64((TPMA_CC_CHANDLES_MASK & input) >> 25);
956*758e9fbaSOystein Eftevaag return_if_null(jso_bit_idx, "Out of memory.", TSS2_FAPI_RC_MEMORY);
957*758e9fbaSOystein Eftevaag
958*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "cHandles", jso_bit_idx);
959*758e9fbaSOystein Eftevaag
960*758e9fbaSOystein Eftevaag jso_bit_idx = json_object_new_int64((TPMA_CC_RES_MASK & input) >> 30);
961*758e9fbaSOystein Eftevaag return_if_null(jso_bit_idx, "Out of memory.", TSS2_FAPI_RC_MEMORY);
962*758e9fbaSOystein Eftevaag
963*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "Res", jso_bit_idx);
964*758e9fbaSOystein Eftevaag
965*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
966*758e9fbaSOystein Eftevaag }
967*758e9fbaSOystein Eftevaag
968*758e9fbaSOystein Eftevaag /** Serialize TPMI_YES_NO to json.
969*758e9fbaSOystein Eftevaag *
970*758e9fbaSOystein Eftevaag * @param[in] in variable to be serialized.
971*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
972*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
973*758e9fbaSOystein Eftevaag * the function.
974*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
975*758e9fbaSOystein Eftevaag */
976*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMI_YES_NO_serialize(const TPMI_YES_NO in,json_object ** jso)977*758e9fbaSOystein Eftevaag ifapi_json_TPMI_YES_NO_serialize(const TPMI_YES_NO in, json_object **jso)
978*758e9fbaSOystein Eftevaag {
979*758e9fbaSOystein Eftevaag if (in == YES) {
980*758e9fbaSOystein Eftevaag *jso = json_object_new_string("YES");
981*758e9fbaSOystein Eftevaag } else if (in == NO) {
982*758e9fbaSOystein Eftevaag *jso = json_object_new_string("NO");
983*758e9fbaSOystein Eftevaag } else {
984*758e9fbaSOystein Eftevaag return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
985*758e9fbaSOystein Eftevaag }
986*758e9fbaSOystein Eftevaag check_oom(*jso);
987*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
988*758e9fbaSOystein Eftevaag }
989*758e9fbaSOystein Eftevaag
990*758e9fbaSOystein Eftevaag /** Serialize TPMI_RH_HIERARCHY to json.
991*758e9fbaSOystein Eftevaag *
992*758e9fbaSOystein Eftevaag * @param[in] in variable to be serialized.
993*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
994*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
995*758e9fbaSOystein Eftevaag * the function.
996*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
997*758e9fbaSOystein Eftevaag */
998*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMI_RH_HIERARCHY_serialize(const TPMI_RH_HIERARCHY in,json_object ** jso)999*758e9fbaSOystein Eftevaag ifapi_json_TPMI_RH_HIERARCHY_serialize(const TPMI_RH_HIERARCHY in,
1000*758e9fbaSOystein Eftevaag json_object **jso)
1001*758e9fbaSOystein Eftevaag {
1002*758e9fbaSOystein Eftevaag static const struct { TPMI_RH_HIERARCHY in; char *name; } tab[] = {
1003*758e9fbaSOystein Eftevaag { TPM2_RH_OWNER, "OWNER" },
1004*758e9fbaSOystein Eftevaag { TPM2_RH_PLATFORM, "PLATFORM" },
1005*758e9fbaSOystein Eftevaag { TPM2_RH_ENDORSEMENT, "ENDORSEMENT" },
1006*758e9fbaSOystein Eftevaag { TPM2_RH_NULL, "NULL" },
1007*758e9fbaSOystein Eftevaag };
1008*758e9fbaSOystein Eftevaag
1009*758e9fbaSOystein Eftevaag for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
1010*758e9fbaSOystein Eftevaag if (tab[i].in == in) {
1011*758e9fbaSOystein Eftevaag *jso = json_object_new_string(tab[i].name);
1012*758e9fbaSOystein Eftevaag check_oom(*jso);
1013*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1014*758e9fbaSOystein Eftevaag }
1015*758e9fbaSOystein Eftevaag }
1016*758e9fbaSOystein Eftevaag return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
1017*758e9fbaSOystein Eftevaag }
1018*758e9fbaSOystein Eftevaag
1019*758e9fbaSOystein Eftevaag /** Serialize value of type TPMI_RH_NV_INDEX to json.
1020*758e9fbaSOystein Eftevaag *
1021*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1022*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1023*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1024*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1025*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMI_RH_NV_INDEX.
1026*758e9fbaSOystein Eftevaag *
1027*758e9fbaSOystein Eftevaag */
1028*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMI_RH_NV_INDEX_serialize(const TPMI_RH_NV_INDEX in,json_object ** jso)1029*758e9fbaSOystein Eftevaag ifapi_json_TPMI_RH_NV_INDEX_serialize(const TPMI_RH_NV_INDEX in,
1030*758e9fbaSOystein Eftevaag json_object **jso)
1031*758e9fbaSOystein Eftevaag {
1032*758e9fbaSOystein Eftevaag if (in >= TPM2_NV_INDEX_FIRST && in <= TPM2_NV_INDEX_LAST) {
1033*758e9fbaSOystein Eftevaag *jso = json_object_new_int64(in);
1034*758e9fbaSOystein Eftevaag } else {
1035*758e9fbaSOystein Eftevaag return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
1036*758e9fbaSOystein Eftevaag }
1037*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
1038*758e9fbaSOystein Eftevaag
1039*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1040*758e9fbaSOystein Eftevaag }
1041*758e9fbaSOystein Eftevaag
1042*758e9fbaSOystein Eftevaag /** Serialize TPMI_ALG_HASH to json.
1043*758e9fbaSOystein Eftevaag *
1044*758e9fbaSOystein Eftevaag * @param[in] in variable to be serialized.
1045*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1046*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
1047*758e9fbaSOystein Eftevaag * the function.
1048*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
1049*758e9fbaSOystein Eftevaag */
1050*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMI_ALG_HASH_serialize(const TPMI_ALG_HASH in,json_object ** jso)1051*758e9fbaSOystein Eftevaag ifapi_json_TPMI_ALG_HASH_serialize(const TPMI_ALG_HASH in, json_object **jso)
1052*758e9fbaSOystein Eftevaag {
1053*758e9fbaSOystein Eftevaag CHECK_IN_LIST(TPMI_ALG_HASH, in, TPM2_ALG_SHA1, TPM2_ALG_SHA256, TPM2_ALG_SHA384,
1054*758e9fbaSOystein Eftevaag TPM2_ALG_SHA512, TPM2_ALG_NULL);
1055*758e9fbaSOystein Eftevaag return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
1056*758e9fbaSOystein Eftevaag }
1057*758e9fbaSOystein Eftevaag
1058*758e9fbaSOystein Eftevaag /** Serialize TPMI_ALG_SYM_OBJECT to json.
1059*758e9fbaSOystein Eftevaag *
1060*758e9fbaSOystein Eftevaag * @param[in] in variable to be serialized.
1061*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1062*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
1063*758e9fbaSOystein Eftevaag * the function.
1064*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
1065*758e9fbaSOystein Eftevaag */
1066*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMI_ALG_SYM_OBJECT_serialize(const TPMI_ALG_SYM_OBJECT in,json_object ** jso)1067*758e9fbaSOystein Eftevaag ifapi_json_TPMI_ALG_SYM_OBJECT_serialize(const TPMI_ALG_SYM_OBJECT in,
1068*758e9fbaSOystein Eftevaag json_object **jso)
1069*758e9fbaSOystein Eftevaag {
1070*758e9fbaSOystein Eftevaag CHECK_IN_LIST(TPMI_ALG_SYM_OBJECT, in, TPM2_ALG_AES, TPM2_ALG_NULL);
1071*758e9fbaSOystein Eftevaag return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
1072*758e9fbaSOystein Eftevaag }
1073*758e9fbaSOystein Eftevaag
1074*758e9fbaSOystein Eftevaag /** Serialize TPMI_ALG_SYM_MODE to json.
1075*758e9fbaSOystein Eftevaag *
1076*758e9fbaSOystein Eftevaag * @param[in] in variable to be serialized.
1077*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1078*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
1079*758e9fbaSOystein Eftevaag * the function.
1080*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
1081*758e9fbaSOystein Eftevaag */
1082*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMI_ALG_SYM_MODE_serialize(const TPMI_ALG_SYM_MODE in,json_object ** jso)1083*758e9fbaSOystein Eftevaag ifapi_json_TPMI_ALG_SYM_MODE_serialize(const TPMI_ALG_SYM_MODE in,
1084*758e9fbaSOystein Eftevaag json_object **jso)
1085*758e9fbaSOystein Eftevaag {
1086*758e9fbaSOystein Eftevaag CHECK_IN_LIST(TPMI_ALG_SYM_MODE, in, TPM2_ALG_CTR, TPM2_ALG_OFB,
1087*758e9fbaSOystein Eftevaag TPM2_ALG_CBC, TPM2_ALG_CFB, TPM2_ALG_ECB, TPM2_ALG_NULL);
1088*758e9fbaSOystein Eftevaag return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
1089*758e9fbaSOystein Eftevaag }
1090*758e9fbaSOystein Eftevaag
1091*758e9fbaSOystein Eftevaag /** Serialize TPMI_ALG_KDF to json.
1092*758e9fbaSOystein Eftevaag *
1093*758e9fbaSOystein Eftevaag * @param[in] in variable to be serialized.
1094*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1095*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
1096*758e9fbaSOystein Eftevaag * the function.
1097*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
1098*758e9fbaSOystein Eftevaag */
1099*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMI_ALG_KDF_serialize(const TPMI_ALG_KDF in,json_object ** jso)1100*758e9fbaSOystein Eftevaag ifapi_json_TPMI_ALG_KDF_serialize(const TPMI_ALG_KDF in, json_object **jso)
1101*758e9fbaSOystein Eftevaag {
1102*758e9fbaSOystein Eftevaag CHECK_IN_LIST(TPMI_ALG_KDF, in, TPM2_ALG_MGF1, TPM2_ALG_KDF1_SP800_56A,
1103*758e9fbaSOystein Eftevaag TPM2_ALG_KDF1_SP800_108, TPM2_ALG_NULL);
1104*758e9fbaSOystein Eftevaag return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
1105*758e9fbaSOystein Eftevaag }
1106*758e9fbaSOystein Eftevaag
1107*758e9fbaSOystein Eftevaag /** Serialize TPMI_ALG_SIG_SCHEME to json.
1108*758e9fbaSOystein Eftevaag *
1109*758e9fbaSOystein Eftevaag * @param[in] in variable to be serialized.
1110*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1111*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
1112*758e9fbaSOystein Eftevaag * the function.
1113*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
1114*758e9fbaSOystein Eftevaag */
1115*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMI_ALG_SIG_SCHEME_serialize(const TPMI_ALG_SIG_SCHEME in,json_object ** jso)1116*758e9fbaSOystein Eftevaag ifapi_json_TPMI_ALG_SIG_SCHEME_serialize(const TPMI_ALG_SIG_SCHEME in,
1117*758e9fbaSOystein Eftevaag json_object **jso)
1118*758e9fbaSOystein Eftevaag {
1119*758e9fbaSOystein Eftevaag CHECK_IN_LIST(TPMI_ALG_SIG_SCHEME, in, TPM2_ALG_RSASSA, TPM2_ALG_RSAPSS,
1120*758e9fbaSOystein Eftevaag TPM2_ALG_ECDSA, TPM2_ALG_ECDAA, TPM2_ALG_SM2, TPM2_ALG_ECSCHNORR,
1121*758e9fbaSOystein Eftevaag TPM2_ALG_HMAC, TPM2_ALG_NULL);
1122*758e9fbaSOystein Eftevaag return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
1123*758e9fbaSOystein Eftevaag }
1124*758e9fbaSOystein Eftevaag
1125*758e9fbaSOystein Eftevaag /** Serialize a TPMU_HA to json.
1126*758e9fbaSOystein Eftevaag *
1127*758e9fbaSOystein Eftevaag * This function expects the Bitfield to be encoded as unsigned int in host-endianess.
1128*758e9fbaSOystein Eftevaag * @param[in] in the value to be serialized.
1129*758e9fbaSOystein Eftevaag * @param[in] selector the type of the HA object.
1130*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1131*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1132*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1133*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_HA.
1134*758e9fbaSOystein Eftevaag */
1135*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMU_HA_serialize(const TPMU_HA * in,UINT32 selector,json_object ** jso)1136*758e9fbaSOystein Eftevaag ifapi_json_TPMU_HA_serialize(const TPMU_HA *in, UINT32 selector,
1137*758e9fbaSOystein Eftevaag json_object **jso)
1138*758e9fbaSOystein Eftevaag {
1139*758e9fbaSOystein Eftevaag size_t size;
1140*758e9fbaSOystein Eftevaag const uint8_t *buffer;
1141*758e9fbaSOystein Eftevaag
1142*758e9fbaSOystein Eftevaag switch (selector) {
1143*758e9fbaSOystein Eftevaag case TPM2_ALG_SHA1:
1144*758e9fbaSOystein Eftevaag size = TPM2_SHA1_DIGEST_SIZE;
1145*758e9fbaSOystein Eftevaag buffer = &in->sha1[0];
1146*758e9fbaSOystein Eftevaag break;
1147*758e9fbaSOystein Eftevaag case TPM2_ALG_SHA256:
1148*758e9fbaSOystein Eftevaag size = TPM2_SHA256_DIGEST_SIZE;
1149*758e9fbaSOystein Eftevaag buffer = &in->sha256[0];
1150*758e9fbaSOystein Eftevaag break;
1151*758e9fbaSOystein Eftevaag case TPM2_ALG_SHA384:
1152*758e9fbaSOystein Eftevaag size = TPM2_SHA384_DIGEST_SIZE;
1153*758e9fbaSOystein Eftevaag buffer = &in->sha384[0];
1154*758e9fbaSOystein Eftevaag break;
1155*758e9fbaSOystein Eftevaag case TPM2_ALG_SHA512:
1156*758e9fbaSOystein Eftevaag size = TPM2_SHA512_DIGEST_SIZE;
1157*758e9fbaSOystein Eftevaag buffer = &in->sha512[0];
1158*758e9fbaSOystein Eftevaag break;
1159*758e9fbaSOystein Eftevaag default:
1160*758e9fbaSOystein Eftevaag LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
1161*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
1162*758e9fbaSOystein Eftevaag };
1163*758e9fbaSOystein Eftevaag char hex_string[(size) * 2 + 1];
1164*758e9fbaSOystein Eftevaag for (size_t i = 0, off = 0; i < size; i++, off += 2)
1165*758e9fbaSOystein Eftevaag sprintf(&hex_string[off], "%02x", buffer[i]);
1166*758e9fbaSOystein Eftevaag hex_string[(size) * 2] = '\0';
1167*758e9fbaSOystein Eftevaag *jso = json_object_new_string(hex_string);
1168*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
1169*758e9fbaSOystein Eftevaag
1170*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1171*758e9fbaSOystein Eftevaag }
1172*758e9fbaSOystein Eftevaag
1173*758e9fbaSOystein Eftevaag /** Serialize value of type TPMT_HA to json.
1174*758e9fbaSOystein Eftevaag *
1175*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1176*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1177*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1178*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1179*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_HA.
1180*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1181*758e9fbaSOystein Eftevaag */
1182*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMT_HA_serialize(const TPMT_HA * in,json_object ** jso)1183*758e9fbaSOystein Eftevaag ifapi_json_TPMT_HA_serialize(const TPMT_HA *in, json_object **jso)
1184*758e9fbaSOystein Eftevaag {
1185*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1186*758e9fbaSOystein Eftevaag
1187*758e9fbaSOystein Eftevaag TSS2_RC r;
1188*758e9fbaSOystein Eftevaag json_object *jso2;
1189*758e9fbaSOystein Eftevaag if (*jso == NULL)
1190*758e9fbaSOystein Eftevaag *jso = json_object_new_object();
1191*758e9fbaSOystein Eftevaag jso2 = NULL;
1192*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_HASH_serialize(in->hashAlg, &jso2);
1193*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ALG_HASH");
1194*758e9fbaSOystein Eftevaag
1195*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "hashAlg", jso2);
1196*758e9fbaSOystein Eftevaag if (in->hashAlg != TPM2_ALG_NULL) {
1197*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
1198*758e9fbaSOystein Eftevaag r = ifapi_json_TPMU_HA_serialize(&in->digest, in->hashAlg, &jso2);
1199*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMU_HA");
1200*758e9fbaSOystein Eftevaag
1201*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "digest", jso2);
1202*758e9fbaSOystein Eftevaag }
1203*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1204*758e9fbaSOystein Eftevaag }
1205*758e9fbaSOystein Eftevaag
1206*758e9fbaSOystein Eftevaag /** Serialize value of type TPM2B_DIGEST to json.
1207*758e9fbaSOystein Eftevaag *
1208*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1209*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1210*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1211*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1212*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_DIGEST.
1213*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1214*758e9fbaSOystein Eftevaag */
1215*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2B_DIGEST_serialize(const TPM2B_DIGEST * in,json_object ** jso)1216*758e9fbaSOystein Eftevaag ifapi_json_TPM2B_DIGEST_serialize(const TPM2B_DIGEST *in, json_object **jso)
1217*758e9fbaSOystein Eftevaag {
1218*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1219*758e9fbaSOystein Eftevaag
1220*758e9fbaSOystein Eftevaag if (in->size > sizeof(TPMU_HA)) {
1221*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = sizeof(TPMU_HA))",
1222*758e9fbaSOystein Eftevaag (size_t)in->size, (size_t)sizeof(TPMU_HA));
1223*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
1224*758e9fbaSOystein Eftevaag }
1225*758e9fbaSOystein Eftevaag char hex_string[((size_t)in->size)*2+1];
1226*758e9fbaSOystein Eftevaag
1227*758e9fbaSOystein Eftevaag for (size_t i = 0, off = 0; i < in->size; i++, off+=2)
1228*758e9fbaSOystein Eftevaag sprintf(&hex_string[off], "%02x", in->buffer[i]);
1229*758e9fbaSOystein Eftevaag hex_string[(in->size)*2] = '\0';
1230*758e9fbaSOystein Eftevaag *jso = json_object_new_string (hex_string);
1231*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
1232*758e9fbaSOystein Eftevaag
1233*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1234*758e9fbaSOystein Eftevaag }
1235*758e9fbaSOystein Eftevaag
1236*758e9fbaSOystein Eftevaag /** Serialize value of type TPM2B_DATA to json.
1237*758e9fbaSOystein Eftevaag *
1238*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1239*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1240*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1241*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1242*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_DATA.
1243*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1244*758e9fbaSOystein Eftevaag */
1245*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2B_DATA_serialize(const TPM2B_DATA * in,json_object ** jso)1246*758e9fbaSOystein Eftevaag ifapi_json_TPM2B_DATA_serialize(const TPM2B_DATA *in, json_object **jso)
1247*758e9fbaSOystein Eftevaag {
1248*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1249*758e9fbaSOystein Eftevaag
1250*758e9fbaSOystein Eftevaag if (in->size > sizeof(TPMT_HA)) {
1251*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = sizeof(TPMT_HA))",
1252*758e9fbaSOystein Eftevaag (size_t)in->size, (size_t)sizeof(TPMT_HA));
1253*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
1254*758e9fbaSOystein Eftevaag }
1255*758e9fbaSOystein Eftevaag char hex_string[sizeof(TPMT_HA)*2+1];
1256*758e9fbaSOystein Eftevaag
1257*758e9fbaSOystein Eftevaag for (size_t i = 0, off = 0; i < in->size; i++, off+=2)
1258*758e9fbaSOystein Eftevaag sprintf(&hex_string[off], "%02x", in->buffer[i]);
1259*758e9fbaSOystein Eftevaag hex_string[(in->size)*2] = '\0';
1260*758e9fbaSOystein Eftevaag *jso = json_object_new_string (hex_string);
1261*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
1262*758e9fbaSOystein Eftevaag
1263*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1264*758e9fbaSOystein Eftevaag }
1265*758e9fbaSOystein Eftevaag
1266*758e9fbaSOystein Eftevaag /** Serialize a TPM2B_NONCE to json.
1267*758e9fbaSOystein Eftevaag *
1268*758e9fbaSOystein Eftevaag * @param[in] in value of type TPM2B_NONCE to be serialized.
1269*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1270*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1271*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1272*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_NONCE.
1273*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1274*758e9fbaSOystein Eftevaag */
1275*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2B_NONCE_serialize(const TPM2B_NONCE * in,json_object ** jso)1276*758e9fbaSOystein Eftevaag ifapi_json_TPM2B_NONCE_serialize(const TPM2B_NONCE *in, json_object **jso)
1277*758e9fbaSOystein Eftevaag {
1278*758e9fbaSOystein Eftevaag return ifapi_json_TPM2B_DIGEST_serialize(in, jso);
1279*758e9fbaSOystein Eftevaag }
1280*758e9fbaSOystein Eftevaag
1281*758e9fbaSOystein Eftevaag /** Serialize a TPM2B_OPERAND to json.
1282*758e9fbaSOystein Eftevaag *
1283*758e9fbaSOystein Eftevaag * @param[in] in value of type TPM2B_OPERAND to be serialized.
1284*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1285*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1286*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1287*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_OPERAND.
1288*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1289*758e9fbaSOystein Eftevaag */
1290*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2B_OPERAND_serialize(const TPM2B_OPERAND * in,json_object ** jso)1291*758e9fbaSOystein Eftevaag ifapi_json_TPM2B_OPERAND_serialize(const TPM2B_OPERAND *in, json_object **jso)
1292*758e9fbaSOystein Eftevaag {
1293*758e9fbaSOystein Eftevaag return ifapi_json_TPM2B_DIGEST_serialize(in, jso);
1294*758e9fbaSOystein Eftevaag }
1295*758e9fbaSOystein Eftevaag
1296*758e9fbaSOystein Eftevaag /** Serialize value of type TPM2B_EVENT to json.
1297*758e9fbaSOystein Eftevaag *
1298*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1299*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1300*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1301*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1302*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_EVENT.
1303*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1304*758e9fbaSOystein Eftevaag */
1305*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2B_EVENT_serialize(const TPM2B_EVENT * in,json_object ** jso)1306*758e9fbaSOystein Eftevaag ifapi_json_TPM2B_EVENT_serialize(const TPM2B_EVENT *in, json_object **jso)
1307*758e9fbaSOystein Eftevaag {
1308*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1309*758e9fbaSOystein Eftevaag
1310*758e9fbaSOystein Eftevaag if (in->size > 1024) {
1311*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = 1024)",
1312*758e9fbaSOystein Eftevaag (size_t)in->size, (size_t)1024);
1313*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
1314*758e9fbaSOystein Eftevaag }
1315*758e9fbaSOystein Eftevaag char hex_string[((size_t)in->size)*2+1];
1316*758e9fbaSOystein Eftevaag
1317*758e9fbaSOystein Eftevaag for (size_t i = 0, off = 0; i < in->size; i++, off+=2)
1318*758e9fbaSOystein Eftevaag sprintf(&hex_string[off], "%02x", in->buffer[i]);
1319*758e9fbaSOystein Eftevaag hex_string[(in->size)*2] = '\0';
1320*758e9fbaSOystein Eftevaag *jso = json_object_new_string (hex_string);
1321*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
1322*758e9fbaSOystein Eftevaag
1323*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1324*758e9fbaSOystein Eftevaag }
1325*758e9fbaSOystein Eftevaag
1326*758e9fbaSOystein Eftevaag /** Serialize value of type TPM2B_MAX_NV_BUFFER to json.
1327*758e9fbaSOystein Eftevaag *
1328*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1329*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1330*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1331*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1332*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_MAX_NV_BUFFER.
1333*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1334*758e9fbaSOystein Eftevaag */
1335*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2B_MAX_NV_BUFFER_serialize(const TPM2B_MAX_NV_BUFFER * in,json_object ** jso)1336*758e9fbaSOystein Eftevaag ifapi_json_TPM2B_MAX_NV_BUFFER_serialize(const TPM2B_MAX_NV_BUFFER *in, json_object **jso)
1337*758e9fbaSOystein Eftevaag {
1338*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1339*758e9fbaSOystein Eftevaag
1340*758e9fbaSOystein Eftevaag if (in->size > TPM2_MAX_NV_BUFFER_SIZE) {
1341*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_NV_BUFFER_SIZE)",
1342*758e9fbaSOystein Eftevaag (size_t)in->size, (size_t)TPM2_MAX_NV_BUFFER_SIZE);
1343*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
1344*758e9fbaSOystein Eftevaag }
1345*758e9fbaSOystein Eftevaag char hex_string[((size_t)in->size)*2+1];
1346*758e9fbaSOystein Eftevaag
1347*758e9fbaSOystein Eftevaag for (size_t i = 0, off = 0; i < in->size; i++, off+=2)
1348*758e9fbaSOystein Eftevaag sprintf(&hex_string[off], "%02x", in->buffer[i]);
1349*758e9fbaSOystein Eftevaag hex_string[(in->size)*2] = '\0';
1350*758e9fbaSOystein Eftevaag *jso = json_object_new_string (hex_string);
1351*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
1352*758e9fbaSOystein Eftevaag
1353*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1354*758e9fbaSOystein Eftevaag }
1355*758e9fbaSOystein Eftevaag
1356*758e9fbaSOystein Eftevaag /** Serialize value of type TPM2B_NAME to json.
1357*758e9fbaSOystein Eftevaag *
1358*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1359*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1360*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1361*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1362*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_NAME.
1363*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1364*758e9fbaSOystein Eftevaag */
1365*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2B_NAME_serialize(const TPM2B_NAME * in,json_object ** jso)1366*758e9fbaSOystein Eftevaag ifapi_json_TPM2B_NAME_serialize(const TPM2B_NAME *in, json_object **jso)
1367*758e9fbaSOystein Eftevaag {
1368*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1369*758e9fbaSOystein Eftevaag
1370*758e9fbaSOystein Eftevaag if (in->size > sizeof(TPMU_NAME)) {
1371*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = sizeof(TPMU_NAME))",
1372*758e9fbaSOystein Eftevaag (size_t)in->size, (size_t)sizeof(TPMU_NAME));
1373*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
1374*758e9fbaSOystein Eftevaag }
1375*758e9fbaSOystein Eftevaag char hex_string[((size_t)in->size)*2+1];
1376*758e9fbaSOystein Eftevaag
1377*758e9fbaSOystein Eftevaag for (size_t i = 0, off = 0; i < in->size; i++, off+=2)
1378*758e9fbaSOystein Eftevaag sprintf(&hex_string[off], "%02x", in->name[i]);
1379*758e9fbaSOystein Eftevaag hex_string[(in->size)*2] = '\0';
1380*758e9fbaSOystein Eftevaag *jso = json_object_new_string (hex_string);
1381*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
1382*758e9fbaSOystein Eftevaag
1383*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1384*758e9fbaSOystein Eftevaag }
1385*758e9fbaSOystein Eftevaag
1386*758e9fbaSOystein Eftevaag /** Serialize value of type TPMT_TK_CREATION to json.
1387*758e9fbaSOystein Eftevaag *
1388*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1389*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1390*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1391*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1392*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_TK_CREATION.
1393*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1394*758e9fbaSOystein Eftevaag */
1395*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMT_TK_CREATION_serialize(const TPMT_TK_CREATION * in,json_object ** jso)1396*758e9fbaSOystein Eftevaag ifapi_json_TPMT_TK_CREATION_serialize(const TPMT_TK_CREATION *in, json_object **jso)
1397*758e9fbaSOystein Eftevaag {
1398*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1399*758e9fbaSOystein Eftevaag
1400*758e9fbaSOystein Eftevaag TSS2_RC r;
1401*758e9fbaSOystein Eftevaag json_object *jso2;
1402*758e9fbaSOystein Eftevaag if (*jso == NULL)
1403*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
1404*758e9fbaSOystein Eftevaag if (in != NULL && in->tag != TPM2_ST_CREATION) {
1405*758e9fbaSOystein Eftevaag LOG_ERROR("BAD VALUE %"PRIuPTR" != %"PRIuPTR,(size_t)in->tag,(size_t)TPM2_ST_CREATION);
1406*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
1407*758e9fbaSOystein Eftevaag }
1408*758e9fbaSOystein Eftevaag jso2 = NULL;
1409*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2_ST_serialize(in->tag, &jso2);
1410*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2_ST");
1411*758e9fbaSOystein Eftevaag
1412*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "tag", jso2);
1413*758e9fbaSOystein Eftevaag jso2 = NULL;
1414*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_RH_HIERARCHY_serialize(in->hierarchy, &jso2);
1415*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_RH_HIERARCHY");
1416*758e9fbaSOystein Eftevaag
1417*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "hierarchy", jso2);
1418*758e9fbaSOystein Eftevaag jso2 = NULL;
1419*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_DIGEST_serialize(&in->digest, &jso2);
1420*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_DIGEST");
1421*758e9fbaSOystein Eftevaag
1422*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "digest", jso2);
1423*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1424*758e9fbaSOystein Eftevaag }
1425*758e9fbaSOystein Eftevaag
1426*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_ALG_PROPERTY to json.
1427*758e9fbaSOystein Eftevaag *
1428*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1429*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1430*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1431*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1432*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_ALG_PROPERTY.
1433*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1434*758e9fbaSOystein Eftevaag */
1435*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_ALG_PROPERTY_serialize(const TPMS_ALG_PROPERTY * in,json_object ** jso)1436*758e9fbaSOystein Eftevaag ifapi_json_TPMS_ALG_PROPERTY_serialize(const TPMS_ALG_PROPERTY *in, json_object **jso)
1437*758e9fbaSOystein Eftevaag {
1438*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1439*758e9fbaSOystein Eftevaag
1440*758e9fbaSOystein Eftevaag TSS2_RC r;
1441*758e9fbaSOystein Eftevaag json_object *jso2;
1442*758e9fbaSOystein Eftevaag if (*jso == NULL)
1443*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
1444*758e9fbaSOystein Eftevaag jso2 = NULL;
1445*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2_ALG_ID_serialize(in->alg, &jso2);
1446*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2_ALG_ID");
1447*758e9fbaSOystein Eftevaag
1448*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "alg", jso2);
1449*758e9fbaSOystein Eftevaag jso2 = NULL;
1450*758e9fbaSOystein Eftevaag r = ifapi_json_TPMA_ALGORITHM_serialize(in->algProperties, &jso2);
1451*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMA_ALGORITHM");
1452*758e9fbaSOystein Eftevaag
1453*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "algProperties", jso2);
1454*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1455*758e9fbaSOystein Eftevaag }
1456*758e9fbaSOystein Eftevaag
1457*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_TAGGED_PROPERTY to json.
1458*758e9fbaSOystein Eftevaag *
1459*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1460*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1461*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1462*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1463*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_TAGGED_PROPERTY.
1464*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1465*758e9fbaSOystein Eftevaag */
1466*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_TAGGED_PROPERTY_serialize(const TPMS_TAGGED_PROPERTY * in,json_object ** jso)1467*758e9fbaSOystein Eftevaag ifapi_json_TPMS_TAGGED_PROPERTY_serialize(const TPMS_TAGGED_PROPERTY *in, json_object **jso)
1468*758e9fbaSOystein Eftevaag {
1469*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1470*758e9fbaSOystein Eftevaag
1471*758e9fbaSOystein Eftevaag TSS2_RC r;
1472*758e9fbaSOystein Eftevaag json_object *jso2;
1473*758e9fbaSOystein Eftevaag if (*jso == NULL)
1474*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
1475*758e9fbaSOystein Eftevaag jso2 = NULL;
1476*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2_PT_serialize(in->property, &jso2);
1477*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2_PT");
1478*758e9fbaSOystein Eftevaag
1479*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "property", jso2);
1480*758e9fbaSOystein Eftevaag jso2 = NULL;
1481*758e9fbaSOystein Eftevaag r = ifapi_json_UINT32_serialize(in->value, &jso2);
1482*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize UINT32");
1483*758e9fbaSOystein Eftevaag
1484*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "value", jso2);
1485*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1486*758e9fbaSOystein Eftevaag }
1487*758e9fbaSOystein Eftevaag
1488*758e9fbaSOystein Eftevaag /** Serialize value of type TPML_CC to json.
1489*758e9fbaSOystein Eftevaag *
1490*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1491*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1492*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1493*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1494*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPML_CC.
1495*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1496*758e9fbaSOystein Eftevaag */
1497*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPML_CC_serialize(const TPML_CC * in,json_object ** jso)1498*758e9fbaSOystein Eftevaag ifapi_json_TPML_CC_serialize(const TPML_CC *in, json_object **jso)
1499*758e9fbaSOystein Eftevaag {
1500*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1501*758e9fbaSOystein Eftevaag
1502*758e9fbaSOystein Eftevaag TSS2_RC r;
1503*758e9fbaSOystein Eftevaag if (in->count > TPM2_MAX_CAP_CC) {
1504*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_CAP_CC)",
1505*758e9fbaSOystein Eftevaag (size_t)in->count, (size_t)TPM2_MAX_CAP_CC);
1506*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
1507*758e9fbaSOystein Eftevaag }
1508*758e9fbaSOystein Eftevaag *jso = json_object_new_array();
1509*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
1510*758e9fbaSOystein Eftevaag
1511*758e9fbaSOystein Eftevaag for (size_t i=0; i < in->count; i++) {
1512*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
1513*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2_CC_serialize (in->commandCodes[i], &jso2);
1514*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2_CC");
1515*758e9fbaSOystein Eftevaag
1516*758e9fbaSOystein Eftevaag json_object_array_add(*jso, jso2);
1517*758e9fbaSOystein Eftevaag }
1518*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1519*758e9fbaSOystein Eftevaag }
1520*758e9fbaSOystein Eftevaag
1521*758e9fbaSOystein Eftevaag /** Serialize value of type TPML_CCA to json.
1522*758e9fbaSOystein Eftevaag *
1523*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1524*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1525*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1526*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1527*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPML_CCA.
1528*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1529*758e9fbaSOystein Eftevaag */
1530*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPML_CCA_serialize(const TPML_CCA * in,json_object ** jso)1531*758e9fbaSOystein Eftevaag ifapi_json_TPML_CCA_serialize(const TPML_CCA *in, json_object **jso)
1532*758e9fbaSOystein Eftevaag {
1533*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1534*758e9fbaSOystein Eftevaag
1535*758e9fbaSOystein Eftevaag TSS2_RC r;
1536*758e9fbaSOystein Eftevaag if (in->count > TPM2_MAX_CAP_CC) {
1537*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_CAP_CC)",
1538*758e9fbaSOystein Eftevaag (size_t)in->count, (size_t)TPM2_MAX_CAP_CC);
1539*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
1540*758e9fbaSOystein Eftevaag }
1541*758e9fbaSOystein Eftevaag *jso = json_object_new_array();
1542*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
1543*758e9fbaSOystein Eftevaag
1544*758e9fbaSOystein Eftevaag for (size_t i=0; i < in->count; i++) {
1545*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
1546*758e9fbaSOystein Eftevaag r = ifapi_json_TPMA_CC_serialize (in->commandAttributes[i], &jso2);
1547*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMA_CC");
1548*758e9fbaSOystein Eftevaag
1549*758e9fbaSOystein Eftevaag json_object_array_add(*jso, jso2);
1550*758e9fbaSOystein Eftevaag }
1551*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1552*758e9fbaSOystein Eftevaag }
1553*758e9fbaSOystein Eftevaag
1554*758e9fbaSOystein Eftevaag /** Serialize value of type TPML_HANDLE to json.
1555*758e9fbaSOystein Eftevaag *
1556*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1557*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1558*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1559*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1560*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPML_HANDLE.
1561*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1562*758e9fbaSOystein Eftevaag */
1563*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPML_HANDLE_serialize(const TPML_HANDLE * in,json_object ** jso)1564*758e9fbaSOystein Eftevaag ifapi_json_TPML_HANDLE_serialize(const TPML_HANDLE *in, json_object **jso)
1565*758e9fbaSOystein Eftevaag {
1566*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1567*758e9fbaSOystein Eftevaag
1568*758e9fbaSOystein Eftevaag TSS2_RC r;
1569*758e9fbaSOystein Eftevaag if (in->count > TPM2_MAX_CAP_HANDLES) {
1570*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_CAP_HANDLES)",
1571*758e9fbaSOystein Eftevaag (size_t)in->count, (size_t)TPM2_MAX_CAP_HANDLES);
1572*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
1573*758e9fbaSOystein Eftevaag }
1574*758e9fbaSOystein Eftevaag *jso = json_object_new_array();
1575*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
1576*758e9fbaSOystein Eftevaag
1577*758e9fbaSOystein Eftevaag for (size_t i=0; i < in->count; i++) {
1578*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
1579*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2_HANDLE_serialize (in->handle[i], &jso2);
1580*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2_HANDLE");
1581*758e9fbaSOystein Eftevaag
1582*758e9fbaSOystein Eftevaag json_object_array_add(*jso, jso2);
1583*758e9fbaSOystein Eftevaag }
1584*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1585*758e9fbaSOystein Eftevaag }
1586*758e9fbaSOystein Eftevaag
1587*758e9fbaSOystein Eftevaag /** Serialize value of type TPML_DIGEST_VALUES to json.
1588*758e9fbaSOystein Eftevaag *
1589*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1590*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1591*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1592*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1593*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPML_DIGEST_VALUES.
1594*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1595*758e9fbaSOystein Eftevaag */
1596*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPML_DIGEST_VALUES_serialize(const TPML_DIGEST_VALUES * in,json_object ** jso)1597*758e9fbaSOystein Eftevaag ifapi_json_TPML_DIGEST_VALUES_serialize(const TPML_DIGEST_VALUES *in, json_object **jso)
1598*758e9fbaSOystein Eftevaag {
1599*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1600*758e9fbaSOystein Eftevaag
1601*758e9fbaSOystein Eftevaag TSS2_RC r;
1602*758e9fbaSOystein Eftevaag if (in->count > TPM2_NUM_PCR_BANKS) {
1603*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_NUM_PCR_BANKS)",
1604*758e9fbaSOystein Eftevaag (size_t)in->count, (size_t)TPM2_NUM_PCR_BANKS);
1605*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
1606*758e9fbaSOystein Eftevaag }
1607*758e9fbaSOystein Eftevaag *jso = json_object_new_array();
1608*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
1609*758e9fbaSOystein Eftevaag
1610*758e9fbaSOystein Eftevaag for (size_t i=0; i < in->count; i++) {
1611*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
1612*758e9fbaSOystein Eftevaag r = ifapi_json_TPMT_HA_serialize (&in->digests[i], &jso2);
1613*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMT_HA");
1614*758e9fbaSOystein Eftevaag
1615*758e9fbaSOystein Eftevaag json_object_array_add(*jso, jso2);
1616*758e9fbaSOystein Eftevaag }
1617*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1618*758e9fbaSOystein Eftevaag }
1619*758e9fbaSOystein Eftevaag
1620*758e9fbaSOystein Eftevaag /** Serialize value of type TPML_PCR_SELECTION to json.
1621*758e9fbaSOystein Eftevaag *
1622*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1623*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1624*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1625*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1626*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPML_PCR_SELECTION.
1627*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1628*758e9fbaSOystein Eftevaag */
1629*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPML_PCR_SELECTION_serialize(const TPML_PCR_SELECTION * in,json_object ** jso)1630*758e9fbaSOystein Eftevaag ifapi_json_TPML_PCR_SELECTION_serialize(const TPML_PCR_SELECTION *in, json_object **jso)
1631*758e9fbaSOystein Eftevaag {
1632*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1633*758e9fbaSOystein Eftevaag
1634*758e9fbaSOystein Eftevaag TSS2_RC r;
1635*758e9fbaSOystein Eftevaag if (in->count > TPM2_NUM_PCR_BANKS) {
1636*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_NUM_PCR_BANKS)",
1637*758e9fbaSOystein Eftevaag (size_t)in->count, (size_t)TPM2_NUM_PCR_BANKS);
1638*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
1639*758e9fbaSOystein Eftevaag }
1640*758e9fbaSOystein Eftevaag *jso = json_object_new_array();
1641*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
1642*758e9fbaSOystein Eftevaag
1643*758e9fbaSOystein Eftevaag for (size_t i=0; i < in->count; i++) {
1644*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
1645*758e9fbaSOystein Eftevaag r = ifapi_json_TPMS_PCR_SELECTION_serialize (&in->pcrSelections[i], &jso2);
1646*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMS_PCR_SELECTION");
1647*758e9fbaSOystein Eftevaag
1648*758e9fbaSOystein Eftevaag json_object_array_add(*jso, jso2);
1649*758e9fbaSOystein Eftevaag }
1650*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1651*758e9fbaSOystein Eftevaag }
1652*758e9fbaSOystein Eftevaag
1653*758e9fbaSOystein Eftevaag /** Serialize value of type TPML_ALG_PROPERTY to json.
1654*758e9fbaSOystein Eftevaag *
1655*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1656*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1657*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1658*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1659*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPML_ALG_PROPERTY.
1660*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1661*758e9fbaSOystein Eftevaag */
1662*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPML_ALG_PROPERTY_serialize(const TPML_ALG_PROPERTY * in,json_object ** jso)1663*758e9fbaSOystein Eftevaag ifapi_json_TPML_ALG_PROPERTY_serialize(const TPML_ALG_PROPERTY *in, json_object **jso)
1664*758e9fbaSOystein Eftevaag {
1665*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1666*758e9fbaSOystein Eftevaag
1667*758e9fbaSOystein Eftevaag TSS2_RC r;
1668*758e9fbaSOystein Eftevaag if (in->count > TPM2_MAX_CAP_ALGS) {
1669*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_CAP_ALGS)",
1670*758e9fbaSOystein Eftevaag (size_t)in->count, (size_t)TPM2_MAX_CAP_ALGS);
1671*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
1672*758e9fbaSOystein Eftevaag }
1673*758e9fbaSOystein Eftevaag *jso = json_object_new_array();
1674*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
1675*758e9fbaSOystein Eftevaag
1676*758e9fbaSOystein Eftevaag for (size_t i=0; i < in->count; i++) {
1677*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
1678*758e9fbaSOystein Eftevaag r = ifapi_json_TPMS_ALG_PROPERTY_serialize (&in->algProperties[i], &jso2);
1679*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMS_ALG_PROPERTY");
1680*758e9fbaSOystein Eftevaag
1681*758e9fbaSOystein Eftevaag json_object_array_add(*jso, jso2);
1682*758e9fbaSOystein Eftevaag }
1683*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1684*758e9fbaSOystein Eftevaag }
1685*758e9fbaSOystein Eftevaag
1686*758e9fbaSOystein Eftevaag /** Serialize value of type TPML_TAGGED_TPM_PROPERTY to json.
1687*758e9fbaSOystein Eftevaag *
1688*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1689*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1690*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1691*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1692*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPML_TAGGED_TPM_PROPERTY.
1693*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1694*758e9fbaSOystein Eftevaag */
1695*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPML_TAGGED_TPM_PROPERTY_serialize(const TPML_TAGGED_TPM_PROPERTY * in,json_object ** jso)1696*758e9fbaSOystein Eftevaag ifapi_json_TPML_TAGGED_TPM_PROPERTY_serialize(const TPML_TAGGED_TPM_PROPERTY *in, json_object **jso)
1697*758e9fbaSOystein Eftevaag {
1698*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1699*758e9fbaSOystein Eftevaag
1700*758e9fbaSOystein Eftevaag TSS2_RC r;
1701*758e9fbaSOystein Eftevaag if (in->count > TPM2_MAX_TPM_PROPERTIES) {
1702*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_TPM_PROPERTIES)",
1703*758e9fbaSOystein Eftevaag (size_t)in->count, (size_t)TPM2_MAX_TPM_PROPERTIES);
1704*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
1705*758e9fbaSOystein Eftevaag }
1706*758e9fbaSOystein Eftevaag *jso = json_object_new_array();
1707*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
1708*758e9fbaSOystein Eftevaag
1709*758e9fbaSOystein Eftevaag for (size_t i=0; i < in->count; i++) {
1710*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
1711*758e9fbaSOystein Eftevaag r = ifapi_json_TPMS_TAGGED_PROPERTY_serialize (&in->tpmProperty[i], &jso2);
1712*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMS_TAGGED_PROPERTY");
1713*758e9fbaSOystein Eftevaag
1714*758e9fbaSOystein Eftevaag json_object_array_add(*jso, jso2);
1715*758e9fbaSOystein Eftevaag }
1716*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1717*758e9fbaSOystein Eftevaag }
1718*758e9fbaSOystein Eftevaag
1719*758e9fbaSOystein Eftevaag /** Serialize value of type TPML_TAGGED_PCR_PROPERTY to json.
1720*758e9fbaSOystein Eftevaag *
1721*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1722*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1723*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1724*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1725*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPML_TAGGED_PCR_PROPERTY.
1726*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1727*758e9fbaSOystein Eftevaag */
1728*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPML_TAGGED_PCR_PROPERTY_serialize(const TPML_TAGGED_PCR_PROPERTY * in,json_object ** jso)1729*758e9fbaSOystein Eftevaag ifapi_json_TPML_TAGGED_PCR_PROPERTY_serialize(const TPML_TAGGED_PCR_PROPERTY *in, json_object **jso)
1730*758e9fbaSOystein Eftevaag {
1731*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1732*758e9fbaSOystein Eftevaag
1733*758e9fbaSOystein Eftevaag TSS2_RC r;
1734*758e9fbaSOystein Eftevaag if (in->count > TPM2_MAX_PCR_PROPERTIES) {
1735*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_PCR_PROPERTIES)",
1736*758e9fbaSOystein Eftevaag (size_t)in->count, (size_t)TPM2_MAX_PCR_PROPERTIES);
1737*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
1738*758e9fbaSOystein Eftevaag }
1739*758e9fbaSOystein Eftevaag *jso = json_object_new_array();
1740*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
1741*758e9fbaSOystein Eftevaag
1742*758e9fbaSOystein Eftevaag for (size_t i=0; i < in->count; i++) {
1743*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
1744*758e9fbaSOystein Eftevaag r = ifapi_json_TPMS_TAGGED_PCR_SELECT_serialize (&in->pcrProperty[i], &jso2);
1745*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMS_TAGGED_PCR_SELECT");
1746*758e9fbaSOystein Eftevaag
1747*758e9fbaSOystein Eftevaag json_object_array_add(*jso, jso2);
1748*758e9fbaSOystein Eftevaag }
1749*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1750*758e9fbaSOystein Eftevaag }
1751*758e9fbaSOystein Eftevaag
1752*758e9fbaSOystein Eftevaag /** Serialize value of type TPML_ECC_CURVE to json.
1753*758e9fbaSOystein Eftevaag *
1754*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1755*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1756*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1757*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1758*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPML_ECC_CURVE.
1759*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1760*758e9fbaSOystein Eftevaag */
1761*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPML_ECC_CURVE_serialize(const TPML_ECC_CURVE * in,json_object ** jso)1762*758e9fbaSOystein Eftevaag ifapi_json_TPML_ECC_CURVE_serialize(const TPML_ECC_CURVE *in, json_object **jso)
1763*758e9fbaSOystein Eftevaag {
1764*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1765*758e9fbaSOystein Eftevaag
1766*758e9fbaSOystein Eftevaag TSS2_RC r;
1767*758e9fbaSOystein Eftevaag if (in->count > TPM2_MAX_ECC_CURVES) {
1768*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_ECC_CURVES)",
1769*758e9fbaSOystein Eftevaag (size_t)in->count, (size_t)TPM2_MAX_ECC_CURVES);
1770*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
1771*758e9fbaSOystein Eftevaag }
1772*758e9fbaSOystein Eftevaag *jso = json_object_new_array();
1773*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
1774*758e9fbaSOystein Eftevaag
1775*758e9fbaSOystein Eftevaag for (size_t i=0; i < in->count; i++) {
1776*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
1777*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2_ECC_CURVE_serialize (in->eccCurves[i], &jso2);
1778*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2_ECC_CURVE");
1779*758e9fbaSOystein Eftevaag
1780*758e9fbaSOystein Eftevaag json_object_array_add(*jso, jso2);
1781*758e9fbaSOystein Eftevaag }
1782*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1783*758e9fbaSOystein Eftevaag }
1784*758e9fbaSOystein Eftevaag
1785*758e9fbaSOystein Eftevaag /** Serialize a TPMU_CAPABILITIES to json.
1786*758e9fbaSOystein Eftevaag *
1787*758e9fbaSOystein Eftevaag * This function expects the Bitfield to be encoded as unsigned int in host-endianess.
1788*758e9fbaSOystein Eftevaag * @param[in] in the value to be serialized.
1789*758e9fbaSOystein Eftevaag * @param[in] selector the type of the capabilities.
1790*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1791*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1792*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1793*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_CAPABILITIES.
1794*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1795*758e9fbaSOystein Eftevaag */
1796*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMU_CAPABILITIES_serialize(const TPMU_CAPABILITIES * in,UINT32 selector,json_object ** jso)1797*758e9fbaSOystein Eftevaag ifapi_json_TPMU_CAPABILITIES_serialize(const TPMU_CAPABILITIES *in, UINT32 selector, json_object **jso)
1798*758e9fbaSOystein Eftevaag {
1799*758e9fbaSOystein Eftevaag switch (selector) {
1800*758e9fbaSOystein Eftevaag case TPM2_CAP_ALGS:
1801*758e9fbaSOystein Eftevaag return ifapi_json_TPML_ALG_PROPERTY_serialize(&in->algorithms, jso);
1802*758e9fbaSOystein Eftevaag case TPM2_CAP_HANDLES:
1803*758e9fbaSOystein Eftevaag return ifapi_json_TPML_HANDLE_serialize(&in->handles, jso);
1804*758e9fbaSOystein Eftevaag case TPM2_CAP_COMMANDS:
1805*758e9fbaSOystein Eftevaag return ifapi_json_TPML_CCA_serialize(&in->command, jso);
1806*758e9fbaSOystein Eftevaag case TPM2_CAP_PP_COMMANDS:
1807*758e9fbaSOystein Eftevaag return ifapi_json_TPML_CC_serialize(&in->ppCommands, jso);
1808*758e9fbaSOystein Eftevaag case TPM2_CAP_AUDIT_COMMANDS:
1809*758e9fbaSOystein Eftevaag return ifapi_json_TPML_CC_serialize(&in->auditCommands, jso);
1810*758e9fbaSOystein Eftevaag case TPM2_CAP_PCRS:
1811*758e9fbaSOystein Eftevaag return ifapi_json_TPML_PCR_SELECTION_serialize(&in->assignedPCR, jso);
1812*758e9fbaSOystein Eftevaag case TPM2_CAP_TPM_PROPERTIES:
1813*758e9fbaSOystein Eftevaag return ifapi_json_TPML_TAGGED_TPM_PROPERTY_serialize(&in->tpmProperties, jso);
1814*758e9fbaSOystein Eftevaag case TPM2_CAP_PCR_PROPERTIES:
1815*758e9fbaSOystein Eftevaag return ifapi_json_TPML_TAGGED_PCR_PROPERTY_serialize(&in->pcrProperties, jso);
1816*758e9fbaSOystein Eftevaag case TPM2_CAP_ECC_CURVES:
1817*758e9fbaSOystein Eftevaag return ifapi_json_TPML_ECC_CURVE_serialize(&in->eccCurves, jso);
1818*758e9fbaSOystein Eftevaag default:
1819*758e9fbaSOystein Eftevaag LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
1820*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
1821*758e9fbaSOystein Eftevaag };
1822*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1823*758e9fbaSOystein Eftevaag }
1824*758e9fbaSOystein Eftevaag
1825*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_CAPABILITY_DATA to json.
1826*758e9fbaSOystein Eftevaag *
1827*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1828*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1829*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1830*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1831*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_CAPABILITY_DATA.
1832*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1833*758e9fbaSOystein Eftevaag */
1834*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_CAPABILITY_DATA_serialize(const TPMS_CAPABILITY_DATA * in,json_object ** jso)1835*758e9fbaSOystein Eftevaag ifapi_json_TPMS_CAPABILITY_DATA_serialize(const TPMS_CAPABILITY_DATA *in, json_object **jso)
1836*758e9fbaSOystein Eftevaag {
1837*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1838*758e9fbaSOystein Eftevaag
1839*758e9fbaSOystein Eftevaag TSS2_RC r;
1840*758e9fbaSOystein Eftevaag json_object *jso2;
1841*758e9fbaSOystein Eftevaag if (*jso == NULL)
1842*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
1843*758e9fbaSOystein Eftevaag jso2 = NULL;
1844*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2_CAP_serialize(in->capability, &jso2);
1845*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2_CAP");
1846*758e9fbaSOystein Eftevaag
1847*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "capability", jso2);
1848*758e9fbaSOystein Eftevaag jso2 = NULL;
1849*758e9fbaSOystein Eftevaag r = ifapi_json_TPMU_CAPABILITIES_serialize(&in->data, in->capability, &jso2);
1850*758e9fbaSOystein Eftevaag return_if_error(r,"Serialize TPMU_CAPABILITIES");
1851*758e9fbaSOystein Eftevaag
1852*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "data", jso2);
1853*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1854*758e9fbaSOystein Eftevaag }
1855*758e9fbaSOystein Eftevaag
1856*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_CLOCK_INFO to json.
1857*758e9fbaSOystein Eftevaag *
1858*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1859*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1860*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1861*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1862*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_CLOCK_INFO.
1863*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1864*758e9fbaSOystein Eftevaag */
1865*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_CLOCK_INFO_serialize(const TPMS_CLOCK_INFO * in,json_object ** jso)1866*758e9fbaSOystein Eftevaag ifapi_json_TPMS_CLOCK_INFO_serialize(const TPMS_CLOCK_INFO *in, json_object **jso)
1867*758e9fbaSOystein Eftevaag {
1868*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1869*758e9fbaSOystein Eftevaag
1870*758e9fbaSOystein Eftevaag TSS2_RC r;
1871*758e9fbaSOystein Eftevaag json_object *jso2;
1872*758e9fbaSOystein Eftevaag if (*jso == NULL)
1873*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
1874*758e9fbaSOystein Eftevaag jso2 = NULL;
1875*758e9fbaSOystein Eftevaag r = ifapi_json_UINT64_serialize(in->clock, &jso2);
1876*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize UINT64");
1877*758e9fbaSOystein Eftevaag
1878*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "clock", jso2);
1879*758e9fbaSOystein Eftevaag jso2 = NULL;
1880*758e9fbaSOystein Eftevaag r = ifapi_json_UINT32_serialize(in->resetCount, &jso2);
1881*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize UINT32");
1882*758e9fbaSOystein Eftevaag
1883*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "resetCount", jso2);
1884*758e9fbaSOystein Eftevaag jso2 = NULL;
1885*758e9fbaSOystein Eftevaag r = ifapi_json_UINT32_serialize(in->restartCount, &jso2);
1886*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize UINT32");
1887*758e9fbaSOystein Eftevaag
1888*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "restartCount", jso2);
1889*758e9fbaSOystein Eftevaag jso2 = NULL;
1890*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_YES_NO_serialize(in->safe, &jso2);
1891*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_YES_NO");
1892*758e9fbaSOystein Eftevaag
1893*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "safe", jso2);
1894*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1895*758e9fbaSOystein Eftevaag }
1896*758e9fbaSOystein Eftevaag
1897*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_TIME_INFO to json.
1898*758e9fbaSOystein Eftevaag *
1899*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1900*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1901*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1902*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1903*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_TIME_INFO.
1904*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1905*758e9fbaSOystein Eftevaag */
1906*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_TIME_INFO_serialize(const TPMS_TIME_INFO * in,json_object ** jso)1907*758e9fbaSOystein Eftevaag ifapi_json_TPMS_TIME_INFO_serialize(const TPMS_TIME_INFO *in, json_object **jso)
1908*758e9fbaSOystein Eftevaag {
1909*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1910*758e9fbaSOystein Eftevaag
1911*758e9fbaSOystein Eftevaag TSS2_RC r;
1912*758e9fbaSOystein Eftevaag json_object *jso2;
1913*758e9fbaSOystein Eftevaag if (*jso == NULL)
1914*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
1915*758e9fbaSOystein Eftevaag jso2 = NULL;
1916*758e9fbaSOystein Eftevaag r = ifapi_json_UINT64_serialize(in->time, &jso2);
1917*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize UINT64");
1918*758e9fbaSOystein Eftevaag
1919*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "time", jso2);
1920*758e9fbaSOystein Eftevaag jso2 = NULL;
1921*758e9fbaSOystein Eftevaag r = ifapi_json_TPMS_CLOCK_INFO_serialize(&in->clockInfo, &jso2);
1922*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMS_CLOCK_INFO");
1923*758e9fbaSOystein Eftevaag
1924*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "clockInfo", jso2);
1925*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1926*758e9fbaSOystein Eftevaag }
1927*758e9fbaSOystein Eftevaag
1928*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_TIME_ATTEST_INFO to json.
1929*758e9fbaSOystein Eftevaag *
1930*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1931*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1932*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1933*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1934*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_TIME_ATTEST_INFO.
1935*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1936*758e9fbaSOystein Eftevaag */
1937*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_TIME_ATTEST_INFO_serialize(const TPMS_TIME_ATTEST_INFO * in,json_object ** jso)1938*758e9fbaSOystein Eftevaag ifapi_json_TPMS_TIME_ATTEST_INFO_serialize(const TPMS_TIME_ATTEST_INFO *in, json_object **jso)
1939*758e9fbaSOystein Eftevaag {
1940*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1941*758e9fbaSOystein Eftevaag
1942*758e9fbaSOystein Eftevaag TSS2_RC r;
1943*758e9fbaSOystein Eftevaag json_object *jso2;
1944*758e9fbaSOystein Eftevaag if (*jso == NULL)
1945*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
1946*758e9fbaSOystein Eftevaag jso2 = NULL;
1947*758e9fbaSOystein Eftevaag r = ifapi_json_TPMS_TIME_INFO_serialize(&in->time, &jso2);
1948*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMS_TIME_INFO");
1949*758e9fbaSOystein Eftevaag
1950*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "time", jso2);
1951*758e9fbaSOystein Eftevaag jso2 = NULL;
1952*758e9fbaSOystein Eftevaag r = ifapi_json_UINT64_serialize(in->firmwareVersion, &jso2);
1953*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize UINT64");
1954*758e9fbaSOystein Eftevaag
1955*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "firmwareVersion", jso2);
1956*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1957*758e9fbaSOystein Eftevaag }
1958*758e9fbaSOystein Eftevaag
1959*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_CERTIFY_INFO to json.
1960*758e9fbaSOystein Eftevaag *
1961*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1962*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1963*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1964*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1965*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_CERTIFY_INFO.
1966*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1967*758e9fbaSOystein Eftevaag */
1968*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_CERTIFY_INFO_serialize(const TPMS_CERTIFY_INFO * in,json_object ** jso)1969*758e9fbaSOystein Eftevaag ifapi_json_TPMS_CERTIFY_INFO_serialize(const TPMS_CERTIFY_INFO *in, json_object **jso)
1970*758e9fbaSOystein Eftevaag {
1971*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
1972*758e9fbaSOystein Eftevaag
1973*758e9fbaSOystein Eftevaag TSS2_RC r;
1974*758e9fbaSOystein Eftevaag json_object *jso2;
1975*758e9fbaSOystein Eftevaag if (*jso == NULL)
1976*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
1977*758e9fbaSOystein Eftevaag jso2 = NULL;
1978*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_NAME_serialize(&in->name, &jso2);
1979*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_NAME");
1980*758e9fbaSOystein Eftevaag
1981*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "name", jso2);
1982*758e9fbaSOystein Eftevaag jso2 = NULL;
1983*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_NAME_serialize(&in->qualifiedName, &jso2);
1984*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_NAME");
1985*758e9fbaSOystein Eftevaag
1986*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "qualifiedName", jso2);
1987*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
1988*758e9fbaSOystein Eftevaag }
1989*758e9fbaSOystein Eftevaag
1990*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_QUOTE_INFO to json.
1991*758e9fbaSOystein Eftevaag *
1992*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
1993*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
1994*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
1995*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
1996*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_QUOTE_INFO.
1997*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
1998*758e9fbaSOystein Eftevaag */
1999*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_QUOTE_INFO_serialize(const TPMS_QUOTE_INFO * in,json_object ** jso)2000*758e9fbaSOystein Eftevaag ifapi_json_TPMS_QUOTE_INFO_serialize(const TPMS_QUOTE_INFO *in, json_object **jso)
2001*758e9fbaSOystein Eftevaag {
2002*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
2003*758e9fbaSOystein Eftevaag
2004*758e9fbaSOystein Eftevaag TSS2_RC r;
2005*758e9fbaSOystein Eftevaag json_object *jso2;
2006*758e9fbaSOystein Eftevaag if (*jso == NULL)
2007*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
2008*758e9fbaSOystein Eftevaag jso2 = NULL;
2009*758e9fbaSOystein Eftevaag r = ifapi_json_TPML_PCR_SELECTION_serialize(&in->pcrSelect, &jso2);
2010*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPML_PCR_SELECTION");
2011*758e9fbaSOystein Eftevaag
2012*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "pcrSelect", jso2);
2013*758e9fbaSOystein Eftevaag jso2 = NULL;
2014*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_DIGEST_serialize(&in->pcrDigest, &jso2);
2015*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_DIGEST");
2016*758e9fbaSOystein Eftevaag
2017*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "pcrDigest", jso2);
2018*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2019*758e9fbaSOystein Eftevaag }
2020*758e9fbaSOystein Eftevaag
2021*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_COMMAND_AUDIT_INFO to json.
2022*758e9fbaSOystein Eftevaag *
2023*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
2024*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2025*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2026*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2027*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_COMMAND_AUDIT_INFO.
2028*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2029*758e9fbaSOystein Eftevaag */
2030*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_COMMAND_AUDIT_INFO_serialize(const TPMS_COMMAND_AUDIT_INFO * in,json_object ** jso)2031*758e9fbaSOystein Eftevaag ifapi_json_TPMS_COMMAND_AUDIT_INFO_serialize(const TPMS_COMMAND_AUDIT_INFO *in, json_object **jso)
2032*758e9fbaSOystein Eftevaag {
2033*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
2034*758e9fbaSOystein Eftevaag
2035*758e9fbaSOystein Eftevaag TSS2_RC r;
2036*758e9fbaSOystein Eftevaag json_object *jso2;
2037*758e9fbaSOystein Eftevaag if (*jso == NULL)
2038*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
2039*758e9fbaSOystein Eftevaag jso2 = NULL;
2040*758e9fbaSOystein Eftevaag r = ifapi_json_UINT64_serialize(in->auditCounter, &jso2);
2041*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize UINT64");
2042*758e9fbaSOystein Eftevaag
2043*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "auditCounter", jso2);
2044*758e9fbaSOystein Eftevaag jso2 = NULL;
2045*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2_ALG_ID_serialize(in->digestAlg, &jso2);
2046*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2_ALG_ID");
2047*758e9fbaSOystein Eftevaag
2048*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "digestAlg", jso2);
2049*758e9fbaSOystein Eftevaag jso2 = NULL;
2050*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_DIGEST_serialize(&in->auditDigest, &jso2);
2051*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_DIGEST");
2052*758e9fbaSOystein Eftevaag
2053*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "auditDigest", jso2);
2054*758e9fbaSOystein Eftevaag jso2 = NULL;
2055*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_DIGEST_serialize(&in->commandDigest, &jso2);
2056*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_DIGEST");
2057*758e9fbaSOystein Eftevaag
2058*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "commandDigest", jso2);
2059*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2060*758e9fbaSOystein Eftevaag }
2061*758e9fbaSOystein Eftevaag
2062*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_SESSION_AUDIT_INFO to json.
2063*758e9fbaSOystein Eftevaag *
2064*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
2065*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2066*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2067*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2068*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SESSION_AUDIT_INFO.
2069*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2070*758e9fbaSOystein Eftevaag */
2071*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SESSION_AUDIT_INFO_serialize(const TPMS_SESSION_AUDIT_INFO * in,json_object ** jso)2072*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SESSION_AUDIT_INFO_serialize(const TPMS_SESSION_AUDIT_INFO *in, json_object **jso)
2073*758e9fbaSOystein Eftevaag {
2074*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
2075*758e9fbaSOystein Eftevaag
2076*758e9fbaSOystein Eftevaag TSS2_RC r;
2077*758e9fbaSOystein Eftevaag json_object *jso2;
2078*758e9fbaSOystein Eftevaag if (*jso == NULL)
2079*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
2080*758e9fbaSOystein Eftevaag jso2 = NULL;
2081*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_YES_NO_serialize(in->exclusiveSession, &jso2);
2082*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_YES_NO");
2083*758e9fbaSOystein Eftevaag
2084*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "exclusiveSession", jso2);
2085*758e9fbaSOystein Eftevaag jso2 = NULL;
2086*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_DIGEST_serialize(&in->sessionDigest, &jso2);
2087*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_DIGEST");
2088*758e9fbaSOystein Eftevaag
2089*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "sessionDigest", jso2);
2090*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2091*758e9fbaSOystein Eftevaag }
2092*758e9fbaSOystein Eftevaag
2093*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_CREATION_INFO to json.
2094*758e9fbaSOystein Eftevaag *
2095*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
2096*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2097*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2098*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2099*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_CREATION_INFO.
2100*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2101*758e9fbaSOystein Eftevaag */
2102*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_CREATION_INFO_serialize(const TPMS_CREATION_INFO * in,json_object ** jso)2103*758e9fbaSOystein Eftevaag ifapi_json_TPMS_CREATION_INFO_serialize(const TPMS_CREATION_INFO *in, json_object **jso)
2104*758e9fbaSOystein Eftevaag {
2105*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
2106*758e9fbaSOystein Eftevaag
2107*758e9fbaSOystein Eftevaag TSS2_RC r;
2108*758e9fbaSOystein Eftevaag json_object *jso2;
2109*758e9fbaSOystein Eftevaag if (*jso == NULL)
2110*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
2111*758e9fbaSOystein Eftevaag jso2 = NULL;
2112*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_NAME_serialize(&in->objectName, &jso2);
2113*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_NAME");
2114*758e9fbaSOystein Eftevaag
2115*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "objectName", jso2);
2116*758e9fbaSOystein Eftevaag jso2 = NULL;
2117*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_DIGEST_serialize(&in->creationHash, &jso2);
2118*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_DIGEST");
2119*758e9fbaSOystein Eftevaag
2120*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "creationHash", jso2);
2121*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2122*758e9fbaSOystein Eftevaag }
2123*758e9fbaSOystein Eftevaag
2124*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_NV_CERTIFY_INFO to json.
2125*758e9fbaSOystein Eftevaag *
2126*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
2127*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2128*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2129*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2130*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_NV_CERTIFY_INFO.
2131*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2132*758e9fbaSOystein Eftevaag */
2133*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_NV_CERTIFY_INFO_serialize(const TPMS_NV_CERTIFY_INFO * in,json_object ** jso)2134*758e9fbaSOystein Eftevaag ifapi_json_TPMS_NV_CERTIFY_INFO_serialize(const TPMS_NV_CERTIFY_INFO *in, json_object **jso)
2135*758e9fbaSOystein Eftevaag {
2136*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
2137*758e9fbaSOystein Eftevaag
2138*758e9fbaSOystein Eftevaag TSS2_RC r;
2139*758e9fbaSOystein Eftevaag json_object *jso2;
2140*758e9fbaSOystein Eftevaag if (*jso == NULL)
2141*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
2142*758e9fbaSOystein Eftevaag jso2 = NULL;
2143*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_NAME_serialize(&in->indexName, &jso2);
2144*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_NAME");
2145*758e9fbaSOystein Eftevaag
2146*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "indexName", jso2);
2147*758e9fbaSOystein Eftevaag jso2 = NULL;
2148*758e9fbaSOystein Eftevaag r = ifapi_json_UINT16_serialize(in->offset, &jso2);
2149*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize UINT16");
2150*758e9fbaSOystein Eftevaag
2151*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "offset", jso2);
2152*758e9fbaSOystein Eftevaag jso2 = NULL;
2153*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_MAX_NV_BUFFER_serialize(&in->nvContents, &jso2);
2154*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_MAX_NV_BUFFER");
2155*758e9fbaSOystein Eftevaag
2156*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "nvContents", jso2);
2157*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2158*758e9fbaSOystein Eftevaag }
2159*758e9fbaSOystein Eftevaag
2160*758e9fbaSOystein Eftevaag /** Serialize TPMI_ST_ATTEST to json.
2161*758e9fbaSOystein Eftevaag *
2162*758e9fbaSOystein Eftevaag * @param[in] in variable to be serialized.
2163*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2164*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
2165*758e9fbaSOystein Eftevaag * the function.
2166*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
2167*758e9fbaSOystein Eftevaag */
2168*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMI_ST_ATTEST_serialize(const TPMI_ST_ATTEST in,json_object ** jso)2169*758e9fbaSOystein Eftevaag ifapi_json_TPMI_ST_ATTEST_serialize(const TPMI_ST_ATTEST in, json_object **jso)
2170*758e9fbaSOystein Eftevaag {
2171*758e9fbaSOystein Eftevaag CHECK_IN_LIST(TPMI_ALG_HASH, in, TPM2_ST_ATTEST_CERTIFY, TPM2_ST_ATTEST_QUOTE,
2172*758e9fbaSOystein Eftevaag TPM2_ST_ATTEST_SESSION_AUDIT, TPM2_ST_ATTEST_COMMAND_AUDIT,
2173*758e9fbaSOystein Eftevaag TPM2_ST_ATTEST_TIME, TPM2_ST_ATTEST_CREATION, TPM2_ST_ATTEST_NV);
2174*758e9fbaSOystein Eftevaag return ifapi_json_TPM2_ST_serialize(in, jso);
2175*758e9fbaSOystein Eftevaag }
2176*758e9fbaSOystein Eftevaag
2177*758e9fbaSOystein Eftevaag /** Serialize a TPMU_ATTEST to json.
2178*758e9fbaSOystein Eftevaag *
2179*758e9fbaSOystein Eftevaag * This function expects the Bitfield to be encoded as unsigned int in host-endianess.
2180*758e9fbaSOystein Eftevaag * @param[in] in the value to be serialized.
2181*758e9fbaSOystein Eftevaag * @param[in] selector the type of the attest.
2182*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2183*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2184*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2185*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_ATTEST.
2186*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2187*758e9fbaSOystein Eftevaag */
2188*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMU_ATTEST_serialize(const TPMU_ATTEST * in,UINT32 selector,json_object ** jso)2189*758e9fbaSOystein Eftevaag ifapi_json_TPMU_ATTEST_serialize(const TPMU_ATTEST *in, UINT32 selector, json_object **jso)
2190*758e9fbaSOystein Eftevaag {
2191*758e9fbaSOystein Eftevaag switch (selector) {
2192*758e9fbaSOystein Eftevaag case TPM2_ST_ATTEST_CERTIFY:
2193*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_CERTIFY_INFO_serialize(&in->certify, jso);
2194*758e9fbaSOystein Eftevaag case TPM2_ST_ATTEST_CREATION:
2195*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_CREATION_INFO_serialize(&in->creation, jso);
2196*758e9fbaSOystein Eftevaag case TPM2_ST_ATTEST_QUOTE:
2197*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_QUOTE_INFO_serialize(&in->quote, jso);
2198*758e9fbaSOystein Eftevaag case TPM2_ST_ATTEST_COMMAND_AUDIT:
2199*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_COMMAND_AUDIT_INFO_serialize(&in->commandAudit, jso);
2200*758e9fbaSOystein Eftevaag case TPM2_ST_ATTEST_SESSION_AUDIT:
2201*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SESSION_AUDIT_INFO_serialize(&in->sessionAudit, jso);
2202*758e9fbaSOystein Eftevaag case TPM2_ST_ATTEST_TIME:
2203*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_TIME_ATTEST_INFO_serialize(&in->time, jso);
2204*758e9fbaSOystein Eftevaag case TPM2_ST_ATTEST_NV:
2205*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_NV_CERTIFY_INFO_serialize(&in->nv, jso);
2206*758e9fbaSOystein Eftevaag default:
2207*758e9fbaSOystein Eftevaag LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
2208*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
2209*758e9fbaSOystein Eftevaag };
2210*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2211*758e9fbaSOystein Eftevaag }
2212*758e9fbaSOystein Eftevaag
2213*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_ATTEST to json.
2214*758e9fbaSOystein Eftevaag *
2215*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
2216*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2217*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2218*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2219*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_ATTEST.
2220*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2221*758e9fbaSOystein Eftevaag */
2222*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_ATTEST_serialize(const TPMS_ATTEST * in,json_object ** jso)2223*758e9fbaSOystein Eftevaag ifapi_json_TPMS_ATTEST_serialize(const TPMS_ATTEST *in, json_object **jso)
2224*758e9fbaSOystein Eftevaag {
2225*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
2226*758e9fbaSOystein Eftevaag
2227*758e9fbaSOystein Eftevaag TSS2_RC r;
2228*758e9fbaSOystein Eftevaag json_object *jso2;
2229*758e9fbaSOystein Eftevaag if (*jso == NULL)
2230*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
2231*758e9fbaSOystein Eftevaag jso2 = NULL;
2232*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2_GENERATED_serialize(in->magic, &jso2);
2233*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2_GENERATED");
2234*758e9fbaSOystein Eftevaag
2235*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "magic", jso2);
2236*758e9fbaSOystein Eftevaag jso2 = NULL;
2237*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ST_ATTEST_serialize(in->type, &jso2);
2238*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ST_ATTEST");
2239*758e9fbaSOystein Eftevaag
2240*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "type", jso2);
2241*758e9fbaSOystein Eftevaag jso2 = NULL;
2242*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_NAME_serialize(&in->qualifiedSigner, &jso2);
2243*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_NAME");
2244*758e9fbaSOystein Eftevaag
2245*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "qualifiedSigner", jso2);
2246*758e9fbaSOystein Eftevaag jso2 = NULL;
2247*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_DATA_serialize(&in->extraData, &jso2);
2248*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_DATA");
2249*758e9fbaSOystein Eftevaag
2250*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "extraData", jso2);
2251*758e9fbaSOystein Eftevaag jso2 = NULL;
2252*758e9fbaSOystein Eftevaag r = ifapi_json_TPMS_CLOCK_INFO_serialize(&in->clockInfo, &jso2);
2253*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMS_CLOCK_INFO");
2254*758e9fbaSOystein Eftevaag
2255*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "clockInfo", jso2);
2256*758e9fbaSOystein Eftevaag jso2 = NULL;
2257*758e9fbaSOystein Eftevaag r = ifapi_json_UINT64_serialize(in->firmwareVersion, &jso2);
2258*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize UINT64");
2259*758e9fbaSOystein Eftevaag
2260*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "firmwareVersion", jso2);
2261*758e9fbaSOystein Eftevaag jso2 = NULL;
2262*758e9fbaSOystein Eftevaag r = ifapi_json_TPMU_ATTEST_serialize(&in->attested, in->type, &jso2);
2263*758e9fbaSOystein Eftevaag return_if_error(r,"Serialize TPMU_ATTEST");
2264*758e9fbaSOystein Eftevaag
2265*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "attested", jso2);
2266*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2267*758e9fbaSOystein Eftevaag }
2268*758e9fbaSOystein Eftevaag
2269*758e9fbaSOystein Eftevaag /** Serialize value of type TPMI_AES_KEY_BITS to json.
2270*758e9fbaSOystein Eftevaag *
2271*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
2272*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2273*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2274*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2275*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMI_AES_KEY_BITS.
2276*758e9fbaSOystein Eftevaag *
2277*758e9fbaSOystein Eftevaag */
2278*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMI_AES_KEY_BITS_serialize(const TPMI_AES_KEY_BITS in,json_object ** jso)2279*758e9fbaSOystein Eftevaag ifapi_json_TPMI_AES_KEY_BITS_serialize(const TPMI_AES_KEY_BITS in, json_object **jso)
2280*758e9fbaSOystein Eftevaag {
2281*758e9fbaSOystein Eftevaag CHECK_IN_LIST(UINT16, in, 128, 192, 256);
2282*758e9fbaSOystein Eftevaag return ifapi_json_UINT16_serialize(in, jso);
2283*758e9fbaSOystein Eftevaag }
2284*758e9fbaSOystein Eftevaag
2285*758e9fbaSOystein Eftevaag /** Serialize a TPMU_SYM_KEY_BITS to json.
2286*758e9fbaSOystein Eftevaag *
2287*758e9fbaSOystein Eftevaag * This function expects the Bitfield to be encoded as unsigned int in host-endianess.
2288*758e9fbaSOystein Eftevaag * @param[in] in the value to be serialized.
2289*758e9fbaSOystein Eftevaag * @param[in] selector the type of the symmetric algorithm.
2290*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2291*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2292*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2293*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_SYM_KEY_BITS.
2294*758e9fbaSOystein Eftevaag */
2295*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMU_SYM_KEY_BITS_serialize(const TPMU_SYM_KEY_BITS * in,UINT32 selector,json_object ** jso)2296*758e9fbaSOystein Eftevaag ifapi_json_TPMU_SYM_KEY_BITS_serialize(const TPMU_SYM_KEY_BITS *in, UINT32 selector, json_object **jso)
2297*758e9fbaSOystein Eftevaag {
2298*758e9fbaSOystein Eftevaag switch (selector) {
2299*758e9fbaSOystein Eftevaag case TPM2_ALG_AES:
2300*758e9fbaSOystein Eftevaag return ifapi_json_TPMI_AES_KEY_BITS_serialize(in->aes, jso);
2301*758e9fbaSOystein Eftevaag case TPM2_ALG_XOR:
2302*758e9fbaSOystein Eftevaag return ifapi_json_TPMI_ALG_HASH_serialize(in->exclusiveOr, jso);
2303*758e9fbaSOystein Eftevaag default:
2304*758e9fbaSOystein Eftevaag LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
2305*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
2306*758e9fbaSOystein Eftevaag };
2307*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2308*758e9fbaSOystein Eftevaag }
2309*758e9fbaSOystein Eftevaag
2310*758e9fbaSOystein Eftevaag /** Serialize a TPMU_SYM_MODE to json.
2311*758e9fbaSOystein Eftevaag *
2312*758e9fbaSOystein Eftevaag * This function expects the Bitfield to be encoded as unsigned int in host-endianess.
2313*758e9fbaSOystein Eftevaag * @param[in] in the value to be serialized.
2314*758e9fbaSOystein Eftevaag * @param[in] selector the type of the symmetric mode.
2315*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2316*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2317*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2318*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_SYM_MODE.
2319*758e9fbaSOystein Eftevaag */
2320*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMU_SYM_MODE_serialize(const TPMU_SYM_MODE * in,UINT32 selector,json_object ** jso)2321*758e9fbaSOystein Eftevaag ifapi_json_TPMU_SYM_MODE_serialize(const TPMU_SYM_MODE *in, UINT32 selector, json_object **jso)
2322*758e9fbaSOystein Eftevaag {
2323*758e9fbaSOystein Eftevaag switch (selector) {
2324*758e9fbaSOystein Eftevaag case TPM2_ALG_AES:
2325*758e9fbaSOystein Eftevaag return ifapi_json_TPMI_ALG_SYM_MODE_serialize(in->aes, jso);
2326*758e9fbaSOystein Eftevaag default:
2327*758e9fbaSOystein Eftevaag LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
2328*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
2329*758e9fbaSOystein Eftevaag };
2330*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2331*758e9fbaSOystein Eftevaag }
2332*758e9fbaSOystein Eftevaag
2333*758e9fbaSOystein Eftevaag /** Serialize value of type TPMT_SYM_DEF_OBJECT to json.
2334*758e9fbaSOystein Eftevaag *
2335*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
2336*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2337*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2338*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2339*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_SYM_DEF_OBJECT.
2340*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2341*758e9fbaSOystein Eftevaag */
2342*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMT_SYM_DEF_OBJECT_serialize(const TPMT_SYM_DEF_OBJECT * in,json_object ** jso)2343*758e9fbaSOystein Eftevaag ifapi_json_TPMT_SYM_DEF_OBJECT_serialize(const TPMT_SYM_DEF_OBJECT *in, json_object **jso)
2344*758e9fbaSOystein Eftevaag {
2345*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
2346*758e9fbaSOystein Eftevaag
2347*758e9fbaSOystein Eftevaag TSS2_RC r;
2348*758e9fbaSOystein Eftevaag json_object *jso2;
2349*758e9fbaSOystein Eftevaag if (*jso == NULL)
2350*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
2351*758e9fbaSOystein Eftevaag jso2 = NULL;
2352*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_SYM_OBJECT_serialize(in->algorithm, &jso2);
2353*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ALG_SYM_OBJECT");
2354*758e9fbaSOystein Eftevaag
2355*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "algorithm", jso2);
2356*758e9fbaSOystein Eftevaag if (in->algorithm != TPM2_ALG_NULL) {
2357*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
2358*758e9fbaSOystein Eftevaag r = ifapi_json_TPMU_SYM_KEY_BITS_serialize(&in->keyBits, in->algorithm, &jso2);
2359*758e9fbaSOystein Eftevaag return_if_error(r,"Serialize TPMU_SYM_KEY_BITS");
2360*758e9fbaSOystein Eftevaag
2361*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "keyBits", jso2);
2362*758e9fbaSOystein Eftevaag }
2363*758e9fbaSOystein Eftevaag if (in->algorithm != TPM2_ALG_NULL) {
2364*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
2365*758e9fbaSOystein Eftevaag r = ifapi_json_TPMU_SYM_MODE_serialize(&in->mode, in->algorithm, &jso2);
2366*758e9fbaSOystein Eftevaag return_if_error(r,"Serialize TPMU_SYM_MODE");
2367*758e9fbaSOystein Eftevaag
2368*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "mode", jso2);
2369*758e9fbaSOystein Eftevaag }
2370*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2371*758e9fbaSOystein Eftevaag }
2372*758e9fbaSOystein Eftevaag
2373*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_SYMCIPHER_PARMS to json.
2374*758e9fbaSOystein Eftevaag *
2375*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
2376*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2377*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2378*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2379*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SYMCIPHER_PARMS.
2380*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2381*758e9fbaSOystein Eftevaag */
2382*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SYMCIPHER_PARMS_serialize(const TPMS_SYMCIPHER_PARMS * in,json_object ** jso)2383*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SYMCIPHER_PARMS_serialize(const TPMS_SYMCIPHER_PARMS *in, json_object **jso)
2384*758e9fbaSOystein Eftevaag {
2385*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
2386*758e9fbaSOystein Eftevaag
2387*758e9fbaSOystein Eftevaag TSS2_RC r;
2388*758e9fbaSOystein Eftevaag json_object *jso2;
2389*758e9fbaSOystein Eftevaag if (*jso == NULL)
2390*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
2391*758e9fbaSOystein Eftevaag jso2 = NULL;
2392*758e9fbaSOystein Eftevaag r = ifapi_json_TPMT_SYM_DEF_OBJECT_serialize(&in->sym, &jso2);
2393*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMT_SYM_DEF_OBJECT");
2394*758e9fbaSOystein Eftevaag
2395*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "sym", jso2);
2396*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2397*758e9fbaSOystein Eftevaag }
2398*758e9fbaSOystein Eftevaag
2399*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_SCHEME_HASH to json.
2400*758e9fbaSOystein Eftevaag *
2401*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
2402*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2403*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2404*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2405*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SCHEME_HASH.
2406*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2407*758e9fbaSOystein Eftevaag */
2408*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SCHEME_HASH_serialize(const TPMS_SCHEME_HASH * in,json_object ** jso)2409*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SCHEME_HASH_serialize(const TPMS_SCHEME_HASH *in, json_object **jso)
2410*758e9fbaSOystein Eftevaag {
2411*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
2412*758e9fbaSOystein Eftevaag
2413*758e9fbaSOystein Eftevaag TSS2_RC r;
2414*758e9fbaSOystein Eftevaag json_object *jso2;
2415*758e9fbaSOystein Eftevaag if (*jso == NULL)
2416*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
2417*758e9fbaSOystein Eftevaag jso2 = NULL;
2418*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_HASH_serialize(in->hashAlg, &jso2);
2419*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ALG_HASH");
2420*758e9fbaSOystein Eftevaag
2421*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "hashAlg", jso2);
2422*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2423*758e9fbaSOystein Eftevaag }
2424*758e9fbaSOystein Eftevaag
2425*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_SCHEME_ECDAA to json.
2426*758e9fbaSOystein Eftevaag *
2427*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
2428*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2429*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2430*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2431*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SCHEME_ECDAA.
2432*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2433*758e9fbaSOystein Eftevaag */
2434*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SCHEME_ECDAA_serialize(const TPMS_SCHEME_ECDAA * in,json_object ** jso)2435*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SCHEME_ECDAA_serialize(const TPMS_SCHEME_ECDAA *in, json_object **jso)
2436*758e9fbaSOystein Eftevaag {
2437*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
2438*758e9fbaSOystein Eftevaag
2439*758e9fbaSOystein Eftevaag TSS2_RC r;
2440*758e9fbaSOystein Eftevaag json_object *jso2;
2441*758e9fbaSOystein Eftevaag if (*jso == NULL)
2442*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
2443*758e9fbaSOystein Eftevaag jso2 = NULL;
2444*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_HASH_serialize(in->hashAlg, &jso2);
2445*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ALG_HASH");
2446*758e9fbaSOystein Eftevaag
2447*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "hashAlg", jso2);
2448*758e9fbaSOystein Eftevaag jso2 = NULL;
2449*758e9fbaSOystein Eftevaag r = ifapi_json_UINT16_serialize(in->count, &jso2);
2450*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize UINT16");
2451*758e9fbaSOystein Eftevaag
2452*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "count", jso2);
2453*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2454*758e9fbaSOystein Eftevaag }
2455*758e9fbaSOystein Eftevaag
2456*758e9fbaSOystein Eftevaag /** Serialize TPMI_ALG_KEYEDHASH_SCHEME to json.
2457*758e9fbaSOystein Eftevaag *
2458*758e9fbaSOystein Eftevaag * @param[in] in variable to be serialized.
2459*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2460*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
2461*758e9fbaSOystein Eftevaag * the function.
2462*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
2463*758e9fbaSOystein Eftevaag */
2464*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMI_ALG_KEYEDHASH_SCHEME_serialize(const TPMI_ALG_KEYEDHASH_SCHEME in,json_object ** jso)2465*758e9fbaSOystein Eftevaag ifapi_json_TPMI_ALG_KEYEDHASH_SCHEME_serialize(const TPMI_ALG_KEYEDHASH_SCHEME in, json_object **jso)
2466*758e9fbaSOystein Eftevaag {
2467*758e9fbaSOystein Eftevaag CHECK_IN_LIST(TPMI_ALG_HASH, in, TPM2_ALG_HMAC, TPM2_ALG_XOR, TPM2_ALG_NULL);
2468*758e9fbaSOystein Eftevaag return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
2469*758e9fbaSOystein Eftevaag }
2470*758e9fbaSOystein Eftevaag
2471*758e9fbaSOystein Eftevaag /** Serialize a TPMS_SCHEME_HMAC to json.
2472*758e9fbaSOystein Eftevaag *
2473*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_SCHEME_HMAC to be serialized.
2474*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2475*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2476*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2477*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SCHEME_HMAC.
2478*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2479*758e9fbaSOystein Eftevaag */
2480*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SCHEME_HMAC_serialize(const TPMS_SCHEME_HMAC * in,json_object ** jso)2481*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SCHEME_HMAC_serialize(const TPMS_SCHEME_HMAC *in, json_object **jso)
2482*758e9fbaSOystein Eftevaag {
2483*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
2484*758e9fbaSOystein Eftevaag }
2485*758e9fbaSOystein Eftevaag
2486*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_SCHEME_XOR to json.
2487*758e9fbaSOystein Eftevaag *
2488*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
2489*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2490*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2491*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2492*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SCHEME_XOR.
2493*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2494*758e9fbaSOystein Eftevaag */
2495*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SCHEME_XOR_serialize(const TPMS_SCHEME_XOR * in,json_object ** jso)2496*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SCHEME_XOR_serialize(const TPMS_SCHEME_XOR *in, json_object **jso)
2497*758e9fbaSOystein Eftevaag {
2498*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
2499*758e9fbaSOystein Eftevaag
2500*758e9fbaSOystein Eftevaag TSS2_RC r;
2501*758e9fbaSOystein Eftevaag json_object *jso2;
2502*758e9fbaSOystein Eftevaag if (*jso == NULL)
2503*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
2504*758e9fbaSOystein Eftevaag jso2 = NULL;
2505*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_HASH_serialize(in->hashAlg, &jso2);
2506*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ALG_HASH");
2507*758e9fbaSOystein Eftevaag
2508*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "hashAlg", jso2);
2509*758e9fbaSOystein Eftevaag jso2 = NULL;
2510*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_KDF_serialize(in->kdf, &jso2);
2511*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ALG_KDF");
2512*758e9fbaSOystein Eftevaag
2513*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "kdf", jso2);
2514*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2515*758e9fbaSOystein Eftevaag }
2516*758e9fbaSOystein Eftevaag
2517*758e9fbaSOystein Eftevaag /** Serialize a TPMU_SCHEME_KEYEDHASH to json.
2518*758e9fbaSOystein Eftevaag *
2519*758e9fbaSOystein Eftevaag * This function expects the Bitfield to be encoded as unsigned int in host-endianess.
2520*758e9fbaSOystein Eftevaag * @param[in] in the value to be serialized.
2521*758e9fbaSOystein Eftevaag * @param[in] selector the type of the keyedhash scheme.
2522*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2523*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2524*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2525*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_SCHEME_KEYEDHASH.
2526*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2527*758e9fbaSOystein Eftevaag */
2528*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMU_SCHEME_KEYEDHASH_serialize(const TPMU_SCHEME_KEYEDHASH * in,UINT32 selector,json_object ** jso)2529*758e9fbaSOystein Eftevaag ifapi_json_TPMU_SCHEME_KEYEDHASH_serialize(const TPMU_SCHEME_KEYEDHASH *in, UINT32 selector, json_object **jso)
2530*758e9fbaSOystein Eftevaag {
2531*758e9fbaSOystein Eftevaag switch (selector) {
2532*758e9fbaSOystein Eftevaag case TPM2_ALG_HMAC:
2533*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SCHEME_HMAC_serialize(&in->hmac, jso);
2534*758e9fbaSOystein Eftevaag case TPM2_ALG_XOR:
2535*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SCHEME_XOR_serialize(&in->exclusiveOr, jso);
2536*758e9fbaSOystein Eftevaag default:
2537*758e9fbaSOystein Eftevaag LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
2538*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
2539*758e9fbaSOystein Eftevaag };
2540*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2541*758e9fbaSOystein Eftevaag }
2542*758e9fbaSOystein Eftevaag
2543*758e9fbaSOystein Eftevaag /** Serialize value of type TPMT_KEYEDHASH_SCHEME to json.
2544*758e9fbaSOystein Eftevaag *
2545*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
2546*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2547*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2548*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2549*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_KEYEDHASH_SCHEME.
2550*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2551*758e9fbaSOystein Eftevaag */
2552*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMT_KEYEDHASH_SCHEME_serialize(const TPMT_KEYEDHASH_SCHEME * in,json_object ** jso)2553*758e9fbaSOystein Eftevaag ifapi_json_TPMT_KEYEDHASH_SCHEME_serialize(const TPMT_KEYEDHASH_SCHEME *in, json_object **jso)
2554*758e9fbaSOystein Eftevaag {
2555*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
2556*758e9fbaSOystein Eftevaag
2557*758e9fbaSOystein Eftevaag TSS2_RC r;
2558*758e9fbaSOystein Eftevaag json_object *jso2;
2559*758e9fbaSOystein Eftevaag if (*jso == NULL)
2560*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
2561*758e9fbaSOystein Eftevaag jso2 = NULL;
2562*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_KEYEDHASH_SCHEME_serialize(in->scheme, &jso2);
2563*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ALG_KEYEDHASH_SCHEME");
2564*758e9fbaSOystein Eftevaag
2565*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "scheme", jso2);
2566*758e9fbaSOystein Eftevaag if (in->scheme != TPM2_ALG_NULL) {
2567*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
2568*758e9fbaSOystein Eftevaag r = ifapi_json_TPMU_SCHEME_KEYEDHASH_serialize(&in->details, in->scheme, &jso2);
2569*758e9fbaSOystein Eftevaag return_if_error(r,"Serialize TPMU_SCHEME_KEYEDHASH");
2570*758e9fbaSOystein Eftevaag
2571*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "details", jso2);
2572*758e9fbaSOystein Eftevaag }
2573*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2574*758e9fbaSOystein Eftevaag }
2575*758e9fbaSOystein Eftevaag
2576*758e9fbaSOystein Eftevaag /** Serialize a TPMS_SIG_SCHEME_RSASSA to json.
2577*758e9fbaSOystein Eftevaag *
2578*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_SIG_SCHEME_RSASSA to be serialized.
2579*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2580*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2581*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2582*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIG_SCHEME_RSASSA.
2583*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2584*758e9fbaSOystein Eftevaag */
2585*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SIG_SCHEME_RSASSA_serialize(const TPMS_SIG_SCHEME_RSASSA * in,json_object ** jso)2586*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SIG_SCHEME_RSASSA_serialize(const TPMS_SIG_SCHEME_RSASSA *in, json_object **jso)
2587*758e9fbaSOystein Eftevaag {
2588*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
2589*758e9fbaSOystein Eftevaag }
2590*758e9fbaSOystein Eftevaag
2591*758e9fbaSOystein Eftevaag /** Serialize a TPMS_SIG_SCHEME_RSAPSS to json.
2592*758e9fbaSOystein Eftevaag *
2593*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_SIG_SCHEME_RSAPSS to be serialized.
2594*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2595*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2596*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2597*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIG_SCHEME_RSAPSS.
2598*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2599*758e9fbaSOystein Eftevaag */
2600*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SIG_SCHEME_RSAPSS_serialize(const TPMS_SIG_SCHEME_RSAPSS * in,json_object ** jso)2601*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SIG_SCHEME_RSAPSS_serialize(const TPMS_SIG_SCHEME_RSAPSS *in, json_object **jso)
2602*758e9fbaSOystein Eftevaag {
2603*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
2604*758e9fbaSOystein Eftevaag }
2605*758e9fbaSOystein Eftevaag
2606*758e9fbaSOystein Eftevaag /** Serialize a TPMS_SIG_SCHEME_ECDSA to json.
2607*758e9fbaSOystein Eftevaag *
2608*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_SIG_SCHEME_ECDSA to be serialized.
2609*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2610*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2611*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2612*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIG_SCHEME_ECDSA.
2613*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2614*758e9fbaSOystein Eftevaag */
2615*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SIG_SCHEME_ECDSA_serialize(const TPMS_SIG_SCHEME_ECDSA * in,json_object ** jso)2616*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SIG_SCHEME_ECDSA_serialize(const TPMS_SIG_SCHEME_ECDSA *in, json_object **jso)
2617*758e9fbaSOystein Eftevaag {
2618*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
2619*758e9fbaSOystein Eftevaag }
2620*758e9fbaSOystein Eftevaag
2621*758e9fbaSOystein Eftevaag /** Serialize a TPMS_SIG_SCHEME_SM2 to json.
2622*758e9fbaSOystein Eftevaag *
2623*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_SIG_SCHEME_SM2 to be serialized.
2624*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2625*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2626*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2627*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIG_SCHEME_SM2.
2628*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2629*758e9fbaSOystein Eftevaag */
2630*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SIG_SCHEME_SM2_serialize(const TPMS_SIG_SCHEME_SM2 * in,json_object ** jso)2631*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SIG_SCHEME_SM2_serialize(const TPMS_SIG_SCHEME_SM2 *in, json_object **jso)
2632*758e9fbaSOystein Eftevaag {
2633*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
2634*758e9fbaSOystein Eftevaag }
2635*758e9fbaSOystein Eftevaag
2636*758e9fbaSOystein Eftevaag /** Serialize a TPMS_SIG_SCHEME_ECSCHNORR to json.
2637*758e9fbaSOystein Eftevaag *
2638*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_SIG_SCHEME_ECSCHNORR to be serialized.
2639*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2640*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2641*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2642*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIG_SCHEME_ECSCHNORR.
2643*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2644*758e9fbaSOystein Eftevaag */
2645*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SIG_SCHEME_ECSCHNORR_serialize(const TPMS_SIG_SCHEME_ECSCHNORR * in,json_object ** jso)2646*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SIG_SCHEME_ECSCHNORR_serialize(const TPMS_SIG_SCHEME_ECSCHNORR *in, json_object **jso)
2647*758e9fbaSOystein Eftevaag {
2648*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
2649*758e9fbaSOystein Eftevaag }
2650*758e9fbaSOystein Eftevaag
2651*758e9fbaSOystein Eftevaag /** Serialize a TPMS_SIG_SCHEME_ECDAA to json.
2652*758e9fbaSOystein Eftevaag *
2653*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_SIG_SCHEME_ECDAA to be serialized.
2654*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2655*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2656*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2657*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIG_SCHEME_ECDAA.
2658*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2659*758e9fbaSOystein Eftevaag */
2660*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SIG_SCHEME_ECDAA_serialize(const TPMS_SIG_SCHEME_ECDAA * in,json_object ** jso)2661*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SIG_SCHEME_ECDAA_serialize(const TPMS_SIG_SCHEME_ECDAA *in, json_object **jso)
2662*758e9fbaSOystein Eftevaag {
2663*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SCHEME_ECDAA_serialize(in, jso);
2664*758e9fbaSOystein Eftevaag }
2665*758e9fbaSOystein Eftevaag
2666*758e9fbaSOystein Eftevaag /** Serialize a TPMU_SIG_SCHEME to json.
2667*758e9fbaSOystein Eftevaag *
2668*758e9fbaSOystein Eftevaag * This function expects the Bitfield to be encoded as unsigned int in host-endianess.
2669*758e9fbaSOystein Eftevaag * @param[in] in the value to be serialized.
2670*758e9fbaSOystein Eftevaag * @param[in] selector the type of the signature scheme.
2671*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2672*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2673*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2674*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_SIG_SCHEME.
2675*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2676*758e9fbaSOystein Eftevaag */
2677*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMU_SIG_SCHEME_serialize(const TPMU_SIG_SCHEME * in,UINT32 selector,json_object ** jso)2678*758e9fbaSOystein Eftevaag ifapi_json_TPMU_SIG_SCHEME_serialize(const TPMU_SIG_SCHEME *in, UINT32 selector, json_object **jso)
2679*758e9fbaSOystein Eftevaag {
2680*758e9fbaSOystein Eftevaag switch (selector) {
2681*758e9fbaSOystein Eftevaag case TPM2_ALG_RSASSA:
2682*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIG_SCHEME_RSASSA_serialize(&in->rsassa, jso);
2683*758e9fbaSOystein Eftevaag case TPM2_ALG_RSAPSS:
2684*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIG_SCHEME_RSAPSS_serialize(&in->rsapss, jso);
2685*758e9fbaSOystein Eftevaag case TPM2_ALG_ECDSA:
2686*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIG_SCHEME_ECDSA_serialize(&in->ecdsa, jso);
2687*758e9fbaSOystein Eftevaag case TPM2_ALG_ECDAA:
2688*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIG_SCHEME_ECDAA_serialize(&in->ecdaa, jso);
2689*758e9fbaSOystein Eftevaag case TPM2_ALG_SM2:
2690*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIG_SCHEME_SM2_serialize(&in->sm2, jso);
2691*758e9fbaSOystein Eftevaag case TPM2_ALG_ECSCHNORR:
2692*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIG_SCHEME_ECSCHNORR_serialize(&in->ecschnorr, jso);
2693*758e9fbaSOystein Eftevaag case TPM2_ALG_HMAC:
2694*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SCHEME_HMAC_serialize(&in->hmac, jso);
2695*758e9fbaSOystein Eftevaag default:
2696*758e9fbaSOystein Eftevaag LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
2697*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
2698*758e9fbaSOystein Eftevaag };
2699*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2700*758e9fbaSOystein Eftevaag }
2701*758e9fbaSOystein Eftevaag
2702*758e9fbaSOystein Eftevaag /** Serialize value of type TPMT_SIG_SCHEME to json.
2703*758e9fbaSOystein Eftevaag *
2704*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
2705*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2706*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2707*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2708*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_SIG_SCHEME.
2709*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2710*758e9fbaSOystein Eftevaag */
2711*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMT_SIG_SCHEME_serialize(const TPMT_SIG_SCHEME * in,json_object ** jso)2712*758e9fbaSOystein Eftevaag ifapi_json_TPMT_SIG_SCHEME_serialize(const TPMT_SIG_SCHEME *in, json_object **jso)
2713*758e9fbaSOystein Eftevaag {
2714*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
2715*758e9fbaSOystein Eftevaag
2716*758e9fbaSOystein Eftevaag TSS2_RC r;
2717*758e9fbaSOystein Eftevaag json_object *jso2;
2718*758e9fbaSOystein Eftevaag if (*jso == NULL)
2719*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
2720*758e9fbaSOystein Eftevaag jso2 = NULL;
2721*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_SIG_SCHEME_serialize(in->scheme, &jso2);
2722*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ALG_SIG_SCHEME");
2723*758e9fbaSOystein Eftevaag
2724*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "scheme", jso2);
2725*758e9fbaSOystein Eftevaag if (in->scheme != TPM2_ALG_NULL) {
2726*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
2727*758e9fbaSOystein Eftevaag r = ifapi_json_TPMU_SIG_SCHEME_serialize(&in->details, in->scheme, &jso2);
2728*758e9fbaSOystein Eftevaag return_if_error(r,"Serialize TPMU_SIG_SCHEME");
2729*758e9fbaSOystein Eftevaag
2730*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "details", jso2);
2731*758e9fbaSOystein Eftevaag }
2732*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2733*758e9fbaSOystein Eftevaag }
2734*758e9fbaSOystein Eftevaag
2735*758e9fbaSOystein Eftevaag /** Serialize a TPMS_ENC_SCHEME_OAEP to json.
2736*758e9fbaSOystein Eftevaag *
2737*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_ENC_SCHEME_OAEP to be serialized.
2738*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2739*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2740*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2741*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_ENC_SCHEME_OAEP.
2742*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2743*758e9fbaSOystein Eftevaag */
2744*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_ENC_SCHEME_OAEP_serialize(const TPMS_ENC_SCHEME_OAEP * in,json_object ** jso)2745*758e9fbaSOystein Eftevaag ifapi_json_TPMS_ENC_SCHEME_OAEP_serialize(const TPMS_ENC_SCHEME_OAEP *in, json_object **jso)
2746*758e9fbaSOystein Eftevaag {
2747*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
2748*758e9fbaSOystein Eftevaag }
2749*758e9fbaSOystein Eftevaag
2750*758e9fbaSOystein Eftevaag /** Serialize a TPMS_ENC_SCHEME_RSAES to json.
2751*758e9fbaSOystein Eftevaag *
2752*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_ENC_SCHEME_RSAES to be serialized.
2753*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2754*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2755*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2756*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_ENC_SCHEME_RSAES.
2757*758e9fbaSOystein Eftevaag */
2758*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_ENC_SCHEME_RSAES_serialize(const TPMS_ENC_SCHEME_RSAES * in,json_object ** jso)2759*758e9fbaSOystein Eftevaag ifapi_json_TPMS_ENC_SCHEME_RSAES_serialize(const TPMS_ENC_SCHEME_RSAES *in, json_object **jso)
2760*758e9fbaSOystein Eftevaag {
2761*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_EMPTY_serialize(in, jso);
2762*758e9fbaSOystein Eftevaag }
2763*758e9fbaSOystein Eftevaag
2764*758e9fbaSOystein Eftevaag /** Serialize a TPMS_KEY_SCHEME_ECDH to json.
2765*758e9fbaSOystein Eftevaag *
2766*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_KEY_SCHEME_ECDH to be serialized.
2767*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2768*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2769*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2770*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_KEY_SCHEME_ECDH.
2771*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2772*758e9fbaSOystein Eftevaag */
2773*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_KEY_SCHEME_ECDH_serialize(const TPMS_KEY_SCHEME_ECDH * in,json_object ** jso)2774*758e9fbaSOystein Eftevaag ifapi_json_TPMS_KEY_SCHEME_ECDH_serialize(const TPMS_KEY_SCHEME_ECDH *in, json_object **jso)
2775*758e9fbaSOystein Eftevaag {
2776*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
2777*758e9fbaSOystein Eftevaag }
2778*758e9fbaSOystein Eftevaag
2779*758e9fbaSOystein Eftevaag /** Serialize a TPMS_SCHEME_MGF1 to json.
2780*758e9fbaSOystein Eftevaag *
2781*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_SCHEME_MGF1 to be serialized.
2782*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2783*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2784*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2785*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SCHEME_MGF1.
2786*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2787*758e9fbaSOystein Eftevaag */
2788*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SCHEME_MGF1_serialize(const TPMS_SCHEME_MGF1 * in,json_object ** jso)2789*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SCHEME_MGF1_serialize(const TPMS_SCHEME_MGF1 *in, json_object **jso)
2790*758e9fbaSOystein Eftevaag {
2791*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
2792*758e9fbaSOystein Eftevaag }
2793*758e9fbaSOystein Eftevaag
2794*758e9fbaSOystein Eftevaag /** Serialize a TPMS_SCHEME_KDF1_SP800_56A to json.
2795*758e9fbaSOystein Eftevaag *
2796*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_SCHEME_KDF1_SP800_56A to be serialized.
2797*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2798*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2799*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2800*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SCHEME_KDF1_SP800_56A.
2801*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2802*758e9fbaSOystein Eftevaag */
2803*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SCHEME_KDF1_SP800_56A_serialize(const TPMS_SCHEME_KDF1_SP800_56A * in,json_object ** jso)2804*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SCHEME_KDF1_SP800_56A_serialize(const TPMS_SCHEME_KDF1_SP800_56A *in, json_object **jso)
2805*758e9fbaSOystein Eftevaag {
2806*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
2807*758e9fbaSOystein Eftevaag }
2808*758e9fbaSOystein Eftevaag
2809*758e9fbaSOystein Eftevaag /** Serialize a TPMS_SCHEME_KDF1_SP800_108 to json.
2810*758e9fbaSOystein Eftevaag *
2811*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_SCHEME_KDF1_SP800_108 to be serialized.
2812*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2813*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2814*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2815*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SCHEME_KDF1_SP800_108.
2816*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2817*758e9fbaSOystein Eftevaag */
2818*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SCHEME_KDF1_SP800_108_serialize(const TPMS_SCHEME_KDF1_SP800_108 * in,json_object ** jso)2819*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SCHEME_KDF1_SP800_108_serialize(const TPMS_SCHEME_KDF1_SP800_108 *in, json_object **jso)
2820*758e9fbaSOystein Eftevaag {
2821*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
2822*758e9fbaSOystein Eftevaag }
2823*758e9fbaSOystein Eftevaag
2824*758e9fbaSOystein Eftevaag /** Serialize a TPMU_KDF_SCHEME to json.
2825*758e9fbaSOystein Eftevaag *
2826*758e9fbaSOystein Eftevaag * This function expects the Bitfield to be encoded as unsigned int in host-endianess.
2827*758e9fbaSOystein Eftevaag * @param[in] in the value to be serialized.
2828*758e9fbaSOystein Eftevaag * @param[in] selector the type of the KDF scheme.
2829*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2830*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2831*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2832*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_KDF_SCHEME.
2833*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2834*758e9fbaSOystein Eftevaag */
2835*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMU_KDF_SCHEME_serialize(const TPMU_KDF_SCHEME * in,UINT32 selector,json_object ** jso)2836*758e9fbaSOystein Eftevaag ifapi_json_TPMU_KDF_SCHEME_serialize(const TPMU_KDF_SCHEME *in, UINT32 selector, json_object **jso)
2837*758e9fbaSOystein Eftevaag {
2838*758e9fbaSOystein Eftevaag switch (selector) {
2839*758e9fbaSOystein Eftevaag case TPM2_ALG_MGF1:
2840*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SCHEME_MGF1_serialize(&in->mgf1, jso);
2841*758e9fbaSOystein Eftevaag case TPM2_ALG_KDF1_SP800_56A:
2842*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SCHEME_KDF1_SP800_56A_serialize(&in->kdf1_sp800_56a, jso);
2843*758e9fbaSOystein Eftevaag case TPM2_ALG_KDF1_SP800_108:
2844*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SCHEME_KDF1_SP800_108_serialize(&in->kdf1_sp800_108, jso);
2845*758e9fbaSOystein Eftevaag default:
2846*758e9fbaSOystein Eftevaag LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
2847*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
2848*758e9fbaSOystein Eftevaag };
2849*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2850*758e9fbaSOystein Eftevaag }
2851*758e9fbaSOystein Eftevaag
2852*758e9fbaSOystein Eftevaag /** Serialize value of type TPMT_KDF_SCHEME to json.
2853*758e9fbaSOystein Eftevaag *
2854*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
2855*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2856*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2857*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2858*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_KDF_SCHEME.
2859*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2860*758e9fbaSOystein Eftevaag */
2861*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMT_KDF_SCHEME_serialize(const TPMT_KDF_SCHEME * in,json_object ** jso)2862*758e9fbaSOystein Eftevaag ifapi_json_TPMT_KDF_SCHEME_serialize(const TPMT_KDF_SCHEME *in, json_object **jso)
2863*758e9fbaSOystein Eftevaag {
2864*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
2865*758e9fbaSOystein Eftevaag
2866*758e9fbaSOystein Eftevaag TSS2_RC r;
2867*758e9fbaSOystein Eftevaag json_object *jso2;
2868*758e9fbaSOystein Eftevaag if (*jso == NULL)
2869*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
2870*758e9fbaSOystein Eftevaag jso2 = NULL;
2871*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_KDF_serialize(in->scheme, &jso2);
2872*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ALG_KDF");
2873*758e9fbaSOystein Eftevaag
2874*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "scheme", jso2);
2875*758e9fbaSOystein Eftevaag if (in->scheme != TPM2_ALG_NULL) {
2876*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
2877*758e9fbaSOystein Eftevaag r = ifapi_json_TPMU_KDF_SCHEME_serialize(&in->details, in->scheme, &jso2);
2878*758e9fbaSOystein Eftevaag return_if_error(r,"Serialize TPMU_KDF_SCHEME");
2879*758e9fbaSOystein Eftevaag
2880*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "details", jso2);
2881*758e9fbaSOystein Eftevaag }
2882*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2883*758e9fbaSOystein Eftevaag }
2884*758e9fbaSOystein Eftevaag
2885*758e9fbaSOystein Eftevaag /** Serialize TPMI_ALG_ASYM_SCHEME to json.
2886*758e9fbaSOystein Eftevaag *
2887*758e9fbaSOystein Eftevaag * @param[in] in variable to be serialized.
2888*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2889*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
2890*758e9fbaSOystein Eftevaag * the function.
2891*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
2892*758e9fbaSOystein Eftevaag */
2893*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMI_ALG_ASYM_SCHEME_serialize(const TPMI_ALG_ASYM_SCHEME in,json_object ** jso)2894*758e9fbaSOystein Eftevaag ifapi_json_TPMI_ALG_ASYM_SCHEME_serialize(const TPMI_ALG_ASYM_SCHEME in, json_object **jso)
2895*758e9fbaSOystein Eftevaag {
2896*758e9fbaSOystein Eftevaag CHECK_IN_LIST(TPMI_ALG_ASYM_SCHEME, in, TPM2_ALG_ECDH, TPM2_ALG_RSASSA, TPM2_ALG_RSAPSS,
2897*758e9fbaSOystein Eftevaag TPM2_ALG_ECDSA, TPM2_ALG_ECDAA, TPM2_ALG_SM2, TPM2_ALG_ECSCHNORR,
2898*758e9fbaSOystein Eftevaag TPM2_ALG_RSAES, TPM2_ALG_OAEP, TPM2_ALG_NULL);
2899*758e9fbaSOystein Eftevaag return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
2900*758e9fbaSOystein Eftevaag }
2901*758e9fbaSOystein Eftevaag
2902*758e9fbaSOystein Eftevaag /** Serialize a TPMU_ASYM_SCHEME to json.
2903*758e9fbaSOystein Eftevaag *
2904*758e9fbaSOystein Eftevaag * This function expects the Bitfield to be encoded as unsigned int in host-endianess.
2905*758e9fbaSOystein Eftevaag * @param[in] in the value to be serialized.
2906*758e9fbaSOystein Eftevaag * @param[in] selector the type of the scheme.
2907*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2908*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2909*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2910*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_ASYM_SCHEME.
2911*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2912*758e9fbaSOystein Eftevaag */
2913*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMU_ASYM_SCHEME_serialize(const TPMU_ASYM_SCHEME * in,UINT32 selector,json_object ** jso)2914*758e9fbaSOystein Eftevaag ifapi_json_TPMU_ASYM_SCHEME_serialize(const TPMU_ASYM_SCHEME *in, UINT32 selector, json_object **jso)
2915*758e9fbaSOystein Eftevaag {
2916*758e9fbaSOystein Eftevaag switch (selector) {
2917*758e9fbaSOystein Eftevaag case TPM2_ALG_ECDH:
2918*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_KEY_SCHEME_ECDH_serialize(&in->ecdh, jso);
2919*758e9fbaSOystein Eftevaag case TPM2_ALG_RSASSA:
2920*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIG_SCHEME_RSASSA_serialize(&in->rsassa, jso);
2921*758e9fbaSOystein Eftevaag case TPM2_ALG_RSAPSS:
2922*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIG_SCHEME_RSAPSS_serialize(&in->rsapss, jso);
2923*758e9fbaSOystein Eftevaag case TPM2_ALG_ECDSA:
2924*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIG_SCHEME_ECDSA_serialize(&in->ecdsa, jso);
2925*758e9fbaSOystein Eftevaag case TPM2_ALG_ECDAA:
2926*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIG_SCHEME_ECDAA_serialize(&in->ecdaa, jso);
2927*758e9fbaSOystein Eftevaag case TPM2_ALG_SM2:
2928*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIG_SCHEME_SM2_serialize(&in->sm2, jso);
2929*758e9fbaSOystein Eftevaag case TPM2_ALG_ECSCHNORR:
2930*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIG_SCHEME_ECSCHNORR_serialize(&in->ecschnorr, jso);
2931*758e9fbaSOystein Eftevaag case TPM2_ALG_RSAES:
2932*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_ENC_SCHEME_RSAES_serialize(&in->rsaes, jso);
2933*758e9fbaSOystein Eftevaag case TPM2_ALG_OAEP:
2934*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_ENC_SCHEME_OAEP_serialize(&in->oaep, jso);
2935*758e9fbaSOystein Eftevaag default:
2936*758e9fbaSOystein Eftevaag LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
2937*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
2938*758e9fbaSOystein Eftevaag };
2939*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2940*758e9fbaSOystein Eftevaag }
2941*758e9fbaSOystein Eftevaag
2942*758e9fbaSOystein Eftevaag /** Serialize value of type TPMT_ASYM_SCHEME to json.
2943*758e9fbaSOystein Eftevaag *
2944*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
2945*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2946*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2947*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2948*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_ASYM_SCHEME.
2949*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2950*758e9fbaSOystein Eftevaag */
2951*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMT_ASYM_SCHEME_serialize(const TPMT_ASYM_SCHEME * in,json_object ** jso)2952*758e9fbaSOystein Eftevaag ifapi_json_TPMT_ASYM_SCHEME_serialize(const TPMT_ASYM_SCHEME *in, json_object **jso)
2953*758e9fbaSOystein Eftevaag {
2954*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
2955*758e9fbaSOystein Eftevaag
2956*758e9fbaSOystein Eftevaag TSS2_RC r;
2957*758e9fbaSOystein Eftevaag json_object *jso2;
2958*758e9fbaSOystein Eftevaag if (*jso == NULL)
2959*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
2960*758e9fbaSOystein Eftevaag jso2 = NULL;
2961*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_ASYM_SCHEME_serialize(in->scheme, &jso2);
2962*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ALG_ASYM_SCHEME");
2963*758e9fbaSOystein Eftevaag
2964*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "scheme", jso2);
2965*758e9fbaSOystein Eftevaag if (in->scheme != TPM2_ALG_NULL) {
2966*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
2967*758e9fbaSOystein Eftevaag r = ifapi_json_TPMU_ASYM_SCHEME_serialize(&in->details, in->scheme, &jso2);
2968*758e9fbaSOystein Eftevaag return_if_error(r,"Serialize TPMU_ASYM_SCHEME");
2969*758e9fbaSOystein Eftevaag
2970*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "details", jso2);
2971*758e9fbaSOystein Eftevaag }
2972*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
2973*758e9fbaSOystein Eftevaag }
2974*758e9fbaSOystein Eftevaag
2975*758e9fbaSOystein Eftevaag /** Serialize TPMI_ALG_RSA_SCHEME to json.
2976*758e9fbaSOystein Eftevaag *
2977*758e9fbaSOystein Eftevaag * @param[in] in variable to be serialized.
2978*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2979*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
2980*758e9fbaSOystein Eftevaag * the function.
2981*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
2982*758e9fbaSOystein Eftevaag */
2983*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMI_ALG_RSA_SCHEME_serialize(const TPMI_ALG_RSA_SCHEME in,json_object ** jso)2984*758e9fbaSOystein Eftevaag ifapi_json_TPMI_ALG_RSA_SCHEME_serialize(const TPMI_ALG_RSA_SCHEME in, json_object **jso)
2985*758e9fbaSOystein Eftevaag {
2986*758e9fbaSOystein Eftevaag CHECK_IN_LIST(TPMI_ALG_RSA_SCHEME, in, TPM2_ALG_RSAES, TPM2_ALG_OAEP, TPM2_ALG_RSASSA,
2987*758e9fbaSOystein Eftevaag TPM2_ALG_RSAPSS, TPM2_ALG_NULL);
2988*758e9fbaSOystein Eftevaag return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
2989*758e9fbaSOystein Eftevaag }
2990*758e9fbaSOystein Eftevaag
2991*758e9fbaSOystein Eftevaag /** Serialize value of type TPMT_RSA_SCHEME to json.
2992*758e9fbaSOystein Eftevaag *
2993*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
2994*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
2995*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
2996*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
2997*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_RSA_SCHEME.
2998*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
2999*758e9fbaSOystein Eftevaag */
3000*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMT_RSA_SCHEME_serialize(const TPMT_RSA_SCHEME * in,json_object ** jso)3001*758e9fbaSOystein Eftevaag ifapi_json_TPMT_RSA_SCHEME_serialize(const TPMT_RSA_SCHEME *in, json_object **jso)
3002*758e9fbaSOystein Eftevaag {
3003*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
3004*758e9fbaSOystein Eftevaag
3005*758e9fbaSOystein Eftevaag TSS2_RC r;
3006*758e9fbaSOystein Eftevaag json_object *jso2;
3007*758e9fbaSOystein Eftevaag if (*jso == NULL)
3008*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
3009*758e9fbaSOystein Eftevaag jso2 = NULL;
3010*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_RSA_SCHEME_serialize(in->scheme, &jso2);
3011*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ALG_RSA_SCHEME");
3012*758e9fbaSOystein Eftevaag
3013*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "scheme", jso2);
3014*758e9fbaSOystein Eftevaag if (in->scheme != TPM2_ALG_NULL) {
3015*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
3016*758e9fbaSOystein Eftevaag r = ifapi_json_TPMU_ASYM_SCHEME_serialize(&in->details, in->scheme, &jso2);
3017*758e9fbaSOystein Eftevaag return_if_error(r,"Serialize TPMU_ASYM_SCHEME");
3018*758e9fbaSOystein Eftevaag
3019*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "details", jso2);
3020*758e9fbaSOystein Eftevaag }
3021*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3022*758e9fbaSOystein Eftevaag }
3023*758e9fbaSOystein Eftevaag
3024*758e9fbaSOystein Eftevaag /** Serialize value of type TPM2B_PUBLIC_KEY_RSA to json.
3025*758e9fbaSOystein Eftevaag *
3026*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3027*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3028*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3029*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3030*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_PUBLIC_KEY_RSA.
3031*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3032*758e9fbaSOystein Eftevaag */
3033*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2B_PUBLIC_KEY_RSA_serialize(const TPM2B_PUBLIC_KEY_RSA * in,json_object ** jso)3034*758e9fbaSOystein Eftevaag ifapi_json_TPM2B_PUBLIC_KEY_RSA_serialize(const TPM2B_PUBLIC_KEY_RSA *in, json_object **jso)
3035*758e9fbaSOystein Eftevaag {
3036*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
3037*758e9fbaSOystein Eftevaag
3038*758e9fbaSOystein Eftevaag if (in->size > TPM2_MAX_RSA_KEY_BYTES) {
3039*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_RSA_KEY_BYTES)",
3040*758e9fbaSOystein Eftevaag (size_t)in->size, (size_t)TPM2_MAX_RSA_KEY_BYTES);
3041*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
3042*758e9fbaSOystein Eftevaag }
3043*758e9fbaSOystein Eftevaag char hex_string[((size_t)in->size)*2+1];
3044*758e9fbaSOystein Eftevaag
3045*758e9fbaSOystein Eftevaag for (size_t i = 0, off = 0; i < in->size; i++, off+=2)
3046*758e9fbaSOystein Eftevaag sprintf(&hex_string[off], "%02x", in->buffer[i]);
3047*758e9fbaSOystein Eftevaag hex_string[(in->size)*2] = '\0';
3048*758e9fbaSOystein Eftevaag *jso = json_object_new_string (hex_string);
3049*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
3050*758e9fbaSOystein Eftevaag
3051*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3052*758e9fbaSOystein Eftevaag }
3053*758e9fbaSOystein Eftevaag
3054*758e9fbaSOystein Eftevaag /** Serialize value of type TPMI_RSA_KEY_BITS to json.
3055*758e9fbaSOystein Eftevaag *
3056*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3057*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3058*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3059*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3060*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMI_RSA_KEY_BITS.
3061*758e9fbaSOystein Eftevaag *
3062*758e9fbaSOystein Eftevaag */
3063*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMI_RSA_KEY_BITS_serialize(const TPMI_RSA_KEY_BITS in,json_object ** jso)3064*758e9fbaSOystein Eftevaag ifapi_json_TPMI_RSA_KEY_BITS_serialize(const TPMI_RSA_KEY_BITS in, json_object **jso)
3065*758e9fbaSOystein Eftevaag {
3066*758e9fbaSOystein Eftevaag CHECK_IN_LIST(TPMI_RSA_KEY_BITS, in, 1024, 2048);
3067*758e9fbaSOystein Eftevaag return ifapi_json_UINT16_serialize(in, jso);
3068*758e9fbaSOystein Eftevaag }
3069*758e9fbaSOystein Eftevaag
3070*758e9fbaSOystein Eftevaag /** Serialize value of type TPM2B_ECC_PARAMETER to json.
3071*758e9fbaSOystein Eftevaag *
3072*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3073*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3074*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3075*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3076*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_ECC_PARAMETER.
3077*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3078*758e9fbaSOystein Eftevaag */
3079*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2B_ECC_PARAMETER_serialize(const TPM2B_ECC_PARAMETER * in,json_object ** jso)3080*758e9fbaSOystein Eftevaag ifapi_json_TPM2B_ECC_PARAMETER_serialize(const TPM2B_ECC_PARAMETER *in, json_object **jso)
3081*758e9fbaSOystein Eftevaag {
3082*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
3083*758e9fbaSOystein Eftevaag
3084*758e9fbaSOystein Eftevaag if (in->size > TPM2_MAX_ECC_KEY_BYTES) {
3085*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_ECC_KEY_BYTES)",
3086*758e9fbaSOystein Eftevaag (size_t)in->size, (size_t)TPM2_MAX_ECC_KEY_BYTES);
3087*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
3088*758e9fbaSOystein Eftevaag }
3089*758e9fbaSOystein Eftevaag char hex_string[((size_t)in->size)*2+1];
3090*758e9fbaSOystein Eftevaag
3091*758e9fbaSOystein Eftevaag for (size_t i = 0, off = 0; i < in->size; i++, off+=2)
3092*758e9fbaSOystein Eftevaag sprintf(&hex_string[off], "%02x", in->buffer[i]);
3093*758e9fbaSOystein Eftevaag hex_string[(in->size)*2] = '\0';
3094*758e9fbaSOystein Eftevaag *jso = json_object_new_string (hex_string);
3095*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
3096*758e9fbaSOystein Eftevaag
3097*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3098*758e9fbaSOystein Eftevaag }
3099*758e9fbaSOystein Eftevaag
3100*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_ECC_POINT to json.
3101*758e9fbaSOystein Eftevaag *
3102*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3103*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3104*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3105*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3106*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_ECC_POINT.
3107*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3108*758e9fbaSOystein Eftevaag */
3109*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_ECC_POINT_serialize(const TPMS_ECC_POINT * in,json_object ** jso)3110*758e9fbaSOystein Eftevaag ifapi_json_TPMS_ECC_POINT_serialize(const TPMS_ECC_POINT *in, json_object **jso)
3111*758e9fbaSOystein Eftevaag {
3112*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
3113*758e9fbaSOystein Eftevaag
3114*758e9fbaSOystein Eftevaag TSS2_RC r;
3115*758e9fbaSOystein Eftevaag json_object *jso2;
3116*758e9fbaSOystein Eftevaag if (*jso == NULL)
3117*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
3118*758e9fbaSOystein Eftevaag jso2 = NULL;
3119*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_ECC_PARAMETER_serialize(&in->x, &jso2);
3120*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_ECC_PARAMETER");
3121*758e9fbaSOystein Eftevaag
3122*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "x", jso2);
3123*758e9fbaSOystein Eftevaag jso2 = NULL;
3124*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_ECC_PARAMETER_serialize(&in->y, &jso2);
3125*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_ECC_PARAMETER");
3126*758e9fbaSOystein Eftevaag
3127*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "y", jso2);
3128*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3129*758e9fbaSOystein Eftevaag }
3130*758e9fbaSOystein Eftevaag
3131*758e9fbaSOystein Eftevaag /** Serialize TPMI_ALG_ECC_SCHEME to json.
3132*758e9fbaSOystein Eftevaag *
3133*758e9fbaSOystein Eftevaag * @param[in] in variable to be serialized.
3134*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3135*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
3136*758e9fbaSOystein Eftevaag * the function.
3137*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
3138*758e9fbaSOystein Eftevaag */
3139*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMI_ALG_ECC_SCHEME_serialize(const TPMI_ALG_ECC_SCHEME in,json_object ** jso)3140*758e9fbaSOystein Eftevaag ifapi_json_TPMI_ALG_ECC_SCHEME_serialize(const TPMI_ALG_ECC_SCHEME in, json_object **jso)
3141*758e9fbaSOystein Eftevaag {
3142*758e9fbaSOystein Eftevaag CHECK_IN_LIST(TPMI_ALG_ECC_SCHEME, in, TPM2_ALG_ECDSA, TPM2_ALG_ECDAA,
3143*758e9fbaSOystein Eftevaag TPM2_ALG_SM2, TPM2_ALG_ECSCHNORR, TPM2_ALG_ECDH, TPM2_ALG_NULL);
3144*758e9fbaSOystein Eftevaag return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
3145*758e9fbaSOystein Eftevaag }
3146*758e9fbaSOystein Eftevaag
3147*758e9fbaSOystein Eftevaag /** Serialize value of type TPMI_ECC_CURVE to json.
3148*758e9fbaSOystein Eftevaag *
3149*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3150*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3151*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3152*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3153*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMI_ECC_CURVE.
3154*758e9fbaSOystein Eftevaag *
3155*758e9fbaSOystein Eftevaag */
3156*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMI_ECC_CURVE_serialize(const TPMI_ECC_CURVE in,json_object ** jso)3157*758e9fbaSOystein Eftevaag ifapi_json_TPMI_ECC_CURVE_serialize(const TPMI_ECC_CURVE in, json_object **jso)
3158*758e9fbaSOystein Eftevaag {
3159*758e9fbaSOystein Eftevaag return ifapi_json_TPM2_ECC_CURVE_serialize(in, jso);
3160*758e9fbaSOystein Eftevaag }
3161*758e9fbaSOystein Eftevaag
3162*758e9fbaSOystein Eftevaag /** Serialize value of type TPMT_ECC_SCHEME to json.
3163*758e9fbaSOystein Eftevaag *
3164*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3165*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3166*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3167*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3168*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_ECC_SCHEME.
3169*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3170*758e9fbaSOystein Eftevaag */
3171*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMT_ECC_SCHEME_serialize(const TPMT_ECC_SCHEME * in,json_object ** jso)3172*758e9fbaSOystein Eftevaag ifapi_json_TPMT_ECC_SCHEME_serialize(const TPMT_ECC_SCHEME *in, json_object **jso)
3173*758e9fbaSOystein Eftevaag {
3174*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
3175*758e9fbaSOystein Eftevaag
3176*758e9fbaSOystein Eftevaag TSS2_RC r;
3177*758e9fbaSOystein Eftevaag json_object *jso2;
3178*758e9fbaSOystein Eftevaag if (*jso == NULL)
3179*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
3180*758e9fbaSOystein Eftevaag jso2 = NULL;
3181*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_ECC_SCHEME_serialize(in->scheme, &jso2);
3182*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ALG_ECC_SCHEME");
3183*758e9fbaSOystein Eftevaag
3184*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "scheme", jso2);
3185*758e9fbaSOystein Eftevaag if (in->scheme != TPM2_ALG_NULL) {
3186*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
3187*758e9fbaSOystein Eftevaag r = ifapi_json_TPMU_ASYM_SCHEME_serialize(&in->details, in->scheme, &jso2);
3188*758e9fbaSOystein Eftevaag return_if_error(r,"Serialize TPMU_ASYM_SCHEME");
3189*758e9fbaSOystein Eftevaag
3190*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "details", jso2);
3191*758e9fbaSOystein Eftevaag }
3192*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3193*758e9fbaSOystein Eftevaag }
3194*758e9fbaSOystein Eftevaag
3195*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_SIGNATURE_RSA to json.
3196*758e9fbaSOystein Eftevaag *
3197*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3198*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3199*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3200*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3201*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIGNATURE_RSA.
3202*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3203*758e9fbaSOystein Eftevaag */
3204*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SIGNATURE_RSA_serialize(const TPMS_SIGNATURE_RSA * in,json_object ** jso)3205*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SIGNATURE_RSA_serialize(const TPMS_SIGNATURE_RSA *in, json_object **jso)
3206*758e9fbaSOystein Eftevaag {
3207*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
3208*758e9fbaSOystein Eftevaag
3209*758e9fbaSOystein Eftevaag TSS2_RC r;
3210*758e9fbaSOystein Eftevaag json_object *jso2;
3211*758e9fbaSOystein Eftevaag if (*jso == NULL)
3212*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
3213*758e9fbaSOystein Eftevaag jso2 = NULL;
3214*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_HASH_serialize(in->hash, &jso2);
3215*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ALG_HASH");
3216*758e9fbaSOystein Eftevaag
3217*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "hash", jso2);
3218*758e9fbaSOystein Eftevaag jso2 = NULL;
3219*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_PUBLIC_KEY_RSA_serialize(&in->sig, &jso2);
3220*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_PUBLIC_KEY_RSA");
3221*758e9fbaSOystein Eftevaag
3222*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "sig", jso2);
3223*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3224*758e9fbaSOystein Eftevaag }
3225*758e9fbaSOystein Eftevaag
3226*758e9fbaSOystein Eftevaag /** Serialize a TPMS_SIGNATURE_RSASSA to json.
3227*758e9fbaSOystein Eftevaag *
3228*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_SIGNATURE_RSASSA to be serialized.
3229*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3230*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3231*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3232*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIGNATURE_RSASSA.
3233*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3234*758e9fbaSOystein Eftevaag */
3235*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SIGNATURE_RSASSA_serialize(const TPMS_SIGNATURE_RSASSA * in,json_object ** jso)3236*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SIGNATURE_RSASSA_serialize(const TPMS_SIGNATURE_RSASSA *in, json_object **jso)
3237*758e9fbaSOystein Eftevaag {
3238*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIGNATURE_RSA_serialize(in, jso);
3239*758e9fbaSOystein Eftevaag }
3240*758e9fbaSOystein Eftevaag
3241*758e9fbaSOystein Eftevaag /** Serialize a TPMS_SIGNATURE_RSAPSS to json.
3242*758e9fbaSOystein Eftevaag *
3243*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_SIGNATURE_RSAPSS to be serialized.
3244*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3245*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3246*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3247*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIGNATURE_RSAPSS.
3248*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3249*758e9fbaSOystein Eftevaag */
3250*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SIGNATURE_RSAPSS_serialize(const TPMS_SIGNATURE_RSAPSS * in,json_object ** jso)3251*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SIGNATURE_RSAPSS_serialize(const TPMS_SIGNATURE_RSAPSS *in, json_object **jso)
3252*758e9fbaSOystein Eftevaag {
3253*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIGNATURE_RSA_serialize(in, jso);
3254*758e9fbaSOystein Eftevaag }
3255*758e9fbaSOystein Eftevaag
3256*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_SIGNATURE_ECC to json.
3257*758e9fbaSOystein Eftevaag *
3258*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3259*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3260*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3261*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3262*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIGNATURE_ECC.
3263*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3264*758e9fbaSOystein Eftevaag */
3265*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SIGNATURE_ECC_serialize(const TPMS_SIGNATURE_ECC * in,json_object ** jso)3266*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SIGNATURE_ECC_serialize(const TPMS_SIGNATURE_ECC *in, json_object **jso)
3267*758e9fbaSOystein Eftevaag {
3268*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
3269*758e9fbaSOystein Eftevaag
3270*758e9fbaSOystein Eftevaag TSS2_RC r;
3271*758e9fbaSOystein Eftevaag json_object *jso2;
3272*758e9fbaSOystein Eftevaag if (*jso == NULL)
3273*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
3274*758e9fbaSOystein Eftevaag jso2 = NULL;
3275*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_HASH_serialize(in->hash, &jso2);
3276*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ALG_HASH");
3277*758e9fbaSOystein Eftevaag
3278*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "hash", jso2);
3279*758e9fbaSOystein Eftevaag jso2 = NULL;
3280*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_ECC_PARAMETER_serialize(&in->signatureR, &jso2);
3281*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_ECC_PARAMETER");
3282*758e9fbaSOystein Eftevaag
3283*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "signatureR", jso2);
3284*758e9fbaSOystein Eftevaag jso2 = NULL;
3285*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_ECC_PARAMETER_serialize(&in->signatureS, &jso2);
3286*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_ECC_PARAMETER");
3287*758e9fbaSOystein Eftevaag
3288*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "signatureS", jso2);
3289*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3290*758e9fbaSOystein Eftevaag }
3291*758e9fbaSOystein Eftevaag
3292*758e9fbaSOystein Eftevaag /** Serialize a TPMS_SIGNATURE_ECDSA to json.
3293*758e9fbaSOystein Eftevaag *
3294*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_SIGNATURE_ECDSA to be serialized.
3295*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3296*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3297*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3298*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIGNATURE_ECDSA.
3299*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3300*758e9fbaSOystein Eftevaag */
3301*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SIGNATURE_ECDSA_serialize(const TPMS_SIGNATURE_ECDSA * in,json_object ** jso)3302*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SIGNATURE_ECDSA_serialize(const TPMS_SIGNATURE_ECDSA *in, json_object **jso)
3303*758e9fbaSOystein Eftevaag {
3304*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIGNATURE_ECC_serialize(in, jso);
3305*758e9fbaSOystein Eftevaag }
3306*758e9fbaSOystein Eftevaag
3307*758e9fbaSOystein Eftevaag /** Serialize a TPMS_SIGNATURE_ECDAA to json.
3308*758e9fbaSOystein Eftevaag *
3309*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_SIGNATURE_ECDAA to be serialized.
3310*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3311*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3312*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3313*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIGNATURE_ECDAA.
3314*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3315*758e9fbaSOystein Eftevaag */
3316*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SIGNATURE_ECDAA_serialize(const TPMS_SIGNATURE_ECDAA * in,json_object ** jso)3317*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SIGNATURE_ECDAA_serialize(const TPMS_SIGNATURE_ECDAA *in, json_object **jso)
3318*758e9fbaSOystein Eftevaag {
3319*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIGNATURE_ECC_serialize(in, jso);
3320*758e9fbaSOystein Eftevaag }
3321*758e9fbaSOystein Eftevaag
3322*758e9fbaSOystein Eftevaag /** Serialize a TPMS_SIGNATURE_SM2 to json.
3323*758e9fbaSOystein Eftevaag *
3324*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_SIGNATURE_SM2 to be serialized.
3325*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3326*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3327*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3328*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIGNATURE_SM2.
3329*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3330*758e9fbaSOystein Eftevaag */
3331*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SIGNATURE_SM2_serialize(const TPMS_SIGNATURE_SM2 * in,json_object ** jso)3332*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SIGNATURE_SM2_serialize(const TPMS_SIGNATURE_SM2 *in, json_object **jso)
3333*758e9fbaSOystein Eftevaag {
3334*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIGNATURE_ECC_serialize(in, jso);
3335*758e9fbaSOystein Eftevaag }
3336*758e9fbaSOystein Eftevaag
3337*758e9fbaSOystein Eftevaag /** Serialize a TPMS_SIGNATURE_ECSCHNORR to json.
3338*758e9fbaSOystein Eftevaag *
3339*758e9fbaSOystein Eftevaag * @param[in] in value of type TPMS_SIGNATURE_ECSCHNORR to be serialized.
3340*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3341*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3342*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3343*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIGNATURE_ECSCHNORR.
3344*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3345*758e9fbaSOystein Eftevaag */
3346*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_SIGNATURE_ECSCHNORR_serialize(const TPMS_SIGNATURE_ECSCHNORR * in,json_object ** jso)3347*758e9fbaSOystein Eftevaag ifapi_json_TPMS_SIGNATURE_ECSCHNORR_serialize(const TPMS_SIGNATURE_ECSCHNORR *in, json_object **jso)
3348*758e9fbaSOystein Eftevaag {
3349*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIGNATURE_ECC_serialize(in, jso);
3350*758e9fbaSOystein Eftevaag }
3351*758e9fbaSOystein Eftevaag
3352*758e9fbaSOystein Eftevaag /** Serialize a TPMU_SIGNATURE to json.
3353*758e9fbaSOystein Eftevaag *
3354*758e9fbaSOystein Eftevaag * This function expects the Bitfield to be encoded as unsigned int in host-endianess.
3355*758e9fbaSOystein Eftevaag * @param[in] in the value to be serialized.
3356*758e9fbaSOystein Eftevaag * @param[in] selector the type of the signature.
3357*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3358*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3359*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3360*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_SIGNATURE.
3361*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3362*758e9fbaSOystein Eftevaag */
3363*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMU_SIGNATURE_serialize(const TPMU_SIGNATURE * in,UINT32 selector,json_object ** jso)3364*758e9fbaSOystein Eftevaag ifapi_json_TPMU_SIGNATURE_serialize(const TPMU_SIGNATURE *in, UINT32 selector, json_object **jso)
3365*758e9fbaSOystein Eftevaag {
3366*758e9fbaSOystein Eftevaag switch (selector) {
3367*758e9fbaSOystein Eftevaag case TPM2_ALG_RSASSA:
3368*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIGNATURE_RSASSA_serialize(&in->rsassa, jso);
3369*758e9fbaSOystein Eftevaag case TPM2_ALG_RSAPSS:
3370*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIGNATURE_RSAPSS_serialize(&in->rsapss, jso);
3371*758e9fbaSOystein Eftevaag case TPM2_ALG_ECDSA:
3372*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIGNATURE_ECDSA_serialize(&in->ecdsa, jso);
3373*758e9fbaSOystein Eftevaag case TPM2_ALG_ECDAA:
3374*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIGNATURE_ECDAA_serialize(&in->ecdaa, jso);
3375*758e9fbaSOystein Eftevaag case TPM2_ALG_SM2:
3376*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIGNATURE_SM2_serialize(&in->sm2, jso);
3377*758e9fbaSOystein Eftevaag case TPM2_ALG_ECSCHNORR:
3378*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SIGNATURE_ECSCHNORR_serialize(&in->ecschnorr, jso);
3379*758e9fbaSOystein Eftevaag case TPM2_ALG_HMAC:
3380*758e9fbaSOystein Eftevaag return ifapi_json_TPMT_HA_serialize(&in->hmac, jso);
3381*758e9fbaSOystein Eftevaag default:
3382*758e9fbaSOystein Eftevaag LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
3383*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
3384*758e9fbaSOystein Eftevaag };
3385*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3386*758e9fbaSOystein Eftevaag }
3387*758e9fbaSOystein Eftevaag
3388*758e9fbaSOystein Eftevaag /** Serialize value of type TPMT_SIGNATURE to json.
3389*758e9fbaSOystein Eftevaag *
3390*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3391*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3392*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3393*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3394*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_SIGNATURE.
3395*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3396*758e9fbaSOystein Eftevaag */
3397*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMT_SIGNATURE_serialize(const TPMT_SIGNATURE * in,json_object ** jso)3398*758e9fbaSOystein Eftevaag ifapi_json_TPMT_SIGNATURE_serialize(const TPMT_SIGNATURE *in, json_object **jso)
3399*758e9fbaSOystein Eftevaag {
3400*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
3401*758e9fbaSOystein Eftevaag
3402*758e9fbaSOystein Eftevaag TSS2_RC r;
3403*758e9fbaSOystein Eftevaag json_object *jso2;
3404*758e9fbaSOystein Eftevaag if (*jso == NULL)
3405*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
3406*758e9fbaSOystein Eftevaag jso2 = NULL;
3407*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_SIG_SCHEME_serialize(in->sigAlg, &jso2);
3408*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ALG_SIG_SCHEME");
3409*758e9fbaSOystein Eftevaag
3410*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "sigAlg", jso2);
3411*758e9fbaSOystein Eftevaag if (in->sigAlg != TPM2_ALG_NULL) {
3412*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
3413*758e9fbaSOystein Eftevaag r = ifapi_json_TPMU_SIGNATURE_serialize(&in->signature, in->sigAlg, &jso2);
3414*758e9fbaSOystein Eftevaag return_if_error(r,"Serialize TPMU_SIGNATURE");
3415*758e9fbaSOystein Eftevaag
3416*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "signature", jso2);
3417*758e9fbaSOystein Eftevaag }
3418*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3419*758e9fbaSOystein Eftevaag }
3420*758e9fbaSOystein Eftevaag
3421*758e9fbaSOystein Eftevaag /** Serialize value of type TPM2B_ENCRYPTED_SECRET to json.
3422*758e9fbaSOystein Eftevaag *
3423*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3424*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3425*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3426*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3427*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_ENCRYPTED_SECRET.
3428*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3429*758e9fbaSOystein Eftevaag */
3430*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2B_ENCRYPTED_SECRET_serialize(const TPM2B_ENCRYPTED_SECRET * in,json_object ** jso)3431*758e9fbaSOystein Eftevaag ifapi_json_TPM2B_ENCRYPTED_SECRET_serialize(const TPM2B_ENCRYPTED_SECRET *in, json_object **jso)
3432*758e9fbaSOystein Eftevaag {
3433*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
3434*758e9fbaSOystein Eftevaag
3435*758e9fbaSOystein Eftevaag if (in->size > sizeof(TPMU_ENCRYPTED_SECRET)) {
3436*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = sizeof(TPMU_ENCRYPTED_SECRET))",
3437*758e9fbaSOystein Eftevaag (size_t)in->size, (size_t)sizeof(TPMU_ENCRYPTED_SECRET));
3438*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
3439*758e9fbaSOystein Eftevaag }
3440*758e9fbaSOystein Eftevaag char hex_string[((size_t)in->size)*2+1];
3441*758e9fbaSOystein Eftevaag
3442*758e9fbaSOystein Eftevaag for (size_t i = 0, off = 0; i < in->size; i++, off+=2)
3443*758e9fbaSOystein Eftevaag sprintf(&hex_string[off], "%02x", in->secret[i]);
3444*758e9fbaSOystein Eftevaag hex_string[(in->size)*2] = '\0';
3445*758e9fbaSOystein Eftevaag *jso = json_object_new_string (hex_string);
3446*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
3447*758e9fbaSOystein Eftevaag
3448*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3449*758e9fbaSOystein Eftevaag }
3450*758e9fbaSOystein Eftevaag
3451*758e9fbaSOystein Eftevaag /** Serialize TPMI_ALG_PUBLIC to json.
3452*758e9fbaSOystein Eftevaag *
3453*758e9fbaSOystein Eftevaag * @param[in] in variable to be serialized.
3454*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3455*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
3456*758e9fbaSOystein Eftevaag * the function.
3457*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
3458*758e9fbaSOystein Eftevaag */
3459*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMI_ALG_PUBLIC_serialize(const TPMI_ALG_PUBLIC in,json_object ** jso)3460*758e9fbaSOystein Eftevaag ifapi_json_TPMI_ALG_PUBLIC_serialize(const TPMI_ALG_PUBLIC in, json_object **jso)
3461*758e9fbaSOystein Eftevaag {
3462*758e9fbaSOystein Eftevaag CHECK_IN_LIST(TPMI_ALG_PUBLIC, in, TPM2_ALG_RSA, TPM2_ALG_KEYEDHASH,
3463*758e9fbaSOystein Eftevaag TPM2_ALG_ECC, TPM2_ALG_SYMCIPHER, TPM2_ALG_NULL);
3464*758e9fbaSOystein Eftevaag return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
3465*758e9fbaSOystein Eftevaag }
3466*758e9fbaSOystein Eftevaag
3467*758e9fbaSOystein Eftevaag /** Serialize a TPMU_PUBLIC_ID to json.
3468*758e9fbaSOystein Eftevaag *
3469*758e9fbaSOystein Eftevaag * This function expects the Bitfield to be encoded as unsigned int in host-endianess.
3470*758e9fbaSOystein Eftevaag * @param[in] in the value to be serialized.
3471*758e9fbaSOystein Eftevaag * @param[in] selector the type of the public ID.
3472*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3473*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3474*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3475*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_PUBLIC_ID.
3476*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3477*758e9fbaSOystein Eftevaag */
3478*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMU_PUBLIC_ID_serialize(const TPMU_PUBLIC_ID * in,UINT32 selector,json_object ** jso)3479*758e9fbaSOystein Eftevaag ifapi_json_TPMU_PUBLIC_ID_serialize(const TPMU_PUBLIC_ID *in, UINT32 selector, json_object **jso)
3480*758e9fbaSOystein Eftevaag {
3481*758e9fbaSOystein Eftevaag switch (selector) {
3482*758e9fbaSOystein Eftevaag case TPM2_ALG_KEYEDHASH:
3483*758e9fbaSOystein Eftevaag return ifapi_json_TPM2B_DIGEST_serialize(&in->keyedHash, jso);
3484*758e9fbaSOystein Eftevaag case TPM2_ALG_SYMCIPHER:
3485*758e9fbaSOystein Eftevaag return ifapi_json_TPM2B_DIGEST_serialize(&in->sym, jso);
3486*758e9fbaSOystein Eftevaag case TPM2_ALG_RSA:
3487*758e9fbaSOystein Eftevaag return ifapi_json_TPM2B_PUBLIC_KEY_RSA_serialize(&in->rsa, jso);
3488*758e9fbaSOystein Eftevaag case TPM2_ALG_ECC:
3489*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_ECC_POINT_serialize(&in->ecc, jso);
3490*758e9fbaSOystein Eftevaag default:
3491*758e9fbaSOystein Eftevaag LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
3492*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
3493*758e9fbaSOystein Eftevaag };
3494*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3495*758e9fbaSOystein Eftevaag }
3496*758e9fbaSOystein Eftevaag
3497*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_KEYEDHASH_PARMS to json.
3498*758e9fbaSOystein Eftevaag *
3499*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3500*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3501*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3502*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3503*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_KEYEDHASH_PARMS.
3504*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3505*758e9fbaSOystein Eftevaag */
3506*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_KEYEDHASH_PARMS_serialize(const TPMS_KEYEDHASH_PARMS * in,json_object ** jso)3507*758e9fbaSOystein Eftevaag ifapi_json_TPMS_KEYEDHASH_PARMS_serialize(const TPMS_KEYEDHASH_PARMS *in, json_object **jso)
3508*758e9fbaSOystein Eftevaag {
3509*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
3510*758e9fbaSOystein Eftevaag
3511*758e9fbaSOystein Eftevaag TSS2_RC r;
3512*758e9fbaSOystein Eftevaag json_object *jso2;
3513*758e9fbaSOystein Eftevaag if (*jso == NULL)
3514*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
3515*758e9fbaSOystein Eftevaag jso2 = NULL;
3516*758e9fbaSOystein Eftevaag r = ifapi_json_TPMT_KEYEDHASH_SCHEME_serialize(&in->scheme, &jso2);
3517*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMT_KEYEDHASH_SCHEME");
3518*758e9fbaSOystein Eftevaag
3519*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "scheme", jso2);
3520*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3521*758e9fbaSOystein Eftevaag }
3522*758e9fbaSOystein Eftevaag
3523*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_ASYM_PARMS to json.
3524*758e9fbaSOystein Eftevaag *
3525*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3526*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3527*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3528*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3529*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_ASYM_PARMS.
3530*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3531*758e9fbaSOystein Eftevaag */
3532*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_ASYM_PARMS_serialize(const TPMS_ASYM_PARMS * in,json_object ** jso)3533*758e9fbaSOystein Eftevaag ifapi_json_TPMS_ASYM_PARMS_serialize(const TPMS_ASYM_PARMS *in, json_object **jso)
3534*758e9fbaSOystein Eftevaag {
3535*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
3536*758e9fbaSOystein Eftevaag
3537*758e9fbaSOystein Eftevaag TSS2_RC r;
3538*758e9fbaSOystein Eftevaag json_object *jso2;
3539*758e9fbaSOystein Eftevaag if (*jso == NULL)
3540*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
3541*758e9fbaSOystein Eftevaag jso2 = NULL;
3542*758e9fbaSOystein Eftevaag r = ifapi_json_TPMT_SYM_DEF_OBJECT_serialize(&in->symmetric, &jso2);
3543*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMT_SYM_DEF_OBJECT");
3544*758e9fbaSOystein Eftevaag
3545*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "symmetric", jso2);
3546*758e9fbaSOystein Eftevaag jso2 = NULL;
3547*758e9fbaSOystein Eftevaag r = ifapi_json_TPMT_ASYM_SCHEME_serialize(&in->scheme, &jso2);
3548*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMT_ASYM_SCHEME");
3549*758e9fbaSOystein Eftevaag
3550*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "scheme", jso2);
3551*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3552*758e9fbaSOystein Eftevaag }
3553*758e9fbaSOystein Eftevaag
3554*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_RSA_PARMS to json.
3555*758e9fbaSOystein Eftevaag *
3556*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3557*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3558*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3559*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3560*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_RSA_PARMS.
3561*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3562*758e9fbaSOystein Eftevaag */
3563*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_RSA_PARMS_serialize(const TPMS_RSA_PARMS * in,json_object ** jso)3564*758e9fbaSOystein Eftevaag ifapi_json_TPMS_RSA_PARMS_serialize(const TPMS_RSA_PARMS *in, json_object **jso)
3565*758e9fbaSOystein Eftevaag {
3566*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
3567*758e9fbaSOystein Eftevaag
3568*758e9fbaSOystein Eftevaag TSS2_RC r;
3569*758e9fbaSOystein Eftevaag json_object *jso2;
3570*758e9fbaSOystein Eftevaag if (*jso == NULL)
3571*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
3572*758e9fbaSOystein Eftevaag jso2 = NULL;
3573*758e9fbaSOystein Eftevaag r = ifapi_json_TPMT_SYM_DEF_OBJECT_serialize(&in->symmetric, &jso2);
3574*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMT_SYM_DEF_OBJECT");
3575*758e9fbaSOystein Eftevaag
3576*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "symmetric", jso2);
3577*758e9fbaSOystein Eftevaag jso2 = NULL;
3578*758e9fbaSOystein Eftevaag r = ifapi_json_TPMT_RSA_SCHEME_serialize(&in->scheme, &jso2);
3579*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMT_RSA_SCHEME");
3580*758e9fbaSOystein Eftevaag
3581*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "scheme", jso2);
3582*758e9fbaSOystein Eftevaag jso2 = NULL;
3583*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_RSA_KEY_BITS_serialize(in->keyBits, &jso2);
3584*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_RSA_KEY_BITS");
3585*758e9fbaSOystein Eftevaag
3586*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "keyBits", jso2);
3587*758e9fbaSOystein Eftevaag jso2 = NULL;
3588*758e9fbaSOystein Eftevaag r = ifapi_json_UINT32_serialize(in->exponent, &jso2);
3589*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize UINT32");
3590*758e9fbaSOystein Eftevaag
3591*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "exponent", jso2);
3592*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3593*758e9fbaSOystein Eftevaag }
3594*758e9fbaSOystein Eftevaag
3595*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_ECC_PARMS to json.
3596*758e9fbaSOystein Eftevaag *
3597*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3598*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3599*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3600*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3601*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_ECC_PARMS.
3602*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3603*758e9fbaSOystein Eftevaag */
3604*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_ECC_PARMS_serialize(const TPMS_ECC_PARMS * in,json_object ** jso)3605*758e9fbaSOystein Eftevaag ifapi_json_TPMS_ECC_PARMS_serialize(const TPMS_ECC_PARMS *in, json_object **jso)
3606*758e9fbaSOystein Eftevaag {
3607*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
3608*758e9fbaSOystein Eftevaag
3609*758e9fbaSOystein Eftevaag TSS2_RC r;
3610*758e9fbaSOystein Eftevaag json_object *jso2;
3611*758e9fbaSOystein Eftevaag if (*jso == NULL)
3612*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
3613*758e9fbaSOystein Eftevaag jso2 = NULL;
3614*758e9fbaSOystein Eftevaag r = ifapi_json_TPMT_SYM_DEF_OBJECT_serialize(&in->symmetric, &jso2);
3615*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMT_SYM_DEF_OBJECT");
3616*758e9fbaSOystein Eftevaag
3617*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "symmetric", jso2);
3618*758e9fbaSOystein Eftevaag jso2 = NULL;
3619*758e9fbaSOystein Eftevaag r = ifapi_json_TPMT_ECC_SCHEME_serialize(&in->scheme, &jso2);
3620*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMT_ECC_SCHEME");
3621*758e9fbaSOystein Eftevaag
3622*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "scheme", jso2);
3623*758e9fbaSOystein Eftevaag jso2 = NULL;
3624*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ECC_CURVE_serialize(in->curveID, &jso2);
3625*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ECC_CURVE");
3626*758e9fbaSOystein Eftevaag
3627*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "curveID", jso2);
3628*758e9fbaSOystein Eftevaag jso2 = NULL;
3629*758e9fbaSOystein Eftevaag r = ifapi_json_TPMT_KDF_SCHEME_serialize(&in->kdf, &jso2);
3630*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMT_KDF_SCHEME");
3631*758e9fbaSOystein Eftevaag
3632*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "kdf", jso2);
3633*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3634*758e9fbaSOystein Eftevaag }
3635*758e9fbaSOystein Eftevaag
3636*758e9fbaSOystein Eftevaag /** Serialize a TPMU_PUBLIC_PARMS to json.
3637*758e9fbaSOystein Eftevaag *
3638*758e9fbaSOystein Eftevaag * This function expects the Bitfield to be encoded as unsigned int in host-endianess.
3639*758e9fbaSOystein Eftevaag * @param[in] in the value to be serialized.
3640*758e9fbaSOystein Eftevaag * @param[in] selector the type of the public parameters.
3641*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3642*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3643*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3644*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_PUBLIC_PARMS.
3645*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3646*758e9fbaSOystein Eftevaag */
3647*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMU_PUBLIC_PARMS_serialize(const TPMU_PUBLIC_PARMS * in,UINT32 selector,json_object ** jso)3648*758e9fbaSOystein Eftevaag ifapi_json_TPMU_PUBLIC_PARMS_serialize(const TPMU_PUBLIC_PARMS *in, UINT32 selector, json_object **jso)
3649*758e9fbaSOystein Eftevaag {
3650*758e9fbaSOystein Eftevaag switch (selector) {
3651*758e9fbaSOystein Eftevaag case TPM2_ALG_KEYEDHASH:
3652*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_KEYEDHASH_PARMS_serialize(&in->keyedHashDetail, jso);
3653*758e9fbaSOystein Eftevaag case TPM2_ALG_SYMCIPHER:
3654*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_SYMCIPHER_PARMS_serialize(&in->symDetail, jso);
3655*758e9fbaSOystein Eftevaag case TPM2_ALG_RSA:
3656*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_RSA_PARMS_serialize(&in->rsaDetail, jso);
3657*758e9fbaSOystein Eftevaag case TPM2_ALG_ECC:
3658*758e9fbaSOystein Eftevaag return ifapi_json_TPMS_ECC_PARMS_serialize(&in->eccDetail, jso);
3659*758e9fbaSOystein Eftevaag default:
3660*758e9fbaSOystein Eftevaag LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
3661*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
3662*758e9fbaSOystein Eftevaag };
3663*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3664*758e9fbaSOystein Eftevaag }
3665*758e9fbaSOystein Eftevaag
3666*758e9fbaSOystein Eftevaag /** Serialize value of type TPMT_PUBLIC to json.
3667*758e9fbaSOystein Eftevaag *
3668*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3669*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3670*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3671*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3672*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_PUBLIC.
3673*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3674*758e9fbaSOystein Eftevaag */
3675*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMT_PUBLIC_serialize(const TPMT_PUBLIC * in,json_object ** jso)3676*758e9fbaSOystein Eftevaag ifapi_json_TPMT_PUBLIC_serialize(const TPMT_PUBLIC *in, json_object **jso)
3677*758e9fbaSOystein Eftevaag {
3678*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
3679*758e9fbaSOystein Eftevaag
3680*758e9fbaSOystein Eftevaag TSS2_RC r;
3681*758e9fbaSOystein Eftevaag json_object *jso2;
3682*758e9fbaSOystein Eftevaag if (*jso == NULL)
3683*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
3684*758e9fbaSOystein Eftevaag jso2 = NULL;
3685*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_PUBLIC_serialize(in->type, &jso2);
3686*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ALG_PUBLIC");
3687*758e9fbaSOystein Eftevaag
3688*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "type", jso2);
3689*758e9fbaSOystein Eftevaag jso2 = NULL;
3690*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_HASH_serialize(in->nameAlg, &jso2);
3691*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ALG_HASH");
3692*758e9fbaSOystein Eftevaag
3693*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "nameAlg", jso2);
3694*758e9fbaSOystein Eftevaag jso2 = NULL;
3695*758e9fbaSOystein Eftevaag r = ifapi_json_TPMA_OBJECT_serialize(in->objectAttributes, &jso2);
3696*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMA_OBJECT");
3697*758e9fbaSOystein Eftevaag
3698*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "objectAttributes", jso2);
3699*758e9fbaSOystein Eftevaag jso2 = NULL;
3700*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_DIGEST_serialize(&in->authPolicy, &jso2);
3701*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_DIGEST");
3702*758e9fbaSOystein Eftevaag
3703*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "authPolicy", jso2);
3704*758e9fbaSOystein Eftevaag jso2 = NULL;
3705*758e9fbaSOystein Eftevaag r = ifapi_json_TPMU_PUBLIC_PARMS_serialize(&in->parameters, in->type, &jso2);
3706*758e9fbaSOystein Eftevaag return_if_error(r,"Serialize TPMU_PUBLIC_PARMS");
3707*758e9fbaSOystein Eftevaag
3708*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "parameters", jso2);
3709*758e9fbaSOystein Eftevaag jso2 = NULL;
3710*758e9fbaSOystein Eftevaag r = ifapi_json_TPMU_PUBLIC_ID_serialize(&in->unique, in->type, &jso2);
3711*758e9fbaSOystein Eftevaag return_if_error(r,"Serialize TPMU_PUBLIC_ID");
3712*758e9fbaSOystein Eftevaag
3713*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "unique", jso2);
3714*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3715*758e9fbaSOystein Eftevaag }
3716*758e9fbaSOystein Eftevaag
3717*758e9fbaSOystein Eftevaag /** Serialize a TPM2B_PUBLIC to json.
3718*758e9fbaSOystein Eftevaag *
3719*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3720*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3721*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3722*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3723*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_PUBLIC.
3724*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3725*758e9fbaSOystein Eftevaag */
3726*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2B_PUBLIC_serialize(const TPM2B_PUBLIC * in,json_object ** jso)3727*758e9fbaSOystein Eftevaag ifapi_json_TPM2B_PUBLIC_serialize(const TPM2B_PUBLIC *in, json_object **jso)
3728*758e9fbaSOystein Eftevaag {
3729*758e9fbaSOystein Eftevaag if (*jso == NULL)
3730*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
3731*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
3732*758e9fbaSOystein Eftevaag
3733*758e9fbaSOystein Eftevaag json_object *jso2;
3734*758e9fbaSOystein Eftevaag
3735*758e9fbaSOystein Eftevaag jso2 = NULL;
3736*758e9fbaSOystein Eftevaag if (ifapi_json_UINT16_serialize(in->size, &jso2))
3737*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
3738*758e9fbaSOystein Eftevaag
3739*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "size", jso2);
3740*758e9fbaSOystein Eftevaag
3741*758e9fbaSOystein Eftevaag jso2 = NULL;
3742*758e9fbaSOystein Eftevaag if (ifapi_json_TPMT_PUBLIC_serialize(&in->publicArea, &jso2))
3743*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
3744*758e9fbaSOystein Eftevaag
3745*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "publicArea", jso2);
3746*758e9fbaSOystein Eftevaag
3747*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3748*758e9fbaSOystein Eftevaag }
3749*758e9fbaSOystein Eftevaag
3750*758e9fbaSOystein Eftevaag /** Serialize value of type TPM2B_PRIVATE to json.
3751*758e9fbaSOystein Eftevaag *
3752*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3753*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3754*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3755*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3756*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_PRIVATE.
3757*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3758*758e9fbaSOystein Eftevaag */
3759*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2B_PRIVATE_serialize(const TPM2B_PRIVATE * in,json_object ** jso)3760*758e9fbaSOystein Eftevaag ifapi_json_TPM2B_PRIVATE_serialize(const TPM2B_PRIVATE *in, json_object **jso)
3761*758e9fbaSOystein Eftevaag {
3762*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
3763*758e9fbaSOystein Eftevaag
3764*758e9fbaSOystein Eftevaag if (in->size > sizeof(_PRIVATE)) {
3765*758e9fbaSOystein Eftevaag LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = sizeof(_PRIVATE))",
3766*758e9fbaSOystein Eftevaag (size_t)in->size, (size_t)sizeof(_PRIVATE));
3767*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
3768*758e9fbaSOystein Eftevaag }
3769*758e9fbaSOystein Eftevaag char hex_string[((size_t)in->size)*2+1];
3770*758e9fbaSOystein Eftevaag
3771*758e9fbaSOystein Eftevaag for (size_t i = 0, off = 0; i < in->size; i++, off+=2)
3772*758e9fbaSOystein Eftevaag sprintf(&hex_string[off], "%02x", in->buffer[i]);
3773*758e9fbaSOystein Eftevaag hex_string[(in->size)*2] = '\0';
3774*758e9fbaSOystein Eftevaag *jso = json_object_new_string (hex_string);
3775*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
3776*758e9fbaSOystein Eftevaag
3777*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3778*758e9fbaSOystein Eftevaag }
3779*758e9fbaSOystein Eftevaag
3780*758e9fbaSOystein Eftevaag /** Serialize TPM2_NT to json.
3781*758e9fbaSOystein Eftevaag *
3782*758e9fbaSOystein Eftevaag * @param[in] in constant to be serialized.
3783*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3784*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3785*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3786*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_NT.
3787*758e9fbaSOystein Eftevaag */
3788*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2_NT_serialize(const TPM2_NT in,json_object ** jso)3789*758e9fbaSOystein Eftevaag ifapi_json_TPM2_NT_serialize(const TPM2_NT in, json_object **jso)
3790*758e9fbaSOystein Eftevaag {
3791*758e9fbaSOystein Eftevaag static const struct { TPM2_NT in; char *name; } tab[] = {
3792*758e9fbaSOystein Eftevaag { TPM2_NT_ORDINARY, "ORDINARY" },
3793*758e9fbaSOystein Eftevaag { TPM2_NT_COUNTER, "COUNTER" },
3794*758e9fbaSOystein Eftevaag { TPM2_NT_BITS, "BITS" },
3795*758e9fbaSOystein Eftevaag { TPM2_NT_EXTEND, "EXTEND" },
3796*758e9fbaSOystein Eftevaag { TPM2_NT_PIN_FAIL, "PIN_FAIL" },
3797*758e9fbaSOystein Eftevaag { TPM2_NT_PIN_PASS, "PIN_PASS" },
3798*758e9fbaSOystein Eftevaag };
3799*758e9fbaSOystein Eftevaag
3800*758e9fbaSOystein Eftevaag for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
3801*758e9fbaSOystein Eftevaag if (tab[i].in == in) {
3802*758e9fbaSOystein Eftevaag *jso = json_object_new_string(tab[i].name);
3803*758e9fbaSOystein Eftevaag check_oom(*jso);
3804*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3805*758e9fbaSOystein Eftevaag }
3806*758e9fbaSOystein Eftevaag }
3807*758e9fbaSOystein Eftevaag return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
3808*758e9fbaSOystein Eftevaag }
3809*758e9fbaSOystein Eftevaag
3810*758e9fbaSOystein Eftevaag /** Serialize a TPMA_NV to json.
3811*758e9fbaSOystein Eftevaag *
3812*758e9fbaSOystein Eftevaag * This function expects the Bitfield to be encoded as unsigned int in host-endianess.
3813*758e9fbaSOystein Eftevaag *
3814*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3815*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3816*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3817*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3818*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPMA_NV.
3819*758e9fbaSOystein Eftevaag */
3820*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMA_NV_serialize(const TPMA_NV in,json_object ** jso)3821*758e9fbaSOystein Eftevaag ifapi_json_TPMA_NV_serialize(const TPMA_NV in, json_object **jso)
3822*758e9fbaSOystein Eftevaag {
3823*758e9fbaSOystein Eftevaag struct { TPMA_NV in; char *name; } tab[] = {
3824*758e9fbaSOystein Eftevaag { TPMA_NV_PPWRITE, "PPWRITE" },
3825*758e9fbaSOystein Eftevaag { TPMA_NV_OWNERWRITE, "OWNERWRITE" },
3826*758e9fbaSOystein Eftevaag { TPMA_NV_AUTHWRITE, "AUTHWRITE" },
3827*758e9fbaSOystein Eftevaag { TPMA_NV_POLICYWRITE, "POLICYWRITE" },
3828*758e9fbaSOystein Eftevaag { TPMA_NV_POLICY_DELETE, "POLICY_DELETE" },
3829*758e9fbaSOystein Eftevaag { TPMA_NV_WRITELOCKED, "WRITELOCKED" },
3830*758e9fbaSOystein Eftevaag { TPMA_NV_WRITEALL, "WRITEALL" },
3831*758e9fbaSOystein Eftevaag { TPMA_NV_WRITEDEFINE, "WRITEDEFINE" },
3832*758e9fbaSOystein Eftevaag { TPMA_NV_WRITE_STCLEAR, "WRITE_STCLEAR" },
3833*758e9fbaSOystein Eftevaag { TPMA_NV_GLOBALLOCK, "GLOBALLOCK" },
3834*758e9fbaSOystein Eftevaag { TPMA_NV_PPREAD, "PPREAD" },
3835*758e9fbaSOystein Eftevaag { TPMA_NV_OWNERREAD, "OWNERREAD" },
3836*758e9fbaSOystein Eftevaag { TPMA_NV_AUTHREAD, "AUTHREAD" },
3837*758e9fbaSOystein Eftevaag { TPMA_NV_POLICYREAD, "POLICYREAD" },
3838*758e9fbaSOystein Eftevaag { TPMA_NV_NO_DA, "NO_DA" },
3839*758e9fbaSOystein Eftevaag { TPMA_NV_ORDERLY, "ORDERLY" },
3840*758e9fbaSOystein Eftevaag { TPMA_NV_CLEAR_STCLEAR, "CLEAR_STCLEAR" },
3841*758e9fbaSOystein Eftevaag { TPMA_NV_READLOCKED, "READLOCKED" },
3842*758e9fbaSOystein Eftevaag { TPMA_NV_WRITTEN, "WRITTEN" },
3843*758e9fbaSOystein Eftevaag { TPMA_NV_PLATFORMCREATE, "PLATFORMCREATE" },
3844*758e9fbaSOystein Eftevaag { TPMA_NV_READ_STCLEAR, "READ_STCLEAR" },
3845*758e9fbaSOystein Eftevaag };
3846*758e9fbaSOystein Eftevaag
3847*758e9fbaSOystein Eftevaag UINT32 input;
3848*758e9fbaSOystein Eftevaag input = (UINT32) in;
3849*758e9fbaSOystein Eftevaag json_object *jso_bit;
3850*758e9fbaSOystein Eftevaag if (*jso == NULL) {
3851*758e9fbaSOystein Eftevaag *jso = json_object_new_object();
3852*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
3853*758e9fbaSOystein Eftevaag }
3854*758e9fbaSOystein Eftevaag size_t n = sizeof(tab) / sizeof(tab[0]);
3855*758e9fbaSOystein Eftevaag size_t i;
3856*758e9fbaSOystein Eftevaag for (i = 0; i < n; i++) {
3857*758e9fbaSOystein Eftevaag if (tab[i].in & input)
3858*758e9fbaSOystein Eftevaag jso_bit = json_object_new_int(1);
3859*758e9fbaSOystein Eftevaag else
3860*758e9fbaSOystein Eftevaag jso_bit = json_object_new_int(0);
3861*758e9fbaSOystein Eftevaag return_if_null(jso_bit, "Out of memory.", TSS2_FAPI_RC_MEMORY);
3862*758e9fbaSOystein Eftevaag
3863*758e9fbaSOystein Eftevaag json_object_object_add(*jso, tab[i].name, jso_bit);
3864*758e9fbaSOystein Eftevaag }
3865*758e9fbaSOystein Eftevaag TPM2_NT input2 = (TPMA_NV_TPM2_NT_MASK & input)>>4;
3866*758e9fbaSOystein Eftevaag json_object *jso2 = NULL;
3867*758e9fbaSOystein Eftevaag TSS2_RC r = ifapi_json_TPM2_NT_serialize(input2, &jso2);
3868*758e9fbaSOystein Eftevaag return_if_error(r, "Bad value");
3869*758e9fbaSOystein Eftevaag
3870*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "TPM2_NT", jso2);
3871*758e9fbaSOystein Eftevaag
3872*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3873*758e9fbaSOystein Eftevaag }
3874*758e9fbaSOystein Eftevaag
3875*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_NV_PUBLIC to json.
3876*758e9fbaSOystein Eftevaag *
3877*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3878*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3879*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3880*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3881*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_NV_PUBLIC.
3882*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3883*758e9fbaSOystein Eftevaag */
3884*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_NV_PUBLIC_serialize(const TPMS_NV_PUBLIC * in,json_object ** jso)3885*758e9fbaSOystein Eftevaag ifapi_json_TPMS_NV_PUBLIC_serialize(const TPMS_NV_PUBLIC *in, json_object **jso)
3886*758e9fbaSOystein Eftevaag {
3887*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
3888*758e9fbaSOystein Eftevaag
3889*758e9fbaSOystein Eftevaag TSS2_RC r;
3890*758e9fbaSOystein Eftevaag json_object *jso2;
3891*758e9fbaSOystein Eftevaag if (*jso == NULL)
3892*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
3893*758e9fbaSOystein Eftevaag jso2 = NULL;
3894*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_RH_NV_INDEX_serialize(in->nvIndex, &jso2);
3895*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_RH_NV_INDEX");
3896*758e9fbaSOystein Eftevaag
3897*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "nvIndex", jso2);
3898*758e9fbaSOystein Eftevaag jso2 = NULL;
3899*758e9fbaSOystein Eftevaag r = ifapi_json_TPMI_ALG_HASH_serialize(in->nameAlg, &jso2);
3900*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMI_ALG_HASH");
3901*758e9fbaSOystein Eftevaag
3902*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "nameAlg", jso2);
3903*758e9fbaSOystein Eftevaag jso2 = NULL;
3904*758e9fbaSOystein Eftevaag r = ifapi_json_TPMA_NV_serialize(in->attributes, &jso2);
3905*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMA_NV");
3906*758e9fbaSOystein Eftevaag
3907*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "attributes", jso2);
3908*758e9fbaSOystein Eftevaag jso2 = NULL;
3909*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_DIGEST_serialize(&in->authPolicy, &jso2);
3910*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_DIGEST");
3911*758e9fbaSOystein Eftevaag
3912*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "authPolicy", jso2);
3913*758e9fbaSOystein Eftevaag jso2 = NULL;
3914*758e9fbaSOystein Eftevaag r = ifapi_json_UINT16_serialize(in->dataSize, &jso2);
3915*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize UINT16");
3916*758e9fbaSOystein Eftevaag
3917*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "dataSize", jso2);
3918*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3919*758e9fbaSOystein Eftevaag }
3920*758e9fbaSOystein Eftevaag
3921*758e9fbaSOystein Eftevaag /** Serialize a TPM2B_NV_PUBLIC to json.
3922*758e9fbaSOystein Eftevaag *
3923*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3924*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3925*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3926*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3927*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_NV_PUBLIC.
3928*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3929*758e9fbaSOystein Eftevaag */
3930*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2B_NV_PUBLIC_serialize(const TPM2B_NV_PUBLIC * in,json_object ** jso)3931*758e9fbaSOystein Eftevaag ifapi_json_TPM2B_NV_PUBLIC_serialize(const TPM2B_NV_PUBLIC *in, json_object **jso)
3932*758e9fbaSOystein Eftevaag {
3933*758e9fbaSOystein Eftevaag if (*jso == NULL)
3934*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
3935*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
3936*758e9fbaSOystein Eftevaag
3937*758e9fbaSOystein Eftevaag json_object *jso2;
3938*758e9fbaSOystein Eftevaag
3939*758e9fbaSOystein Eftevaag jso2 = NULL;
3940*758e9fbaSOystein Eftevaag if (ifapi_json_UINT16_serialize(in->size, &jso2))
3941*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
3942*758e9fbaSOystein Eftevaag
3943*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "size", jso2);
3944*758e9fbaSOystein Eftevaag
3945*758e9fbaSOystein Eftevaag jso2 = NULL;
3946*758e9fbaSOystein Eftevaag if (ifapi_json_TPMS_NV_PUBLIC_serialize(&in->nvPublic, &jso2))
3947*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
3948*758e9fbaSOystein Eftevaag
3949*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "nvPublic", jso2);
3950*758e9fbaSOystein Eftevaag
3951*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
3952*758e9fbaSOystein Eftevaag }
3953*758e9fbaSOystein Eftevaag
3954*758e9fbaSOystein Eftevaag /** Serialize value of type TPMS_CREATION_DATA to json.
3955*758e9fbaSOystein Eftevaag *
3956*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
3957*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
3958*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
3959*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
3960*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_CREATION_DATA.
3961*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
3962*758e9fbaSOystein Eftevaag */
3963*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPMS_CREATION_DATA_serialize(const TPMS_CREATION_DATA * in,json_object ** jso)3964*758e9fbaSOystein Eftevaag ifapi_json_TPMS_CREATION_DATA_serialize(const TPMS_CREATION_DATA *in, json_object **jso)
3965*758e9fbaSOystein Eftevaag {
3966*758e9fbaSOystein Eftevaag return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
3967*758e9fbaSOystein Eftevaag
3968*758e9fbaSOystein Eftevaag TSS2_RC r;
3969*758e9fbaSOystein Eftevaag json_object *jso2;
3970*758e9fbaSOystein Eftevaag if (*jso == NULL)
3971*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
3972*758e9fbaSOystein Eftevaag jso2 = NULL;
3973*758e9fbaSOystein Eftevaag r = ifapi_json_TPML_PCR_SELECTION_serialize(&in->pcrSelect, &jso2);
3974*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPML_PCR_SELECTION");
3975*758e9fbaSOystein Eftevaag
3976*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "pcrSelect", jso2);
3977*758e9fbaSOystein Eftevaag jso2 = NULL;
3978*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_DIGEST_serialize(&in->pcrDigest, &jso2);
3979*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_DIGEST");
3980*758e9fbaSOystein Eftevaag
3981*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "pcrDigest", jso2);
3982*758e9fbaSOystein Eftevaag jso2 = NULL;
3983*758e9fbaSOystein Eftevaag r = ifapi_json_TPMA_LOCALITY_serialize(in->locality, &jso2);
3984*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPMA_LOCALITY");
3985*758e9fbaSOystein Eftevaag
3986*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "locality", jso2);
3987*758e9fbaSOystein Eftevaag jso2 = NULL;
3988*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2_ALG_ID_serialize(in->parentNameAlg, &jso2);
3989*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2_ALG_ID");
3990*758e9fbaSOystein Eftevaag
3991*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "parentNameAlg", jso2);
3992*758e9fbaSOystein Eftevaag jso2 = NULL;
3993*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_NAME_serialize(&in->parentName, &jso2);
3994*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_NAME");
3995*758e9fbaSOystein Eftevaag
3996*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "parentName", jso2);
3997*758e9fbaSOystein Eftevaag jso2 = NULL;
3998*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_NAME_serialize(&in->parentQualifiedName, &jso2);
3999*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_NAME");
4000*758e9fbaSOystein Eftevaag
4001*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "parentQualifiedName", jso2);
4002*758e9fbaSOystein Eftevaag jso2 = NULL;
4003*758e9fbaSOystein Eftevaag r = ifapi_json_TPM2B_DATA_serialize(&in->outsideInfo, &jso2);
4004*758e9fbaSOystein Eftevaag return_if_error(r, "Serialize TPM2B_DATA");
4005*758e9fbaSOystein Eftevaag
4006*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "outsideInfo", jso2);
4007*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
4008*758e9fbaSOystein Eftevaag }
4009*758e9fbaSOystein Eftevaag
4010*758e9fbaSOystein Eftevaag /** Serialize a TPM2B_CREATION_DATA to json.
4011*758e9fbaSOystein Eftevaag *
4012*758e9fbaSOystein Eftevaag * @param[in] in value to be serialized.
4013*758e9fbaSOystein Eftevaag * @param[out] jso pointer to the json object.
4014*758e9fbaSOystein Eftevaag * @retval TSS2_RC_SUCCESS if the function call was a success.
4015*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
4016*758e9fbaSOystein Eftevaag * @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_CREATION_DATA.
4017*758e9fbaSOystein Eftevaag */
4018*758e9fbaSOystein Eftevaag TSS2_RC
ifapi_json_TPM2B_CREATION_DATA_serialize(const TPM2B_CREATION_DATA * in,json_object ** jso)4019*758e9fbaSOystein Eftevaag ifapi_json_TPM2B_CREATION_DATA_serialize(const TPM2B_CREATION_DATA *in, json_object **jso)
4020*758e9fbaSOystein Eftevaag {
4021*758e9fbaSOystein Eftevaag if (*jso == NULL)
4022*758e9fbaSOystein Eftevaag *jso = json_object_new_object ();
4023*758e9fbaSOystein Eftevaag return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
4024*758e9fbaSOystein Eftevaag
4025*758e9fbaSOystein Eftevaag json_object *jso2;
4026*758e9fbaSOystein Eftevaag
4027*758e9fbaSOystein Eftevaag jso2 = NULL;
4028*758e9fbaSOystein Eftevaag if (ifapi_json_UINT16_serialize(in->size, &jso2))
4029*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
4030*758e9fbaSOystein Eftevaag
4031*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "size", jso2);
4032*758e9fbaSOystein Eftevaag
4033*758e9fbaSOystein Eftevaag jso2 = NULL;
4034*758e9fbaSOystein Eftevaag if (ifapi_json_TPMS_CREATION_DATA_serialize(&in->creationData, &jso2))
4035*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_BAD_VALUE;
4036*758e9fbaSOystein Eftevaag
4037*758e9fbaSOystein Eftevaag json_object_object_add(*jso, "creationData", jso2);
4038*758e9fbaSOystein Eftevaag
4039*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
4040*758e9fbaSOystein Eftevaag }
4041