Skip to content

Commit b4f25c6

Browse files
committed
boot: move TCG/TPM protocol definitions into missing_efi.h
That's what it is for...
1 parent 2da0a7e commit b4f25c6

File tree

2 files changed

+172
-169
lines changed

2 files changed

+172
-169
lines changed

src/boot/efi/measure.c

Lines changed: 1 addition & 169 deletions
Original file line numberDiff line numberDiff line change
@@ -7,175 +7,7 @@
77

88
#include "macro-fundamental.h"
99
#include "measure.h"
10-
11-
#define EFI_TCG_GUID \
12-
&(const EFI_GUID) { 0xf541796d, 0xa62e, 0x4954, { 0xa7, 0x75, 0x95, 0x84, 0xf6, 0x1b, 0x9c, 0xdd } }
13-
14-
typedef struct _TCG_VERSION {
15-
UINT8 Major;
16-
UINT8 Minor;
17-
UINT8 RevMajor;
18-
UINT8 RevMinor;
19-
} TCG_VERSION;
20-
21-
typedef struct tdEFI_TCG2_VERSION {
22-
UINT8 Major;
23-
UINT8 Minor;
24-
} EFI_TCG2_VERSION;
25-
26-
typedef struct _TCG_BOOT_SERVICE_CAPABILITY {
27-
UINT8 Size;
28-
struct _TCG_VERSION StructureVersion;
29-
struct _TCG_VERSION ProtocolSpecVersion;
30-
UINT8 HashAlgorithmBitmap;
31-
BOOLEAN TPMPresentFlag;
32-
BOOLEAN TPMDeactivatedFlag;
33-
} TCG_BOOT_SERVICE_CAPABILITY;
34-
35-
typedef struct tdTREE_BOOT_SERVICE_CAPABILITY {
36-
UINT8 Size;
37-
EFI_TCG2_VERSION StructureVersion;
38-
EFI_TCG2_VERSION ProtocolVersion;
39-
UINT32 HashAlgorithmBitmap;
40-
UINT32 SupportedEventLogs;
41-
BOOLEAN TrEEPresentFlag;
42-
UINT16 MaxCommandSize;
43-
UINT16 MaxResponseSize;
44-
UINT32 ManufacturerID;
45-
} TREE_BOOT_SERVICE_CAPABILITY;
46-
47-
typedef UINT32 TCG_ALGORITHM_ID;
48-
#define TCG_ALG_SHA 0x00000004 // The SHA1 algorithm
49-
50-
#define SHA1_DIGEST_SIZE 20
51-
52-
typedef struct _TCG_DIGEST {
53-
UINT8 Digest[SHA1_DIGEST_SIZE];
54-
} TCG_DIGEST;
55-
56-
#define EV_IPL 13
57-
58-
typedef struct _TCG_PCR_EVENT {
59-
UINT32 PCRIndex;
60-
UINT32 EventType;
61-
struct _TCG_DIGEST digest;
62-
UINT32 EventSize;
63-
UINT8 Event[1];
64-
} TCG_PCR_EVENT;
65-
66-
INTERFACE_DECL(_EFI_TCG);
67-
68-
typedef EFI_STATUS(EFIAPI * EFI_TCG_STATUS_CHECK) (IN struct _EFI_TCG * This,
69-
OUT struct _TCG_BOOT_SERVICE_CAPABILITY * ProtocolCapability,
70-
OUT UINT32 * TCGFeatureFlags,
71-
OUT EFI_PHYSICAL_ADDRESS * EventLogLocation,
72-
OUT EFI_PHYSICAL_ADDRESS * EventLogLastEntry);
73-
74-
typedef EFI_STATUS(EFIAPI * EFI_TCG_HASH_ALL) (IN struct _EFI_TCG * This,
75-
IN UINT8 * HashData,
76-
IN UINT64 HashDataLen,
77-
IN TCG_ALGORITHM_ID AlgorithmId,
78-
IN OUT UINT64 * HashedDataLen, IN OUT UINT8 ** HashedDataResult);
79-
80-
typedef EFI_STATUS(EFIAPI * EFI_TCG_LOG_EVENT) (IN struct _EFI_TCG * This,
81-
IN struct _TCG_PCR_EVENT * TCGLogData,
82-
IN OUT UINT32 * EventNumber, IN UINT32 Flags);
83-
84-
typedef EFI_STATUS(EFIAPI * EFI_TCG_PASS_THROUGH_TO_TPM) (IN struct _EFI_TCG * This,
85-
IN UINT32 TpmInputParameterBlockSize,
86-
IN UINT8 * TpmInputParameterBlock,
87-
IN UINT32 TpmOutputParameterBlockSize,
88-
IN UINT8 * TpmOutputParameterBlock);
89-
90-
typedef EFI_STATUS(EFIAPI * EFI_TCG_HASH_LOG_EXTEND_EVENT) (IN struct _EFI_TCG * This,
91-
IN EFI_PHYSICAL_ADDRESS HashData,
92-
IN UINT64 HashDataLen,
93-
IN TCG_ALGORITHM_ID AlgorithmId,
94-
IN struct _TCG_PCR_EVENT * TCGLogData,
95-
IN OUT UINT32 * EventNumber,
96-
OUT EFI_PHYSICAL_ADDRESS * EventLogLastEntry);
97-
98-
typedef struct _EFI_TCG {
99-
EFI_TCG_STATUS_CHECK StatusCheck;
100-
EFI_TCG_HASH_ALL HashAll;
101-
EFI_TCG_LOG_EVENT LogEvent;
102-
EFI_TCG_PASS_THROUGH_TO_TPM PassThroughToTPM;
103-
EFI_TCG_HASH_LOG_EXTEND_EVENT HashLogExtendEvent;
104-
} EFI_TCG;
105-
106-
#define EFI_TCG2_GUID \
107-
&(const EFI_GUID) { 0x607f766c, 0x7455, 0x42be, { 0x93, 0x0b, 0xe4, 0xd7, 0x6d, 0xb2, 0x72, 0x0f } }
108-
109-
typedef struct tdEFI_TCG2_PROTOCOL EFI_TCG2_PROTOCOL;
110-
111-
typedef UINT32 EFI_TCG2_EVENT_LOG_BITMAP;
112-
typedef UINT32 EFI_TCG2_EVENT_LOG_FORMAT;
113-
typedef UINT32 EFI_TCG2_EVENT_ALGORITHM_BITMAP;
114-
115-
typedef struct tdEFI_TCG2_BOOT_SERVICE_CAPABILITY {
116-
UINT8 Size;
117-
EFI_TCG2_VERSION StructureVersion;
118-
EFI_TCG2_VERSION ProtocolVersion;
119-
EFI_TCG2_EVENT_ALGORITHM_BITMAP HashAlgorithmBitmap;
120-
EFI_TCG2_EVENT_LOG_BITMAP SupportedEventLogs;
121-
BOOLEAN TPMPresentFlag;
122-
UINT16 MaxCommandSize;
123-
UINT16 MaxResponseSize;
124-
UINT32 ManufacturerID;
125-
UINT32 NumberOfPCRBanks;
126-
EFI_TCG2_EVENT_ALGORITHM_BITMAP ActivePcrBanks;
127-
} EFI_TCG2_BOOT_SERVICE_CAPABILITY;
128-
129-
#define EFI_TCG2_EVENT_HEADER_VERSION 1
130-
131-
typedef struct {
132-
UINT32 HeaderSize;
133-
UINT16 HeaderVersion;
134-
UINT32 PCRIndex;
135-
UINT32 EventType;
136-
} _packed_ EFI_TCG2_EVENT_HEADER;
137-
138-
typedef struct tdEFI_TCG2_EVENT {
139-
UINT32 Size;
140-
EFI_TCG2_EVENT_HEADER Header;
141-
UINT8 Event[1];
142-
} _packed_ EFI_TCG2_EVENT;
143-
144-
typedef EFI_STATUS(EFIAPI * EFI_TCG2_GET_CAPABILITY) (IN EFI_TCG2_PROTOCOL * This,
145-
IN OUT EFI_TCG2_BOOT_SERVICE_CAPABILITY * ProtocolCapability);
146-
147-
typedef EFI_STATUS(EFIAPI * EFI_TCG2_GET_EVENT_LOG) (IN EFI_TCG2_PROTOCOL * This,
148-
IN EFI_TCG2_EVENT_LOG_FORMAT EventLogFormat,
149-
OUT EFI_PHYSICAL_ADDRESS * EventLogLocation,
150-
OUT EFI_PHYSICAL_ADDRESS * EventLogLastEntry,
151-
OUT BOOLEAN * EventLogTruncated);
152-
153-
typedef EFI_STATUS(EFIAPI * EFI_TCG2_HASH_LOG_EXTEND_EVENT) (IN EFI_TCG2_PROTOCOL * This,
154-
IN UINT64 Flags,
155-
IN EFI_PHYSICAL_ADDRESS DataToHash,
156-
IN UINT64 DataToHashLen, IN EFI_TCG2_EVENT * EfiTcgEvent);
157-
158-
typedef EFI_STATUS(EFIAPI * EFI_TCG2_SUBMIT_COMMAND) (IN EFI_TCG2_PROTOCOL * This,
159-
IN UINT32 InputParameterBlockSize,
160-
IN UINT8 * InputParameterBlock,
161-
IN UINT32 OutputParameterBlockSize, IN UINT8 * OutputParameterBlock);
162-
163-
typedef EFI_STATUS(EFIAPI * EFI_TCG2_GET_ACTIVE_PCR_BANKS) (IN EFI_TCG2_PROTOCOL * This, OUT UINT32 * ActivePcrBanks);
164-
165-
typedef EFI_STATUS(EFIAPI * EFI_TCG2_SET_ACTIVE_PCR_BANKS) (IN EFI_TCG2_PROTOCOL * This, IN UINT32 ActivePcrBanks);
166-
167-
typedef EFI_STATUS(EFIAPI * EFI_TCG2_GET_RESULT_OF_SET_ACTIVE_PCR_BANKS) (IN EFI_TCG2_PROTOCOL * This,
168-
OUT UINT32 * OperationPresent, OUT UINT32 * Response);
169-
170-
typedef struct tdEFI_TCG2_PROTOCOL {
171-
EFI_TCG2_GET_CAPABILITY GetCapability;
172-
EFI_TCG2_GET_EVENT_LOG GetEventLog;
173-
EFI_TCG2_HASH_LOG_EXTEND_EVENT HashLogExtendEvent;
174-
EFI_TCG2_SUBMIT_COMMAND SubmitCommand;
175-
EFI_TCG2_GET_ACTIVE_PCR_BANKS GetActivePcrBanks;
176-
EFI_TCG2_SET_ACTIVE_PCR_BANKS SetActivePcrBanks;
177-
EFI_TCG2_GET_RESULT_OF_SET_ACTIVE_PCR_BANKS GetResultOfSetActivePcrBanks;
178-
} EFI_TCG2;
10+
#include "missing_efi.h"
17911

