Skip to content

Commit

Permalink
[#344] Initial TM/AOS Unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
rjbrown6 committed Nov 22, 2024
1 parent b297e50 commit 8434c86
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 82 deletions.
33 changes: 18 additions & 15 deletions src/core/crypto_aos.c
Original file line number Diff line number Diff line change
Expand Up @@ -356,24 +356,27 @@ int32_t Crypto_AOS_ApplySecurity(uint8_t *pTfBuffer)
printf(KYEL "FECF Location is: %d\n" RESET, current_managed_parameters_struct.max_frame_size - 2);
}
#endif

// Get Key
crypto_key_t *ekp = NULL;
ekp = key_if->get_key(sa_ptr->ekid);
if (ekp == NULL)
{
status = CRYPTO_LIB_ERR_KEY_ID_ERROR;
mc_if->mc_log(status);
return status;
}

crypto_key_t *akp = NULL;
akp = key_if->get_key(sa_ptr->akid);
if (akp == NULL)

if (crypto_config.key_type != KEY_TYPE_KMC)
{
status = CRYPTO_LIB_ERR_KEY_ID_ERROR;
mc_if->mc_log(status);
return status;
// Get Key
ekp = key_if->get_key(sa_ptr->ekid);
if (ekp == NULL)
{
status = CRYPTO_LIB_ERR_KEY_ID_ERROR;
mc_if->mc_log(status);
return status;
}

akp = key_if->get_key(sa_ptr->akid);
if (akp == NULL)
{
status = CRYPTO_LIB_ERR_KEY_ID_ERROR;
mc_if->mc_log(status);
return status;
}
}

