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