Skip to content

Commit

Permalink
Increase and enhance fuzzy testing
Browse files Browse the repository at this point in the history
Signed-off-by: Xiaohanjlll <[email protected]>
  • Loading branch information
Xiaohanjlll committed Mar 15, 2024
1 parent 4c2817b commit fe4918e
Show file tree
Hide file tree
Showing 17 changed files with 437 additions and 35 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/**
* Copyright Notice:
* Copyright 2021-2022 DMTF. All rights reserved.
* Copyright 2021-2024 DMTF. All rights reserved.
* License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
**/

Expand All @@ -10,6 +10,13 @@

uint8_t temp_buf[LIBSPDM_RECEIVER_BUFFER_SIZE];

spdm_version_number_t m_version[] = {
SPDM_MESSAGE_VERSION_10,
SPDM_MESSAGE_VERSION_11,
SPDM_MESSAGE_VERSION_12,
SPDM_MESSAGE_VERSION_13,
};

size_t libspdm_get_max_buffer_size(void)
{
return LIBSPDM_MAX_SPDM_MSG_SIZE;
Expand Down Expand Up @@ -63,7 +70,14 @@ void libspdm_test_requester_get_capabilities(void **State)
SPDM_VERSION_NUMBER_SHIFT_BIT;
spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_VERSION;

libspdm_get_capabilities(spdm_context);
for (uint8_t index = 0; index < sizeof(m_version)/sizeof(spdm_version_number_t); index++) {
spdm_context->connection_info.version = m_version[index] <<
SPDM_VERSION_NUMBER_SHIFT_BIT;
spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_VERSION;
libspdm_reset_message_a(spdm_context);

libspdm_get_capabilities(spdm_context);
}
}

libspdm_test_context_t m_libspdm_test_requester_context = {
Expand All @@ -82,10 +96,8 @@ void libspdm_run_test_harness(void *test_buffer, size_t test_buffer_size)
m_libspdm_test_requester_context.test_buffer = test_buffer;
m_libspdm_test_requester_context.test_buffer_size = test_buffer_size;

libspdm_unit_test_group_setup(&State);

/* Successful response*/
libspdm_unit_test_group_setup(&State);
libspdm_test_requester_get_capabilities(&State);

libspdm_unit_test_group_teardown(&State);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/**
* Copyright Notice:
* Copyright 2021-2022 DMTF. All rights reserved.
* Copyright 2021-2024 DMTF. All rights reserved.
* License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
**/

Expand Down Expand Up @@ -61,6 +61,8 @@ void libspdm_test_requester_negotiate_algorithms_case1(void **State)
m_libspdm_use_measurement_hash_algo;
spdm_context->local_context.algorithm.base_asym_algo = m_libspdm_use_asym_algo;
spdm_context->local_context.algorithm.base_hash_algo = m_libspdm_use_hash_algo;
spdm_context->connection_info.capability.flags |= SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MEAS_CAP;
spdm_context->local_context.algorithm.measurement_spec = SPDM_MEASUREMENT_SPECIFICATION_DMTF;
libspdm_reset_message_a(spdm_context);

libspdm_negotiate_algorithms(spdm_context);
Expand All @@ -79,6 +81,8 @@ void libspdm_test_requester_negotiate_algorithms_case2(void **State)
m_libspdm_use_measurement_hash_algo;
spdm_context->local_context.algorithm.base_asym_algo = m_libspdm_use_asym_algo;
spdm_context->local_context.algorithm.base_hash_algo = m_libspdm_use_hash_algo;
spdm_context->connection_info.capability.flags |= SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MEAS_CAP;
spdm_context->local_context.algorithm.measurement_spec = SPDM_MEASUREMENT_SPECIFICATION_DMTF;
libspdm_reset_message_a(spdm_context);

libspdm_negotiate_algorithms(spdm_context);
Expand Down Expand Up @@ -161,6 +165,98 @@ void libspdm_test_requester_negotiate_algorithms_case4(void **State)
libspdm_negotiate_algorithms(spdm_context);
}