18012
static EFI_STATUS tpm1_measure_to_pcr_and_event_log(const EFI_TCG *tcg, UINT32 pcrindex, const EFI_PHYSICAL_ADDRESS buffer,
18113
UINTN buffer_size, const CHAR16 *description) {

src/boot/efi/missing_efi.h

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
#include <efi.h>
55

6+
#include "macro-fundamental.h"
7+
68
#ifndef EFI_RNG_PROTOCOL_GUID
79

810
#define EFI_RNG_PROTOCOL_GUID \
@@ -159,4 +161,173 @@ struct _EFI_DT_FIXUP_PROTOCOL {
159161
EFI_DT_FIXUP Fixup;
160162
};
161163

164+
#define EFI_TCG_GUID \
165+
&(const EFI_GUID) { 0xf541796d, 0xa62e, 0x4954, { 0xa7, 0x75, 0x95, 0x84, 0xf6, 0x1b, 0x9c, 0xdd } }
166+
167+
typedef struct _TCG_VERSION {
168+
UINT8 Major;
169+
UINT8 Minor;
170+
UINT8 RevMajor;
171+
UINT8 RevMinor;
172+
} TCG_VERSION;
173+
174+
typedef struct tdEFI_TCG2_VERSION {
175+
UINT8 Major;
176+
UINT8 Minor;
177+
} EFI_TCG2_VERSION;
178+
179+
typedef struct _TCG_BOOT_SERVICE_CAPABILITY {
180+
UINT8 Size;
181+
struct _TCG_VERSION StructureVersion;
182+
struct _TCG_VERSION ProtocolSpecVersion;
183+
UINT8 HashAlgorithmBitmap;
184+
BOOLEAN TPMPresentFlag;
185+
BOOLEAN TPMDeactivatedFlag;
186+
} TCG_BOOT_SERVICE_CAPABILITY;
187+
188+
typedef struct tdTREE_BOOT_SERVICE_CAPABILITY {
189+
UINT8 Size;
190+
EFI_TCG2_VERSION StructureVersion;
191+
EFI_TCG2_VERSION ProtocolVersion;
192+
UINT32 HashAlgorithmBitmap;
193+
UINT32 SupportedEventLogs;
194+
BOOLEAN TrEEPresentFlag;
195+
UINT16 MaxCommandSize;
196+
UINT16 MaxResponseSize;
197+
UINT32 ManufacturerID;
198+
} TREE_BOOT_SERVICE_CAPABILITY;
199+
200+
typedef UINT32 TCG_ALGORITHM_ID;
201+
#define TCG_ALG_SHA 0x00000004 // The SHA1 algorithm
202+
203+
#define SHA1_DIGEST_SIZE 20
204+
205+
typedef struct _TCG_DIGEST {
206+
UINT8 Digest[SHA1_DIGEST_SIZE];
207+
} TCG_DIGEST;
208+
209+
#define EV_IPL 13
210+
211+
typedef struct _TCG_PCR_EVENT {
212+
UINT32 PCRIndex;
213+
UINT32 EventType;
214+
struct _TCG_DIGEST digest;
215+
UINT32 EventSize;
216+
UINT8 Event[1];
217+
} TCG_PCR_EVENT;
218+
219+
INTERFACE_DECL(_EFI_TCG);
220+
221+
typedef EFI_STATUS(EFIAPI * EFI_TCG_STATUS_CHECK) (IN struct _EFI_TCG * This,
222+
OUT struct _TCG_BOOT_SERVICE_CAPABILITY * ProtocolCapability,
223+
OUT UINT32 * TCGFeatureFlags,
224+
OUT EFI_PHYSICAL_ADDRESS * EventLogLocation,
225+
OUT EFI_PHYSICAL_ADDRESS * EventLogLastEntry);
226+
227+
typedef EFI_STATUS(EFIAPI * EFI_TCG_HASH_ALL) (IN struct _EFI_TCG * This,
228+
IN UINT8 * HashData,
229+
IN UINT64 HashDataLen,
230+
IN TCG_ALGORITHM_ID AlgorithmId,
231+
IN OUT UINT64 * HashedDataLen, IN OUT UINT8 ** HashedDataResult);
232+
233+
typedef EFI_STATUS(EFIAPI * EFI_TCG_LOG_EVENT) (IN struct _EFI_TCG * This,
234+
IN struct _TCG_PCR_EVENT * TCGLogData,
235+
IN OUT UINT32 * EventNumber, IN UINT32 Flags);
236+
237+
typedef EFI_STATUS(EFIAPI * EFI_TCG_PASS_THROUGH_TO_TPM) (IN struct _EFI_TCG * This,
238+
IN UINT32 TpmInputParameterBlockSize,
239+
IN UINT8 * TpmInputParameterBlock,
240+
IN UINT32 TpmOutputParameterBlockSize,
241+
IN UINT8 * TpmOutputParameterBlock);
242+
243+
typedef EFI_STATUS(EFIAPI * EFI_TCG_HASH_LOG_EXTEND_EVENT) (IN struct _EFI_TCG * This,
244+
IN EFI_PHYSICAL_ADDRESS HashData,
245+
IN UINT64 HashDataLen,
246+
IN TCG_ALGORITHM_ID AlgorithmId,
247+
IN struct _TCG_PCR_EVENT * TCGLogData,
248+
IN OUT UINT32 * EventNumber,
249+
OUT EFI_PHYSICAL_ADDRESS * EventLogLastEntry);
250+
251+
typedef struct _EFI_TCG {
252+
EFI_TCG_STATUS_CHECK StatusCheck;
253+
EFI_TCG_HASH_ALL HashAll;
254+
EFI_TCG_LOG_EVENT LogEvent;
255+
EFI_TCG_PASS_THROUGH_TO_TPM PassThroughToTPM;
256+
EFI_TCG_HASH_LOG_EXTEND_EVENT HashLogExtendEvent;
257+
} EFI_TCG;
258+
259+
#define EFI_TCG2_GUID \
260+
&(const EFI_GUID) { 0x607f766c, 0x7455, 0x42be, { 0x93, 0x0b, 0xe4, 0xd7, 0x6d, 0xb2, 0x72, 0x0f } }
261+
262+
typedef struct tdEFI_TCG2_PROTOCOL EFI_TCG2_PROTOCOL;
263+
264+
typedef UINT32 EFI_TCG2_EVENT_LOG_BITMAP;
265+
typedef UINT32 EFI_TCG2_EVENT_LOG_FORMAT;
266+
typedef UINT32 EFI_TCG2_EVENT_ALGORITHM_BITMAP;
267+
268+
typedef struct tdEFI_TCG2_BOOT_SERVICE_CAPABILITY {
269+
UINT8 Size;
270+
EFI_TCG2_VERSION StructureVersion;
271+
EFI_TCG2_VERSION ProtocolVersion;
272+
EFI_TCG2_EVENT_ALGORITHM_BITMAP HashAlgorithmBitmap;
273+
EFI_TCG2_EVENT_LOG_BITMAP SupportedEventLogs;
274+
BOOLEAN TPMPresentFlag;
275+
UINT16 MaxCommandSize;
276+
UINT16 MaxResponseSize;
277+
UINT32 ManufacturerID;
278+
UINT32 NumberOfPCRBanks;
279+
EFI_TCG2_EVENT_ALGORITHM_BITMAP ActivePcrBanks;
280+
} EFI_TCG2_BOOT_SERVICE_CAPABILITY;
281+
282+
#define EFI_TCG2_EVENT_HEADER_VERSION 1
283+
284+
typedef struct {
285+
UINT32 HeaderSize;
286+
UINT16 HeaderVersion;
287+
UINT32 PCRIndex;
288+
UINT32 EventType;
289+
} _packed_ EFI_TCG2_EVENT_HEADER;
290+
291+
typedef struct tdEFI_TCG2_EVENT {
292+
UINT32 Size;
293+
EFI_TCG2_EVENT_HEADER Header;
294+
UINT8 Event[1];
295+
} _packed_ EFI_TCG2_EVENT;
296+
297+
typedef EFI_STATUS(EFIAPI * EFI_TCG2_GET_CAPABILITY) (IN EFI_TCG2_PROTOCOL * This,
298+
IN OUT EFI_TCG2_BOOT_SERVICE_CAPABILITY * ProtocolCapability);
299+
300+
typedef EFI_STATUS(EFIAPI * EFI_TCG2_GET_EVENT_LOG) (IN EFI_TCG2_PROTOCOL * This,
301+
IN EFI_TCG2_EVENT_LOG_FORMAT EventLogFormat,
302+
OUT EFI_PHYSICAL_ADDRESS * EventLogLocation,
303+
OUT EFI_PHYSICAL_ADDRESS * EventLogLastEntry,
304+
OUT BOOLEAN * EventLogTruncated);
305+
306+
typedef EFI_STATUS(EFIAPI * EFI_TCG2_HASH_LOG_EXTEND_EVENT) (IN EFI_TCG2_PROTOCOL * This,
307+
IN UINT64 Flags,
308+
IN EFI_PHYSICAL_ADDRESS DataToHash,
309+
IN UINT64 DataToHashLen, IN EFI_TCG2_EVENT * EfiTcgEvent);
310+
311+
typedef EFI_STATUS(EFIAPI * EFI_TCG2_SUBMIT_COMMAND) (IN EFI_TCG2_PROTOCOL * This,
312+
IN UINT32 InputParameterBlockSize,
313+
IN UINT8 * InputParameterBlock,
314+
IN UINT32 OutputParameterBlockSize, IN UINT8 * OutputParameterBlock);
315+
316+
typedef EFI_STATUS(EFIAPI * EFI_TCG2_GET_ACTIVE_PCR_BANKS) (IN EFI_TCG2_PROTOCOL * This, OUT UINT32 * ActivePcrBanks);
317+
318+
typedef EFI_STATUS(EFIAPI * EFI_TCG2_SET_ACTIVE_PCR_BANKS) (IN EFI_TCG2_PROTOCOL * This, IN UINT32 ActivePcrBanks);
319+
320+
typedef EFI_STATUS(EFIAPI * EFI_TCG2_GET_RESULT_OF_SET_ACTIVE_PCR_BANKS) (IN EFI_TCG2_PROTOCOL * This,
321+
OUT UINT32 * OperationPresent, OUT UINT32 * Response);
322+
323+
typedef struct tdEFI_TCG2_PROTOCOL {
324+
EFI_TCG2_GET_CAPABILITY GetCapability;
325+
EFI_TCG2_GET_EVENT_LOG GetEventLog;
326+
EFI_TCG2_HASH_LOG_EXTEND_EVENT HashLogExtendEvent;
327+
EFI_TCG2_SUBMIT_COMMAND SubmitCommand;
328+
EFI_TCG2_GET_ACTIVE_PCR_BANKS GetActivePcrBanks;
329+
EFI_TCG2_SET_ACTIVE_PCR_BANKS SetActivePcrBanks;
330+
EFI_TCG2_GET_RESULT_OF_SET_ACTIVE_PCR_BANKS GetResultOfSetActivePcrBanks;
331+
} EFI_TCG2;
332+
162333
#endif

0 commit comments

Comments
 (0)