/**
Expand Down
4 changes: 1 addition & 3 deletions src/core/crypto_tc.c
Original file line number Diff line number Diff line change
Expand Up @@ -411,14 +411,13 @@ int32_t Crypto_TC_Do_Encrypt_PLAINTEXT(uint8_t sa_service_type, SecurityAssociat
return status;
}
}
printf("here\n");
status = cryptography_if->cryptography_aead_encrypt(
&p_new_enc_frame[index], // ciphertext output
(size_t)tf_payload_len, // length of data
(uint8_t *)(p_in_frame + TC_FRAME_HEADER_SIZE + segment_hdr_len), // plaintext input
(size_t)tf_payload_len, // in data length
&(ekp->value[0]), // Key
32, // Length of key derived from sa_ptr key_ref
Crypto_Get_ECS_Algo_Keylen(sa_ptr->ecs), // Length of key derived from sa_ptr key_ref
sa_ptr, // SA (for key reference)
sa_ptr->iv, // IV
sa_ptr->iv_len, // IV Length
Expand All @@ -430,7 +429,6 @@ int32_t Crypto_TC_Do_Encrypt_PLAINTEXT(uint8_t sa_service_type, SecurityAssociat
&sa_ptr->ecs, // encryption cipher
&sa_ptr->acs, // authentication cipher
cam_cookies);
printf("here1\n");
}
else // non aead algorithm
{
Expand Down
11 changes: 7 additions & 4 deletions src/sa/mariadb/sa_interface_mariadb.template.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ static int32_t sa_get_from_spi(uint16_t spi, SecurityAssociation_t **security_as
int32_t status = CRYPTO_LIB_SUCCESS;

char spi_query[2048];
char table[25];
char table[25] = {""};

status = parse_table_from_gvcid(&table[0]);
if (status == CRYPTO_LIB_SUCCESS)
Expand All @@ -204,7 +204,7 @@ static int32_t sa_get_operational_sa_from_gvcid(uint8_t tfvn, uint16_t scid, uin
int32_t status = CRYPTO_LIB_SUCCESS;

char gvcid_query[2048];
char table[25];
char table[25] = {""};

status = parse_table_from_gvcid(&table[0]);
if (status == CRYPTO_LIB_SUCCESS)
Expand Down Expand Up @@ -235,7 +235,7 @@ static int32_t sa_save_sa(SecurityAssociation_t *sa)
char *arsn_h = malloc(sa->arsn_len * 2 + 1);
convert_byte_array_to_hexstring(sa->arsn, sa->arsn_len, arsn_h);

char table[25];
char table[25] = {""};
status = parse_table_from_gvcid(&table[0]);
if (status == CRYPTO_LIB_SUCCESS)
{
Expand Down Expand Up @@ -603,7 +603,7 @@ static int32_t finish_with_error(MYSQL **con_loc, int err)

static int32_t parse_table_from_gvcid(char* table)
{
int32_t status = 0;
int32_t status = CRYPTO_LIB_SUCCESS;
if (current_managed_parameters_struct.has_fecf == TC_HAS_FECF || current_managed_parameters_struct.has_fecf == TC_NO_FECF)
{
//table = MARIADB_TC_TABLE_NAME;
Expand All @@ -624,5 +624,8 @@ static int32_t parse_table_from_gvcid(char* table)
table = table;
status = CRYPTO_LIB_ERROR;
}
#ifdef DEBUG
printf("Current_man_params.has_fecf: %d\n", current_managed_parameters_struct.has_fecf);
#endif
return status;
}
44 changes: 26 additions & 18 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -85,40 +85,48 @@ if((KMC_MDB_DB OR KMC_MDB_RH))
add_test(NAME UT_TC_KMC
COMMAND ${PROJECT_BINARY_DIR}/bin/ut_tc_kmc
WORKING_DIRECTORY ${PROJECT_TEST_DIR})

add_test(NAME UT_TM_KMC
COMMAND ${PROJECT_BINARY_DIR}/bin/ut_tm_kmc
WORKING_DIRECTORY ${PROJECT_TEST_DIR})

add_test(NAME UT_AOS_KMC
COMMAND ${PROJECT_BINARY_DIR}/bin/ut_aos_kmc
WORKING_DIRECTORY ${PROJECT_TEST_DIR})

#endif()
# add_test(NAME UT_SADB_ERR_CASES_KMC_CRYPTO
# COMMAND ${PROJECT_BINARY_DIR}/bin/ut_sa_err_cases_kmc_crypto
# WORKING_DIRECTORY ${PROJECT_TEST_DIR})

add_test(NAME UT_MYSQL_TLS_CONNECTION
COMMAND ${PROJECT_BINARY_DIR}/bin/ut_mysql_tls_connection
WORKING_DIRECTORY ${PROJECT_TEST_DIR})
# add_test(NAME UT_MYSQL_TLS_CONNECTION
# COMMAND ${PROJECT_BINARY_DIR}/bin/ut_mysql_tls_connection
# WORKING_DIRECTORY ${PROJECT_TEST_DIR})

add_test(NAME UT_MYSQL_M_TLS_CONNECTION
COMMAND ${PROJECT_BINARY_DIR}/bin/ut_mysql_m_tls_connection
WORKING_DIRECTORY ${PROJECT_TEST_DIR})
# add_test(NAME UT_MYSQL_M_TLS_CONNECTION
# COMMAND ${PROJECT_BINARY_DIR}/bin/ut_mysql_m_tls_connection
# WORKING_DIRECTORY ${PROJECT_TEST_DIR})

add_test(NAME UT_MARIADB
COMMAND ${PROJECT_BINARY_DIR}/bin/ut_mariadb
WORKING_DIRECTORY ${PROJECT_TEST_DIR})
# add_test(NAME UT_MARIADB
# COMMAND ${PROJECT_BINARY_DIR}/bin/ut_mariadb
# WORKING_DIRECTORY ${PROJECT_TEST_DIR})

add_test(NAME UT_KMC_CRYPTO
COMMAND ${PROJECT_BINARY_DIR}/bin/ut_kmc_crypto
WORKING_DIRECTORY ${PROJECT_TEST_DIR})
# add_test(NAME UT_KMC_CRYPTO
# COMMAND ${PROJECT_BINARY_DIR}/bin/ut_kmc_crypto
# WORKING_DIRECTORY ${PROJECT_TEST_DIR})

add_test(NAME UT_KMC_CRYPTO_WITH_MTLS_SADB
COMMAND ${PROJECT_BINARY_DIR}/bin/ut_kmc_crypto_with_mtls_sadb
WORKING_DIRECTORY ${PROJECT_TEST_DIR})
# add_test(NAME UT_KMC_CRYPTO_WITH_MTLS_SADB
# COMMAND ${PROJECT_BINARY_DIR}/bin/ut_kmc_crypto_with_mtls_sadb
# WORKING_DIRECTORY ${PROJECT_TEST_DIR})

# This Test cannot yet be accomplished. Need CAM
#add_test(NAME UT_KMC_CRYPTO_CAM
# COMMAND ${PROJECT_BINARY_DIR}/bin/ut_kmc_crypto_cam
# WORKING_DIRECTORY ${PROJECT_TEST_DIR})

add_test(NAME UT_KMC_CRYPTO_AUTH_ONLY
COMMAND ${PROJECT_BINARY_DIR}/bin/ut_kmc_crypto_auth_only
WORKING_DIRECTORY ${PROJECT_TEST_DIR})
# add_test(NAME UT_KMC_CRYPTO_AUTH_ONLY
# COMMAND ${PROJECT_BINARY_DIR}/bin/ut_kmc_crypto_auth_only
# WORKING_DIRECTORY ${PROJECT_TEST_DIR})
endif()

# if(TEST_ENC)
Expand Down
47 changes: 5 additions & 42 deletions test/kmc/ut_tc_kmc.c
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ void MDB_DB_RESET()
}

printf("Truncating Tables\n");
char *query = "TRUNCATE TABLE security_associations\n";
char *query = "TRUNCATE TABLE TC_security_associations\n";
if (mysql_real_query(con, query, strlen(query)))
{ // query should be NUL terminated!
printf("Failed to Truncate Table\n");
Expand Down Expand Up @@ -150,8 +150,9 @@ void MDB_DB_RESET()
/**
* @brief Unit Test: Nominal Encryption CBC KMC
**/
UTEST(TC_APPLY_SECURITY, HAPPY_PATH_ENC_CBC_KMC)
UTEST(TC_APPLY_KMC, HAPPY_PATH_ENC_TC_CBC_KMC)
{
remove("sa_save_file.bin");
reload_db();
// Setup & Initialize CryptoLib
Crypto_Config_CryptoLib(KEY_TYPE_KMC, MC_TYPE_DISABLED, SA_TYPE_MARIADB, CRYPTOGRAPHY_TYPE_KMCCRYPTO,
Expand All @@ -163,62 +164,24 @@ UTEST(TC_APPLY_SECURITY, HAPPY_PATH_ENC_CBC_KMC)
Crypto_Config_Kmc_Crypto_Service("https", "itc.kmc.nasa.gov", 8443, "crypto-service", "/certs/ammos-ca-bundle.crt",
NULL, CRYPTO_TRUE, CLIENT_CERTIFICATE, "PEM", CLIENT_CERTIFICATE_KEY, NULL, NULL);
GvcidManagedParameters_t TC_UT_Managed_Parameters0 = {
0, 0x0003, 0, TC_HAS_FECF, AOS_FHEC_NA, AOS_IZ_NA, 0, TC_HAS_SEGMENT_HDRS, 1024, AOS_NO_OCF, 1};
0, 0x0003, 0, TC_HAS_FECF, AOS_FHEC_NA, AOS_IZ_NA, 0, TC_HAS_SEGMENT_HDRS, 1024, TC_OCF_NA, 1};
Crypto_Config_Add_Gvcid_Managed_Parameters(TC_UT_Managed_Parameters0);
GvcidManagedParameters_t TC_UT_Managed_Parameters1 = {
0, 0x0003, 1, TC_HAS_FECF, AOS_FHEC_NA, AOS_IZ_NA, 0, TC_HAS_SEGMENT_HDRS, 1024, AOS_NO_OCF, 1};
Crypto_Config_Add_Gvcid_Managed_Parameters(TC_UT_Managed_Parameters1);
GvcidManagedParameters_t TC_UT_Managed_Parameters2 = {
0, 0x0003, 2, TC_HAS_FECF, AOS_FHEC_NA, AOS_IZ_NA, 0, TC_HAS_SEGMENT_HDRS, 1024, AOS_NO_OCF, 1};
Crypto_Config_Add_Gvcid_Managed_Parameters(TC_UT_Managed_Parameters2);
GvcidManagedParameters_t TC_UT_Managed_Parameters3 = {
0, 0x0003, 3, TC_HAS_FECF, AOS_FHEC_NA, AOS_IZ_NA, 0, TC_HAS_SEGMENT_HDRS, 1024, AOS_NO_OCF, 1};
Crypto_Config_Add_Gvcid_Managed_Parameters(TC_UT_Managed_Parameters3);
// Crypto_Config_Add_Gvcid_Managed_Parameter(0, 0x0003, 0, TC_HAS_FECF, TC_HAS_SEGMENT_HDRS, 1024, AOS_FHEC_NA,
// AOS_IZ_NA, 0); Crypto_Config_Add_Gvcid_Managed_Parameter(0, 0x0003, 1, TC_HAS_FECF, TC_HAS_SEGMENT_HDRS, 1024,
// AOS_FHEC_NA, AOS_IZ_NA, 0); Crypto_Config_Add_Gvcid_Managed_Parameter(0, 0x0003, 2, TC_HAS_FECF,
// TC_HAS_SEGMENT_HDRS, 1024, AOS_FHEC_NA, AOS_IZ_NA, 0); Crypto_Config_Add_Gvcid_Managed_Parameter(0, 0x0003, 3,
// TC_HAS_FECF, TC_HAS_SEGMENT_HDRS, 1024, AOS_FHEC_NA, AOS_IZ_NA, 0);

int32_t return_val = Crypto_Init();
ASSERT_EQ(CRYPTO_LIB_SUCCESS, return_val);

char *raw_tc_sdls_ping_h = "20030015000080d2c70008197f0b00310000b1fe3128";
char *raw_tc_sdls_ping_b = NULL;
int raw_tc_sdls_ping_len = 0;
// SaInterface sa_if = get_sa_interface_inmemory();

hex_conversion(raw_tc_sdls_ping_h, &raw_tc_sdls_ping_b, &raw_tc_sdls_ping_len);

uint8_t *ptr_enc_frame = NULL;
uint16_t enc_frame_len = 0;

// SecurityAssociation_t* test_association = malloc(sizeof(SecurityAssociation_t) * sizeof(uint8_t));
// Expose the SADB Security Association for test edits.
// sa_if->sa_get_from_spi(1, &test_association);
// test_association->sa_state = SA_NONE;
// sa_if->sa_get_from_spi(11, &test_association);
// test_association->arsn_len = 0;
// test_association->shsnf_len = 0;
// test_association->ast = 0;
// test_association->stmacf_len = 0;
// test_association->sa_state = SA_OPERATIONAL;
// sa_if->sa_get_from_spi(11, &test_association);
return_val =
Crypto_TC_ApplySecurity((uint8_t *)raw_tc_sdls_ping_b, raw_tc_sdls_ping_len, &ptr_enc_frame, &enc_frame_len);

char *truth_data_h = "2003002A0000000B00000000000000000000000000000000025364F9BC3344AF359DA06CA886746F59A0AB";
uint8_t *truth_data_b = NULL;
int truth_data_l = 0;

hex_conversion(truth_data_h, (char **)&truth_data_b, &truth_data_l);
// printf("Encrypted Frame:\n");
for (int i = 0; i < enc_frame_len; i++)
{
printf("%02x -> %02x \n", ptr_enc_frame[i], truth_data_b[i]);
//ASSERT_EQ(ptr_enc_frame[i], truth_data_b[i]);
}
// printf("\n");

Crypto_Shutdown();
free(raw_tc_sdls_ping_b);
free(ptr_enc_frame);
Expand Down

0 comments on commit 8434c86

Please sign in to comment.