Skip to content

Commit

Permalink
Enhance unit test for OtherParamsSupport field algorithm negotiate
Browse files Browse the repository at this point in the history
Signed-off-by: Xiaohanjlll <[email protected]>
  • Loading branch information
Xiaohanjlll authored and jyao1 committed Feb 18, 2024
1 parent a05e41c commit 36f54ba
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 10 deletions.
39 changes: 31 additions & 8 deletions unit_test/test_spdm_requester/negotiate_algorithms.c
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,16 @@ static libspdm_return_t libspdm_requester_negotiate_algorithms_test_send_message
m_libspdm_local_buffer_size += (request_size - 1);
}
return LIBSPDM_STATUS_SUCCESS;
case 0x21:
case 0x21: {
const spdm_negotiate_algorithms_request_t *spdm_request;
spdm_request =
(const spdm_negotiate_algorithms_request_t *)((const uint8_t *)request +
sizeof(libspdm_test_message_header_t));

assert_int_equal (spdm_request->header.spdm_version, SPDM_MESSAGE_VERSION_12);
assert_int_equal (spdm_request->header.request_response_code, SPDM_NEGOTIATE_ALGORITHMS);
assert_int_equal (spdm_request->other_params_support, SPDM_ALGORITHMS_OPAQUE_DATA_FORMAT_1);
}
return LIBSPDM_STATUS_SUCCESS;
case 0x22:
case 0x23:
Expand Down Expand Up @@ -1828,7 +1837,6 @@ static void libspdm_test_requester_negotiate_algorithms_case33(void **state) {

spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_12 <<
SPDM_VERSION_NUMBER_SHIFT_BIT;
spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_CAPABILITIES;
spdm_context->local_context.algorithm.measurement_hash_algo =
m_libspdm_use_measurement_hash_algo;
spdm_context->local_context.algorithm.base_asym_algo = m_libspdm_use_asym_algo;
Expand All @@ -1838,8 +1846,6 @@ static void libspdm_test_requester_negotiate_algorithms_case33(void **state) {
spdm_context->local_context.algorithm.aead_cipher_suite = m_libspdm_use_aead_algo;
spdm_context->local_context.algorithm.req_base_asym_alg = m_libspdm_use_req_asym_algo;
spdm_context->local_context.algorithm.key_schedule = m_libspdm_use_key_schedule_algo;
spdm_context->local_context.algorithm.other_params_support =
SPDM_ALGORITHMS_OPAQUE_DATA_FORMAT_1;
spdm_context->local_context.capability.flags |= SPDM_GET_CAPABILITIES_REQUEST_FLAGS_KEY_EX_CAP;
spdm_context->connection_info.capability.flags |=
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_KEY_EX_CAP;
Expand All @@ -1861,8 +1867,28 @@ static void libspdm_test_requester_negotiate_algorithms_case33(void **state) {
spdm_context->connection_info.capability.flags |= SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MEAS_CAP;
spdm_context->local_context.algorithm.measurement_spec = SPDM_MEASUREMENT_SPECIFICATION_DMTF;

status = libspdm_negotiate_algorithms (spdm_context);
/* Sub Case 1: other_params_support set OpaqueDataFmt1 */
spdm_context->local_context.algorithm.other_params_support =
SPDM_ALGORITHMS_OPAQUE_DATA_FORMAT_1;
spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_CAPABILITIES;
libspdm_reset_message_a(spdm_context);

status = libspdm_negotiate_algorithms(spdm_context);
assert_int_equal (status, LIBSPDM_STATUS_SUCCESS);
assert_int_equal(spdm_context->connection_info.algorithm.other_params_support,
SPDM_ALGORITHMS_OPAQUE_DATA_FORMAT_1);

/* Sub Case 2: Populate reserved field for version 1.2, field values marked as Reserved shall be written as zero ( 0 )*/
spdm_context->local_context.algorithm.other_params_support =
SPDM_ALGORITHMS_OPAQUE_DATA_FORMAT_1 |
SPDM_ALGORITHMS_MULTI_KEY_CONN;
spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_CAPABILITIES;
libspdm_reset_message_a(spdm_context);

status = libspdm_negotiate_algorithms(spdm_context);
assert_int_equal (status, LIBSPDM_STATUS_SUCCESS);
assert_int_equal(spdm_context->connection_info.algorithm.other_params_support,
SPDM_ALGORITHMS_OPAQUE_DATA_FORMAT_1);
#if LIBSPDM_RECORD_TRANSCRIPT_DATA_SUPPORT
assert_int_equal (spdm_context->transcript.message_a.buffer_size,
sizeof(spdm_negotiate_algorithms_request_t) + 4*
Expand Down Expand Up @@ -2193,9 +2219,6 @@ int libspdm_requester_negotiate_algorithms_test_main(void)
cmocka_unit_test(libspdm_test_requester_negotiate_algorithms_case30),
cmocka_unit_test(libspdm_test_requester_negotiate_algorithms_case31),
cmocka_unit_test(libspdm_test_requester_negotiate_algorithms_case32),
cmocka_unit_test(libspdm_test_requester_negotiate_algorithms_case32),
cmocka_unit_test(libspdm_test_requester_negotiate_algorithms_case33),
cmocka_unit_test(libspdm_test_requester_negotiate_algorithms_case32),
cmocka_unit_test(libspdm_test_requester_negotiate_algorithms_case33),
cmocka_unit_test(libspdm_test_requester_negotiate_algorithms_case34),
cmocka_unit_test(libspdm_test_requester_negotiate_algorithms_case35),
Expand Down
58 changes: 56 additions & 2 deletions unit_test/test_spdm_responder/algorithms.c
Original file line number Diff line number Diff line change
Expand Up @@ -660,7 +660,7 @@ libspdm_negotiate_algorithms_request_spdm12_t
sizeof(libspdm_negotiate_algorithms_request_spdm12_t),
SPDM_MEASUREMENT_SPECIFICATION_DMTF,
/* Illegal OpaqueDataFmt. */
0x03,
0x04,
},
{
{
Expand Down Expand Up @@ -2166,6 +2166,10 @@ void libspdm_test_responder_algorithms_case23(void **state)
spdm_context->local_context.capability.flags |= SPDM_GET_CAPABILITIES_REQUEST_FLAGS_PSK_CAP;
spdm_context->connection_info.capability.flags |= SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_PSK_CAP;

/* Sub Case 1: other_params_support set Illegal OpaqueDataFmt */
m_libspdm_negotiate_algorithm_request18.spdm_request_version10.other_params_support = 0x04;
libspdm_reset_message_a(spdm_context);

response_size = sizeof(response);
status = libspdm_get_response_algorithms (spdm_context,
m_libspdm_negotiate_algorithm_request18_size,
Expand All @@ -2178,6 +2182,56 @@ void libspdm_test_responder_algorithms_case23(void **state)
assert_int_equal (spdm_response->header.request_response_code, SPDM_ERROR);
assert_int_equal (spdm_response->header.param1, SPDM_ERROR_CODE_INVALID_REQUEST);
assert_int_equal (spdm_response->header.param2, 0);

/* Sub Case 2: other_params_support set OpaqueDataFmt1 */
m_libspdm_negotiate_algorithm_request18.spdm_request_version10.other_params_support =
SPDM_ALGORITHMS_OPAQUE_DATA_FORMAT_1;
spdm_context->local_context.algorithm.other_params_support =
SPDM_ALGORITHMS_OPAQUE_DATA_FORMAT_1;
spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_CAPABILITIES;
libspdm_reset_message_a(spdm_context);

response_size = sizeof(response);
status = libspdm_get_response_algorithms (spdm_context,
m_libspdm_negotiate_algorithm_request18_size,
&m_libspdm_negotiate_algorithm_request18,
&response_size,
response);
assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
assert_int_equal(response_size,
sizeof(spdm_algorithms_response_t) + 4*
sizeof(spdm_negotiate_algorithms_common_struct_table_t));
spdm_response = (void *)response;
assert_int_equal(spdm_response->header.spdm_version, SPDM_MESSAGE_VERSION_12);
assert_int_equal(spdm_response->header.request_response_code, SPDM_ALGORITHMS);
assert_int_equal(spdm_response->other_params_selection, SPDM_ALGORITHMS_OPAQUE_DATA_FORMAT_1);
assert_int_equal(spdm_context->connection_info.algorithm.other_params_support,
SPDM_ALGORITHMS_OPAQUE_DATA_FORMAT_1);

/* Sub Case 3: Populate reserved field for version 1.2, field values marked as Reserved shall be written as zero ( 0 )*/
spdm_context->local_context.algorithm.other_params_support =
SPDM_ALGORITHMS_OPAQUE_DATA_FORMAT_1 |
SPDM_ALGORITHMS_MULTI_KEY_CONN;
spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_CAPABILITIES;
libspdm_reset_message_a(spdm_context);
response_size = sizeof(response);
status = libspdm_get_response_algorithms (spdm_context,
m_libspdm_negotiate_algorithm_request18_size,
&m_libspdm_negotiate_algorithm_request18,
&response_size,
response);
assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
assert_int_equal(response_size,
sizeof(spdm_algorithms_response_t) + 4*
sizeof(spdm_negotiate_algorithms_common_struct_table_t));
spdm_response = (void *)response;
assert_int_equal(spdm_response->header.spdm_version, SPDM_MESSAGE_VERSION_12);
assert_int_equal(spdm_response->header.request_response_code, SPDM_ALGORITHMS);
assert_int_equal(spdm_response->other_params_selection, SPDM_ALGORITHMS_OPAQUE_DATA_FORMAT_1);
assert_int_equal(spdm_context->connection_info.algorithm.other_params_support,
SPDM_ALGORITHMS_OPAQUE_DATA_FORMAT_1);


}

void libspdm_test_responder_algorithms_case24(void **state)
Expand Down Expand Up @@ -2918,7 +2972,7 @@ int libspdm_responder_algorithms_test_main(void)
cmocka_unit_test(libspdm_test_responder_algorithms_case21),
/* Success case V1.2*/
cmocka_unit_test(libspdm_test_responder_algorithms_case22),
/* No match for other_params_support*/
/* Version 1.2 Check other_params_support */
cmocka_unit_test(libspdm_test_responder_algorithms_case23),
/* No support for MEASUREMENT from requester*/
cmocka_unit_test(libspdm_test_responder_algorithms_case24),
Expand Down

0 comments on commit 36f54ba

Please sign in to comment.