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