xref: /aosp_15_r20/external/tpm2-tss/src/tss2-fapi/ifapi_eventlog.h (revision 758e9fba6fc9adbf15340f70c73baee7b168b1c9)
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