1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */ 2*758e9fbaSOystein Eftevaag /******************************************************************************* 3*758e9fbaSOystein Eftevaag * Copyright 2018-2019, Fraunhofer SIT sponsored by Infineon Technologies AG 4*758e9fbaSOystein Eftevaag * All rights reserved. 5*758e9fbaSOystein Eftevaag *******************************************************************************/ 6*758e9fbaSOystein Eftevaag #ifndef IFAPI_EVENTLOG_H 7*758e9fbaSOystein Eftevaag #define IFAPI_EVENTLOG_H 8*758e9fbaSOystein Eftevaag 9*758e9fbaSOystein Eftevaag #include <json-c/json.h> 10*758e9fbaSOystein Eftevaag 11*758e9fbaSOystein Eftevaag #include "tss2_tpm2_types.h" 12*758e9fbaSOystein Eftevaag #include "ifapi_io.h" 13*758e9fbaSOystein Eftevaag 14*758e9fbaSOystein Eftevaag /** Type of event 15*758e9fbaSOystein Eftevaag */ 16*758e9fbaSOystein Eftevaag typedef UINT32 IFAPI_EVENT_TYPE; 17*758e9fbaSOystein Eftevaag #define IFAPI_IMA_EVENT_TAG 1 /**< Tag for key resource */ 18*758e9fbaSOystein Eftevaag #define IFAPI_TSS_EVENT_TAG 2 /**< Tag for key resource */ 19*758e9fbaSOystein Eftevaag 20*758e9fbaSOystein Eftevaag /** TSS event information 21*758e9fbaSOystein Eftevaag */ 22*758e9fbaSOystein Eftevaag typedef struct { 23*758e9fbaSOystein Eftevaag TPM2B_EVENT data; /**< The event data */ 24*758e9fbaSOystein Eftevaag char *event; /**< TSS event information */ 25*758e9fbaSOystein Eftevaag } IFAPI_TSS_EVENT; 26*758e9fbaSOystein Eftevaag 27*758e9fbaSOystein Eftevaag /** IMA event information 28*758e9fbaSOystein Eftevaag */ 29*758e9fbaSOystein Eftevaag typedef struct { 30*758e9fbaSOystein Eftevaag TPM2B_DIGEST eventData; /**< The ima event digest */ 31*758e9fbaSOystein Eftevaag char *eventName; /**< IMA event information */ 32*758e9fbaSOystein Eftevaag } IFAPI_IMA_EVENT; 33*758e9fbaSOystein Eftevaag 34*758e9fbaSOystein Eftevaag /** Type for representing sub types of FAPI events 35*758e9fbaSOystein Eftevaag */ 36*758e9fbaSOystein Eftevaag typedef union { 37*758e9fbaSOystein Eftevaag IFAPI_TSS_EVENT tss_event; /**< TSS event information */ 38*758e9fbaSOystein Eftevaag IFAPI_IMA_EVENT ima_event; /**< IMA event information */ 39*758e9fbaSOystein Eftevaag } IFAPI_EVENT_UNION; 40*758e9fbaSOystein Eftevaag 41*758e9fbaSOystein Eftevaag /** Type for representing a FAPI event 42*758e9fbaSOystein Eftevaag */ 43*758e9fbaSOystein Eftevaag typedef struct IFAPI_EVENT { 44*758e9fbaSOystein Eftevaag UINT32 recnum; /**< Number of event */ 45*758e9fbaSOystein Eftevaag TPM2_HANDLE pcr; /**< PCR register */ 46*758e9fbaSOystein Eftevaag TPML_DIGEST_VALUES digests; /**< The digest list of the event */ 47*758e9fbaSOystein Eftevaag IFAPI_EVENT_TYPE type; /**< Selector for object type */ 48*758e9fbaSOystein Eftevaag IFAPI_EVENT_UNION sub_event; /**< Additional event information */ 49*758e9fbaSOystein Eftevaag } IFAPI_EVENT; 50*758e9fbaSOystein Eftevaag 51*758e9fbaSOystein Eftevaag enum IFAPI_EVENTLOG_STATE { 52*758e9fbaSOystein Eftevaag IFAPI_EVENTLOG_STATE_INIT = 0, 53*758e9fbaSOystein Eftevaag IFAPI_EVENTLOG_STATE_READING, 54*758e9fbaSOystein Eftevaag IFAPI_EVENTLOG_STATE_APPENDING, 55*758e9fbaSOystein Eftevaag IFAPI_EVENTLOG_STATE_WRITING 56*758e9fbaSOystein Eftevaag }; 57*758e9fbaSOystein Eftevaag 58*758e9fbaSOystein Eftevaag typedef struct IFAPI_EVENTLOG { 59*758e9fbaSOystein Eftevaag enum IFAPI_EVENTLOG_STATE state; 60*758e9fbaSOystein Eftevaag char *log_dir; 61*758e9fbaSOystein Eftevaag struct IFAPI_EVENT event; 62*758e9fbaSOystein Eftevaag TPM2_HANDLE pcrList[TPM2_MAX_PCRS]; 63*758e9fbaSOystein Eftevaag size_t pcrListSize; 64*758e9fbaSOystein Eftevaag size_t pcrListIdx; 65*758e9fbaSOystein Eftevaag json_object *log; 66*758e9fbaSOystein Eftevaag } IFAPI_EVENTLOG; 67*758e9fbaSOystein Eftevaag 68*758e9fbaSOystein Eftevaag TSS2_RC 69*758e9fbaSOystein Eftevaag ifapi_eventlog_initialize( 70*758e9fbaSOystein Eftevaag IFAPI_EVENTLOG *eventlog, 71*758e9fbaSOystein Eftevaag const char *log_dir); 72*758e9fbaSOystein Eftevaag 73*758e9fbaSOystein Eftevaag TSS2_RC 74*758e9fbaSOystein Eftevaag ifapi_eventlog_get_async( 75*758e9fbaSOystein Eftevaag IFAPI_EVENTLOG *eventlog, 76*758e9fbaSOystein Eftevaag IFAPI_IO *io, 77*758e9fbaSOystein Eftevaag const TPM2_HANDLE *pcrList, 78*758e9fbaSOystein Eftevaag size_t pcrListSize); 79*758e9fbaSOystein Eftevaag 80*758e9fbaSOystein Eftevaag TSS2_RC 81*758e9fbaSOystein Eftevaag ifapi_eventlog_get_finish( 82*758e9fbaSOystein Eftevaag IFAPI_EVENTLOG *eventlog, 83*758e9fbaSOystein Eftevaag IFAPI_IO *io, 84*758e9fbaSOystein Eftevaag char **log); 85*758e9fbaSOystein Eftevaag 86*758e9fbaSOystein Eftevaag TSS2_RC 87*758e9fbaSOystein Eftevaag ifapi_eventlog_append_async( 88*758e9fbaSOystein Eftevaag IFAPI_EVENTLOG *eventlog, 89*758e9fbaSOystein Eftevaag IFAPI_IO *io, 90*758e9fbaSOystein Eftevaag const IFAPI_EVENT *event); 91*758e9fbaSOystein Eftevaag 92*758e9fbaSOystein Eftevaag TSS2_RC 93*758e9fbaSOystein Eftevaag ifapi_eventlog_append_finish( 94*758e9fbaSOystein Eftevaag IFAPI_EVENTLOG *eventlog, 95*758e9fbaSOystein Eftevaag IFAPI_IO *io); 96*758e9fbaSOystein Eftevaag 97*758e9fbaSOystein Eftevaag void 98*758e9fbaSOystein Eftevaag ifapi_cleanup_event( 99*758e9fbaSOystein Eftevaag IFAPI_EVENT * event); 100*758e9fbaSOystein Eftevaag 101*758e9fbaSOystein Eftevaag #endif /* IFAPI_EVENTLOG_H */ 102