Skip to content

Commit a157d77

Browse files
committed
Add SPDM 1.3 feature GET_ENDPOINT_INFO
Fix the issue: #2294 ENDPOINT_INFO is SPDM spec 1.3 new feature. Add ENDPOINT_INFO for Libspdm. Signed-off-by: Aaron Li <[email protected]>
1 parent 5271753 commit a157d77

29 files changed

+7093
-10
lines changed

.github/workflows/build.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ jobs:
4747
- CLANG
4848
- ARM_GNU
4949
configurations:
50-
- "-DLIBSPDM_ENABLE_CAPABILITY_CERT_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_CHAL_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_MEAS_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_KEY_EX_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_PSK_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_SET_CERT_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_CHUNK_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_MUT_AUTH_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_ENCAP_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_CSR_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_HBEAT_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_EVENT_CAP=1 -DLIBSPDM_RESPOND_IF_READY_SUPPORT=1 -DLIBSPDM_SEND_GET_CERTIFICATE_SUPPORT=1 -DLIBSPDM_SEND_CHALLENGE_SUPPORT=1 -DLIBSPDM_EVENT_RECIPIENT_SUPPORT=1 -DLIBSPDM_HAL_PASS_SPDM_CONTEXT=1 -DLIBSPDM_SET_CERT_CSR_PARAMS=1"
51-
- "-DLIBSPDM_ENABLE_CAPABILITY_CERT_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_CHAL_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_MEAS_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_KEY_EX_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_PSK_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_SET_CERT_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_CHUNK_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_MUT_AUTH_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_ENCAP_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_CSR_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_HBEAT_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_EVENT_CAP=0 -DLIBSPDM_RESPOND_IF_READY_SUPPORT=0 -DLIBSPDM_SEND_GET_CERTIFICATE_SUPPORT=0 -DLIBSPDM_SEND_CHALLENGE_SUPPORT=0 -DLIBSPDM_EVENT_RECIPIENT_SUPPORT=0 -DLIBSPDM_HAL_PASS_SPDM_CONTEXT=0 -DLIBSPDM_SET_CERT_CSR_PARAMS=0"
50+
- "-DLIBSPDM_ENABLE_CAPABILITY_CERT_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_CHAL_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_MEAS_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_KEY_EX_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_PSK_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_SET_CERT_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_CHUNK_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_MUT_AUTH_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_ENCAP_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_CSR_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_HBEAT_CAP=1 -DLIBSPDM_ENABLE_CAPABILITY_EVENT_CAP=1 -DLIBSPDM_RESPOND_IF_READY_SUPPORT=1 -DLIBSPDM_SEND_GET_CERTIFICATE_SUPPORT=1 -DLIBSPDM_SEND_CHALLENGE_SUPPORT=1 -DLIBSPDM_EVENT_RECIPIENT_SUPPORT=1 -DLIBSPDM_ENABLE_CAPABILITY_ENDPOINT_INFO_CAP=1 -DLIBSPDM_SEND_GET_ENDPOINT_INFO_SUPPORT=1 -DLIBSPDM_HAL_PASS_SPDM_CONTEXT=1 -DLIBSPDM_SET_CERT_CSR_PARAMS=1"
51+
- "-DLIBSPDM_ENABLE_CAPABILITY_CERT_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_CHAL_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_MEAS_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_KEY_EX_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_PSK_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_SET_CERT_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_CHUNK_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_MUT_AUTH_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_ENCAP_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_CSR_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_HBEAT_CAP=0 -DLIBSPDM_ENABLE_CAPABILITY_EVENT_CAP=0 -DLIBSPDM_RESPOND_IF_READY_SUPPORT=0 -DLIBSPDM_SEND_GET_CERTIFICATE_SUPPORT=0 -DLIBSPDM_SEND_CHALLENGE_SUPPORT=0 -DLIBSPDM_EVENT_RECIPIENT_SUPPORT=0 -DLIBSPDM_ENABLE_CAPABILITY_ENDPOINT_INFO_CAP=0 -DLIBSPDM_SEND_GET_ENDPOINT_INFO_SUPPORT=0 -DLIBSPDM_HAL_PASS_SPDM_CONTEXT=0 -DLIBSPDM_SET_CERT_CSR_PARAMS=0"
5252
- "-DLIBSPDM_RECORD_TRANSCRIPT_DATA_SUPPORT=0 -DLIBSPDM_FIPS_MODE=0 -DLIBSPDM_ENABLE_CAPABILITY_CSR_CAP_EX=0"
5353
- "-DLIBSPDM_RECORD_TRANSCRIPT_DATA_SUPPORT=1 -DLIBSPDM_FIPS_MODE=1 -DLIBSPDM_ENABLE_CAPABILITY_CSR_CAP_EX=1"
5454
- "-DDISABLE_TESTS=1"