void libspdm_test_requester_negotiate_algorithms_case5(void **State)
{
libspdm_test_context_t *spdm_test_context;
libspdm_context_t *spdm_context;
spdm_test_context = *State;
uint32_t connection_capability_flags;

spdm_context = spdm_test_context->spdm_context;

spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_13 <<
SPDM_VERSION_NUMBER_SHIFT_BIT;
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;
spdm_context->local_context.algorithm.base_hash_algo = m_libspdm_use_hash_algo;
spdm_context->local_context.algorithm.dhe_named_group = m_libspdm_use_dhe_algo;
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 = 0;

spdm_context->local_context.capability.flags = SPDM_GET_CAPABILITIES_REQUEST_FLAGS_KEY_EX_CAP |
SPDM_GET_CAPABILITIES_REQUEST_FLAGS_MUT_AUTH_CAP|
SPDM_GET_CAPABILITIES_REQUEST_FLAGS_ENCRYPT_CAP|
SPDM_GET_CAPABILITIES_REQUEST_FLAGS_MAC_CAP|
SPDM_GET_CAPABILITIES_REQUEST_FLAGS_PSK_CAP;
connection_capability_flags =
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_KEY_EX_CAP |
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_ENCRYPT_CAP |
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MAC_CAP |
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MUT_AUTH_CAP |
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MEAS_CAP |
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_PSK_CAP;

spdm_context->connection_info.capability.flags = connection_capability_flags;

/* Sub Case 0: Initially*/
libspdm_negotiate_algorithms(spdm_context);

/* Sub Case 1: MEL_CAP set 1,mel_specification set SPDM_MEL_SPECIFICATION_DMTF*/
spdm_context->connection_info.capability.flags |= SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MEL_CAP;
libspdm_reset_message_a(spdm_context);
spdm_context->local_context.algorithm.mel_spec = SPDM_MEL_SPECIFICATION_DMTF;
spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_CAPABILITIES;
libspdm_negotiate_algorithms(spdm_context);

/* Sub Case 2: MEL_CAP set 1, mel_specification set 0*/
spdm_context->connection_info.capability.flags |= SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MEL_CAP;
libspdm_reset_message_a(spdm_context);
spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_CAPABILITIES;
spdm_context->local_context.algorithm.mel_spec = 0;
libspdm_negotiate_algorithms(spdm_context);

/* Sub Case 3:MEL_CAP set 0, mel_specification set SPDM_MEL_SPECIFICATION_DMTF*/
spdm_context->connection_info.capability.flags = connection_capability_flags;
libspdm_reset_message_a(spdm_context);
spdm_context->local_context.algorithm.mel_spec = SPDM_MEL_SPECIFICATION_DMTF;
spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_CAPABILITIES;
libspdm_negotiate_algorithms(spdm_context);

/* Sub Case 4: MEL_CAP set 0, mel_specification set 0*/
spdm_context->connection_info.capability.flags = connection_capability_flags;
libspdm_reset_message_a(spdm_context);
spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_CAPABILITIES;
spdm_context->local_context.algorithm.mel_spec = 0;
libspdm_negotiate_algorithms(spdm_context);

/* Sub Case 5: MULTI_KEY_CAP set 01*/
spdm_context->connection_info.capability.flags =
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MULTI_KEY_CAP_ONLY;
spdm_context->local_context.capability.flags =
SPDM_GET_CAPABILITIES_REQUEST_FLAGS_MULTI_KEY_CAP_ONLY;
spdm_context->local_context.algorithm.other_params_support = SPDM_ALGORITHMS_MULTI_KEY_CONN;

spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_CAPABILITIES;
libspdm_reset_message_a(spdm_context);

libspdm_negotiate_algorithms(spdm_context);

/* Sub Case 6: MULTI_KEY_CAP set 10*/
spdm_context->connection_info.capability.flags =
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MULTI_KEY_CAP_NEG;
spdm_context->local_context.capability.flags =
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MULTI_KEY_CAP_NEG;
spdm_context->local_context.algorithm.other_params_support = SPDM_ALGORITHMS_MULTI_KEY_CONN;

spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_CAPABILITIES;
libspdm_reset_message_a(spdm_context);

libspdm_negotiate_algorithms(spdm_context);
}

