blob: fa904b2b3125906984036298f8679020b602c32a [file] [log] [blame]
/* SPDX-License-Identifier: BSD-2-Clause */
/*******************************************************************************
* Copyright 2018-2019, Fraunhofer SIT sponsored by Infineon Technologies AG
* All rights reserved.
******************************************************************************/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdio.h>
#include "tpm_json_serialize.h"
#define LOGMODULE fapijson
#include "util/log.h"
#include "util/aux_util.h"
#define CHECK_IN_LIST(type, needle, ...) \
type tab[] = { __VA_ARGS__ }; \
size_t i; \
for(i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) \
if (needle == tab[i]) \
break; \
if (i == sizeof(tab) / sizeof(tab[0])) { \
LOG_ERROR("Bad value"); \
return TSS2_FAPI_RC_BAD_VALUE; \
}
/** Serialize a TPMS_EMPTY.
*
* @param[in] in not used.
* @param[in] jso not used.
* @retval TSS2_RC_SUCCESS is always returnde.
*/
TSS2_RC
ifapi_json_TPMS_EMPTY_serialize(const TPMS_EMPTY *in, json_object **jso)
{
(void)(in);
(void)(jso);
return TSS2_RC_SUCCESS;
}
/** Serialize a pcr selection to json
*
* @param[in] sizeofSelect size of selection byte array.
* @param[in] pcrSelect selection array.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if sizeofSelect is too big.
*/
TSS2_RC
ifapi_json_pcr_select_serialize(
const UINT8 sizeofSelect,
const BYTE pcrSelect[],
json_object **jso)
{
if (*jso == NULL) {
*jso = json_object_new_array();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
}
if (sizeofSelect > TPM2_PCR_SELECT_MAX) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_PCR_SELECT_MAX)",
(size_t)sizeofSelect, (size_t)TPM2_PCR_SELECT_MAX);
return TSS2_FAPI_RC_BAD_VALUE;
}
UINT32 i1, i2;
json_object *jso2;
for (i1 = 0; i1 < TPM2_PCR_LAST - TPM2_PCR_FIRST; i1++) {
i2 = i1 + TPM2_PCR_FIRST;
if (pcrSelect[i2 / 8] & (BYTE)(1 << (i2 % 8))) {
jso2 = json_object_new_int(i2);
return_if_null(jso2, "Out of memory.", TSS2_FAPI_RC_MEMORY);
json_object_array_add(*jso, jso2);
}
}
return TSS2_RC_SUCCESS;
}
/** Serialize a TPMS_PCR_SELECT structure to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_PCR_SELECTION.
*/
TSS2_RC
ifapi_json_TPMS_PCR_SELECT_serialize(const TPMS_PCR_SELECT *in,
json_object **jso)
{
TSS2_RC r;
r = ifapi_json_pcr_select_serialize(in->sizeofSelect, &in->pcrSelect[0], jso);
return_if_error(r, "Serialize pcr selection");
return TSS2_RC_SUCCESS;
}
/** Serialize a TPMS_PCR_SELECTION structure to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_PCR_SELECTION.
*/
TSS2_RC
ifapi_json_TPMS_PCR_SELECTION_serialize(const TPMS_PCR_SELECTION *in,
json_object **jso)
{
if (*jso == NULL) {
*jso = json_object_new_object();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
}
TSS2_RC r;
json_object *jso2 = NULL;
r = ifapi_json_TPMI_ALG_HASH_serialize(in->hash, &jso2);
return_if_error(r, "Serialize pcr selection");
json_object_object_add(*jso, "hash", jso2);
jso2 = NULL;
r = ifapi_json_pcr_select_serialize(in->sizeofSelect, &in->pcrSelect[0], &jso2);
return_if_error(r, "Serialize pcr selection");
json_object_object_add(*jso, "pcrSelect", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize a TPMS_TAGGED_PCR_SELECT structure to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_TAGGED_PCR_SELECT.
*/
TSS2_RC
ifapi_json_TPMS_TAGGED_PCR_SELECT_serialize(const TPMS_TAGGED_PCR_SELECT *in,
json_object **jso)
{
TSS2_RC r;
if (*jso == NULL)
*jso = json_object_new_object();
json_object *jso2 = NULL;
r = ifapi_json_TPM2_PT_PCR_serialize(in->tag, &jso2);
return_if_error(r, "Serialize pcr selection");
json_object_object_add(*jso, "tag", jso2);
jso2 = NULL;
r = ifapi_json_pcr_select_serialize(in->sizeofSelect, &in->pcrSelect[0], &jso2);
return_if_error(r, "Serialize pcr selection");
json_object_object_add(*jso, "pcrSelect", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize a base_type UINT16 to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type UINT16.
*/
TSS2_RC
ifapi_json_UINT16_serialize(const UINT16 in, json_object **jso)
{
*jso = json_object_new_int64(in);
if (*jso == NULL) {
LOG_ERROR("Bad value %04"PRIx16"", in);
return TSS2_FAPI_RC_BAD_VALUE;
}
return TSS2_RC_SUCCESS;
}
/** Serialize a base_type UINT32 to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type UINT32.
*/
TSS2_RC
ifapi_json_UINT32_serialize(const UINT32 in, json_object **jso)
{
*jso = json_object_new_int64(in);
if (*jso == NULL) {
LOG_ERROR("Bad value %"PRIx32 "", in);
return TSS2_FAPI_RC_BAD_VALUE;
}
return TSS2_RC_SUCCESS;
}
/** Serialize a base_type INT32 to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type INT32.
*/
TSS2_RC
ifapi_json_INT32_serialize(const INT32 in, json_object **jso)
{
*jso = json_object_new_int64(in);
if (*jso == NULL) {
LOG_ERROR("Bad value %"PRIi32 "", in);
return TSS2_FAPI_RC_BAD_VALUE;
}
return TSS2_RC_SUCCESS;
}
/** Serialize a base_type UINT64 to json.
*
* @param[in] in variable to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type UINT64.
*/
TSS2_RC
ifapi_json_UINT64_serialize(UINT64 in, json_object **jso)
{
json_object *jso1 = NULL, *jso2 = NULL;
if (in < 0x1000000000000) {
*jso = json_object_new_int64(in);
if (*jso == NULL) {
LOG_ERROR("Bad value %"PRIu32 "", (uint32_t)in);
return TSS2_FAPI_RC_BAD_VALUE;
}
return TSS2_RC_SUCCESS;
}
jso1 = json_object_new_int64(in / 0x100000000);
return_if_null(jso1, "Out of memory.", TSS2_FAPI_RC_MEMORY);
in %= 0x100000000;
jso2 = json_object_new_int64(in);
if (!jso2) json_object_put(jso1);
return_if_null(jso2, "Out of memory.", TSS2_FAPI_RC_MEMORY);
*jso = json_object_new_array();
if (!*jso) json_object_put(jso1);
if (!*jso) json_object_put(jso2);
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
json_object_array_add(*jso, jso1);
json_object_array_add(*jso, jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize TPM2_GENERATED to json.
*
* @param[in] in constant to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_GENERATED.
*/
TSS2_RC
ifapi_json_TPM2_GENERATED_serialize(const TPM2_GENERATED in, json_object **jso)
{
if (in != TPM2_GENERATED_VALUE) {
return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
}
*jso = json_object_new_string("VALUE");
check_oom(*jso);
return TSS2_RC_SUCCESS;
}
/** Serialize TPM2_ALG_ID to json.
*
* @param[in] in constant to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_ALG_ID.
*/
TSS2_RC
ifapi_json_TPM2_ALG_ID_serialize(const TPM2_ALG_ID in, json_object **jso)
{
static const struct { TPM2_ALG_ID in; const char *name; } tab[] = {
{ TPM2_ALG_ERROR, "ERROR" },
{ TPM2_ALG_RSA, "RSA" },
{ TPM2_ALG_TDES, "TDES" },
/* We prefer SHA1 as output over SHA */
/* { TPM2_ALG_SHA, "SHA" },*/
{ TPM2_ALG_SHA1, "SHA1" },
{ TPM2_ALG_CMAC, "CMAC" },
{ TPM2_ALG_HMAC, "HMAC" },
{ TPM2_ALG_AES, "AES" },
{ TPM2_ALG_MGF1, "MGF1" },
{ TPM2_ALG_KEYEDHASH, "KEYEDHASH" },
{ TPM2_ALG_XOR, "XOR" },
{ TPM2_ALG_SHA256, "SHA256" },
{ TPM2_ALG_SHA384, "SHA384" },
{ TPM2_ALG_SHA512, "SHA512" },
{ TPM2_ALG_NULL, "NULL" },
{ TPM2_ALG_SM3_256, "SM3_256" },
{ TPM2_ALG_SM4, "SM4" },
{ TPM2_ALG_RSASSA, "RSASSA" },
{ TPM2_ALG_RSAES, "RSAES" },
{ TPM2_ALG_RSAPSS, "RSAPSS" },
{ TPM2_ALG_OAEP, "OAEP" },
{ TPM2_ALG_ECDSA, "ECDSA" },
{ TPM2_ALG_ECDH, "ECDH" },
{ TPM2_ALG_ECDAA, "ECDAA" },
{ TPM2_ALG_SM2, "SM2" },
{ TPM2_ALG_ECSCHNORR, "ECSCHNORR" },
{ TPM2_ALG_ECMQV, "ECMQV" },
{ TPM2_ALG_KDF1_SP800_56A, "KDF1_SP800_56A" },
{ TPM2_ALG_KDF2, "KDF2" },
{ TPM2_ALG_KDF1_SP800_108, "KDF1_SP800_108" },
{ TPM2_ALG_ECC, "ECC" },
{ TPM2_ALG_SYMCIPHER, "SYMCIPHER" },
{ TPM2_ALG_CAMELLIA, "CAMELLIA" },
{ TPM2_ALG_CTR, "CTR" },
{ TPM2_ALG_OFB, "OFB" },
{ TPM2_ALG_CBC, "CBC" },
{ TPM2_ALG_CFB, "CFB" },
{ TPM2_ALG_ECB, "ECB" },
};
for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
if (tab[i].in == in) {
*jso = json_object_new_string(tab[i].name);
check_oom(*jso);
return TSS2_RC_SUCCESS;
}
}
return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
}
/** Serialize TPM2_ECC_CURVE to json.
*
* @param[in] in constant to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_ECC_CURVE.
*/
TSS2_RC
ifapi_json_TPM2_ECC_CURVE_serialize(const TPM2_ECC_CURVE in, json_object **jso)
{
static const struct { TPM2_ECC_CURVE in; char *name; } tab[] = {
{ TPM2_ECC_NONE, "NONE" },
{ TPM2_ECC_NIST_P192, "NIST_P192" },
{ TPM2_ECC_NIST_P224, "NIST_P224" },
{ TPM2_ECC_NIST_P256, "NIST_P256" },
{ TPM2_ECC_NIST_P384, "NIST_P384" },
{ TPM2_ECC_NIST_P521, "NIST_P521" },
{ TPM2_ECC_BN_P256, "BN_P256" },
{ TPM2_ECC_BN_P638, "BN_P638" },
{ TPM2_ECC_SM2_P256, "SM2_P256" },
};
for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
if (tab[i].in == in) {
*jso = json_object_new_string(tab[i].name);
check_oom(*jso);
return TSS2_RC_SUCCESS;
}
}
return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
}
/** Serialize TPM2_CC to json.
*
* @param[in] in constant to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_CC.
*/
TSS2_RC
ifapi_json_TPM2_CC_serialize(const TPM2_CC in, json_object **jso)
{
static const struct { TPM2_CC in; char *name; } tab[] = {
/* We don't want to return FIRST but the actual value */
/* { TPM2_CC_FIRST, "FIRST" }, */
{ TPM2_CC_NV_UndefineSpaceSpecial, "NV_UndefineSpaceSpecial" },
{ TPM2_CC_EvictControl, "EvictControl" },
{ TPM2_CC_HierarchyControl, "HierarchyControl" },
{ TPM2_CC_NV_UndefineSpace, "NV_UndefineSpace" },
{ TPM2_CC_ChangeEPS, "ChangeEPS" },
{ TPM2_CC_ChangePPS, "ChangePPS" },
{ TPM2_CC_Clear, "Clear" },
{ TPM2_CC_ClearControl, "ClearControl" },
{ TPM2_CC_ClockSet, "ClockSet" },
{ TPM2_CC_HierarchyChangeAuth, "HierarchyChangeAuth" },
{ TPM2_CC_NV_DefineSpace, "NV_DefineSpace" },
{ TPM2_CC_PCR_Allocate, "PCR_Allocate" },
{ TPM2_CC_PCR_SetAuthPolicy, "PCR_SetAuthPolicy" },
{ TPM2_CC_PP_Commands, "PP_Commands" },
{ TPM2_CC_SetPrimaryPolicy, "SetPrimaryPolicy" },
{ TPM2_CC_FieldUpgradeStart, "FieldUpgradeStart" },
{ TPM2_CC_ClockRateAdjust, "ClockRateAdjust" },
{ TPM2_CC_CreatePrimary, "CreatePrimary" },
{ TPM2_CC_NV_GlobalWriteLock, "NV_GlobalWriteLock" },
{ TPM2_CC_GetCommandAuditDigest, "GetCommandAuditDigest" },
{ TPM2_CC_NV_Increment, "NV_Increment" },
{ TPM2_CC_NV_SetBits, "NV_SetBits" },
{ TPM2_CC_NV_Extend, "NV_Extend" },
{ TPM2_CC_NV_Write, "NV_Write" },
{ TPM2_CC_NV_WriteLock, "NV_WriteLock" },
{ TPM2_CC_DictionaryAttackLockReset, "DictionaryAttackLockReset" },
{ TPM2_CC_DictionaryAttackParameters, "DictionaryAttackParameters" },
{ TPM2_CC_NV_ChangeAuth, "NV_ChangeAuth" },
{ TPM2_CC_PCR_Event, "PCR_Event" },
{ TPM2_CC_PCR_Reset, "PCR_Reset" },
{ TPM2_CC_SequenceComplete, "SequenceComplete" },
{ TPM2_CC_SetAlgorithmSet, "SetAlgorithmSet" },
{ TPM2_CC_SetCommandCodeAuditStatus, "SetCommandCodeAuditStatus" },
{ TPM2_CC_FieldUpgradeData, "FieldUpgradeData" },
{ TPM2_CC_IncrementalSelfTest, "IncrementalSelfTest" },
{ TPM2_CC_SelfTest, "SelfTest" },
{ TPM2_CC_Startup, "Startup" },
{ TPM2_CC_Shutdown, "Shutdown" },
{ TPM2_CC_StirRandom, "StirRandom" },
{ TPM2_CC_ActivateCredential, "ActivateCredential" },
{ TPM2_CC_Certify, "Certify" },
{ TPM2_CC_PolicyNV, "PolicyNV" },
{ TPM2_CC_CertifyCreation, "CertifyCreation" },
{ TPM2_CC_Duplicate, "Duplicate" },
{ TPM2_CC_GetTime, "GetTime" },
{ TPM2_CC_GetSessionAuditDigest, "GetSessionAuditDigest" },
{ TPM2_CC_NV_Read, "NV_Read" },
{ TPM2_CC_NV_ReadLock, "NV_ReadLock" },
{ TPM2_CC_ObjectChangeAuth, "ObjectChangeAuth" },
{ TPM2_CC_PolicySecret, "PolicySecret" },
{ TPM2_CC_Rewrap, "Rewrap" },
{ TPM2_CC_Create, "Create" },
{ TPM2_CC_ECDH_ZGen, "ECDH_ZGen" },
{ TPM2_CC_HMAC, "HMAC" },
{ TPM2_CC_Import, "Import" },
{ TPM2_CC_Load, "Load" },
{ TPM2_CC_Quote, "Quote" },
{ TPM2_CC_RSA_Decrypt, "RSA_Decrypt" },
{ TPM2_CC_HMAC_Start, "HMAC_Start" },
{ TPM2_CC_SequenceUpdate, "SequenceUpdate" },
{ TPM2_CC_Sign, "Sign" },
{ TPM2_CC_Unseal, "Unseal" },
{ TPM2_CC_PolicySigned, "PolicySigned" },
{ TPM2_CC_ContextLoad, "ContextLoad" },
{ TPM2_CC_ContextSave, "ContextSave" },
{ TPM2_CC_ECDH_KeyGen, "ECDH_KeyGen" },
{ TPM2_CC_EncryptDecrypt, "EncryptDecrypt" },
{ TPM2_CC_FlushContext, "FlushContext" },
{ TPM2_CC_LoadExternal, "LoadExternal" },
{ TPM2_CC_MakeCredential, "MakeCredential" },
{ TPM2_CC_NV_ReadPublic, "NV_ReadPublic" },
{ TPM2_CC_PolicyAuthorize, "PolicyAuthorize" },
{ TPM2_CC_PolicyAuthValue, "PolicyAuthValue" },
{ TPM2_CC_PolicyCommandCode, "PolicyCommandCode" },
{ TPM2_CC_PolicyCounterTimer, "PolicyCounterTimer" },
{ TPM2_CC_PolicyCpHash, "PolicyCpHash" },
{ TPM2_CC_PolicyLocality, "PolicyLocality" },
{ TPM2_CC_PolicyNameHash, "PolicyNameHash" },
{ TPM2_CC_PolicyOR, "PolicyOR" },
{ TPM2_CC_PolicyTicket, "PolicyTicket" },
{ TPM2_CC_ReadPublic, "ReadPublic" },
{ TPM2_CC_RSA_Encrypt, "RSA_Encrypt" },
{ TPM2_CC_StartAuthSession, "StartAuthSession" },
{ TPM2_CC_VerifySignature, "VerifySignature" },
{ TPM2_CC_ECC_Parameters, "ECC_Parameters" },
{ TPM2_CC_FirmwareRead, "FirmwareRead" },
{ TPM2_CC_GetCapability, "GetCapability" },
{ TPM2_CC_GetRandom, "GetRandom" },
{ TPM2_CC_GetTestResult, "GetTestResult" },
{ TPM2_CC_Hash, "Hash" },
{ TPM2_CC_PCR_Read, "PCR_Read" },
{ TPM2_CC_PolicyPCR, "PolicyPCR" },
{ TPM2_CC_PolicyRestart, "PolicyRestart" },
{ TPM2_CC_ReadClock, "ReadClock" },
{ TPM2_CC_PCR_Extend, "PCR_Extend" },
{ TPM2_CC_PCR_SetAuthValue, "PCR_SetAuthValue" },
{ TPM2_CC_NV_Certify, "NV_Certify" },
{ TPM2_CC_EventSequenceComplete, "EventSequenceComplete" },
{ TPM2_CC_HashSequenceStart, "HashSequenceStart" },
{ TPM2_CC_PolicyPhysicalPresence, "PolicyPhysicalPresence" },
{ TPM2_CC_PolicyDuplicationSelect, "PolicyDuplicationSelect" },
{ TPM2_CC_PolicyGetDigest, "PolicyGetDigest" },
{ TPM2_CC_TestParms, "TestParms" },
{ TPM2_CC_Commit, "Commit" },
{ TPM2_CC_PolicyPassword, "PolicyPassword" },
{ TPM2_CC_ZGen_2Phase, "ZGen_2Phase" },
{ TPM2_CC_EC_Ephemeral, "EC_Ephemeral" },
{ TPM2_CC_PolicyNvWritten, "PolicyNvWritten" },
{ TPM2_CC_PolicyTemplate, "PolicyTemplate" },
{ TPM2_CC_CreateLoaded, "CreateLoaded" },
{ TPM2_CC_PolicyAuthorizeNV, "PolicyAuthorizeNV" },
{ TPM2_CC_EncryptDecrypt2, "EncryptDecrypt2" },
/* We don't want to return LAST but the actual value */
/* { TPM2_CC_LAST, "LAST" }, */
{ TPM2_CC_Vendor_TCG_Test, "Vendor_TCG_Test" },
};
for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
if (tab[i].in == in) {
*jso = json_object_new_string(tab[i].name);
check_oom(*jso);
return TSS2_RC_SUCCESS;
}
}
return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
}
/** Serialize TPM2_EO to json.
*
* @param[in] in constant to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_EO.
*/
TSS2_RC
ifapi_json_TPM2_EO_serialize(const TPM2_EO in, json_object **jso)
{
static const struct { TPM2_EO in; char *name; } tab[] = {
{ TPM2_EO_EQ, "EQ" },
{ TPM2_EO_NEQ, "TPM2_EO_NEQ" },
{ TPM2_EO_SIGNED_GT, "SIGNED_GT" },
{ TPM2_EO_UNSIGNED_GT, "UNSIGNED_GT" },
{ TPM2_EO_SIGNED_LT, "SIGNED_LT" },
{ TPM2_EO_UNSIGNED_LT, "UNSIGNED_LT" },
{ TPM2_EO_SIGNED_GE, "SIGNED_GE" },
{ TPM2_EO_UNSIGNED_GE, "UNSIGNED_GE" },
{ TPM2_EO_SIGNED_LE, "SIGNED_LE" },
{ TPM2_EO_UNSIGNED_LE, "UNSIGNED_LE" },
{ TPM2_EO_BITSET, "BITSET" },
{ TPM2_EO_BITCLEAR, "BITCLEAR" },
};
for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
if (tab[i].in == in) {
*jso = json_object_new_string(tab[i].name);
check_oom(*jso);
return TSS2_RC_SUCCESS;
}
}
return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
}
/** Serialize TPM2_ST to json.
*
* @param[in] in constant to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_ST.
*/
TSS2_RC
ifapi_json_TPM2_ST_serialize(const TPM2_ST in, json_object **jso)
{
static const struct { TPM2_ST in; char *name; } tab[] = {
{ TPM2_ST_RSP_COMMAND, "RSP_COMMAND" },
{ TPM2_ST_NULL, "NULL" },
{ TPM2_ST_NO_SESSIONS, "NO_SESSIONS" },
{ TPM2_ST_SESSIONS, "SESSIONS" },
{ TPM2_ST_ATTEST_NV, "ATTEST_NV" },
{ TPM2_ST_ATTEST_COMMAND_AUDIT, "ATTEST_COMMAND_AUDIT" },
{ TPM2_ST_ATTEST_SESSION_AUDIT, "ATTEST_SESSION_AUDIT" },
{ TPM2_ST_ATTEST_CERTIFY, "ATTEST_CERTIFY" },
{ TPM2_ST_ATTEST_QUOTE, "ATTEST_QUOTE" },
{ TPM2_ST_ATTEST_TIME, "ATTEST_TIME" },
{ TPM2_ST_ATTEST_CREATION, "ATTEST_CREATION" },
{ TPM2_ST_CREATION, "CREATION" },
{ TPM2_ST_VERIFIED, "VERIFIED" },
{ TPM2_ST_AUTH_SECRET, "AUTH_SECRET" },
{ TPM2_ST_HASHCHECK, "HASHCHECK" },
{ TPM2_ST_AUTH_SIGNED, "AUTH_SIGNED" },
{ TPM2_ST_FU_MANIFEST, "FU_MANIFEST" },
};
for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
if (tab[i].in == in) {
*jso = json_object_new_string(tab[i].name);
check_oom(*jso);
return TSS2_RC_SUCCESS;
}
}
return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
}
/** Serialize TPM2_CAP to json.
*
* @param[in] in constant to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_CAP.
*/
TSS2_RC
ifapi_json_TPM2_CAP_serialize(const TPM2_CAP in, json_object **jso)
{
static const struct { TPM2_CAP in; char *name; } tab[] = {
{ TPM2_CAP_ALGS, "ALGS" },
{ TPM2_CAP_HANDLES, "HANDLES" },
{ TPM2_CAP_COMMANDS, "COMMANDS" },
{ TPM2_CAP_PP_COMMANDS, "PP_COMMANDS" },
{ TPM2_CAP_AUDIT_COMMANDS, "AUDIT_COMMANDS" },
{ TPM2_CAP_PCRS, "PCRS" },
{ TPM2_CAP_TPM_PROPERTIES, "TPM_PROPERTIES" },
{ TPM2_CAP_PCR_PROPERTIES, "PCR_PROPERTIES" },
{ TPM2_CAP_ECC_CURVES, "ECC_CURVES" },
{ TPM2_CAP_LAST, "LAST" },
{ TPM2_CAP_VENDOR_PROPERTY, "VENDOR_PROPERTY" },
};
for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
if (tab[i].in == in) {
*jso = json_object_new_string(tab[i].name);
check_oom(*jso);
return TSS2_RC_SUCCESS;
}
}
return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
}
/** Serialize TPM2_PT to json.
*
* @param[in] in constant to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_PT.
*/
TSS2_RC
ifapi_json_TPM2_PT_serialize(const TPM2_PT in, json_object **jso)
{
static const struct { TPM2_PT in; char *name; } tab[] = {
{ TPM2_PT_NONE, "NONE" },
{ TPM2_PT_GROUP, "GROUP" },
//{ TPM2_PT_FIXED, "FIXED" },
{ TPM2_PT_FAMILY_INDICATOR, "FAMILY_INDICATOR" },
{ TPM2_PT_LEVEL, "LEVEL" },
{ TPM2_PT_REVISION, "REVISION" },
{ TPM2_PT_DAY_OF_YEAR, "DAY_OF_YEAR" },
{ TPM2_PT_YEAR, "YEAR" },
{ TPM2_PT_MANUFACTURER, "MANUFACTURER" },
{ TPM2_PT_VENDOR_STRING_1, "VENDOR_STRING_1" },
{ TPM2_PT_VENDOR_STRING_2, "VENDOR_STRING_2" },
{ TPM2_PT_VENDOR_STRING_3, "VENDOR_STRING_3" },
{ TPM2_PT_VENDOR_STRING_4, "VENDOR_STRING_4" },
{ TPM2_PT_VENDOR_TPM_TYPE, "VENDOR_TPM_TYPE" },
{ TPM2_PT_FIRMWARE_VERSION_1, "FIRMWARE_VERSION_1" },
{ TPM2_PT_FIRMWARE_VERSION_2, "FIRMWARE_VERSION_2" },
{ TPM2_PT_INPUT_BUFFER, "INPUT_BUFFER" },
{ TPM2_PT_HR_TRANSIENT_MIN, "HR_TRANSIENT_MIN" },
{ TPM2_PT_HR_PERSISTENT_MIN, "HR_PERSISTENT_MIN" },
{ TPM2_PT_HR_LOADED_MIN, "HR_LOADED_MIN" },
{ TPM2_PT_ACTIVE_SESSIONS_MAX, "ACTIVE_SESSIONS_MAX" },
{ TPM2_PT_PCR_COUNT, "PCR_COUNT" },
{ TPM2_PT_PCR_SELECT_MIN, "PCR_SELECT_MIN" },
{ TPM2_PT_CONTEXT_GAP_MAX, "CONTEXT_GAP_MAX" },
{ TPM2_PT_NV_COUNTERS_MAX, "NV_COUNTERS_MAX" },
{ TPM2_PT_NV_INDEX_MAX, "NV_INDEX_MAX" },
{ TPM2_PT_MEMORY, "MEMORY" },
{ TPM2_PT_CLOCK_UPDATE, "CLOCK_UPDATE" },
{ TPM2_PT_CONTEXT_HASH, "CONTEXT_HASH" },
{ TPM2_PT_CONTEXT_SYM, "CONTEXT_SYM" },
{ TPM2_PT_CONTEXT_SYM_SIZE, "CONTEXT_SYM_SIZE" },
{ TPM2_PT_ORDERLY_COUNT, "ORDERLY_COUNT" },
{ TPM2_PT_MAX_COMMAND_SIZE, "MAX_COMMAND_SIZE" },
{ TPM2_PT_MAX_RESPONSE_SIZE, "MAX_RESPONSE_SIZE" },
{ TPM2_PT_MAX_DIGEST, "MAX_DIGEST" },
{ TPM2_PT_MAX_OBJECT_CONTEXT, "MAX_OBJECT_CONTEXT" },
{ TPM2_PT_MAX_SESSION_CONTEXT, "MAX_SESSION_CONTEXT" },
{ TPM2_PT_PS_FAMILY_INDICATOR, "PS_FAMILY_INDICATOR" },
{ TPM2_PT_PS_LEVEL, "PS_LEVEL" },
{ TPM2_PT_PS_REVISION, "PS_REVISION" },
{ TPM2_PT_PS_DAY_OF_YEAR, "PS_DAY_OF_YEAR" },
{ TPM2_PT_PS_YEAR, "PS_YEAR" },
{ TPM2_PT_SPLIT_MAX, "SPLIT_MAX" },
{ TPM2_PT_TOTAL_COMMANDS, "TOTAL_COMMANDS" },
{ TPM2_PT_LIBRARY_COMMANDS, "LIBRARY_COMMANDS" },
{ TPM2_PT_VENDOR_COMMANDS, "VENDOR_COMMANDS" },
{ TPM2_PT_NV_BUFFER_MAX, "NV_BUFFER_MAX" },
{ TPM2_PT_MODES, "MODES" },
{ TPM2_PT_MAX_CAP_BUFFER, "MAX_CAP_BUFFER" },
//{ TPM2_PT_VAR, "VAR" },
{ TPM2_PT_PERMANENT, "PERMANENT" },
{ TPM2_PT_STARTUP_CLEAR, "STARTUP_CLEAR" },
{ TPM2_PT_HR_NV_INDEX, "HR_NV_INDEX" },
{ TPM2_PT_HR_LOADED, "HR_LOADED" },
{ TPM2_PT_HR_LOADED_AVAIL, "HR_LOADED_AVAIL" },
{ TPM2_PT_HR_ACTIVE, "HR_ACTIVE" },
{ TPM2_PT_HR_ACTIVE_AVAIL, "HR_ACTIVE_AVAIL" },
{ TPM2_PT_HR_TRANSIENT_AVAIL, "HR_TRANSIENT_AVAIL" },
{ TPM2_PT_HR_PERSISTENT, "HR_PERSISTENT" },
{ TPM2_PT_HR_PERSISTENT_AVAIL, "HR_PERSISTENT_AVAIL" },
{ TPM2_PT_NV_COUNTERS, "NV_COUNTERS" },
{ TPM2_PT_NV_COUNTERS_AVAIL, "NV_COUNTERS_AVAIL" },
{ TPM2_PT_ALGORITHM_SET, "ALGORITHM_SET" },
{ TPM2_PT_LOADED_CURVES, "LOADED_CURVES" },
{ TPM2_PT_LOCKOUT_COUNTER, "LOCKOUT_COUNTER" },
{ TPM2_PT_MAX_AUTH_FAIL, "MAX_AUTH_FAIL" },
{ TPM2_PT_LOCKOUT_INTERVAL, "LOCKOUT_INTERVAL" },
{ TPM2_PT_LOCKOUT_RECOVERY, "LOCKOUT_RECOVERY" },
{ TPM2_PT_NV_WRITE_RECOVERY, "NV_WRITE_RECOVERY" },
{ TPM2_PT_AUDIT_COUNTER_0, "AUDIT_COUNTER_0" },
{ TPM2_PT_AUDIT_COUNTER_1, "AUDIT_COUNTER_1" },
};
for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
if (tab[i].in == in) {
*jso = json_object_new_string(tab[i].name);
check_oom(*jso);
return TSS2_RC_SUCCESS;
}
}
return_error2(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant: %"PRIx32, in);
}
/** Serialize TPM2_PT_PCR to json.
*
* @param[in] in constant to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_PT_PCR.
*/
TSS2_RC
ifapi_json_TPM2_PT_PCR_serialize(const TPM2_PT_PCR in, json_object **jso)
{
static const struct { TPM2_PT_PCR in; char *name; } tab[] = {
{ TPM2_PT_PCR_SAVE, "SAVE" },
{ TPM2_PT_PCR_EXTEND_L0, "EXTEND_L0" },
{ TPM2_PT_PCR_RESET_L0, "RESET_L0" },
{ TPM2_PT_PCR_EXTEND_L1, "EXTEND_L1" },
{ TPM2_PT_PCR_RESET_L1, "RESET_L1" },
{ TPM2_PT_PCR_EXTEND_L2, "EXTEND_L2" },
{ TPM2_PT_PCR_RESET_L2, "RESET_L2" },
{ TPM2_PT_PCR_EXTEND_L3, "EXTEND_L3" },
{ TPM2_PT_PCR_RESET_L3, "RESET_L3" },
{ TPM2_PT_PCR_EXTEND_L4, "EXTEND_L4" },
{ TPM2_PT_PCR_RESET_L4, "RESET_L4" },
{ TPM2_PT_PCR_NO_INCREMENT, "NO_INCREMENT" },
{ TPM2_PT_PCR_DRTM_RESET, "DRTM_RESET" },
{ TPM2_PT_PCR_POLICY, "POLICY" },
{ TPM2_PT_PCR_AUTH, "AUTH" },
};
for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
if (tab[i].in == in) {
*jso = json_object_new_string(tab[i].name);
check_oom(*jso);
return TSS2_RC_SUCCESS;
}
}
return_error2(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant: %"PRIx32, in);
}
/** Serialize value of type TPM2_HANDLE to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2_HANDLE.
*/
TSS2_RC
ifapi_json_TPM2_HANDLE_serialize(const TPM2_HANDLE in, json_object **jso)
{
*jso = json_object_new_int(in);
if (*jso == NULL) {
LOG_ERROR("Bad value %"PRIx32 "", in);
return TSS2_FAPI_RC_BAD_VALUE;
}
return TSS2_RC_SUCCESS;
}
/** Serialize a TPMA_ALGORITHM to json.
*
* This function expects the Bitfield to be encoded as unsigned int in host-endianess.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPMA_ALGORITHM.
*/
TSS2_RC
ifapi_json_TPMA_ALGORITHM_serialize(const TPMA_ALGORITHM in, json_object **jso)
{
static const struct { TPMA_ALGORITHM in; char *name; } tab[] = {
{ TPMA_ALGORITHM_ASYMMETRIC, "asymmetric" },
{ TPMA_ALGORITHM_SYMMETRIC, "symmetric" },
{ TPMA_ALGORITHM_HASH, "hash" },
{ TPMA_ALGORITHM_OBJECT, "object" },
{ TPMA_ALGORITHM_SIGNING, "signing" },
{ TPMA_ALGORITHM_ENCRYPTING, "encrypting" },
{ TPMA_ALGORITHM_METHOD, "method" },
};
UINT32 input;
input = (UINT32) in;
json_object *jso_bit;
if (*jso == NULL) {
*jso = json_object_new_object();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
}
for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
if (tab[i].in & input)
jso_bit = json_object_new_int(1);
else
jso_bit = json_object_new_int(0);
return_if_null(jso_bit, "Out of memory.", TSS2_FAPI_RC_MEMORY);
json_object_object_add(*jso, tab[i].name, jso_bit);
}
return TSS2_RC_SUCCESS;
}
/** Serialize a TPMA_OBJECT to json.
*
* This function expects the Bitfield to be encoded as unsigned int in host-endianess.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPMA_OBJECT.
*/
TSS2_RC
ifapi_json_TPMA_OBJECT_serialize(const TPMA_OBJECT in, json_object **jso)
{
static const struct { TPMA_OBJECT in; char *name; } tab[] = {
{ TPMA_OBJECT_FIXEDTPM, "fixedTPM" },
{ TPMA_OBJECT_STCLEAR, "stClear" },
{ TPMA_OBJECT_FIXEDPARENT, "fixedParent" },
{ TPMA_OBJECT_SENSITIVEDATAORIGIN, "sensitiveDataOrigin" },
{ TPMA_OBJECT_USERWITHAUTH, "userWithAuth" },
{ TPMA_OBJECT_ADMINWITHPOLICY, "adminWithPolicy" },
{ TPMA_OBJECT_NODA, "noDA" },
{ TPMA_OBJECT_ENCRYPTEDDUPLICATION, "encryptedDuplication" },
{ TPMA_OBJECT_RESTRICTED, "restricted" },
{ TPMA_OBJECT_DECRYPT, "decrypt" },
{ TPMA_OBJECT_SIGN_ENCRYPT, "sign" },
};
UINT32 input;
input = (UINT32) in;
json_object *jso_bit;
if (*jso == NULL) {
*jso = json_object_new_object();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
}
for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
if (tab[i].in & input)
jso_bit = json_object_new_int(1);
else
jso_bit = json_object_new_int(0);
return_if_null(jso_bit, "Out of memory.", TSS2_FAPI_RC_MEMORY);
json_object_object_add(*jso, tab[i].name, jso_bit);
}
return TSS2_RC_SUCCESS;
}
/** Serialize a TPMA_LOCALITY to json.
*
* This function expects the Bitfield to be encoded as unsigned int in host-endianess.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPMA_LOCALITY.
*/
TSS2_RC
ifapi_json_TPMA_LOCALITY_serialize(const TPMA_LOCALITY in, json_object **jso)
{
static const struct { TPMA_LOCALITY in; char *name; } tab[] = {
{ TPMA_LOCALITY_TPM2_LOC_ZERO, "ZERO" },
{ TPMA_LOCALITY_TPM2_LOC_ONE, "ONE" },
{ TPMA_LOCALITY_TPM2_LOC_TWO, "TWO" },
{ TPMA_LOCALITY_TPM2_LOC_THREE, "THREE" },
{ TPMA_LOCALITY_TPM2_LOC_FOUR, "FOUR" },
};
UINT8 input;
input = (UINT8) in;
json_object *jso_bit;
json_object *jso_bit_idx;
if (*jso == NULL) {
*jso = json_object_new_object();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
}
for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
if (tab[i].in & input)
jso_bit = json_object_new_int(1);
else
jso_bit = json_object_new_int(0);
return_if_null(jso_bit, "Out of memory.", TSS2_FAPI_RC_MEMORY);
json_object_object_add(*jso, tab[i].name, jso_bit);
}
jso_bit_idx = json_object_new_int64((TPMA_LOCALITY_EXTENDED_MASK & input) >>
5);
return_if_null(jso_bit_idx, "Out of memory.", TSS2_FAPI_RC_MEMORY);
json_object_object_add(*jso, "Extended", jso_bit_idx);
return TSS2_RC_SUCCESS;
}
/** Serialize a TPMA_CC to json.
*
* This function expects the Bitfield to be encoded as unsigned int in host-endianess.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPMA_CC.
*/
TSS2_RC
ifapi_json_TPMA_CC_serialize(const TPMA_CC in, json_object **jso)
{
static const struct { TPMA_CC in; char *name; } tab[] = {
{ TPMA_CC_NV, "nv" },
{ TPMA_CC_EXTENSIVE, "extensive" },
{ TPMA_CC_FLUSHED, "flushed" },
{ TPMA_CC_RHANDLE, "rHandle" },
{ TPMA_CC_V, "V" },
};
TPM2_CC input;
input = (TPM2_CC) in;
json_object *jso_bit;
json_object *jso_bit_idx;
if (*jso == NULL) {
*jso = json_object_new_object();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
}
for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
if (tab[i].in & input)
jso_bit = json_object_new_int(1);
else
jso_bit = json_object_new_int(0);
return_if_null(jso_bit, "Out of memory.", TSS2_FAPI_RC_MEMORY);
json_object_object_add(*jso, tab[i].name, jso_bit);
}
jso_bit_idx = json_object_new_int64((TPMA_CC_COMMANDINDEX_MASK & input) >> 0);
return_if_null(jso_bit_idx, "Out of memory.", TSS2_FAPI_RC_MEMORY);
json_object_object_add(*jso, "commandIndex", jso_bit_idx);
jso_bit_idx = json_object_new_int64((TPMA_CC_CHANDLES_MASK & input) >> 25);
return_if_null(jso_bit_idx, "Out of memory.", TSS2_FAPI_RC_MEMORY);
json_object_object_add(*jso, "cHandles", jso_bit_idx);
jso_bit_idx = json_object_new_int64((TPMA_CC_RES_MASK & input) >> 30);
return_if_null(jso_bit_idx, "Out of memory.", TSS2_FAPI_RC_MEMORY);
json_object_object_add(*jso, "Res", jso_bit_idx);
return TSS2_RC_SUCCESS;
}
/** Serialize TPMI_YES_NO to json.
*
* @param[in] in variable to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
* the function.
* @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
*/
TSS2_RC
ifapi_json_TPMI_YES_NO_serialize(const TPMI_YES_NO in, json_object **jso)
{
if (in == YES) {
*jso = json_object_new_string("YES");
} else if (in == NO) {
*jso = json_object_new_string("NO");
} else {
return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
}
check_oom(*jso);
return TSS2_RC_SUCCESS;
}
/** Serialize TPMI_RH_HIERARCHY to json.
*
* @param[in] in variable to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
* the function.
* @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
*/
TSS2_RC
ifapi_json_TPMI_RH_HIERARCHY_serialize(const TPMI_RH_HIERARCHY in,
json_object **jso)
{
static const struct { TPMI_RH_HIERARCHY in; char *name; } tab[] = {
{ TPM2_RH_OWNER, "OWNER" },
{ TPM2_RH_PLATFORM, "PLATFORM" },
{ TPM2_RH_ENDORSEMENT, "ENDORSEMENT" },
{ TPM2_RH_NULL, "NULL" },
};
for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
if (tab[i].in == in) {
*jso = json_object_new_string(tab[i].name);
check_oom(*jso);
return TSS2_RC_SUCCESS;
}
}
return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
}
/** Serialize value of type TPMI_RH_NV_INDEX to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMI_RH_NV_INDEX.
*
*/
TSS2_RC
ifapi_json_TPMI_RH_NV_INDEX_serialize(const TPMI_RH_NV_INDEX in,
json_object **jso)
{
if (in >= TPM2_NV_INDEX_FIRST && in <= TPM2_NV_INDEX_LAST) {
*jso = json_object_new_int64(in);
} else {
return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
}
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
return TSS2_RC_SUCCESS;
}
/** Serialize TPMI_ALG_HASH to json.
*
* @param[in] in variable to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
* the function.
* @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
*/
TSS2_RC
ifapi_json_TPMI_ALG_HASH_serialize(const TPMI_ALG_HASH in, json_object **jso)
{
CHECK_IN_LIST(TPMI_ALG_HASH, in, TPM2_ALG_SHA1, TPM2_ALG_SHA256, TPM2_ALG_SHA384,
TPM2_ALG_SHA512, TPM2_ALG_NULL);
return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
}
/** Serialize TPMI_ALG_SYM_OBJECT to json.
*
* @param[in] in variable to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
* the function.
* @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
*/
TSS2_RC
ifapi_json_TPMI_ALG_SYM_OBJECT_serialize(const TPMI_ALG_SYM_OBJECT in,
json_object **jso)
{
CHECK_IN_LIST(TPMI_ALG_SYM_OBJECT, in, TPM2_ALG_AES, TPM2_ALG_NULL);
return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
}
/** Serialize TPMI_ALG_SYM_MODE to json.
*
* @param[in] in variable to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
* the function.
* @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
*/
TSS2_RC
ifapi_json_TPMI_ALG_SYM_MODE_serialize(const TPMI_ALG_SYM_MODE in,
json_object **jso)
{
CHECK_IN_LIST(TPMI_ALG_SYM_MODE, in, TPM2_ALG_CTR, TPM2_ALG_OFB,
TPM2_ALG_CBC, TPM2_ALG_CFB, TPM2_ALG_ECB, TPM2_ALG_NULL);
return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
}
/** Serialize TPMI_ALG_KDF to json.
*
* @param[in] in variable to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
* the function.
* @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
*/
TSS2_RC
ifapi_json_TPMI_ALG_KDF_serialize(const TPMI_ALG_KDF in, json_object **jso)
{
CHECK_IN_LIST(TPMI_ALG_KDF, in, TPM2_ALG_MGF1, TPM2_ALG_KDF1_SP800_56A,
TPM2_ALG_KDF1_SP800_108, TPM2_ALG_NULL);
return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
}
/** Serialize TPMI_ALG_SIG_SCHEME to json.
*
* @param[in] in variable to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
* the function.
* @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
*/
TSS2_RC
ifapi_json_TPMI_ALG_SIG_SCHEME_serialize(const TPMI_ALG_SIG_SCHEME in,
json_object **jso)
{
CHECK_IN_LIST(TPMI_ALG_SIG_SCHEME, in, TPM2_ALG_RSASSA, TPM2_ALG_RSAPSS,
TPM2_ALG_ECDSA, TPM2_ALG_ECDAA, TPM2_ALG_SM2, TPM2_ALG_ECSCHNORR,
TPM2_ALG_HMAC, TPM2_ALG_NULL);
return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
}
/** Serialize a TPMU_HA to json.
*
* This function expects the Bitfield to be encoded as unsigned int in host-endianess.
* @param[in] in the value to be serialized.
* @param[in] selector the type of the HA object.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_HA.
*/
TSS2_RC
ifapi_json_TPMU_HA_serialize(const TPMU_HA *in, UINT32 selector,
json_object **jso)
{
size_t size;
const uint8_t *buffer;
switch (selector) {
case TPM2_ALG_SHA1:
size = TPM2_SHA1_DIGEST_SIZE;
buffer = &in->sha1[0];
break;
case TPM2_ALG_SHA256:
size = TPM2_SHA256_DIGEST_SIZE;
buffer = &in->sha256[0];
break;
case TPM2_ALG_SHA384:
size = TPM2_SHA384_DIGEST_SIZE;
buffer = &in->sha384[0];
break;
case TPM2_ALG_SHA512:
size = TPM2_SHA512_DIGEST_SIZE;
buffer = &in->sha512[0];
break;
default:
LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
return TSS2_FAPI_RC_BAD_VALUE;
};
char hex_string[(size) * 2 + 1];
for (size_t i = 0, off = 0; i < size; i++, off += 2)
sprintf(&hex_string[off], "%02x", buffer[i]);
hex_string[(size) * 2] = '\0';
*jso = json_object_new_string(hex_string);
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMT_HA to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_HA.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMT_HA_serialize(const TPMT_HA *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object();
jso2 = NULL;
r = ifapi_json_TPMI_ALG_HASH_serialize(in->hashAlg, &jso2);
return_if_error(r, "Serialize TPMI_ALG_HASH");
json_object_object_add(*jso, "hashAlg", jso2);
if (in->hashAlg != TPM2_ALG_NULL) {
json_object *jso2 = NULL;
r = ifapi_json_TPMU_HA_serialize(&in->digest, in->hashAlg, &jso2);
return_if_error(r, "Serialize TPMU_HA");
json_object_object_add(*jso, "digest", jso2);
}
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPM2B_DIGEST to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_DIGEST.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPM2B_DIGEST_serialize(const TPM2B_DIGEST *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
if (in->size > sizeof(TPMU_HA)) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = sizeof(TPMU_HA))",
(size_t)in->size, (size_t)sizeof(TPMU_HA));
return TSS2_FAPI_RC_BAD_VALUE;
}
char hex_string[((size_t)in->size)*2+1];
for (size_t i = 0, off = 0; i < in->size; i++, off+=2)
sprintf(&hex_string[off], "%02x", in->buffer[i]);
hex_string[(in->size)*2] = '\0';
*jso = json_object_new_string (hex_string);
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPM2B_DATA to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_DATA.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPM2B_DATA_serialize(const TPM2B_DATA *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
if (in->size > sizeof(TPMU_HA)) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = sizeof(TPMT_HA))",
(size_t)in->size, (size_t)sizeof(TPMT_HA));
return TSS2_FAPI_RC_BAD_VALUE;
}
char hex_string[sizeof(TPMT_HA)*2+1];
for (size_t i = 0, off = 0; i < in->size; i++, off+=2)
sprintf(&hex_string[off], "%02x", in->buffer[i]);
hex_string[(in->size)*2] = '\0';
*jso = json_object_new_string (hex_string);
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
return TSS2_RC_SUCCESS;
}
/** Serialize a TPM2B_NONCE to json.
*
* @param[in] in value of type TPM2B_NONCE to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_NONCE.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPM2B_NONCE_serialize(const TPM2B_NONCE *in, json_object **jso)
{
return ifapi_json_TPM2B_DIGEST_serialize(in, jso);
}
/** Serialize a TPM2B_OPERAND to json.
*
* @param[in] in value of type TPM2B_OPERAND to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_OPERAND.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPM2B_OPERAND_serialize(const TPM2B_OPERAND *in, json_object **jso)
{
return ifapi_json_TPM2B_DIGEST_serialize(in, jso);
}
/** Serialize value of type TPM2B_EVENT to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_EVENT.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPM2B_EVENT_serialize(const TPM2B_EVENT *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
if (in->size > 1024) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = 1024)",
(size_t)in->size, (size_t)1024);
return TSS2_FAPI_RC_BAD_VALUE;
}
char hex_string[((size_t)in->size)*2+1];
for (size_t i = 0, off = 0; i < in->size; i++, off+=2)
sprintf(&hex_string[off], "%02x", in->buffer[i]);
hex_string[(in->size)*2] = '\0';
*jso = json_object_new_string (hex_string);
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPM2B_MAX_NV_BUFFER to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_MAX_NV_BUFFER.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPM2B_MAX_NV_BUFFER_serialize(const TPM2B_MAX_NV_BUFFER *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
if (in->size > TPM2_MAX_NV_BUFFER_SIZE) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_NV_BUFFER_SIZE)",
(size_t)in->size, (size_t)TPM2_MAX_NV_BUFFER_SIZE);
return TSS2_FAPI_RC_BAD_VALUE;
}
char hex_string[((size_t)in->size)*2+1];
for (size_t i = 0, off = 0; i < in->size; i++, off+=2)
sprintf(&hex_string[off], "%02x", in->buffer[i]);
hex_string[(in->size)*2] = '\0';
*jso = json_object_new_string (hex_string);
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPM2B_NAME to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_NAME.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPM2B_NAME_serialize(const TPM2B_NAME *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
if (in->size > sizeof(TPMU_NAME)) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = sizeof(TPMU_NAME))",
(size_t)in->size, (size_t)sizeof(TPMU_NAME));
return TSS2_FAPI_RC_BAD_VALUE;
}
char hex_string[((size_t)in->size)*2+1];
for (size_t i = 0, off = 0; i < in->size; i++, off+=2)
sprintf(&hex_string[off], "%02x", in->name[i]);
hex_string[(in->size)*2] = '\0';
*jso = json_object_new_string (hex_string);
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMT_TK_CREATION to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_TK_CREATION.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMT_TK_CREATION_serialize(const TPMT_TK_CREATION *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
if (in != NULL && in->tag != TPM2_ST_CREATION) {
LOG_ERROR("BAD VALUE %"PRIuPTR" != %"PRIuPTR,(size_t)in->tag,(size_t)TPM2_ST_CREATION);
return TSS2_FAPI_RC_BAD_VALUE;
}
jso2 = NULL;
r = ifapi_json_TPM2_ST_serialize(in->tag, &jso2);
return_if_error(r, "Serialize TPM2_ST");
json_object_object_add(*jso, "tag", jso2);
jso2 = NULL;
r = ifapi_json_TPMI_RH_HIERARCHY_serialize(in->hierarchy, &jso2);
return_if_error(r, "Serialize TPMI_RH_HIERARCHY");
json_object_object_add(*jso, "hierarchy", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_DIGEST_serialize(&in->digest, &jso2);
return_if_error(r, "Serialize TPM2B_DIGEST");
json_object_object_add(*jso, "digest", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_ALG_PROPERTY to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_ALG_PROPERTY.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_ALG_PROPERTY_serialize(const TPMS_ALG_PROPERTY *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPM2_ALG_ID_serialize(in->alg, &jso2);
return_if_error(r, "Serialize TPM2_ALG_ID");
json_object_object_add(*jso, "alg", jso2);
jso2 = NULL;
r = ifapi_json_TPMA_ALGORITHM_serialize(in->algProperties, &jso2);
return_if_error(r, "Serialize TPMA_ALGORITHM");
json_object_object_add(*jso, "algProperties", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_TAGGED_PROPERTY to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_TAGGED_PROPERTY.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_TAGGED_PROPERTY_serialize(const TPMS_TAGGED_PROPERTY *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPM2_PT_serialize(in->property, &jso2);
return_if_error(r, "Serialize TPM2_PT");
json_object_object_add(*jso, "property", jso2);
jso2 = NULL;
r = ifapi_json_UINT32_serialize(in->value, &jso2);
return_if_error(r, "Serialize UINT32");
json_object_object_add(*jso, "value", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPML_CC to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPML_CC.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPML_CC_serialize(const TPML_CC *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
if (in->count > TPM2_MAX_CAP_CC) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_CAP_CC)",
(size_t)in->count, (size_t)TPM2_MAX_CAP_CC);
return TSS2_FAPI_RC_BAD_VALUE;
}
*jso = json_object_new_array();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
for (size_t i=0; i < in->count; i++) {
json_object *jso2 = NULL;
r = ifapi_json_TPM2_CC_serialize (in->commandCodes[i], &jso2);
return_if_error(r, "Serialize TPM2_CC");
json_object_array_add(*jso, jso2);
}
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPML_CCA to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPML_CCA.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPML_CCA_serialize(const TPML_CCA *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
if (in->count > TPM2_MAX_CAP_CC) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_CAP_CC)",
(size_t)in->count, (size_t)TPM2_MAX_CAP_CC);
return TSS2_FAPI_RC_BAD_VALUE;
}
*jso = json_object_new_array();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
for (size_t i=0; i < in->count; i++) {
json_object *jso2 = NULL;
r = ifapi_json_TPMA_CC_serialize (in->commandAttributes[i], &jso2);
return_if_error(r, "Serialize TPMA_CC");
json_object_array_add(*jso, jso2);
}
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPML_HANDLE to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPML_HANDLE.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPML_HANDLE_serialize(const TPML_HANDLE *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
if (in->count > TPM2_MAX_CAP_HANDLES) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_CAP_HANDLES)",
(size_t)in->count, (size_t)TPM2_MAX_CAP_HANDLES);
return TSS2_FAPI_RC_BAD_VALUE;
}
*jso = json_object_new_array();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
for (size_t i=0; i < in->count; i++) {
json_object *jso2 = NULL;
r = ifapi_json_TPM2_HANDLE_serialize (in->handle[i], &jso2);
return_if_error(r, "Serialize TPM2_HANDLE");
json_object_array_add(*jso, jso2);
}
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPML_DIGEST_VALUES to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPML_DIGEST_VALUES.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPML_DIGEST_VALUES_serialize(const TPML_DIGEST_VALUES *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
if (in->count > TPM2_NUM_PCR_BANKS) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_NUM_PCR_BANKS)",
(size_t)in->count, (size_t)TPM2_NUM_PCR_BANKS);
return TSS2_FAPI_RC_BAD_VALUE;
}
*jso = json_object_new_array();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
for (size_t i=0; i < in->count; i++) {
json_object *jso2 = NULL;
r = ifapi_json_TPMT_HA_serialize (&in->digests[i], &jso2);
return_if_error(r, "Serialize TPMT_HA");
json_object_array_add(*jso, jso2);
}
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPML_PCR_SELECTION to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPML_PCR_SELECTION.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPML_PCR_SELECTION_serialize(const TPML_PCR_SELECTION *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
if (in->count > TPM2_NUM_PCR_BANKS) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_NUM_PCR_BANKS)",
(size_t)in->count, (size_t)TPM2_NUM_PCR_BANKS);
return TSS2_FAPI_RC_BAD_VALUE;
}
*jso = json_object_new_array();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
for (size_t i=0; i < in->count; i++) {
json_object *jso2 = NULL;
r = ifapi_json_TPMS_PCR_SELECTION_serialize (&in->pcrSelections[i], &jso2);
return_if_error(r, "Serialize TPMS_PCR_SELECTION");
json_object_array_add(*jso, jso2);
}
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPML_ALG_PROPERTY to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPML_ALG_PROPERTY.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPML_ALG_PROPERTY_serialize(const TPML_ALG_PROPERTY *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
if (in->count > TPM2_MAX_CAP_ALGS) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_CAP_ALGS)",
(size_t)in->count, (size_t)TPM2_MAX_CAP_ALGS);
return TSS2_FAPI_RC_BAD_VALUE;
}
*jso = json_object_new_array();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
for (size_t i=0; i < in->count; i++) {
json_object *jso2 = NULL;
r = ifapi_json_TPMS_ALG_PROPERTY_serialize (&in->algProperties[i], &jso2);
return_if_error(r, "Serialize TPMS_ALG_PROPERTY");
json_object_array_add(*jso, jso2);
}
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPML_TAGGED_TPM_PROPERTY to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPML_TAGGED_TPM_PROPERTY.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPML_TAGGED_TPM_PROPERTY_serialize(const TPML_TAGGED_TPM_PROPERTY *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
if (in->count > TPM2_MAX_TPM_PROPERTIES) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_TPM_PROPERTIES)",
(size_t)in->count, (size_t)TPM2_MAX_TPM_PROPERTIES);
return TSS2_FAPI_RC_BAD_VALUE;
}
*jso = json_object_new_array();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
for (size_t i=0; i < in->count; i++) {
json_object *jso2 = NULL;
r = ifapi_json_TPMS_TAGGED_PROPERTY_serialize (&in->tpmProperty[i], &jso2);
return_if_error(r, "Serialize TPMS_TAGGED_PROPERTY");
json_object_array_add(*jso, jso2);
}
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPML_TAGGED_PCR_PROPERTY to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPML_TAGGED_PCR_PROPERTY.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPML_TAGGED_PCR_PROPERTY_serialize(const TPML_TAGGED_PCR_PROPERTY *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
if (in->count > TPM2_MAX_PCR_PROPERTIES) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_PCR_PROPERTIES)",
(size_t)in->count, (size_t)TPM2_MAX_PCR_PROPERTIES);
return TSS2_FAPI_RC_BAD_VALUE;
}
*jso = json_object_new_array();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
for (size_t i=0; i < in->count; i++) {
json_object *jso2 = NULL;
r = ifapi_json_TPMS_TAGGED_PCR_SELECT_serialize (&in->pcrProperty[i], &jso2);
return_if_error(r, "Serialize TPMS_TAGGED_PCR_SELECT");
json_object_array_add(*jso, jso2);
}
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPML_ECC_CURVE to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPML_ECC_CURVE.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPML_ECC_CURVE_serialize(const TPML_ECC_CURVE *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
if (in->count > TPM2_MAX_ECC_CURVES) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_ECC_CURVES)",
(size_t)in->count, (size_t)TPM2_MAX_ECC_CURVES);
return TSS2_FAPI_RC_BAD_VALUE;
}
*jso = json_object_new_array();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
for (size_t i=0; i < in->count; i++) {
json_object *jso2 = NULL;
r = ifapi_json_TPM2_ECC_CURVE_serialize (in->eccCurves[i], &jso2);
return_if_error(r, "Serialize TPM2_ECC_CURVE");
json_object_array_add(*jso, jso2);
}
return TSS2_RC_SUCCESS;
}
/** Serialize a TPMU_CAPABILITIES to json.
*
* This function expects the Bitfield to be encoded as unsigned int in host-endianess.
* @param[in] in the value to be serialized.
* @param[in] selector the type of the capabilities.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_CAPABILITIES.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMU_CAPABILITIES_serialize(const TPMU_CAPABILITIES *in, UINT32 selector, json_object **jso)
{
switch (selector) {
case TPM2_CAP_ALGS:
return ifapi_json_TPML_ALG_PROPERTY_serialize(&in->algorithms, jso);
case TPM2_CAP_HANDLES:
return ifapi_json_TPML_HANDLE_serialize(&in->handles, jso);
case TPM2_CAP_COMMANDS:
return ifapi_json_TPML_CCA_serialize(&in->command, jso);
case TPM2_CAP_PP_COMMANDS:
return ifapi_json_TPML_CC_serialize(&in->ppCommands, jso);
case TPM2_CAP_AUDIT_COMMANDS:
return ifapi_json_TPML_CC_serialize(&in->auditCommands, jso);
case TPM2_CAP_PCRS:
return ifapi_json_TPML_PCR_SELECTION_serialize(&in->assignedPCR, jso);
case TPM2_CAP_TPM_PROPERTIES:
return ifapi_json_TPML_TAGGED_TPM_PROPERTY_serialize(&in->tpmProperties, jso);
case TPM2_CAP_PCR_PROPERTIES:
return ifapi_json_TPML_TAGGED_PCR_PROPERTY_serialize(&in->pcrProperties, jso);
case TPM2_CAP_ECC_CURVES:
return ifapi_json_TPML_ECC_CURVE_serialize(&in->eccCurves, jso);
default:
LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
return TSS2_FAPI_RC_BAD_VALUE;
};
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_CAPABILITY_DATA to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_CAPABILITY_DATA.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_CAPABILITY_DATA_serialize(const TPMS_CAPABILITY_DATA *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPM2_CAP_serialize(in->capability, &jso2);
return_if_error(r, "Serialize TPM2_CAP");
json_object_object_add(*jso, "capability", jso2);
jso2 = NULL;
r = ifapi_json_TPMU_CAPABILITIES_serialize(&in->data, in->capability, &jso2);
return_if_error(r,"Serialize TPMU_CAPABILITIES");
json_object_object_add(*jso, "data", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_CLOCK_INFO to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_CLOCK_INFO.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_CLOCK_INFO_serialize(const TPMS_CLOCK_INFO *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_UINT64_serialize(in->clock, &jso2);
return_if_error(r, "Serialize UINT64");
json_object_object_add(*jso, "clock", jso2);
jso2 = NULL;
r = ifapi_json_UINT32_serialize(in->resetCount, &jso2);
return_if_error(r, "Serialize UINT32");
json_object_object_add(*jso, "resetCount", jso2);
jso2 = NULL;
r = ifapi_json_UINT32_serialize(in->restartCount, &jso2);
return_if_error(r, "Serialize UINT32");
json_object_object_add(*jso, "restartCount", jso2);
jso2 = NULL;
r = ifapi_json_TPMI_YES_NO_serialize(in->safe, &jso2);
return_if_error(r, "Serialize TPMI_YES_NO");
json_object_object_add(*jso, "safe", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_TIME_INFO to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_TIME_INFO.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_TIME_INFO_serialize(const TPMS_TIME_INFO *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_UINT64_serialize(in->time, &jso2);
return_if_error(r, "Serialize UINT64");
json_object_object_add(*jso, "time", jso2);
jso2 = NULL;
r = ifapi_json_TPMS_CLOCK_INFO_serialize(&in->clockInfo, &jso2);
return_if_error(r, "Serialize TPMS_CLOCK_INFO");
json_object_object_add(*jso, "clockInfo", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_TIME_ATTEST_INFO to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_TIME_ATTEST_INFO.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_TIME_ATTEST_INFO_serialize(const TPMS_TIME_ATTEST_INFO *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMS_TIME_INFO_serialize(&in->time, &jso2);
return_if_error(r, "Serialize TPMS_TIME_INFO");
json_object_object_add(*jso, "time", jso2);
jso2 = NULL;
r = ifapi_json_UINT64_serialize(in->firmwareVersion, &jso2);
return_if_error(r, "Serialize UINT64");
json_object_object_add(*jso, "firmwareVersion", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_CERTIFY_INFO to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_CERTIFY_INFO.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_CERTIFY_INFO_serialize(const TPMS_CERTIFY_INFO *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPM2B_NAME_serialize(&in->name, &jso2);
return_if_error(r, "Serialize TPM2B_NAME");
json_object_object_add(*jso, "name", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_NAME_serialize(&in->qualifiedName, &jso2);
return_if_error(r, "Serialize TPM2B_NAME");
json_object_object_add(*jso, "qualifiedName", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_QUOTE_INFO to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_QUOTE_INFO.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_QUOTE_INFO_serialize(const TPMS_QUOTE_INFO *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPML_PCR_SELECTION_serialize(&in->pcrSelect, &jso2);
return_if_error(r, "Serialize TPML_PCR_SELECTION");
json_object_object_add(*jso, "pcrSelect", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_DIGEST_serialize(&in->pcrDigest, &jso2);
return_if_error(r, "Serialize TPM2B_DIGEST");
json_object_object_add(*jso, "pcrDigest", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_COMMAND_AUDIT_INFO to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_COMMAND_AUDIT_INFO.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_COMMAND_AUDIT_INFO_serialize(const TPMS_COMMAND_AUDIT_INFO *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_UINT64_serialize(in->auditCounter, &jso2);
return_if_error(r, "Serialize UINT64");
json_object_object_add(*jso, "auditCounter", jso2);
jso2 = NULL;
r = ifapi_json_TPM2_ALG_ID_serialize(in->digestAlg, &jso2);
return_if_error(r, "Serialize TPM2_ALG_ID");
json_object_object_add(*jso, "digestAlg", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_DIGEST_serialize(&in->auditDigest, &jso2);
return_if_error(r, "Serialize TPM2B_DIGEST");
json_object_object_add(*jso, "auditDigest", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_DIGEST_serialize(&in->commandDigest, &jso2);
return_if_error(r, "Serialize TPM2B_DIGEST");
json_object_object_add(*jso, "commandDigest", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_SESSION_AUDIT_INFO to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SESSION_AUDIT_INFO.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SESSION_AUDIT_INFO_serialize(const TPMS_SESSION_AUDIT_INFO *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMI_YES_NO_serialize(in->exclusiveSession, &jso2);
return_if_error(r, "Serialize TPMI_YES_NO");
json_object_object_add(*jso, "exclusiveSession", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_DIGEST_serialize(&in->sessionDigest, &jso2);
return_if_error(r, "Serialize TPM2B_DIGEST");
json_object_object_add(*jso, "sessionDigest", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_CREATION_INFO to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_CREATION_INFO.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_CREATION_INFO_serialize(const TPMS_CREATION_INFO *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPM2B_NAME_serialize(&in->objectName, &jso2);
return_if_error(r, "Serialize TPM2B_NAME");
json_object_object_add(*jso, "objectName", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_DIGEST_serialize(&in->creationHash, &jso2);
return_if_error(r, "Serialize TPM2B_DIGEST");
json_object_object_add(*jso, "creationHash", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_NV_CERTIFY_INFO to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_NV_CERTIFY_INFO.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_NV_CERTIFY_INFO_serialize(const TPMS_NV_CERTIFY_INFO *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPM2B_NAME_serialize(&in->indexName, &jso2);
return_if_error(r, "Serialize TPM2B_NAME");
json_object_object_add(*jso, "indexName", jso2);
jso2 = NULL;
r = ifapi_json_UINT16_serialize(in->offset, &jso2);
return_if_error(r, "Serialize UINT16");
json_object_object_add(*jso, "offset", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_MAX_NV_BUFFER_serialize(&in->nvContents, &jso2);
return_if_error(r, "Serialize TPM2B_MAX_NV_BUFFER");
json_object_object_add(*jso, "nvContents", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize TPMI_ST_ATTEST to json.
*
* @param[in] in variable to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
* the function.
* @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
*/
TSS2_RC
ifapi_json_TPMI_ST_ATTEST_serialize(const TPMI_ST_ATTEST in, json_object **jso)
{
CHECK_IN_LIST(TPMI_ALG_HASH, in, TPM2_ST_ATTEST_CERTIFY, TPM2_ST_ATTEST_QUOTE,
TPM2_ST_ATTEST_SESSION_AUDIT, TPM2_ST_ATTEST_COMMAND_AUDIT,
TPM2_ST_ATTEST_TIME, TPM2_ST_ATTEST_CREATION, TPM2_ST_ATTEST_NV);
return ifapi_json_TPM2_ST_serialize(in, jso);
}
/** Serialize a TPMU_ATTEST to json.
*
* This function expects the Bitfield to be encoded as unsigned int in host-endianess.
* @param[in] in the value to be serialized.
* @param[in] selector the type of the attest.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_ATTEST.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMU_ATTEST_serialize(const TPMU_ATTEST *in, UINT32 selector, json_object **jso)
{
switch (selector) {
case TPM2_ST_ATTEST_CERTIFY:
return ifapi_json_TPMS_CERTIFY_INFO_serialize(&in->certify, jso);
case TPM2_ST_ATTEST_CREATION:
return ifapi_json_TPMS_CREATION_INFO_serialize(&in->creation, jso);
case TPM2_ST_ATTEST_QUOTE:
return ifapi_json_TPMS_QUOTE_INFO_serialize(&in->quote, jso);
case TPM2_ST_ATTEST_COMMAND_AUDIT:
return ifapi_json_TPMS_COMMAND_AUDIT_INFO_serialize(&in->commandAudit, jso);
case TPM2_ST_ATTEST_SESSION_AUDIT:
return ifapi_json_TPMS_SESSION_AUDIT_INFO_serialize(&in->sessionAudit, jso);
case TPM2_ST_ATTEST_TIME:
return ifapi_json_TPMS_TIME_ATTEST_INFO_serialize(&in->time, jso);
case TPM2_ST_ATTEST_NV:
return ifapi_json_TPMS_NV_CERTIFY_INFO_serialize(&in->nv, jso);
default:
LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
return TSS2_FAPI_RC_BAD_VALUE;
};
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_ATTEST to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_ATTEST.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_ATTEST_serialize(const TPMS_ATTEST *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPM2_GENERATED_serialize(in->magic, &jso2);
return_if_error(r, "Serialize TPM2_GENERATED");
json_object_object_add(*jso, "magic", jso2);
jso2 = NULL;
r = ifapi_json_TPMI_ST_ATTEST_serialize(in->type, &jso2);
return_if_error(r, "Serialize TPMI_ST_ATTEST");
json_object_object_add(*jso, "type", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_NAME_serialize(&in->qualifiedSigner, &jso2);
return_if_error(r, "Serialize TPM2B_NAME");
json_object_object_add(*jso, "qualifiedSigner", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_DATA_serialize(&in->extraData, &jso2);
return_if_error(r, "Serialize TPM2B_DATA");
json_object_object_add(*jso, "extraData", jso2);
jso2 = NULL;
r = ifapi_json_TPMS_CLOCK_INFO_serialize(&in->clockInfo, &jso2);
return_if_error(r, "Serialize TPMS_CLOCK_INFO");
json_object_object_add(*jso, "clockInfo", jso2);
jso2 = NULL;
r = ifapi_json_UINT64_serialize(in->firmwareVersion, &jso2);
return_if_error(r, "Serialize UINT64");
json_object_object_add(*jso, "firmwareVersion", jso2);
jso2 = NULL;
r = ifapi_json_TPMU_ATTEST_serialize(&in->attested, in->type, &jso2);
return_if_error(r,"Serialize TPMU_ATTEST");
json_object_object_add(*jso, "attested", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMI_AES_KEY_BITS to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMI_AES_KEY_BITS.
*
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMI_AES_KEY_BITS_serialize(const TPMI_AES_KEY_BITS in, json_object **jso)
{
CHECK_IN_LIST(UINT16, in, 128, 192, 256);
return ifapi_json_UINT16_serialize(in, jso);
}
/** Serialize a TPMU_SYM_KEY_BITS to json.
*
* This function expects the Bitfield to be encoded as unsigned int in host-endianess.
* @param[in] in the value to be serialized.
* @param[in] selector the type of the symmetric algorithm.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_SYM_KEY_BITS.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMU_SYM_KEY_BITS_serialize(const TPMU_SYM_KEY_BITS *in, UINT32 selector, json_object **jso)
{
switch (selector) {
case TPM2_ALG_AES:
return ifapi_json_TPMI_AES_KEY_BITS_serialize(in->aes, jso);
case TPM2_ALG_XOR:
return ifapi_json_TPMI_ALG_HASH_serialize(in->exclusiveOr, jso);
default:
LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
return TSS2_FAPI_RC_BAD_VALUE;
};
return TSS2_RC_SUCCESS;
}
/** Serialize a TPMU_SYM_MODE to json.
*
* This function expects the Bitfield to be encoded as unsigned int in host-endianess.
* @param[in] in the value to be serialized.
* @param[in] selector the type of the symmetric mode.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_SYM_MODE.
*/
TSS2_RC
ifapi_json_TPMU_SYM_MODE_serialize(const TPMU_SYM_MODE *in, UINT32 selector, json_object **jso)
{
switch (selector) {
case TPM2_ALG_AES:
return ifapi_json_TPMI_ALG_SYM_MODE_serialize(in->aes, jso);
default:
LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
return TSS2_FAPI_RC_BAD_VALUE;
};
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMT_SYM_DEF_OBJECT to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_SYM_DEF_OBJECT.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMT_SYM_DEF_OBJECT_serialize(const TPMT_SYM_DEF_OBJECT *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMI_ALG_SYM_OBJECT_serialize(in->algorithm, &jso2);
return_if_error(r, "Serialize TPMI_ALG_SYM_OBJECT");
json_object_object_add(*jso, "algorithm", jso2);
if (in->algorithm != TPM2_ALG_NULL) {
json_object *jso2 = NULL;
r = ifapi_json_TPMU_SYM_KEY_BITS_serialize(&in->keyBits, in->algorithm, &jso2);
return_if_error(r,"Serialize TPMU_SYM_KEY_BITS");
json_object_object_add(*jso, "keyBits", jso2);
}
if (in->algorithm != TPM2_ALG_NULL) {
json_object *jso2 = NULL;
r = ifapi_json_TPMU_SYM_MODE_serialize(&in->mode, in->algorithm, &jso2);
return_if_error(r,"Serialize TPMU_SYM_MODE");
json_object_object_add(*jso, "mode", jso2);
}
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_SYMCIPHER_PARMS to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SYMCIPHER_PARMS.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SYMCIPHER_PARMS_serialize(const TPMS_SYMCIPHER_PARMS *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMT_SYM_DEF_OBJECT_serialize(&in->sym, &jso2);
return_if_error(r, "Serialize TPMT_SYM_DEF_OBJECT");
json_object_object_add(*jso, "sym", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_SCHEME_HASH to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SCHEME_HASH.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SCHEME_HASH_serialize(const TPMS_SCHEME_HASH *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMI_ALG_HASH_serialize(in->hashAlg, &jso2);
return_if_error(r, "Serialize TPMI_ALG_HASH");
json_object_object_add(*jso, "hashAlg", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_SCHEME_ECDAA to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SCHEME_ECDAA.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SCHEME_ECDAA_serialize(const TPMS_SCHEME_ECDAA *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMI_ALG_HASH_serialize(in->hashAlg, &jso2);
return_if_error(r, "Serialize TPMI_ALG_HASH");
json_object_object_add(*jso, "hashAlg", jso2);
jso2 = NULL;
r = ifapi_json_UINT16_serialize(in->count, &jso2);
return_if_error(r, "Serialize UINT16");
json_object_object_add(*jso, "count", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize TPMI_ALG_KEYEDHASH_SCHEME to json.
*
* @param[in] in variable to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
* the function.
* @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
*/
TSS2_RC
ifapi_json_TPMI_ALG_KEYEDHASH_SCHEME_serialize(const TPMI_ALG_KEYEDHASH_SCHEME in, json_object **jso)
{
CHECK_IN_LIST(TPMI_ALG_HASH, in, TPM2_ALG_HMAC, TPM2_ALG_XOR, TPM2_ALG_NULL);
return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
}
/** Serialize a TPMS_SCHEME_HMAC to json.
*
* @param[in] in value of type TPMS_SCHEME_HMAC to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SCHEME_HMAC.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SCHEME_HMAC_serialize(const TPMS_SCHEME_HMAC *in, json_object **jso)
{
return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
}
/** Serialize value of type TPMS_SCHEME_XOR to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SCHEME_XOR.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SCHEME_XOR_serialize(const TPMS_SCHEME_XOR *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMI_ALG_HASH_serialize(in->hashAlg, &jso2);
return_if_error(r, "Serialize TPMI_ALG_HASH");
json_object_object_add(*jso, "hashAlg", jso2);
jso2 = NULL;
r = ifapi_json_TPMI_ALG_KDF_serialize(in->kdf, &jso2);
return_if_error(r, "Serialize TPMI_ALG_KDF");
json_object_object_add(*jso, "kdf", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize a TPMU_SCHEME_KEYEDHASH to json.
*
* This function expects the Bitfield to be encoded as unsigned int in host-endianess.
* @param[in] in the value to be serialized.
* @param[in] selector the type of the keyedhash scheme.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_SCHEME_KEYEDHASH.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMU_SCHEME_KEYEDHASH_serialize(const TPMU_SCHEME_KEYEDHASH *in, UINT32 selector, json_object **jso)
{
switch (selector) {
case TPM2_ALG_HMAC:
return ifapi_json_TPMS_SCHEME_HMAC_serialize(&in->hmac, jso);
case TPM2_ALG_XOR:
return ifapi_json_TPMS_SCHEME_XOR_serialize(&in->exclusiveOr, jso);
default:
LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
return TSS2_FAPI_RC_BAD_VALUE;
};
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMT_KEYEDHASH_SCHEME to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_KEYEDHASH_SCHEME.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMT_KEYEDHASH_SCHEME_serialize(const TPMT_KEYEDHASH_SCHEME *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMI_ALG_KEYEDHASH_SCHEME_serialize(in->scheme, &jso2);
return_if_error(r, "Serialize TPMI_ALG_KEYEDHASH_SCHEME");
json_object_object_add(*jso, "scheme", jso2);
if (in->scheme != TPM2_ALG_NULL) {
json_object *jso2 = NULL;
r = ifapi_json_TPMU_SCHEME_KEYEDHASH_serialize(&in->details, in->scheme, &jso2);
return_if_error(r,"Serialize TPMU_SCHEME_KEYEDHASH");
json_object_object_add(*jso, "details", jso2);
}
return TSS2_RC_SUCCESS;
}
/** Serialize a TPMS_SIG_SCHEME_RSASSA to json.
*
* @param[in] in value of type TPMS_SIG_SCHEME_RSASSA to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIG_SCHEME_RSASSA.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SIG_SCHEME_RSASSA_serialize(const TPMS_SIG_SCHEME_RSASSA *in, json_object **jso)
{
return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
}
/** Serialize a TPMS_SIG_SCHEME_RSAPSS to json.
*
* @param[in] in value of type TPMS_SIG_SCHEME_RSAPSS to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIG_SCHEME_RSAPSS.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SIG_SCHEME_RSAPSS_serialize(const TPMS_SIG_SCHEME_RSAPSS *in, json_object **jso)
{
return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
}
/** Serialize a TPMS_SIG_SCHEME_ECDSA to json.
*
* @param[in] in value of type TPMS_SIG_SCHEME_ECDSA to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIG_SCHEME_ECDSA.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SIG_SCHEME_ECDSA_serialize(const TPMS_SIG_SCHEME_ECDSA *in, json_object **jso)
{
return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
}
/** Serialize a TPMS_SIG_SCHEME_SM2 to json.
*
* @param[in] in value of type TPMS_SIG_SCHEME_SM2 to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIG_SCHEME_SM2.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SIG_SCHEME_SM2_serialize(const TPMS_SIG_SCHEME_SM2 *in, json_object **jso)
{
return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
}
/** Serialize a TPMS_SIG_SCHEME_ECSCHNORR to json.
*
* @param[in] in value of type TPMS_SIG_SCHEME_ECSCHNORR to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIG_SCHEME_ECSCHNORR.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SIG_SCHEME_ECSCHNORR_serialize(const TPMS_SIG_SCHEME_ECSCHNORR *in, json_object **jso)
{
return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
}
/** Serialize a TPMS_SIG_SCHEME_ECDAA to json.
*
* @param[in] in value of type TPMS_SIG_SCHEME_ECDAA to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIG_SCHEME_ECDAA.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SIG_SCHEME_ECDAA_serialize(const TPMS_SIG_SCHEME_ECDAA *in, json_object **jso)
{
return ifapi_json_TPMS_SCHEME_ECDAA_serialize(in, jso);
}
/** Serialize a TPMU_SIG_SCHEME to json.
*
* This function expects the Bitfield to be encoded as unsigned int in host-endianess.
* @param[in] in the value to be serialized.
* @param[in] selector the type of the signature scheme.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_SIG_SCHEME.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMU_SIG_SCHEME_serialize(const TPMU_SIG_SCHEME *in, UINT32 selector, json_object **jso)
{
switch (selector) {
case TPM2_ALG_RSASSA:
return ifapi_json_TPMS_SIG_SCHEME_RSASSA_serialize(&in->rsassa, jso);
case TPM2_ALG_RSAPSS:
return ifapi_json_TPMS_SIG_SCHEME_RSAPSS_serialize(&in->rsapss, jso);
case TPM2_ALG_ECDSA:
return ifapi_json_TPMS_SIG_SCHEME_ECDSA_serialize(&in->ecdsa, jso);
case TPM2_ALG_ECDAA:
return ifapi_json_TPMS_SIG_SCHEME_ECDAA_serialize(&in->ecdaa, jso);
case TPM2_ALG_SM2:
return ifapi_json_TPMS_SIG_SCHEME_SM2_serialize(&in->sm2, jso);
case TPM2_ALG_ECSCHNORR:
return ifapi_json_TPMS_SIG_SCHEME_ECSCHNORR_serialize(&in->ecschnorr, jso);
case TPM2_ALG_HMAC:
return ifapi_json_TPMS_SCHEME_HMAC_serialize(&in->hmac, jso);
default:
LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
return TSS2_FAPI_RC_BAD_VALUE;
};
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMT_SIG_SCHEME to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_SIG_SCHEME.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMT_SIG_SCHEME_serialize(const TPMT_SIG_SCHEME *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMI_ALG_SIG_SCHEME_serialize(in->scheme, &jso2);
return_if_error(r, "Serialize TPMI_ALG_SIG_SCHEME");
json_object_object_add(*jso, "scheme", jso2);
if (in->scheme != TPM2_ALG_NULL) {
json_object *jso2 = NULL;
r = ifapi_json_TPMU_SIG_SCHEME_serialize(&in->details, in->scheme, &jso2);
return_if_error(r,"Serialize TPMU_SIG_SCHEME");
json_object_object_add(*jso, "details", jso2);
}
return TSS2_RC_SUCCESS;
}
/** Serialize a TPMS_ENC_SCHEME_OAEP to json.
*
* @param[in] in value of type TPMS_ENC_SCHEME_OAEP to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_ENC_SCHEME_OAEP.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_ENC_SCHEME_OAEP_serialize(const TPMS_ENC_SCHEME_OAEP *in, json_object **jso)
{
return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
}
/** Serialize a TPMS_ENC_SCHEME_RSAES to json.
*
* @param[in] in value of type TPMS_ENC_SCHEME_RSAES to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_ENC_SCHEME_RSAES.
*/
TSS2_RC
ifapi_json_TPMS_ENC_SCHEME_RSAES_serialize(const TPMS_ENC_SCHEME_RSAES *in, json_object **jso)
{
return ifapi_json_TPMS_EMPTY_serialize(in, jso);
}
/** Serialize a TPMS_KEY_SCHEME_ECDH to json.
*
* @param[in] in value of type TPMS_KEY_SCHEME_ECDH to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_KEY_SCHEME_ECDH.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_KEY_SCHEME_ECDH_serialize(const TPMS_KEY_SCHEME_ECDH *in, json_object **jso)
{
return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
}
/** Serialize a TPMS_SCHEME_MGF1 to json.
*
* @param[in] in value of type TPMS_SCHEME_MGF1 to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SCHEME_MGF1.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SCHEME_MGF1_serialize(const TPMS_SCHEME_MGF1 *in, json_object **jso)
{
return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
}
/** Serialize a TPMS_SCHEME_KDF1_SP800_56A to json.
*
* @param[in] in value of type TPMS_SCHEME_KDF1_SP800_56A to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SCHEME_KDF1_SP800_56A.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SCHEME_KDF1_SP800_56A_serialize(const TPMS_SCHEME_KDF1_SP800_56A *in, json_object **jso)
{
return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
}
/** Serialize a TPMS_SCHEME_KDF1_SP800_108 to json.
*
* @param[in] in value of type TPMS_SCHEME_KDF1_SP800_108 to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SCHEME_KDF1_SP800_108.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SCHEME_KDF1_SP800_108_serialize(const TPMS_SCHEME_KDF1_SP800_108 *in, json_object **jso)
{
return ifapi_json_TPMS_SCHEME_HASH_serialize(in, jso);
}
/** Serialize a TPMU_KDF_SCHEME to json.
*
* This function expects the Bitfield to be encoded as unsigned int in host-endianess.
* @param[in] in the value to be serialized.
* @param[in] selector the type of the KDF scheme.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_KDF_SCHEME.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMU_KDF_SCHEME_serialize(const TPMU_KDF_SCHEME *in, UINT32 selector, json_object **jso)
{
switch (selector) {
case TPM2_ALG_MGF1:
return ifapi_json_TPMS_SCHEME_MGF1_serialize(&in->mgf1, jso);
case TPM2_ALG_KDF1_SP800_56A:
return ifapi_json_TPMS_SCHEME_KDF1_SP800_56A_serialize(&in->kdf1_sp800_56a, jso);
case TPM2_ALG_KDF1_SP800_108:
return ifapi_json_TPMS_SCHEME_KDF1_SP800_108_serialize(&in->kdf1_sp800_108, jso);
default:
LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
return TSS2_FAPI_RC_BAD_VALUE;
};
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMT_KDF_SCHEME to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_KDF_SCHEME.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMT_KDF_SCHEME_serialize(const TPMT_KDF_SCHEME *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMI_ALG_KDF_serialize(in->scheme, &jso2);
return_if_error(r, "Serialize TPMI_ALG_KDF");
json_object_object_add(*jso, "scheme", jso2);
if (in->scheme != TPM2_ALG_NULL) {
json_object *jso2 = NULL;
r = ifapi_json_TPMU_KDF_SCHEME_serialize(&in->details, in->scheme, &jso2);
return_if_error(r,"Serialize TPMU_KDF_SCHEME");
json_object_object_add(*jso, "details", jso2);
}
return TSS2_RC_SUCCESS;
}
/** Serialize TPMI_ALG_ASYM_SCHEME to json.
*
* @param[in] in variable to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
* the function.
* @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
*/
TSS2_RC
ifapi_json_TPMI_ALG_ASYM_SCHEME_serialize(const TPMI_ALG_ASYM_SCHEME in, json_object **jso)
{
CHECK_IN_LIST(TPMI_ALG_ASYM_SCHEME, in, TPM2_ALG_ECDH, TPM2_ALG_RSASSA, TPM2_ALG_RSAPSS,
TPM2_ALG_ECDSA, TPM2_ALG_ECDAA, TPM2_ALG_SM2, TPM2_ALG_ECSCHNORR,
TPM2_ALG_RSAES, TPM2_ALG_OAEP, TPM2_ALG_NULL);
return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
}
/** Serialize a TPMU_ASYM_SCHEME to json.
*
* This function expects the Bitfield to be encoded as unsigned int in host-endianess.
* @param[in] in the value to be serialized.
* @param[in] selector the type of the scheme.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_ASYM_SCHEME.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMU_ASYM_SCHEME_serialize(const TPMU_ASYM_SCHEME *in, UINT32 selector, json_object **jso)
{
switch (selector) {
case TPM2_ALG_ECDH:
return ifapi_json_TPMS_KEY_SCHEME_ECDH_serialize(&in->ecdh, jso);
case TPM2_ALG_RSASSA:
return ifapi_json_TPMS_SIG_SCHEME_RSASSA_serialize(&in->rsassa, jso);
case TPM2_ALG_RSAPSS:
return ifapi_json_TPMS_SIG_SCHEME_RSAPSS_serialize(&in->rsapss, jso);
case TPM2_ALG_ECDSA:
return ifapi_json_TPMS_SIG_SCHEME_ECDSA_serialize(&in->ecdsa, jso);
case TPM2_ALG_ECDAA:
return ifapi_json_TPMS_SIG_SCHEME_ECDAA_serialize(&in->ecdaa, jso);
case TPM2_ALG_SM2:
return ifapi_json_TPMS_SIG_SCHEME_SM2_serialize(&in->sm2, jso);
case TPM2_ALG_ECSCHNORR:
return ifapi_json_TPMS_SIG_SCHEME_ECSCHNORR_serialize(&in->ecschnorr, jso);
case TPM2_ALG_RSAES:
return ifapi_json_TPMS_ENC_SCHEME_RSAES_serialize(&in->rsaes, jso);
case TPM2_ALG_OAEP:
return ifapi_json_TPMS_ENC_SCHEME_OAEP_serialize(&in->oaep, jso);
default:
LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
return TSS2_FAPI_RC_BAD_VALUE;
};
return TSS2_RC_SUCCESS;
}
/** Serialize TPMI_ALG_RSA_SCHEME to json.
*
* @param[in] in variable to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
* the function.
* @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
*/
TSS2_RC
ifapi_json_TPMI_ALG_RSA_SCHEME_serialize(const TPMI_ALG_RSA_SCHEME in, json_object **jso)
{
CHECK_IN_LIST(TPMI_ALG_RSA_SCHEME, in, TPM2_ALG_RSAES, TPM2_ALG_OAEP, TPM2_ALG_RSASSA,
TPM2_ALG_RSAPSS, TPM2_ALG_NULL);
return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
}
/** Serialize value of type TPMT_RSA_SCHEME to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_RSA_SCHEME.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMT_RSA_SCHEME_serialize(const TPMT_RSA_SCHEME *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMI_ALG_RSA_SCHEME_serialize(in->scheme, &jso2);
return_if_error(r, "Serialize TPMI_ALG_RSA_SCHEME");
json_object_object_add(*jso, "scheme", jso2);
if (in->scheme != TPM2_ALG_NULL) {
json_object *jso2 = NULL;
r = ifapi_json_TPMU_ASYM_SCHEME_serialize(&in->details, in->scheme, &jso2);
return_if_error(r,"Serialize TPMU_ASYM_SCHEME");
json_object_object_add(*jso, "details", jso2);
}
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPM2B_PUBLIC_KEY_RSA to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_PUBLIC_KEY_RSA.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPM2B_PUBLIC_KEY_RSA_serialize(const TPM2B_PUBLIC_KEY_RSA *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
if (in->size > TPM2_MAX_RSA_KEY_BYTES) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_RSA_KEY_BYTES)",
(size_t)in->size, (size_t)TPM2_MAX_RSA_KEY_BYTES);
return TSS2_FAPI_RC_BAD_VALUE;
}
char hex_string[((size_t)in->size)*2+1];
for (size_t i = 0, off = 0; i < in->size; i++, off+=2)
sprintf(&hex_string[off], "%02x", in->buffer[i]);
hex_string[(in->size)*2] = '\0';
*jso = json_object_new_string (hex_string);
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMI_RSA_KEY_BITS to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMI_RSA_KEY_BITS.
*
*/
TSS2_RC
ifapi_json_TPMI_RSA_KEY_BITS_serialize(const TPMI_RSA_KEY_BITS in, json_object **jso)
{
CHECK_IN_LIST(TPMI_RSA_KEY_BITS, in, 1024, 2048);
return ifapi_json_UINT16_serialize(in, jso);
}
/** Serialize value of type TPM2B_ECC_PARAMETER to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_ECC_PARAMETER.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPM2B_ECC_PARAMETER_serialize(const TPM2B_ECC_PARAMETER *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
if (in->size > TPM2_MAX_ECC_KEY_BYTES) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = TPM2_MAX_ECC_KEY_BYTES)",
(size_t)in->size, (size_t)TPM2_MAX_ECC_KEY_BYTES);
return TSS2_FAPI_RC_BAD_VALUE;
}
char hex_string[((size_t)in->size)*2+1];
for (size_t i = 0, off = 0; i < in->size; i++, off+=2)
sprintf(&hex_string[off], "%02x", in->buffer[i]);
hex_string[(in->size)*2] = '\0';
*jso = json_object_new_string (hex_string);
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_ECC_POINT to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_ECC_POINT.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_ECC_POINT_serialize(const TPMS_ECC_POINT *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPM2B_ECC_PARAMETER_serialize(&in->x, &jso2);
return_if_error(r, "Serialize TPM2B_ECC_PARAMETER");
json_object_object_add(*jso, "x", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_ECC_PARAMETER_serialize(&in->y, &jso2);
return_if_error(r, "Serialize TPM2B_ECC_PARAMETER");
json_object_object_add(*jso, "y", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize TPMI_ALG_ECC_SCHEME to json.
*
* @param[in] in variable to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
* the function.
* @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
*/
TSS2_RC
ifapi_json_TPMI_ALG_ECC_SCHEME_serialize(const TPMI_ALG_ECC_SCHEME in, json_object **jso)
{
CHECK_IN_LIST(TPMI_ALG_ECC_SCHEME, in, TPM2_ALG_ECDSA, TPM2_ALG_ECDAA,
TPM2_ALG_SM2, TPM2_ALG_ECSCHNORR, TPM2_ALG_ECDH, TPM2_ALG_NULL);
return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
}
/** Serialize value of type TPMI_ECC_CURVE to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMI_ECC_CURVE.
*
*/
TSS2_RC
ifapi_json_TPMI_ECC_CURVE_serialize(const TPMI_ECC_CURVE in, json_object **jso)
{
return ifapi_json_TPM2_ECC_CURVE_serialize(in, jso);
}
/** Serialize value of type TPMT_ECC_SCHEME to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_ECC_SCHEME.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMT_ECC_SCHEME_serialize(const TPMT_ECC_SCHEME *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMI_ALG_ECC_SCHEME_serialize(in->scheme, &jso2);
return_if_error(r, "Serialize TPMI_ALG_ECC_SCHEME");
json_object_object_add(*jso, "scheme", jso2);
if (in->scheme != TPM2_ALG_NULL) {
json_object *jso2 = NULL;
r = ifapi_json_TPMU_ASYM_SCHEME_serialize(&in->details, in->scheme, &jso2);
return_if_error(r,"Serialize TPMU_ASYM_SCHEME");
json_object_object_add(*jso, "details", jso2);
}
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_SIGNATURE_RSA to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIGNATURE_RSA.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SIGNATURE_RSA_serialize(const TPMS_SIGNATURE_RSA *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMI_ALG_HASH_serialize(in->hash, &jso2);
return_if_error(r, "Serialize TPMI_ALG_HASH");
json_object_object_add(*jso, "hash", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_PUBLIC_KEY_RSA_serialize(&in->sig, &jso2);
return_if_error(r, "Serialize TPM2B_PUBLIC_KEY_RSA");
json_object_object_add(*jso, "sig", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize a TPMS_SIGNATURE_RSASSA to json.
*
* @param[in] in value of type TPMS_SIGNATURE_RSASSA to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIGNATURE_RSASSA.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SIGNATURE_RSASSA_serialize(const TPMS_SIGNATURE_RSASSA *in, json_object **jso)
{
return ifapi_json_TPMS_SIGNATURE_RSA_serialize(in, jso);
}
/** Serialize a TPMS_SIGNATURE_RSAPSS to json.
*
* @param[in] in value of type TPMS_SIGNATURE_RSAPSS to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIGNATURE_RSAPSS.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SIGNATURE_RSAPSS_serialize(const TPMS_SIGNATURE_RSAPSS *in, json_object **jso)
{
return ifapi_json_TPMS_SIGNATURE_RSA_serialize(in, jso);
}
/** Serialize value of type TPMS_SIGNATURE_ECC to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIGNATURE_ECC.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SIGNATURE_ECC_serialize(const TPMS_SIGNATURE_ECC *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMI_ALG_HASH_serialize(in->hash, &jso2);
return_if_error(r, "Serialize TPMI_ALG_HASH");
json_object_object_add(*jso, "hash", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_ECC_PARAMETER_serialize(&in->signatureR, &jso2);
return_if_error(r, "Serialize TPM2B_ECC_PARAMETER");
json_object_object_add(*jso, "signatureR", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_ECC_PARAMETER_serialize(&in->signatureS, &jso2);
return_if_error(r, "Serialize TPM2B_ECC_PARAMETER");
json_object_object_add(*jso, "signatureS", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize a TPMS_SIGNATURE_ECDSA to json.
*
* @param[in] in value of type TPMS_SIGNATURE_ECDSA to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIGNATURE_ECDSA.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SIGNATURE_ECDSA_serialize(const TPMS_SIGNATURE_ECDSA *in, json_object **jso)
{
return ifapi_json_TPMS_SIGNATURE_ECC_serialize(in, jso);
}
/** Serialize a TPMS_SIGNATURE_ECDAA to json.
*
* @param[in] in value of type TPMS_SIGNATURE_ECDAA to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIGNATURE_ECDAA.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SIGNATURE_ECDAA_serialize(const TPMS_SIGNATURE_ECDAA *in, json_object **jso)
{
return ifapi_json_TPMS_SIGNATURE_ECC_serialize(in, jso);
}
/** Serialize a TPMS_SIGNATURE_SM2 to json.
*
* @param[in] in value of type TPMS_SIGNATURE_SM2 to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIGNATURE_SM2.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SIGNATURE_SM2_serialize(const TPMS_SIGNATURE_SM2 *in, json_object **jso)
{
return ifapi_json_TPMS_SIGNATURE_ECC_serialize(in, jso);
}
/** Serialize a TPMS_SIGNATURE_ECSCHNORR to json.
*
* @param[in] in value of type TPMS_SIGNATURE_ECSCHNORR to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_SIGNATURE_ECSCHNORR.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_SIGNATURE_ECSCHNORR_serialize(const TPMS_SIGNATURE_ECSCHNORR *in, json_object **jso)
{
return ifapi_json_TPMS_SIGNATURE_ECC_serialize(in, jso);
}
/** Serialize a TPMU_SIGNATURE to json.
*
* This function expects the Bitfield to be encoded as unsigned int in host-endianess.
* @param[in] in the value to be serialized.
* @param[in] selector the type of the signature.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_SIGNATURE.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMU_SIGNATURE_serialize(const TPMU_SIGNATURE *in, UINT32 selector, json_object **jso)
{
switch (selector) {
case TPM2_ALG_RSASSA:
return ifapi_json_TPMS_SIGNATURE_RSASSA_serialize(&in->rsassa, jso);
case TPM2_ALG_RSAPSS:
return ifapi_json_TPMS_SIGNATURE_RSAPSS_serialize(&in->rsapss, jso);
case TPM2_ALG_ECDSA:
return ifapi_json_TPMS_SIGNATURE_ECDSA_serialize(&in->ecdsa, jso);
case TPM2_ALG_ECDAA:
return ifapi_json_TPMS_SIGNATURE_ECDAA_serialize(&in->ecdaa, jso);
case TPM2_ALG_SM2:
return ifapi_json_TPMS_SIGNATURE_SM2_serialize(&in->sm2, jso);
case TPM2_ALG_ECSCHNORR:
return ifapi_json_TPMS_SIGNATURE_ECSCHNORR_serialize(&in->ecschnorr, jso);
case TPM2_ALG_HMAC:
return ifapi_json_TPMT_HA_serialize(&in->hmac, jso);
default:
LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
return TSS2_FAPI_RC_BAD_VALUE;
};
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMT_SIGNATURE to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_SIGNATURE.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMT_SIGNATURE_serialize(const TPMT_SIGNATURE *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMI_ALG_SIG_SCHEME_serialize(in->sigAlg, &jso2);
return_if_error(r, "Serialize TPMI_ALG_SIG_SCHEME");
json_object_object_add(*jso, "sigAlg", jso2);
if (in->sigAlg != TPM2_ALG_NULL) {
json_object *jso2 = NULL;
r = ifapi_json_TPMU_SIGNATURE_serialize(&in->signature, in->sigAlg, &jso2);
return_if_error(r,"Serialize TPMU_SIGNATURE");
json_object_object_add(*jso, "signature", jso2);
}
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPM2B_ENCRYPTED_SECRET to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_ENCRYPTED_SECRET.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPM2B_ENCRYPTED_SECRET_serialize(const TPM2B_ENCRYPTED_SECRET *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
if (in->size > sizeof(TPMU_ENCRYPTED_SECRET)) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = sizeof(TPMU_ENCRYPTED_SECRET))",
(size_t)in->size, (size_t)sizeof(TPMU_ENCRYPTED_SECRET));
return TSS2_FAPI_RC_BAD_VALUE;
}
char hex_string[((size_t)in->size)*2+1];
for (size_t i = 0, off = 0; i < in->size; i++, off+=2)
sprintf(&hex_string[off], "%02x", in->secret[i]);
hex_string[(in->size)*2] = '\0';
*jso = json_object_new_string (hex_string);
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
return TSS2_RC_SUCCESS;
}
/** Serialize TPMI_ALG_PUBLIC to json.
*
* @param[in] in variable to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_FAPI_RC_BAD_VALUE if an invalid value was passed into
* the function.
* @retval TSS2_FAPI_RC_MEMORY if not enough memory can be allocated.
*/
TSS2_RC
ifapi_json_TPMI_ALG_PUBLIC_serialize(const TPMI_ALG_PUBLIC in, json_object **jso)
{
CHECK_IN_LIST(TPMI_ALG_PUBLIC, in, TPM2_ALG_RSA, TPM2_ALG_KEYEDHASH,
TPM2_ALG_ECC, TPM2_ALG_SYMCIPHER, TPM2_ALG_NULL);
return ifapi_json_TPM2_ALG_ID_serialize(in, jso);
}
/** Serialize a TPMU_PUBLIC_ID to json.
*
* This function expects the Bitfield to be encoded as unsigned int in host-endianess.
* @param[in] in the value to be serialized.
* @param[in] selector the type of the public ID.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_PUBLIC_ID.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMU_PUBLIC_ID_serialize(const TPMU_PUBLIC_ID *in, UINT32 selector, json_object **jso)
{
switch (selector) {
case TPM2_ALG_KEYEDHASH:
return ifapi_json_TPM2B_DIGEST_serialize(&in->keyedHash, jso);
case TPM2_ALG_SYMCIPHER:
return ifapi_json_TPM2B_DIGEST_serialize(&in->sym, jso);
case TPM2_ALG_RSA:
return ifapi_json_TPM2B_PUBLIC_KEY_RSA_serialize(&in->rsa, jso);
case TPM2_ALG_ECC:
return ifapi_json_TPMS_ECC_POINT_serialize(&in->ecc, jso);
default:
LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
return TSS2_FAPI_RC_BAD_VALUE;
};
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_KEYEDHASH_PARMS to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_KEYEDHASH_PARMS.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_KEYEDHASH_PARMS_serialize(const TPMS_KEYEDHASH_PARMS *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMT_KEYEDHASH_SCHEME_serialize(&in->scheme, &jso2);
return_if_error(r, "Serialize TPMT_KEYEDHASH_SCHEME");
json_object_object_add(*jso, "scheme", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_RSA_PARMS to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_RSA_PARMS.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_RSA_PARMS_serialize(const TPMS_RSA_PARMS *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMT_SYM_DEF_OBJECT_serialize(&in->symmetric, &jso2);
return_if_error(r, "Serialize TPMT_SYM_DEF_OBJECT");
json_object_object_add(*jso, "symmetric", jso2);
jso2 = NULL;
r = ifapi_json_TPMT_RSA_SCHEME_serialize(&in->scheme, &jso2);
return_if_error(r, "Serialize TPMT_RSA_SCHEME");
json_object_object_add(*jso, "scheme", jso2);
jso2 = NULL;
r = ifapi_json_TPMI_RSA_KEY_BITS_serialize(in->keyBits, &jso2);
return_if_error(r, "Serialize TPMI_RSA_KEY_BITS");
json_object_object_add(*jso, "keyBits", jso2);
jso2 = NULL;
r = ifapi_json_UINT32_serialize(in->exponent, &jso2);
return_if_error(r, "Serialize UINT32");
json_object_object_add(*jso, "exponent", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_ECC_PARMS to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_ECC_PARMS.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_ECC_PARMS_serialize(const TPMS_ECC_PARMS *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMT_SYM_DEF_OBJECT_serialize(&in->symmetric, &jso2);
return_if_error(r, "Serialize TPMT_SYM_DEF_OBJECT");
json_object_object_add(*jso, "symmetric", jso2);
jso2 = NULL;
r = ifapi_json_TPMT_ECC_SCHEME_serialize(&in->scheme, &jso2);
return_if_error(r, "Serialize TPMT_ECC_SCHEME");
json_object_object_add(*jso, "scheme", jso2);
jso2 = NULL;
r = ifapi_json_TPMI_ECC_CURVE_serialize(in->curveID, &jso2);
return_if_error(r, "Serialize TPMI_ECC_CURVE");
json_object_object_add(*jso, "curveID", jso2);
jso2 = NULL;
r = ifapi_json_TPMT_KDF_SCHEME_serialize(&in->kdf, &jso2);
return_if_error(r, "Serialize TPMT_KDF_SCHEME");
json_object_object_add(*jso, "kdf", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize a TPMU_PUBLIC_PARMS to json.
*
* This function expects the Bitfield to be encoded as unsigned int in host-endianess.
* @param[in] in the value to be serialized.
* @param[in] selector the type of the public parameters.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMU_PUBLIC_PARMS.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMU_PUBLIC_PARMS_serialize(const TPMU_PUBLIC_PARMS *in, UINT32 selector, json_object **jso)
{
switch (selector) {
case TPM2_ALG_KEYEDHASH:
return ifapi_json_TPMS_KEYEDHASH_PARMS_serialize(&in->keyedHashDetail, jso);
case TPM2_ALG_SYMCIPHER:
return ifapi_json_TPMS_SYMCIPHER_PARMS_serialize(&in->symDetail, jso);
case TPM2_ALG_RSA:
return ifapi_json_TPMS_RSA_PARMS_serialize(&in->rsaDetail, jso);
case TPM2_ALG_ECC:
return ifapi_json_TPMS_ECC_PARMS_serialize(&in->eccDetail, jso);
default:
LOG_ERROR("\nSelector %"PRIx32 " did not match", selector);
return TSS2_FAPI_RC_BAD_VALUE;
};
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMT_PUBLIC to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMT_PUBLIC.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMT_PUBLIC_serialize(const TPMT_PUBLIC *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMI_ALG_PUBLIC_serialize(in->type, &jso2);
return_if_error(r, "Serialize TPMI_ALG_PUBLIC");
json_object_object_add(*jso, "type", jso2);
jso2 = NULL;
r = ifapi_json_TPMI_ALG_HASH_serialize(in->nameAlg, &jso2);
return_if_error(r, "Serialize TPMI_ALG_HASH");
json_object_object_add(*jso, "nameAlg", jso2);
jso2 = NULL;
r = ifapi_json_TPMA_OBJECT_serialize(in->objectAttributes, &jso2);
return_if_error(r, "Serialize TPMA_OBJECT");
json_object_object_add(*jso, "objectAttributes", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_DIGEST_serialize(&in->authPolicy, &jso2);
return_if_error(r, "Serialize TPM2B_DIGEST");
json_object_object_add(*jso, "authPolicy", jso2);
jso2 = NULL;
r = ifapi_json_TPMU_PUBLIC_PARMS_serialize(&in->parameters, in->type, &jso2);
return_if_error(r,"Serialize TPMU_PUBLIC_PARMS");
json_object_object_add(*jso, "parameters", jso2);
jso2 = NULL;
r = ifapi_json_TPMU_PUBLIC_ID_serialize(&in->unique, in->type, &jso2);
return_if_error(r,"Serialize TPMU_PUBLIC_ID");
json_object_object_add(*jso, "unique", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize a TPM2B_PUBLIC to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_PUBLIC.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPM2B_PUBLIC_serialize(const TPM2B_PUBLIC *in, json_object **jso)
{
if (*jso == NULL)
*jso = json_object_new_object ();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
json_object *jso2;
jso2 = NULL;
if (ifapi_json_UINT16_serialize(in->size, &jso2))
return TSS2_FAPI_RC_BAD_VALUE;
json_object_object_add(*jso, "size", jso2);
jso2 = NULL;
if (ifapi_json_TPMT_PUBLIC_serialize(&in->publicArea, &jso2))
return TSS2_FAPI_RC_BAD_VALUE;
json_object_object_add(*jso, "publicArea", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPM2B_PRIVATE to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_PRIVATE.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPM2B_PRIVATE_serialize(const TPM2B_PRIVATE *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
if (in->size > sizeof(_PRIVATE)) {
LOG_ERROR("Too many bytes for array (%"PRIuPTR" > %"PRIuPTR" = sizeof(_PRIVATE))",
(size_t)in->size, (size_t)sizeof(_PRIVATE));
return TSS2_FAPI_RC_BAD_VALUE;
}
char hex_string[((size_t)in->size)*2+1];
for (size_t i = 0, off = 0; i < in->size; i++, off+=2)
sprintf(&hex_string[off], "%02x", in->buffer[i]);
hex_string[(in->size)*2] = '\0';
*jso = json_object_new_string (hex_string);
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
return TSS2_RC_SUCCESS;
}
/** Serialize TPM2_NT to json.
*
* @param[in] in constant to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPM2_NT.
*/
TSS2_RC
ifapi_json_TPM2_NT_serialize(const TPM2_NT in, json_object **jso)
{
static const struct { TPM2_NT in; char *name; } tab[] = {
{ TPM2_NT_ORDINARY, "ORDINARY" },
{ TPM2_NT_COUNTER, "COUNTER" },
{ TPM2_NT_BITS, "BITS" },
{ TPM2_NT_EXTEND, "EXTEND" },
{ TPM2_NT_PIN_FAIL, "PIN_FAIL" },
{ TPM2_NT_PIN_PASS, "PIN_PASS" },
};
for (size_t i = 0; i < sizeof(tab) / sizeof(tab[0]); i++) {
if (tab[i].in == in) {
*jso = json_object_new_string(tab[i].name);
check_oom(*jso);
return TSS2_RC_SUCCESS;
}
}
return_error(TSS2_FAPI_RC_BAD_VALUE, "Undefined constant.");
}
/** Serialize a TPMA_NV to json.
*
* This function expects the Bitfield to be encoded as unsigned int in host-endianess.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the constant is not of type TPMA_NV.
*/
TSS2_RC
ifapi_json_TPMA_NV_serialize(const TPMA_NV in, json_object **jso)
{
struct { TPMA_NV in; char *name; } tab[] = {
{ TPMA_NV_PPWRITE, "PPWRITE" },
{ TPMA_NV_OWNERWRITE, "OWNERWRITE" },
{ TPMA_NV_AUTHWRITE, "AUTHWRITE" },
{ TPMA_NV_POLICYWRITE, "POLICYWRITE" },
{ TPMA_NV_POLICY_DELETE, "POLICY_DELETE" },
{ TPMA_NV_WRITELOCKED, "WRITELOCKED" },
{ TPMA_NV_WRITEALL, "WRITEALL" },
{ TPMA_NV_WRITEDEFINE, "WRITEDEFINE" },
{ TPMA_NV_WRITE_STCLEAR, "WRITE_STCLEAR" },
{ TPMA_NV_GLOBALLOCK, "GLOBALLOCK" },
{ TPMA_NV_PPREAD, "PPREAD" },
{ TPMA_NV_OWNERREAD, "OWNERREAD" },
{ TPMA_NV_AUTHREAD, "AUTHREAD" },
{ TPMA_NV_POLICYREAD, "POLICYREAD" },
{ TPMA_NV_NO_DA, "NO_DA" },
{ TPMA_NV_ORDERLY, "ORDERLY" },
{ TPMA_NV_CLEAR_STCLEAR, "CLEAR_STCLEAR" },
{ TPMA_NV_READLOCKED, "READLOCKED" },
{ TPMA_NV_WRITTEN, "WRITTEN" },
{ TPMA_NV_PLATFORMCREATE, "PLATFORMCREATE" },
{ TPMA_NV_READ_STCLEAR, "READ_STCLEAR" },
};
UINT32 input;
input = (UINT32) in;
json_object *jso_bit;
if (*jso == NULL) {
*jso = json_object_new_object();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
}
size_t n = sizeof(tab) / sizeof(tab[0]);
size_t i;
for (i = 0; i < n; i++) {
if (tab[i].in & input)
jso_bit = json_object_new_int(1);
else
jso_bit = json_object_new_int(0);
return_if_null(jso_bit, "Out of memory.", TSS2_FAPI_RC_MEMORY);
json_object_object_add(*jso, tab[i].name, jso_bit);
}
TPM2_NT input2 = (TPMA_NV_TPM2_NT_MASK & input)>>4;
json_object *jso2 = NULL;
TSS2_RC r = ifapi_json_TPM2_NT_serialize(input2, &jso2);
return_if_error(r, "Bad value");
json_object_object_add(*jso, "TPM2_NT", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_NV_PUBLIC to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_NV_PUBLIC.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_NV_PUBLIC_serialize(const TPMS_NV_PUBLIC *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPMI_RH_NV_INDEX_serialize(in->nvIndex, &jso2);
return_if_error(r, "Serialize TPMI_RH_NV_INDEX");
json_object_object_add(*jso, "nvIndex", jso2);
jso2 = NULL;
r = ifapi_json_TPMI_ALG_HASH_serialize(in->nameAlg, &jso2);
return_if_error(r, "Serialize TPMI_ALG_HASH");
json_object_object_add(*jso, "nameAlg", jso2);
jso2 = NULL;
r = ifapi_json_TPMA_NV_serialize(in->attributes, &jso2);
return_if_error(r, "Serialize TPMA_NV");
json_object_object_add(*jso, "attributes", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_DIGEST_serialize(&in->authPolicy, &jso2);
return_if_error(r, "Serialize TPM2B_DIGEST");
json_object_object_add(*jso, "authPolicy", jso2);
jso2 = NULL;
r = ifapi_json_UINT16_serialize(in->dataSize, &jso2);
return_if_error(r, "Serialize UINT16");
json_object_object_add(*jso, "dataSize", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize a TPM2B_NV_PUBLIC to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_NV_PUBLIC.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPM2B_NV_PUBLIC_serialize(const TPM2B_NV_PUBLIC *in, json_object **jso)
{
if (*jso == NULL)
*jso = json_object_new_object ();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
json_object *jso2;
jso2 = NULL;
if (ifapi_json_UINT16_serialize(in->size, &jso2))
return TSS2_FAPI_RC_BAD_VALUE;
json_object_object_add(*jso, "size", jso2);
jso2 = NULL;
if (ifapi_json_TPMS_NV_PUBLIC_serialize(&in->nvPublic, &jso2))
return TSS2_FAPI_RC_BAD_VALUE;
json_object_object_add(*jso, "nvPublic", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize value of type TPMS_CREATION_DATA to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPMS_CREATION_DATA.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPMS_CREATION_DATA_serialize(const TPMS_CREATION_DATA *in, json_object **jso)
{
return_if_null(in, "Bad reference.", TSS2_FAPI_RC_BAD_REFERENCE);
TSS2_RC r;
json_object *jso2;
if (*jso == NULL)
*jso = json_object_new_object ();
jso2 = NULL;
r = ifapi_json_TPML_PCR_SELECTION_serialize(&in->pcrSelect, &jso2);
return_if_error(r, "Serialize TPML_PCR_SELECTION");
json_object_object_add(*jso, "pcrSelect", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_DIGEST_serialize(&in->pcrDigest, &jso2);
return_if_error(r, "Serialize TPM2B_DIGEST");
json_object_object_add(*jso, "pcrDigest", jso2);
jso2 = NULL;
r = ifapi_json_TPMA_LOCALITY_serialize(in->locality, &jso2);
return_if_error(r, "Serialize TPMA_LOCALITY");
json_object_object_add(*jso, "locality", jso2);
jso2 = NULL;
r = ifapi_json_TPM2_ALG_ID_serialize(in->parentNameAlg, &jso2);
return_if_error(r, "Serialize TPM2_ALG_ID");
json_object_object_add(*jso, "parentNameAlg", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_NAME_serialize(&in->parentName, &jso2);
return_if_error(r, "Serialize TPM2B_NAME");
json_object_object_add(*jso, "parentName", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_NAME_serialize(&in->parentQualifiedName, &jso2);
return_if_error(r, "Serialize TPM2B_NAME");
json_object_object_add(*jso, "parentQualifiedName", jso2);
jso2 = NULL;
r = ifapi_json_TPM2B_DATA_serialize(&in->outsideInfo, &jso2);
return_if_error(r, "Serialize TPM2B_DATA");
json_object_object_add(*jso, "outsideInfo", jso2);
return TSS2_RC_SUCCESS;
}
/** Serialize a TPM2B_CREATION_DATA to json.
*
* @param[in] in value to be serialized.
* @param[out] jso pointer to the json object.
* @retval TSS2_RC_SUCCESS if the function call was a success.
* @retval TSS2_FAPI_RC_MEMORY: if the FAPI cannot allocate enough memory.
* @retval TSS2_FAPI_RC_BAD_VALUE if the value is not of type TPM2B_CREATION_DATA.
* @retval TSS2_FAPI_RC_BAD_REFERENCE a invalid null pointer is passed.
*/
TSS2_RC
ifapi_json_TPM2B_CREATION_DATA_serialize(const TPM2B_CREATION_DATA *in, json_object **jso)
{
if (*jso == NULL)
*jso = json_object_new_object ();
return_if_null(*jso, "Out of memory.", TSS2_FAPI_RC_MEMORY);
json_object *jso2;
jso2 = NULL;
if (ifapi_json_UINT16_serialize(in->size, &jso2))
return TSS2_FAPI_RC_BAD_VALUE;
json_object_object_add(*jso, "size", jso2);
jso2 = NULL;
if (ifapi_json_TPMS_CREATION_DATA_serialize(&in->creationData, &jso2))
return TSS2_FAPI_RC_BAD_VALUE;
json_object_object_add(*jso, "creationData", jso2);
return TSS2_RC_SUCCESS;
}