/* SPDX-License-Identifier: BSD-2-Clause */ /******************************************************************************* * Copyright 2018-2019, Fraunhofer SIT sponsored by Infineon Technologies AG * All rights reserved. *******************************************************************************/ #ifndef IFAPI_EVENTLOG_H #define IFAPI_EVENTLOG_H #include #include "tss2_tpm2_types.h" #include "ifapi_io.h" /** Type of event */ typedef UINT32 IFAPI_EVENT_TYPE; #define IFAPI_IMA_EVENT_TAG 1 /**< Tag for key resource */ #define IFAPI_TSS_EVENT_TAG 2 /**< Tag for key resource */ /** TSS event information */ typedef struct { TPM2B_EVENT data; /**< The event data */ char *event; /**< TSS event information */ } IFAPI_TSS_EVENT; /** IMA event information */ typedef struct { TPM2B_DIGEST eventData; /**< The ima event digest */ char *eventName; /**< IMA event information */ } IFAPI_IMA_EVENT; /** Type for representing sub types of FAPI events */ typedef union { IFAPI_TSS_EVENT tss_event; /**< TSS event information */ IFAPI_IMA_EVENT ima_event; /**< IMA event information */ } IFAPI_EVENT_UNION; /** Type for representing a FAPI event */ typedef struct IFAPI_EVENT { UINT32 recnum; /**< Number of event */ TPM2_HANDLE pcr; /**< PCR register */ TPML_DIGEST_VALUES digests; /**< The digest list of the event */ IFAPI_EVENT_TYPE type; /**< Selector for object type */ IFAPI_EVENT_UNION sub_event; /**< Additional event information */ } IFAPI_EVENT; enum IFAPI_EVENTLOG_STATE { IFAPI_EVENTLOG_STATE_INIT = 0, IFAPI_EVENTLOG_STATE_READING, IFAPI_EVENTLOG_STATE_APPENDING, IFAPI_EVENTLOG_STATE_WRITING }; typedef struct IFAPI_EVENTLOG { enum IFAPI_EVENTLOG_STATE state; char *log_dir; struct IFAPI_EVENT event; TPM2_HANDLE pcrList[TPM2_MAX_PCRS]; size_t pcrListSize; size_t pcrListIdx; json_object *log; } IFAPI_EVENTLOG; TSS2_RC ifapi_eventlog_initialize( IFAPI_EVENTLOG *eventlog, const char *log_dir); TSS2_RC ifapi_eventlog_get_async( IFAPI_EVENTLOG *eventlog, IFAPI_IO *io, const TPM2_HANDLE *pcrList, size_t pcrListSize); TSS2_RC ifapi_eventlog_get_finish( IFAPI_EVENTLOG *eventlog, IFAPI_IO *io, char **log); TSS2_RC ifapi_eventlog_append_async( IFAPI_EVENTLOG *eventlog, IFAPI_IO *io, const IFAPI_EVENT *event); TSS2_RC ifapi_eventlog_append_finish( IFAPI_EVENTLOG *eventlog, IFAPI_IO *io); void ifapi_cleanup_event( IFAPI_EVENT * event); #endif /* IFAPI_EVENTLOG_H */