include/hal/library/endpointinfolib.h

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/**
2+
* Copyright Notice:
3+
* Copyright 2025 DMTF. All rights reserved.
4+
* License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
5+
**/
6+
7+
#ifndef RESPONDER_ENDPOINTINFOLIB_H
8+
#define RESPONDER_ENDPOINTINFOLIB_H
9+
10+
#include "hal/base.h"
11+
#include "internal/libspdm_lib_config.h"
12+
#include "library/spdm_return_status.h"
13+
#include "industry_standard/spdm.h"
14+
15+
#if LIBSPDM_ENABLE_CAPABILITY_ENDPOINT_INFO_CAP
16+
17+
/**
18+
* Endpoint Info Response Get Device Class Identifier Function Pointer.
19+
* Required to be able to return the Device Class Identifier correctly
20+
*
21+
* @param spdm_context A pointer to the SPDM context.
22+
* @param sub_code The subcode of endpoint info, should be one of the
23+
* SPDM_GET_ENDPOINT_INFO_REQUEST_SUBCODE_* values.
24+
* @param request_attributes The request attributes of the endpoint info.
25+
* @param endpoint_info_size On output, the size, in bytes, of the buffer to
26+
* hold the device class identifier.
27+
* @param endpoint_info On output, the buffer to hold the device class identifier
28+
* content.
29+
*
30+
* @retval true Success.
31+
* @retval false An error occurred when processing the device endpoint info.
32+
**/
33+
extern bool libspdm_generate_device_endpoint_info(
34+
void *spdm_context,
35+
uint8_t sub_code,
36+
uint8_t request_attributes,
37+
uint32_t *endpoint_info_size,
38+
void *endpoint_info);
39+
40+
#endif /* LIBSPDM_ENABLE_CAPABILITY_ENDPOINT_INFO_CAP */
41+
42+
#endif /* RESPONDER_ENDPOINTINFOLIB_H */

include/industry_standard/spdm.h

+61
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
#define SPDM_CHUNK_RESPONSE 0x06
5656

5757
/* SPDM response code (1.3) */
58+
#define SPDM_ENDPOINT_INFO 0x07
5859
#define SPDM_SUPPORTED_EVENT_TYPES 0x62
5960
#define SPDM_SUBSCRIBE_EVENT_TYPES_ACK 0x70
6061
#define SPDM_EVENT_ACK 0x71
@@ -91,6 +92,7 @@
9192
#define SPDM_CHUNK_GET 0x86
9293

