From fdc60a9a67cc7cd4cab4d754ea8e626b40f72d45 Mon Sep 17 00:00:00 2001 From: Krzysztof Jackiewicz Date: Thu, 16 May 2019 16:09:13 +0200 Subject: [PATCH] CKM: Fix big data tests on both backends C API does not provide a possibility to enforce the backend. If TZ backend is enabled in key-manager it will be used for storing big data. TZ backend has size limitations and so the 5000000B buffer can't be used. Add a test for big data using C++ API that allows backend selection. Change-Id: Id73dcdc9bfb6c02eedd32fc4c6d5637172dd3c52 --- src/ckm/unprivileged/capi-testcases.cpp | 5 +---- src/ckm/unprivileged/main.cpp | 36 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/ckm/unprivileged/capi-testcases.cpp b/src/ckm/unprivileged/capi-testcases.cpp index 95d2a32..0e0cfca 100644 --- a/src/ckm/unprivileged/capi-testcases.cpp +++ b/src/ckm/unprivileged/capi-testcases.cpp @@ -779,11 +779,8 @@ RUNNER_TEST(T3044_remove_bin_data_C_API) RUNNER_TEST(T3045_save_big_data_C_API, RemoveDataEnv) { -#ifdef TZ_BACKEND + // We don't know which backend will be used const size_t BIG_SIZE = 100000; -#else - const size_t BIG_SIZE = 5000000; -#endif std::vector big_data(BIG_SIZE); std::ifstream is("/dev/urandom", std::ifstream::binary); diff --git a/src/ckm/unprivileged/main.cpp b/src/ckm/unprivileged/main.cpp index 6f0966f..bd5522b 100644 --- a/src/ckm/unprivileged/main.cpp +++ b/src/ckm/unprivileged/main.cpp @@ -280,6 +280,42 @@ RUNNER_TEST(T1014_save_with_label) "Key value has been changed by service"); } +RUNNER_TEST(T1020_save_big_data) +{ +#ifdef TZ_BACKEND + const size_t BIG_SIZE = 100000; + CKM::PolicyBackend backend = CKM::PolicyBackend::FORCE_HARDWARE; +#else + const size_t BIG_SIZE = 5000000; + CKM::PolicyBackend backend = CKM::PolicyBackend::FORCE_SOFTWARE; +#endif + + int temp; + std::vector big_data(BIG_SIZE); + std::ifstream is("/dev/urandom", std::ifstream::binary); + if(is) + is.read(big_data.data(), BIG_SIZE); + + RUNNER_ASSERT_MSG(is, + "Only " << is.gcount() << "/" << BIG_SIZE << " bytes read from /dev/urandom"); + + CKM::RawBuffer buffer(big_data.begin(), big_data.end()); + CKM::Policy policy(CKM::Password(), true, backend); + CKM::RawBuffer returned; + + auto manager = CKM::Manager::create(); + + RUNNER_ASSERT_MSG( + CKM_API_SUCCESS == (temp = manager->saveData("big_data", buffer, policy)), + "Error=" << CKM::APICodeToString(temp)); + + RUNNER_ASSERT_MSG( + CKM_API_SUCCESS == (temp = manager->getData("big_data", CKM::Password(), returned)), + "Error=" << CKM::APICodeToString(temp)); + + RUNNER_ASSERT_MSG(buffer == returned, "Returned data doesn't match the original"); +} + RUNNER_TEST(T1015_deinit) { remove_user_data(USER_APP); -- 2.7.4