]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdePkg/Include: Add DMTF SPDM definition.
authorJiewen Yao <jiewen.yao@intel.com>
Sun, 29 Sep 2019 08:22:38 +0000 (16:22 +0800)
committerJiewen Yao <jiewen.yao@intel.com>
Mon, 11 Nov 2019 11:04:04 +0000 (19:04 +0800)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2303

Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Yun Lou <yun.lou@intel.com>
Signed-off-by: Jiewen Yao <jiewen.yao@intel.com>
Reviewed by: Liming Gao <liming.gao@intel.com>
Reviewed by: Ray Ni <ray.ni@intel.com>

MdePkg/Include/IndustryStandard/Spdm.h [new file with mode: 0644]

diff --git a/MdePkg/Include/IndustryStandard/Spdm.h b/MdePkg/Include/IndustryStandard/Spdm.h
new file mode 100644 (file)
index 0000000..c05395f
--- /dev/null
@@ -0,0 +1,320 @@
+/** @file\r
+  Definitions of Security Protocol & Data Model Specification (SPDM)\r
+  version 0.99a in Distributed Management Task Force (DMTF).\r
+\r
+Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+\r
+#ifndef __SPDM_H__\r
+#define __SPDM_H__\r
+\r
+#pragma pack(1)\r
+\r
+///\r
+/// SPDM response code\r
+///\r
+#define SPDM_DIGESTS               0x01\r
+#define SPDM_CERTIFICATE           0x02\r
+#define SPDM_CHALLENGE_AUTH        0x03\r
+#define SPDM_VERSION               0x04\r
+#define SPDM_MEASUREMENTS          0x60\r
+#define SPDM_CAPABILITIES          0x61\r
+#define SPDM_SET_CERT_RESPONSE     0x62\r
+#define SPDM_ALGORITHMS            0x63\r
+#define SPDM_ERROR                 0x7F\r
+///\r
+/// SPDM request code\r
+///\r
+#define SPDM_GET_DIGESTS           0x81\r
+#define SPDM_GET_CERTIFICATE       0x82\r
+#define SPDM_CHALLENGE             0x83\r
+#define SPDM_GET_VERSION           0x84\r
+#define SPDM_GET_MEASUREMENTS      0xE0\r
+#define SPDM_GET_CAPABILITIES      0xE1\r
+#define SPDM_NEGOTIATE_ALGORITHMS  0xE3\r
+#define SPDM_RESPOND_IF_READY      0xFF\r
+\r
+///\r
+/// SPDM message header\r
+///\r
+typedef struct {\r
+  UINT8   SPDMVersion;\r
+  UINT8   RequestResponseCode;\r
+  UINT8   Param1;\r
+  UINT8   Param2;\r
+} SPDM_MESSAGE_HEADER;\r
+\r
+#define SPDM_MESSAGE_VERSION  0x10\r
+\r
+///\r
+/// SPDM GET_VERSION request\r
+///\r
+typedef struct {\r
+  SPDM_MESSAGE_HEADER  Header;\r
+} SPDM_GET_VERSION_REQUEST;\r
+\r
+///\r
+/// SPDM GET_VERSION response\r
+///\r
+typedef struct {\r
+  SPDM_MESSAGE_HEADER  Header;\r
+  UINT8                Reserved;\r
+  UINT8                VersionNumberEntryCount;\r
+//SPDM_VERSION_NUMBER  VersionNumberEntry[VersionNumberEntryCount];\r
+} SPDM_VERSION_RESPONSE;\r
+\r
+///\r
+/// SPDM VERSION structure\r
+///\r
+typedef struct {\r
+  UINT16               Alpha:4;\r
+  UINT16               UpdateVersionNumber:4;\r
+  UINT16               MinorVersion:4;\r
+  UINT16               MajorVersion:4;\r
+} SPDM_VERSION_NUMBER;\r
+\r
+///\r
+/// SPDM GET_CAPABILITIES request\r
+///\r
+typedef struct {\r
+  SPDM_MESSAGE_HEADER  Header;\r
+} SPDM_GET_CAPABILITIES_REQUEST;\r
+\r
+///\r
+/// SPDM GET_CAPABILITIES response\r
+///\r
+typedef struct {\r
+  SPDM_MESSAGE_HEADER  Header;\r
+  UINT8                Reserved;\r
+  UINT8                CTExponent;\r
+  UINT16               Reserved2;\r
+  UINT32               Flags;\r
+} SPDM_CAPABILITIES_RESPONSE;\r
+\r
+///\r
+/// SPDM GET_CAPABILITIES response Flags\r
+///\r
+#define SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_CACHE_CAP       BIT0\r
+#define SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_CERT_CAP        BIT1\r
+#define SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_CHAL_CAP        BIT2\r
+#define SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MEAS_CAP        (BIT3 | BIT4)\r
+#define SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MEAS_CAP_NO_SIG   BIT3\r
+#define SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MEAS_CAP_SIG      BIT4\r
+#define SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MEAS_FRESH_CAP  BIT5\r
+\r
+///\r
+/// SPDM NEGOTIATE_ALGORITHMS request\r
+///\r
+typedef struct {\r
+  SPDM_MESSAGE_HEADER  Header;\r
+  UINT16               Length;\r
+  UINT8                MeasurementSpecification;\r
+  UINT8                Reserved;\r
+  UINT32               BaseAsymAlgo;\r
+  UINT32               BaseHashAlgo;\r
+  UINT8                Reserved2[12];\r
+  UINT8                ExtAsymCount;\r
+  UINT8                ExtHashCount;\r
+  UINT16               Reserved3;\r
+//UINT32               ExtAsym[ExtAsymCount];\r
+//UINT32               ExtHash[ExtHashCount];\r
+} SPDM_NEGOTIATE_ALGORITHMS_REQUEST;\r
+\r
+///\r
+/// SPDM NEGOTIATE_ALGORITHMS request BaseAsymAlgo\r
+///\r
+#define SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSASSA_2048           BIT0\r
+#define SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSAPSS_2048           BIT1\r
+#define SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSASSA_3072           BIT2\r
+#define SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSAPSS_3072           BIT3\r
+#define SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_ECDSA_ECC_NIST_P256   BIT4\r
+#define SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSASSA_4096           BIT5\r
+#define SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSAPSS_4096           BIT6\r
+#define SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_ECDSA_ECC_NIST_P384   BIT7\r
+#define SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_ECDSA_ECC_NIST_P521   BIT8\r
+\r
+///\r
+/// SPDM NEGOTIATE_ALGORITHMS request BaseHashAlgo\r
+///\r
+#define SPDM_ALGORITHMS_BASE_HASH_ALGO_TPM_ALG_SHA_256               BIT0\r
+#define SPDM_ALGORITHMS_BASE_HASH_ALGO_TPM_ALG_SHA_384               BIT1\r
+#define SPDM_ALGORITHMS_BASE_HASH_ALGO_TPM_ALG_SHA_512               BIT2\r
+#define SPDM_ALGORITHMS_BASE_HASH_ALGO_TPM_ALG_SHA3_256              BIT3\r
+#define SPDM_ALGORITHMS_BASE_HASH_ALGO_TPM_ALG_SHA3_384              BIT4\r
+#define SPDM_ALGORITHMS_BASE_HASH_ALGO_TPM_ALG_SHA3_512              BIT5\r
+\r
+///\r
+/// SPDM NEGOTIATE_ALGORITHMS response\r
+///\r
+typedef struct {\r
+  SPDM_MESSAGE_HEADER  Header;\r
+  UINT16               Length;\r
+  UINT8                MeasurementSpecificationSel;\r
+  UINT8                Reserved;\r
+  UINT32               MeasurementHashAlgo;\r
+  UINT32               BaseAsymSel;\r
+  UINT32               BaseHashSel;\r
+  UINT8                Reserved2[12];\r
+  UINT8                ExtAsymSelCount;\r
+  UINT8                ExtHashSelCount;\r
+  UINT16               Reserved3;\r
+//UINT32               ExtAsymSel[ExtAsymSelCount];\r
+//UINT32               ExtHashSel[ExtHashSelCount];\r
+} SPDM_ALGORITHMS_RESPONSE;\r
+\r
+///\r
+/// SPDM NEGOTIATE_ALGORITHMS response MeasurementHashAlgo\r
+///\r
+#define SPDM_ALGORITHMS_MEASUREMENT_HASH_ALGO_RAW_BIT_STREAM_ONLY BIT0\r
+#define SPDM_ALGORITHMS_MEASUREMENT_HASH_ALGO_TPM_ALG_SHA_256     BIT1\r
+#define SPDM_ALGORITHMS_MEASUREMENT_HASH_ALGO_TPM_ALG_SHA_384     BIT2\r
+#define SPDM_ALGORITHMS_MEASUREMENT_HASH_ALGO_TPM_ALG_SHA_512     BIT3\r
+#define SPDM_ALGORITHMS_MEASUREMENT_HASH_ALGO_TPM_ALG_SHA3_256    BIT4\r
+#define SPDM_ALGORITHMS_MEASUREMENT_HASH_ALGO_TPM_ALG_SHA3_384    BIT5\r
+#define SPDM_ALGORITHMS_MEASUREMENT_HASH_ALGO_TPM_ALG_SHA3_512    BIT6\r
+\r
+///\r
+/// SPDM GET_DIGESTS request\r
+///\r
+typedef struct {\r
+  SPDM_MESSAGE_HEADER  Header;\r
+} SPDM_GET_DIGESTS_REQUEST;\r
+\r
+///\r
+/// SPDM GET_DIGESTS response\r
+///\r
+typedef struct {\r
+  SPDM_MESSAGE_HEADER  Header;\r
+//UINT8                Digest[DigestSize];\r
+} SPDM_DIGESTS_RESPONSE;\r
+\r
+///\r
+/// SPDM GET_DIGESTS request\r
+///\r
+typedef struct {\r
+  SPDM_MESSAGE_HEADER  Header;\r
+  UINT16               Offset;\r
+  UINT16               Length;\r
+} SPDM_GET_CERTIFICATE_REQUEST;\r
+\r
+///\r
+/// SPDM GET_DIGESTS response\r
+///\r
+typedef struct {\r
+  SPDM_MESSAGE_HEADER  Header;\r
+  UINT16               PortionLength;\r
+  UINT16               RemainderLength;\r
+//UINT8                CertChain[CertChainSize];\r
+} SPDM_CERTIFICATE_RESPONSE;\r
+\r
+///\r
+/// SPDM CHALLENGE request\r
+///\r
+typedef struct {\r
+  SPDM_MESSAGE_HEADER  Header;\r
+  UINT32               Nonce;\r
+} SPDM_CHALLENGE_REQUEST;\r
+\r
+///\r
+/// SPDM CHALLENGE response\r
+///\r
+typedef struct {\r
+  SPDM_MESSAGE_HEADER  Header;\r
+//UINT8                CertChainHash[DigestSize];\r
+//UINT32               Nonce;\r
+//UINT8                MeasurementSummaryHash[DigestSize];\r
+//UINT16               OpaqueLength;\r
+//UINT8                OpaqueData[OpaqueLength];\r
+//UINT8                Signature[KeySize];\r
+} SPDM_CHALLENGE_AUTH_RESPONSE;\r
+\r
+///\r
+/// SPDM GET_MEASUREMENTS request\r
+///\r
+typedef struct {\r
+  SPDM_MESSAGE_HEADER  Header;\r
+  UINT32               Nonce;\r
+} SPDM_GET_MEASUREMENTS_REQUEST;\r
+\r
+///\r
+/// SPDM MEASUREMENTS block common header\r
+///\r
+typedef struct {\r
+  UINT8                Index;\r
+  UINT8                MeasurementSpecification;\r
+  UINT16               MeasurementSize;\r
+//UINT8                Measurement[MeasurementSize];\r
+} SPDM_MEASUREMENT_BLOCK_COMMON_HEADER;\r
+\r
+#define SPDM_MEASUREMENT_BLOCK_HEADER_SPECIFICATION_DMTF BIT0\r
+\r
+///\r
+/// SPDM MEASUREMENTS block DMTF header\r
+///\r
+typedef struct {\r
+  UINT8                DMTFSpecMeasurementValueType;\r
+  UINT16               DMTFSpecMeasurementValueSize;\r
+//UINT8                DMTFSpecMeasurementValue[DMTFSpecMeasurementValueSize];\r
+} SPDM_MEASUREMENT_BLOCK_DMTF_HEADER;\r
+\r
+///\r
+/// SPDM MEASUREMENTS block MeasurementValueType\r
+///\r
+#define SPDM_MEASUREMENT_BLOCK_MEASUREMENT_TYPE_IMMUTABLE_ROM           0\r
+#define SPDM_MEASUREMENT_BLOCK_MEASUREMENT_TYPE_MUTABLE_FIRMWARE        1\r
+#define SPDM_MEASUREMENT_BLOCK_MEASUREMENT_TYPE_HARDWARE_CONFIGURATION  2\r
+#define SPDM_MEASUREMENT_BLOCK_MEASUREMENT_TYPE_FIRMWARE_CONFIGURATION  3\r
+#define SPDM_MEASUREMENT_BLOCK_MEASUREMENT_TYPE_RAW_BIT_STREAM          BIT7\r
+\r
+///\r
+/// SPDM GET_MEASUREMENTS response\r
+///\r
+typedef struct {\r
+  SPDM_MESSAGE_HEADER  Header;\r
+  UINT8                NumberOfBlocks;\r
+  UINT8                MeasurementRecordLength[3];\r
+//UINT8                MeasurementRecord[MeasurementRecordLength];\r
+//UINT32               Nonce;\r
+//UINT16               OpaqueLength;\r
+//UINT8                OpaqueData[OpaqueLength];\r
+//UINT8                Signature[KeySize];\r
+} SPDM_MEASUREMENTS_RESPONSE;\r
+\r
+///\r
+/// SPDM ERROR response\r
+///\r
+typedef struct {\r
+  SPDM_MESSAGE_HEADER  Header;\r
+  // Param1 == Error Code\r
+  // Param2 == Error Data\r
+//UINT8                ExtendedErrorData[];\r
+} SPDM_ERROR_RESPONSE;\r
+\r
+///\r
+/// SPDM error code\r
+///\r
+#define SPDM_ERROR_CODE_INVALID_REQUEST         0x01\r
+#define SPDM_ERROR_CODE_BUSY                    0x03\r
+#define SPDM_ERROR_CODE_UNEXPECTED_REQUEST      0x04\r
+#define SPDM_ERROR_CODE_UNSPECIFIED             0x05\r
+#define SPDM_ERROR_CODE_UNSUPPORTED_REQUEST     0x07\r
+#define SPDM_ERROR_CODE_MAJOR_VERSION_MISMATCH  0x41\r
+#define SPDM_ERROR_CODE_RESPONSE_NOT_READY      0x42\r
+#define SPDM_ERROR_CODE_REQUEST_RESYNCH         0x43\r
+\r
+///\r
+/// SPDM RESPONSE_IF_READY request\r
+///\r
+typedef struct {\r
+  SPDM_MESSAGE_HEADER  Header;\r
+  // Param1 == RequestCode\r
+  // Param2 == Token\r
+} SPDM_RESPONSE_IF_READY_REQUEST;\r
+\r
+#pragma pack()\r
+\r
+#endif\r
+\r