Skip to content

Commit d1e0bd6

Browse files
committed
Allow Requester to input opaque data for finish and psk_finish
fix #3402 Signed-off-by: Aaron Li <[email protected]>
1 parent 7e0037e commit d1e0bd6

File tree

2 files changed

+69
-48
lines changed

2 files changed

+69
-48
lines changed

include/library/spdm_requester_lib.h

Lines changed: 49 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -526,40 +526,46 @@ libspdm_return_t libspdm_get_supported_algorithms(void *spdm_context,
526526
* If encapsulated mutual authentication is requested from the responder,
527527
* this function also perform the encapsulated mutual authentication.
528528
*
529-
* @param spdm_context A pointer to the SPDM context.
530-
* @param use_psk False means to use KEY_EXCHANGE/FINISH to start a session.
531-
* True means to use PSK_EXCHANGE/PSK_FINISH to start a session.
532-
* @param psk_hint The psk_hint in PSK_EXCHANGE. It is ignored if use_psk is false.
533-
* @param psk_hint_size The size in bytes of psk_hint. It is ignored if use_psk is false.
534-
* @param measurement_hash_type The type of the measurement hash.
535-
* @param slot_id The number of slot for the certificate chain.
536-
* @param session_policy The policy for the session.
537-
* @param session_id The session ID of the session.
538-
* @param heartbeat_period The heartbeat period for the session.
539-
* @param measurement_hash A pointer to a destination buffer to store the measurement hash.
540-
* @param requester_random_in A buffer to hold the requester random as input, if not NULL.
541-
* @param requester_random_in_size The size of requester_random_in.
542-
* If use_psk is false, it must be 32 bytes.
543-
* If use_psk is true, it means the PSK context and must be 32 bytes at least,
544-
* but not exceed LIBSPDM_PSK_CONTEXT_LENGTH.
545-
* @param requester_random A buffer to hold the requester random, if not NULL.
546-
* @param requester_random_size On input, the size of requester_random buffer.
547-
* On output, the size of data returned in requester_random buffer.
548-
* If use_psk is false, it must be 32 bytes.
549-
* If use_psk is true, it means the PSK context and must be 32 bytes at least.
550-
* @param responder_random A buffer to hold the responder random, if not NULL.
551-
* @param responder_random_size On input, the size of requester_random buffer.
552-
* On output, the size of data returned in requester_random buffer.
553-
* If use_psk is false, it must be 32 bytes.
554-
* If use_psk is true, it means the PSK context. It could be 0 if device does not support context.
555-
* @param requester_opaque_data A buffer to hold the requester opaque data, if not NULL.
556-
* If not NULL, this function will not generate any opaque data,
557-
* including secured message versions.
558-
* @param requester_opaque_data_size The size of the opaque data, if requester_opaque_data is not NULL.
559-
* @param responder_opaque_data A buffer to hold the responder opaque data, if not NULL.
560-
* @param responder_opaque_data_size On input, the size of the opaque data buffer.
561-
* Opaque data should be less than 1024 bytes.
562-
* On output, the size of the opaque data.
529+
* @param spdm_context A pointer to the SPDM context.
530+
* @param use_psk False means to use KEY_EXCHANGE/FINISH to start a session.
531+
* True means to use PSK_EXCHANGE/PSK_FINISH to start a session.
532+
* @param psk_hint The psk_hint in PSK_EXCHANGE. It is ignored if use_psk is false.
533+
* @param psk_hint_size The size in bytes of psk_hint. It is ignored if use_psk is false.
534+
* @param measurement_hash_type The type of the measurement hash.
535+
* @param slot_id The number of slot for the certificate chain.
536+
* @param session_policy The policy for the session.
537+
* @param session_id The session ID of the session.
538+
* @param heartbeat_period The heartbeat period for the session.
539+
* @param measurement_hash A pointer to a destination buffer to store the measurement hash.
540+
* @param requester_random_in A buffer to hold the requester random as input, if not NULL.
541+
* @param requester_random_in_size The size of requester_random_in.
542+
* If use_psk is false, it must be 32 bytes.
543+
* If use_psk is true, it means the PSK context and must be 32 bytes at least,
544+
* but not exceed LIBSPDM_PSK_CONTEXT_LENGTH.
545+
* @param requester_random A buffer to hold the requester random, if not NULL.
546+
* @param requester_random_size On input, the size of requester_random buffer.
547+
* On output, the size of data returned in requester_random buffer.
548+
* If use_psk is false, it must be 32 bytes.
549+
* If use_psk is true, it means the PSK context and must be 32 bytes at least.
550+
* @param responder_random A buffer to hold the responder random, if not NULL.
551+
* @param responder_random_size On input, the size of requester_random buffer.
552+
* On output, the size of data returned in requester_random buffer.
553+
* If use_psk is false, it must be 32 bytes.
554+
* If use_psk is true, it means the PSK context. It could be 0 if device does not support context.
555+
* @param requester_ex_opaque_data A buffer to hold the requester exchange opaque data, if not NULL.
556+
* If not NULL, this function will not generate any opaque data,
557+
* including secured message versions.
558+
* @param requester_ex_opaque_data_size The size of the opaque data, if requester_ex_opaque_data is not NULL.
559+
* @param responder_ex_opaque_data A buffer to hold the responder exchange opaque data, if not NULL.
560+
* @param responder_ex_opaque_data_size On input, the size of the opaque data buffer.
561+
* Opaque data should be less than 1024 bytes.
562+
* On output, the size of the opaque data.
563+
* @param requester_finish_opaque_data A buffer to hold the requester finish opaque data, if not NULL.
564+
* @param requester_finish_opaque_data_size The size of the opaque data, if requester_finish_opaque_data is not NULL.
565+
* @param responder_finish_opaque_data A buffer to hold the responder finish opaque data, if not NULL.
566+
* @param responder_finish_opaque_data_size On input, the size of the opaque data buffer.
567+
* Opaque data should be less than 1024 bytes.
568+
* On output, the size of the opaque data.
563569
**/
564570
libspdm_return_t libspdm_start_session_ex(void *spdm_context, bool use_psk,
565571
const void *psk_hint,
@@ -576,10 +582,15 @@ libspdm_return_t libspdm_start_session_ex(void *spdm_context, bool use_psk,
576582
size_t *requester_random_size,
577583
void *responder_random,
578584
size_t *responder_random_size,
579-
const void *requester_opaque_data,
580-
size_t requester_opaque_data_size,
581-
void *responder_opaque_data,
582-
size_t *responder_opaque_data_size);
585+
const void *requester_ex_opaque_data,
586+
size_t requester_ex_opaque_data_size,
587+
void *responder_ex_opaque_data,
588+
size_t *responder_ex_opaque_data_size,
589+
const void *requester_finish_opaque_data,
590+
size_t requester_finish_opaque_data_size,
591+
void *responder_finish_opaque_data,
592+
size_t *responder_finish_opaque_data_size);
593+
583594

584595
/**
585596
* This function sends END_SESSION to stop an SPDM Session.

library/spdm_requester_lib/libspdm_req_communication.c

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -213,10 +213,14 @@ libspdm_return_t libspdm_start_session_ex(void *spdm_context, bool use_psk,
213213
size_t *requester_random_size,
214214
void *responder_random,
215215
size_t *responder_random_size,
216-
const void *requester_opaque_data,
217-
size_t requester_opaque_data_size,
218-
void *responder_opaque_data,
219-
size_t *responder_opaque_data_size)
216+
const void *requester_ex_opaque_data,
217+
size_t requester_ex_opaque_data_size,
218+
void *responder_ex_opaque_data,
219+
size_t *responder_ex_opaque_data_size,
220+
const void *requester_finish_opaque_data,
221+
size_t requester_finish_opaque_data_size,
222+
void *responder_finish_opaque_data,
223+
size_t *responder_finish_opaque_data_size)
220224
{
221225
libspdm_return_t status;
222226
libspdm_context_t *context;
@@ -242,8 +246,8 @@ libspdm_return_t libspdm_start_session_ex(void *spdm_context, bool use_psk,
242246
session_id, heartbeat_period, &req_slot_id_param,
243247
measurement_hash, requester_random_in,
244248
requester_random, responder_random,
245-
requester_opaque_data, requester_opaque_data_size,
246-
responder_opaque_data, responder_opaque_data_size);
249+
requester_ex_opaque_data, requester_ex_opaque_data_size,
250+
responder_ex_opaque_data, responder_ex_opaque_data_size);
247251
if (LIBSPDM_STATUS_IS_ERROR(status)) {
248252
LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO,
249253
"libspdm_start_session - libspdm_send_receive_key_exchange - %xu\n",
@@ -297,7 +301,10 @@ libspdm_return_t libspdm_start_session_ex(void *spdm_context, bool use_psk,
297301
if (req_slot_id_param == 0xF) {
298302
req_slot_id_param = 0xFF;
299303
}
300-
status = libspdm_send_receive_finish(context, *session_id, req_slot_id_param);
304+
status = libspdm_send_receive_finish_ex(
305+
context, *session_id, req_slot_id_param,
306+
requester_finish_opaque_data, requester_finish_opaque_data_size,
307+
responder_finish_opaque_data, responder_finish_opaque_data_size);
301308
LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO,
302309
"libspdm_start_session - libspdm_send_receive_finish - %xu\n", status));
303310
#else /* LIBSPDM_ENABLE_CAPABILITY_KEY_EX_CAP*/
@@ -313,8 +320,8 @@ libspdm_return_t libspdm_start_session_ex(void *spdm_context, bool use_psk,
313320
requester_random_in, requester_random_in_size,
314321
requester_random, requester_random_size,
315322
responder_random, responder_random_size,
316-
requester_opaque_data, requester_opaque_data_size,
317-
responder_opaque_data, responder_opaque_data_size);
323+
requester_ex_opaque_data, requester_ex_opaque_data_size,
324+
responder_ex_opaque_data, responder_ex_opaque_data_size);
318325
if (LIBSPDM_STATUS_IS_ERROR(status)) {
319326
LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO,
320327
"libspdm_start_session - libspdm_send_receive_psk_exchange - %xu\n",
@@ -326,7 +333,10 @@ libspdm_return_t libspdm_start_session_ex(void *spdm_context, bool use_psk,
326333
if (libspdm_is_capabilities_flag_supported(
327334
context, true, 0,
328335
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_PSK_CAP_RESPONDER_WITH_CONTEXT)) {
329-
status = libspdm_send_receive_psk_finish(context, *session_id);
336+
status = libspdm_send_receive_psk_finish_ex(
337+
context, *session_id,
338+
requester_finish_opaque_data, requester_finish_opaque_data_size,
339+
responder_finish_opaque_data, responder_finish_opaque_data_size);
330340
LIBSPDM_DEBUG((LIBSPDM_DEBUG_INFO,
331341
"libspdm_start_session - libspdm_send_receive_psk_finish - %xu\n",
332342
status));

0 commit comments

Comments
 (0)