tpm2-tss  master
TPM Software stack 2.0 TCG spec compliant implementation
ifapi_eventlog.h
1 /* SPDX-License-Identifier: BSD-2-Clause */
2 /*******************************************************************************
3  * Copyright 2018-2019, Fraunhofer SIT sponsored by Infineon Technologies AG
4  * All rights reserved.
5  *******************************************************************************/
6 #ifndef IFAPI_EVENTLOG_H
7 #define IFAPI_EVENTLOG_H
8 
9 #include <json-c/json.h>
10 
11 #include "tss2_tpm2_types.h"
12 #include "ifapi_io.h"
13 #include "efi_event.h"
14 #include "ifapi_ima_eventlog.h"
15 #include "ifapi_eventlog_system.h"
16 
17 #define CONTENT_TYPE "content_type"
18 #define CONTENT "content"
19 
22 typedef UINT32 IFAPI_EVENT_TYPE;
23 #define IFAPI_TSS_EVENT_TAG 2
24 #define IFAPI_IMA_EVENT_TAG 3
25 #define IFAPI_IMA_NG_EVENT_TAG 4
26 #define IFAPI_IMA_SIG_EVENT_TAG 5
27 #define IFAPI_PC_CLIENT 6
28 #define IFAPI_CEL_TAG 8
30 /* Definition of TPMI_CELMGTTYPE Type */
31 typedef UINT32 TPMI_CELMGTTYPE;
32 #define CEL_VERSION 1
33 #define FIRMWARE_END 2
34 #define CEL_TIMESTAMP 80
35 #define STATE_TRANS 81
36 
37 /* Structures of canonical event log format. */
38 
39 /* Definition of TPMS_CEL_VERSION Structure */
40 typedef struct {
41  UINT16 major; /* The major version */
42  UINT16 minor; /* The minor version */
44 
45 /* Definition of TPMU_CAPABILITIES Union <OUT> */
46 typedef union {
47  TPMS_CEL_VERSION cel_version;
48  TPMS_EMPTY firmware_end;
49  UINT64 cel_timestamp;
50 } TPMU_CELMGT;
51 
52 /* Definition of TPMS_EVENT_CELMGT Structure*/
53 typedef struct {
54  TPMI_CELMGTTYPE type; /* type of the cel event structure */
55  TPMU_CELMGT data; /* the type-specific cel event information */
57 
60 typedef struct {
61  TPM2B_EVENT data;
62  char *event;
64 
67 typedef union {
74 
77 typedef struct IFAPI_EVENT {
78  UINT32 recnum;
79  TPM2_HANDLE pcr;
80  TPML_DIGEST_VALUES digests;
81  IFAPI_EVENT_TYPE content_type;
83  bool verify;
85 } IFAPI_EVENT;
86 
89 typedef struct {
90  TPMT_SIG_SCHEME sig_scheme;
91  TPMS_ATTEST attest;
93 
94 enum IFAPI_EVENTLOG_STATE {
95  IFAPI_EVENTLOG_STATE_INIT = 0,
96  IFAPI_EVENTLOG_STATE_READING,
97  IFAPI_EVENTLOG_STATE_APPENDING,
98  IFAPI_EVENTLOG_STATE_WRITING
99 };
100 
101 typedef struct IFAPI_EVENTLOG {
102  enum IFAPI_EVENTLOG_STATE state;
103  char *log_dir;
104  const char *firmware_log_file;
105  const char *ima_log_file;
106  struct IFAPI_EVENT event;
107  TPM2_HANDLE pcrList[TPM2_MAX_PCRS];
108  size_t pcrListSize;
109  size_t pcrListIdx;
110  json_object *log;
112 
113 TSS2_RC
114 ifapi_eventlog_initialize(
115  IFAPI_EVENTLOG *eventlog,
116  const char *log_dir,
117  const char *firmware_log_file,
118  const char *ima_log_file);
119 
120 TSS2_RC
122  IFAPI_EVENTLOG *eventlog,
123  IFAPI_IO *io,
124  const TPM2_HANDLE *pcrList,
125  size_t pcrListSize);
126 
127 TSS2_RC
128 ifapi_eventlog_get_finish(
129  IFAPI_EVENTLOG *eventlog,
130  FAPI_QUOTE_INFO *fapi_quote_info,
131  IFAPI_IO *io,
132  char **log);
133 
134 TSS2_RC
136  IFAPI_EVENTLOG *eventlog,
137  IFAPI_IO *io);
138 
139 TSS2_RC
141  IFAPI_EVENTLOG *eventlog,
142  IFAPI_IO *io,
143  const IFAPI_EVENT *event);
144 
145 void
147  IFAPI_EVENT * event);
148 
149 #endif /* IFAPI_EVENTLOG_H */
TSS2_RC ifapi_eventlog_append_finish(IFAPI_EVENTLOG *eventlog, IFAPI_IO *io, const IFAPI_EVENT *event)
Definition: ifapi_eventlog.c:414
void ifapi_cleanup_event(IFAPI_EVENT *event)
Definition: ifapi_eventlog.c:502
TSS2_RC ifapi_eventlog_append_check(IFAPI_EVENTLOG *eventlog, IFAPI_IO *io)
Definition: ifapi_eventlog.c:342
TSS2_RC ifapi_eventlog_get_async(IFAPI_EVENTLOG *eventlog, IFAPI_IO *io, const TPM2_HANDLE *pcrList, size_t pcrListSize)
Definition: ifapi_eventlog.c:78
Definition: ifapi_eventlog.h:89
TPMT_SIG_SCHEME sig_scheme
Definition: ifapi_eventlog.h:90
TPMS_ATTEST attest
Definition: ifapi_eventlog.h:91
Definition: ifapi_eventlog.h:77
TPML_DIGEST_VALUES digests
Definition: ifapi_eventlog.h:80
IFAPI_EVENT_TYPE content_type
Definition: ifapi_eventlog.h:81
UINT32 recnum
Definition: ifapi_eventlog.h:78
IFAPI_EVENT_UNION content
Definition: ifapi_eventlog.h:82
bool verify
Definition: ifapi_eventlog.h:83
TPM2_HANDLE pcr
Definition: ifapi_eventlog.h:79
Definition: ifapi_eventlog.h:101
Definition: ifapi_eventlog_system.h:41
Definition: ifapi_ima_eventlog.h:50
Definition: ifapi_io.h:15
Definition: ifapi_eventlog.h:60
TPM2B_EVENT data
Definition: ifapi_eventlog.h:61
char * event
Definition: ifapi_eventlog.h:62
Definition: ifapi_eventlog.h:40
Definition: ifapi_eventlog.h:53
Definition: ifapi_eventlog.h:67
IFAPI_IMA_EVENT ima_event
Definition: ifapi_eventlog.h:69
IFAPI_FIRMWARE_EVENT firmware_event
Definition: ifapi_eventlog.h:70
IFAPI_TSS_EVENT tss_event
Definition: ifapi_eventlog.h:68
TPMS_EVENT_CELMGT cel_event
Definition: ifapi_eventlog.h:71
Definition: ifapi_eventlog.h:46