libspdm_test_context_t m_libspdm_test_requester_context = {
LIBSPDM_TEST_CONTEXT_VERSION,
true,
Expand Down Expand Up @@ -191,7 +287,13 @@ void libspdm_run_test_harness(void *test_buffer, size_t test_buffer_size)
libspdm_test_requester_negotiate_algorithms_case3(&State);
libspdm_unit_test_group_teardown(&State);

/* V1.2 response*/
libspdm_unit_test_group_setup(&State);
libspdm_test_requester_negotiate_algorithms_case4(&State);
libspdm_unit_test_group_teardown(&State);

/* V1.3 response*/
libspdm_unit_test_group_setup(&State);
libspdm_test_requester_negotiate_algorithms_case5(&State);
libspdm_unit_test_group_teardown(&State);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/**
* Copyright Notice:
* Copyright 2021-2022 DMTF. All rights reserved.
* Copyright 2021-2024 DMTF. All rights reserved.
* License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
**/

Expand Down Expand Up @@ -358,6 +358,94 @@ void libspdm_test_responder_algorithms_case11(void **State)
spdm_test_context->test_buffer, &response_size, response);
}

void libspdm_test_responder_algorithms_case12(void **State)
{
libspdm_test_context_t *spdm_test_context;
libspdm_context_t *spdm_context;
size_t response_size;
uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];

spdm_test_context = *State;
spdm_context = spdm_test_context->spdm_context;
spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_CAPABILITIES;

spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_13 <<
SPDM_VERSION_NUMBER_SHIFT_BIT;
spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_CAPABILITIES;
spdm_context->local_context.algorithm.base_hash_algo = m_libspdm_use_hash_algo;
spdm_context->local_context.algorithm.base_asym_algo = m_libspdm_use_asym_algo;
spdm_context->local_context.algorithm.measurement_hash_algo = 0;
spdm_context->local_context.algorithm.measurement_spec = 0;
spdm_context->local_context.capability.flags = 0;
spdm_context->local_context.algorithm.other_params_support = 0;
spdm_context->local_context.algorithm.mel_spec = SPDM_MEL_SPECIFICATION_DMTF;
libspdm_reset_message_a(spdm_context);

spdm_context->connection_info.algorithm.other_params_support = SPDM_ALGORITHMS_MULTI_KEY_CONN;

/* Sub Case 1: MEL_CAP set 1*/
spdm_context->local_context.capability.flags |= SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MEL_CAP;

response_size = sizeof(response);
libspdm_get_response_algorithms(spdm_context, spdm_test_context->test_buffer_size,
spdm_test_context->test_buffer, &response_size, response);

/* Sub Case 2: MEL_CAP set 0*/
spdm_context->local_context.capability.flags = 0;
spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_CAPABILITIES;
libspdm_reset_message_a(spdm_context);

response_size = sizeof(response);
libspdm_get_response_algorithms(spdm_context, spdm_test_context->test_buffer_size,
spdm_test_context->test_buffer, &response_size, response);

spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_CAPABILITIES;
libspdm_reset_message_a(spdm_context);

spdm_context->local_context.algorithm.other_params_support = 0;
spdm_context->connection_info.capability.flags =
SPDM_GET_CAPABILITIES_REQUEST_FLAGS_MULTI_KEY_CAP_ONLY;

response_size = sizeof(response);
libspdm_get_response_algorithms(spdm_context, spdm_test_context->test_buffer_size,
spdm_test_context->test_buffer, &response_size, response);

spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_CAPABILITIES;
libspdm_reset_message_a(spdm_context);

spdm_context->local_context.algorithm.other_params_support = SPDM_ALGORITHMS_MULTI_KEY_CONN;
spdm_context->connection_info.capability.flags =
SPDM_GET_CAPABILITIES_REQUEST_FLAGS_MULTI_KEY_CAP_ONLY;

response_size = sizeof(response);
libspdm_get_response_algorithms(spdm_context, spdm_test_context->test_buffer_size,
spdm_test_context->test_buffer, &response_size, response);

spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_CAPABILITIES;
libspdm_reset_message_a(spdm_context);

spdm_context->local_context.algorithm.other_params_support = 0;
spdm_context->connection_info.capability.flags =
SPDM_GET_CAPABILITIES_REQUEST_FLAGS_MULTI_KEY_CAP_NEG;

response_size = sizeof(response);
libspdm_get_response_algorithms(spdm_context, spdm_test_context->test_buffer_size,
spdm_test_context->test_buffer, &response_size, response);


spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_CAPABILITIES;
libspdm_reset_message_a(spdm_context);