9394
/* SPDM request code (1.3) */
95+
#define SPDM_GET_ENDPOINT_INFO 0x87
9496
#define SPDM_GET_SUPPORTED_EVENT_TYPES 0xE2
9597
#define SPDM_SUBSCRIBE_EVENT_TYPES 0xF0
9698
#define SPDM_SEND_EVENT 0xF1
@@ -1277,6 +1279,65 @@ typedef struct {
12771279

12781280
#define SPDM_CHUNK_GET_RESPONSE_ATTRIBUTE_LAST_CHUNK (1 << 0)
12791281

1282+
/* SPDM GET_ENDPOINT_INFO request */
1283+
typedef struct {
1284+
spdm_message_header_t header;
1285+
/* param1 - subcode of the request
1286+
* param2 - Bit[7:4]: reserved
1287+
* Bit[3:0]: slot_id */
1288+
uint8_t request_attributes;
1289+
uint8_t reserved[3];
1290+
/* uint8_t nonce[32]; */
1291+
} spdm_get_endpoint_info_request_t;
1292+
1293+
#define SPDM_GET_ENDPOINT_INFO_REQUEST_SLOT_ID_MASK 0xF
1294+
1295+
/* SPDM GET_ENDPOINT_INFO request subcode */
1296+
#define SPDM_GET_ENDPOINT_INFO_REQUEST_SUBCODE_DEVICE_CLASS_IDENTIFIER 0x01
1297+
1298+
/* SPDM GET_ENDPOINT_INFO request attribute */
1299+
#define SPDM_GET_ENDPOINT_INFO_REQUEST_ATTRIBUTE_SIGNATURE_REQUESTED (1 << 0)
1300+
1301+
/* SPDM ENDPOINT_INFO response */
1302+
typedef struct {
1303+
spdm_message_header_t header;
1304+
/* param1 - reserved
1305+
* param2 - Bit[7:4]: reserved
1306+
* Bit[3:0]: slot_id*/
1307+
uint32_t reserved;
1308+
/* uint8_t nonce[32];
1309+
* uint32_t ep_info_len
1310+
* uint8_t ep_info[ep_info_len];
1311+
* uint8_t signature[sig_len]; */
1312+
} spdm_endpoint_info_response_t;
1313+
1314+
#define SPDM_ENDPOINT_INFO_RESPONSE_SLOT_ID_MASK 0xF
1315+
1316+
typedef struct {
1317+
uint8_t num_identifiers;
1318+
uint8_t reserved[3];
1319+
/* uint8_t identifier_elements; */
1320+
} spdm_endpoint_info_device_class_identifier_t;
1321+
1322+
typedef struct {
1323+
uint8_t id_elem_length;
1324+
spdm_svh_header_t svh;
1325+
/* size of svh is 2 + vendor_id_len */
1326+
1327+
/* uint8_t num_sub_ids;
1328+
* uint8_t subordinate_id[]; */
1329+
} spdm_endpoint_info_device_class_identifier_element_t;
1330+
1331+
typedef struct {
1332+
uint8_t sub_id_len;
1333+
/* uint8_t sub_identifier[sub_id_len]; */
1334+
} spdm_endpoint_info_device_class_identifier_subordinate_id_t;
1335+
1336+
#define SPDM_ENDPOINT_INFO_SIGN_CONTEXT "responder-endpoint_info signing"
1337+
#define SPDM_ENDPOINT_INFO_SIGN_CONTEXT_SIZE (sizeof(SPDM_ENDPOINT_INFO_SIGN_CONTEXT) - 1)
1338+
#define SPDM_MUT_ENDPOINT_INFO_SIGN_CONTEXT "requester-endpoint_info signing"
1339+
#define SPDM_MUT_ENDPOINT_INFO_SIGN_CONTEXT_SIZE (sizeof(SPDM_MUT_ENDPOINT_INFO_SIGN_CONTEXT) - 1)
1340+
12801341
typedef struct {
12811342
spdm_message_header_t header;
12821343
/* param1 == RSVD

include/internal/libspdm_common_lib.h

+125
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "hal/library/responder/key_pair_info.h"
2222
#include "hal/library/responder/psklib.h"
2323
#include "hal/library/responder/setcertlib.h"
24+
#include "hal/library/endpointinfolib.h"
2425
#include "hal/library/eventlib.h"
2526
#include "hal/library/cryptlib.h"
2627

@@ -243,6 +244,15 @@ typedef struct {
243244
#define LIBSPDM_MAX_MESSAGE_F_BUFFER_SIZE (8 + LIBSPDM_MAX_HASH_SIZE * 2 + \
244245
LIBSPDM_MAX_ASYM_KEY_SIZE)
245246

247+
/*
248+
* +--------------------------+------------------------------------------+---------+
249+
* | GET_EP_INFO 1.3 | 8 + Nonce (0 or 32) = [8, 40] | 1 |
250+
* | EP_INFO 1.3 | 12 + Nonce + EPInfoLen = [12, 1024] | [1, 25] |
251+
* +--------------------------+------------------------------------------+---------+
252+
*/
253+
#define LIBSPDM_MAX_MESSAGE_E_BUFFER_SIZE (20 + SPDM_NONCE_SIZE * 2 + \
254+
LIBSPDM_MAX_ENDPOINT_INFO_LENGTH)
255+
246256
#define LIBSPDM_MAX_MESSAGE_L1L2_BUFFER_SIZE \
247257
(LIBSPDM_MAX_MESSAGE_VCA_BUFFER_SIZE + LIBSPDM_MAX_MESSAGE_M_BUFFER_SIZE)
248258

@@ -257,6 +267,9 @@ typedef struct {
257267
LIBSPDM_MAX_MESSAGE_D_BUFFER_SIZE + \
258268
LIBSPDM_MAX_HASH_SIZE + LIBSPDM_MAX_MESSAGE_F_BUFFER_SIZE)
259269

270+
#define LIBSPDM_MAX_MESSAGE_IL1IL2_BUFFER_SIZE \
271+
(LIBSPDM_MAX_MESSAGE_VCA_BUFFER_SIZE + LIBSPDM_MAX_MESSAGE_E_BUFFER_SIZE)
272+
260273
typedef struct {
261274
size_t max_buffer_size;
262275
size_t buffer_size;
@@ -287,6 +300,12 @@ typedef struct {
287300
uint8_t buffer[LIBSPDM_MAX_MESSAGE_F_BUFFER_SIZE];
288301
} libspdm_message_f_managed_buffer_t;
289302

303+
typedef struct {
304+
size_t max_buffer_size;
305+
size_t buffer_size;
306+
uint8_t buffer[LIBSPDM_MAX_MESSAGE_E_BUFFER_SIZE];
307+
} libspdm_message_e_managed_buffer_t;
308+
290309
typedef struct {
291310
size_t max_buffer_size;
292311
size_t buffer_size;
@@ -299,6 +318,12 @@ typedef struct {
299318
uint8_t buffer[LIBSPDM_MAX_MESSAGE_M1M2_BUFFER_SIZE];
300319
} libspdm_m1m2_managed_buffer_t;
301320

321+
typedef struct {
322+
size_t max_buffer_size;
323+
size_t buffer_size;
324+
uint8_t buffer[LIBSPDM_MAX_MESSAGE_IL1IL2_BUFFER_SIZE];
325+
} libspdm_il1il2_managed_buffer_t;
326+
302327
typedef struct {
303328
size_t max_buffer_size;
304329
size_t buffer_size;
@@ -325,6 +350,12 @@ typedef struct {
325350
/* L1/L2 = Concatenate (M)
326351
* M = Concatenate (GET_MEASUREMENT, MEASUREMENT\signature)*/
327352

353+
/* IL1/IL2 = Concatenate (A, E)
354+
* E = Concatenate (GET_ENDPOINT_INFO, ENDPOINT_INFO\signature)*/
355+
356+
/* Mut IL1/IL2 = Concatenate (A, Mut E)
357+
* Mut E = Concatenate (GET_ENDPOINT_INFO, ENDPOINT_INFO\signature)*/
358+
328359
typedef struct {
329360
/* the message_a must be plan text because we do not know the algorithm yet.*/
330361
libspdm_vca_managed_buffer_t message_a;
@@ -335,10 +366,14 @@ typedef struct {
335366
libspdm_message_b_managed_buffer_t message_mut_b;
336367
libspdm_message_c_managed_buffer_t message_mut_c;
337368
libspdm_message_m_managed_buffer_t message_m;
369+
libspdm_message_e_managed_buffer_t message_e;
370+
libspdm_message_e_managed_buffer_t message_mut_e;
338371
#else
339372
void *digest_context_m1m2;
340373
void *digest_context_mut_m1m2;
341374
void *digest_context_l1l2;
375+
void *digest_context_il1il2;
376+
void *digest_context_mut_il1il2;
342377
#endif
343378
} libspdm_transcript_t;
344379

@@ -405,10 +440,14 @@ typedef struct {
405440
libspdm_message_k_managed_buffer_t message_k;
406441
libspdm_message_f_managed_buffer_t message_f;
407442
libspdm_message_m_managed_buffer_t message_m;
443+
libspdm_message_e_managed_buffer_t message_e;
444+
libspdm_message_e_managed_buffer_t message_mut_e;
408445
#else
409446
bool message_f_initialized;
410447
void *digest_context_th;
411448
void *digest_context_l1l2;
449+
void *digest_context_il1il2;
450+
void *digest_context_mut_il1il2;
412451
/* this is back up for message F reset.*/
413452
void *digest_context_th_backup;
414453
#endif
@@ -1006,6 +1045,40 @@ uint32_t libspdm_get_measurement_summary_hash_size(libspdm_context_t *spdm_conte
10061045
bool is_requester,
10071046
uint8_t measurement_summary_hash_type);
10081047

1048+
/**
1049+
* This function generates the endpoint info signature based upon il1il2 for authentication.
1050+
*
1051+
* @param spdm_context A pointer to the SPDM context.
1052+
* @param session_info A pointer to the SPDM session context.
1053+
* @param is_requester Indicate of the signature generation for a requester or a responder.
1054+
* @param signature The buffer to store the endpoint info signature.
1055+
*
1056+
* @retval true challenge signature is generated.
1057+
* @retval false challenge signature is not generated.
1058+
**/
1059+
bool libspdm_generate_endpoint_info_signature(libspdm_context_t *spdm_context,
1060+
libspdm_session_info_t *session_info,
1061+
bool is_requester,
1062+
uint8_t *signature);
1063+
1064+
/**
1065+
* This function verifies the challenge signature based upon m1m2.
1066+
*
1067+
* @param spdm_context A pointer to the SPDM context.
1068+
* @param session_info A pointer to the SPDM session context.
1069+
* @param is_requester Indicate of the signature verification for a requester or a responder.
1070+
* @param sign_data The signature data buffer.
1071+
* @param sign_data_size size in bytes of the signature data buffer.
1072+
*
1073+
* @retval true signature verification pass.
1074+
* @retval false signature verification fail.
1075+
**/
1076+
bool libspdm_verify_endpoint_info_signature(libspdm_context_t *spdm_context,
1077+
libspdm_session_info_t *session_info,
1078+
bool is_requester,
1079+
const void *sign_data,
1080+
size_t sign_data_size);
1081+
10091082
#if LIBSPDM_RECORD_TRANSCRIPT_DATA_SUPPORT
10101083
/*
10111084
* This function calculates l1l2.
@@ -1306,6 +1379,26 @@ void libspdm_reset_message_encap_d(libspdm_context_t *spdm_context, void *spdm_s
13061379
**/
13071380
void libspdm_reset_message_f(libspdm_context_t *spdm_context, void *spdm_session_info);
13081381

1382+
/**
1383+
* Reset message E cache in SPDM context.
1384+
* If session_info is NULL, this function will use E cache of SPDM context,
1385+
* else will use E cache of SPDM session context.
1386+
*
1387+
* @param spdm_context A pointer to the SPDM context.
1388+
* @param spdm_session_info A pointer to the SPDM session context.
1389+
**/
1390+
void libspdm_reset_message_e(libspdm_context_t *spdm_context, void *session_info);
1391+
1392+
/**
1393+
* Reset message mut E cache in SPDM context.
1394+
* If session_info is NULL, this function will use mut E cache of SPDM context,
1395+
* else will use mut E cache of SPDM session context.
1396+
*
1397+
* @param spdm_context A pointer to the SPDM context.
1398+
* @param spdm_session_info A pointer to the SPDM session context.
1399+
**/
1400+
void libspdm_reset_message_mut_e(libspdm_context_t *spdm_context, void *session_info);
1401+
13091402
/**
13101403
* Append message A cache in SPDM context.
13111404
*
@@ -1452,6 +1545,38 @@ libspdm_return_t libspdm_append_message_f(libspdm_context_t *spdm_context,
14521545
bool is_requester, const void *message,
14531546
size_t message_size);
14541547

1548+
/**
1549+
* Append message E cache in SPDM context.
1550+
* If session_info is NULL, this function will use E cache of SPDM context,
1551+
* else will use E cache of SPDM session context.
1552+
*
1553+
* @param spdm_context A pointer to the SPDM context.
1554+
* @param session_info A pointer to the SPDM session context.
1555+
* @param message message buffer.
1556+
* @param message_size size in bytes of message buffer.
1557+
*
1558+
* @return RETURN_SUCCESS message is appended.
1559+
* @return RETURN_OUT_OF_RESOURCES message is not appended because the internal cache is full.
1560+
**/
1561+
libspdm_return_t libspdm_append_message_e(libspdm_context_t *spdm_context, void *session_info,
1562+
const void *message, size_t message_size);
1563+
1564+
/**
1565+
* Append message mut E cache in SPDM context.
1566+
* If session_info is NULL, this function will use mut E cache of SPDM context,
1567+
* else will use mut E cache of SPDM session context.
1568+
*
1569+
* @param spdm_context A pointer to the SPDM context.
1570+
* @param session_info A pointer to the SPDM session context.
1571+
* @param message message buffer.
1572+
* @param message_size size in bytes of message buffer.
1573+
*
1574+
* @return RETURN_SUCCESS message is appended.
1575+
* @return RETURN_OUT_OF_RESOURCES message is not appended because the internal cache is full.
1576+
**/
1577+
libspdm_return_t libspdm_append_message_mut_e(libspdm_context_t *spdm_context, void *session_info,
1578+
const void *message, size_t message_size);
1579+
14551580
/**
14561581
* This function generates a session ID by concatenating req_session_id and rsp_session_id.
14571582
*

include/internal/libspdm_responder_lib.h

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**
22
* Copyright Notice:
3-
* Copyright 2021-2024 DMTF. All rights reserved.
3+
* Copyright 2021-2025 DMTF. All rights reserved.
44
* License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
55
**/
66

@@ -957,4 +957,13 @@ libspdm_return_t libspdm_get_response_set_key_pair_info_ack(libspdm_context_t *s
957957
void *response);
958958
#endif /* LIBSPDM_ENABLE_CAPABILITY_SET_KEY_PAIR_INFO_CAP */
959959

960+
961+
#if LIBSPDM_ENABLE_CAPABILITY_ENDPOINT_INFO_CAP
962+
libspdm_return_t libspdm_get_response_endpoint_info(libspdm_context_t *spdm_context,
963+
size_t request_size,
964+
const void *request,
965+
size_t *response_size,
966+
void *response);
967+
#endif /* LIBSPDM_ENABLE_CAPABILITY_ENDPOINT_INFO_CAP */
968+
960969
#endif /* SPDM_RESPONDER_LIB_INTERNAL_H */

0 commit comments

Comments
 (0)