Added ckm tests.
[platform/core/test/security-tests.git] / tests / ckm / main.cpp
1 #include <netdb.h>
2
3 #include <dpl/log/log.h>
4 #include <dpl/test/test_runner.h>
5 #include <dpl/test/test_runner_child.h>
6
7 #include <tests_common.h>
8 #include <access_provider.h>
9
10 #include <ckm/ckm-manager.h>
11 #include <ckm/ckm-control.h>
12 #include <ckm/ckm-password.h>
13 #include <ckm/ckm-type.h>
14 #include <ckm/ckm-pkcs12.h>
15
16 #include <fstream>
17
18 static const int USER_APP = 5000;
19 static const int GROUP_APP = 5000;
20 static const int USER_TEST = 5001;
21
22 /*
23  *  How to numerate tests:
24  *  TABCD_NAME
25  *  T - test case (always T)
26  *  AB - number of test group (always two digits)
27  *  C - test number in group (all tests with same TABC must be run in the same time).
28  *  D - subtest.
29  */
30
31
32 RUNNER_TEST_GROUP_INIT(T0000_CKM_CONTROL);
33
34 RUNNER_TEST(T0010_Control)
35 {
36     int temp;
37     auto control = CKM::Control::create();
38
39     control->removeUserData(0);
40     control->removeUserData(20);
41     control->removeUserData(USER_APP);
42
43     RUNNER_ASSERT_MSG(
44         CKM_API_SUCCESS == (temp = control->unlockUserKey(0, "simple-password")),
45         "Error=" << CKM::ErrorToString(temp));
46 }
47
48 RUNNER_TEST(T0020_Control)
49 {
50     int temp;
51     auto control = CKM::Control::create();
52     RUNNER_ASSERT_MSG(
53         CKM_API_SUCCESS == (temp = control->unlockUserKey(0, "simple-password")),
54         "Error=" << CKM::ErrorToString(temp));
55     RUNNER_ASSERT_MSG(
56         CKM_API_SUCCESS == (temp = control->lockUserKey(0)),
57         "Error=" << CKM::ErrorToString(temp));
58 }
59
60 RUNNER_TEST(T0030_Control)
61 {
62     int temp;
63     auto control = CKM::Control::create();
64     RUNNER_ASSERT_MSG(
65         CKM_API_SUCCESS == (temp = control->unlockUserKey(0, "simple-password")),
66         "Error=" << CKM::ErrorToString(temp));
67 }
68
69 RUNNER_TEST(T0040_Control)
70 {
71     int temp;
72     auto control = CKM::Control::create();
73     RUNNER_ASSERT_MSG(
74         CKM_API_ERROR_BAD_REQUEST == (temp = control->resetUserPassword(14, "simple-password")),
75         "Error=" << CKM::ErrorToString(temp));
76 }
77
78 RUNNER_TEST(T0050_Control)
79 {
80     int temp;
81     auto control = CKM::Control::create();
82     RUNNER_ASSERT_MSG(
83         CKM_API_SUCCESS == (temp = control->unlockUserKey(20, "test-pass")),
84         "Error=" << CKM::ErrorToString(temp));
85     RUNNER_ASSERT_MSG(
86         CKM_API_SUCCESS == (temp = control->changeUserPassword(20, "test-pass", "new-pass")),
87         "Error=" << CKM::ErrorToString(temp));
88     RUNNER_ASSERT_MSG(
89         CKM_API_SUCCESS == (temp = control->lockUserKey(20)),
90         "Error=" << CKM::ErrorToString(temp));
91     RUNNER_ASSERT_MSG(
92         CKM_API_SUCCESS == (temp = control->removeUserData(20)),
93         "Error=" << CKM::ErrorToString(temp));
94 }
95
96 RUNNER_TEST_GROUP_INIT(T101_CKM_QUICK_SET_GET_TESTS);
97
98 RUNNER_TEST(T1010_init)
99 {
100     int temp;
101     auto control = CKM::Control::create();
102     RUNNER_ASSERT_MSG(
103         CKM_API_SUCCESS == (temp = control->unlockUserKey(0, "test-pass")),
104         "Error=" << CKM::ErrorToString(temp));
105     RUNNER_ASSERT_MSG(
106         CKM_API_SUCCESS == (temp = control->unlockUserKey(USER_APP, "user-pass")),
107         "Error=" << CKM::ErrorToString(temp));
108 }
109
110 RUNNER_TEST(T1011_key)
111 {
112     int temp;
113     auto manager = CKM::Manager::create();
114
115     std::string keyPem = "-----BEGIN PUBLIC KEY-----\n"
116         "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
117         "T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLf\n"
118         "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
119         "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
120         "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
121         "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
122         "zQIDAQAB\n"
123         "-----END PUBLIC KEY-----";
124
125     CKM::RawBuffer buffer(keyPem.begin(), keyPem.end());
126     auto key = CKM::Key::create(buffer, CKM::Password());
127     CKM::KeyShPtr key2;
128     CKM::Alias alias = "mykey";
129
130     RUNNER_ASSERT_MSG(
131         CKM_API_SUCCESS == (temp = manager->saveKey(alias, key, CKM::Policy())),
132         "Error=" << CKM::ErrorToString(temp));
133     RUNNER_ASSERT_MSG(
134         CKM_API_SUCCESS == (temp = manager->getKey(alias, CKM::Password(), key2)),
135         "Error=" << CKM::ErrorToString(temp));
136     RUNNER_ASSERT_MSG(
137         key->getDER() == key2->getDER(),
138         "Key value has been changed by service");
139 }
140
141 RUNNER_TEST(T1012_certificate)
142 {
143     int temp;
144     auto manager = CKM::Manager::create();
145
146     std::string certPem =
147         "-----BEGIN CERTIFICATE-----\n"
148         "MIIEgDCCA2igAwIBAgIIcjtBYJGQtOAwDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE\n"
149         "BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMTHEdvb2dsZSBJbnRl\n"
150         "cm5ldCBBdXRob3JpdHkgRzIwHhcNMTQwNTIyMTEyOTQyWhcNMTQwODIwMDAwMDAw\n"
151         "WjBtMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwN\n"
152         "TW91bnRhaW4gVmlldzETMBEGA1UECgwKR29vZ2xlIEluYzEcMBoGA1UEAwwTYWNj\n"
153         "b3VudHMuZ29vZ2xlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\n"
154         "ALtlLWVWPN3q3bSEQl1Z97gPdgl5vbgJOZSAr0ZY0tJCuFLBbUKetJWryyE+5KpG\n"
155         "gMMpLS4v8/bvXaZc6mAs+RfAqGM24C3vQg5hPnj4dflnhL0WiOCZBurm1tV4oexk\n"
156         "HLXs3jr/jpnb738AQpj8zZ9a4VEBuHJRZALnWZ/XhqU+dvYomAoRQNuL5OhkT7uu\n"
157         "d0NKJL9JjYLyQglGgE2sVsWv2kj7EO/P9Q6NEKt9BGmhMsFvtfeKUaymynaxpR1g\n"
158         "wEPlqYvB38goh1dIOgVLT0OVyLImeg5Mdwar/8c1U0OYhLOc6PJapOZAfUkE+3+w\n"
159         "xYt8AChLN1b5szOwInrCVpECAwEAAaOCAUYwggFCMB0GA1UdJQQWMBQGCCsGAQUF\n"
160         "BwMBBggrBgEFBQcDAjAeBgNVHREEFzAVghNhY2NvdW50cy5nb29nbGUuY29tMGgG\n"
161         "CCsGAQUFBwEBBFwwWjArBggrBgEFBQcwAoYfaHR0cDovL3BraS5nb29nbGUuY29t\n"
162         "L0dJQUcyLmNydDArBggrBgEFBQcwAYYfaHR0cDovL2NsaWVudHMxLmdvb2dsZS5j\n"
163         "b20vb2NzcDAdBgNVHQ4EFgQU0/UtToEtNIfwDwHuYGuVKcj0xK8wDAYDVR0TAQH/\n"
164         "BAIwADAfBgNVHSMEGDAWgBRK3QYWG7z2aLV29YG2u2IaulqBLzAXBgNVHSAEEDAO\n"
165         "MAwGCisGAQQB1nkCBQEwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL3BraS5nb29n\n"
166         "bGUuY29tL0dJQUcyLmNybDANBgkqhkiG9w0BAQUFAAOCAQEAcGNI/X9f0g+7ij0o\n"
167         "ehLpk6vxSMQGrmOZ4+PG/MC9SLClCkt7zJkfU7erZnyVXyxCpwlljq+Wk9YTPUOq\n"
168         "xD/V2ikQVSAANoxGJFO9UoL5jzWusPhKKv8CcM7fuiERz8K+CfBcqfxbgI5rH0g5\n"
169         "dYclmLC81cJ/08i+9Nltvxv69Y3hGfEICT6K+EdSxwnQzOhpMZmvxZsIj+d6CVNa\n"
170         "9ICYgUthsNQVWzrIs5wknpjjZ9liDMwJX0vu8A0rce4X/Lna5hh2bW9igz2iP5WM\n"
171         "9fuwdbTw4y3jfPQgszU4YZxWxhMzccxe058Qx1tLndAknBQEBesQjXytVQpuM1SV\n"
172         "rHva8A==\n"
173         "-----END CERTIFICATE-----\n";
174
175     CKM::RawBuffer buffer(certPem.begin(), certPem.end());
176     auto cert = CKM::Certificate::create(buffer, CKM::DataFormat::FORM_PEM);
177     CKM::CertificateShPtr cert2;
178     CKM::Alias alias = "myCert";
179
180     RUNNER_ASSERT_MSG(
181         CKM_API_SUCCESS == (temp = manager->saveCertificate(alias, cert, CKM::Policy())),
182         "Error=" << CKM::ErrorToString(temp));
183     RUNNER_ASSERT_MSG(
184         CKM_API_SUCCESS == (temp = manager->getCertificate(alias, CKM::Password(), cert2)),
185         "Error=" << CKM::ErrorToString(temp));
186     RUNNER_ASSERT_MSG(
187         cert->getDER() == cert2->getDER(),
188         "Data has been modified in key manager");
189 }
190
191 RUNNER_CHILD_TEST(T1013_user_app_save_key)
192 {
193     SecurityServer::AccessProvider ap("mylabel");
194     ap.addObjectRule("key-manager::api-storage", "rw");
195     ap.applyAndSwithToUser(USER_APP, GROUP_APP);
196
197     std::string keyPem = "-----BEGIN PUBLIC KEY-----\n"
198         "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
199         "T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLf\n"
200         "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
201         "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
202         "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
203         "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
204         "zQIDAQAB\n"
205         "-----END PUBLIC KEY-----";
206
207     int temp;
208     CKM::RawBuffer buffer(keyPem.begin(), keyPem.end());
209     auto key = CKM::Key::create(buffer, CKM::Password());
210     CKM::KeyShPtr key2;
211     CKM::Alias alias = "mykey";
212     auto manager = CKM::Manager::create();
213
214     RUNNER_ASSERT_MSG(
215         CKM_API_SUCCESS == (temp = manager->saveKey(alias, key, CKM::Policy("x"))),
216         "Error=" << CKM::ErrorToString(temp));
217     RUNNER_ASSERT_MSG(
218         CKM_API_SUCCESS == (temp = manager->getKey(alias, CKM::Password("x"), key2)),
219         "Error=" << CKM::ErrorToString(temp));
220     RUNNER_ASSERT_MSG(
221         key->getDER() == key2->getDER(), "Key value has been changed by service");
222 }
223
224
225 RUNNER_TEST(T1014_deinit)
226 {
227     int temp;
228     auto control = CKM::Control::create();
229
230     RUNNER_ASSERT_MSG(
231         CKM_API_SUCCESS == (temp = control->lockUserKey(0)),
232         "Error=" << CKM::ErrorToString(temp));
233     RUNNER_ASSERT_MSG(
234         CKM_API_SUCCESS == (temp = control->removeUserData(0)),
235         "Error=" << CKM::ErrorToString(temp));
236     RUNNER_ASSERT_MSG(
237         CKM_API_SUCCESS == (temp = control->lockUserKey(USER_APP)),
238         "Error=" << CKM::ErrorToString(temp));
239     RUNNER_ASSERT_MSG(
240         CKM_API_SUCCESS == (temp = control->removeUserData(USER_APP)),
241         "Error=" << CKM::ErrorToString(temp));
242 }
243
244 RUNNER_TEST_GROUP_INIT(T102_CKM_QUICK_GET_ALIAS_TESTS);
245
246 RUNNER_TEST(T1020_init)
247 {
248     int temp;
249     auto control = CKM::Control::create();
250     RUNNER_ASSERT_MSG(
251         CKM_API_SUCCESS == (temp = control->unlockUserKey(0, "test-pass")),
252         "Error=" << CKM::ErrorToString(temp));
253     RUNNER_ASSERT_MSG(
254         CKM_API_SUCCESS == (temp = control->unlockUserKey(USER_APP, "user-pass")),
255         "Error=" << CKM::ErrorToString(temp));
256 }
257
258 RUNNER_TEST(T1021_save_keys_get_alias)
259 {
260     int temp;
261     auto manager = CKM::Manager::create();
262
263     std::string keyPem = "-----BEGIN PUBLIC KEY-----\n"
264         "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
265         "T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLf\n"
266         "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
267         "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
268         "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
269         "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
270         "zQIDAQAB\n"
271         "-----END PUBLIC KEY-----";
272
273     CKM::RawBuffer buffer(keyPem.begin(), keyPem.end());
274     auto key = CKM::Key::create(buffer, CKM::Password());
275     CKM::AliasVector aliasVector;
276
277     RUNNER_ASSERT_MSG(
278         CKM_API_SUCCESS == (temp = manager->saveKey("rootkey1", key, CKM::Policy())),
279         "Error=" << CKM::ErrorToString(temp));
280     RUNNER_ASSERT_MSG(
281         CKM_API_SUCCESS == (temp = manager->saveKey("rootkey2", key, CKM::Policy())),
282         "Error=" << CKM::ErrorToString(temp));
283     RUNNER_ASSERT_MSG(
284         CKM_API_SUCCESS == (temp = manager->saveKey("rootkey3", key, CKM::Policy(CKM::Password(), false))),
285         "Error=" << CKM::ErrorToString(temp));
286     RUNNER_ASSERT_MSG(
287         CKM_API_SUCCESS == (temp = manager->getKeyAliasVector(aliasVector)),
288         "Error=" << CKM::ErrorToString(temp));
289     RUNNER_ASSERT_MSG(
290         aliasVector.size() == 3,
291         "Wrong size of list: " << aliasVector.size() << " Expected: 3");
292 }
293
294 RUNNER_CHILD_TEST(T1022_app_user_save_keys_get_alias)
295 {
296     SecurityServer::AccessProvider ap("mylabel");
297     ap.addObjectRule("key-manager::api-storage", "rw");
298     ap.applyAndSwithToUser(USER_APP, GROUP_APP);
299
300     int temp;
301     auto manager = CKM::Manager::create();
302
303     std::string keyPem = "-----BEGIN PUBLIC KEY-----\n"
304         "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
305         "T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLf\n"
306         "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
307         "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
308         "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
309         "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
310         "zQIDAQAB\n"
311         "-----END PUBLIC KEY-----";
312
313     CKM::RawBuffer buffer(keyPem.begin(), keyPem.end());
314     auto key = CKM::Key::create(buffer, CKM::Password());
315     CKM::AliasVector aliasVector;
316
317     RUNNER_ASSERT_MSG(
318         CKM_API_SUCCESS == (temp = manager->saveKey("appkey1", key, CKM::Policy())),
319         "Error=" << CKM::ErrorToString(temp));
320     RUNNER_ASSERT_MSG(
321         CKM_API_SUCCESS == (temp = manager->saveKey("appkey2", key, CKM::Policy())),
322         "Error=" << CKM::ErrorToString(temp));
323     RUNNER_ASSERT_MSG(
324         CKM_API_SUCCESS == (temp = manager->saveKey("appkey3", key, CKM::Policy(CKM::Password(), false))),
325         "Error=" << CKM::ErrorToString(temp));
326     RUNNER_ASSERT_MSG(
327         CKM_API_SUCCESS == (temp = manager->getKeyAliasVector(aliasVector)),
328         "Error=" << CKM::ErrorToString(temp));
329     RUNNER_ASSERT_MSG(
330         aliasVector.size() == 3,
331         "Wrong size of list: " << aliasVector.size() << " Expected: 3");
332 }
333
334 RUNNER_CHILD_TEST(T1023_app_user_save_keys_exportable_flag)
335 {
336     SecurityServer::AccessProvider ap("mylabel");
337     ap.addObjectRule("key-manager::api-storage", "rw");
338     ap.applyAndSwithToUser(USER_APP, GROUP_APP);
339
340     int temp;
341     auto manager = CKM::Manager::create();
342
343     std::string keyPem = "-----BEGIN PUBLIC KEY-----\n"
344         "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
345         "T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLf\n"
346         "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
347         "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
348         "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
349         "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
350         "zQIDAQAB\n"
351         "-----END PUBLIC KEY-----";
352
353     CKM::RawBuffer buffer(keyPem.begin(), keyPem.end());
354     auto key = CKM::Key::create(buffer, CKM::Password());
355     CKM::AliasVector aliasVector;
356     CKM::Policy notExportable(CKM::Password(), false);
357
358     RUNNER_ASSERT_MSG(
359         CKM_API_SUCCESS == (temp = manager->saveKey("appkey4", key, notExportable)),
360         "Error=" << CKM::ErrorToString(temp));
361     RUNNER_ASSERT_MSG(
362         CKM_API_ERROR_NOT_EXPORTABLE == (temp = manager->getKey("appkey4", CKM::Password(), key)),
363         "Error=" << CKM::ErrorToString(temp));
364     RUNNER_ASSERT_MSG(
365         CKM_API_ERROR_INPUT_PARAM == (temp = manager->saveData("data3", buffer, notExportable)),
366         "Error=" << CKM::ErrorToString(temp));
367 }
368
369 RUNNER_TEST(T1029_deinit)
370 {
371     int temp;
372     auto control = CKM::Control::create();
373
374     RUNNER_ASSERT_MSG(
375         CKM_API_SUCCESS == (temp = control->lockUserKey(0)),
376         "Error=" << CKM::ErrorToString(temp));
377     RUNNER_ASSERT_MSG(
378         CKM_API_SUCCESS == (temp = control->removeUserData(0)),
379         "Error=" << CKM::ErrorToString(temp));
380     RUNNER_ASSERT_MSG(
381         CKM_API_SUCCESS == (temp = control->lockUserKey(USER_APP)),
382         "Error=" << CKM::ErrorToString(temp));
383     RUNNER_ASSERT_MSG(
384         CKM_API_SUCCESS == (temp = control->removeUserData(USER_APP)),
385         "Error=" << CKM::ErrorToString(temp));
386 }
387
388 RUNNER_TEST_GROUP_INIT(T103_CKM_QUICK_REMOVE_BIN_DATA_TEST);
389
390 RUNNER_TEST(T1030_init)
391 {
392     int temp;
393     auto control = CKM::Control::create();
394     RUNNER_ASSERT_MSG(
395         CKM_API_SUCCESS == (temp = control->unlockUserKey(0, "test-pass")),
396         "Error=" << CKM::ErrorToString(temp));
397     RUNNER_ASSERT_MSG(
398         CKM_API_SUCCESS == (temp = control->unlockUserKey(USER_APP, "user-pass")),
399         "Error=" << CKM::ErrorToString(temp));
400 }
401
402 RUNNER_TEST(T1031_save_get_bin_data)
403 {
404     int temp;
405     auto manager = CKM::Manager::create();
406
407     std::string binData1 = "My bin data1";
408     std::string binData2 = "My bin data2";
409     std::string binData3 = "My bin data3";
410
411     CKM::RawBuffer buffer1(binData1.begin(), binData1.end());
412     CKM::RawBuffer buffer2(binData2.begin(), binData2.end());
413     CKM::RawBuffer buffer3(binData3.begin(), binData3.end());
414
415     CKM::AliasVector aliasVector;
416
417     RUNNER_ASSERT_MSG(
418         CKM_API_SUCCESS == (temp = manager->saveData("data1", buffer1, CKM::Policy())),
419         "Error=" << CKM::ErrorToString(temp));
420     RUNNER_ASSERT_MSG(
421         CKM_API_SUCCESS == (temp = manager->saveData("data2", buffer2, CKM::Policy())),
422         "Error=" << CKM::ErrorToString(temp));
423     RUNNER_ASSERT_MSG(
424         CKM_API_SUCCESS == (temp = manager->saveData("data3", buffer3, CKM::Policy(CKM::Password(), true))),
425         "Error=" << CKM::ErrorToString(temp));
426     RUNNER_ASSERT_MSG(
427         CKM_API_ERROR_INPUT_PARAM == (temp = manager->saveData("data4", buffer3, CKM::Policy(CKM::Password(), false))),
428         "Error=" << CKM::ErrorToString(temp));
429     RUNNER_ASSERT_MSG(
430         CKM_API_SUCCESS == (temp = manager->getDataAliasVector(aliasVector)),
431         "Error=" << CKM::ErrorToString(temp));
432     RUNNER_ASSERT_MSG(
433         aliasVector.size() == 3,
434         "Wrong size of list: " << aliasVector.size() << " Expected: 3");
435
436     CKM::RawBuffer buffer;
437     RUNNER_ASSERT_MSG(
438         CKM_API_SUCCESS == (temp = manager->getData("data2", CKM::Password(), buffer)),
439         "Error=" << CKM::ErrorToString(temp));
440     RUNNER_ASSERT_MSG(
441         buffer == buffer2,
442         "Data corrupted");
443 }
444
445 RUNNER_CHILD_TEST(T1032_app_user_save_bin_data)
446 {
447     SecurityServer::AccessProvider ap("mylabel");
448     ap.addObjectRule("key-manager::api-storage", "rw");
449     ap.applyAndSwithToUser(USER_APP, GROUP_APP);
450
451     int temp;
452     auto manager = CKM::Manager::create();
453
454     std::string binData = "My bin data";
455
456     CKM::RawBuffer buffer(binData.begin(), binData.end());
457
458     CKM::AliasVector aliasVector;
459
460     RUNNER_ASSERT_MSG(
461         CKM_API_SUCCESS == (temp = manager->saveData("appdata1", buffer, CKM::Policy())),
462         "Error=" << CKM::ErrorToString(temp));
463     RUNNER_ASSERT_MSG(
464         CKM_API_SUCCESS == (temp = manager->saveData("appdata2", buffer, CKM::Policy())),
465         "Error=" << CKM::ErrorToString(temp));
466     RUNNER_ASSERT_MSG(
467         CKM_API_SUCCESS == (temp = manager->saveData("appdata3", buffer, CKM::Policy(CKM::Password(), true))),
468         "Error=" << CKM::ErrorToString(temp));
469     RUNNER_ASSERT_MSG(
470         CKM_API_SUCCESS == (temp = manager->getDataAliasVector(aliasVector)),
471         "Error=" << CKM::ErrorToString(temp));
472     RUNNER_ASSERT_MSG(
473         aliasVector.size() == 3,
474         "Wrong size of list: " << aliasVector.size() << " Expected: 3");
475 }
476
477 RUNNER_TEST(T1033_remove_bin_data)
478 {
479     int temp;
480     auto manager = CKM::Manager::create();
481
482     std::string binData2 = "My bin data2";
483     CKM::RawBuffer buffer2(binData2.begin(), binData2.end());
484
485     CKM::AliasVector aliasVector;
486
487     RUNNER_ASSERT_MSG(
488         CKM_API_SUCCESS == (temp = manager->removeData("data1")),
489         "Error=" << CKM::ErrorToString(temp));
490     RUNNER_ASSERT_MSG(
491         CKM_API_SUCCESS == (temp = manager->removeData("data3")),
492         "Error=" << CKM::ErrorToString(temp));
493     RUNNER_ASSERT_MSG(
494         CKM_API_SUCCESS == (temp = manager->getDataAliasVector(aliasVector)),
495         "Error=" << CKM::ErrorToString(temp));
496     RUNNER_ASSERT_MSG(
497         aliasVector.size() == 1,
498         "Wrong size of list: " << aliasVector.size() << " Expected: 1");
499
500     CKM::RawBuffer buffer;
501     RUNNER_ASSERT_MSG(
502         CKM_API_SUCCESS == (temp = manager->getData("data2", CKM::Password(), buffer)),
503         "Error=" << CKM::ErrorToString(temp));
504     RUNNER_ASSERT_MSG(
505         buffer == buffer2,
506         "Data corrupted");
507     RUNNER_ASSERT_MSG(
508         CKM_API_ERROR_DB_ALIAS_UNKNOWN == (temp = manager->getData("data3", CKM::Password(), buffer)),
509         "Error=" << CKM::ErrorToString(temp));
510 }
511
512 RUNNER_TEST(T1039_deinit)
513 {
514     int temp;
515     auto control = CKM::Control::create();
516
517     RUNNER_ASSERT_MSG(
518         CKM_API_SUCCESS == (temp = control->lockUserKey(0)),
519         "Error=" << CKM::ErrorToString(temp));
520     RUNNER_ASSERT_MSG(
521         CKM_API_SUCCESS == (temp = control->removeUserData(0)),
522         "Error=" << CKM::ErrorToString(temp));
523     RUNNER_ASSERT_MSG(
524         CKM_API_SUCCESS == (temp = control->lockUserKey(USER_APP)),
525         "Error=" << CKM::ErrorToString(temp));
526     RUNNER_ASSERT_MSG(
527         CKM_API_SUCCESS == (temp = control->removeUserData(USER_APP)),
528         "Error=" << CKM::ErrorToString(temp));
529 }
530
531 RUNNER_TEST_GROUP_INIT(T104_CKM_QUICK_CREATE_PAIR);
532
533 RUNNER_TEST(T1040_init)
534 {
535     int temp;
536     auto control = CKM::Control::create();
537
538     RUNNER_ASSERT_MSG(
539         CKM_API_SUCCESS == (temp = control->unlockUserKey(USER_APP, "user-pass")),
540         "Error=" << CKM::ErrorToString(temp));
541 }
542
543 RUNNER_CHILD_TEST(T1041_create_rsa_key)
544 {
545     int temp;
546     auto manager = CKM::Manager::create();
547     CKM::AliasVector av;
548
549     SecurityServer::AccessProvider ap("mylabel");
550     ap.addObjectRule("key-manager::api-storage", "rw");
551     ap.applyAndSwithToUser(USER_APP, GROUP_APP);
552
553     RUNNER_ASSERT_MSG(
554         CKM_API_SUCCESS == (temp = manager->createKeyPairRSA(2048, CKM::Alias("PRV_KEY1"), CKM::Alias("PUB_KEY1"), CKM::Policy(), CKM::Policy())),
555         "Error=" << CKM::ErrorToString(temp));
556     RUNNER_ASSERT_MSG(
557         CKM_API_SUCCESS == (temp = manager->getKeyAliasVector(av)),
558         "Error=" << CKM::ErrorToString(temp));
559     RUNNER_ASSERT_MSG(
560         2 == (temp = av.size()),
561         "Vector size: " << temp << ". Expected: 2");
562 }
563
564 RUNNER_TEST(T1049_deinit)
565 {
566     int temp;
567     auto control = CKM::Control::create();
568
569     RUNNER_ASSERT_MSG(
570         CKM_API_SUCCESS == (temp = control->lockUserKey(USER_APP)),
571         "Error=" << CKM::ErrorToString(temp));
572     RUNNER_ASSERT_MSG(
573         CKM_API_SUCCESS == (temp = control->removeUserData(USER_APP)),
574         "Error=" << CKM::ErrorToString(temp));
575 }
576
577
578 RUNNER_TEST_GROUP_INIT(T111_CKM_CreateKeyPairRSA);
579
580 RUNNER_TEST(T1110_init)
581 {
582     int temp;
583     auto control = CKM::Control::create();
584     RUNNER_ASSERT_MSG(
585         CKM_API_SUCCESS == (temp = control->unlockUserKey(0, "test-pass")),
586         "Error=" << CKM::ErrorToString(temp));
587     RUNNER_ASSERT_MSG(
588         CKM_API_SUCCESS == (temp = control->unlockUserKey(USER_APP, "user-pass")),
589         "Error=" << CKM::ErrorToString(temp));
590 }
591
592 RUNNER_TEST(T1111_CreateKeyPairRSA)
593 {
594     int temp;
595     auto manager = CKM::Manager::create();
596     CKM::Alias a1("rsa-test-1");
597     CKM::Alias a2("rsa-test-2");
598     CKM::Policy p1;
599     CKM::Policy p2;
600     RUNNER_ASSERT_MSG(
601         CKM_API_SUCCESS == (temp = manager->createKeyPairRSA(1024, a1, a2, p1, p2)),
602         "Error=" << CKM::ErrorToString(temp));
603     RUNNER_ASSERT_MSG(
604         CKM_API_ERROR_DB_ALIAS_EXISTS == (temp = manager->createKeyPairRSA(1024, a1, a2, p1, p2)),
605         "Error=" << CKM::ErrorToString(temp));
606 }
607
608 RUNNER_TEST(T1112_CreateKeyPairECDSA)
609 {
610     int temp;
611     auto manager = CKM::Manager::create();
612     CKM::Alias a1("ecdsa-test-1");
613     CKM::Alias a2("ecdsa-test-2");
614     CKM::Policy p1;
615     CKM::Policy p2;
616     RUNNER_ASSERT_MSG(
617         CKM_API_SUCCESS == (temp = manager->createKeyPairECDSA(CKM::ElipticCurve::prime192v1, a1, a2, p1, p2)),
618         "Error=" << CKM::ErrorToString(temp));
619 }
620
621 RUNNER_TEST(T1113_deinit)
622 {
623     int temp;
624     auto control = CKM::Control::create();
625
626     RUNNER_ASSERT_MSG(
627         CKM_API_SUCCESS == (temp = control->lockUserKey(0)),
628         "Error=" << CKM::ErrorToString(temp));
629     RUNNER_ASSERT_MSG(
630         CKM_API_SUCCESS == (temp = control->removeUserData(0)),
631         "Error=" << CKM::ErrorToString(temp));
632 }
633
634 RUNNER_TEST_GROUP_INIT(T120_NEGATIVE_TESTS);
635
636 RUNNER_TEST(T12100_init)
637 {
638     int temp;
639     auto control = CKM::Control::create();
640     RUNNER_ASSERT_MSG(
641         CKM_API_SUCCESS == (temp = control->unlockUserKey(0, "test-pass")),
642         "Error=" << CKM::ErrorToString(temp));
643     RUNNER_ASSERT_MSG(
644         CKM_API_SUCCESS == (temp = control->unlockUserKey(USER_APP, "user-pass")),
645         "Error=" << CKM::ErrorToString(temp));
646 }
647
648 RUNNER_TEST(T12101_key_exist)
649 {
650     int ret;
651     auto manager = CKM::Manager::create();
652
653     std::string keyPem = "-----BEGIN PUBLIC KEY-----\n"
654       "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
655       "T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLf\n"
656       "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
657       "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
658       "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
659       "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
660       "zQIDAQAB\n"
661       "-----END PUBLIC KEY-----";
662
663     CKM::RawBuffer buffer(keyPem.begin(), keyPem.end());
664     auto key = CKM::Key::create(buffer);
665     CKM::Alias alias = "rsa-alias-duplication";
666
667     RUNNER_ASSERT_MSG(
668         CKM_API_SUCCESS == (ret = manager->saveKey(alias, key, CKM::Policy())),
669         "Error=" << CKM::ErrorToString(ret));
670     RUNNER_ASSERT_MSG(
671         CKM_API_ERROR_DB_ALIAS_EXISTS == (ret = manager->saveKey(alias, key, CKM::Policy())),
672         "Error=" << CKM::ErrorToString(ret));
673 }
674
675 /*
676  * These test cases tests API when empty parameters are passed to functions
677  */
678
679 RUNNER_TEST(T12102_saveKey_empty_alias)
680 {
681     std::string keyPem = "-----BEGIN PUBLIC KEY-----\n"
682         "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
683         "T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLf\n"
684         "T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLc\n"
685         "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
686         "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
687         "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
688         "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
689         "zQIDAQAB\n"
690         "-----END PUBLIC KEY-----";
691
692     CKM::RawBuffer buffer(keyPem.begin(), keyPem.end());
693     auto key = CKM::Key::create(buffer);
694     CKM::Alias alias; //alias is not initialized
695
696     int ret;
697     auto manager = CKM::Manager::create();
698     RUNNER_ASSERT_MSG(
699         CKM_API_ERROR_INPUT_PARAM == (ret = manager->saveKey(alias, key, CKM::Policy())),
700         "Error=" << CKM::ErrorToString(ret));
701 }
702
703 RUNNER_TEST(T12103_saveKey_empty_key)
704 {
705     CKM::KeyShPtr key; //key is not initialized
706     CKM::Alias alias = "empty-key";
707
708     int ret;
709     auto manager = CKM::Manager::create();
710     RUNNER_ASSERT_MSG(
711         CKM_API_ERROR_INPUT_PARAM == (ret = manager->saveKey(alias, key, CKM::Policy())),
712         "Error=" << CKM::ErrorToString(ret));
713 }
714
715 RUNNER_TEST(T12104_saveCertificate_empty_alias)
716 {
717     std::string certPem =
718         "-----BEGIN CERTIFICATE-----\n"
719         "MIIEgDCCA2igAwIBAgIIcjtBYJGQtOAwDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE\n"
720         "BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMTHEdvb2dsZSBJbnRl\n"
721         "cm5ldCBBdXRob3JpdHkgRzIwHhcNMTQwNTIyMTEyOTQyWhcNMTQwODIwMDAwMDAw\n"
722         "WjBtMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwN\n"
723         "TW91bnRhaW4gVmlldzETMBEGA1UECgwKR29vZ2xlIEluYzEcMBoGA1UEAwwTYWNj\n"
724         "b3VudHMuZ29vZ2xlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\n"
725         "ALtlLWVWPN3q3bSEQl1Z97gPdgl5vbgJOZSAr0ZY0tJCuFLBbUKetJWryyE+5KpG\n"
726         "gMMpLS4v8/bvXaZc6mAs+RfAqGM24C3vQg5hPnj4dflnhL0WiOCZBurm1tV4oexk\n"
727         "HLXs3jr/jpnb738AQpj8zZ9a4VEBuHJRZALnWZ/XhqU+dvYomAoRQNuL5OhkT7uu\n"
728         "d0NKJL9JjYLyQglGgE2sVsWv2kj7EO/P9Q6NEKt9BGmhMsFvtfeKUaymynaxpR1g\n"
729         "wEPlqYvB38goh1dIOgVLT0OVyLImeg5Mdwar/8c1U0OYhLOc6PJapOZAfUkE+3+w\n"
730         "xYt8AChLN1b5szOwInrCVpECAwEAAaOCAUYwggFCMB0GA1UdJQQWMBQGCCsGAQUF\n"
731         "BwMBBggrBgEFBQcDAjAeBgNVHREEFzAVghNhY2NvdW50cy5nb29nbGUuY29tMGgG\n"
732         "CCsGAQUFBwEBBFwwWjArBggrBgEFBQcwAoYfaHR0cDovL3BraS5nb29nbGUuY29t\n"
733         "L0dJQUcyLmNydDArBggrBgEFBQcwAYYfaHR0cDovL2NsaWVudHMxLmdvb2dsZS5j\n"
734         "b20vb2NzcDAdBgNVHQ4EFgQU0/UtToEtNIfwDwHuYGuVKcj0xK8wDAYDVR0TAQH/\n"
735         "BAIwADAfBgNVHSMEGDAWgBRK3QYWG7z2aLV29YG2u2IaulqBLzAXBgNVHSAEEDAO\n"
736         "MAwGCisGAQQB1nkCBQEwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL3BraS5nb29n\n"
737         "bGUuY29tL0dJQUcyLmNybDANBgkqhkiG9w0BAQUFAAOCAQEAcGNI/X9f0g+7ij0o\n"
738         "ehLpk6vxSMQGrmOZ4+PG/MC9SLClCkt7zJkfU7erZnyVXyxCpwlljq+Wk9YTPUOq\n"
739         "xD/V2ikQVSAANoxGJFO9UoL5jzWusPhKKv8CcM7fuiERz8K+CfBcqfxbgI5rH0g5\n"
740         "dYclmLC81cJ/08i+9Nltvxv69Y3hGfEICT6K+EdSxwnQzOhpMZmvxZsIj+d6CVNa\n"
741         "9ICYgUthsNQVWzrIs5wknpjjZ9liDMwJX0vu8A0rce4X/Lna5hh2bW9igz2iP5WM\n"
742         "9fuwdbTw4y3jfPQgszU4YZxWxhMzccxe058Qx1tLndAknBQEBesQjXytVQpuM1SV\n"
743         "rHva8A==\n"
744         "-----END CERTIFICATE-----\n";
745
746     CKM::RawBuffer buffer(certPem.begin(), certPem.end());
747     auto cert = CKM::Certificate::create(buffer, CKM::DataFormat::FORM_PEM);
748     CKM::Alias alias; //alias is not initialized
749
750     int temp;
751     auto manager = CKM::Manager::create();
752     RUNNER_ASSERT_MSG(
753         CKM_API_ERROR_INPUT_PARAM == (temp = manager->saveCertificate(alias, cert, CKM::Policy())),
754         "Error=" << CKM::ErrorToString(temp));
755 }
756
757 RUNNER_TEST(T12105_saveCertificate_empty_cert)
758 {
759     CKM::CertificateShPtr cert; //cert is not initialized
760     CKM::Alias alias = "empty-cert";
761
762     int temp;
763     auto manager = CKM::Manager::create();
764     RUNNER_ASSERT_MSG(
765         CKM_API_ERROR_INPUT_PARAM == (temp = manager->saveCertificate(alias, cert, CKM::Policy())),
766         "Error=" << CKM::ErrorToString(temp));
767 }
768
769 RUNNER_TEST(T12106_saveData_empty_alias)
770 {
771     std::string testData = "test data test data test data";
772     CKM::RawBuffer buffer(testData.begin(), testData.end());
773     CKM::Alias alias;
774
775     int temp;
776     auto manager = CKM::Manager::create();
777     RUNNER_ASSERT_MSG(
778         CKM_API_ERROR_INPUT_PARAM == (temp = manager->saveData(alias, buffer, CKM::Policy())),
779         "Error=" << CKM::ErrorToString(temp));
780 }
781
782 RUNNER_TEST(T12107_saveData_empty_data)
783 {
784     CKM::RawBuffer buffer;
785     CKM::Alias alias = "empty-data";
786
787     int temp;
788     auto manager = CKM::Manager::create();
789     RUNNER_ASSERT_MSG(
790         CKM_API_ERROR_INPUT_PARAM == (temp = manager->saveData(alias, buffer, CKM::Policy())),
791         "Error=" << CKM::ErrorToString(temp));
792 }
793
794 /*
795  * These test cases tests API when trying to get data from not existing alias
796  */
797
798 RUNNER_TEST(T12108_getKey_alias_not_exist)
799 {
800     CKM::KeyShPtr key;
801     CKM::Alias alias = "this-alias-not-exist";
802
803     int temp;
804     auto manager = CKM::Manager::create();
805     RUNNER_ASSERT_MSG(
806         CKM_API_ERROR_DB_ALIAS_UNKNOWN == (temp = manager->getKey(alias, "", key)),
807         "Error=" << CKM::ErrorToString(temp));
808 }
809
810 RUNNER_TEST(T12109_getCertificate_alias_not_exist)
811 {
812     CKM::CertificateShPtr certificate;
813     CKM::Alias alias = "this-alias-not-exist";
814
815     int temp;
816     auto manager = CKM::Manager::create();
817     RUNNER_ASSERT_MSG(
818         CKM_API_ERROR_DB_ALIAS_UNKNOWN == (temp = manager->getCertificate(alias, CKM::Password(), certificate)),
819         "Error=" << CKM::ErrorToString(temp));
820 }
821
822 RUNNER_TEST(T12110_getData_alias_not_exist)
823 {
824     int temp;
825     auto manager = CKM::Manager::create();
826     CKM::RawBuffer buffer;
827     CKM::Alias alias("some alias");
828     RUNNER_ASSERT_MSG(
829         CKM_API_ERROR_DB_ALIAS_UNKNOWN == (temp = manager->getData(alias, "", buffer)),
830         "Error=" << CKM::ErrorToString(temp));
831 }
832
833 /*
834  * These test cases tests API when damaged keys are used
835  */
836 RUNNER_TEST(T12111_rsa_key_damaged)
837 {
838     int ret;
839     auto manager = CKM::Manager::create();
840
841     std::string keyPem = "-----BEGIN PUBLIC KEY-----\n"
842         "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
843     //    "BROKENBROKENBROKENBROKENBROKENTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT\n"
844         "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
845         "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
846     //    "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
847         "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
848         "zQIDAQAB\n"
849         "-----END PUBLIC KEY-----";
850
851     CKM::RawBuffer buffer(keyPem.begin(), keyPem.end());
852     auto key = CKM::Key::create(buffer);
853     CKM::Alias alias = "damaged-rsa";
854
855     RUNNER_ASSERT_MSG(
856         NULL == key.get(), "Key is broken. It should be empty");
857
858     RUNNER_ASSERT_MSG(
859         CKM_API_ERROR_INPUT_PARAM == (ret = manager->saveKey(alias, key, CKM::Policy())),
860         "Error=" << CKM::ErrorToString(ret));
861 }
862
863 RUNNER_TEST(T12112_rsa_key_too_short)
864 {
865     int ret;
866     auto manager = CKM::Manager::create();
867
868     std::string keyPem = "-----BEGIN PUBLIC KEY-----\n"
869         "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
870         //"T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLf\n"
871         "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
872         "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
873         "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
874         "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
875         "zQIDAQAB\n"
876         "-----END PUBLIC KEY-----";
877
878     CKM::RawBuffer buffer(keyPem.begin(), keyPem.end());
879     auto key = CKM::Key::create(buffer);
880     CKM::Alias alias = "short-rsa";
881
882     RUNNER_ASSERT_MSG(
883         CKM_API_ERROR_INPUT_PARAM == (ret = manager->saveKey(alias, key, CKM::Policy())),
884         "Error=" << CKM::ErrorToString(ret));
885 }
886
887 RUNNER_TEST(T12113_deinit)
888 {
889      int temp;
890      auto control = CKM::Control::create();
891
892      RUNNER_ASSERT_MSG(
893          CKM_API_SUCCESS == (temp = control->lockUserKey(0)),
894          "Error=" << CKM::ErrorToString(temp));
895      RUNNER_ASSERT_MSG(
896          CKM_API_SUCCESS == (temp = control->removeUserData(0)),
897          "Error=" << CKM::ErrorToString(temp));
898 }
899
900 RUNNER_TEST_GROUP_INIT(T131_CKM_QUICK_SET_GET_TESTS);
901
902 RUNNER_TEST(T1311_init)
903 {
904     int temp;
905     auto control = CKM::Control::create();
906     RUNNER_ASSERT_MSG(
907         CKM_API_SUCCESS == (temp = control->unlockUserKey(0, "test-pass")),
908         "Error=" << CKM::ErrorToString(temp));
909     RUNNER_ASSERT_MSG(time(0) > 1405343457,
910         "Time error. Device date is before 14th of July 2014. You must set proper time on device before run this tests!");
911
912     struct hostent* he = gethostbyname("google.com");
913
914     RUNNER_ASSERT_MSG(he != NULL, "There is problem with translate domain google.com into ip address. Probably network "
915         "is not woking on the device. OCSP tests requires network access!");
916 }
917
918 RUNNER_TEST(T1312_get_chain)
919 {
920     std::string ee = "-----BEGIN CERTIFICATE-----\n"
921       "MIIF0TCCBLmgAwIBAgIQaPGTP4aS7Ut/WDNaBzdQrDANBgkqhkiG9w0BAQUFADCB\n"
922       "ujELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\n"
923       "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug\n"
924       "YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNjE0MDIGA1UEAxMr\n"
925       "VmVyaVNpZ24gQ2xhc3MgMyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNTTCBDQTAeFw0x\n"
926       "NDAyMjAwMDAwMDBaFw0xNTAyMjAyMzU5NTlaMIHmMRMwEQYLKwYBBAGCNzwCAQMT\n"
927       "AlBMMR0wGwYDVQQPExRQcml2YXRlIE9yZ2FuaXphdGlvbjETMBEGA1UEBRMKMDAw\n"
928       "MDAyNTIzNzELMAkGA1UEBhMCUEwxDzANBgNVBBEUBjAwLTk1MDEUMBIGA1UECBML\n"
929       "bWF6b3dpZWNraWUxETAPBgNVBAcUCFdhcnN6YXdhMRYwFAYDVQQJFA1TZW5hdG9y\n"
930       "c2thIDE4MRMwEQYDVQQKFAptQmFuayBTLkEuMQwwCgYDVQQLFANESU4xGTAXBgNV\n"
931       "BAMUEHd3dy5tYmFuay5jb20ucGwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\n"
932       "AoIBAQDph6x8V6xUW/+651+qHF+UmorH9uaz2ZrX2bIWiMKIJFmpDDHlxcapKkqE\n"
933       "BV04is83aiCpqKtc2ZHy2g4Hpj1eSF5BP2+OAlo0YUQZPIeRRdiMjmeAxw/ncBDx\n"
934       "9rQBuCJ4XTD6cqQox5SI0TASOZ+wyAEjbDRXzL73XqRAFZ1LOpb2ONkolS+RutMB\n"
935       "vshvCsWPeNe7eGLuOh6DyC6r1vX9xhw3xnjM2mTSvmtimgzSLacNGKqRrsucUgcb\n"
936       "0+O5C2jZAtAMLyZksL92cxmWbtVzUYzem4chjHu5cRxUlPNzUJWrrczueB7Ip4A8\n"
937       "aQuFMfNXYc0x+WLWjy//urypMKjhAgMBAAGjggGjMIIBnzAbBgNVHREEFDASghB3\n"
938       "d3cubWJhbmsuY29tLnBsMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgWgMB0GA1Ud\n"
939       "JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBEBgNVHSAEPTA7MDkGC2CGSAGG+EUB\n"
940       "BxcGMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9jcHMw\n"
941       "HQYDVR0OBBYEFN37iGaS7mZnENxZ9FGqNLR+QgoMMB8GA1UdIwQYMBaAFPyKULqe\n"
942       "uSVae1WFT5UAY4/pWGtDMEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6Ly9FVlNlY3Vy\n"
943       "ZS1jcmwudmVyaXNpZ24uY29tL0VWU2VjdXJlMjAwNi5jcmwwfAYIKwYBBQUHAQEE\n"
944       "cDBuMC0GCCsGAQUFBzABhiFodHRwOi8vRVZTZWN1cmUtb2NzcC52ZXJpc2lnbi5j\n"
945       "b20wPQYIKwYBBQUHMAKGMWh0dHA6Ly9FVlNlY3VyZS1haWEudmVyaXNpZ24uY29t\n"
946       "L0VWU2VjdXJlMjAwNi5jZXIwDQYJKoZIhvcNAQEFBQADggEBAD0wO+rooUrIM4qp\n"
947       "PHhp+hkXK6WMQ2qzGOmbMcZjw0govg5vkzkefPDryIXXbrF8mRagiJNMSfNaWWeh\n"
948       "Cj41OV24EdUl0OLbFxNzcvub599zRs/apfaRLTfsmlmOgi0/YP305i+3tJ2ll946\n"
949       "P+qV1wXnXqTqEdIl4Ys3+1HmDCdTB1hoDwAAzqRVUXZ5+iiwPAU7R/LTHfMjV1ke\n"
950       "8jtNFfrorlZMCfVH/7eEnHJvVjOJt+YFe4aFMzE+DfuYIK7MH+olC2v79kBwbnEQ\n"
951       "fvHMA9gFwOYLUBBdSfcocp8EKZ+mRlNPGR/3LBrPeaQQ0GZEkxzRK+v/aNTuiYfr\n"
952       "oFXtrg0=\n"
953       "-----END CERTIFICATE-----\n";
954
955     std::string im =
956       "-----BEGIN CERTIFICATE-----\n"
957       "MIIF5DCCBMygAwIBAgIQW3dZxheE4V7HJ8AylSkoazANBgkqhkiG9w0BAQUFADCB\n"
958       "yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\n"
959       "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp\n"
960       "U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW\n"
961       "ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0\n"
962       "aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMTYxMTA3MjM1OTU5WjCBujEL\n"
963       "MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW\n"
964       "ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQg\n"
965       "aHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNjE0MDIGA1UEAxMrVmVy\n"
966       "aVNpZ24gQ2xhc3MgMyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNTTCBDQTCCASIwDQYJ\n"
967       "KoZIhvcNAQEBBQADggEPADCCAQoCggEBAJjboFXrnP0XeeOabhQdsVuYI4cWbod2\n"
968       "nLU4O7WgerQHYwkZ5iqISKnnnbYwWgiXDOyq5BZpcmIjmvt6VCiYxQwtt9citsj5\n"
969       "OBfH3doxRpqUFI6e7nigtyLUSVSXTeV0W5K87Gws3+fBthsaVWtmCAN/Ra+aM/EQ\n"
970       "wGyZSpIkMQht3QI+YXZ4eLbtfjeubPOJ4bfh3BXMt1afgKCxBX9ONxX/ty8ejwY4\n"
971       "P1C3aSijtWZfNhpSSENmUt+ikk/TGGC+4+peGXEFv54cbGhyJW+ze3PJbb0S/5tB\n"
972       "Ml706H7FC6NMZNFOvCYIZfsZl1h44TO/7Wg+sSdFb8Di7Jdp91zT91ECAwEAAaOC\n"
973       "AdIwggHOMB0GA1UdDgQWBBT8ilC6nrklWntVhU+VAGOP6VhrQzASBgNVHRMBAf8E\n"
974       "CDAGAQH/AgEAMD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRw\n"
975       "czovL3d3dy52ZXJpc2lnbi5jb20vY3BzMD0GA1UdHwQ2MDQwMqAwoC6GLGh0dHA6\n"
976       "Ly9FVlNlY3VyZS1jcmwudmVyaXNpZ24uY29tL3BjYTMtZzUuY3JsMA4GA1UdDwEB\n"
977       "/wQEAwIBBjARBglghkgBhvhCAQEEBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZ\n"
978       "MFcwVRYJaW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7\n"
979       "GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwKQYDVR0R\n"
980       "BCIwIKQeMBwxGjAYBgNVBAMTEUNsYXNzM0NBMjA0OC0xLTQ3MD0GCCsGAQUFBwEB\n"
981       "BDEwLzAtBggrBgEFBQcwAYYhaHR0cDovL0VWU2VjdXJlLW9jc3AudmVyaXNpZ24u\n"
982       "Y29tMB8GA1UdIwQYMBaAFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqGSIb3DQEB\n"
983       "BQUAA4IBAQCWovp/5j3t1CvOtxU/wHIDX4u6FpAl98KD2Md1NGNoElMMU4l7yVYJ\n"
984       "p8M2RE4O0GJis4b66KGbNGeNUyIXPv2s7mcuQ+JdfzOE8qJwwG6Cl8A0/SXGI3/t\n"
985       "5rDFV0OEst4t8dD2SB8UcVeyrDHhlyQjyRNddOVG7wl8nuGZMQoIeRuPcZ8XZsg4\n"
986       "z+6Ml7YGuXNG5NOUweVgtSV1LdlpMezNlsOjdv3odESsErlNv1HoudRETifLriDR\n"
987       "fip8tmNHnna6l9AW5wtsbfdDbzMLKTB3+p359U64drPNGLT5IO892+bKrZvQTtKH\n"
988       "qQ2mRHNQ3XBb7a1+Srwi1agm5MKFIA3Z\n"
989       "-----END CERTIFICATE-----\n";
990
991     auto cert = CKM::Certificate::create(CKM::RawBuffer(ee.begin(), ee.end()), CKM::DataFormat::FORM_PEM);
992     auto cert1 = CKM::Certificate::create(CKM::RawBuffer(im.begin(), im.end()), CKM::DataFormat::FORM_PEM);
993     CKM::CertificateShPtrVector certVector = {cert1};
994     CKM::CertificateShPtrVector certChain;
995
996     int tmp;
997     auto manager = CKM::Manager::create();
998
999     RUNNER_ASSERT_MSG(NULL != cert.get(), "Certificate should not be empty");
1000     RUNNER_ASSERT_MSG(false != cert1.get(), "Certificate should not be empty");
1001
1002     RUNNER_ASSERT_MSG(
1003         CKM_API_ERROR_VERIFICATION_FAILED == (tmp = manager->getCertificateChain(cert, CKM::CertificateShPtrVector(), certChain)),
1004         "Error=" << CKM::ErrorToString(tmp));
1005
1006     RUNNER_ASSERT_MSG(
1007         0 == certChain.size(),
1008         "Wrong size of certificate chain.");
1009
1010     RUNNER_ASSERT_MSG(
1011         CKM_API_SUCCESS == (tmp = manager->getCertificateChain(cert, certVector, certChain)),
1012         "Error=" << CKM::ErrorToString(tmp));
1013
1014     RUNNER_ASSERT_MSG(
1015         3 == certChain.size(),
1016         "Wrong size of certificate chain.");
1017 }
1018
1019 RUNNER_TEST(T1313_get_chain_with_alias)
1020 {
1021     std::string ee = "-----BEGIN CERTIFICATE-----\n"
1022       "MIIF0TCCBLmgAwIBAgIQaPGTP4aS7Ut/WDNaBzdQrDANBgkqhkiG9w0BAQUFADCB\n"
1023       "ujELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\n"
1024       "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug\n"
1025       "YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNjE0MDIGA1UEAxMr\n"
1026       "VmVyaVNpZ24gQ2xhc3MgMyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNTTCBDQTAeFw0x\n"
1027       "NDAyMjAwMDAwMDBaFw0xNTAyMjAyMzU5NTlaMIHmMRMwEQYLKwYBBAGCNzwCAQMT\n"
1028       "AlBMMR0wGwYDVQQPExRQcml2YXRlIE9yZ2FuaXphdGlvbjETMBEGA1UEBRMKMDAw\n"
1029       "MDAyNTIzNzELMAkGA1UEBhMCUEwxDzANBgNVBBEUBjAwLTk1MDEUMBIGA1UECBML\n"
1030       "bWF6b3dpZWNraWUxETAPBgNVBAcUCFdhcnN6YXdhMRYwFAYDVQQJFA1TZW5hdG9y\n"
1031       "c2thIDE4MRMwEQYDVQQKFAptQmFuayBTLkEuMQwwCgYDVQQLFANESU4xGTAXBgNV\n"
1032       "BAMUEHd3dy5tYmFuay5jb20ucGwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\n"
1033       "AoIBAQDph6x8V6xUW/+651+qHF+UmorH9uaz2ZrX2bIWiMKIJFmpDDHlxcapKkqE\n"
1034       "BV04is83aiCpqKtc2ZHy2g4Hpj1eSF5BP2+OAlo0YUQZPIeRRdiMjmeAxw/ncBDx\n"
1035       "9rQBuCJ4XTD6cqQox5SI0TASOZ+wyAEjbDRXzL73XqRAFZ1LOpb2ONkolS+RutMB\n"
1036       "vshvCsWPeNe7eGLuOh6DyC6r1vX9xhw3xnjM2mTSvmtimgzSLacNGKqRrsucUgcb\n"
1037       "0+O5C2jZAtAMLyZksL92cxmWbtVzUYzem4chjHu5cRxUlPNzUJWrrczueB7Ip4A8\n"
1038       "aQuFMfNXYc0x+WLWjy//urypMKjhAgMBAAGjggGjMIIBnzAbBgNVHREEFDASghB3\n"
1039       "d3cubWJhbmsuY29tLnBsMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgWgMB0GA1Ud\n"
1040       "JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBEBgNVHSAEPTA7MDkGC2CGSAGG+EUB\n"
1041       "BxcGMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9jcHMw\n"
1042       "HQYDVR0OBBYEFN37iGaS7mZnENxZ9FGqNLR+QgoMMB8GA1UdIwQYMBaAFPyKULqe\n"
1043       "uSVae1WFT5UAY4/pWGtDMEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6Ly9FVlNlY3Vy\n"
1044       "ZS1jcmwudmVyaXNpZ24uY29tL0VWU2VjdXJlMjAwNi5jcmwwfAYIKwYBBQUHAQEE\n"
1045       "cDBuMC0GCCsGAQUFBzABhiFodHRwOi8vRVZTZWN1cmUtb2NzcC52ZXJpc2lnbi5j\n"
1046       "b20wPQYIKwYBBQUHMAKGMWh0dHA6Ly9FVlNlY3VyZS1haWEudmVyaXNpZ24uY29t\n"
1047       "L0VWU2VjdXJlMjAwNi5jZXIwDQYJKoZIhvcNAQEFBQADggEBAD0wO+rooUrIM4qp\n"
1048       "PHhp+hkXK6WMQ2qzGOmbMcZjw0govg5vkzkefPDryIXXbrF8mRagiJNMSfNaWWeh\n"
1049       "Cj41OV24EdUl0OLbFxNzcvub599zRs/apfaRLTfsmlmOgi0/YP305i+3tJ2ll946\n"
1050       "P+qV1wXnXqTqEdIl4Ys3+1HmDCdTB1hoDwAAzqRVUXZ5+iiwPAU7R/LTHfMjV1ke\n"
1051       "8jtNFfrorlZMCfVH/7eEnHJvVjOJt+YFe4aFMzE+DfuYIK7MH+olC2v79kBwbnEQ\n"
1052       "fvHMA9gFwOYLUBBdSfcocp8EKZ+mRlNPGR/3LBrPeaQQ0GZEkxzRK+v/aNTuiYfr\n"
1053       "oFXtrg0=\n"
1054       "-----END CERTIFICATE-----\n";
1055
1056     std::string im =
1057       "-----BEGIN CERTIFICATE-----\n"
1058       "MIIF5DCCBMygAwIBAgIQW3dZxheE4V7HJ8AylSkoazANBgkqhkiG9w0BAQUFADCB\n"
1059       "yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\n"
1060       "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp\n"
1061       "U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW\n"
1062       "ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0\n"
1063       "aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMTYxMTA3MjM1OTU5WjCBujEL\n"
1064       "MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW\n"
1065       "ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQg\n"
1066       "aHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNjE0MDIGA1UEAxMrVmVy\n"
1067       "aVNpZ24gQ2xhc3MgMyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNTTCBDQTCCASIwDQYJ\n"
1068       "KoZIhvcNAQEBBQADggEPADCCAQoCggEBAJjboFXrnP0XeeOabhQdsVuYI4cWbod2\n"
1069       "nLU4O7WgerQHYwkZ5iqISKnnnbYwWgiXDOyq5BZpcmIjmvt6VCiYxQwtt9citsj5\n"
1070       "OBfH3doxRpqUFI6e7nigtyLUSVSXTeV0W5K87Gws3+fBthsaVWtmCAN/Ra+aM/EQ\n"
1071       "wGyZSpIkMQht3QI+YXZ4eLbtfjeubPOJ4bfh3BXMt1afgKCxBX9ONxX/ty8ejwY4\n"
1072       "P1C3aSijtWZfNhpSSENmUt+ikk/TGGC+4+peGXEFv54cbGhyJW+ze3PJbb0S/5tB\n"
1073       "Ml706H7FC6NMZNFOvCYIZfsZl1h44TO/7Wg+sSdFb8Di7Jdp91zT91ECAwEAAaOC\n"
1074       "AdIwggHOMB0GA1UdDgQWBBT8ilC6nrklWntVhU+VAGOP6VhrQzASBgNVHRMBAf8E\n"
1075       "CDAGAQH/AgEAMD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRw\n"
1076       "czovL3d3dy52ZXJpc2lnbi5jb20vY3BzMD0GA1UdHwQ2MDQwMqAwoC6GLGh0dHA6\n"
1077       "Ly9FVlNlY3VyZS1jcmwudmVyaXNpZ24uY29tL3BjYTMtZzUuY3JsMA4GA1UdDwEB\n"
1078       "/wQEAwIBBjARBglghkgBhvhCAQEEBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZ\n"
1079       "MFcwVRYJaW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7\n"
1080       "GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwKQYDVR0R\n"
1081       "BCIwIKQeMBwxGjAYBgNVBAMTEUNsYXNzM0NBMjA0OC0xLTQ3MD0GCCsGAQUFBwEB\n"
1082       "BDEwLzAtBggrBgEFBQcwAYYhaHR0cDovL0VWU2VjdXJlLW9jc3AudmVyaXNpZ24u\n"
1083       "Y29tMB8GA1UdIwQYMBaAFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqGSIb3DQEB\n"
1084       "BQUAA4IBAQCWovp/5j3t1CvOtxU/wHIDX4u6FpAl98KD2Md1NGNoElMMU4l7yVYJ\n"
1085       "p8M2RE4O0GJis4b66KGbNGeNUyIXPv2s7mcuQ+JdfzOE8qJwwG6Cl8A0/SXGI3/t\n"
1086       "5rDFV0OEst4t8dD2SB8UcVeyrDHhlyQjyRNddOVG7wl8nuGZMQoIeRuPcZ8XZsg4\n"
1087       "z+6Ml7YGuXNG5NOUweVgtSV1LdlpMezNlsOjdv3odESsErlNv1HoudRETifLriDR\n"
1088       "fip8tmNHnna6l9AW5wtsbfdDbzMLKTB3+p359U64drPNGLT5IO892+bKrZvQTtKH\n"
1089       "qQ2mRHNQ3XBb7a1+Srwi1agm5MKFIA3Z\n"
1090       "-----END CERTIFICATE-----\n";
1091
1092     auto cert = CKM::Certificate::create(CKM::RawBuffer(ee.begin(), ee.end()), CKM::DataFormat::FORM_PEM);
1093     auto cert1 = CKM::Certificate::create(CKM::RawBuffer(im.begin(), im.end()), CKM::DataFormat::FORM_PEM);
1094     CKM::CertificateShPtrVector certChain;
1095     CKM::AliasVector aliasVector;
1096     CKM::Alias alias("imcert");
1097
1098     int tmp;
1099     auto manager = CKM::Manager::create();
1100
1101     RUNNER_ASSERT_MSG(NULL != cert.get(), "Certificate should not be empty");
1102     RUNNER_ASSERT_MSG(NULL != cert1.get(), "Certificate should not be empty");
1103
1104     RUNNER_ASSERT_MSG(
1105         CKM_API_ERROR_VERIFICATION_FAILED == (tmp = manager->getCertificateChain(cert, aliasVector, certChain)),
1106         "Error=" << CKM::ErrorToString(tmp));
1107
1108     RUNNER_ASSERT_MSG(
1109         0 == certChain.size(),
1110         "Wrong size of certificate chain.");
1111
1112     RUNNER_ASSERT_MSG(
1113         CKM_API_SUCCESS == (tmp = manager->saveCertificate(alias, cert1, CKM::Policy())),
1114         "Error=" << CKM::ErrorToString(tmp));
1115
1116     aliasVector.push_back(alias);
1117
1118     RUNNER_ASSERT_MSG(
1119         CKM_API_SUCCESS == (tmp = manager->getCertificateChain(cert, aliasVector, certChain)),
1120         "Error=" << CKM::ErrorToString(tmp));
1121
1122     RUNNER_ASSERT_MSG(
1123         3 == certChain.size(),
1124         "Wrong size of certificate chain.");
1125 }
1126
1127 RUNNER_TEST(T1314_ocsp_check)
1128 {
1129     std::string ee = "-----BEGIN CERTIFICATE-----\n"
1130       "MIIF0TCCBLmgAwIBAgIQaPGTP4aS7Ut/WDNaBzdQrDANBgkqhkiG9w0BAQUFADCB\n"
1131       "ujELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\n"
1132       "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug\n"
1133       "YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNjE0MDIGA1UEAxMr\n"
1134       "VmVyaVNpZ24gQ2xhc3MgMyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNTTCBDQTAeFw0x\n"
1135       "NDAyMjAwMDAwMDBaFw0xNTAyMjAyMzU5NTlaMIHmMRMwEQYLKwYBBAGCNzwCAQMT\n"
1136       "AlBMMR0wGwYDVQQPExRQcml2YXRlIE9yZ2FuaXphdGlvbjETMBEGA1UEBRMKMDAw\n"
1137       "MDAyNTIzNzELMAkGA1UEBhMCUEwxDzANBgNVBBEUBjAwLTk1MDEUMBIGA1UECBML\n"
1138       "bWF6b3dpZWNraWUxETAPBgNVBAcUCFdhcnN6YXdhMRYwFAYDVQQJFA1TZW5hdG9y\n"
1139       "c2thIDE4MRMwEQYDVQQKFAptQmFuayBTLkEuMQwwCgYDVQQLFANESU4xGTAXBgNV\n"
1140       "BAMUEHd3dy5tYmFuay5jb20ucGwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\n"
1141       "AoIBAQDph6x8V6xUW/+651+qHF+UmorH9uaz2ZrX2bIWiMKIJFmpDDHlxcapKkqE\n"
1142       "BV04is83aiCpqKtc2ZHy2g4Hpj1eSF5BP2+OAlo0YUQZPIeRRdiMjmeAxw/ncBDx\n"
1143       "9rQBuCJ4XTD6cqQox5SI0TASOZ+wyAEjbDRXzL73XqRAFZ1LOpb2ONkolS+RutMB\n"
1144       "vshvCsWPeNe7eGLuOh6DyC6r1vX9xhw3xnjM2mTSvmtimgzSLacNGKqRrsucUgcb\n"
1145       "0+O5C2jZAtAMLyZksL92cxmWbtVzUYzem4chjHu5cRxUlPNzUJWrrczueB7Ip4A8\n"
1146       "aQuFMfNXYc0x+WLWjy//urypMKjhAgMBAAGjggGjMIIBnzAbBgNVHREEFDASghB3\n"
1147       "d3cubWJhbmsuY29tLnBsMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgWgMB0GA1Ud\n"
1148       "JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBEBgNVHSAEPTA7MDkGC2CGSAGG+EUB\n"
1149       "BxcGMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9jcHMw\n"
1150       "HQYDVR0OBBYEFN37iGaS7mZnENxZ9FGqNLR+QgoMMB8GA1UdIwQYMBaAFPyKULqe\n"
1151       "uSVae1WFT5UAY4/pWGtDMEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6Ly9FVlNlY3Vy\n"
1152       "ZS1jcmwudmVyaXNpZ24uY29tL0VWU2VjdXJlMjAwNi5jcmwwfAYIKwYBBQUHAQEE\n"
1153       "cDBuMC0GCCsGAQUFBzABhiFodHRwOi8vRVZTZWN1cmUtb2NzcC52ZXJpc2lnbi5j\n"
1154       "b20wPQYIKwYBBQUHMAKGMWh0dHA6Ly9FVlNlY3VyZS1haWEudmVyaXNpZ24uY29t\n"
1155       "L0VWU2VjdXJlMjAwNi5jZXIwDQYJKoZIhvcNAQEFBQADggEBAD0wO+rooUrIM4qp\n"
1156       "PHhp+hkXK6WMQ2qzGOmbMcZjw0govg5vkzkefPDryIXXbrF8mRagiJNMSfNaWWeh\n"
1157       "Cj41OV24EdUl0OLbFxNzcvub599zRs/apfaRLTfsmlmOgi0/YP305i+3tJ2ll946\n"
1158       "P+qV1wXnXqTqEdIl4Ys3+1HmDCdTB1hoDwAAzqRVUXZ5+iiwPAU7R/LTHfMjV1ke\n"
1159       "8jtNFfrorlZMCfVH/7eEnHJvVjOJt+YFe4aFMzE+DfuYIK7MH+olC2v79kBwbnEQ\n"
1160       "fvHMA9gFwOYLUBBdSfcocp8EKZ+mRlNPGR/3LBrPeaQQ0GZEkxzRK+v/aNTuiYfr\n"
1161       "oFXtrg0=\n"
1162       "-----END CERTIFICATE-----\n";
1163
1164     std::string im =
1165       "-----BEGIN CERTIFICATE-----\n"
1166       "MIIF5DCCBMygAwIBAgIQW3dZxheE4V7HJ8AylSkoazANBgkqhkiG9w0BAQUFADCB\n"
1167       "yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\n"
1168       "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp\n"
1169       "U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW\n"
1170       "ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0\n"
1171       "aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMTYxMTA3MjM1OTU5WjCBujEL\n"
1172       "MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW\n"
1173       "ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQg\n"
1174       "aHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNjE0MDIGA1UEAxMrVmVy\n"
1175       "aVNpZ24gQ2xhc3MgMyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNTTCBDQTCCASIwDQYJ\n"
1176       "KoZIhvcNAQEBBQADggEPADCCAQoCggEBAJjboFXrnP0XeeOabhQdsVuYI4cWbod2\n"
1177       "nLU4O7WgerQHYwkZ5iqISKnnnbYwWgiXDOyq5BZpcmIjmvt6VCiYxQwtt9citsj5\n"
1178       "OBfH3doxRpqUFI6e7nigtyLUSVSXTeV0W5K87Gws3+fBthsaVWtmCAN/Ra+aM/EQ\n"
1179       "wGyZSpIkMQht3QI+YXZ4eLbtfjeubPOJ4bfh3BXMt1afgKCxBX9ONxX/ty8ejwY4\n"
1180       "P1C3aSijtWZfNhpSSENmUt+ikk/TGGC+4+peGXEFv54cbGhyJW+ze3PJbb0S/5tB\n"
1181       "Ml706H7FC6NMZNFOvCYIZfsZl1h44TO/7Wg+sSdFb8Di7Jdp91zT91ECAwEAAaOC\n"
1182       "AdIwggHOMB0GA1UdDgQWBBT8ilC6nrklWntVhU+VAGOP6VhrQzASBgNVHRMBAf8E\n"
1183       "CDAGAQH/AgEAMD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRw\n"
1184       "czovL3d3dy52ZXJpc2lnbi5jb20vY3BzMD0GA1UdHwQ2MDQwMqAwoC6GLGh0dHA6\n"
1185       "Ly9FVlNlY3VyZS1jcmwudmVyaXNpZ24uY29tL3BjYTMtZzUuY3JsMA4GA1UdDwEB\n"
1186       "/wQEAwIBBjARBglghkgBhvhCAQEEBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZ\n"
1187       "MFcwVRYJaW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7\n"
1188       "GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwKQYDVR0R\n"
1189       "BCIwIKQeMBwxGjAYBgNVBAMTEUNsYXNzM0NBMjA0OC0xLTQ3MD0GCCsGAQUFBwEB\n"
1190       "BDEwLzAtBggrBgEFBQcwAYYhaHR0cDovL0VWU2VjdXJlLW9jc3AudmVyaXNpZ24u\n"
1191       "Y29tMB8GA1UdIwQYMBaAFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqGSIb3DQEB\n"
1192       "BQUAA4IBAQCWovp/5j3t1CvOtxU/wHIDX4u6FpAl98KD2Md1NGNoElMMU4l7yVYJ\n"
1193       "p8M2RE4O0GJis4b66KGbNGeNUyIXPv2s7mcuQ+JdfzOE8qJwwG6Cl8A0/SXGI3/t\n"
1194       "5rDFV0OEst4t8dD2SB8UcVeyrDHhlyQjyRNddOVG7wl8nuGZMQoIeRuPcZ8XZsg4\n"
1195       "z+6Ml7YGuXNG5NOUweVgtSV1LdlpMezNlsOjdv3odESsErlNv1HoudRETifLriDR\n"
1196       "fip8tmNHnna6l9AW5wtsbfdDbzMLKTB3+p359U64drPNGLT5IO892+bKrZvQTtKH\n"
1197       "qQ2mRHNQ3XBb7a1+Srwi1agm5MKFIA3Z\n"
1198       "-----END CERTIFICATE-----\n";
1199
1200     auto cert = CKM::Certificate::create(CKM::RawBuffer(ee.begin(), ee.end()), CKM::DataFormat::FORM_PEM);
1201     auto cert1 = CKM::Certificate::create(CKM::RawBuffer(im.begin(), im.end()), CKM::DataFormat::FORM_PEM);
1202     CKM::CertificateShPtrVector certVector = {cert1};
1203     CKM::CertificateShPtrVector certChain;
1204
1205     int tmp;
1206     auto manager = CKM::Manager::create();
1207
1208     RUNNER_ASSERT_MSG(NULL != cert.get(), "Certificate should not be empty");
1209     RUNNER_ASSERT_MSG(NULL != cert1.get(), "Certificate should not be empty");
1210
1211     RUNNER_ASSERT_MSG(
1212         CKM_API_ERROR_VERIFICATION_FAILED == (tmp = manager->getCertificateChain(cert, CKM::CertificateShPtrVector(), certChain)),
1213         "Error=" << CKM::ErrorToString(tmp));
1214
1215     RUNNER_ASSERT_MSG(
1216         0 == certChain.size(),
1217         "Wrong size of certificate chain.");
1218
1219     RUNNER_ASSERT_MSG(
1220         CKM_API_SUCCESS == (tmp = manager->getCertificateChain(cert, certVector, certChain)),
1221         "Error=" << CKM::ErrorToString(tmp));
1222
1223     RUNNER_ASSERT_MSG(
1224         3 == certChain.size(),
1225         "Wrong size of certificate chain.");
1226
1227     int status;
1228     RUNNER_ASSERT_MSG(
1229         CKM_API_SUCCESS == (tmp = manager->ocspCheck(certChain, status)),
1230         "Error=" << CKM::ErrorToString(tmp));
1231
1232     RUNNER_ASSERT_MSG(CKM_API_OCSP_STATUS_GOOD == status, "Verfication failed");
1233 }
1234
1235 RUNNER_TEST(T1315_deinit)
1236 {
1237     int temp;
1238     auto control = CKM::Control::create();
1239
1240     RUNNER_ASSERT_MSG(
1241         CKM_API_SUCCESS == (temp = control->lockUserKey(0)),
1242         "Error=" << CKM::ErrorToString(temp));
1243     RUNNER_ASSERT_MSG(
1244         CKM_API_SUCCESS == (temp = control->removeUserData(0)),
1245         "Error=" << CKM::ErrorToString(temp));
1246 }
1247
1248 RUNNER_TEST_GROUP_INIT(T141_CREATE_AND_VERIFY_SIGNATURE);
1249
1250 RUNNER_TEST(T1411_init)
1251 {
1252     int temp;
1253     auto control = CKM::Control::create();
1254     RUNNER_ASSERT_MSG(
1255         CKM_API_SUCCESS == (temp = control->unlockUserKey(0, "test-pass")),
1256         "Error=" << CKM::ErrorToString(temp));
1257 }
1258
1259 RUNNER_TEST(T1412_rsa_key_create_verify)
1260 {
1261     int temp;
1262     auto manager = CKM::Manager::create();
1263
1264     std::string prv = "-----BEGIN RSA PRIVATE KEY-----\n"
1265       "Proc-Type: 4,ENCRYPTED\n"
1266       "DEK-Info: DES-EDE3-CBC,6C6507B11671DABC\n"
1267       "\n"
1268       "YiKNviNqc/V/i241CKtAVsNckesE0kcaka3VrY7ApXR+Va93YoEwVQ8gB9cE/eHH\n"
1269       "S0j3ZS1PAVFM/qo4ZnPdMzaSLvTQw0GAL90wWgF3XQ+feMnWyBObEoQdGXE828TB\n"
1270       "SLz4UOIQ55Dx6JSWTfEhwAlPs2cEWD14xvuxPzAEzBIYmWmBBsCN94YgFeRTzjH0\n"
1271       "TImoYVMN60GgOfZWw6rXq9RaV5dY0Y6F1piypCLGD35VaXAutdHIDvwUGECPm7SN\n"
1272       "w05jRro53E1vb4mYlZEY/bs4q7XEOI5+ZKT76Xn0oEJNX1KRL1h2q8fgUkm5j40M\n"
1273       "uQj71aLR9KyIoQARwGLeRy09tLVjH3fj66CCMqaPcxcIRIyWi5yYBB0s53ipm6A9\n"
1274       "CYuyc7MS2C0pOdWKsDvYsHR/36KUiIdPuhF4AbaTqqO0eWeuP7Na7dGK56Fl+ooi\n"
1275       "cUpJr7cIqMl2vL25B0jW7d4TB3zwCEkVVD1fBPeNoZWo30z4bILcBqjjPkQfHZ2e\n"
1276       "xNraG3qI4FHjoPT8JEE8p+PgwaMoINlICyIMKiCdvwz9yEnsHPy7FkmatpS+jFoS\n"
1277       "mg8R9vMwgK/HGEm0dmb/7/a0XsG2jCDm6cOmJdZJFQ8JW7hFs3eOHpNlQYDChG2D\n"
1278       "A1ExslqBtbpicywTZhzFdYU/hxeCr4UqcY27Zmhr4JlBPMyvadWKeOqCamWepjbT\n"
1279       "T/MhWJbmWgZbI5s5sbpu7cOYubQcUIEsTaQXGx/KEzGo1HLn9tzSeQfP/nqjAD/L\n"
1280       "T5t1Mb8o4LuV/fGIT33Q3i2FospJMqp2JINNzG18I6Fjo08PTvJ3row40Rb76+lJ\n"
1281       "wN1IBthgBgsgsOdB6XNc56sV+uq2TACsNNWw+JnFRCkCQgfF/KUrvN+WireWq88B\n"
1282       "9UPG+Hbans5A6K+y1a+bzfdYnKws7x8wNRyPxb7Vb2t9ZTl5PBorPLVGsjgf9N5X\n"
1283       "tCdBlfJsUdXot+EOxrIczV5zx0JIB1Y9hrDG07RYkzPuJKxkW7skqeLo8oWGVpaQ\n"
1284       "LGWvuebky1R75hcSuL3e4QHfjBHPdQ31fScB884tqkbhBAWr2nT9bYEmyT170bno\n"
1285       "8QkyOSb99xZBX55sLDHs9p61sTJr2C9Lz/KaWQs+3hTkpwSjSRyjEMH2n491qiQX\n"
1286       "G+kvLEnvtR8sl9zinorj/RfsxyPntAxudfY3qaYUu2QkLvVdfTVUVbxS/Fg8f7B3\n"
1287       "hEjCtpKgFjPxQuHE3didNOr5xM7mkmLN/QA7yHVgdpE64T5mFgC3JcVRpcR7zBPH\n"
1288       "3OeXHgjrhDfN8UIX/cq6gNgD8w7O0rhHa3mEXI1xP14ykPcJ7wlRuLm9P3fwx5A2\n"
1289       "jQrVKJKw1Nzummmspn4VOpJY3LkH4Sxo4e7Soo1l1cxJpzmERwgMF+vGz1L70+DG\n"
1290       "M0hVrz1PxlOsBBFgcdS4TB91DIs/RcFDqrJ4gOPNKCgBP+rgTXXLFcxUwJfE3lKg\n"
1291       "Kmpwdne6FuQYX3eyRVAmPgOHbJuRQCh/V4fYo51UxCcEKeKy6UgOPEJlXksWGbH5\n"
1292       "VFmlytYW6dFKJvjltSmK6L2r+TlyEQoXwTqe4bkfhB2LniDEq28hKQ==\n"
1293       "-----END RSA PRIVATE KEY-----\n";
1294
1295     std::string pub = "-----BEGIN PUBLIC KEY-----\n"
1296       "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
1297       "T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLf\n"
1298       "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
1299       "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
1300       "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
1301       "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
1302       "zQIDAQAB\n"
1303       "-----END PUBLIC KEY-----\n";
1304
1305     std::string message = "message test";
1306
1307     CKM::Alias aliasPub = "pub1";
1308     CKM::Alias aliasPrv = "prv1";
1309     CKM::Password password = "1234";
1310     CKM::HashAlgorithm hash = CKM::HashAlgorithm::SHA256;
1311     CKM::RSAPaddingAlgorithm padd = CKM::RSAPaddingAlgorithm::PKCS1;
1312     CKM::RawBuffer signature;
1313
1314     auto keyPub = CKM::Key::create(CKM::RawBuffer(pub.begin(), pub.end()));
1315     auto keyPrv = CKM::Key::create(CKM::RawBuffer(prv.begin(), prv.end()), password);
1316
1317     RUNNER_ASSERT_MSG(NULL != keyPub.get(),
1318         "Key is empty. Failed to import public key.");
1319     RUNNER_ASSERT_MSG(NULL != keyPrv.get(),
1320         "Key is empty. Failed to import private key.");
1321
1322     RUNNER_ASSERT_MSG(
1323         CKM_API_SUCCESS == (temp = manager->saveKey(aliasPub, keyPub, CKM::Policy())),
1324         "Error=" << CKM::ErrorToString(temp));
1325     RUNNER_ASSERT_MSG(
1326         CKM_API_SUCCESS == (temp = manager->saveKey(aliasPrv, keyPrv, CKM::Policy())),
1327         "Error=" << CKM::ErrorToString(temp));
1328
1329     RUNNER_ASSERT_MSG(
1330         CKM_API_SUCCESS == (temp = manager->createSignature(
1331                                         aliasPrv,
1332                                         CKM::Password(),
1333                                         CKM::RawBuffer(message.begin(), message.end()),
1334                                         hash,
1335                                         padd,
1336                                         signature)),
1337         "Error=" << CKM::ErrorToString(temp));
1338
1339     RUNNER_ASSERT_MSG(
1340         CKM_API_SUCCESS == (temp = manager->verifySignature(
1341                                         aliasPub,
1342                                         CKM::Password(),
1343                                         CKM::RawBuffer(message.begin(), message.end()),
1344                                         signature,
1345                                         hash,
1346                                         padd)),
1347         "Error=" << CKM::ErrorToString(temp));
1348 }
1349
1350 RUNNER_TEST(T1413_rsa_key_create_verify_negative)
1351 {
1352     int temp;
1353     auto manager = CKM::Manager::create();
1354     std::string message = "message asdfaslkdfjlksadjf test";
1355
1356     CKM::Alias aliasPub = "pub1";
1357     CKM::Alias aliasPrv = "prv1";
1358
1359     CKM::HashAlgorithm hash = CKM::HashAlgorithm::SHA256;
1360     CKM::RSAPaddingAlgorithm padd = CKM::RSAPaddingAlgorithm::PKCS1;
1361     CKM::RawBuffer signature;
1362
1363     RUNNER_ASSERT_MSG(
1364         CKM_API_SUCCESS == (temp = manager->createSignature(
1365                                         aliasPrv,
1366                                         CKM::Password(),
1367                                         CKM::RawBuffer(message.begin(), message.end()),
1368                                         hash,
1369                                         padd,
1370                                         signature)),
1371         "Error=" << CKM::ErrorToString(temp));
1372
1373     RUNNER_ASSERT_MSG(
1374         CKM_API_SUCCESS == (temp = manager->verifySignature(
1375                                         aliasPub,
1376                                         CKM::Password(),
1377                                         CKM::RawBuffer(message.begin(), message.end()),
1378                                         signature,
1379                                         hash,
1380                                         padd)),
1381         "Error=" << CKM::ErrorToString(temp));
1382
1383     RUNNER_ASSERT_MSG(signature.size() > 6, "Signature is too small");
1384     memcpy((void*)signature.data(), "BROKEN", 6);
1385
1386     RUNNER_ASSERT_MSG(
1387         CKM_API_ERROR_VERIFICATION_FAILED == (temp = manager->verifySignature(
1388                                         aliasPub,
1389                                         CKM::Password(),
1390                                         CKM::RawBuffer(message.begin(), message.end()),
1391                                         signature,
1392                                         hash,
1393                                         padd)),
1394         "Error=" << CKM::ErrorToString(temp));
1395 }
1396
1397 RUNNER_TEST(T1414_ec_key_create_verify)
1398 {
1399     int temp;
1400     auto manager = CKM::Manager::create();
1401
1402     std::string prv = "-----BEGIN EC PRIVATE KEY-----\n"
1403         "MHQCAQEEIJNud6U4h8EM1rASn4W5vQOJELTaVPQTUiESaBULvQUVoAcGBSuBBAAK\n"
1404         "oUQDQgAEL1R+hgjiFrdjbUKRNOxUG8ze9nveD9zT05YHeT7vK0w08AUL1HCH5nFV\n"
1405         "ljePBYSxe6CybFiseayaxRxjA+iF1g==\n"
1406         "-----END EC PRIVATE KEY-----\n";
1407
1408     std::string pub = "-----BEGIN PUBLIC KEY-----\n"
1409         "MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEL1R+hgjiFrdjbUKRNOxUG8ze9nveD9zT\n"
1410         "05YHeT7vK0w08AUL1HCH5nFVljePBYSxe6CybFiseayaxRxjA+iF1g==\n"
1411         "-----END PUBLIC KEY-----\n";
1412
1413     std::string message = "message test";
1414
1415     CKM::Alias aliasPub = "ecpub2";
1416     CKM::Alias aliasPrv = "ecprv2";
1417     CKM::HashAlgorithm hash = CKM::HashAlgorithm::SHA256;
1418     CKM::RSAPaddingAlgorithm padd = CKM::RSAPaddingAlgorithm::PKCS1;
1419     CKM::RawBuffer signature;
1420
1421     auto keyPub = CKM::Key::create(CKM::RawBuffer(pub.begin(), pub.end()));
1422     auto keyPrv = CKM::Key::create(CKM::RawBuffer(prv.begin(), prv.end()));
1423
1424     RUNNER_ASSERT_MSG(NULL != keyPub.get(),
1425         "Key is empty. Failed to import public key.");
1426     RUNNER_ASSERT_MSG(NULL != keyPrv.get(),
1427         "Key is empty. Failed to import private key.");
1428
1429     RUNNER_ASSERT_MSG(
1430         CKM_API_SUCCESS == (temp = manager->saveKey(aliasPub, keyPub, CKM::Policy())),
1431         "Error=" << CKM::ErrorToString(temp));
1432     RUNNER_ASSERT_MSG(
1433         CKM_API_SUCCESS == (temp = manager->saveKey(aliasPrv, keyPrv, CKM::Policy())),
1434         "Error=" << CKM::ErrorToString(temp));
1435
1436     RUNNER_ASSERT_MSG(
1437         CKM_API_SUCCESS == (temp = manager->createSignature(
1438                                         aliasPrv,
1439                                         CKM::Password(),
1440                                         CKM::RawBuffer(message.begin(), message.end()),
1441                                         hash,
1442                                         padd,
1443                                         signature)),
1444         "Error=" << CKM::ErrorToString(temp));
1445
1446     RUNNER_ASSERT_MSG(
1447         CKM_API_SUCCESS == (temp = manager->verifySignature(
1448                                         aliasPub,
1449                                         CKM::Password(),
1450                                         CKM::RawBuffer(message.begin(), message.end()),
1451                                         signature,
1452                                         hash,
1453                                         padd)),
1454         "Error=" << CKM::ErrorToString(temp));
1455
1456     RUNNER_ASSERT_MSG(signature.size() > 6, "Signature is too small");
1457
1458     memcpy((void*)signature.data(), "BROKEN", 6);
1459
1460     RUNNER_ASSERT_MSG(
1461         CKM_API_ERROR_VERIFICATION_FAILED == (temp = manager->verifySignature(
1462                                         aliasPub,
1463                                         CKM::Password(),
1464                                         CKM::RawBuffer(message.begin(), message.end()),
1465                                         signature,
1466                                         hash,
1467                                         padd)),
1468         "Error=" << CKM::ErrorToString(temp));
1469 }
1470
1471 RUNNER_TEST(T1415_rsa_cert_create_verify_signature)
1472 {
1473     int temp;
1474     auto manager = CKM::Manager::create();
1475
1476     std::string prv =
1477       "-----BEGIN RSA PRIVATE KEY-----\n"
1478       "MIICXQIBAAKBgQDCKb9BkTdOjCTXKPi/H5FSGuyrgzORBtR3nCTg7SRnL47zNGEj\n"
1479       "l2wkgsY9ZO3UJHm0gy5KMjWeCuUVkSD3G46J9obg1bYJivCQBJKxfieA8sWOtNq1\n"
1480       "M8emHGK8o3sjaRklrngmk2xSCs5vFJVlCluzAYUmrPDm64C3+n4yW4pBCQIDAQAB\n"
1481       "AoGAd1IWgiHO3kuLvFome7XXpaB8P27SutZ6rcLcewnhLDRy4g0XgTrmL43abBJh\n"
1482       "gdSkooVXZity/dvuKpHUs2dQ8W8zYiFFsHfu9qqLmLP6SuBPyUCvlUDH5BGfjjxI\n"
1483       "5qGWIowj/qGHKpbQ7uB+Oe2BHwbHao0zFZIkfKqY0mX9U00CQQDwF/4zQcGS1RX/\n"
1484       "229gowTsvSGVmm8cy1jGst6xkueEuOEZ/AVPO1fjavz+nTziUk4E5lZHAj18L6Hl\n"
1485       "iO29LRujAkEAzwbEWVhfTJewCZIFf3sY3ifXhGZhVKDHVzPBNyoft8Z+09DMHTJb\n"
1486       "EYg85MIbR73aUyIWsEci/CPk6LPRNv47YwJAHtQF2NEFqPPhakPjzjXAaSFz0YDN\n"
1487       "6ZWWpZTMEWL6hUkz5iE9EUpeY54WNB8+dRT6XZix1VZNTMfU8uMdG6BSHwJBAKYM\n"
1488       "gm47AGz5eVujwD8op6CACk+KomRzdI+P1lh9s+T+E3mnDiAY5IxiXp0Ix0K6lyN4\n"
1489       "wwPuerQLwi2XFKZsMYsCQQDOiSQFP9PfXh9kFzN6e89LxOdnqC/r9i5GDB3ea8eL\n"
1490       "SCRprpzqOXZvOP1HBAEjsJ6k4f8Dqj1fm+y8ZcgAZUPr\n"
1491       "-----END RSA PRIVATE KEY-----\n";
1492
1493     std::string pub =
1494       "-----BEGIN CERTIFICATE-----\n"
1495       "MIICijCCAfOgAwIBAgIJAMvaNHQ1ozT8MA0GCSqGSIb3DQEBBQUAMF4xCzAJBgNV\n"
1496       "BAYTAlBMMQ0wCwYDVQQIDARMb2R6MQ0wCwYDVQQHDARMb2R6MRAwDgYDVQQKDAdT\n"
1497       "YW1zdW5nMREwDwYDVQQLDAhTZWN1cml0eTEMMAoGA1UEAwwDQ0tNMB4XDTE0MDcw\n"
1498       "MjEyNDE0N1oXDTE3MDcwMTEyNDE0N1owXjELMAkGA1UEBhMCUEwxDTALBgNVBAgM\n"
1499       "BExvZHoxDTALBgNVBAcMBExvZHoxEDAOBgNVBAoMB1NhbXN1bmcxETAPBgNVBAsM\n"
1500       "CFNlY3VyaXR5MQwwCgYDVQQDDANDS00wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ\n"
1501       "AoGBAMIpv0GRN06MJNco+L8fkVIa7KuDM5EG1HecJODtJGcvjvM0YSOXbCSCxj1k\n"
1502       "7dQkebSDLkoyNZ4K5RWRIPcbjon2huDVtgmK8JAEkrF+J4DyxY602rUzx6YcYryj\n"
1503       "eyNpGSWueCaTbFIKzm8UlWUKW7MBhSas8ObrgLf6fjJbikEJAgMBAAGjUDBOMB0G\n"
1504       "A1UdDgQWBBQuW9DuITahZJ6saVZZI0aBlis5vzAfBgNVHSMEGDAWgBQuW9DuITah\n"
1505       "ZJ6saVZZI0aBlis5vzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAB2X\n"
1506       "GNtJopBJR3dCpzDONknr/c6qcsPVa3nH4c7qzy6F+4bgqa5IObnoF8zUrvD2sMAO\n"
1507       "km3C/N+Qzt8Rb7ORM6U4tlPp1kZ5t6PKjghhNaiYwVm9A/Zm+wyAmRIkQiYDr4MX\n"
1508       "e+bRAkPmJeEWpaav1lvvBnFzGSGJrnSSeWUegGyn\n"
1509       "-----END CERTIFICATE-----\n";
1510
1511     std::string message = "message test";
1512
1513     CKM::Alias aliasPub = "pub3";
1514     CKM::Alias aliasPrv = "prv3";
1515     CKM::HashAlgorithm hash = CKM::HashAlgorithm::SHA256;
1516     CKM::RSAPaddingAlgorithm padd = CKM::RSAPaddingAlgorithm::PKCS1;
1517     CKM::RawBuffer signature;
1518
1519     auto cert = CKM::Certificate::create(CKM::RawBuffer(pub.begin(), pub.end()), CKM::DataFormat::FORM_PEM);
1520     auto keyPrv = CKM::Key::create(CKM::RawBuffer(prv.begin(), prv.end()));
1521
1522     RUNNER_ASSERT_MSG(NULL != cert.get(),
1523         "Key is empty. Failed to import public key.");
1524     RUNNER_ASSERT_MSG(NULL != keyPrv.get(),
1525         "Key is empty. Failed to import private key.");
1526
1527     RUNNER_ASSERT_MSG(
1528         CKM_API_SUCCESS == (temp = manager->saveCertificate(aliasPub, cert, CKM::Policy())),
1529         "Error=" << CKM::ErrorToString(temp));
1530     RUNNER_ASSERT_MSG(
1531         CKM_API_SUCCESS == (temp = manager->saveKey(aliasPrv, keyPrv, CKM::Policy())),
1532         "Error=" << CKM::ErrorToString(temp));
1533
1534     RUNNER_ASSERT_MSG(
1535         CKM_API_SUCCESS == (temp = manager->createSignature(
1536                                         aliasPrv,
1537                                         CKM::Password(),
1538                                         CKM::RawBuffer(message.begin(), message.end()),
1539                                         hash,
1540                                         padd,
1541                                         signature)),
1542         "Error=" << CKM::ErrorToString(temp));
1543
1544     RUNNER_ASSERT_MSG(
1545         CKM_API_SUCCESS == (temp = manager->verifySignature(
1546                                         aliasPub,
1547                                         CKM::Password(),
1548                                         CKM::RawBuffer(message.begin(), message.end()),
1549                                         signature,
1550                                         hash,
1551                                         padd)),
1552         "Error=" << CKM::ErrorToString(temp));
1553
1554     RUNNER_ASSERT_MSG(signature.size() > 6, "Signature is too small");
1555
1556     memcpy((void*)signature.data(), "BROKEN", 6);
1557
1558     RUNNER_ASSERT_MSG(
1559         CKM_API_ERROR_VERIFICATION_FAILED == (temp = manager->verifySignature(
1560                                         aliasPub,
1561                                         CKM::Password(),
1562                                         CKM::RawBuffer(message.begin(), message.end()),
1563                                         signature,
1564                                         hash,
1565                                         padd)),
1566         "Error=" << CKM::ErrorToString(temp));
1567 }
1568
1569 RUNNER_TEST(T1416_ecdsa_cert_create_verify_signature)
1570 {
1571     int temp;
1572     auto manager = CKM::Manager::create();
1573
1574     std::string prv =
1575       "-----BEGIN EC PRIVATE KEY-----\n"
1576       "MIH8AgEBBBRPb/2utS5aCtyuwmzIHpU6LH3mc6CBsjCBrwIBATAgBgcqhkjOPQEB\n"
1577       "AhUA/////////////////////3////8wQwQU/////////////////////3////wE\n"
1578       "FByXvvxUvXqLZaz4n4HU1K3FZfpFAxUAEFPN5CwU1pbmdodWFRdTO/P4M0UEKQRK\n"
1579       "lrVojvVzKEZkaYlow4u5E8v8giOmKFUxaJR9WdzJEgQjUTd6xfsyAhUBAAAAAAAA\n"
1580       "AAAAAfTI+Seu08p1IlcCAQGhLAMqAATehLqu61gKC3Tgr4wQMVoguAhhG3Uwwz8u\n"
1581       "ELyhe7yPCAuOoLZlTLgf\n"
1582       "-----END EC PRIVATE KEY-----\n";
1583
1584     std::string pub =
1585       "-----BEGIN CERTIFICATE-----\n"
1586       "MIICfDCCAjqgAwIBAgIJANIytpeTKlXBMAkGByqGSM49BAEwXjELMAkGA1UEBhMC\n"
1587       "UEwxDTALBgNVBAgMBExvZHoxDTALBgNVBAcMBExvZHoxEDAOBgNVBAoMB1NhbXN1\n"
1588       "bmcxETAPBgNVBAsMCFNlY3VyaXR5MQwwCgYDVQQDDANDS00wHhcNMTQwNzAyMTI0\n"
1589       "MTQ3WhcNMTcwNzAxMTI0MTQ3WjBeMQswCQYDVQQGEwJQTDENMAsGA1UECAwETG9k\n"
1590       "ejENMAsGA1UEBwwETG9kejEQMA4GA1UECgwHU2Ftc3VuZzERMA8GA1UECwwIU2Vj\n"
1591       "dXJpdHkxDDAKBgNVBAMMA0NLTTCB6jCBuwYHKoZIzj0CATCBrwIBATAgBgcqhkjO\n"
1592       "PQEBAhUA/////////////////////3////8wQwQU/////////////////////3//\n"
1593       "//wEFByXvvxUvXqLZaz4n4HU1K3FZfpFAxUAEFPN5CwU1pbmdodWFRdTO/P4M0UE\n"
1594       "KQRKlrVojvVzKEZkaYlow4u5E8v8giOmKFUxaJR9WdzJEgQjUTd6xfsyAhUBAAAA\n"
1595       "AAAAAAAAAfTI+Seu08p1IlcCAQEDKgAE3oS6rutYCgt04K+MEDFaILgIYRt1MMM/\n"
1596       "LhC8oXu8jwgLjqC2ZUy4H6NQME4wHQYDVR0OBBYEFELElWx3kbLo55Cfn1vywsEZ\n"
1597       "ccsmMB8GA1UdIwQYMBaAFELElWx3kbLo55Cfn1vywsEZccsmMAwGA1UdEwQFMAMB\n"
1598       "Af8wCQYHKoZIzj0EAQMxADAuAhUAumC4mGoyK97SxTvVBQ+ELfCbxEECFQCbMJ72\n"
1599       "Q1oBry6NEc+lLFmWMDesAA==\n"
1600       "-----END CERTIFICATE-----\n";
1601
1602     std::string message = "message test";
1603
1604     CKM::Alias aliasPub = "pub4";
1605     CKM::Alias aliasPrv = "prv4";
1606     CKM::HashAlgorithm hash = CKM::HashAlgorithm::SHA256;
1607     CKM::RSAPaddingAlgorithm padd = CKM::RSAPaddingAlgorithm::PKCS1;
1608     CKM::RawBuffer signature;
1609
1610     auto cert = CKM::Certificate::create(CKM::RawBuffer(pub.begin(), pub.end()), CKM::DataFormat::FORM_PEM);
1611     auto keyPrv = CKM::Key::create(CKM::RawBuffer(prv.begin(), prv.end()));
1612
1613     RUNNER_ASSERT_MSG(NULL != cert.get(),
1614         "Key is empty. Failed to import public key.");
1615     RUNNER_ASSERT_MSG(NULL != keyPrv.get(),
1616         "Key is empty. Failed to import private key.");
1617
1618     RUNNER_ASSERT_MSG(
1619         CKM_API_SUCCESS == (temp = manager->saveCertificate(aliasPub, cert, CKM::Policy())),
1620         "Error=" << CKM::ErrorToString(temp));
1621     RUNNER_ASSERT_MSG(
1622         CKM_API_SUCCESS == (temp = manager->saveKey(aliasPrv, keyPrv, CKM::Policy())),
1623         "Error=" << CKM::ErrorToString(temp));
1624
1625     RUNNER_ASSERT_MSG(
1626         CKM_API_SUCCESS == (temp = manager->createSignature(
1627                                         aliasPrv,
1628                                         CKM::Password(),
1629                                         CKM::RawBuffer(message.begin(), message.end()),
1630                                         hash,
1631                                         padd,
1632                                         signature)),
1633         "Error=" << CKM::ErrorToString(temp));
1634
1635     RUNNER_ASSERT_MSG(
1636         CKM_API_SUCCESS == (temp = manager->verifySignature(
1637                                         aliasPub,
1638                                         CKM::Password(),
1639                                         CKM::RawBuffer(message.begin(), message.end()),
1640                                         signature,
1641                                         hash,
1642                                         padd)),
1643         "Error=" << CKM::ErrorToString(temp));
1644
1645     RUNNER_ASSERT_MSG(signature.size() > 6, "Signature is too small");
1646
1647     memcpy((void*)signature.data(), "BROKEN", 6);
1648
1649     RUNNER_ASSERT_MSG(
1650         CKM_API_ERROR_VERIFICATION_FAILED == (temp = manager->verifySignature(
1651                                         aliasPub,
1652                                         CKM::Password(),
1653                                         CKM::RawBuffer(message.begin(), message.end()),
1654                                         signature,
1655                                         hash,
1656                                         padd)),
1657         "Error=" << CKM::ErrorToString(temp));
1658 }
1659
1660 RUNNER_TEST(T1417_deinit)
1661 {
1662     int temp;
1663     auto control = CKM::Control::create();
1664
1665     RUNNER_ASSERT_MSG(
1666         CKM_API_SUCCESS == (temp = control->lockUserKey(0)),
1667         "Error=" << CKM::ErrorToString(temp));
1668     RUNNER_ASSERT_MSG(
1669         CKM_API_SUCCESS == (temp = control->removeUserData(0)),
1670         "Error=" << CKM::ErrorToString(temp));
1671 }
1672
1673 RUNNER_TEST_GROUP_INIT(T151_CKM_STORAGE_PERNAMENT_TESTS);
1674
1675 RUNNER_CHILD_TEST(T1510_init_unlock_key)
1676 {
1677     int tmp;
1678     SecurityServer::AccessProvider ap("my-label");
1679     ap.addObjectRule("key-manager::api-control", "rw");
1680     ap.applyAndSwithToUser(USER_TEST, GROUP_APP);
1681
1682     auto control = CKM::Control::create();
1683     RUNNER_ASSERT_MSG(
1684         CKM_API_SUCCESS == (tmp = control->unlockUserKey(USER_TEST, "strong-password")),
1685         "Error=" << CKM::ErrorToString(tmp));
1686 }
1687
1688 RUNNER_CHILD_TEST(T1511_init_insert_data)
1689 {
1690     SecurityServer::AccessProvider ap("my-label");
1691     ap.addObjectRule("key-manager::api-storage", "rw");
1692     ap.applyAndSwithToUser(USER_TEST, GROUP_APP);
1693
1694     std::string ee = "-----BEGIN CERTIFICATE-----\n"
1695       "MIIF0TCCBLmgAwIBAgIQaPGTP4aS7Ut/WDNaBzdQrDANBgkqhkiG9w0BAQUFADCB\n"
1696       "ujELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\n"
1697       "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug\n"
1698       "YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNjE0MDIGA1UEAxMr\n"
1699       "VmVyaVNpZ24gQ2xhc3MgMyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNTTCBDQTAeFw0x\n"
1700       "NDAyMjAwMDAwMDBaFw0xNTAyMjAyMzU5NTlaMIHmMRMwEQYLKwYBBAGCNzwCAQMT\n"
1701       "AlBMMR0wGwYDVQQPExRQcml2YXRlIE9yZ2FuaXphdGlvbjETMBEGA1UEBRMKMDAw\n"
1702       "MDAyNTIzNzELMAkGA1UEBhMCUEwxDzANBgNVBBEUBjAwLTk1MDEUMBIGA1UECBML\n"
1703       "bWF6b3dpZWNraWUxETAPBgNVBAcUCFdhcnN6YXdhMRYwFAYDVQQJFA1TZW5hdG9y\n"
1704       "c2thIDE4MRMwEQYDVQQKFAptQmFuayBTLkEuMQwwCgYDVQQLFANESU4xGTAXBgNV\n"
1705       "BAMUEHd3dy5tYmFuay5jb20ucGwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\n"
1706       "AoIBAQDph6x8V6xUW/+651+qHF+UmorH9uaz2ZrX2bIWiMKIJFmpDDHlxcapKkqE\n"
1707       "BV04is83aiCpqKtc2ZHy2g4Hpj1eSF5BP2+OAlo0YUQZPIeRRdiMjmeAxw/ncBDx\n"
1708       "9rQBuCJ4XTD6cqQox5SI0TASOZ+wyAEjbDRXzL73XqRAFZ1LOpb2ONkolS+RutMB\n"
1709       "vshvCsWPeNe7eGLuOh6DyC6r1vX9xhw3xnjM2mTSvmtimgzSLacNGKqRrsucUgcb\n"
1710       "0+O5C2jZAtAMLyZksL92cxmWbtVzUYzem4chjHu5cRxUlPNzUJWrrczueB7Ip4A8\n"
1711       "aQuFMfNXYc0x+WLWjy//urypMKjhAgMBAAGjggGjMIIBnzAbBgNVHREEFDASghB3\n"
1712       "d3cubWJhbmsuY29tLnBsMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgWgMB0GA1Ud\n"
1713       "JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBEBgNVHSAEPTA7MDkGC2CGSAGG+EUB\n"
1714       "BxcGMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9jcHMw\n"
1715       "HQYDVR0OBBYEFN37iGaS7mZnENxZ9FGqNLR+QgoMMB8GA1UdIwQYMBaAFPyKULqe\n"
1716       "uSVae1WFT5UAY4/pWGtDMEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6Ly9FVlNlY3Vy\n"
1717       "ZS1jcmwudmVyaXNpZ24uY29tL0VWU2VjdXJlMjAwNi5jcmwwfAYIKwYBBQUHAQEE\n"
1718       "cDBuMC0GCCsGAQUFBzABhiFodHRwOi8vRVZTZWN1cmUtb2NzcC52ZXJpc2lnbi5j\n"
1719       "b20wPQYIKwYBBQUHMAKGMWh0dHA6Ly9FVlNlY3VyZS1haWEudmVyaXNpZ24uY29t\n"
1720       "L0VWU2VjdXJlMjAwNi5jZXIwDQYJKoZIhvcNAQEFBQADggEBAD0wO+rooUrIM4qp\n"
1721       "PHhp+hkXK6WMQ2qzGOmbMcZjw0govg5vkzkefPDryIXXbrF8mRagiJNMSfNaWWeh\n"
1722       "Cj41OV24EdUl0OLbFxNzcvub599zRs/apfaRLTfsmlmOgi0/YP305i+3tJ2ll946\n"
1723       "P+qV1wXnXqTqEdIl4Ys3+1HmDCdTB1hoDwAAzqRVUXZ5+iiwPAU7R/LTHfMjV1ke\n"
1724       "8jtNFfrorlZMCfVH/7eEnHJvVjOJt+YFe4aFMzE+DfuYIK7MH+olC2v79kBwbnEQ\n"
1725       "fvHMA9gFwOYLUBBdSfcocp8EKZ+mRlNPGR/3LBrPeaQQ0GZEkxzRK+v/aNTuiYfr\n"
1726       "oFXtrg0=\n"
1727       "-----END CERTIFICATE-----\n";
1728
1729     std::string im =
1730       "-----BEGIN CERTIFICATE-----\n"
1731       "MIIF5DCCBMygAwIBAgIQW3dZxheE4V7HJ8AylSkoazANBgkqhkiG9w0BAQUFADCB\n"
1732       "yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\n"
1733       "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp\n"
1734       "U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW\n"
1735       "ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0\n"
1736       "aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMTYxMTA3MjM1OTU5WjCBujEL\n"
1737       "MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW\n"
1738       "ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQg\n"
1739       "aHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNjE0MDIGA1UEAxMrVmVy\n"
1740       "aVNpZ24gQ2xhc3MgMyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNTTCBDQTCCASIwDQYJ\n"
1741       "KoZIhvcNAQEBBQADggEPADCCAQoCggEBAJjboFXrnP0XeeOabhQdsVuYI4cWbod2\n"
1742       "nLU4O7WgerQHYwkZ5iqISKnnnbYwWgiXDOyq5BZpcmIjmvt6VCiYxQwtt9citsj5\n"
1743       "OBfH3doxRpqUFI6e7nigtyLUSVSXTeV0W5K87Gws3+fBthsaVWtmCAN/Ra+aM/EQ\n"
1744       "wGyZSpIkMQht3QI+YXZ4eLbtfjeubPOJ4bfh3BXMt1afgKCxBX9ONxX/ty8ejwY4\n"
1745       "P1C3aSijtWZfNhpSSENmUt+ikk/TGGC+4+peGXEFv54cbGhyJW+ze3PJbb0S/5tB\n"
1746       "Ml706H7FC6NMZNFOvCYIZfsZl1h44TO/7Wg+sSdFb8Di7Jdp91zT91ECAwEAAaOC\n"
1747       "AdIwggHOMB0GA1UdDgQWBBT8ilC6nrklWntVhU+VAGOP6VhrQzASBgNVHRMBAf8E\n"
1748       "CDAGAQH/AgEAMD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRw\n"
1749       "czovL3d3dy52ZXJpc2lnbi5jb20vY3BzMD0GA1UdHwQ2MDQwMqAwoC6GLGh0dHA6\n"
1750       "Ly9FVlNlY3VyZS1jcmwudmVyaXNpZ24uY29tL3BjYTMtZzUuY3JsMA4GA1UdDwEB\n"
1751       "/wQEAwIBBjARBglghkgBhvhCAQEEBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZ\n"
1752       "MFcwVRYJaW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7\n"
1753       "GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwKQYDVR0R\n"
1754       "BCIwIKQeMBwxGjAYBgNVBAMTEUNsYXNzM0NBMjA0OC0xLTQ3MD0GCCsGAQUFBwEB\n"
1755       "BDEwLzAtBggrBgEFBQcwAYYhaHR0cDovL0VWU2VjdXJlLW9jc3AudmVyaXNpZ24u\n"
1756       "Y29tMB8GA1UdIwQYMBaAFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqGSIb3DQEB\n"
1757       "BQUAA4IBAQCWovp/5j3t1CvOtxU/wHIDX4u6FpAl98KD2Md1NGNoElMMU4l7yVYJ\n"
1758       "p8M2RE4O0GJis4b66KGbNGeNUyIXPv2s7mcuQ+JdfzOE8qJwwG6Cl8A0/SXGI3/t\n"
1759       "5rDFV0OEst4t8dD2SB8UcVeyrDHhlyQjyRNddOVG7wl8nuGZMQoIeRuPcZ8XZsg4\n"
1760       "z+6Ml7YGuXNG5NOUweVgtSV1LdlpMezNlsOjdv3odESsErlNv1HoudRETifLriDR\n"
1761       "fip8tmNHnna6l9AW5wtsbfdDbzMLKTB3+p359U64drPNGLT5IO892+bKrZvQTtKH\n"
1762       "qQ2mRHNQ3XBb7a1+Srwi1agm5MKFIA3Z\n"
1763       "-----END CERTIFICATE-----\n";
1764
1765     auto manager = CKM::Manager::create();
1766     auto certee = CKM::Certificate::create(CKM::RawBuffer(ee.begin(), ee.end()), CKM::DataFormat::FORM_PEM);
1767     auto certim = CKM::Certificate::create(CKM::RawBuffer(im.begin(), im.end()), CKM::DataFormat::FORM_PEM);
1768
1769     int status1 = manager->saveCertificate(CKM::Alias("CertEE"), certee, CKM::Policy());
1770     int status2 = manager->saveCertificate(CKM::Alias("CertIM"), certim, CKM::Policy());
1771
1772     RUNNER_ASSERT_MSG(
1773         CKM_API_ERROR_DB_ALIAS_EXISTS == status1,
1774         "Certificate should be in database already. Error=" << CKM::ErrorToString(status1));
1775
1776     RUNNER_ASSERT_MSG(
1777         CKM_API_ERROR_DB_ALIAS_EXISTS == status2,
1778         "Certificate should be in database already. Error=" << CKM::ErrorToString(status2));
1779 }
1780
1781 RUNNER_CHILD_TEST(T1519_deinit)
1782 {
1783     int tmp;
1784     SecurityServer::AccessProvider ap("my-label");
1785     ap.addObjectRule("key-manager::api-control", "rw");
1786     ap.applyAndSwithToUser(USER_APP, GROUP_APP);
1787
1788     auto control = CKM::Control::create();
1789     RUNNER_ASSERT_MSG(
1790         CKM_API_SUCCESS == (tmp = control->lockUserKey(USER_TEST)),
1791         "Error=" << CKM::ErrorToString(tmp));
1792 }
1793
1794
1795 RUNNER_TEST_GROUP_INIT(T161_CKM_LOCKTYPE_TESTS);
1796
1797 RUNNER_CHILD_TEST(T1610_init_lock_key)
1798 {
1799     int tmp;
1800     SecurityServer::AccessProvider ap("my-label");
1801     ap.addObjectRule("key-manager::api-control", "rw");
1802     ap.applyAndSwithToUser(USER_APP, GROUP_APP);
1803
1804     auto control = CKM::Control::create();
1805     RUNNER_ASSERT_MSG(
1806         CKM_API_SUCCESS == (tmp = control->changeUserPassword(USER_APP,"user-pass","")),
1807         "Error=" << CKM::ErrorToString(tmp));
1808     RUNNER_ASSERT_MSG(
1809         CKM_API_SUCCESS == (tmp = control->lockUserKey(USER_APP)),
1810         "Error=" << CKM::ErrorToString(tmp));
1811 }
1812
1813 RUNNER_CHILD_TEST(T1611_unlock_default_passwd)
1814 {
1815     SecurityServer::AccessProvider ap("my-label");
1816     ap.addObjectRule("key-manager::api-storage", "rw");
1817     ap.applyAndSwithToUser(USER_APP, GROUP_APP);
1818
1819     int temp;
1820     auto manager = CKM::Manager::create();
1821
1822     std::string keyPem = "-----BEGIN PUBLIC KEY-----\n"
1823         "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
1824         "T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLf\n"
1825         "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
1826         "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
1827         "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
1828         "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
1829         "zQIDAQAB\n"
1830         "-----END PUBLIC KEY-----";
1831
1832     CKM::RawBuffer buffer(keyPem.begin(), keyPem.end());
1833     auto key = CKM::Key::create(buffer, CKM::Password());
1834     CKM::KeyShPtr key2;
1835     CKM::Alias alias = "mykey_defpasswd";
1836
1837     RUNNER_ASSERT_MSG(
1838         CKM_API_SUCCESS == (temp = manager->saveKey(alias, key, CKM::Policy())),
1839         "Error=" << CKM::ErrorToString(temp));
1840     RUNNER_ASSERT_MSG(
1841         CKM_API_SUCCESS == (temp = manager->getKey(alias, CKM::Password(), key2)),
1842         "Error=" << CKM::ErrorToString(temp));
1843     RUNNER_ASSERT_MSG(
1844         key->getDER() == key2->getDER(),
1845         "Key value has been changed by service");
1846     RUNNER_ASSERT_MSG(
1847             CKM_API_SUCCESS == (temp = manager->removeKey(alias)),
1848             "Error=" << CKM::ErrorToString(temp));
1849 }
1850
1851 RUNNER_CHILD_TEST(T1612_init_change_user_password)
1852 {
1853     int tmp;
1854     SecurityServer::AccessProvider ap("my-label");
1855     ap.addObjectRule("key-manager::api-control", "rw");
1856     ap.applyAndSwithToUser(USER_APP, GROUP_APP);
1857
1858     auto control = CKM::Control::create();
1859     RUNNER_ASSERT_MSG(
1860         CKM_API_SUCCESS == (tmp = control->changeUserPassword(USER_APP,"","user-pass")),
1861         "Error=" << CKM::ErrorToString(tmp));
1862     RUNNER_ASSERT_MSG(
1863         CKM_API_SUCCESS == (tmp = control->lockUserKey(USER_APP)),
1864         "Error=" << CKM::ErrorToString(tmp));
1865 }
1866
1867 RUNNER_CHILD_TEST(T1613_unlock_default_passwd_negative)
1868 {
1869     SecurityServer::AccessProvider ap("my-label");
1870     ap.addObjectRule("key-manager::api-storage", "rw");
1871     ap.applyAndSwithToUser(USER_APP, GROUP_APP);
1872
1873     int temp;
1874     auto manager = CKM::Manager::create();
1875
1876     std::string keyPem = "-----BEGIN PUBLIC KEY-----\n"
1877         "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4\n"
1878         "T4tUddtZNi0NVjQn9RFH1NMa220GsRhRO56F77FlSVFKfSfVZKIiWg6C+DVCkcLf\n"
1879         "zXJ/Z0pvwOQYBAqVMFjV6efQGN0JzJ1Unu7pPRiZl7RKGEI+cyzzrcDyrLLrQ2W7\n"
1880         "0ZySkNEOv6Frx9JgC5NExuYY4lk2fQQa38JXiZkfyzif2em0px7mXbyf5LjccsKq\n"
1881         "v1e+XLtMsL0ZefRcqsP++NzQAI8fKX7WBT+qK0HJDLiHrKOTWYzx6CwJ66LD/vvf\n"
1882         "j55xtsKDLVDbsotvf8/m6VLMab+vqKk11TP4tq6yo0mwyTADvgl1zowQEO9I1W6o\n"
1883         "zQIDAQAB\n"
1884         "-----END PUBLIC KEY-----";
1885
1886     CKM::RawBuffer buffer(keyPem.begin(), keyPem.end());
1887     auto key = CKM::Key::create(buffer, CKM::Password());
1888     CKM::KeyShPtr key2;
1889     CKM::Alias alias = "mykey_defpasswd";
1890
1891     RUNNER_ASSERT_MSG(
1892         CKM_API_ERROR_DB_LOCKED == (temp = manager->saveKey(alias, key, CKM::Policy())),
1893         "Error=" << CKM::ErrorToString(temp));
1894     RUNNER_ASSERT_MSG(
1895         CKM_API_ERROR_DB_LOCKED == (temp = manager->getKey(alias, CKM::Password(), key2)),
1896         "Error=" << CKM::ErrorToString(temp));
1897     RUNNER_ASSERT_MSG(
1898         CKM_API_ERROR_DB_LOCKED == (temp = manager->removeKey(alias)),
1899         "Error=" << CKM::ErrorToString(temp));
1900 }
1901
1902 RUNNER_CHILD_TEST(T1619_deinit)
1903 {
1904     SecurityServer::AccessProvider ap("my-label");
1905     ap.addObjectRule("key-manager::api-control", "rw");
1906     ap.applyAndSwithToUser(USER_APP, GROUP_APP);
1907 }
1908
1909 RUNNER_TEST_GROUP_INIT(T170_CKM_STORAGE_PERNAMENT_TESTS);
1910
1911 RUNNER_TEST(T1701_init_unlock_key)
1912 {
1913     int tmp;
1914     auto control = CKM::Control::create();
1915     RUNNER_ASSERT_MSG(
1916         CKM_API_SUCCESS == (tmp = control->unlockUserKey(USER_TEST+1, "t170-special-password")),
1917         "Error=" << CKM::ErrorToString(tmp));
1918 }
1919
1920 RUNNER_CHILD_TEST(T1702_init_insert_data)
1921 {
1922     int temp;
1923     SecurityServer::AccessProvider ap("t170-special-label");
1924     ap.addObjectRule("key-manager::api-storage", "rw");
1925     ap.applyAndSwithToUser(USER_TEST+1, GROUP_APP);
1926
1927     std::string ee = "-----BEGIN CERTIFICATE-----\n"
1928       "MIIF0TCCBLmgAwIBAgIQaPGTP4aS7Ut/WDNaBzdQrDANBgkqhkiG9w0BAQUFADCB\n"
1929       "ujELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\n"
1930       "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug\n"
1931       "YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNjE0MDIGA1UEAxMr\n"
1932       "VmVyaVNpZ24gQ2xhc3MgMyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNTTCBDQTAeFw0x\n"
1933       "NDAyMjAwMDAwMDBaFw0xNTAyMjAyMzU5NTlaMIHmMRMwEQYLKwYBBAGCNzwCAQMT\n"
1934       "AlBMMR0wGwYDVQQPExRQcml2YXRlIE9yZ2FuaXphdGlvbjETMBEGA1UEBRMKMDAw\n"
1935       "MDAyNTIzNzELMAkGA1UEBhMCUEwxDzANBgNVBBEUBjAwLTk1MDEUMBIGA1UECBML\n"
1936       "bWF6b3dpZWNraWUxETAPBgNVBAcUCFdhcnN6YXdhMRYwFAYDVQQJFA1TZW5hdG9y\n"
1937       "c2thIDE4MRMwEQYDVQQKFAptQmFuayBTLkEuMQwwCgYDVQQLFANESU4xGTAXBgNV\n"
1938       "BAMUEHd3dy5tYmFuay5jb20ucGwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\n"
1939       "AoIBAQDph6x8V6xUW/+651+qHF+UmorH9uaz2ZrX2bIWiMKIJFmpDDHlxcapKkqE\n"
1940       "BV04is83aiCpqKtc2ZHy2g4Hpj1eSF5BP2+OAlo0YUQZPIeRRdiMjmeAxw/ncBDx\n"
1941       "9rQBuCJ4XTD6cqQox5SI0TASOZ+wyAEjbDRXzL73XqRAFZ1LOpb2ONkolS+RutMB\n"
1942       "vshvCsWPeNe7eGLuOh6DyC6r1vX9xhw3xnjM2mTSvmtimgzSLacNGKqRrsucUgcb\n"
1943       "0+O5C2jZAtAMLyZksL92cxmWbtVzUYzem4chjHu5cRxUlPNzUJWrrczueB7Ip4A8\n"
1944       "aQuFMfNXYc0x+WLWjy//urypMKjhAgMBAAGjggGjMIIBnzAbBgNVHREEFDASghB3\n"
1945       "d3cubWJhbmsuY29tLnBsMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgWgMB0GA1Ud\n"
1946       "JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBEBgNVHSAEPTA7MDkGC2CGSAGG+EUB\n"
1947       "BxcGMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9jcHMw\n"
1948       "HQYDVR0OBBYEFN37iGaS7mZnENxZ9FGqNLR+QgoMMB8GA1UdIwQYMBaAFPyKULqe\n"
1949       "uSVae1WFT5UAY4/pWGtDMEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6Ly9FVlNlY3Vy\n"
1950       "ZS1jcmwudmVyaXNpZ24uY29tL0VWU2VjdXJlMjAwNi5jcmwwfAYIKwYBBQUHAQEE\n"
1951       "cDBuMC0GCCsGAQUFBzABhiFodHRwOi8vRVZTZWN1cmUtb2NzcC52ZXJpc2lnbi5j\n"
1952       "b20wPQYIKwYBBQUHMAKGMWh0dHA6Ly9FVlNlY3VyZS1haWEudmVyaXNpZ24uY29t\n"
1953       "L0VWU2VjdXJlMjAwNi5jZXIwDQYJKoZIhvcNAQEFBQADggEBAD0wO+rooUrIM4qp\n"
1954       "PHhp+hkXK6WMQ2qzGOmbMcZjw0govg5vkzkefPDryIXXbrF8mRagiJNMSfNaWWeh\n"
1955       "Cj41OV24EdUl0OLbFxNzcvub599zRs/apfaRLTfsmlmOgi0/YP305i+3tJ2ll946\n"
1956       "P+qV1wXnXqTqEdIl4Ys3+1HmDCdTB1hoDwAAzqRVUXZ5+iiwPAU7R/LTHfMjV1ke\n"
1957       "8jtNFfrorlZMCfVH/7eEnHJvVjOJt+YFe4aFMzE+DfuYIK7MH+olC2v79kBwbnEQ\n"
1958       "fvHMA9gFwOYLUBBdSfcocp8EKZ+mRlNPGR/3LBrPeaQQ0GZEkxzRK+v/aNTuiYfr\n"
1959       "oFXtrg0=\n"
1960       "-----END CERTIFICATE-----\n";
1961
1962     auto manager = CKM::Manager::create();
1963     auto certee = CKM::Certificate::create(CKM::RawBuffer(ee.begin(), ee.end()), CKM::DataFormat::FORM_PEM);
1964
1965     int status1 = manager->saveCertificate(CKM::Alias("CertEEE"), certee, CKM::Policy());
1966
1967     RUNNER_ASSERT_MSG(
1968         CKM_API_SUCCESS == status1,
1969         "Could not put certificate in datbase. Error=" << CKM::ErrorToString(status1));
1970
1971     CKM::AliasVector av;
1972
1973     RUNNER_ASSERT_MSG(
1974         CKM_API_SUCCESS == (temp = manager->getCertificateAliasVector(av)),
1975         "Error=" << CKM::ErrorToString(temp));
1976     RUNNER_ASSERT_MSG(
1977         1 == (temp = av.size()),
1978         "Vector size: " << temp << ". Expected: 1");
1979 }
1980
1981 RUNNER_TEST(T1703_removeApplicationData)
1982 {
1983     int tmp;
1984     auto control = CKM::Control::create();
1985     RUNNER_ASSERT_MSG(
1986         CKM_API_SUCCESS == (tmp = control->removeApplicationData("t170-special-label")),
1987         "Error=" << CKM::ErrorToString(tmp));
1988 }
1989
1990 RUNNER_CHILD_TEST(T1704_data_test)
1991 {
1992     int temp;
1993     SecurityServer::AccessProvider ap("t170-special-label");
1994     ap.addObjectRule("key-manager::api-storage", "rw");
1995     ap.applyAndSwithToUser(USER_TEST+1, GROUP_APP);
1996
1997     CKM::AliasVector av;
1998     auto manager = CKM::Manager::create();
1999
2000     RUNNER_ASSERT_MSG(
2001         CKM_API_SUCCESS == (temp = manager->getCertificateAliasVector(av)),
2002         "Error=" << CKM::ErrorToString(temp));
2003     RUNNER_ASSERT_MSG(
2004         0 == (temp = av.size()),
2005         "Vector size: " << temp << ". Expected: 0");
2006 }
2007
2008 RUNNER_TEST(T1705_deinit)
2009 {
2010     int tmp;
2011
2012     auto control = CKM::Control::create();
2013     RUNNER_ASSERT_MSG(
2014         CKM_API_SUCCESS == (tmp = control->lockUserKey(USER_TEST+1)),
2015         "Error=" << CKM::ErrorToString(tmp));
2016     RUNNER_ASSERT_MSG(
2017         CKM_API_SUCCESS == (tmp = control->removeUserData(USER_TEST+1)),
2018         "Error=" << CKM::ErrorToString(tmp));
2019 }
2020
2021 RUNNER_TEST_GROUP_INIT(T180_PKCS12);
2022
2023 RUNNER_TEST(T1801) {
2024     std::ifstream is("/usr/share/ckm-test/test1801.pkcs12");
2025     std::istreambuf_iterator<char> begin(is), end;
2026     std::vector<char> buff(begin, end);
2027
2028     CKM::RawBuffer buffer(buff.size());
2029     memcpy(buffer.data(), buff.data(), buff.size());
2030
2031     auto pkcs = CKM::PKCS12::create(buffer, "secret");
2032     RUNNER_ASSERT_MSG(
2033         NULL != pkcs.get(),
2034         "Error in PKCS12::create()");
2035
2036     auto cert = pkcs->getCertificate();
2037     RUNNER_ASSERT_MSG(
2038         NULL != cert.get(),
2039         "Error in PKCS12::getCertificate()");
2040
2041     auto key = pkcs->getKey();
2042     RUNNER_ASSERT_MSG(
2043         NULL != key.get(),
2044         "Error in PKCS12::getKey()");
2045
2046     auto caVector = pkcs->getCaCertificateShPtrVector();
2047     RUNNER_ASSERT_MSG(
2048         0 == caVector.size(),
2049         "Wrong size of vector");
2050 }
2051
2052 RUNNER_TEST(T1802_negative_wrong_password) {
2053     std::ifstream is("/usr/share/ckm-test/test1801.pkcs12");
2054     std::istreambuf_iterator<char> begin(is), end;
2055     std::vector<char> buff(begin, end);
2056
2057     CKM::RawBuffer buffer(buff.size());
2058     memcpy(buffer.data(), buff.data(), buff.size());
2059
2060     auto pkcs = CKM::PKCS12::create(buffer, "error");
2061     RUNNER_ASSERT_MSG(
2062         NULL == pkcs.get(),
2063         "Expected error in PKCS12::create()");
2064 }
2065
2066 RUNNER_TEST(T1803_negative_broken_buffer) {
2067     std::ifstream is("/usr/share/ckm-test/test1801.pkcs12");
2068     std::istreambuf_iterator<char> begin(is), end;
2069     std::vector<char> buff(begin, end);
2070
2071     CKM::RawBuffer buffer(buff.size());
2072     memcpy(buffer.data(), buff.data(), buff.size());
2073
2074     RUNNER_ASSERT_MSG(buffer.size() > 5, "PKCS file is too small.");
2075     buffer[4]=0;
2076
2077     auto pkcs = CKM::PKCS12::create(buffer, "secret");
2078     RUNNER_ASSERT_MSG(
2079         NULL == pkcs.get(),
2080         "Expected error in PKCS12::create()");
2081 }
2082
2083 RUNNER_TEST_GROUP_INIT(T190_CKM_EMPTY_STORAGE_TESTS);
2084
2085 RUNNER_TEST(T1901_init_unlock_key)
2086 {
2087     int tmp;
2088     auto control = CKM::Control::create();
2089     RUNNER_ASSERT_MSG(
2090         CKM_API_SUCCESS == (tmp = control->lockUserKey(0)),
2091         "Error=" << CKM::ErrorToString(tmp));
2092     RUNNER_ASSERT_MSG(
2093         CKM_API_SUCCESS == (tmp = control->removeUserData(0)),
2094         "Error=" << CKM::ErrorToString(tmp));
2095     RUNNER_ASSERT_MSG(
2096         CKM_API_SUCCESS == (tmp = control->unlockUserKey(0, "t190-special-password")),
2097         "Error=" << CKM::ErrorToString(tmp));
2098 }
2099
2100 RUNNER_TEST(T1902_get_data)
2101 {
2102     auto manager = CKM::Manager::create();
2103     CKM::KeyShPtr ptr;
2104
2105     int status1 = manager->getKey(CKM::Alias("CertEEE"), CKM::Password(), ptr);
2106
2107     RUNNER_ASSERT_MSG(
2108         CKM_API_ERROR_DB_ALIAS_UNKNOWN == status1,
2109         "Could not put certificate in datbase. Error=" << CKM::ErrorToString(status1));
2110 }
2111
2112 RUNNER_TEST(T1903_deinit)
2113 {
2114     int tmp;
2115
2116     auto control = CKM::Control::create();
2117     RUNNER_ASSERT_MSG(
2118         CKM_API_SUCCESS == (tmp = control->lockUserKey(0)),
2119         "Error=" << CKM::ErrorToString(tmp));
2120     RUNNER_ASSERT_MSG(
2121         CKM_API_SUCCESS == (tmp = control->removeUserData(0)),
2122         "Error=" << CKM::ErrorToString(tmp));
2123 }
2124
2125 RUNNER_TEST(T1904_get_data_from_locked_database)
2126 {
2127     auto manager = CKM::Manager::create();
2128     CKM::KeyShPtr ptr;
2129
2130     int status1 = manager->getKey(CKM::Alias("CertEEE"), CKM::Password(), ptr);
2131
2132     RUNNER_ASSERT_MSG(
2133         CKM_API_ERROR_DB_LOCKED == status1,
2134         "Could not get key from locked database. Error=" << CKM::ErrorToString(status1));
2135 }
2136
2137 int main(int argc, char *argv[])
2138 {
2139     DPL::Log::LogSystemSingleton::Instance().SetTag("CKM_TESTS");
2140     return DPL::Test::TestRunnerSingleton::Instance().ExecTestRunner(argc, argv);
2141 }