Skip to content

Commit

Permalink
Update test case 2 (Capabilities) to support SPDM 1.3
Browse files Browse the repository at this point in the history
This updates test case 2 to check for and confirm report
of SPDM 1.3 in GET_CAPABILITIES. All tests are the same
at this time, and the test body for 1.2 has been made common
with checks to toggle support for 1.3.

This does not validate any new capabilities, such as the supported
algorithms block, added in SPDM 1.3.

Signed-off-by: Will Marone <[email protected]>
  • Loading branch information
wmaroneAMD committed Jan 13, 2025
1 parent c61591d commit 078d53b
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 26 deletions.
1 change: 1 addition & 0 deletions include/library/spdm_responder_conformance_test_lib.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ void spdm_responder_conformance_test (void *spdm_context,
#define SPDM_RESPONDER_TEST_CASE_CAPABILITIES_INVALID_REQUEST 4
#define SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_12 5
#define SPDM_RESPONDER_TEST_CASE_CAPABILITIES_UNEXPECTED_REQUEST_NON_IDENTICAL 6
#define SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_13 7

#define SPDM_RESPONDER_TEST_GROUP_ALGORITHMS 3
#define SPDM_RESPONDER_TEST_CASE_ALGORITHMS_SUCCESS_10 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#define SPDM_TEST_VERSION_MASK_V10 0x00000001
#define SPDM_TEST_VERSION_MASK_V11 0x00000002
#define SPDM_TEST_VERSION_MASK_V12 0x00000004
#define SPDM_TEST_VERSION_MASK_V13 0x00000008

#define SPDM_TEST_SCRATCH_BUFFER_SIZE 0x1000

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,12 +100,21 @@ bool spdm_test_case_capabilities_setup_version_all (void *test_context)
test_buffer->support_version_bitmask = 0;
for (index = 0; index < test_buffer->version_number_entry_count; index++) {
version = test_buffer->version_number_entry[index] >> SPDM_VERSION_NUMBER_SHIFT_BIT;
if (version == SPDM_MESSAGE_VERSION_10) {
test_buffer->support_version_bitmask |= SPDM_TEST_VERSION_MASK_V10;
} else if (version == SPDM_MESSAGE_VERSION_11) {
test_buffer->support_version_bitmask |= SPDM_TEST_VERSION_MASK_V11;
} else if (version == SPDM_MESSAGE_VERSION_12) {
test_buffer->support_version_bitmask |= SPDM_TEST_VERSION_MASK_V12;
switch (version) {
case SPDM_MESSAGE_VERSION_10:
test_buffer->support_version_bitmask |= SPDM_TEST_VERSION_MASK_V10;
break;
case SPDM_MESSAGE_VERSION_11:
test_buffer->support_version_bitmask |= SPDM_TEST_VERSION_MASK_V11;
break;
case SPDM_MESSAGE_VERSION_12:
test_buffer->support_version_bitmask |= SPDM_TEST_VERSION_MASK_V12;
break;
case SPDM_MESSAGE_VERSION_13:
test_buffer->support_version_bitmask |= SPDM_TEST_VERSION_MASK_V13;
break;
default:
return false;
}
}

Expand Down Expand Up @@ -138,6 +147,13 @@ bool spdm_test_case_capabilities_setup_version_12 (void *test_context)
SPDM_VERSION_NUMBER_SHIFT_BIT);
}

bool spdm_test_case_capabilities_setup_version_13 (void *test_context)
{
return spdm_test_case_capabilities_setup_version (test_context,
SPDM_MESSAGE_VERSION_13 <<
SPDM_VERSION_NUMBER_SHIFT_BIT);
}

void spdm_test_case_capabilities_success_10 (void *test_context)
{
spdm_test_context_t *spdm_test_context;
Expand Down Expand Up @@ -761,7 +777,7 @@ void spdm_test_case_capabilities_invalid_request (void *test_context)
}
}

