1 #include <dpl/test/test_runner.h>
2 #include <dpl/test/test_runner_child.h>
4 #include <tests_common.h>
5 #include <test-certs.h>
6 #include <ckm-common.h>
7 #include <access_provider2.h>
9 #include <ckm/ckm-manager.h>
10 #include <ckm/ckm-control.h>
11 #include <ckm/ckm-type.h>
13 #include <ckmc/ckmc-manager.h>
14 #include <ckmc/ckmc-control.h>
15 #include <ckmc/ckmc-type.h>
16 #include <ckmc/ckmc-error.h>
18 #include <ckm-common.h>
28 const int USER_APP = 5000;
29 const int GROUP_APP = 5000;
30 const char* USER_PASS = "user-pass";
31 const char* TEST_LABEL = "test_label";
32 const char *const TEST_OBJECT1 = "OBJECT1";
33 const std::string TEST_ALIAS1 = aliasWithLabel(TEST_LABEL,TEST_OBJECT1);
34 const char* TEST_SYSTEM_ALIAS = "system-alias-1";
35 const char* TEST_DATA = "ABCD";
36 } // namespace anonymous
39 RUNNER_TEST_GROUP_INIT (T301_CKMC_CONTROL_C_API);
41 RUNNER_TEST(T3010_Control_C_API_service_unlock_DB)
45 RUNNER_ASSERT_MSG( CKMC_ERROR_INVALID_PARAMETER == (temp = ckmc_lock_user_key(0)),
46 CKMCReadableError(temp));
47 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_remove_user_data(0)),
48 CKMCReadableError(temp));
49 RUNNER_ASSERT_MSG( CKMC_ERROR_INVALID_PARAMETER == (temp = ckmc_unlock_user_key(0, "test-pass")),
50 CKMCReadableError(temp));
52 RUNNER_ASSERT_MSG( CKMC_ERROR_INVALID_PARAMETER == (temp = ckmc_lock_user_key(4999)),
53 CKMCReadableError(temp));
54 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_remove_user_data(4999)),
55 CKMCReadableError(temp));
56 RUNNER_ASSERT_MSG( CKMC_ERROR_INVALID_PARAMETER == (temp = ckmc_unlock_user_key(4999, "test-pass")),
57 CKMCReadableError(temp));
59 remove_user_data(5000);
60 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_lock_user_key(5000)),
61 CKMCReadableError(temp));
62 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_remove_user_data(5000)),
63 CKMCReadableError(temp));
64 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_unlock_user_key(5000, "test-pass")),
65 CKMCReadableError(temp));
68 RUNNER_TEST(T3011_Control_C_API)
72 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_lock_user_key(USER_APP)),
73 CKMCReadableError(temp));
75 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_remove_user_data(USER_APP)),
76 CKMCReadableError(temp));
79 RUNNER_TEST(T3012_Control_C_API)
83 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_unlock_user_key(USER_APP, "simple-password")),
84 CKMCReadableError(temp));
85 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_lock_user_key(USER_APP)),
86 CKMCReadableError(temp));
89 RUNNER_TEST(T3013_Control_C_API)
93 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_unlock_user_key(USER_APP, "simple-password")),
94 CKMCReadableError(temp));
97 RUNNER_TEST(T3014_Control_C_API)
100 const uid_t UNIQUE_USER = 6500;
102 // clean up environment
103 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_remove_user_data(UNIQUE_USER)),
104 CKMCReadableError(temp));
105 // unlock with empty password
106 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_unlock_user_key(UNIQUE_USER, NULL)),
107 CKMCReadableError(temp));
108 // reset password (NULL, "simple-password")
109 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_reset_user_password(UNIQUE_USER, "simple-password")),
110 CKMCReadableError(temp));
111 // get rid of NULL DKEK
112 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_unlock_user_key(UNIQUE_USER, "simple-password")),
113 CKMCReadableError(temp));
115 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_lock_user_key(UNIQUE_USER)),
116 CKMCReadableError(temp));
117 // try to reset password when db locked
118 RUNNER_ASSERT_MSG( CKMC_ERROR_BAD_REQUEST == (temp = ckmc_reset_user_password(UNIQUE_USER, "simple-password")),
119 CKMCReadableError(temp));
120 // clean up environment
121 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_remove_user_data(UNIQUE_USER)),
122 CKMCReadableError(temp));
125 RUNNER_TEST(T3015_Control_C_API)
130 CKMC_ERROR_NONE == (temp = ckmc_unlock_user_key(USER_APP, "simple-password")),
131 CKMCReadableError(temp));
133 CKMC_ERROR_NONE == (temp = ckmc_change_user_password(USER_APP, "simple-password", "new-pass")),
134 CKMCReadableError(temp));
135 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_lock_user_key(USER_APP)),
136 CKMCReadableError(temp));
137 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_remove_user_data(USER_APP)),
138 CKMCReadableError(temp));
141 RUNNER_TEST(T3016_Control_C_API)
146 CKMC_ERROR_NONE == (temp = ckmc_lock_user_key(USER_APP)),
147 CKMCReadableError(temp));
149 CKMC_ERROR_NONE == (temp = ckmc_remove_user_data(USER_APP)),
150 CKMCReadableError(temp));
153 RUNNER_TEST(T3017_Control_C_API_remove_system_DB)
155 save_data(sharedDatabase(TEST_SYSTEM_ALIAS).c_str(), TEST_DATA);
157 // [test] - expect success
158 check_read(TEST_SYSTEM_ALIAS, ckmc_owner_id_system, TEST_DATA);
160 // remove user data - expect to map to the system DB
163 CKMC_ERROR_NONE == (temp = ckmc_remove_user_data(1234)),
164 CKMCReadableError(temp));
166 // [test] - expect fail
167 check_read(TEST_SYSTEM_ALIAS, ckmc_owner_id_system, TEST_DATA, CKMC_ERROR_DB_ALIAS_UNKNOWN);
170 RUNNER_TEST_GROUP_INIT (T302_CKMC_QUICK_SET_GET_TESTS_C_API);
172 RUNNER_TEST(T30201_init_C_API)
178 CKMC_ERROR_NONE == (temp = ckmc_unlock_user_key(USER_APP, USER_PASS)),
179 CKMCReadableError(temp));
182 RUNNER_TEST(T30202_RSA_key_C_API)
186 ckmc_key_s test_key, *test_key2;
187 ckmc_policy_s test_policy;
189 char* password = NULL;
190 CKM::Alias alias = sharedDatabase("mykey");
192 std::string keyPem = "-----BEGIN PUBLIC KEY-----\n"
193 "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
194 "T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLf\n"
195 "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
196 "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
197 "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
198 "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
200 "-----END PUBLIC KEY-----";
202 char* char_keypem = new char[keyPem.length() + 1];
204 std::strcpy(char_keypem, keyPem.c_str());
205 test_key.raw_key = (unsigned char *)char_keypem;
206 test_key.key_size = keyPem.length();
207 test_key.key_type = CKMC_KEY_RSA_PUBLIC;
208 test_key.password = password;
210 test_policy.password = password;
211 test_policy.extractable = 1;
213 test_key2 = &test_key;
216 CKMC_ERROR_NONE == (temp = ckmc_save_key(alias.c_str(), test_key, test_policy)),
217 CKMCReadableError(temp));
220 CKMC_ERROR_NONE == (temp = ckmc_get_key(alias.c_str(), password, &test_key2)),
221 CKMCReadableError(temp));
224 RUNNER_TEST(T30203_AES_key_C_API)
227 CKM::Alias alias = sharedDatabase("my_AES_key");
228 size_t key_length = 192;
230 ckmc_key_s *test_key = generate_AES_key(key_length, NULL);
231 ckmc_key_s *test_key2;
232 ckmc_policy_s test_policy;
233 test_policy.password = NULL;
234 test_policy.extractable = 1;
237 CKMC_ERROR_NONE == (temp = ckmc_save_key(alias.c_str(), *test_key, test_policy)),
238 CKMCReadableError(temp));
241 CKMC_ERROR_NONE == (temp = ckmc_get_key(alias.c_str(), NULL, &test_key2)),
242 CKMCReadableError(temp));
244 compare_AES_keys(test_key, test_key2);
245 ckmc_key_free(test_key);
246 ckmc_key_free(test_key2);
249 RUNNER_TEST(T30204_certificate_C_API)
253 std::string certPem = TestData::getTestCertificateBase64(TestData::GIAG2);
255 char* password = NULL;
259 CKM::Alias alias = sharedDatabase("test-cert-1-RSA");
261 ckmc_policy_s test_policy;
262 test_policy.password = password;
263 test_policy.extractable = 1;
265 char* char_certPem = new char[certPem.length() + 1];
266 std::strcpy(char_certPem, certPem.c_str());
267 cert.raw_cert = (unsigned char *)char_certPem;
268 cert.cert_size = certPem.length();
269 cert.data_format = CKMC_FORM_PEM;
272 CKMC_ERROR_NONE == (temp = ckmc_save_cert(alias.c_str(), cert, test_policy)),
273 CKMCReadableError(temp));
276 CKMC_ERROR_NONE == (temp = ckmc_get_cert(alias.c_str(), password, &cert2)),
277 CKMCReadableError(temp));
279 ckmc_cert_free(cert2);
282 RUNNER_TEST(T30205_certificate_remove_C_API)
286 char* password = NULL;
288 CKM::Alias alias = sharedDatabase("test-cert-1-RSA");
291 CKMC_ERROR_NONE == (temp = ckmc_get_cert(alias.c_str(), password, &cert2)),
292 CKMCReadableError(temp));
293 ckmc_cert_free(cert2);
296 CKMC_ERROR_NONE == (temp = ckmc_remove_cert(alias.c_str())),
297 CKMCReadableError(temp));
300 CKMC_ERROR_NONE != (temp = ckmc_get_cert(alias.c_str(), password, &cert2)),
301 CKMCReadableError(temp));
304 RUNNER_TEST(T30206_certificate_list_C_API)
308 std::string certPem = TestData::getTestCertificateBase64(TestData::GIAG2);
310 char* password = NULL;
313 ckmc_policy_s test_policy;
314 test_policy.password = password;
315 test_policy.extractable = 1;
317 char* char_certPem = new char[certPem.length() + 1];
318 std::strcpy(char_certPem, certPem.c_str());
319 cert.raw_cert = (unsigned char *)char_certPem;
320 cert.cert_size = certPem.length();
321 cert.data_format = CKMC_FORM_PEM;
323 size_t current_aliases_num = count_aliases(ALIAS_CERT);
326 CKMC_ERROR_NONE == (temp = ckmc_save_cert(sharedDatabase("cert_test1").c_str(), cert, test_policy)),
327 CKMCReadableError(temp));
330 CKMC_ERROR_NONE == (temp = ckmc_save_cert(sharedDatabase("cert_test2").c_str(), cert, test_policy)),
331 CKMCReadableError(temp));
334 CKMC_ERROR_NONE == (temp = ckmc_save_cert(sharedDatabase("cert_test3").c_str(), cert, test_policy)),
335 CKMCReadableError(temp));
337 size_t actual_cnt = count_aliases(ALIAS_CERT);
339 (current_aliases_num+3) == actual_cnt,
340 "Error: expecting " << (current_aliases_num+3) << " aliases, while found " << actual_cnt);
344 RUNNER_CHILD_TEST(T30207_user_app_save_RSA_key_C_API)
346 ScopedAccessProvider ap("mylabel");
347 ap.allowAPI("key-manager::api-storage", "rw");
348 ap.applyAndSwithToUser(USER_APP, GROUP_APP);
350 std::string keyPem = "-----BEGIN PUBLIC KEY-----\n"
351 "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
352 "T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLf\n"
353 "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
354 "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
355 "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
356 "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
358 "-----END PUBLIC KEY-----";
362 ckmc_key_s test_key, *test_key2;
363 ckmc_policy_s test_policy;
365 char* password = NULL;
366 const char *passwordPolicy = "x";
367 const char *alias = "mykey";
368 char* char_keypem = new char[keyPem.length() + 1];
370 std::strcpy(char_keypem, keyPem.c_str());
371 test_key.raw_key = (unsigned char *)char_keypem;
372 test_key.key_size = keyPem.length();
373 test_key.key_type = CKMC_KEY_RSA_PUBLIC;
374 test_key.password = password;
376 test_policy.password = const_cast<char *>(passwordPolicy);
377 test_policy.extractable = 1;
379 test_key2 = &test_key;
383 CKMC_ERROR_NONE == (temp = ckmc_save_key(alias, test_key, test_policy)),
384 CKMCReadableError(temp));
386 CKMC_ERROR_NONE == (temp = ckmc_get_key(alias, passwordPolicy, &test_key2)),
387 CKMCReadableError(temp));
389 // RUNNER_ASSERT_MSG(
390 // key.getDER() == key2.getDER(), "Key value has been changed by service");
392 delete [] char_keypem;
395 RUNNER_CHILD_TEST(T30208_user_app_save_AES_key_C_API)
397 AccessProvider ap("mylabel");
398 ap.allowAPI("key-manager::api-storage", "rw");
399 ap.applyAndSwithToUser(USER_APP, GROUP_APP);
402 const char* password = NULL;
403 size_t key_length = 192;
404 CKM::Alias alias = "my_AES_key";
406 ckmc_key_s *test_key = generate_AES_key(key_length, password);
407 ckmc_key_s *test_key2;
408 ckmc_policy_s test_policy;
409 test_policy.password = const_cast<char *>(password);
410 test_policy.extractable = 1;
413 CKMC_ERROR_NONE == (temp = ckmc_save_key(alias.c_str(), *test_key, test_policy)),
414 CKMCReadableError(temp));
416 CKMC_ERROR_NONE == (temp = ckmc_get_key(alias.c_str(), password, &test_key2)),
417 CKMCReadableError(temp));
419 compare_AES_keys(test_key, test_key2);
420 ckmc_key_free(test_key);
421 ckmc_key_free(test_key2);
424 RUNNER_CHILD_TEST(T30209_user_app_save_AES_key_passwd_C_API)
426 AccessProvider ap("mylabel");
427 ap.allowAPI("key-manager::api-storage", "rw");
428 ap.applyAndSwithToUser(USER_APP, GROUP_APP);
431 const char* password = "x";
432 size_t key_length = 192;
433 CKM::Alias alias = "my_AES_key-2";
435 ckmc_key_s *test_key = generate_AES_key(key_length, password);
436 ckmc_policy_s test_policy;
437 test_policy.password = const_cast<char *>(password);
438 test_policy.extractable = 1;
441 CKMC_ERROR_INVALID_PARAMETER == (temp = ckmc_save_key(alias.c_str(), *test_key, test_policy)),
442 CKMCReadableError(temp));
443 ckmc_key_free(test_key);
446 RUNNER_CHILD_TEST(T30210_app_user_save_RSA_keys_exportable_flag)
448 ScopedAccessProvider ap("mylabel");
449 ap.allowAPI("key-manager::api-storage", "rw");
450 ap.applyAndSwithToUser(USER_APP, GROUP_APP);
453 auto manager = CKM::Manager::create();
455 std::string keyPem = "-----BEGIN PUBLIC KEY-----\n"
456 "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
457 "T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLf\n"
458 "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
459 "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
460 "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
461 "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
463 "-----END PUBLIC KEY-----";
465 ckmc_policy_s test_policy;
466 ckmc_key_s test_key, *test_key2;
467 char* char_keypem = new char[keyPem.length() + 1];
468 char* password = NULL;
470 std::strcpy(char_keypem, keyPem.c_str());
471 test_key.raw_key = (unsigned char *)char_keypem;
472 test_key.key_size = keyPem.length();
473 test_key.key_type = CKMC_KEY_RSA_PUBLIC;
474 test_key.password = NULL;
476 test_policy.password = password;
477 test_policy.extractable = 0;
480 CKMC_ERROR_NONE == (temp = ckmc_save_key("appkey1", test_key, test_policy)),
481 CKMCReadableError(temp));
484 CKMC_ERROR_NOT_EXPORTABLE == (temp = ckmc_get_key("appkey1", password, &test_key2)),
485 CKMCReadableError(temp));
488 RUNNER_CHILD_TEST(T30211_app_user_save_AES_keys_exportable_flag)
490 AccessProvider ap("mylabel");
491 ap.allowAPI("key-manager::api-storage", "rw");
492 ap.applyAndSwithToUser(USER_APP, GROUP_APP);
495 const char* password = NULL;
496 size_t key_length = 256;
497 CKM::Alias alias = "my_AES_key-3";
499 ckmc_key_s *test_key = generate_AES_key(key_length, password);
500 ckmc_key_s *test_key2;
501 ckmc_policy_s test_policy;
502 test_policy.password = const_cast<char *>(password);
503 test_policy.extractable = 0;
506 CKMC_ERROR_NONE == (temp = ckmc_save_key(alias.c_str(), *test_key, test_policy)),
507 CKMCReadableError(temp));
508 ckmc_key_free(test_key);
511 CKMC_ERROR_NOT_EXPORTABLE == (temp = ckmc_get_key(alias.c_str(), password, &test_key2)),
512 CKMCReadableError(temp));
515 RUNNER_TEST(T30212_certificate_with_DSA_key_C_API)
519 std::string certPem = TestData::getTestCertificateBase64(TestData::GIAG2);
521 char* password = NULL;
522 ckmc_cert_s *cert2 = NULL;
525 ckmc_policy_s test_policy;
526 test_policy.password = password;
527 test_policy.extractable = 1;
529 char* char_certPem = new char[certPem.length() + 1];
530 std::strcpy(char_certPem, certPem.c_str());
531 cert.raw_cert = (unsigned char *)char_certPem;
532 cert.cert_size = certPem.length();
533 cert.data_format = CKMC_FORM_PEM;
535 CKM::Alias alias = sharedDatabase("test-cert-1-DSA");
537 CKMC_ERROR_NONE == (temp = ckmc_save_cert(alias.c_str(), cert, test_policy)),
538 CKMCReadableError(temp));
541 CKMC_ERROR_NONE == (temp = ckmc_get_cert(alias.c_str(), password, &cert2)),
542 CKMCReadableError(temp));
544 ckmc_cert_free(cert2);
547 RUNNER_TEST(T30213_deinit_C_API)
553 CKMC_ERROR_NONE == (temp = ckmc_lock_user_key(USER_APP)),
554 CKMCReadableError(temp));
556 CKMC_ERROR_NONE == (temp = ckmc_remove_user_data(USER_APP)),
557 CKMCReadableError(temp));
561 RUNNER_TEST_GROUP_INIT (T3030_CKMC_QUICK_GET_ALIAS_TESTS_C_API);
563 RUNNER_TEST(T3031_init_C_API)
569 CKMC_ERROR_NONE == (temp = ckmc_unlock_user_key(USER_APP, "simple-password")),
570 CKMCReadableError(temp));
573 RUNNER_TEST(T3032_save_asymmetric_keys_get_alias_C_API)
577 char* password = NULL;
578 ckmc_policy_s test_policy1, test_policy2, test_policy3;
581 std::string keyPem = "-----BEGIN PUBLIC KEY-----\n"
582 "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
583 "T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLf\n"
584 "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
585 "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
586 "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
587 "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
589 "-----END PUBLIC KEY-----";
591 char* char_keypem = new char[keyPem.length() + 1];
593 std::strcpy(char_keypem, keyPem.c_str());
594 test_key.raw_key = (unsigned char *)char_keypem;
595 test_key.key_size = keyPem.length();
596 test_key.key_type = CKMC_KEY_RSA_PUBLIC;
597 test_key.password = password;
599 test_policy1.password = password;
600 test_policy1.extractable = 1;
602 test_policy2.password = password;
603 test_policy2.extractable = 0;
605 test_policy3.password = password;
606 test_policy3.extractable = 0;
608 size_t current_aliases_num = count_aliases(ALIAS_KEY);
611 CKMC_ERROR_NONE == (temp = ckmc_save_key(sharedDatabase("rootkey1").c_str(), test_key, test_policy1)),
612 CKMCReadableError(temp));
615 CKMC_ERROR_NONE == (temp = ckmc_save_key(sharedDatabase("rootkey2").c_str(), test_key, test_policy2)),
616 CKMCReadableError(temp));
619 CKMC_ERROR_NONE == (temp = ckmc_save_key(sharedDatabase("rootkey3").c_str(), test_key, test_policy3)),
620 CKMCReadableError(temp));
622 size_t actual_cnt = count_aliases(ALIAS_KEY);
624 (current_aliases_num+3) == actual_cnt,
625 "Error: expecting " << (current_aliases_num+3) << " aliases, while found " << actual_cnt);
629 RUNNER_TEST(T3033_remove_asymmetric_key_C_API)
633 char* password = NULL;
635 ckmc_key_s *test_key2;
637 CKMC_ERROR_NONE == (temp = ckmc_get_key(sharedDatabase("rootkey1").c_str(), password, &test_key2)),
638 CKMCReadableError(temp));
641 CKMC_ERROR_NONE == (temp = ckmc_remove_key(sharedDatabase("rootkey1").c_str())),
642 CKMCReadableError(temp));
645 CKMC_ERROR_NONE != (temp = ckmc_get_key(sharedDatabase("rootkey1").c_str(), password, &test_key2)),
646 CKMCReadableError(temp));
649 RUNNER_TEST(T3034_save_symmetric_keys_get_alias_C_API)
652 size_t key_length = 128;
653 ckmc_key_s *test_key = generate_AES_key(key_length, NULL);
654 ckmc_policy_s test_policy1, test_policy2, test_policy3;
655 test_policy1.password = NULL;
656 test_policy1.extractable = 1;
658 test_policy2.password = NULL;
659 test_policy2.extractable = 1;
661 test_policy3.password = NULL;
662 test_policy3.extractable = 1;
664 int current_aliases_num = count_aliases(ALIAS_KEY);
667 CKMC_ERROR_NONE == (temp = ckmc_save_key(sharedDatabase("AES_key1").c_str(), *test_key, test_policy1)),
668 CKMCReadableError(temp));
671 CKMC_ERROR_NONE == (temp = ckmc_save_key(sharedDatabase("AES_key2").c_str(), *test_key, test_policy2)),
672 CKMCReadableError(temp));
675 CKMC_ERROR_NONE == (temp = ckmc_save_key(sharedDatabase("AES_key3").c_str(), *test_key, test_policy3)),
676 CKMCReadableError(temp));
679 (current_aliases_num+3) == (temp = count_aliases(ALIAS_KEY)),
680 "Error: expecting " << (current_aliases_num+3) << " aliases, while found " << temp);
682 ckmc_key_free(test_key);
686 RUNNER_TEST(T3035_remove_symmetric_key_C_API)
690 ckmc_key_s *test_key2;
692 CKMC_ERROR_NONE == (temp = ckmc_get_key(sharedDatabase("AES_key1").c_str(), NULL, &test_key2)),
693 CKMCReadableError(temp));
694 validate_AES_key(test_key2);
695 ckmc_key_free(test_key2);
697 // actual test - remove middle item
699 CKMC_ERROR_NONE == (temp = ckmc_remove_key(sharedDatabase("AES_key2").c_str())),
700 CKMCReadableError(temp));
703 CKMC_ERROR_DB_ALIAS_UNKNOWN == (temp = ckmc_get_key(sharedDatabase("AES_key2").c_str(), NULL, &test_key2)),
704 CKMCReadableError(temp));
707 CKMC_ERROR_NONE == (temp = ckmc_get_key(sharedDatabase("AES_key3").c_str(), NULL, &test_key2)),
708 CKMCReadableError(temp));
709 validate_AES_key(test_key2);
710 ckmc_key_free(test_key2);
714 RUNNER_TEST(T3036_deinit_C_API)
720 CKMC_ERROR_NONE == (temp = ckmc_lock_user_key(USER_APP)),
721 CKMCReadableError(temp));
723 CKMC_ERROR_NONE == (temp = ckmc_remove_user_data(USER_APP)),
724 CKMCReadableError(temp));
727 RUNNER_TEST_GROUP_INIT (T3040_CKMC_QUICK_REMOVE_BIN_DATA_TEST_C_API);
729 RUNNER_TEST(T3041_init_C_API)
732 reset_user_data(USER_APP, "simple-password");
735 RUNNER_TEST(T3042_save_get_bin_data_C_API)
739 ckmc_raw_buffer_s testData1, testData2, testData3;
740 char* password = NULL;
742 std::string binData1 = "My bin data1";
743 std::string binData2 = "My bin data2";
744 std::string binData3 = "My bin data3";
745 char* char_binData1 = new char[binData1.length() + 1];
746 char* char_binData2 = new char[binData2.length() + 1];
747 char* char_binData3 = new char[binData3.length() + 1];
748 std::strcpy(char_binData1, binData1.c_str());
749 std::strcpy(char_binData2, binData2.c_str());
750 std::strcpy(char_binData3, binData3.c_str());
751 testData1.data = (unsigned char *) char_binData1;
752 testData2.data = (unsigned char *) char_binData2;
753 testData3.data = (unsigned char *) char_binData3;
754 testData1.size = binData1.length()+1;
755 testData2.size = binData2.length()+1;
756 testData3.size = binData3.length()+1;
758 ckmc_policy_s test_policy1, test_policy2, test_policy3;
760 test_policy1.password = password;
761 test_policy1.extractable = 1;
762 test_policy2.password = password;
763 test_policy2.extractable = 1;
764 test_policy3.password = password;
765 test_policy3.extractable = 0;
767 size_t current_aliases_num = count_aliases(ALIAS_DATA);
770 CKMC_ERROR_NONE == (temp = ckmc_save_data(sharedDatabase("data1").c_str(), testData1, test_policy1)), // should change it as null value
771 CKMCReadableError(temp));
774 CKMC_ERROR_NONE == (temp = ckmc_save_data(sharedDatabase("data2").c_str(), testData2, test_policy1)), // should change it as null value
775 CKMCReadableError(temp));
778 CKMC_ERROR_NONE == (temp = ckmc_save_data(sharedDatabase("data3").c_str(), testData3, test_policy2)),
779 CKMCReadableError(temp));
782 CKMC_ERROR_INVALID_PARAMETER == (temp = ckmc_save_data(sharedDatabase("data4").c_str(), testData3, test_policy3)),
783 CKMCReadableError(temp));
785 size_t actual_cnt = count_aliases(ALIAS_DATA);
787 (current_aliases_num+3) == actual_cnt,
788 "Error: expecting " << (current_aliases_num+3) << " aliases, while found " << actual_cnt);
790 ckmc_raw_buffer_s *testData4;
792 CKMC_ERROR_NONE == (temp = ckmc_get_data(sharedDatabase("data2").c_str(), password, &testData4)),
793 CKMCReadableError(temp));
796 compareResult = (strcmp((const char *)testData2.data, (const char *)testData4->data));
797 RUNNER_ASSERT_MSG( compareResult == 0,
801 RUNNER_CHILD_TEST(T3043_app_user_save_bin_data_C_API)
803 ScopedAccessProvider ap("mylabel");
804 ap.allowAPI("key-manager::api-storage", "rw");
805 ap.applyAndSwithToUser(USER_APP, GROUP_APP);
808 ckmc_raw_buffer_s testData1;
809 char* password = NULL;
810 std::string binData1 = "My bin data";
811 char* char_binData1 = new char[binData1.length() + 1];
812 std::strcpy(char_binData1, binData1.c_str());
813 testData1.data = (unsigned char *) char_binData1;
814 testData1.size = binData1.length()+1;
816 ckmc_policy_s test_policy1, test_policy2;
818 test_policy1.password = password;
819 test_policy1.extractable = 1;
821 test_policy2.password = password;
822 test_policy2.extractable = 1;
824 std::string binData = "My bin data";
826 size_t current_aliases_num = count_aliases(ALIAS_DATA);
829 CKMC_ERROR_NONE == (temp = ckmc_save_data("appdata1", testData1, test_policy1)),
830 CKMCReadableError(temp));
832 CKMC_ERROR_NONE == (temp = ckmc_save_data("appdata2", testData1, test_policy1)),
833 CKMCReadableError(temp));
835 CKMC_ERROR_NONE == (temp = ckmc_save_data("appdata3", testData1, test_policy2)),
836 CKMCReadableError(temp));
838 size_t actual_cnt = count_aliases(ALIAS_DATA);
840 (current_aliases_num+3) == actual_cnt,
841 "Error: expecting " << (current_aliases_num+3) << " aliases, while found " << actual_cnt);
844 RUNNER_TEST(T3044_remove_bin_data_C_API)
848 size_t current_aliases_num = count_aliases(ALIAS_DATA, 2);
851 CKMC_ERROR_NONE == (temp = ckmc_remove_data(sharedDatabase("data1").c_str())),
852 CKMCReadableError(temp));
854 CKMC_ERROR_NONE == (temp = ckmc_remove_data(sharedDatabase("data3").c_str())),
855 CKMCReadableError(temp));
857 size_t actual_cnt = count_aliases(ALIAS_DATA);
859 (current_aliases_num-2) == actual_cnt,
860 "Error: expecting " << (current_aliases_num-2) << " aliases, while found " << actual_cnt);
862 char* password = NULL;
864 ckmc_raw_buffer_s *testData1, testData2;
866 std::string testStr = "My bin data2";
867 char* char_testData2 = new char[testStr.length() + 1];
868 std::strcpy(char_testData2, testStr.c_str());
869 testData2.data = (unsigned char *) char_testData2;
870 testData2.size = testStr.length()+1;
872 CKM::RawBuffer buffer;
874 CKMC_ERROR_NONE == (temp = ckmc_get_data(sharedDatabase("data2").c_str(), password, &testData1)),
875 CKMCReadableError(temp));
878 compareResult = (strcmp((const char *)testData2.data, (const char *)testData1->data));
879 RUNNER_ASSERT_MSG( compareResult == 0,
883 CKMC_ERROR_DB_ALIAS_UNKNOWN == (temp = ckmc_get_data(sharedDatabase("data3").c_str(), password, &testData1)),
884 CKMCReadableError(temp));
887 RUNNER_TEST(T3045_save_big_data_C_API, RemoveDataEnv<USER_APP>)
889 const size_t BIG_SIZE = 5000000;
890 ScopedAccessProvider ap(TEST_LABEL, USER_APP, GROUP_APP);
892 std::vector<char> big_data(BIG_SIZE);
893 std::ifstream is("/dev/urandom", std::ifstream::binary);
895 is.read(big_data.data(), BIG_SIZE);
897 RUNNER_ASSERT_MSG(is,
898 "Only " << is.gcount() << "/" << BIG_SIZE << " bytes read from /dev/urandom");
900 save_data(TEST_ALIAS1.c_str(), big_data.data(), BIG_SIZE, CKMC_ERROR_NONE);
901 check_read(TEST_OBJECT1, TEST_LABEL, big_data.data(), BIG_SIZE, CKMC_ERROR_NONE);
904 RUNNER_TEST(T3050_deinit_C_API)
910 CKMC_ERROR_NONE == (temp = ckmc_lock_user_key(USER_APP)),
911 CKMCReadableError(temp));
913 CKMC_ERROR_NONE == (temp = ckmc_remove_user_data(USER_APP)),
914 CKMCReadableError(temp));
917 RUNNER_TEST_GROUP_INIT(T305_CKMC_QUICK_CREATE_PAIR_CAPI);
919 RUNNER_TEST(T3051_CAPI_init)
924 CKMC_ERROR_NONE == (temp = ckmc_remove_user_data(USER_APP)),
925 CKMCReadableError(temp));
928 CKMC_ERROR_NONE == (temp = ckmc_unlock_user_key(USER_APP, USER_PASS)),
929 CKMCReadableError(temp));
932 RUNNER_CHILD_TEST(T3052_CAPI_create_RSA_key)
936 ScopedAccessProvider ap("mylabel");
937 ap.allowAPI("key-manager::api-storage", "rw");
938 ap.applyAndSwithToUser(USER_APP, GROUP_APP);
941 const char *private_key_alias = "RSA-test-1-priv";
942 const char *public_key_alias = "RSA-test-1-pub";
943 ckmc_policy_s policy_private_key;
944 ckmc_policy_s policy_public_key;
946 policy_private_key.password = NULL;
947 policy_private_key.extractable = 1;
949 policy_public_key.password = NULL;
950 policy_public_key.extractable = 1;
953 size_t current_aliases_num = count_aliases(ALIAS_KEY);
956 CKMC_ERROR_NONE == (temp = ckmc_create_key_pair_rsa(size, private_key_alias, public_key_alias, policy_private_key, policy_public_key)),
957 CKMCReadableError(temp));
959 size_t actual_cnt = count_aliases(ALIAS_KEY);
961 (current_aliases_num+2) == actual_cnt,
962 "Error: expecting " << (current_aliases_num+2) << " aliases, while found " << actual_cnt);
964 ckmc_key_s *privateKey;
966 CKMC_ERROR_NONE == (temp = ckmc_get_key(private_key_alias, policy_private_key.password,&privateKey)),
967 CKMCReadableError(temp));
969 privateKey->key_type == CKMC_KEY_RSA_PRIVATE,
970 "Key Type Error: expected =" << static_cast<int>(CKMC_KEY_RSA_PRIVATE) << ", actual=" << static_cast<int>(privateKey->key_type));
972 privateKey != NULL && privateKey->key_size > 0 && privateKey->raw_key != NULL,
973 "Private key is broken.");
975 ckmc_key_s *publicKey;
977 CKMC_ERROR_NONE == (temp = ckmc_get_key(public_key_alias, policy_public_key.password, &publicKey)),
978 CKMCReadableError(temp));
980 publicKey->key_type == CKMC_KEY_RSA_PUBLIC,
981 "Key Type Error: expected =" << static_cast<int>(CKMC_KEY_RSA_PUBLIC) << ", actual=" << static_cast<int>(publicKey->key_type));
983 publicKey != NULL && publicKey->key_size > 0 && publicKey->raw_key != NULL,
984 "Public key is broken.");
986 // on next attempt to generate keys with the same alias, expect fail (alias exists)
988 CKMC_ERROR_DB_ALIAS_EXISTS == (temp = ckmc_create_key_pair_rsa(size, private_key_alias, public_key_alias, policy_private_key, policy_public_key)),
989 CKMCReadableError(temp));
992 RUNNER_CHILD_TEST(T3053_CAPI_create_DSA_key)
996 AccessProvider ap("mylabel");
997 ap.allowAPI("key-manager::api-storage", "rw");
998 ap.applyAndSwithToUser(USER_APP, GROUP_APP);
1001 const char *private_key_alias = "DSA-test-2-priv";
1002 const char *public_key_alias = "DSA-test-2-pub";
1003 ckmc_policy_s policy_private_key;
1004 ckmc_policy_s policy_public_key;
1006 policy_private_key.password = NULL;
1007 policy_private_key.extractable = 1;
1009 policy_public_key.password = NULL;
1010 policy_public_key.extractable = 1;
1012 size_t current_aliases_num = count_aliases(ALIAS_KEY);
1015 CKMC_ERROR_NONE == (temp = ckmc_create_key_pair_dsa(size, private_key_alias, public_key_alias, policy_private_key, policy_public_key)),
1016 CKMCReadableError(temp));
1018 size_t actual_cnt = count_aliases(ALIAS_KEY);
1020 (current_aliases_num+2) == actual_cnt,
1021 "Error: expecting " << (current_aliases_num+2) << " aliases, while found " << actual_cnt);
1023 ckmc_key_s *privateKey = 0;
1025 CKMC_ERROR_NONE == (temp = ckmc_get_key(private_key_alias, policy_private_key.password,&privateKey)),
1026 CKMCReadableError(temp));
1028 privateKey != NULL && privateKey->key_size > 0 && privateKey->raw_key != NULL,
1029 "Private key is broken.");
1031 privateKey->key_type == CKMC_KEY_DSA_PRIVATE,
1032 "Key Type Error: expected =" << static_cast<int>(CKMC_KEY_DSA_PRIVATE) << ", actual=" << static_cast<int>(privateKey->key_type));
1033 ckmc_key_free(privateKey);
1035 ckmc_key_s *pubKey = 0;
1037 CKMC_ERROR_NONE == (temp = ckmc_get_key(public_key_alias, policy_public_key.password, &pubKey)),
1038 CKMCReadableError(temp));
1040 pubKey != NULL && pubKey->key_size > 0 && pubKey->raw_key != NULL,
1041 "Public key is broken.");
1043 pubKey->key_type == CKMC_KEY_DSA_PUBLIC,
1044 "Key Type Error: expected =" << static_cast<int>(CKMC_KEY_DSA_PUBLIC) << ", actual=" << static_cast<int>(pubKey->key_type));
1045 ckmc_key_free(pubKey);
1047 // on next attempt to generate keys with the same alias, expect fail (alias exists)
1049 CKMC_ERROR_DB_ALIAS_EXISTS == (temp = ckmc_create_key_pair_dsa(size, private_key_alias, public_key_alias, policy_private_key, policy_public_key)),
1050 CKMCReadableError(temp));
1054 RUNNER_CHILD_TEST(T3054_CAPI_create_AES_key)
1058 CKM::Alias key_alias = sharedDatabase("AES-gen-test-1");
1059 ckmc_policy_s policy_key;
1061 policy_key.password = NULL;
1062 policy_key.extractable = 1;
1064 int current_aliases_num = count_aliases(ALIAS_KEY);
1067 CKMC_ERROR_NONE == (temp = ckmc_create_key_aes(size, key_alias.c_str(), policy_key)),
1068 CKMCReadableError(temp));
1071 (current_aliases_num+1) == (temp = count_aliases(ALIAS_KEY)),
1072 "Error: expecting " << (current_aliases_num+2) << " aliases, while found " << temp);
1074 ckmc_key_s *get_AES_key = 0;
1076 CKMC_ERROR_NONE == (temp = ckmc_get_key(key_alias.c_str(), policy_key.password, &get_AES_key)),
1077 CKMCReadableError(temp));
1078 validate_AES_key(get_AES_key);
1079 ckmc_key_free(get_AES_key);
1083 RUNNER_TEST(T3055_CAPI_deinit)
1088 CKMC_ERROR_NONE == (temp = ckmc_lock_user_key(USER_APP)),
1089 CKMCReadableError(temp));
1091 CKMC_ERROR_NONE == (temp = ckmc_remove_user_data(USER_APP)),
1092 CKMCReadableError(temp));
1096 RUNNER_TEST_GROUP_INIT(T306_CKMC_CAPI_CreateKeyPair);
1098 RUNNER_TEST(T3061_CAPI_init)
1100 remove_user_data(0);
1101 reset_user_data(USER_APP, USER_PASS);
1104 RUNNER_TEST(T3062_CAPI_CreateKeyPairRSA)
1109 CKM::Alias private_key_alias = sharedDatabase("rsa-test-1");
1110 CKM::Alias public_key_alias = sharedDatabase("rsa-test-2");
1111 ckmc_policy_s policy_private_key;
1112 ckmc_policy_s policy_public_key;
1114 policy_private_key.password = const_cast<char *>("privatepassword");
1115 policy_private_key.extractable = 0;
1117 policy_public_key.password = NULL;
1118 policy_public_key.extractable = 1;
1121 CKMC_ERROR_NONE == (temp = ckmc_create_key_pair_rsa(size, private_key_alias.c_str(), public_key_alias.c_str(), policy_private_key, policy_public_key)),
1122 CKMCReadableError(temp));
1124 // on next attempt to generate keys with the same alias, expect fail (alias exists)
1126 CKMC_ERROR_DB_ALIAS_EXISTS == (temp = ckmc_create_key_pair_rsa(size, private_key_alias.c_str(), public_key_alias.c_str(), policy_private_key, policy_public_key)),
1127 CKMCReadableError(temp));
1130 RUNNER_TEST(T3063_CAPI_CreateKeyPairDSA)
1135 CKM::Alias private_key_alias = sharedDatabase("dsa-test-1");
1136 CKM::Alias public_key_alias = sharedDatabase("dsa-test-2");
1137 ckmc_policy_s policy_private_key;
1138 ckmc_policy_s policy_public_key;
1140 policy_private_key.password = const_cast<char *>("privatepassword");
1141 policy_private_key.extractable = 0;
1143 policy_public_key.password = NULL;
1144 policy_public_key.extractable = 1;
1147 CKMC_ERROR_NONE == (temp = ckmc_create_key_pair_dsa(size, private_key_alias.c_str(), public_key_alias.c_str(), policy_private_key, policy_public_key)),
1148 CKMCReadableError(temp));
1151 RUNNER_TEST(T3064_CAPI_CreateKeyPairECDSA)
1155 ckmc_ec_type_e ectype = CKMC_EC_PRIME192V1;
1156 CKM::Alias private_key_alias = sharedDatabase("ecdsa-test-1");
1157 CKM::Alias public_key_alias = sharedDatabase("ecdsa-test-2");
1158 ckmc_policy_s policy_private_key;
1159 ckmc_policy_s policy_public_key;
1161 policy_private_key.password = const_cast<char *>("privatepassword");
1162 policy_private_key.extractable = 0;
1164 policy_public_key.password = NULL;
1165 policy_public_key.extractable = 1;
1168 CKMC_ERROR_NONE == (temp = ckmc_create_key_pair_ecdsa(ectype, private_key_alias.c_str(), public_key_alias.c_str(), policy_private_key, policy_public_key)),
1169 CKMCReadableError(temp));
1172 RUNNER_TEST(T3065_CAPI_deinit)
1174 remove_user_data(0);
1178 //RUNNER_TEST_GROUP_INIT(T120_NEGATIVE_TESTS);
1182 RUNNER_TEST_GROUP_INIT(T307_CKMC_CAPI_OCSP_TESTS);
1184 RUNNER_TEST(T3071_CAPI_init)
1186 remove_user_data(0);
1189 RUNNER_TEST(T3074_CAPI_ckmc_ocsp_check)
1191 std::string ee = TestData::getTestCertificateBase64(TestData::MBANK);
1192 std::string im = TestData::getTestCertificateBase64(TestData::SYMANTEC);
1195 c_cert.raw_cert = reinterpret_cast<unsigned char *>(const_cast<char *>(ee.c_str()));
1196 c_cert.cert_size = ee.size();
1197 c_cert.data_format = CKMC_FORM_PEM;
1199 ckmc_cert_s c_cert1;
1200 c_cert1.raw_cert = reinterpret_cast<unsigned char *>(const_cast<char *>(im.c_str()));
1201 c_cert1.cert_size = im.size();
1202 c_cert1.data_format = CKMC_FORM_PEM;
1204 ckmc_cert_list_s untrustedcerts;
1205 untrustedcerts.cert = &c_cert1;
1206 untrustedcerts.next = NULL;
1208 ckmc_cert_list_s *cert_chain_list;
1210 int tmp = ckmc_get_cert_chain(&c_cert, &untrustedcerts, &cert_chain_list);
1212 CKMC_ERROR_NONE == tmp, CKMCReadableError(tmp));
1214 RUNNER_ASSERT_MSG(cert_chain_list != NULL, "Wrong size of certificate chain.");
1216 ckmc_ocsp_status_e ocsp_status;
1217 RUNNER_ASSERT_MSG(CKMC_ERROR_NONE == (tmp = ckmc_ocsp_check(cert_chain_list, &ocsp_status)), CKMCReadableError(tmp));
1218 RUNNER_ASSERT_MSG(ocsp_status == CKMC_OCSP_STATUS_GOOD, "Wrong status: " << static_cast<int>(ocsp_status));
1221 RUNNER_TEST(T3075_CAPI_deinit)
1223 remove_user_data(0);
1227 RUNNER_TEST_GROUP_INIT(T308_CAPI_CREATE_AND_VERIFY_SIGNATURE);
1229 RUNNER_TEST(T3081_CAPI__init)
1234 CKMC_ERROR_NONE == (temp = ckmc_remove_user_data(USER_APP)),
1235 CKMCReadableError(temp));
1238 CKMC_ERROR_NONE == (temp = ckmc_unlock_user_key(USER_APP, USER_PASS)),
1239 CKMCReadableError(temp));
1241 remove_user_data(0);
1244 RUNNER_TEST(T3082_CAPI__rsa_key_create_verify)
1248 std::string prv = "-----BEGIN RSA PRIVATE KEY-----\n"
1249 "Proc-Type: 4,ENCRYPTED\n"
1250 "DEK-Info: DES-EDE3-CBC,6C6507B11671DABC\n"
1252 "YiKNviNqc/V/i241CKtAVsNckesE0kcaka3VrY7ApXR+Va93YoEwVQ8gB9cE/eHH\n"
1253 "S0j3ZS1PAVFM/qo4ZnPdMzaSLvTQw0GAL90wWgF3XQ+feMnWyBObEoQdGXE828TB\n"
1254 "SLz4UOIQ55Dx6JSWTfEhwAlPs2cEWD14xvuxPzAEzBIYmWmBBsCN94YgFeRTzjH0\n"
1255 "TImoYVMN60GgOfZWw6rXq9RaV5dY0Y6F1piypCLGD35VaXAutdHIDvwUGECPm7SN\n"
1256 "w05jRro53E1vb4mYlZEY/bs4q7XEOI5+ZKT76Xn0oEJNX1KRL1h2q8fgUkm5j40M\n"
1257 "uQj71aLR9KyIoQARwGLeRy09tLVjH3fj66CCMqaPcxcIRIyWi5yYBB0s53ipm6A9\n"
1258 "CYuyc7MS2C0pOdWKsDvYsHR/36KUiIdPuhF4AbaTqqO0eWeuP7Na7dGK56Fl+ooi\n"
1259 "cUpJr7cIqMl2vL25B0jW7d4TB3zwCEkVVD1fBPeNoZWo30z4bILcBqjjPkQfHZ2e\n"
1260 "xNraG3qI4FHjoPT8JEE8p+PgwaMoINlICyIMKiCdvwz9yEnsHPy7FkmatpS+jFoS\n"
1261 "mg8R9vMwgK/HGEm0dmb/7/a0XsG2jCDm6cOmJdZJFQ8JW7hFs3eOHpNlQYDChG2D\n"
1262 "A1ExslqBtbpicywTZhzFdYU/hxeCr4UqcY27Zmhr4JlBPMyvadWKeOqCamWepjbT\n"
1263 "T/MhWJbmWgZbI5s5sbpu7cOYubQcUIEsTaQXGx/KEzGo1HLn9tzSeQfP/nqjAD/L\n"
1264 "T5t1Mb8o4LuV/fGIT33Q3i2FospJMqp2JINNzG18I6Fjo08PTvJ3row40Rb76+lJ\n"
1265 "wN1IBthgBgsgsOdB6XNc56sV+uq2TACsNNWw+JnFRCkCQgfF/KUrvN+WireWq88B\n"
1266 "9UPG+Hbans5A6K+y1a+bzfdYnKws7x8wNRyPxb7Vb2t9ZTl5PBorPLVGsjgf9N5X\n"
1267 "tCdBlfJsUdXot+EOxrIczV5zx0JIB1Y9hrDG07RYkzPuJKxkW7skqeLo8oWGVpaQ\n"
1268 "LGWvuebky1R75hcSuL3e4QHfjBHPdQ31fScB884tqkbhBAWr2nT9bYEmyT170bno\n"
1269 "8QkyOSb99xZBX55sLDHs9p61sTJr2C9Lz/KaWQs+3hTkpwSjSRyjEMH2n491qiQX\n"
1270 "G+kvLEnvtR8sl9zinorj/RfsxyPntAxudfY3qaYUu2QkLvVdfTVUVbxS/Fg8f7B3\n"
1271 "hEjCtpKgFjPxQuHE3didNOr5xM7mkmLN/QA7yHVgdpE64T5mFgC3JcVRpcR7zBPH\n"
1272 "3OeXHgjrhDfN8UIX/cq6gNgD8w7O0rhHa3mEXI1xP14ykPcJ7wlRuLm9P3fwx5A2\n"
1273 "jQrVKJKw1Nzummmspn4VOpJY3LkH4Sxo4e7Soo1l1cxJpzmERwgMF+vGz1L70+DG\n"
1274 "M0hVrz1PxlOsBBFgcdS4TB91DIs/RcFDqrJ4gOPNKCgBP+rgTXXLFcxUwJfE3lKg\n"
1275 "Kmpwdne6FuQYX3eyRVAmPgOHbJuRQCh/V4fYo51UxCcEKeKy6UgOPEJlXksWGbH5\n"
1276 "VFmlytYW6dFKJvjltSmK6L2r+TlyEQoXwTqe4bkfhB2LniDEq28hKQ==\n"
1277 "-----END RSA PRIVATE KEY-----\n";
1279 std::string pub = "-----BEGIN PUBLIC KEY-----\n"
1280 "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
1281 "T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLf\n"
1282 "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
1283 "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
1284 "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
1285 "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
1287 "-----END PUBLIC KEY-----\n";
1289 ckmc_raw_buffer_s msg_buff = prepare_message_buffer("message test");
1291 CKM::Alias pub_alias = sharedDatabase("pub1");
1292 CKM::Alias pri_alias = sharedDatabase("prv1");
1293 const char *key_passwd = "1234";
1294 char *pri_passwd = NULL;
1295 char *pub_passwd = NULL;
1296 ckmc_hash_algo_e hash_algo = CKMC_HASH_SHA256;
1297 ckmc_rsa_padding_algo_e pad_algo = CKMC_PKCS1_PADDING;
1298 ckmc_raw_buffer_s *signature;
1301 pubkey.raw_key = const_cast<unsigned char *>(reinterpret_cast<const unsigned char *>(pub.c_str()));
1302 pubkey.key_size = pub.size();
1303 pubkey.key_type = CKMC_KEY_NONE;
1304 pubkey.password = NULL;
1306 ckmc_policy_s pubpolicy;
1307 pubpolicy.password = pub_passwd;
1308 pubpolicy.extractable = 0;
1310 ckmc_policy_s pripolicy;
1311 pripolicy.password = pri_passwd;
1312 pripolicy.extractable = 1;
1315 prikey.raw_key = const_cast<unsigned char *>(reinterpret_cast<const unsigned char *>(prv.c_str()));
1316 prikey.key_size = prv.size();
1317 prikey.key_type = CKMC_KEY_NONE;
1318 prikey.password = const_cast<char *>(key_passwd);
1322 CKMC_ERROR_NONE == (temp = ckmc_save_key(pri_alias.c_str(), prikey, pripolicy)),
1323 CKMCReadableError(temp));
1326 CKMC_ERROR_NONE == (temp = ckmc_save_key(pub_alias.c_str(), pubkey, pubpolicy)),
1327 CKMCReadableError(temp));
1330 CKMC_ERROR_NONE == (temp = ckmc_create_signature(
1337 CKMCReadableError(temp));
1340 CKMC_ERROR_NONE == (temp = ckmc_verify_signature(
1347 CKMCReadableError(temp));
1350 RUNNER_TEST(T3083_CAPI__rsa_key_create_verify_negative)
1354 ckmc_raw_buffer_s msg_buff = prepare_message_buffer("message asdfaslkdfjlksadjf test");
1355 CKM::Alias pub_alias = sharedDatabase("pub1");
1356 CKM::Alias pri_alias = sharedDatabase("prv1");
1357 char *pri_passwd = NULL;
1358 char *pub_passwd = NULL;
1359 ckmc_hash_algo_e hash_algo = CKMC_HASH_SHA256;
1360 ckmc_rsa_padding_algo_e pad_algo = CKMC_PKCS1_PADDING;
1361 ckmc_raw_buffer_s *signature;
1364 CKMC_ERROR_NONE == (temp = ckmc_create_signature(
1371 CKMCReadableError(temp));
1374 CKMC_ERROR_NONE == (temp = ckmc_verify_signature(
1381 CKMCReadableError(temp));
1383 RUNNER_ASSERT_MSG(signature->size > 6, "Signature is too small");
1384 memcpy((void*)signature->data, "BROKEN", 6);
1387 CKMC_ERROR_VERIFICATION_FAILED == (temp = ckmc_verify_signature(
1394 CKMCReadableError(temp));
1397 RUNNER_TEST(T3084_CAPI__ec_key_create_verify)
1401 std::string prv = "-----BEGIN EC PRIVATE KEY-----\n"
1402 "MHQCAQEEIJNud6U4h8EM1rASn4W5vQOJELTaVPQTUiESaBULvQUVoAcGBSuBBAAK\n"
1403 "oUQDQgAEL1R+hgjiFrdjbUKRNOxUG8ze9nveD9zT05YHeT7vK0w08AUL1HCH5nFV\n"
1404 "ljePBYSxe6CybFiseayaxRxjA+iF1g==\n"
1405 "-----END EC PRIVATE KEY-----\n";
1407 std::string pub = "-----BEGIN PUBLIC KEY-----\n"
1408 "MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEL1R+hgjiFrdjbUKRNOxUG8ze9nveD9zT\n"
1409 "05YHeT7vK0w08AUL1HCH5nFVljePBYSxe6CybFiseayaxRxjA+iF1g==\n"
1410 "-----END PUBLIC KEY-----\n";
1412 ckmc_raw_buffer_s msg_buff = prepare_message_buffer("message test");
1413 CKM::Alias pri_alias = sharedDatabase("ecprv2");
1414 CKM::Alias pub_alias = sharedDatabase("ecpub2");
1415 char *key_passwd = NULL;
1416 char *pri_passwd = NULL;
1417 char *pub_passwd = NULL;
1418 ckmc_hash_algo_e hash_algo = CKMC_HASH_SHA256;
1419 ckmc_rsa_padding_algo_e pad_algo = CKMC_PKCS1_PADDING;
1420 ckmc_raw_buffer_s *signature;
1423 pubkey.raw_key = const_cast<unsigned char *>(reinterpret_cast<const unsigned char *>(pub.c_str()));
1424 pubkey.key_size = pub.size();
1425 pubkey.key_type = CKMC_KEY_NONE;
1426 pubkey.password = NULL;
1428 ckmc_policy_s pubpolicy;
1429 pubpolicy.password = pub_passwd;
1430 pubpolicy.extractable = 1;
1433 prikey.raw_key = const_cast<unsigned char *>(reinterpret_cast<const unsigned char *>(prv.c_str()));
1434 prikey.key_size = prv.size();
1435 prikey.key_type = CKMC_KEY_NONE;
1436 prikey.password = key_passwd;
1438 ckmc_policy_s pripolicy;
1439 pripolicy.password = pri_passwd;
1440 pripolicy.extractable = 0;
1443 CKMC_ERROR_NONE == (temp = ckmc_save_key(pub_alias.c_str(), pubkey, pubpolicy)),
1444 CKMCReadableError(temp));
1446 CKMC_ERROR_NONE == (temp = ckmc_save_key(pri_alias.c_str(), prikey, pripolicy)),
1447 CKMCReadableError(temp));
1450 CKMC_ERROR_NONE == (temp = ckmc_create_signature(
1457 CKMCReadableError(temp));
1460 CKMC_ERROR_NONE == (temp = ckmc_verify_signature(
1467 CKMCReadableError(temp));
1469 RUNNER_ASSERT_MSG(signature->size > 6, "Signature is too small");
1470 memcpy((void*)signature->data, "BROKEN", 6);
1473 CKMC_ERROR_VERIFICATION_FAILED == (temp = ckmc_verify_signature(
1480 CKMCReadableError(temp));
1483 RUNNER_TEST(T3085_CAPI__rsa_cert_create_verify_signature)
1488 "-----BEGIN RSA PRIVATE KEY-----\n"
1489 "MIICXQIBAAKBgQDCKb9BkTdOjCTXKPi/H5FSGuyrgzORBtR3nCTg7SRnL47zNGEj\n"
1490 "l2wkgsY9ZO3UJHm0gy5KMjWeCuUVkSD3G46J9obg1bYJivCQBJKxfieA8sWOtNq1\n"
1491 "M8emHGK8o3sjaRklrngmk2xSCs5vFJVlCluzAYUmrPDm64C3+n4yW4pBCQIDAQAB\n"
1492 "AoGAd1IWgiHO3kuLvFome7XXpaB8P27SutZ6rcLcewnhLDRy4g0XgTrmL43abBJh\n"
1493 "gdSkooVXZity/dvuKpHUs2dQ8W8zYiFFsHfu9qqLmLP6SuBPyUCvlUDH5BGfjjxI\n"
1494 "5qGWIowj/qGHKpbQ7uB+Oe2BHwbHao0zFZIkfKqY0mX9U00CQQDwF/4zQcGS1RX/\n"
1495 "229gowTsvSGVmm8cy1jGst6xkueEuOEZ/AVPO1fjavz+nTziUk4E5lZHAj18L6Hl\n"
1496 "iO29LRujAkEAzwbEWVhfTJewCZIFf3sY3ifXhGZhVKDHVzPBNyoft8Z+09DMHTJb\n"
1497 "EYg85MIbR73aUyIWsEci/CPk6LPRNv47YwJAHtQF2NEFqPPhakPjzjXAaSFz0YDN\n"
1498 "6ZWWpZTMEWL6hUkz5iE9EUpeY54WNB8+dRT6XZix1VZNTMfU8uMdG6BSHwJBAKYM\n"
1499 "gm47AGz5eVujwD8op6CACk+KomRzdI+P1lh9s+T+E3mnDiAY5IxiXp0Ix0K6lyN4\n"
1500 "wwPuerQLwi2XFKZsMYsCQQDOiSQFP9PfXh9kFzN6e89LxOdnqC/r9i5GDB3ea8eL\n"
1501 "SCRprpzqOXZvOP1HBAEjsJ6k4f8Dqj1fm+y8ZcgAZUPr\n"
1502 "-----END RSA PRIVATE KEY-----\n";
1505 "-----BEGIN CERTIFICATE-----\n"
1506 "MIICijCCAfOgAwIBAgIJAMvaNHQ1ozT8MA0GCSqGSIb3DQEBBQUAMF4xCzAJBgNV\n"
1507 "BAYTAlBMMQ0wCwYDVQQIDARMb2R6MQ0wCwYDVQQHDARMb2R6MRAwDgYDVQQKDAdT\n"
1508 "YW1zdW5nMREwDwYDVQQLDAhTZWN1cml0eTEMMAoGA1UEAwwDQ0tNMB4XDTE0MDcw\n"
1509 "MjEyNDE0N1oXDTE3MDcwMTEyNDE0N1owXjELMAkGA1UEBhMCUEwxDTALBgNVBAgM\n"
1510 "BExvZHoxDTALBgNVBAcMBExvZHoxEDAOBgNVBAoMB1NhbXN1bmcxETAPBgNVBAsM\n"
1511 "CFNlY3VyaXR5MQwwCgYDVQQDDANDS00wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ\n"
1512 "AoGBAMIpv0GRN06MJNco+L8fkVIa7KuDM5EG1HecJODtJGcvjvM0YSOXbCSCxj1k\n"
1513 "7dQkebSDLkoyNZ4K5RWRIPcbjon2huDVtgmK8JAEkrF+J4DyxY602rUzx6YcYryj\n"
1514 "eyNpGSWueCaTbFIKzm8UlWUKW7MBhSas8ObrgLf6fjJbikEJAgMBAAGjUDBOMB0G\n"
1515 "A1UdDgQWBBQuW9DuITahZJ6saVZZI0aBlis5vzAfBgNVHSMEGDAWgBQuW9DuITah\n"
1516 "ZJ6saVZZI0aBlis5vzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAB2X\n"
1517 "GNtJopBJR3dCpzDONknr/c6qcsPVa3nH4c7qzy6F+4bgqa5IObnoF8zUrvD2sMAO\n"
1518 "km3C/N+Qzt8Rb7ORM6U4tlPp1kZ5t6PKjghhNaiYwVm9A/Zm+wyAmRIkQiYDr4MX\n"
1519 "e+bRAkPmJeEWpaav1lvvBnFzGSGJrnSSeWUegGyn\n"
1520 "-----END CERTIFICATE-----\n";
1522 ckmc_raw_buffer_s msg_buff = prepare_message_buffer("message test");
1524 CKM::Alias pri_alias = sharedDatabase("prv3");
1525 CKM::Alias pub_alias = sharedDatabase("pub3");
1526 char *key_passwd = NULL;
1527 char *pri_passwd = NULL;
1528 char *pub_passwd = NULL;
1529 ckmc_hash_algo_e hash_algo = CKMC_HASH_SHA256;
1530 ckmc_rsa_padding_algo_e pad_algo = CKMC_PKCS1_PADDING;
1531 ckmc_raw_buffer_s *signature;
1534 cert.raw_cert = const_cast<unsigned char *>(reinterpret_cast<const unsigned char *>(pub.c_str()));
1535 cert.cert_size = pub.size();
1536 cert.data_format = CKMC_FORM_PEM;
1538 ckmc_policy_s certpolicy;
1539 certpolicy.password = pub_passwd;
1540 certpolicy.extractable = 1;
1543 prikey.raw_key = const_cast<unsigned char *>(reinterpret_cast<const unsigned char *>(prv.c_str()));
1544 prikey.key_size = prv.size();
1545 prikey.key_type = CKMC_KEY_NONE;
1546 prikey.password = key_passwd;
1548 ckmc_policy_s pripolicy;
1549 pripolicy.password = pri_passwd;
1550 pripolicy.extractable = 0;
1553 CKMC_ERROR_NONE == (temp = ckmc_save_cert(pub_alias.c_str(), cert, certpolicy)),
1554 CKMCReadableError(temp));
1556 CKMC_ERROR_NONE == (temp = ckmc_save_key(pri_alias.c_str(), prikey, pripolicy)),
1557 CKMCReadableError(temp));
1561 CKMC_ERROR_NONE == (temp = ckmc_create_signature(
1568 CKMCReadableError(temp));
1571 CKMC_ERROR_NONE == (temp = ckmc_verify_signature(
1578 CKMCReadableError(temp));
1580 RUNNER_ASSERT_MSG(signature->size > 6, "Signature is too small");
1581 memcpy((void*)signature->data, "BROKEN", 6);
1584 CKMC_ERROR_VERIFICATION_FAILED == (temp = ckmc_verify_signature(
1591 CKMCReadableError(temp));
1594 RUNNER_TEST(T3086_CAPI__dsa_ext_key_create_verify_with_negative)
1598 const std::string pub = "-----BEGIN PUBLIC KEY-----\n"
1599 "MIIBtzCCASwGByqGSM44BAEwggEfAoGBALeveaD/EheW+ws1YuW77f344+brkEzm\n"
1600 "BVfFYHr7t+jwu6nQe341SoESJG+PCgrrhy76KNDCfveiwEoWufVHnI4bYBU/ClzP\n"
1601 "A3amf6c5yud45ZR/b6OiAuew6ohY0mQGnzqeio8BaCsZaJ6EziCSlkdIDJisSfPg\n"
1602 "nlWHqf4AwHVdAhUA7I1JQ7sBFJ+N19w3Omu+aO8EG08CgYEAldagy/Ccxhh43cZu\n"
1603 "AZQxgJLCcp1jg6NdPMdkZ2TcSijvaVxBu+gjEGOqN5Os2V6UF7S/k/rjHYmcX9ux\n"
1604 "gpjkC31yTNrKyERIAFIYZtG2K7LVBUZq5Fgm7I83QBVchJ2PA7mBaugJFEhNjbhK\n"
1605 "NRip5UH38le1YDZ/IiA+svFOpeoDgYQAAoGAPT91aEgwFdulzmHlvr3k+GBCE9z+\n"
1606 "hq0c3FGUCtGbVOqg2KPqMBgwSb4MC0msQys4DTVZhLJI+C5eIPEHgfBMqY1ZNJdO\n"
1607 "OSCQciDXnRfSqKbT6tjDTgR5jmh5bG1Q8QFeBTHCDsQHoQYWgx0nyu12lASN80rC\n"
1608 "YMYCBhubtrVaLmc=\n"
1609 "-----END PUBLIC KEY-----";
1611 const std::string priv = "-----BEGIN DSA PRIVATE KEY-----\n"
1612 "MIIBvAIBAAKBgQC3r3mg/xIXlvsLNWLlu+39+OPm65BM5gVXxWB6+7fo8Lup0Ht+\n"
1613 "NUqBEiRvjwoK64cu+ijQwn73osBKFrn1R5yOG2AVPwpczwN2pn+nOcrneOWUf2+j\n"
1614 "ogLnsOqIWNJkBp86noqPAWgrGWiehM4gkpZHSAyYrEnz4J5Vh6n+AMB1XQIVAOyN\n"
1615 "SUO7ARSfjdfcNzprvmjvBBtPAoGBAJXWoMvwnMYYeN3GbgGUMYCSwnKdY4OjXTzH\n"
1616 "ZGdk3Eoo72lcQbvoIxBjqjeTrNlelBe0v5P64x2JnF/bsYKY5At9ckzayshESABS\n"
1617 "GGbRtiuy1QVGauRYJuyPN0AVXISdjwO5gWroCRRITY24SjUYqeVB9/JXtWA2fyIg\n"
1618 "PrLxTqXqAoGAPT91aEgwFdulzmHlvr3k+GBCE9z+hq0c3FGUCtGbVOqg2KPqMBgw\n"
1619 "Sb4MC0msQys4DTVZhLJI+C5eIPEHgfBMqY1ZNJdOOSCQciDXnRfSqKbT6tjDTgR5\n"
1620 "jmh5bG1Q8QFeBTHCDsQHoQYWgx0nyu12lASN80rCYMYCBhubtrVaLmcCFQC0IB4m\n"
1621 "u1roOuaPY+Hl19BlTE2qdw==\n"
1622 "-----END DSA PRIVATE KEY-----";
1624 ckmc_raw_buffer_s msg_buff = prepare_message_buffer("message test");
1626 CKM::Alias pub_alias = sharedDatabase("dsa-pub1");
1627 CKM::Alias pri_alias = sharedDatabase("dsa-prv1");
1628 char *pri_passwd = NULL;
1629 char *pub_passwd = NULL;
1630 ckmc_hash_algo_e hash_algo = CKMC_HASH_SHA256;
1631 ckmc_rsa_padding_algo_e pad_algo = CKMC_PKCS1_PADDING;
1632 ckmc_raw_buffer_s *signature = NULL;
1635 pubkey.raw_key = const_cast<unsigned char *>(reinterpret_cast<const unsigned char *>(pub.c_str()));
1636 pubkey.key_size = pub.size();
1637 pubkey.key_type = CKMC_KEY_NONE;
1638 pubkey.password = NULL;
1640 ckmc_policy_s pubpolicy;
1641 pubpolicy.password = pub_passwd;
1642 pubpolicy.extractable = 0;
1644 ckmc_policy_s pripolicy;
1645 pripolicy.password = pri_passwd;
1646 pripolicy.extractable = 1;
1649 prikey.raw_key = const_cast<unsigned char *>(reinterpret_cast<const unsigned char *>(priv.c_str()));
1650 prikey.key_size = priv.size();
1651 prikey.key_type = CKMC_KEY_NONE;
1652 prikey.password = NULL;
1656 CKMC_ERROR_NONE == (temp = ckmc_save_key(pri_alias.c_str(), prikey, pripolicy)),
1657 CKMCReadableError(temp));
1660 CKMC_ERROR_NONE == (temp = ckmc_save_key(pub_alias.c_str(), pubkey, pubpolicy)),
1661 CKMCReadableError(temp));
1664 CKMC_ERROR_NONE == (temp = ckmc_create_signature(
1671 CKMCReadableError(temp));
1675 CKMC_ERROR_NONE == (temp = ckmc_verify_signature(
1682 CKMCReadableError(temp));
1685 ckmc_raw_buffer_s invalid_msg_buff = prepare_message_buffer("invalid message test");
1687 CKMC_ERROR_VERIFICATION_FAILED == (temp = ckmc_verify_signature(
1694 CKMCReadableError(temp));
1696 ckmc_buffer_free(signature);
1699 RUNNER_TEST(T3087_CAPI__dsa_int_key_create_verify_with_negative)
1704 ckmc_policy_s policy_private_key;
1705 ckmc_policy_s policy_public_key;
1707 policy_private_key.password = NULL;
1708 policy_private_key.extractable = 1;
1710 policy_public_key.password = NULL;
1711 policy_public_key.extractable = 1;
1713 ckmc_raw_buffer_s msg_buff = prepare_message_buffer("message test");
1715 CKM::Alias pub_alias = sharedDatabase("dsa-pub2");
1716 CKM::Alias pri_alias = sharedDatabase("dsa-prv2");
1719 CKMC_ERROR_NONE == (temp = ckmc_create_key_pair_dsa(size, pri_alias.c_str(), pub_alias.c_str(), policy_private_key, policy_public_key)),
1722 char *pri_passwd = NULL;
1723 char *pub_passwd = NULL;
1724 ckmc_hash_algo_e hash_algo = CKMC_HASH_SHA256;
1725 ckmc_rsa_padding_algo_e pad_algo = CKMC_PKCS1_PADDING;
1726 ckmc_raw_buffer_s *signature;
1728 ckmc_key_s *pubkey = NULL;
1729 ckmc_key_s *prikey = NULL;
1731 CKMC_ERROR_NONE == (temp = ckmc_get_key(pri_alias.c_str(), 0, &prikey)),
1732 CKMCReadableError(temp));
1735 CKMC_ERROR_NONE == (temp = ckmc_get_key(pub_alias.c_str(), 0, &pubkey)),
1736 CKMCReadableError(temp));
1739 CKMC_ERROR_NONE == (temp = ckmc_create_signature(
1746 CKMCReadableError(temp));
1750 CKMC_ERROR_NONE == (temp = ckmc_verify_signature(
1757 CKMCReadableError(temp));
1760 ckmc_raw_buffer_s invalid_msg_buff = prepare_message_buffer("invalid message test");
1762 CKMC_ERROR_VERIFICATION_FAILED == (temp = ckmc_verify_signature(
1769 CKMCReadableError(temp));
1771 ckmc_key_free(prikey);
1772 ckmc_key_free(pubkey);
1773 ckmc_buffer_free(signature);
1776 RUNNER_TEST(T3088_CAPI__ecdsa_cert_create_verify_signature)
1781 "-----BEGIN EC PRIVATE KEY-----\n"
1782 "MIH8AgEBBBRPb/2utS5aCtyuwmzIHpU6LH3mc6CBsjCBrwIBATAgBgcqhkjOPQEB\n"
1783 "AhUA/////////////////////3////8wQwQU/////////////////////3////wE\n"
1784 "FByXvvxUvXqLZaz4n4HU1K3FZfpFAxUAEFPN5CwU1pbmdodWFRdTO/P4M0UEKQRK\n"
1785 "lrVojvVzKEZkaYlow4u5E8v8giOmKFUxaJR9WdzJEgQjUTd6xfsyAhUBAAAAAAAA\n"
1786 "AAAAAfTI+Seu08p1IlcCAQGhLAMqAATehLqu61gKC3Tgr4wQMVoguAhhG3Uwwz8u\n"
1787 "ELyhe7yPCAuOoLZlTLgf\n"
1788 "-----END EC PRIVATE KEY-----\n";
1791 "-----BEGIN CERTIFICATE-----\n"
1792 "MIICfDCCAjqgAwIBAgIJANIytpeTKlXBMAkGByqGSM49BAEwXjELMAkGA1UEBhMC\n"
1793 "UEwxDTALBgNVBAgMBExvZHoxDTALBgNVBAcMBExvZHoxEDAOBgNVBAoMB1NhbXN1\n"
1794 "bmcxETAPBgNVBAsMCFNlY3VyaXR5MQwwCgYDVQQDDANDS00wHhcNMTQwNzAyMTI0\n"
1795 "MTQ3WhcNMTcwNzAxMTI0MTQ3WjBeMQswCQYDVQQGEwJQTDENMAsGA1UECAwETG9k\n"
1796 "ejENMAsGA1UEBwwETG9kejEQMA4GA1UECgwHU2Ftc3VuZzERMA8GA1UECwwIU2Vj\n"
1797 "dXJpdHkxDDAKBgNVBAMMA0NLTTCB6jCBuwYHKoZIzj0CATCBrwIBATAgBgcqhkjO\n"
1798 "PQEBAhUA/////////////////////3////8wQwQU/////////////////////3//\n"
1799 "//wEFByXvvxUvXqLZaz4n4HU1K3FZfpFAxUAEFPN5CwU1pbmdodWFRdTO/P4M0UE\n"
1800 "KQRKlrVojvVzKEZkaYlow4u5E8v8giOmKFUxaJR9WdzJEgQjUTd6xfsyAhUBAAAA\n"
1801 "AAAAAAAAAfTI+Seu08p1IlcCAQEDKgAE3oS6rutYCgt04K+MEDFaILgIYRt1MMM/\n"
1802 "LhC8oXu8jwgLjqC2ZUy4H6NQME4wHQYDVR0OBBYEFELElWx3kbLo55Cfn1vywsEZ\n"
1803 "ccsmMB8GA1UdIwQYMBaAFELElWx3kbLo55Cfn1vywsEZccsmMAwGA1UdEwQFMAMB\n"
1804 "Af8wCQYHKoZIzj0EAQMxADAuAhUAumC4mGoyK97SxTvVBQ+ELfCbxEECFQCbMJ72\n"
1805 "Q1oBry6NEc+lLFmWMDesAA==\n"
1806 "-----END CERTIFICATE-----\n";
1808 ckmc_raw_buffer_s msg_buff = prepare_message_buffer("message test");
1810 CKM::Alias pri_alias = sharedDatabase("prv4");
1811 CKM::Alias pub_alias = sharedDatabase("pub4");
1812 char *key_passwd = NULL;
1813 char *pri_passwd = NULL;
1814 char *pub_passwd = NULL;
1815 ckmc_hash_algo_e hash_algo = CKMC_HASH_SHA256;
1816 ckmc_rsa_padding_algo_e pad_algo = CKMC_PKCS1_PADDING;
1817 ckmc_raw_buffer_s *signature;
1820 cert.raw_cert = const_cast<unsigned char *>(reinterpret_cast<const unsigned char *>(pub.c_str()));
1821 cert.cert_size = pub.size();
1822 cert.data_format = CKMC_FORM_PEM;
1824 ckmc_policy_s certpolicy;
1825 certpolicy.password = pub_passwd;
1826 certpolicy.extractable = 1;
1829 prikey.raw_key = const_cast<unsigned char *>(reinterpret_cast<const unsigned char *>(prv.c_str()));
1830 prikey.key_size = prv.size();
1831 prikey.key_type = CKMC_KEY_NONE;
1832 prikey.password = key_passwd;
1834 ckmc_policy_s pripolicy;
1835 pripolicy.password = pri_passwd;
1836 pripolicy.extractable = 0;
1840 CKMC_ERROR_NONE == (temp = ckmc_save_cert(pub_alias.c_str(), cert, certpolicy)),
1841 CKMCReadableError(temp));
1843 CKMC_ERROR_NONE == (temp = ckmc_save_key(pri_alias.c_str(), prikey, pripolicy)),
1844 CKMCReadableError(temp));
1847 CKMC_ERROR_NONE == (temp = ckmc_create_signature(
1854 CKMCReadableError(temp));
1857 CKMC_ERROR_NONE == (temp = ckmc_verify_signature(
1864 CKMCReadableError(temp));
1866 RUNNER_ASSERT_MSG(signature->size > 6, "Signature is too small");
1867 memcpy((void*)signature->data, "BROKEN", 6);
1870 CKMC_ERROR_VERIFICATION_FAILED == (temp = ckmc_verify_signature(
1877 CKMCReadableError(temp));
1880 RUNNER_TEST(T3089_CAPI__deinit)
1882 remove_user_data(0);
1886 //#######################################################################################
1888 void _assertKey(ckmc_key_s *key, unsigned char *raw_key, unsigned int key_size, ckmc_key_type_e key_type, char *password)
1890 RUNNER_ASSERT_MSG(key->key_size == key_size, "Key Size Error" );
1891 RUNNER_ASSERT_MSG(key->key_type == key_type, "Key Type Error" );
1893 if(key->password != NULL && password != NULL) {
1894 RUNNER_ASSERT_MSG(strcmp(key->password, password) == 0, "Password Error" );
1895 }else if(key->password == NULL && password == NULL) {
1896 RUNNER_ASSERT_MSG(true, "Password Error" );
1898 RUNNER_ASSERT_MSG(false, "Password Error" );
1901 if(key->raw_key != NULL && raw_key != NULL) {
1902 for(unsigned int i=0; i<key_size; i++) {
1903 RUNNER_ASSERT_MSG((key->raw_key)[i] == raw_key[i], "Raw Key Error" );
1905 }else if(key->raw_key == NULL && raw_key == NULL) {
1906 RUNNER_ASSERT_MSG(true, "Raw Key Error" );
1908 RUNNER_ASSERT_MSG(false, "Raw Key Error" );
1912 RUNNER_TEST_GROUP_INIT(T309_CKMC_CAPI_TYPES);
1914 RUNNER_TEST(T3091_CAPI_TYPE_init)
1916 remove_user_data(0);
1917 reset_user_data(USER_APP, USER_PASS);
1920 RUNNER_TEST(T3092_CAPI_TYPE_KEY)
1922 std::string keyPem = "-----BEGIN PUBLIC KEY-----\n"
1923 "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
1924 "T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLf\n"
1925 "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
1926 "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
1927 "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
1928 "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
1930 "-----END PUBLIC KEY-----";
1932 unsigned char *raw_key = const_cast<unsigned char *>(reinterpret_cast<const unsigned char *>(keyPem.c_str()));
1933 unsigned int key_size = keyPem.size();
1934 ckmc_key_type_e key_type = CKMC_KEY_NONE;
1935 char *password = const_cast< char *>("");
1938 ckmc_key_new(raw_key, key_size, key_type, password, &key);
1940 _assertKey(key, raw_key, key_size, key_type, password);
1943 char *passwordNull = NULL;
1945 ckmc_key_new(raw_key, key_size, key_type, passwordNull, &key2);
1946 ckmc_key_free(key2);
1949 RUNNER_TEST(T3093_CAPI_TYPE_BUFFER)
1951 std::string keyPem = "-----BEGIN PUBLIC KEY-----\n"
1952 "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
1953 "T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLf\n"
1954 "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
1955 "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
1956 "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
1957 "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
1959 "-----END PUBLIC KEY-----";
1961 unsigned char *data = const_cast<unsigned char *>(reinterpret_cast<const unsigned char *>(keyPem.c_str()));
1962 unsigned int size = keyPem.size();
1964 ckmc_raw_buffer_s *buff;
1965 ckmc_buffer_new(data, size, &buff);
1967 RUNNER_ASSERT_MSG(buff->size == size, "Size Error" );
1969 if(buff->data != NULL && data != NULL) {
1970 for(unsigned int i=0; i<size; i++) {
1971 RUNNER_ASSERT_MSG((buff->data)[i] == data[i], "Raw data Error" );
1973 }else if(buff->data == NULL && data == NULL) {
1974 RUNNER_ASSERT_MSG(true, "Raw data Error" );
1976 RUNNER_ASSERT_MSG(false, "Raw data Error" );
1979 ckmc_buffer_free(buff);
1982 RUNNER_TEST(T3094_CAPI_TYPE_CERT)
1984 std::string certPem = TestData::getTestCertificateBase64(TestData::GIAG2);
1986 unsigned char *raw_cert = const_cast<unsigned char *>(reinterpret_cast<const unsigned char *>(certPem.c_str()));
1987 unsigned int size = certPem.size();
1988 ckmc_data_format_e form = CKMC_FORM_PEM;
1990 ckmc_cert_s *ckmCert;
1991 ckmc_cert_new(raw_cert, size, form, &ckmCert);
1993 RUNNER_ASSERT_MSG(ckmCert->cert_size == size, "Size Error" );
1995 if(ckmCert->raw_cert != NULL && raw_cert != NULL) {
1996 for(unsigned int i=0; i<size; i++) {
1997 RUNNER_ASSERT_MSG((ckmCert->raw_cert)[i] == raw_cert[i], "Raw data Error" );
1999 }else if(ckmCert->raw_cert == NULL && raw_cert == NULL) {
2000 RUNNER_ASSERT_MSG(true, "raw_cert Error" );
2002 RUNNER_ASSERT_MSG(false, "raw_cert Error" );
2005 RUNNER_ASSERT_MSG(ckmCert->data_format == form, "ckmc_cert_form Error" );
2007 ckmc_cert_free(ckmCert);
2011 RUNNER_TEST(T3095_CAPI_TYPE_load_cert_file)
2015 std::string certStr = TestData::getTestCertificateBase64(TestData::MBANK);
2017 const char *file_name = "/tmp/ckmc_test_cert.pem";
2021 cert_file = fopen(file_name, "w");
2022 fprintf(cert_file, "%s",certStr.c_str());
2028 CKMC_ERROR_NONE == (ret = ckmc_load_cert_from_file(file_name, &pcert)),
2029 CKMCReadableError(ret));
2032 pcert != NULL && pcert->cert_size > 0,"Fail to load cert from file.");
2034 CKM::Alias lcert_alias = sharedDatabase("lcert_alias");
2035 ckmc_policy_s policy;
2036 policy.password = NULL;
2037 policy.extractable = 1;
2040 CKMC_ERROR_NONE == (ret = ckmc_save_cert(lcert_alias.c_str(), *pcert, policy)),
2041 CKMCReadableError(ret));
2046 RUNNER_TEST(T3096_CAPI_TYPE_load_p12_file) {
2047 const char *p12file = CKM_TEST_DIR "/capi-t3096.p12";
2048 const char *password = "password";
2052 ckmc_key_s *private_key = NULL;
2053 ckmc_cert_s *cert = NULL;
2054 ckmc_cert_list_s *ca_cert_list = NULL;
2057 CKMC_ERROR_NONE == (temp = ckmc_load_from_pkcs12_file(p12file, password,
2058 &private_key, &cert, &ca_cert_list)),
2060 RUNNER_ASSERT_MSG(private_key != NULL, "Null private_key");
2061 RUNNER_ASSERT_MSG(cert != NULL, "Null cert");
2062 RUNNER_ASSERT_MSG(ca_cert_list != NULL, "Null ca_cert_list");
2064 ckmc_policy_s policy;
2065 policy.password = NULL;
2066 policy.extractable = 1;
2069 CKM::Alias pkey_alias = sharedDatabase("pkey_alias");
2071 CKMC_ERROR_NONE == (temp = ckmc_save_key(pkey_alias.c_str(), *private_key, policy)),
2072 CKMCReadableError(temp));
2074 CKM::Alias cert_alias = sharedDatabase("cert_alias");
2076 CKMC_ERROR_NONE == (temp = ckmc_save_cert(cert_alias.c_str(), *cert, policy)),
2077 CKMCReadableError(temp));
2078 std::string caCertAlias = sharedDatabase("ca_cert_alias_");
2079 const char *idx = "0";
2081 ckmc_cert_list_s *tmpList = ca_cert_list;
2082 while(tmpList != NULL) {
2083 caCertAlias.append(idx);
2085 CKMC_ERROR_NONE == (temp = ckmc_save_cert(caCertAlias.c_str(), *(tmpList->cert), policy)),
2086 CKMCReadableError(temp));
2087 tmpList = tmpList->next;
2091 RUNNER_ASSERT_MSG(cnt == 2, "Invalid CA Cert Count");
2093 ckmc_key_free(private_key);
2094 ckmc_cert_free(cert);
2095 ckmc_cert_list_all_free(ca_cert_list);
2098 RUNNER_TEST(T3097_CAPI_TYPE_load_p12_file2) {
2099 const char *p12file = CKM_TEST_DIR "/capi-t3096.p12";
2100 const char *password = "password";
2104 ckmc_pkcs12_s *ppkcs12 = NULL;
2107 CKMC_ERROR_NONE == (temp = ckmc_pkcs12_load(p12file, password, &ppkcs12)),
2108 CKMCReadableError(temp));
2109 RUNNER_ASSERT_MSG(ppkcs12->priv_key != NULL, "Null private_key");
2110 RUNNER_ASSERT_MSG(ppkcs12->cert != NULL, "Null cert");
2111 RUNNER_ASSERT_MSG(ppkcs12->ca_chain != NULL, "Null ca_cert_list");
2113 ckmc_policy_s policy;
2114 policy.password = NULL;
2115 policy.extractable = 1;
2118 CKM::Alias pkey_alias = sharedDatabase("pkey_alias2");
2120 CKMC_ERROR_NONE == (temp = ckmc_save_key(pkey_alias.c_str(), *(ppkcs12->priv_key), policy)),
2121 CKMCReadableError(temp));
2123 CKM::Alias cert_alias = sharedDatabase("cert_alias2");
2125 CKMC_ERROR_NONE == (temp = ckmc_save_cert(cert_alias.c_str(), *(ppkcs12->cert), policy)),
2126 CKMCReadableError(temp));
2127 std::string caCertAlias = sharedDatabase("ca_cert_alias_2_");
2128 const char *idx = "0";
2130 ckmc_cert_list_s *tmpList = ppkcs12->ca_chain;
2131 while(tmpList != NULL) {
2132 caCertAlias.append(idx);
2134 CKMC_ERROR_NONE == (temp = ckmc_save_cert(caCertAlias.c_str(), *(tmpList->cert), policy)),
2135 CKMCReadableError(temp));
2136 tmpList = tmpList->next;
2140 RUNNER_ASSERT_MSG(cnt == 2, "Invalid CA Cert Count");
2142 ckmc_pkcs12_free(ppkcs12);
2145 RUNNER_TEST(T3098_CAPI_TYPE_deinit)
2148 remove_user_data(0);
2150 CKMC_ERROR_NONE == (temp = ckmc_lock_user_key(USER_APP)),
2151 CKMCReadableError(temp));
2153 CKMC_ERROR_NONE == (temp = ckmc_remove_user_data(USER_APP)),
2154 CKMCReadableError(temp));
2157 RUNNER_TEST_GROUP_INIT(T310_CKMC_CAPI_PKCS12);
2161 CKM::Alias alias_PKCS_exportable = sharedDatabase("CAPI-test-PKCS-export");
2162 CKM::Alias alias_PKCS_not_exportable = sharedDatabase("CAPI-test-PKCS-no-export");
2165 RUNNER_TEST(T3101_CAPI_PKCS12_init)
2167 remove_user_data(0);
2170 RUNNER_TEST(T3102_CAPI_PKCS12_negative_wrong_password)
2172 const char *wrong_passwd = "wrong";
2173 ckmc_pkcs12_s *ppkcs12 = NULL;
2176 CKMC_ERROR_INVALID_FORMAT == (temp = ckmc_pkcs12_load(CKM_TEST_DIR "/test1801.pkcs12", wrong_passwd, &ppkcs12)),
2177 CKMCReadableError(temp));
2180 RUNNER_TEST(T3103_CAPI_PKCS12_add_bundle_with_chain_certs)
2182 ckmc_pkcs12_s *ppkcs12 = NULL;
2185 CKMC_ERROR_NONE == (temp = ckmc_pkcs12_load(CKM_TEST_DIR "/pkcs.p12", NULL, &ppkcs12)),
2186 CKMCReadableError(temp));
2188 RUNNER_ASSERT_MSG(NULL != ppkcs12->cert, "no certificate in PKCS12");
2189 RUNNER_ASSERT_MSG(NULL != ppkcs12->priv_key, "no private key in PKCS12");
2190 RUNNER_ASSERT_MSG(NULL != ppkcs12->ca_chain, "no chain certificates in PKCS12");
2193 ckmc_policy_s exportable;
2194 exportable.password = NULL;
2195 exportable.extractable = 1;
2196 ckmc_policy_s notExportable;
2197 notExportable.password = NULL;
2198 notExportable.extractable = 0;
2201 CKMC_ERROR_NONE == (temp = ckmc_save_pkcs12(alias_PKCS_exportable.c_str(), ppkcs12, exportable, exportable)),
2202 CKMCReadableError(temp));
2204 CKMC_ERROR_DB_ALIAS_EXISTS == (temp = ckmc_save_pkcs12(alias_PKCS_exportable.c_str(), ppkcs12, exportable, exportable)),
2205 CKMCReadableError(temp));
2207 CKMC_ERROR_NONE == (temp = ckmc_save_pkcs12(alias_PKCS_not_exportable.c_str(), ppkcs12, notExportable, notExportable)),
2208 CKMCReadableError(temp));
2210 CKMC_ERROR_DB_ALIAS_EXISTS == (temp = ckmc_save_pkcs12(alias_PKCS_not_exportable.c_str(), ppkcs12, notExportable, notExportable)),
2211 CKMCReadableError(temp));
2213 // try to lookup key
2214 ckmc_key_s *key_lookup = NULL;
2216 CKMC_ERROR_NONE == (temp = ckmc_get_key(alias_PKCS_exportable.c_str(), NULL, &key_lookup)),
2217 CKMCReadableError(temp));
2218 ckmc_key_free(key_lookup);
2221 CKMC_ERROR_NOT_EXPORTABLE == (temp = ckmc_get_key(alias_PKCS_not_exportable.c_str(), "", &key_lookup)),
2222 CKMCReadableError(temp));
2223 ckmc_key_free(key_lookup);
2225 // try to lookup certificate
2226 ckmc_cert_s *cert_lookup = NULL;
2228 CKMC_ERROR_NONE == (temp = ckmc_get_cert(alias_PKCS_exportable.c_str(), NULL, &cert_lookup)),
2229 CKMCReadableError(temp));
2230 ckmc_cert_free(cert_lookup);
2233 CKMC_ERROR_NOT_EXPORTABLE == (temp = ckmc_get_cert(alias_PKCS_not_exportable.c_str(), NULL, &cert_lookup)),
2234 CKMCReadableError(temp));
2235 ckmc_cert_free(cert_lookup);
2238 RUNNER_TEST(T3104_CAPI_PKCS12_get_PKCS)
2241 ckmc_pkcs12_s *pkcs = NULL;
2245 CKMC_ERROR_DB_ALIAS_UNKNOWN == (temp = ckmc_get_pkcs12(sharedDatabase("i-do-not-exist").c_str(), NULL, NULL, &pkcs)),
2246 CKMCReadableError(temp));
2247 ckmc_pkcs12_free(pkcs);
2250 // fail - not exportable
2252 CKMC_ERROR_NOT_EXPORTABLE == (temp = ckmc_get_pkcs12(alias_PKCS_not_exportable.c_str(), NULL, NULL, &pkcs)),
2253 CKMCReadableError(temp));
2254 ckmc_pkcs12_free(pkcs);
2257 // success - exportable
2259 CKMC_ERROR_NONE == (temp = ckmc_get_pkcs12(alias_PKCS_exportable.c_str(), NULL, NULL, &pkcs)),
2260 CKMCReadableError(temp));
2262 RUNNER_ASSERT_MSG(NULL != pkcs->cert, "no certificate in PKCS12");
2263 RUNNER_ASSERT_MSG(NULL != pkcs->priv_key, "no private key in PKCS12");
2264 RUNNER_ASSERT_MSG(NULL != pkcs->ca_chain, "no chain certificates in PKCS12");
2266 ckmc_cert_list_s *iter = pkcs->ca_chain;
2271 RUNNER_ASSERT_MSG(2 == cntr, "invalid number of chain certificates in PKCS12");
2273 ckmc_pkcs12_free(pkcs);
2276 RUNNER_TEST(T3105_CAPI_PKCS12_create_and_verify_signature)
2278 ckmc_raw_buffer_s msg_buff = prepare_message_buffer("message test");
2281 ckmc_hash_algo_e hash_algo = CKMC_HASH_SHA256;
2282 ckmc_rsa_padding_algo_e pad_algo = CKMC_PKCS1_PADDING;
2283 ckmc_raw_buffer_s *signature = NULL;
2286 CKMC_ERROR_NONE == (temp = ckmc_create_signature(
2287 alias_PKCS_exportable.c_str(),
2293 CKMCReadableError(temp));
2296 CKMC_ERROR_NONE == (temp = ckmc_verify_signature(
2297 alias_PKCS_exportable.c_str(),
2303 CKMCReadableError(temp));
2306 RUNNER_TEST(T3106_CAPI_PKCS12_remove_bundle_with_chain_certs)
2310 // remove the whole PKCS12 bundles
2312 CKMC_ERROR_NONE == (tmp = ckmc_remove_alias(alias_PKCS_exportable.c_str())),
2313 CKMCReadableError(tmp));
2315 CKMC_ERROR_NONE == (tmp = ckmc_remove_alias(alias_PKCS_not_exportable.c_str())),
2316 CKMCReadableError(tmp));
2318 // expect lookup fails due to unknown alias
2319 // try to lookup key
2320 ckmc_key_s *key_lookup = NULL;
2322 CKMC_ERROR_DB_ALIAS_UNKNOWN == (tmp = ckmc_get_key(alias_PKCS_exportable.c_str(), NULL, &key_lookup)),
2323 CKMCReadableError(tmp));
2324 ckmc_key_free(key_lookup);
2327 CKMC_ERROR_DB_ALIAS_UNKNOWN == (tmp = ckmc_get_key(alias_PKCS_not_exportable.c_str(), NULL, &key_lookup)),
2328 CKMCReadableError(tmp));
2329 ckmc_key_free(key_lookup);
2331 // try to lookup certificate
2332 ckmc_cert_s *cert_lookup = NULL;
2334 CKMC_ERROR_DB_ALIAS_UNKNOWN == (tmp = ckmc_get_cert(alias_PKCS_exportable.c_str(), NULL, &cert_lookup)),
2335 CKMCReadableError(tmp));
2336 ckmc_cert_free(cert_lookup);
2339 CKMC_ERROR_DB_ALIAS_UNKNOWN == (tmp = ckmc_get_cert(alias_PKCS_not_exportable.c_str(), NULL, &cert_lookup)),
2340 CKMCReadableError(tmp));
2341 ckmc_cert_free(cert_lookup);
2344 RUNNER_TEST(T3109_CAPI_PKCS12_deinit)
2346 remove_user_data(0);
2350 RUNNER_TEST_GROUP_INIT(T320_CAPI_EMPTY_DATABASE);
2352 RUNNER_TEST(T3201_CAPI_unlock_database)
2354 reset_user_data(USER_APP, USER_PASS);
2357 RUNNER_CHILD_TEST(T3202_CAPI_get_data_from_empty_database)
2359 ScopedDBUnlock unlock(USER_APP, USER_PASS);
2360 ScopedAccessProvider ap(TEST_LABEL);
2361 ap.allowAPI("key-manager::api-storage", "rw");
2362 ap.applyAndSwithToUser(USER_APP, GROUP_APP);
2365 CKM::Alias alias = "mykey";
2366 char *password = NULL;
2367 ckmc_key_s *test_key = NULL;
2370 CKMC_ERROR_DB_ALIAS_UNKNOWN == (temp = ckmc_get_key(alias.c_str(), password, &test_key)),
2373 RUNNER_ASSERT_MSG(NULL == test_key, "Key value should not be changed");
2376 RUNNER_CHILD_TEST(T3203_CAPI_lock_database)
2378 ScopedDBUnlock unlock(USER_APP, USER_PASS);
2381 RUNNER_ASSERT_MSG( CKMC_ERROR_NONE == (temp = ckmc_lock_user_key(USER_APP)),
2382 CKMCReadableError(temp));
2385 RUNNER_CHILD_TEST(T3204_CAPI_get_data_from_locked_database)
2387 ScopedAccessProvider ap(TEST_LABEL);
2388 ap.allowAPI("key-manager::api-storage", "rw");
2389 ap.applyAndSwithToUser(USER_APP, GROUP_APP);
2392 CKM::Alias alias = "mykey";
2393 char *password = NULL;
2394 ckmc_key_s *test_key = NULL;
2397 CKMC_ERROR_DB_LOCKED == (temp = ckmc_get_key(alias.c_str(), password, &test_key)),
2398 CKMCReadableError(temp));
2400 RUNNER_ASSERT_MSG(NULL == test_key, "Key value should not be changed");
2403 RUNNER_TEST(T3204_deinit)
2405 remove_user_data(USER_APP);