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.h> // for json_object
10 #include <stdbool.h> // for bool
11 #include <stddef.h> // for size_t
12 
13 #include "ifapi_eventlog_system.h" // for IFAPI_FIRMWARE_EVENT
14 #include "ifapi_ima_eventlog.h" // for IFAPI_IMA_EVENT
15 #include "ifapi_io.h" // for IFAPI_IO
16 #include "tss2_common.h" // for TSS2_RC, UINT32, UINT16, UINT64
17 #include "tss2_tpm2_types.h" // for TPM2_HANDLE, TPM2B_EVENT, TPM2_MA...
18 
19 #define CONTENT_TYPE "content_type"
20 #define CONTENT "content"
21 
24 typedef UINT32 IFAPI_EVENT_TYPE;
25 #define IFAPI_TSS_EVENT_TAG 2
26 #define IFAPI_IMA_EVENT_TAG 3
27 #define IFAPI_IMA_NG_EVENT_TAG 4
28 #define IFAPI_IMA_SIG_EVENT_TAG 5
29 #define IFAPI_PC_CLIENT 6
30 #define IFAPI_CEL_TAG \
31  8
33 /* Definition of TPMI_CELMGTTYPE Type */
34 typedef UINT32 TPMI_CELMGTTYPE;
35 #define CEL_VERSION 1
36 #define FIRMWARE_END 2
37 #define CEL_TIMESTAMP 80
38 #define STATE_TRANS 81
39 
40 /* Structures of canonical event log format. */
41 
42 /* Definition of TPMS_CEL_VERSION Structure */
43 typedef struct {
44  UINT16 major; /* The major version */
45  UINT16 minor; /* The minor version */
47 
48 /* Definition of TPMU_CAPABILITIES Union <OUT> */
49 typedef union {
50  TPMS_CEL_VERSION cel_version;
51  TPMS_EMPTY firmware_end;
52  UINT64 cel_timestamp;
53 } TPMU_CELMGT;
54 
55 /* Definition of TPMS_EVENT_CELMGT Structure*/
56 typedef struct {
57  TPMI_CELMGTTYPE type; /* type of the cel event structure */
58  TPMU_CELMGT data; /* the type-specific cel event information */
60 
63 typedef struct {
64  TPM2B_EVENT data;
65  char *event;
67 
70 typedef union {
77 
80 typedef struct IFAPI_EVENT {
81  UINT32 recnum;
82  TPM2_HANDLE pcr;
83  TPML_DIGEST_VALUES digests;
84  IFAPI_EVENT_TYPE content_type;
86  bool verify;
88 } IFAPI_EVENT;
89 
92 typedef struct {
93  TPMT_SIG_SCHEME sig_scheme;
94  TPMS_ATTEST attest;
96 
97 enum IFAPI_EVENTLOG_STATE {
98  IFAPI_EVENTLOG_STATE_INIT = 0,
99  IFAPI_EVENTLOG_STATE_READING,
100  IFAPI_EVENTLOG_STATE_APPENDING,
101  IFAPI_EVENTLOG_STATE_WRITING
102 };
103 
104 typedef struct IFAPI_EVENTLOG {
105  enum IFAPI_EVENTLOG_STATE state;
106  char *log_dir;
107  const char *firmware_log_file;
108  const char *ima_log_file;
109  struct IFAPI_EVENT event;
110  TPM2_HANDLE pcrList[TPM2_MAX_PCRS];
111  size_t pcrListSize;
112  size_t pcrListIdx;
113  json_object *log;
115 
116 TSS2_RC
117 ifapi_eventlog_initialize(IFAPI_EVENTLOG *eventlog,
118  const char *log_dir,
119  const char *firmware_log_file,
120  const char *ima_log_file);
121 
122 TSS2_RC
124  IFAPI_IO *io,
125  const TPM2_HANDLE *pcrList,
126  size_t pcrListSize);
127 
128 TSS2_RC
129 ifapi_eventlog_get_finish(IFAPI_EVENTLOG *eventlog,
130  FAPI_QUOTE_INFO *fapi_quote_info,
131  IFAPI_IO *io,
132  char **log);
133 
134 TSS2_RC
136 
137 TSS2_RC
139 
140 void ifapi_cleanup_event(IFAPI_EVENT *event);
141 
142 #endif /* IFAPI_EVENTLOG_H */
TSS2_RC ifapi_eventlog_append_finish(IFAPI_EVENTLOG *eventlog, IFAPI_IO *io, const IFAPI_EVENT *event)
Definition: ifapi_eventlog.c:399
void ifapi_cleanup_event(IFAPI_EVENT *event)
Definition: ifapi_eventlog.c:481
TSS2_RC ifapi_eventlog_append_check(IFAPI_EVENTLOG *eventlog, IFAPI_IO *io)
Definition: ifapi_eventlog.c:330
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:92
TPMT_SIG_SCHEME sig_scheme
Definition: ifapi_eventlog.h:93
TPMS_ATTEST attest
Definition: ifapi_eventlog.h:94
Definition: ifapi_eventlog.h:80
TPML_DIGEST_VALUES digests
Definition: ifapi_eventlog.h:83
IFAPI_EVENT_TYPE content_type
Definition: ifapi_eventlog.h:84
UINT32 recnum
Definition: ifapi_eventlog.h:81
IFAPI_EVENT_UNION content
Definition: ifapi_eventlog.h:85
bool verify
Definition: ifapi_eventlog.h:86
TPM2_HANDLE pcr
Definition: ifapi_eventlog.h:82
Definition: ifapi_eventlog.h:104
Definition: ifapi_eventlog_system.h:41
Definition: ifapi_ima_eventlog.h:55
Definition: ifapi_io.h:17
Definition: ifapi_eventlog.h:63
TPM2B_EVENT data
Definition: ifapi_eventlog.h:64
char * event
Definition: ifapi_eventlog.h:65
Definition: ifapi_eventlog.h:43
Definition: ifapi_eventlog.h:56
Definition: ifapi_eventlog.h:70
IFAPI_IMA_EVENT ima_event
Definition: ifapi_eventlog.h:72
IFAPI_FIRMWARE_EVENT firmware_event
Definition: ifapi_eventlog.h:73
IFAPI_TSS_EVENT tss_event
Definition: ifapi_eventlog.h:71
TPMS_EVENT_CELMGT cel_event
Definition: ifapi_eventlog.h:74
Definition: ifapi_eventlog.h:49