2 * Copyright (c) 2016 - 2020 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License
17 #include <sys/types.h>
24 #include <dpl/test/test_runner.h>
25 #include <dpl/test/test_runner_child.h>
27 #include <tests_common.h>
28 #include <test-certs.h>
29 #include <scoped-app-context.h>
30 #include <ckm-common.h>
31 #include <ckm-privileged-common.h>
32 #include <ckm_helpers.h>
34 #include <ckm/ckm-manager.h>
35 #include <ckm/ckm-control.h>
36 #include <ckm/ckm-password.h>
37 #include <ckm/ckm-type.h>
38 #include <ckm/ckm-pkcs12.h>
40 #include <openssl/x509.h>
41 #include <openssl/x509v3.h>
44 const int USER_APP = 5000;
45 const int GROUP_APP = 5000;
47 const int USER_APP_2 = 5020;
48 const int USER_APP_3 = 5030;
50 const char * const APP_PASS = "user-pass";
51 const int USER_TEST = 5001;
53 const CKM::CertificateShPtrVector EMPTY_CERT_VECTOR;
54 const CKM::AliasVector EMPTY_ALIAS_VECTOR;
55 } // namespace anonymous
58 * How to numerate tests:
60 * T - test case (always T)
61 * AB - number of test group (always two digits)
62 * C - test number in group (all tests with same TABC must be run in the same time).
66 RUNNER_TEST_GROUP_INIT(T151_CKM_STORAGE_PERNAMENT_TESTS);
68 RUNNER_TEST(T1510_init_unlock_key)
70 reset_user_data(USER_TEST, APP_PASS);
73 RUNNER_TEST(T1511_insert_data)
75 auto certee = TestData::getTestCertificate(TestData::OCSP_AVAILABLE_LEAF);
76 auto certim = TestData::getTestCertificate(TestData::OCSP_AVAILABLE_IM);
77 CKM::Alias certeeAlias("CertEE");
78 CKM::Alias certimAlias("CertIM");
80 ScopedDBUnlock unlock(USER_TEST, APP_PASS);
81 ScopedAppContext ctx(TEST_LABEL, USER_TEST, GROUP_APP);
83 auto manager = CKM::Manager::create();
84 RUNNER_ASSERT(CKM_API_SUCCESS == manager->saveCertificate(certeeAlias, certee, CKM::Policy()));
85 RUNNER_ASSERT(CKM_API_SUCCESS == manager->saveCertificate(certimAlias, certim, CKM::Policy()));
89 stop_service(MANAGER);
90 start_service(MANAGER);
94 ScopedDBUnlock unlock(USER_TEST, APP_PASS);
95 ScopedAppContext ctx(TEST_LABEL, USER_TEST, GROUP_APP);
97 auto manager = CKM::Manager::create();
98 int status1 = manager->saveCertificate(certeeAlias, certee, CKM::Policy());
99 int status2 = manager->saveCertificate(certimAlias, certim, CKM::Policy());
101 CKM_API_ERROR_DB_ALIAS_EXISTS == status1,
102 "Certificate should be in database already. Error=" << CKM::APICodeToString(status1));
104 CKM_API_ERROR_DB_ALIAS_EXISTS == status2,
105 "Certificate should be in database already. Error=" << CKM::APICodeToString(status2));
109 RUNNER_TEST(T1519_deinit)
111 remove_user_data(USER_TEST);
114 RUNNER_TEST_GROUP_INIT(T170_CKM_STORAGE_PERNAMENT_TESTS);
116 RUNNER_TEST(T1701_init_unlock_key)
118 unlock_user_data(USER_TEST+1, "t170-special-password");
120 ScopedAppContext ctx(TEST_LABEL, USER_TEST+1, GROUP_APP);
123 RUNNER_CHILD_TEST(T1702_insert_data)
126 ScopedAppContext ctx(TEST_LABEL, USER_TEST+1, GROUP_APP);
128 auto certee = TestData::getTestCertificate(TestData::THIRD_PARTY_LEAF);
130 auto manager = CKM::Manager::create();
131 size_t current_aliases_num = count_aliases(ALIAS_CERT);
132 int status1 = manager->saveCertificate(CKM::Alias("CertEEE"), certee, CKM::Policy());
135 CKM_API_SUCCESS == status1,
136 "Could not put certificate in datbase. Error=" << CKM::APICodeToString(status1));
140 CKM_API_SUCCESS == (temp = manager->getCertificateAliasVector(av)),
141 "Error=" << CKM::APICodeToString(temp));
143 (current_aliases_num+1) == static_cast<size_t>(temp = av.size()),
144 "Vector size: " << temp << ". Expected: " << (current_aliases_num+1));
147 RUNNER_TEST(T1703_removeApplicationData)
150 auto control = CKM::Control::create();
152 CKM_API_SUCCESS == (tmp = control->removeApplicationData(TEST_LABEL)),
153 "Error=" << CKM::APICodeToString(tmp));
156 RUNNER_CHILD_TEST(T1704_data_test)
159 ScopedAppContext ctx(TEST_LABEL, USER_TEST+1, GROUP_APP);
162 auto manager = CKM::Manager::create();
165 CKM_API_SUCCESS == (temp = manager->getCertificateAliasVector(av)),
166 "Error=" << CKM::APICodeToString(temp));
168 0 == (temp = av.size()),
169 "Vector size: " << temp << ". Expected: 0");
172 RUNNER_TEST(T1705_deinit)
174 remove_user_data(USER_TEST+1);
177 RUNNER_TEST(T17101_init)
181 auto control = CKM::Control::create();
183 CKM_API_SUCCESS == (tmp = control->lockUserKey(USER_TEST+2)),
184 "Error=" << CKM::APICodeToString(tmp));
186 CKM_API_SUCCESS == (tmp = control->removeUserData(USER_TEST+2)),
187 "Error=" << CKM::APICodeToString(tmp));
189 CKM_API_SUCCESS == (tmp = control->unlockUserKey(USER_TEST+2, "t1706-special-password")),
190 "Error=" << CKM::APICodeToString(tmp));
193 CKM_API_SUCCESS == (tmp = control->lockUserKey(USER_TEST+3)),
194 "Error=" << CKM::APICodeToString(tmp));
196 CKM_API_SUCCESS == (tmp = control->removeUserData(USER_TEST+3)),
197 "Error=" << CKM::APICodeToString(tmp));
199 CKM_API_SUCCESS == (tmp = control->unlockUserKey(USER_TEST+3, "t1706-special-password")),
200 "Error=" << CKM::APICodeToString(tmp));
203 RUNNER_CHILD_TEST(T17102_prep_data_01)
206 ScopedAppContext ctx(TEST_LABEL, USER_TEST+2, GROUP_APP);
209 auto manager = CKM::Manager::create();
211 std::string data = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4";
213 CKM::RawBuffer buffer(data.begin(), data.end());
214 CKM::Policy exportable(CKM::Password(), true);
217 CKM_API_SUCCESS == (temp = manager->saveData("data1", buffer, exportable)),
218 "Error=" << CKM::APICodeToString(temp));
221 RUNNER_CHILD_TEST(T17103_prep_data_02)
224 ScopedAppContext ctx(TEST_LABEL_2, USER_TEST+2, GROUP_APP);
227 auto manager = CKM::Manager::create();
229 std::string data = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4";
231 CKM::RawBuffer buffer(data.begin(), data.end());
232 CKM::Policy exportable(CKM::Password(), true);
235 CKM_API_SUCCESS == (temp = manager->saveData("data2", buffer, exportable)),
236 "Error=" << CKM::APICodeToString(temp));
239 RUNNER_CHILD_TEST(T17104_prep_data_03)
242 ScopedAppContext ctx(TEST_LABEL, USER_TEST+3, GROUP_APP);
245 auto manager = CKM::Manager::create();
247 std::string data = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4";
249 CKM::RawBuffer buffer(data.begin(), data.end());
250 CKM::Policy exportable(CKM::Password(), true);
253 CKM_API_SUCCESS == (temp = manager->saveData("data3", buffer, exportable)),
254 "Error=" << CKM::APICodeToString(temp));
257 RUNNER_CHILD_TEST(T17105_prep_data_04)
260 ScopedAppContext ctx(TEST_LABEL_2, USER_TEST+3, GROUP_APP);
263 auto manager = CKM::Manager::create();
265 std::string data = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4";
267 CKM::RawBuffer buffer(data.begin(), data.end());
268 CKM::Policy exportable(CKM::Password(), true);
271 CKM_API_SUCCESS == (temp = manager->saveData("data4", buffer, exportable)),
272 "Error=" << CKM::APICodeToString(temp));
275 RUNNER_TEST(T17106_remove_application)
279 auto control = CKM::Control::create();
281 CKM_API_SUCCESS == (tmp = control->lockUserKey(USER_TEST+3)),
282 "Error=" << CKM::APICodeToString(tmp));
284 CKM_API_SUCCESS == (tmp = control->removeApplicationData(TEST_LABEL)),
285 "Error=" << CKM::APICodeToString(tmp));
288 RUNNER_CHILD_TEST(T17107_check_data_01)
291 ScopedAppContext ctx(TEST_LABEL, USER_TEST+2, GROUP_APP);
294 auto manager = CKM::Manager::create();
297 CKM_API_SUCCESS == (temp = manager->getDataAliasVector(av)),
298 "Error=" << CKM::APICodeToString(temp));
300 0 == (temp = av.size()),
301 "Vector size: " << temp << ". Expected: 0");
304 RUNNER_CHILD_TEST(T17108_check_data_02)
307 ScopedAppContext ctx(TEST_LABEL_2, USER_TEST+2, GROUP_APP);
310 auto manager = CKM::Manager::create();
313 CKM_API_SUCCESS == (temp = manager->getDataAliasVector(av)),
314 "Error=" << CKM::APICodeToString(temp));
316 1 == (temp = av.size()),
317 "Vector size: " << temp << ". Expected: 1");
320 RUNNER_TEST(T17109_unlock_user2)
324 auto control = CKM::Control::create();
326 CKM_API_SUCCESS == (tmp = control->unlockUserKey(USER_TEST+3, "t1706-special-password")),
327 "Error=" << CKM::APICodeToString(tmp));
330 RUNNER_CHILD_TEST(T17110_check_data_03)
333 ScopedAppContext ctx(TEST_LABEL, USER_TEST+3, GROUP_APP);
336 auto manager = CKM::Manager::create();
339 CKM_API_SUCCESS == (temp = manager->getDataAliasVector(av)),
340 "Error=" << CKM::APICodeToString(temp));
342 0 == (temp = av.size()),
343 "Vector size: " << temp << ". Expected: 0");
346 RUNNER_CHILD_TEST(T17111_check_data_04)
349 ScopedAppContext ctx(TEST_LABEL_2, USER_TEST+3, GROUP_APP);
352 auto manager = CKM::Manager::create();
355 CKM_API_SUCCESS == (temp = manager->getDataAliasVector(av)),
356 "Error=" << CKM::APICodeToString(temp));
358 1 == (temp = av.size()),
359 "Vector size: " << temp << ". Expected: 1");
362 RUNNER_TEST(T17112_deinit)
364 remove_user_data(USER_TEST+2);
365 remove_user_data(USER_TEST+3);
368 int main(int argc, char *argv[])
372 std::cerr << argv[0] << " should be executed as root. Aborting" << std::endl;
375 int exitCode = DPL::Test::TestRunnerSingleton::Instance().ExecTestRunner(argc, argv);
377 detectCkmBugTrustzoneLeak();