void spdm_test_case_capabilities_success_12 (void *test_context)
void spdm_test_case_capabilities_success_12_13 (void *test_context, uint32_t spdm_version)
{
spdm_test_context_t *spdm_test_context;
void *spdm_context;
Expand All @@ -774,14 +790,27 @@ void spdm_test_case_capabilities_success_12 (void *test_context)
common_test_result_t test_result;
spdm_capabilities_test_buffer_t *test_buffer;
uint32_t flags;
uint32_t test_version = 0;
uint32_t message_version = spdm_version >> SPDM_VERSION_NUMBER_SHIFT_BIT;

switch (message_version) {
case SPDM_MESSAGE_VERSION_12:
test_version = SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_12;
break;
case SPDM_MESSAGE_VERSION_13:
test_version = SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_13;
break;
default:
return;
}

spdm_test_context = test_context;
spdm_context = spdm_test_context->spdm_context;
test_buffer = (void *)spdm_test_context->test_scratch_buffer;
LIBSPDM_ASSERT (spdm_test_context->test_scratch_buffer_size == sizeof(uint32_t) * 2);

libspdm_zero_mem(&spdm_request, sizeof(spdm_request));
spdm_request.header.spdm_version = SPDM_MESSAGE_VERSION_12;
spdm_request.header.spdm_version = message_version;
spdm_request_size = sizeof(spdm_request);
spdm_request.header.request_response_code = SPDM_GET_CAPABILITIES;
spdm_request.header.param1 = 0;
Expand Down Expand Up @@ -811,7 +840,7 @@ void spdm_test_case_capabilities_success_12 (void *test_context)
if (LIBSPDM_STATUS_IS_ERROR(status)) {
common_test_record_test_assertion (
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES,
SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_12, COMMON_TEST_ID_END,
test_version, COMMON_TEST_ID_END,
COMMON_TEST_RESULT_NOT_TESTED, "send/receive failure");
return;
}
Expand All @@ -822,7 +851,7 @@ void spdm_test_case_capabilities_success_12 (void *test_context)
test_result = COMMON_TEST_RESULT_FAIL;
}
common_test_record_test_assertion (
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES, SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_12, 1,
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES, test_version, 1,
test_result, "response size - %d", spdm_response_size);
if (test_result == COMMON_TEST_RESULT_FAIL) {
return;
Expand All @@ -834,19 +863,19 @@ void spdm_test_case_capabilities_success_12 (void *test_context)
test_result = COMMON_TEST_RESULT_FAIL;
}
common_test_record_test_assertion (
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES, SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_12, 2,
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES, test_version, 2,
test_result, "response code - 0x%02x", spdm_response->header.request_response_code);
if (test_result == COMMON_TEST_RESULT_FAIL) {
return;
}

if (spdm_response->header.spdm_version == SPDM_MESSAGE_VERSION_12) {
if (spdm_response->header.spdm_version == message_version) {
test_result = COMMON_TEST_RESULT_PASS;
} else {
test_result = COMMON_TEST_RESULT_FAIL;
}
common_test_record_test_assertion (
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES, SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_12, 3,
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES, test_version, 3,
test_result, "response version - 0x%02x", spdm_response->header.spdm_version);
if (test_result == COMMON_TEST_RESULT_FAIL) {
return;
Expand All @@ -860,7 +889,7 @@ void spdm_test_case_capabilities_success_12 (void *test_context)
test_result = COMMON_TEST_RESULT_FAIL;
}
common_test_record_test_assertion (
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES, SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_12, 4,
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES, test_version, 4,
test_result, "response flags - 0x%08x", spdm_response->flags);

if ((flags & SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_ENCRYPT_CAP) != 0) {
Expand All @@ -872,7 +901,7 @@ void spdm_test_case_capabilities_success_12 (void *test_context)
}
common_test_record_test_assertion (
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES,
SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_12, 5,
test_version, 5,
test_result, "response flags - 0x%08x", spdm_response->flags);
}

Expand All @@ -885,7 +914,7 @@ void spdm_test_case_capabilities_success_12 (void *test_context)
}
common_test_record_test_assertion (
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES,
SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_12, 6,
test_version, 6,
test_result, "response flags - 0x%08x", spdm_response->flags);
}

Expand All @@ -898,7 +927,7 @@ void spdm_test_case_capabilities_success_12 (void *test_context)
}
common_test_record_test_assertion (
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES,
SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_12, 7,
test_version, 7,
test_result, "response flags - 0x%08x", spdm_response->flags);
}

Expand All @@ -909,7 +938,7 @@ void spdm_test_case_capabilities_success_12 (void *test_context)
test_result = COMMON_TEST_RESULT_FAIL;
}
common_test_record_test_assertion (
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES, SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_12, 8,
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES, test_version, 8,
test_result, "response flags - 0x%08x", spdm_response->flags);

if ((flags & SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_PSK_CAP) != 0) {
Expand All @@ -921,7 +950,7 @@ void spdm_test_case_capabilities_success_12 (void *test_context)
}
common_test_record_test_assertion (
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES,
SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_12, 9,
test_version, 9,
test_result, "response flags - 0x%08x", spdm_response->flags);
}

