Skip to content

Commit

Permalink
Add unit tests and fuzz tests for set_key_pair_info
Browse files Browse the repository at this point in the history
Signed-off-by: Xiao <[email protected]>
  • Loading branch information
Xiaohanjlll committed Sep 12, 2024
1 parent f36ceda commit 2b4e2ea
Show file tree
Hide file tree
Showing 15 changed files with 747 additions and 13 deletions.
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1021,6 +1021,8 @@ else()
add_subdirectory(unit_test/fuzzing/test_responder/test_spdm_responder_measurement_extension_log)
add_subdirectory(unit_test/fuzzing/test_requester/test_spdm_requester_get_key_pair_info)
add_subdirectory(unit_test/fuzzing/test_responder/test_spdm_responder_key_pair_info)
add_subdirectory(unit_test/fuzzing/test_requester/test_spdm_requester_set_key_pair_info)
add_subdirectory(unit_test/fuzzing/test_responder/test_spdm_responder_set_key_pair_info_ack)
endif()

add_subdirectory(os_stub/cryptlib_null)
Expand Down
2 changes: 2 additions & 0 deletions unit_test/fuzzing/fuzzing_AFL.sh
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,8 @@ test_spdm_responder_measurement_extension_log
test_spdm_requester_get_measurement_extension_log
test_spdm_requester_get_key_pair_info
test_spdm_responder_key_pair_info
test_spdm_requester_set_key_pair_info
test_spdm_responder_set_key_pair_info_ack
)
for ((i=0;i<${#cmds[*]};i++))
do
Expand Down
2 changes: 2 additions & 0 deletions unit_test/fuzzing/fuzzing_AFLTurbo.sh
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,8 @@ test_spdm_responder_measurement_extension_log
test_spdm_requester_get_measurement_extension_log
test_spdm_requester_get_key_pair_info
test_spdm_responder_key_pair_info
test_spdm_requester_set_key_pair_info
test_spdm_responder_set_key_pair_info_ack
)

export FUZZ_START_TIME=`date +%Y-%m-%d_%H:%M:%S`
Expand Down
2 changes: 2 additions & 0 deletions unit_test/fuzzing/fuzzing_AFLplusplus.sh
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ test_spdm_responder_measurement_extension_log
test_spdm_requester_get_measurement_extension_log
test_spdm_requester_get_key_pair_info
test_spdm_responder_key_pair_info
test_spdm_requester_set_key_pair_info
test_spdm_responder_set_key_pair_info_ack
)

export FUZZ_START_TIME=`date +%Y-%m-%d_%H:%M:%S`
Expand Down
2 changes: 2 additions & 0 deletions unit_test/fuzzing/fuzzing_LibFuzzer.sh
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,8 @@ test_spdm_responder_measurement_extension_log
test_spdm_requester_get_measurement_extension_log
test_spdm_requester_get_key_pair_info
test_spdm_responder_key_pair_info
test_spdm_requester_set_key_pair_info
test_spdm_responder_set_key_pair_info_ack
)
object_parameters=()
cp -r $fuzzing_seeds ./
Expand Down
2 changes: 2 additions & 0 deletions unit_test/fuzzing/oss_fuzz.sh
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,8 @@ test_spdm_responder_measurement_extension_log
test_spdm_requester_get_measurement_extension_log
test_spdm_requester_get_key_pair_info
test_spdm_responder_key_pair_info
test_spdm_requester_set_key_pair_info
test_spdm_responder_set_key_pair_info_ack
)