spdm_context->local_context.algorithm.other_params_support = SPDM_ALGORITHMS_MULTI_KEY_CONN;
spdm_context->connection_info.capability.flags =
SPDM_GET_CAPABILITIES_REQUEST_FLAGS_MULTI_KEY_CAP_NEG;

response_size = sizeof(response);
libspdm_get_response_algorithms(spdm_context, spdm_test_context->test_buffer_size,
spdm_test_context->test_buffer, &response_size, response);

}

libspdm_test_context_t libspdm_test_responder_context = {
LIBSPDM_TEST_CONTEXT_VERSION,
false,
Expand All @@ -366,8 +454,15 @@ libspdm_test_context_t libspdm_test_responder_context = {
void libspdm_run_test_harness(void *test_buffer, size_t test_buffer_size)
{
void *State;
spdm_message_header_t *spdm_request_header;
libspdm_setup_test_context(&libspdm_test_responder_context);

spdm_request_header = (spdm_message_header_t*)test_buffer;

if (spdm_request_header->request_response_code != SPDM_NEGOTIATE_ALGORITHMS) {
spdm_request_header->request_response_code = SPDM_NEGOTIATE_ALGORITHMS;
}

libspdm_test_responder_context.test_buffer = test_buffer;
libspdm_test_responder_context.test_buffer_size = test_buffer_size;

Expand Down Expand Up @@ -425,4 +520,8 @@ void libspdm_run_test_harness(void *test_buffer, size_t test_buffer_size)
libspdm_test_responder_algorithms_case11(&State);
libspdm_unit_test_group_teardown(&State);

/* V1.3 requester*/
libspdm_unit_test_group_setup(&State);
libspdm_test_responder_algorithms_case12(&State);
libspdm_unit_test_group_teardown(&State);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/**
* Copyright Notice:
* Copyright 2021-2022 DMTF. All rights reserved.
* Copyright 2021-2024 DMTF. All rights reserved.
* License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
**/

Expand Down Expand Up @@ -83,19 +83,30 @@ libspdm_test_context_t libspdm_test_responder_context = {
void libspdm_run_test_harness(void *test_buffer, size_t test_buffer_size)
{
void *State;
spdm_message_header_t *spdm_request_header;
libspdm_setup_test_context(&libspdm_test_responder_context);

spdm_request_header = (spdm_message_header_t*)test_buffer;

if (spdm_request_header->request_response_code != SPDM_GET_CAPABILITIES) {
spdm_request_header->request_response_code = SPDM_GET_CAPABILITIES;
}

libspdm_test_responder_context.test_buffer = test_buffer;
libspdm_test_responder_context.test_buffer_size = test_buffer_size;

libspdm_unit_test_group_setup(&State);

/* Success Case */
libspdm_unit_test_group_setup(&State);
libspdm_test_responder_capabilities_case1(&State);
libspdm_unit_test_group_teardown(&State);

/* connection_state Check*/
libspdm_unit_test_group_setup(&State);
libspdm_test_responder_capabilities_case2(&State);
libspdm_unit_test_group_teardown(&State);

/* response_state*/
libspdm_unit_test_group_setup(&State);
libspdm_test_responder_capabilities_case3(&State);

libspdm_unit_test_group_teardown(&State);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/**
* Copyright Notice:
* Copyright 2021-2022 DMTF. All rights reserved.
* Copyright 2021-2024 DMTF. All rights reserved.
* License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
**/

Expand Down Expand Up @@ -188,9 +188,15 @@ void libspdm_test_responder_certificate_case5(void **State)
void libspdm_run_test_harness(void *test_buffer, size_t test_buffer_size)
{
void *State;

spdm_message_header_t *spdm_request_header;
libspdm_setup_test_context(&m_libspdm_responder_certificate_test_context);

spdm_request_header = (spdm_message_header_t*)test_buffer;

if (spdm_request_header->request_response_code != SPDM_GET_CERTIFICATE) {
spdm_request_header->request_response_code = SPDM_GET_CERTIFICATE;
}

m_libspdm_responder_certificate_test_context.test_buffer = test_buffer;
m_libspdm_responder_certificate_test_context.test_buffer_size =
test_buffer_size;
Expand Down
Loading

0 comments on commit fe4918e

Please sign in to comment.