Expand All @@ -933,7 +962,7 @@ void spdm_test_case_capabilities_success_12 (void *test_context)
}
common_test_record_test_assertion (
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES,
SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_12, 10,
test_version, 10,
test_result, "response flags - 0x%08x", spdm_response->flags);
}

Expand All @@ -945,7 +974,7 @@ void spdm_test_case_capabilities_success_12 (void *test_context)
}
common_test_record_test_assertion (
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES,
SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_12, 11,
test_version, 11,
test_result, "response flags - 0x%08x", spdm_response->flags);
}

Expand All @@ -957,7 +986,7 @@ void spdm_test_case_capabilities_success_12 (void *test_context)
}
common_test_record_test_assertion (
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES,
SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_12, 12,
test_version, 12,
test_result, "response flags - 0x%08x", spdm_response->flags);
}

Expand All @@ -967,7 +996,7 @@ void spdm_test_case_capabilities_success_12 (void *test_context)
test_result = COMMON_TEST_RESULT_FAIL;
}
common_test_record_test_assertion (
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES, SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_12,
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES, test_version,
13,
test_result, "response data_transfer_size - 0x%08x", spdm_response->data_transfer_size);

Expand All @@ -977,7 +1006,7 @@ void spdm_test_case_capabilities_success_12 (void *test_context)
test_result = COMMON_TEST_RESULT_FAIL;
}
common_test_record_test_assertion (
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES, SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_12,
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES, test_version,
14,
test_result, "response max_spdm_msg_size - 0x%08x, data_transfer_size - 0x%08x",
spdm_response->max_spdm_msg_size, spdm_response->data_transfer_size);
Expand All @@ -993,10 +1022,15 @@ void spdm_test_case_capabilities_success_12 (void *test_context)
}
common_test_record_test_assertion (
SPDM_RESPONDER_TEST_GROUP_CAPABILITIES,
SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_12, 15,
test_version, 15,
test_result, "response flags - 0x%08x", spdm_response->flags);
}
}
void spdm_test_case_capabilities_success_12 (void *test_context)
{
spdm_test_case_capabilities_success_12_13(test_context, SPDM_MESSAGE_VERSION_12 << SPDM_VERSION_NUMBER_SHIFT_BIT);
}


void spdm_test_case_capabilities_unexpected_non_identical (void *test_context)
{
Expand All @@ -1021,7 +1055,10 @@ void spdm_test_case_capabilities_unexpected_non_identical (void *test_context)
offsetof(spdm_capabilities_test_buffer_t, version_number_entry) +
sizeof(spdm_version_number_t) * test_buffer->version_number_entry_count);

if ((test_buffer->support_version_bitmask & SPDM_TEST_VERSION_MASK_V12) != 0) {
if ((test_buffer->support_version_bitmask & SPDM_TEST_VERSION_MASK_V13) != 0) {
version = SPDM_MESSAGE_VERSION_13;
spdm_request_size = sizeof(spdm_request);
} else if ((test_buffer->support_version_bitmask & SPDM_TEST_VERSION_MASK_V12) != 0) {
version = SPDM_MESSAGE_VERSION_12;
spdm_request_size = sizeof(spdm_request);
} else if ((test_buffer->support_version_bitmask & SPDM_TEST_VERSION_MASK_V11) != 0) {
Expand Down Expand Up @@ -1184,6 +1221,11 @@ void spdm_test_case_capabilities_unexpected_non_identical (void *test_context)
}
}

void spdm_test_case_capabilities_success_13 (void *test_context)
{
spdm_test_case_capabilities_success_12_13(test_context, SPDM_MESSAGE_VERSION_13 << SPDM_VERSION_NUMBER_SHIFT_BIT);
}

common_test_case_t m_spdm_test_group_capabilities[] = {
{SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_10,
"spdm_test_case_capabilities_success_10",
Expand Down Expand Up @@ -1215,5 +1257,10 @@ common_test_case_t m_spdm_test_group_capabilities[] = {
spdm_test_case_capabilities_unexpected_non_identical,
spdm_test_case_capabilities_setup_version_all,
spdm_test_case_common_teardown},
{SPDM_RESPONDER_TEST_CASE_CAPABILITIES_SUCCESS_13,
"spdm_test_case_capabilities_success_13",
spdm_test_case_capabilities_success_13,
spdm_test_case_capabilities_setup_version_13,
spdm_test_case_common_teardown},
{COMMON_TEST_ID_END, NULL, NULL},
};

0 comments on commit 078d53b

Please sign in to comment.