Skip to content

Commit 0074564

Browse files
Added libspdm_get_detailed_connection_version and checked it in set_certificate
1 parent 55f5141 commit 0074564

File tree

4 files changed

+30
-4
lines changed

4 files changed

+30
-4
lines changed

include/industry_standard/spdm.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ typedef struct {
9090
#define SPDM_MESSAGE_VERSION_11 0x11
9191
#define SPDM_MESSAGE_VERSION_12 0x12
9292
#define SPDM_MESSAGE_VERSION SPDM_MESSAGE_VERSION_10
93+
#define SPDM_MESSAGE_VERSION_121_WITH_SET_CERT_CAP 1
9394

9495
/* SPDM GET_VERSION request */
9596
typedef struct {
@@ -116,6 +117,7 @@ typedef struct {
116117
* bit[3:0] alpha*/
117118
typedef uint16_t spdm_version_number_t;
118119
#define SPDM_VERSION_NUMBER_SHIFT_BIT 8
120+
#define SPDM_VERSION_NUMBER_DETAILED_SHIFT_BIT 4
119121

120122
#define SPDM_VERSION_1_2_SIGNING_PREFIX_CONTEXT "dmtf-spdm-v1.2.*"
121123
#define SPDM_VERSION_1_2_SIGNING_PREFIX_CONTEXT_SIZE \

include/internal/libspdm_common_lib.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -785,6 +785,15 @@ bool libspdm_is_version_supported(const libspdm_context_t *spdm_context, uint8_t
785785
**/
786786
uint8_t libspdm_get_connection_version(const libspdm_context_t *spdm_context);
787787

788+
/**
789+
* This function returns update_version_number negotiated by GET_VERSION/VERSION.
790+
*
791+
* @param spdm_context A pointer to the SPDM context.
792+
*
793+
* @return the connection update_version_number.
794+
**/
795+
uint8_t libspdm_get_detailed_connection_version(const libspdm_context_t *spdm_context);
796+
788797
/**
789798
* This function returns if a capabilities flag is supported in current SPDM connection.
790799
*

library/spdm_common_lib/libspdm_com_context_data.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2025,6 +2025,18 @@ uint8_t libspdm_get_connection_version(const libspdm_context_t *spdm_context)
20252025
return (uint8_t)(spdm_context->connection_info.version >> SPDM_VERSION_NUMBER_SHIFT_BIT);
20262026
}
20272027

2028+
/**
2029+
* This function returns update_version_number negotiated by GET_VERSION/VERSION.
2030+
*
2031+
* @param spdm_context A pointer to the SPDM context.
2032+
*
2033+
* @return the connection update_version_number.
2034+
**/
2035+
uint8_t libspdm_get_detailed_connection_version(const libspdm_context_t *spdm_context)
2036+
{
2037+
return (uint8_t)((spdm_context->connection_info.version & 0xF0) >> SPDM_VERSION_NUMBER_DETAILED_SHIFT_BIT);
2038+
}
2039+
20282040
/**
20292041
* This function returns if a capabilities flag is supported in current SPDM connection.
20302042
*

library/spdm_requester_lib/libspdm_req_set_certificate.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,13 @@ static libspdm_return_t libspdm_try_set_certificate(libspdm_context_t *spdm_cont
4343
return LIBSPDM_STATUS_UNSUPPORTED_CAP;
4444
}
4545

46-
if (!libspdm_is_capabilities_flag_supported(
47-
spdm_context, true, 0,
48-
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_SET_CERT_CAP)) {
49-
return LIBSPDM_STATUS_UNSUPPORTED_CAP;
46+
if (libspdm_get_connection_version(spdm_context) == SPDM_MESSAGE_VERSION_12
47+
&& libspdm_get_detailed_connection_version(spdm_context) >= SPDM_MESSAGE_VERSION_121_WITH_SET_CERT_CAP) {
48+
if (!libspdm_is_capabilities_flag_supported(
49+
spdm_context, true, 0,
50+
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_SET_CERT_CAP)) {
51+
return LIBSPDM_STATUS_UNSUPPORTED_CAP;
52+
}
5053
}
5154

5255
LIBSPDM_ASSERT(slot_id < SPDM_MAX_SLOT_COUNT);

0 commit comments

Comments
 (0)