]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Include/IndustryStandard/Spdm.h
MdeModulePkg: Apply uncrustify changes
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / Spdm.h
CommitLineData
05ca7ec3
JY
1/** @file\r
2 Definitions of Security Protocol & Data Model Specification (SPDM)\r
c7a0aca0 3 version 1.0.0 in Distributed Management Task Force (DMTF).\r
05ca7ec3
JY
4\r
5Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>\r
6SPDX-License-Identifier: BSD-2-Clause-Patent\r
7\r
8**/\r
9\r
10\r
11#ifndef __SPDM_H__\r
12#define __SPDM_H__\r
13\r
14#pragma pack(1)\r
15\r
16///\r
17/// SPDM response code\r
18///\r
19#define SPDM_DIGESTS 0x01\r
20#define SPDM_CERTIFICATE 0x02\r
21#define SPDM_CHALLENGE_AUTH 0x03\r
22#define SPDM_VERSION 0x04\r
23#define SPDM_MEASUREMENTS 0x60\r
24#define SPDM_CAPABILITIES 0x61\r
25#define SPDM_SET_CERT_RESPONSE 0x62\r
26#define SPDM_ALGORITHMS 0x63\r
27#define SPDM_ERROR 0x7F\r
28///\r
29/// SPDM request code\r
30///\r
31#define SPDM_GET_DIGESTS 0x81\r
32#define SPDM_GET_CERTIFICATE 0x82\r
33#define SPDM_CHALLENGE 0x83\r
34#define SPDM_GET_VERSION 0x84\r
35#define SPDM_GET_MEASUREMENTS 0xE0\r
36#define SPDM_GET_CAPABILITIES 0xE1\r
37#define SPDM_NEGOTIATE_ALGORITHMS 0xE3\r
38#define SPDM_RESPOND_IF_READY 0xFF\r
39\r
40///\r
41/// SPDM message header\r
42///\r
43typedef struct {\r
44 UINT8 SPDMVersion;\r
45 UINT8 RequestResponseCode;\r
46 UINT8 Param1;\r
47 UINT8 Param2;\r
48} SPDM_MESSAGE_HEADER;\r
49\r
50#define SPDM_MESSAGE_VERSION 0x10\r
51\r
52///\r
53/// SPDM GET_VERSION request\r
54///\r
55typedef struct {\r
56 SPDM_MESSAGE_HEADER Header;\r
57} SPDM_GET_VERSION_REQUEST;\r
58\r
59///\r
60/// SPDM GET_VERSION response\r
61///\r
62typedef struct {\r
63 SPDM_MESSAGE_HEADER Header;\r
64 UINT8 Reserved;\r
65 UINT8 VersionNumberEntryCount;\r
66//SPDM_VERSION_NUMBER VersionNumberEntry[VersionNumberEntryCount];\r
67} SPDM_VERSION_RESPONSE;\r
68\r
69///\r
70/// SPDM VERSION structure\r
71///\r
72typedef struct {\r
73 UINT16 Alpha:4;\r
74 UINT16 UpdateVersionNumber:4;\r
75 UINT16 MinorVersion:4;\r
76 UINT16 MajorVersion:4;\r
77} SPDM_VERSION_NUMBER;\r
78\r
79///\r
80/// SPDM GET_CAPABILITIES request\r
81///\r
82typedef struct {\r
83 SPDM_MESSAGE_HEADER Header;\r
84} SPDM_GET_CAPABILITIES_REQUEST;\r
85\r
86///\r
87/// SPDM GET_CAPABILITIES response\r
88///\r
89typedef struct {\r
90 SPDM_MESSAGE_HEADER Header;\r
91 UINT8 Reserved;\r
92 UINT8 CTExponent;\r
93 UINT16 Reserved2;\r
94 UINT32 Flags;\r
95} SPDM_CAPABILITIES_RESPONSE;\r
96\r
97///\r
98/// SPDM GET_CAPABILITIES response Flags\r
99///\r
100#define SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_CACHE_CAP BIT0\r
101#define SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_CERT_CAP BIT1\r
102#define SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_CHAL_CAP BIT2\r
103#define SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MEAS_CAP (BIT3 | BIT4)\r
104#define SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MEAS_CAP_NO_SIG BIT3\r
105#define SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MEAS_CAP_SIG BIT4\r
106#define SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MEAS_FRESH_CAP BIT5\r
107\r
108///\r
109/// SPDM NEGOTIATE_ALGORITHMS request\r
110///\r
111typedef struct {\r
112 SPDM_MESSAGE_HEADER Header;\r
113 UINT16 Length;\r
114 UINT8 MeasurementSpecification;\r
115 UINT8 Reserved;\r
116 UINT32 BaseAsymAlgo;\r
117 UINT32 BaseHashAlgo;\r
118 UINT8 Reserved2[12];\r
119 UINT8 ExtAsymCount;\r
120 UINT8 ExtHashCount;\r
121 UINT16 Reserved3;\r
122//UINT32 ExtAsym[ExtAsymCount];\r
123//UINT32 ExtHash[ExtHashCount];\r
124} SPDM_NEGOTIATE_ALGORITHMS_REQUEST;\r
125\r
126///\r
127/// SPDM NEGOTIATE_ALGORITHMS request BaseAsymAlgo\r
128///\r
129#define SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSASSA_2048 BIT0\r
130#define SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSAPSS_2048 BIT1\r
131#define SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSASSA_3072 BIT2\r
132#define SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSAPSS_3072 BIT3\r
133#define SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_ECDSA_ECC_NIST_P256 BIT4\r
134#define SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSASSA_4096 BIT5\r
135#define SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSAPSS_4096 BIT6\r
136#define SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_ECDSA_ECC_NIST_P384 BIT7\r
137#define SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_ECDSA_ECC_NIST_P521 BIT8\r
138\r
139///\r
140/// SPDM NEGOTIATE_ALGORITHMS request BaseHashAlgo\r
141///\r
142#define SPDM_ALGORITHMS_BASE_HASH_ALGO_TPM_ALG_SHA_256 BIT0\r
143#define SPDM_ALGORITHMS_BASE_HASH_ALGO_TPM_ALG_SHA_384 BIT1\r
144#define SPDM_ALGORITHMS_BASE_HASH_ALGO_TPM_ALG_SHA_512 BIT2\r
145#define SPDM_ALGORITHMS_BASE_HASH_ALGO_TPM_ALG_SHA3_256 BIT3\r
146#define SPDM_ALGORITHMS_BASE_HASH_ALGO_TPM_ALG_SHA3_384 BIT4\r
147#define SPDM_ALGORITHMS_BASE_HASH_ALGO_TPM_ALG_SHA3_512 BIT5\r
148\r
149///\r
150/// SPDM NEGOTIATE_ALGORITHMS response\r
151///\r
152typedef struct {\r
153 SPDM_MESSAGE_HEADER Header;\r
154 UINT16 Length;\r
155 UINT8 MeasurementSpecificationSel;\r
156 UINT8 Reserved;\r
157 UINT32 MeasurementHashAlgo;\r
158 UINT32 BaseAsymSel;\r
159 UINT32 BaseHashSel;\r
160 UINT8 Reserved2[12];\r
161 UINT8 ExtAsymSelCount;\r
162 UINT8 ExtHashSelCount;\r
163 UINT16 Reserved3;\r
164//UINT32 ExtAsymSel[ExtAsymSelCount];\r
165//UINT32 ExtHashSel[ExtHashSelCount];\r
166} SPDM_ALGORITHMS_RESPONSE;\r
167\r
168///\r
169/// SPDM NEGOTIATE_ALGORITHMS response MeasurementHashAlgo\r
170///\r
171#define SPDM_ALGORITHMS_MEASUREMENT_HASH_ALGO_RAW_BIT_STREAM_ONLY BIT0\r
172#define SPDM_ALGORITHMS_MEASUREMENT_HASH_ALGO_TPM_ALG_SHA_256 BIT1\r
173#define SPDM_ALGORITHMS_MEASUREMENT_HASH_ALGO_TPM_ALG_SHA_384 BIT2\r
174#define SPDM_ALGORITHMS_MEASUREMENT_HASH_ALGO_TPM_ALG_SHA_512 BIT3\r
175#define SPDM_ALGORITHMS_MEASUREMENT_HASH_ALGO_TPM_ALG_SHA3_256 BIT4\r
176#define SPDM_ALGORITHMS_MEASUREMENT_HASH_ALGO_TPM_ALG_SHA3_384 BIT5\r
177#define SPDM_ALGORITHMS_MEASUREMENT_HASH_ALGO_TPM_ALG_SHA3_512 BIT6\r
178\r
179///\r
180/// SPDM GET_DIGESTS request\r
181///\r
182typedef struct {\r
183 SPDM_MESSAGE_HEADER Header;\r
184} SPDM_GET_DIGESTS_REQUEST;\r
185\r
186///\r
187/// SPDM GET_DIGESTS response\r
188///\r
189typedef struct {\r
190 SPDM_MESSAGE_HEADER Header;\r
191//UINT8 Digest[DigestSize];\r
192} SPDM_DIGESTS_RESPONSE;\r
193\r
194///\r
195/// SPDM GET_DIGESTS request\r
196///\r
197typedef struct {\r
198 SPDM_MESSAGE_HEADER Header;\r
199 UINT16 Offset;\r
200 UINT16 Length;\r
201} SPDM_GET_CERTIFICATE_REQUEST;\r
202\r
203///\r
204/// SPDM GET_DIGESTS response\r
205///\r
206typedef struct {\r
207 SPDM_MESSAGE_HEADER Header;\r
208 UINT16 PortionLength;\r
209 UINT16 RemainderLength;\r
210//UINT8 CertChain[CertChainSize];\r
211} SPDM_CERTIFICATE_RESPONSE;\r
212\r
213///\r
214/// SPDM CHALLENGE request\r
215///\r
216typedef struct {\r
217 SPDM_MESSAGE_HEADER Header;\r
c7a0aca0 218 UINT8 Nonce[32];\r
05ca7ec3
JY
219} SPDM_CHALLENGE_REQUEST;\r
220\r
221///\r
222/// SPDM CHALLENGE response\r
223///\r
224typedef struct {\r
225 SPDM_MESSAGE_HEADER Header;\r
226//UINT8 CertChainHash[DigestSize];\r
c7a0aca0 227//UINT8 Nonce[32];\r
05ca7ec3
JY
228//UINT8 MeasurementSummaryHash[DigestSize];\r
229//UINT16 OpaqueLength;\r
230//UINT8 OpaqueData[OpaqueLength];\r
231//UINT8 Signature[KeySize];\r
232} SPDM_CHALLENGE_AUTH_RESPONSE;\r
233\r
234///\r
235/// SPDM GET_MEASUREMENTS request\r
236///\r
237typedef struct {\r
238 SPDM_MESSAGE_HEADER Header;\r
c7a0aca0 239 UINT8 Nonce[32];\r
05ca7ec3
JY
240} SPDM_GET_MEASUREMENTS_REQUEST;\r
241\r
242///\r
243/// SPDM MEASUREMENTS block common header\r
244///\r
245typedef struct {\r
246 UINT8 Index;\r
247 UINT8 MeasurementSpecification;\r
248 UINT16 MeasurementSize;\r
249//UINT8 Measurement[MeasurementSize];\r
250} SPDM_MEASUREMENT_BLOCK_COMMON_HEADER;\r
251\r
252#define SPDM_MEASUREMENT_BLOCK_HEADER_SPECIFICATION_DMTF BIT0\r
253\r
254///\r
255/// SPDM MEASUREMENTS block DMTF header\r
256///\r
257typedef struct {\r
258 UINT8 DMTFSpecMeasurementValueType;\r
259 UINT16 DMTFSpecMeasurementValueSize;\r
260//UINT8 DMTFSpecMeasurementValue[DMTFSpecMeasurementValueSize];\r
261} SPDM_MEASUREMENT_BLOCK_DMTF_HEADER;\r
262\r
263///\r
264/// SPDM MEASUREMENTS block MeasurementValueType\r
265///\r
266#define SPDM_MEASUREMENT_BLOCK_MEASUREMENT_TYPE_IMMUTABLE_ROM 0\r
267#define SPDM_MEASUREMENT_BLOCK_MEASUREMENT_TYPE_MUTABLE_FIRMWARE 1\r
268#define SPDM_MEASUREMENT_BLOCK_MEASUREMENT_TYPE_HARDWARE_CONFIGURATION 2\r
269#define SPDM_MEASUREMENT_BLOCK_MEASUREMENT_TYPE_FIRMWARE_CONFIGURATION 3\r
270#define SPDM_MEASUREMENT_BLOCK_MEASUREMENT_TYPE_RAW_BIT_STREAM BIT7\r
271\r
272///\r
273/// SPDM GET_MEASUREMENTS response\r
274///\r
275typedef struct {\r
276 SPDM_MESSAGE_HEADER Header;\r
277 UINT8 NumberOfBlocks;\r
278 UINT8 MeasurementRecordLength[3];\r
279//UINT8 MeasurementRecord[MeasurementRecordLength];\r
c7a0aca0 280//UINT8 Nonce[32];\r
05ca7ec3
JY
281//UINT16 OpaqueLength;\r
282//UINT8 OpaqueData[OpaqueLength];\r
283//UINT8 Signature[KeySize];\r
284} SPDM_MEASUREMENTS_RESPONSE;\r
285\r
286///\r
287/// SPDM ERROR response\r
288///\r
289typedef struct {\r
290 SPDM_MESSAGE_HEADER Header;\r
291 // Param1 == Error Code\r
292 // Param2 == Error Data\r
293//UINT8 ExtendedErrorData[];\r
294} SPDM_ERROR_RESPONSE;\r
295\r
296///\r
297/// SPDM error code\r
298///\r
299#define SPDM_ERROR_CODE_INVALID_REQUEST 0x01\r
300#define SPDM_ERROR_CODE_BUSY 0x03\r
301#define SPDM_ERROR_CODE_UNEXPECTED_REQUEST 0x04\r
302#define SPDM_ERROR_CODE_UNSPECIFIED 0x05\r
303#define SPDM_ERROR_CODE_UNSUPPORTED_REQUEST 0x07\r
304#define SPDM_ERROR_CODE_MAJOR_VERSION_MISMATCH 0x41\r
305#define SPDM_ERROR_CODE_RESPONSE_NOT_READY 0x42\r
306#define SPDM_ERROR_CODE_REQUEST_RESYNCH 0x43\r
307\r
308///\r
309/// SPDM RESPONSE_IF_READY request\r
310///\r
311typedef struct {\r
312 SPDM_MESSAGE_HEADER Header;\r
313 // Param1 == RequestCode\r
314 // Param2 == Token\r
315} SPDM_RESPONSE_IF_READY_REQUEST;\r
316\r
317#pragma pack()\r
318\r
319#endif\r
320\r