for ((i=0;i<${#cmds[*]};i++))
Expand Down
2 changes: 2 additions & 0 deletions unit_test/fuzzing/run_initial_seed.sh
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ test_spdm_responder_measurement_extension_log
test_spdm_requester_get_measurement_extension_log
test_spdm_requester_get_key_pair_info
test_spdm_responder_key_pair_info
test_spdm_requester_set_key_pair_info
test_spdm_responder_set_key_pair_info_ack
)

flag=0
Expand Down
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
cmake_minimum_required(VERSION 3.5)

add_executable(test_spdm_requester_set_key_pair_info)

target_include_directories(test_spdm_requester_set_key_pair_info
PRIVATE
${LIBSPDM_DIR}/unit_test/fuzzing/test_requester/test_spdm_requester_set_key_pair_info
${LIBSPDM_DIR}/include
${LIBSPDM_DIR}/unit_test/include
${LIBSPDM_DIR}/unit_test/fuzzing/spdm_unit_fuzzing_common
${LIBSPDM_DIR}/os_stub/include
${LIBSPDM_DIR}/os_stub
)

if(TOOLCHAIN STREQUAL "KLEE")
target_include_directories(test_spdm_requester_set_key_pair_info
PRIVATE
$ENV{KLEE_SRC_PATH}/include
)
endif()

target_sources(test_spdm_requester_set_key_pair_info
PRIVATE
set_key_pair_info.c
${PROJECT_SOURCE_DIR}/unit_test/fuzzing/spdm_unit_fuzzing_common/common.c
${PROJECT_SOURCE_DIR}/unit_test/fuzzing/spdm_unit_fuzzing_common/toolchain_harness.c
${PROJECT_SOURCE_DIR}/unit_test/fuzzing/spdm_unit_fuzzing_common/algo.c
)

if((TOOLCHAIN STREQUAL "KLEE") OR (TOOLCHAIN STREQUAL "CBMC"))
target_link_libraries(test_spdm_requester_set_key_pair_info
PRIVATE
$<TARGET_OBJECTS:memlib>
$<TARGET_OBJECTS:debuglib>
$<TARGET_OBJECTS:spdm_requester_lib>
$<TARGET_OBJECTS:spdm_common_lib>
$<TARGET_OBJECTS:${CRYPTO_LIB_PATHS}>
$<TARGET_OBJECTS:rnglib>
$<TARGET_OBJECTS:platform_lib_null>
$<TARGET_OBJECTS:cryptlib_${CRYPTO}>
$<TARGET_OBJECTS:malloclib>
$<TARGET_OBJECTS:spdm_crypt_lib>
$<TARGET_OBJECTS:spdm_secured_message_lib>
$<TARGET_OBJECTS:spdm_transport_test_lib>
$<TARGET_OBJECTS:spdm_device_secret_lib_null>
)
else()
target_link_libraries(test_spdm_requester_set_key_pair_info
PRIVATE
memlib
debuglib
spdm_requester_lib
spdm_common_lib
${CRYPTO_LIB_PATHS}
rnglib
platform_lib_null
cryptlib_${CRYPTO}
malloclib
spdm_crypt_lib
spdm_crypt_ext_lib
spdm_secured_message_lib
spdm_transport_test_lib
spdm_device_secret_lib_null
)
endif()
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
/**
* Copyright Notice:
* Copyright 2024 DMTF. All rights reserved.
* License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
**/

#include "spdm_unit_fuzzing.h"
#include "toolchain_harness.h"
#include "internal/libspdm_requester_lib.h"

#if LIBSPDM_ENABLE_CAPABILITY_SET_KEY_PAIR_INFO_CAP

#define LIBSPDM_MAX_key_pair_info_SIZE 0x1000

uint8_t temp_buf[LIBSPDM_MAX_key_pair_info_SIZE];

size_t libspdm_get_max_buffer_size(void)
{
return LIBSPDM_MAX_SPDM_MSG_SIZE;
}

libspdm_return_t libspdm_device_send_message(void *spdm_context,
size_t request_size, const void *request,
uint64_t timeout)
{
return LIBSPDM_STATUS_SUCCESS;
}

libspdm_return_t libspdm_device_receive_message(void *spdm_context,
size_t *response_size,
void **response,
uint64_t timeout)
{
libspdm_test_context_t *spdm_test_context;
uint8_t *spdm_response;
size_t spdm_response_size;
size_t test_message_header_size;

spdm_test_context = libspdm_get_test_context();
test_message_header_size = LIBSPDM_TEST_TRANSPORT_HEADER_SIZE;
libspdm_zero_mem(temp_buf, sizeof(temp_buf));
spdm_response = (void *)((uint8_t *)temp_buf + test_message_header_size);
spdm_response_size = spdm_test_context->test_buffer_size;
if (spdm_response_size > sizeof(temp_buf) - test_message_header_size - LIBSPDM_TEST_ALIGNMENT) {
spdm_response_size = sizeof(temp_buf) - test_message_header_size - LIBSPDM_TEST_ALIGNMENT;
}
libspdm_copy_mem((uint8_t *)temp_buf + test_message_header_size,
sizeof(temp_buf) - test_message_header_size,
spdm_test_context->test_buffer,
spdm_response_size);

libspdm_transport_test_encode_message(spdm_context, NULL, false, false,
spdm_response_size,
spdm_response, response_size, response);

return LIBSPDM_STATUS_SUCCESS;
}

void libspdm_test_requester_set_key_pair_info(void **State)
{
libspdm_test_context_t *spdm_test_context;
libspdm_context_t *spdm_context;

uint8_t key_pair_id;
uint8_t operation;
uint16_t desired_key_usage;
uint32_t desired_asym_algo;
uint8_t desired_assoc_cert_slot_mask;


spdm_test_context = *State;
spdm_context = spdm_test_context->spdm_context;
spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_13 <<
SPDM_VERSION_NUMBER_SHIFT_BIT;

spdm_context->connection_info.connection_state =
LIBSPDM_CONNECTION_STATE_NEGOTIATED;
spdm_context->connection_info.capability.flags |=
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_SET_KEY_PAIR_INFO_CAP;

key_pair_id = 1;
operation = SPDM_SET_KEY_PAIR_INFO_ERASE_OPERATION;
desired_key_usage = 0;
desired_asym_algo = 0;
desired_assoc_cert_slot_mask = 0;
libspdm_set_key_pair_info(spdm_context, NULL, key_pair_id,
operation, desired_key_usage, desired_asym_algo,
desired_assoc_cert_slot_mask);

key_pair_id = 1;
operation = SPDM_SET_KEY_PAIR_INFO_CHANGE_OPERATION;
desired_key_usage = 0;
desired_asym_algo = 0;
desired_assoc_cert_slot_mask = 0;
libspdm_set_key_pair_info(spdm_context, NULL, key_pair_id,
operation, desired_key_usage, desired_asym_algo,
desired_assoc_cert_slot_mask);


key_pair_id = 1;
operation = SPDM_SET_KEY_PAIR_INFO_GENERATE_OPERATION;
desired_key_usage = 0;
desired_asym_algo = 0;
desired_assoc_cert_slot_mask = 0;
libspdm_set_key_pair_info(spdm_context, NULL, key_pair_id,
operation, desired_key_usage, desired_asym_algo,
desired_assoc_cert_slot_mask);

}

libspdm_test_context_t m_libspdm_requester_set_key_pair_info_test_context = {
LIBSPDM_TEST_CONTEXT_VERSION,
true,
libspdm_device_send_message,
libspdm_device_receive_message,
};


void libspdm_run_test_harness(void *test_buffer, size_t test_buffer_size)
{
void *State;

libspdm_setup_test_context(&m_libspdm_requester_set_key_pair_info_test_context);

m_libspdm_requester_set_key_pair_info_test_context.test_buffer = test_buffer;
m_libspdm_requester_set_key_pair_info_test_context.test_buffer_size =
test_buffer_size;

libspdm_unit_test_group_setup(&State);
libspdm_test_requester_set_key_pair_info(&State);
libspdm_unit_test_group_teardown(&State);
}
#else
size_t libspdm_get_max_buffer_size(void)
{
return 0;
}

void libspdm_run_test_harness(void *test_buffer, size_t test_buffer_size){

}
#endif /* LIBSPDM_ENABLE_CAPABILITY_SET_KEY_PAIR_INFO_CAP*/
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
cmake_minimum_required(VERSION 3.5)

add_executable(test_spdm_responder_set_key_pair_info_ack)

target_include_directories(test_spdm_responder_set_key_pair_info_ack
PRIVATE
${LIBSPDM_DIR}/unit_test/fuzzing/test_responder/test_spdm_responder_set_key_pair_info_ack
${LIBSPDM_DIR}/include
${LIBSPDM_DIR}/unit_test/include
${LIBSPDM_DIR}/unit_test/fuzzing/spdm_unit_fuzzing_common
${LIBSPDM_DIR}/os_stub/spdm_device_secret_lib_sample
${LIBSPDM_DIR}/os_stub/include
${LIBSPDM_DIR}/os_stub
)

if(TOOLCHAIN STREQUAL "KLEE")
target_include_directories(test_spdm_responder_set_key_pair_info_ack
PRIVATE
$ENV{KLEE_SRC_PATH}/include
)
endif()

target_sources(test_spdm_responder_set_key_pair_info_ack
PRIVATE
set_key_pair_info_ack.c
${PROJECT_SOURCE_DIR}/unit_test/fuzzing/spdm_unit_fuzzing_common/common.c
${PROJECT_SOURCE_DIR}/unit_test/fuzzing/spdm_unit_fuzzing_common/toolchain_harness.c
${PROJECT_SOURCE_DIR}/unit_test/fuzzing/spdm_unit_fuzzing_common/algo.c
)

if((TOOLCHAIN STREQUAL "KLEE") OR (TOOLCHAIN STREQUAL "CBMC"))
target_link_libraries(test_spdm_responder_set_key_pair_info_ack
PRIVATE
$<TARGET_OBJECTS:memlib>
$<TARGET_OBJECTS:debuglib>
$<TARGET_OBJECTS:spdm_responder_lib>
$<TARGET_OBJECTS:spdm_common_lib>
$<TARGET_OBJECTS:${CRYPTO_LIB_PATHS}>
$<TARGET_OBJECTS:rnglib>
$<TARGET_OBJECTS:cryptlib_${CRYPTO}>
$<TARGET_OBJECTS:malloclib>
$<TARGET_OBJECTS:spdm_crypt_lib>
$<TARGET_OBJECTS:spdm_secured_message_lib>
$<TARGET_OBJECTS:spdm_transport_test_lib>
$<TARGET_OBJECTS:platform_lib_null>
$<TARGET_OBJECTS:spdm_device_secret_lib_sample>
)
else()
target_link_libraries(test_spdm_responder_set_key_pair_info_ack
PRIVATE
memlib
debuglib
spdm_responder_lib
spdm_common_lib
${CRYPTO_LIB_PATHS}
rnglib
cryptlib_${CRYPTO}
malloclib
spdm_crypt_lib
spdm_crypt_ext_lib
spdm_secured_message_lib
spdm_transport_test_lib
platform_lib_null
spdm_device_secret_lib_sample
)
endif()
Loading

0 comments on commit 2b4e2ea

Please sign in to comment.