From f9a6b819c9f234ea44657da1a7c9c3d1ddca1ed5 Mon Sep 17 00:00:00 2001 From: Krzysztof Jackiewicz Date: Thu, 1 Jun 2023 15:20:43 +0200 Subject: [PATCH] CKM: Adjust tests to AliasInfo changes Change-Id: Id1c3b12fdc7bdba4fd73a49c9ae9ad411635fb8d --- src/ckm/ckm-common.cpp | 41 +++++++++--------------- src/ckm/ckm-common.h | 16 +++++++--- src/ckm/privileged/system-db.cpp | 18 +++++------ src/ckm/unprivileged/main.cpp | 68 +++++++++++++++++++++++++++++----------- 4 files changed, 86 insertions(+), 57 deletions(-) diff --git a/src/ckm/ckm-common.cpp b/src/ckm/ckm-common.cpp index c34aaa2..7a584ba 100644 --- a/src/ckm/ckm-common.cpp +++ b/src/ckm/ckm-common.cpp @@ -387,59 +387,47 @@ void check_alias_list(const CKM::AliasVector& expected) RUNNER_ASSERT_MSG(expected == actual, "Actual list of aliases differ from expected list."); } -void check_alias_info_list_helper(const CKM::AliasInfoVector& expected, - const CKM::AliasInfoVector& actual, +void check_alias_info_list_helper(const PasswordInfoVector& expected, + const std::unordered_map& actual, const std::string &userSmackLabel) { std::string errorLogMsg; - std::unordered_map aliasPwdMap; RUNNER_ASSERT_MSG(expected.size() == actual.size(), "Aliases item count differs, expected: " << expected.size() << " actual: " << actual.size()); - for (const auto &it : actual) - { - aliasPwdMap[std::get<0>(it)] = std::get<1>(it).passwordProtected; - } - - for (const auto &it : expected) { - auto aliasPwd = aliasPwdMap.find(userSmackLabel + std::get<0>(it)); - if (aliasPwd != aliasPwdMap.end()) { - if (aliasPwd->second != std::get<1>(it).passwordProtected) { - errorLogMsg += "Alias: " + std::get<0>(it) + " has wrong encryption status: " - + std::to_string(std::get<1>(it).passwordProtected) + "\n"; + auto aliasPwd = actual.find(userSmackLabel + it.alias); + if (aliasPwd != actual.end()) { + if (aliasPwd->second != it.passwordProtected) { + errorLogMsg += "Alias: " + it.alias + " has wrong encryption status: " + + std::to_string(it.passwordProtected) + "\n"; } } else { - errorLogMsg += "Expected alias: " + std::get<0>(it) + " not found.\n"; + errorLogMsg += "Expected alias: " + it.alias + " not found.\n"; } } if (!errorLogMsg.empty()) { - for (const auto &it : actual) + for (const auto& [alias, passwordProtected] : actual) { - errorLogMsg += "Actual alias: " + std::get<0>(it) + " status: " - + std::to_string(std::get<1>(it).passwordProtected) + "\n"; + errorLogMsg += "Actual alias: " + alias + " status: " + + std::to_string(passwordProtected) + "\n"; } RUNNER_FAIL_MSG("Actual list of aliases differ from expected list.\n" + errorLogMsg); } } -std::pair make_alias_info(const std::string& alias, bool password) -{ - return std::make_pair(alias, CKM::AliasInfo({password, CKM::BackendId::SW})); -} - -void check_alias_info_list(const CKM::AliasInfoVector& expected) +void check_alias_info_list(const PasswordInfoVector& expected) { ckmc_alias_info_list_s *aliasInfoList = NULL; int ret = ckmc_get_data_alias_info_list(&aliasInfoList); RUNNER_ASSERT_MSG(ret == CKMC_ERROR_NONE, "Failed to get the list of data aliases. " << ret << " / " << CKMCErrorToString(ret)); - CKM::AliasInfoVector actual; + std::unordered_map actual; ckmc_alias_info_list_s *plist = aliasInfoList; char* alias; bool isPasswordProtected; @@ -453,7 +441,8 @@ void check_alias_info_list(const CKM::AliasInfoVector& expected) RUNNER_ASSERT_MSG(ret == CKMC_ERROR_NONE, "Failed to get password protection status" << ret << " / " << CKMCErrorToString(ret)); RUNNER_ASSERT_MSG(alias != nullptr, "Got null alias. Iterator: " << it); - actual.push_back(make_alias_info(alias, isPasswordProtected)); + + actual[alias] = isPasswordProtected; plist = plist->next; it++; } diff --git a/src/ckm/ckm-common.h b/src/ckm/ckm-common.h index f930657..115c4a4 100644 --- a/src/ckm/ckm-common.h +++ b/src/ckm/ckm-common.h @@ -145,11 +145,19 @@ void reset_user_data(uid_t user_id, const char *passwd); ckmc_raw_buffer_s prepare_message_buffer(const char * input); void check_alias_list(const CKM::AliasVector& expected); -void check_alias_info_list_helper(const CKM::AliasInfoVector& expected, - const CKM::AliasInfoVector& actual, + +struct PasswordInfo { + PasswordInfo(const CKM::Alias &alias, bool passwordProtected) : alias(alias), passwordProtected(passwordProtected) {} + + CKM::Alias alias; + bool passwordProtected; +}; +typedef std::vector PasswordInfoVector; + +void check_alias_info_list_helper(const PasswordInfoVector& expected, + const std::unordered_map& actual, const std::string &userSmackLabel = {}); -std::pair make_alias_info(const std::string& alias, bool password); -void check_alias_info_list(const CKM::AliasInfoVector& expected); +void check_alias_info_list(const PasswordInfoVector& expected); typedef enum { ALIAS_KEY, diff --git a/src/ckm/privileged/system-db.cpp b/src/ckm/privileged/system-db.cpp index e9ce359..b7edf6b 100644 --- a/src/ckm/privileged/system-db.cpp +++ b/src/ckm/privileged/system-db.cpp @@ -527,11 +527,11 @@ RUNNER_TEST(T5046_CLIENT_GET_ALIAS_STATUS_NO_PASSWORD, RemoveDataEnv<0>) save_data(TEST_SYSTEM_ALIAS_2.c_str(), TEST_DATA); // [test] - CKM::AliasInfoVector aliasInfoVector; - aliasInfoVector.push_back(make_alias_info(TEST_SYSTEM_ALIAS.c_str(), false)); - aliasInfoVector.push_back(make_alias_info(TEST_SYSTEM_ALIAS_2.c_str(), false)); + PasswordInfoVector expected; + expected.emplace_back(TEST_SYSTEM_ALIAS, false); + expected.emplace_back(TEST_SYSTEM_ALIAS_2, false); - check_alias_info_list(aliasInfoVector); + check_alias_info_list(expected); } RUNNER_TEST(T5047_CLIENT_GET_ALIAS_STATUS_PASSWORD_PROTECTED, RemoveDataEnv<0>) @@ -551,10 +551,10 @@ RUNNER_TEST(T5047_CLIENT_GET_ALIAS_STATUS_PASSWORD_PROTECTED, RemoveDataEnv<0>) save_data((TEST_SYSTEM_ALIAS_2 + "1").c_str(), TEST_DATA, strlen(TEST_DATA), TEST_PASSWORD); // [test] - CKM::AliasInfoVector aliasInfoVector; - aliasInfoVector.push_back(make_alias_info(TEST_SYSTEM_ALIAS.c_str(), false)); - aliasInfoVector.push_back(make_alias_info(TEST_SYSTEM_ALIAS_2.c_str(), true)); - aliasInfoVector.push_back(make_alias_info((TEST_SYSTEM_ALIAS_2 + "1").c_str(),true)); + PasswordInfoVector expected; + expected.emplace_back(TEST_SYSTEM_ALIAS, false); + expected.emplace_back(TEST_SYSTEM_ALIAS_2, true); + expected.emplace_back(TEST_SYSTEM_ALIAS_2 + "1", true); - check_alias_info_list(aliasInfoVector); + check_alias_info_list(expected); } diff --git a/src/ckm/unprivileged/main.cpp b/src/ckm/unprivileged/main.cpp index 5078773..9204738 100644 --- a/src/ckm/unprivileged/main.cpp +++ b/src/ckm/unprivileged/main.cpp @@ -442,7 +442,7 @@ RUNNER_TEST(T1024_app_user_save_keys_get_alias_pwd) const int aliasNameCount = 10; auto manager = CKM::Manager::create(); - CKM::AliasInfoVector expected; + PasswordInfoVector expected; CKM::RawBuffer buffer(KEY_PEM.begin(), KEY_PEM.end()); auto key = CKM::Key::create(buffer, CKM::Password()); std::string currentAlias; @@ -453,21 +453,31 @@ RUNNER_TEST(T1024_app_user_save_keys_get_alias_pwd) { CKM::Policy policy = generate_ckm_policy(it); currentAlias = "T1024_appkey" + std::to_string(it); - expected.push_back(make_alias_info(currentAlias, !policy.password.empty())); + expected.emplace_back(currentAlias, !policy.password.empty()); RUNNER_ASSERT_MSG( CKM_API_SUCCESS == (exitCode = manager->saveKey(currentAlias, key, policy)), "Error=" << CKM::APICodeToString(exitCode)); } - CKM::AliasInfoVector actual; + CKM::AliasInfoVector aliasInfoVector; + std::unordered_map actual; RUNNER_ASSERT_MSG( - CKM_API_SUCCESS == (exitCode = manager->getKeyAliasInfoVector(actual)), + CKM_API_SUCCESS == (exitCode = manager->getKeyAliasInfoVector(aliasInfoVector)), "Error=" << CKM::APICodeToString(exitCode)); RUNNER_ASSERT_MSG( - actual.size() == (beforeSaveAliasCount + aliasNameCount), - "Wrong aliases count: " << actual.size() << " Expected: " + aliasInfoVector.size() == (beforeSaveAliasCount + aliasNameCount), + "Wrong aliases count: " << aliasInfoVector.size() << " Expected: " << (beforeSaveAliasCount + aliasNameCount)); + + bool status; + for (const auto &info : aliasInfoVector) { + exitCode = manager->getKeyEncryptionStatus(info.alias, status); + RUNNER_ASSERT_MSG(CKM_API_SUCCESS == exitCode, "Error=" << CKM::APICodeToString(exitCode)); + + actual[info.alias] = status; + } + check_alias_info_list_helper(expected, actual, "/User "); remove_user_data(USER_APP); @@ -481,7 +491,7 @@ RUNNER_TEST(T1025_app_user_save_certificates_get_alias_pwd) const int aliasNameCount = 10; auto manager = CKM::Manager::create(); - CKM::AliasInfoVector expected; + PasswordInfoVector expected; auto cert = TestData::getTestCertificate(TestData::TEST_LEAF); std::string currentAlias; @@ -490,20 +500,31 @@ RUNNER_TEST(T1025_app_user_save_certificates_get_alias_pwd) { CKM::Policy policy = generate_ckm_policy(it); currentAlias = "T1025_appcert" + std::to_string(it); - expected.push_back(make_alias_info(currentAlias, !policy.password.empty())); + expected.emplace_back(currentAlias, !policy.password.empty()); RUNNER_ASSERT_MSG( CKM_API_SUCCESS == (exitCode = manager->saveCertificate(currentAlias, cert, policy)), "Error=" << CKM::APICodeToString(exitCode)); } - CKM::AliasInfoVector actual; + CKM::AliasInfoVector aliasInfoVector; + std::unordered_map actual; + RUNNER_ASSERT_MSG( - CKM_API_SUCCESS == (exitCode = manager->getCertificateAliasInfoVector(actual)), + CKM_API_SUCCESS == (exitCode = manager->getCertificateAliasInfoVector(aliasInfoVector)), "Error=" << CKM::APICodeToString(exitCode)); RUNNER_ASSERT_MSG( - actual.size() == (beforeSaveAliasCount + aliasNameCount), - "Wrong aliases count: " << actual.size() << " Expected: " + aliasInfoVector.size() == (beforeSaveAliasCount + aliasNameCount), + "Wrong aliases count: " << aliasInfoVector.size() << " Expected: " << (beforeSaveAliasCount + aliasNameCount)); + + bool status; + for (const auto &info : aliasInfoVector) { + exitCode = manager->getCertificateEncryptionStatus(info.alias, status); + RUNNER_ASSERT_MSG(CKM_API_SUCCESS == exitCode, "Error=" << CKM::APICodeToString(exitCode)); + + actual[info.alias] = status; + } + check_alias_info_list_helper(expected, actual, "/User "); remove_user_data(USER_APP); @@ -517,7 +538,7 @@ RUNNER_TEST(T1026_app_user_save_data_get_alias_pwd) const int aliasNameCount = 10; auto manager = CKM::Manager::create(); - CKM::AliasInfoVector expected; + PasswordInfoVector expected; std::string binData = "My bin data"; CKM::RawBuffer buffer(binData.begin(), binData.end()); std::string currentAlias; @@ -527,20 +548,31 @@ RUNNER_TEST(T1026_app_user_save_data_get_alias_pwd) { CKM::Policy policy = generate_ckm_policy(it); currentAlias = "T1026_appdata" + std::to_string(it); - expected.push_back(make_alias_info(currentAlias, !policy.password.empty())); + expected.emplace_back(currentAlias, !policy.password.empty()); RUNNER_ASSERT_MSG( CKM_API_SUCCESS == (exitCode = manager->saveData(currentAlias, buffer, policy)), "Error=" << CKM::APICodeToString(exitCode)); } - CKM::AliasInfoVector actual; + CKM::AliasInfoVector aliasInfoVector; + std::unordered_map actual; + RUNNER_ASSERT_MSG( - CKM_API_SUCCESS == (exitCode = manager->getDataAliasInfoVector(actual)), + CKM_API_SUCCESS == (exitCode = manager->getDataAliasInfoVector(aliasInfoVector)), "Error=" << CKM::APICodeToString(exitCode)); RUNNER_ASSERT_MSG( - actual.size() == (beforeSaveAliasCount + aliasNameCount), - "Wrong aliases count: " << actual.size() << " Expected: " + aliasInfoVector.size() == (beforeSaveAliasCount + aliasNameCount), + "Wrong aliases count: " << aliasInfoVector.size() << " Expected: " << (beforeSaveAliasCount + aliasNameCount)); + + bool status; + for (const auto &info : aliasInfoVector) { + exitCode = manager->getDataEncryptionStatus(info.alias, status); + RUNNER_ASSERT_MSG(CKM_API_SUCCESS == exitCode, "Error=" << CKM::APICodeToString(exitCode)); + + actual[info.alias] = status; + } + check_alias_info_list_helper(expected, actual, "/User "); remove_user_data(USER_APP); -- 2.7.4