blob: 4367faffcafde8050a0739ae68d033a3941adcab [file] [log] [blame]
/* 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 <json-c/json.h>
#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_check(
IFAPI_EVENTLOG *eventlog,
IFAPI_IO *io);
TSS2_RC
ifapi_eventlog_append_finish(
IFAPI_EVENTLOG *eventlog,
IFAPI_IO *io,
const IFAPI_EVENT *event);
void
ifapi_cleanup_event(
IFAPI_EVENT * event);
#endif /* IFAPI_EVENTLOG_H */