2 * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd All Rights Reserved
4 * Contact: Bumjin Im <bj.im@samsung.com>
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License
20 * @author Krzysztof Jackiewicz (k.jackiewicz@samsung.com)
26 #include <condition_variable>
29 #include <ckmc/ckmc-type.h>
30 #include <ckm/ckm-manager-async.h>
31 #include <ckm/ckm-manager.h>
32 #include <ckm/ckm-control.h>
33 #include <ckm/ckm-raw-buffer.h>
37 #include <dpl/test/test_runner.h>
38 #include <dpl/test/test_runner_child.h>
39 #include <dpl/log/log.h>
41 #include <tests_common.h>
42 #include <ckm-common.h>
49 const char* TEST_LABEL = "test_label";
51 class MyObserver: public ManagerAsync::Observer
55 m_finished(false), m_error(0)
59 void ReceivedError(int error)
61 LogError("Received error: " << error);
67 void ReceivedSaveKey() { Succeeded(); }
68 void ReceivedSaveCertificate() { Succeeded(); }
69 void ReceivedSaveData() { Succeeded(); }
70 void ReceivedSavePKCS12() { Succeeded(); }
72 void ReceivedRemovedAlias() { Succeeded(); }
74 void ReceivedKey(Key &&) { Succeeded(); }
75 void ReceivedCertificate(Certificate &&) { Succeeded(); }
76 void ReceivedData(RawBuffer &&) { Succeeded(); }
77 void ReceivedPKCS12(PKCS12ShPtr && pkcs) { m_pkcs = pkcs; Succeeded(); }
79 void ReceivedKeyAliasVector(AliasVector && av) { m_aliases = move(av); Succeeded(); }
80 void ReceivedCertificateAliasVector(AliasVector && av) { m_aliases = move(av); Succeeded(); }
81 void ReceivedDataAliasVector(AliasVector && av) { m_aliases = move(av); Succeeded(); }
83 void ReceivedCreateKeyPairRSA() { Succeeded(); }
84 void ReceivedCreateKeyPairDSA() { Succeeded(); }
85 void ReceivedCreateKeyPairECDSA() { Succeeded(); }
87 void ReceivedGetCertificateChain(CertificateShPtrVector && chain)
88 { m_certChain = move(chain); Succeeded(); }
90 void ReceivedCreateSignature(RawBuffer && buffer) { m_signed = move(buffer); Succeeded(); }
91 void ReceivedVerifySignature() { Succeeded(); }
93 void ReceivedOCSPCheck(int status) { m_ocspStatus = status; Succeeded(); }
95 void ReceivedSetPermission() { Succeeded(); }
97 void WaitForResponse()
99 unique_lock < mutex > lock(m_mutex);
101 m_cv.wait(lock, [this] {return m_finished;});
106 AliasVector m_aliases;
107 CertificateShPtrVector m_certChain;
115 LogDebug("Succeeded");
121 condition_variable m_cv;
124 typedef shared_ptr<MyObserver> MyObserverPtr;
126 const char* TEST_PASS = "test-pass";
136 KeyPair(const std::string& prv_pem, const std::string& pub_pem) {
137 RawBuffer buffer_prv(prv_pem.begin(), prv_pem.end());
138 prv = Key::create(buffer_prv);
141 RawBuffer buffer_pub(pub_pem.begin(), pub_pem.end());
142 pub = Key::create(buffer_pub);
150 typedef map<Type, vector<KeyPair> > KeyMap;
153 KeyMap initializeKeys()
157 km[RSA].emplace_back(
158 "-----BEGIN RSA PRIVATE KEY-----\n"
159 "MIICXAIBAAKBgQDMP6sKttnQ58BAi27b8X+8KVQtJgpJhhCF0RtWaTVqAhVDG3y4\n"
160 "x6IuAvXDtPSjLe/2E01fYGVxNComPJOmUOfUD06BCWPYH2+7jOfQIOy/TMlt+W7x\n"
161 "fou9rqnPRoKRaodoLqH5WK0ahkntWCAjstoKZoG+3Op0tEjy0jpmzeyNiQIDAQAB\n"
162 "AoGBAJRDX1CuvNx1bkwsKvQDkTqwMYd4hp0qcVICIbsPMhPaoT6OdHHZkHOf+HDx\n"
163 "KWhOj1LsXgzu95Q+Tp5k+LURI8ayu2RTsz/gYECgPNUsZ7gXl4co1bK+g5kiC+qr\n"
164 "sgSfkbYpp0OXefnl5x4KaJlZeSpn0UdDqx0kwI1x2E098i1VAkEA5thNY9YZNQdN\n"
165 "p6aopxOF5OmAjbLkq6wu255rDM5YgeepXXro/lmPociobtv8vPzbWKfoYZJL0Zj4\n"
166 "Qzj7Qz7s0wJBAOKBbpeG9PuNP1nR1h8kvyuILW8F89JOcIOUeqwokq4eJVqXdFIj\n"
167 "ct8eSEFmyXNqXD7b9+Tcw6vRIZuddVhNcrMCQAlpaD5ZzE1NLu1W7ilhsmPS4Vrl\n"
168 "oE0fiAmMO/EZuKITP+R/zmAQZrrB45whe/x4krjan67auByjj/utpxDmz+ECQEg/\n"
169 "UK80dN/n5dUYgVvdtLyF6zgGhgcGzgyqR5ayOlcfdnq25Htuoy1X02RJDOirfFDw\n"
170 "iNmPMTqUskuYpd1MltECQBwcy1cpnJWIXwCTQwg3enjkOVw80Tbr3iU9ASjHJTH2\n"
171 "N6FGHC4BQCm1fL6Bo0/0oSra+Ika3/1Vw1WwijUSiO8=\n"
172 "-----END RSA PRIVATE KEY-----",
174 "-----BEGIN PUBLIC KEY-----\n"
175 "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMP6sKttnQ58BAi27b8X+8KVQt\n"
176 "JgpJhhCF0RtWaTVqAhVDG3y4x6IuAvXDtPSjLe/2E01fYGVxNComPJOmUOfUD06B\n"
177 "CWPYH2+7jOfQIOy/TMlt+W7xfou9rqnPRoKRaodoLqH5WK0ahkntWCAjstoKZoG+\n"
178 "3Op0tEjy0jpmzeyNiQIDAQAB\n"
179 "-----END PUBLIC KEY-----"
181 km[DSA].emplace_back(
182 "-----BEGIN DSA PRIVATE KEY-----\n"
183 "MIIBuwIBAAKBgQDIsQRYgnU4mm5VrMyykpNNzeHTQAO8E2hJAcOwNPBrdos8amak\n"
184 "rcJnyBaNh56ZslcuXNEKJuxiDsy4VM9KUR8fHTqTiF5s+4NArzdrdwNQpKWjAqJN\n"
185 "fgpCdaLZHw9o857flcQ4dyYNnAz1/SNGnv03Dm8EYRNRFNaFNw7zBPjyVwIVANyj\n"
186 "7ijLfrCbDZDi6ond5Np1Ns0hAoGBAIcS1ceWtw6DAGmYww27r/1lLtqjrq8j0w0a\n"
187 "F6Ly+pZ/y+WTw9KT18eRKPmVgruVSn3VVVJeN00XaoKvfPSHkTRIE5rro2ZEInhp\n"
188 "3g0Vak7EXJWe7KKBRXqSMNFkndjKv1nyNKeWSEq9Xql6SPn8J8TfmbyUpPSIglZR\n"
189 "vJ2DHwHJAoGAPZLRdIhIIJi4UWoyQrCqk1iF3pkBeukXzeZGqNWEjgzLAjMZEVYM\n"
190 "DLLKippahjxLZSWB7LOoS+XE4fonpBBute/tgF23ToR8fQuiBu+KvtAP/QuCOJ/L\n"
191 "S0aYYr1/eXmMByYPZ58Vf93KuUgoUAkWmc+mLBn6J2+fygnWcOOSo6sCFC/slPOv\n"
192 "yAKPlW7WQzgV5jLLNUW7\n"
193 "-----END DSA PRIVATE KEY-----",
195 "-----BEGIN DSA PRIVATE KEY-----\n"
196 "MIIBuwIBAAKBgQDIsQRYgnU4mm5VrMyykpNNzeHTQAO8E2hJAcOwNPBrdos8amak\n"
197 "rcJnyBaNh56ZslcuXNEKJuxiDsy4VM9KUR8fHTqTiF5s+4NArzdrdwNQpKWjAqJN\n"
198 "fgpCdaLZHw9o857flcQ4dyYNnAz1/SNGnv03Dm8EYRNRFNaFNw7zBPjyVwIVANyj\n"
199 "7ijLfrCbDZDi6ond5Np1Ns0hAoGBAIcS1ceWtw6DAGmYww27r/1lLtqjrq8j0w0a\n"
200 "F6Ly+pZ/y+WTw9KT18eRKPmVgruVSn3VVVJeN00XaoKvfPSHkTRIE5rro2ZEInhp\n"
201 "3g0Vak7EXJWe7KKBRXqSMNFkndjKv1nyNKeWSEq9Xql6SPn8J8TfmbyUpPSIglZR\n"
202 "vJ2DHwHJAoGAPZLRdIhIIJi4UWoyQrCqk1iF3pkBeukXzeZGqNWEjgzLAjMZEVYM\n"
203 "DLLKippahjxLZSWB7LOoS+XE4fonpBBute/tgF23ToR8fQuiBu+KvtAP/QuCOJ/L\n"
204 "S0aYYr1/eXmMByYPZ58Vf93KuUgoUAkWmc+mLBn6J2+fygnWcOOSo6sCFC/slPOv\n"
205 "yAKPlW7WQzgV5jLLNUW7\n"
206 "-----END DSA PRIVATE KEY-----"
208 km[ECDSA].emplace_back(
209 "-----BEGIN EC PRIVATE KEY-----\n"
210 "MF8CAQEEGF3rz8OuFpcESrlqCm0G96oovr0XbX+DRKAKBggqhkjOPQMBAaE0AzIA\n"
211 "BHiZYByQiRNQ91GWNnTfoBbp9G8DP9oJYc/cDZlk4lKUpmbvm//RWf1U7ag3tOVy\n"
213 "-----END EC PRIVATE KEY-----",
215 "-----BEGIN PUBLIC KEY-----\n"
216 "MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEeJlgHJCJE1D3UZY2dN+gFun0bwM/\n"
217 "2glhz9wNmWTiUpSmZu+b/9FZ/VTtqDe05XKx\n"
218 "-----END PUBLIC KEY-----"
223 KeyMap keys = initializeKeys();
225 CertificateShPtr createCert(const std::string& cert) {
226 RawBuffer buffer_cert(cert.begin(), cert.end());
227 CertificateShPtr cptr = Certificate::create(buffer_cert, DataFormat::FORM_PEM);
232 typedef vector<CertificateShPtr> CertVector;
234 CertVector initializeCerts()
237 cv.emplace_back(createCert(
238 "-----BEGIN CERTIFICATE-----\n"
239 "MIIF0TCCBLmgAwIBAgIQaPGTP4aS7Ut/WDNaBzdQrDANBgkqhkiG9w0BAQUFADCB\n"
240 "ujELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\n"
241 "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug\n"
242 "YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNjE0MDIGA1UEAxMr\n"
243 "VmVyaVNpZ24gQ2xhc3MgMyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNTTCBDQTAeFw0x\n"
244 "NDAyMjAwMDAwMDBaFw0xNTAyMjAyMzU5NTlaMIHmMRMwEQYLKwYBBAGCNzwCAQMT\n"
245 "AlBMMR0wGwYDVQQPExRQcml2YXRlIE9yZ2FuaXphdGlvbjETMBEGA1UEBRMKMDAw\n"
246 "MDAyNTIzNzELMAkGA1UEBhMCUEwxDzANBgNVBBEUBjAwLTk1MDEUMBIGA1UECBML\n"
247 "bWF6b3dpZWNraWUxETAPBgNVBAcUCFdhcnN6YXdhMRYwFAYDVQQJFA1TZW5hdG9y\n"
248 "c2thIDE4MRMwEQYDVQQKFAptQmFuayBTLkEuMQwwCgYDVQQLFANESU4xGTAXBgNV\n"
249 "BAMUEHd3dy5tYmFuay5jb20ucGwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\n"
250 "AoIBAQDph6x8V6xUW/+651+qHF+UmorH9uaz2ZrX2bIWiMKIJFmpDDHlxcapKkqE\n"
251 "BV04is83aiCpqKtc2ZHy2g4Hpj1eSF5BP2+OAlo0YUQZPIeRRdiMjmeAxw/ncBDx\n"
252 "9rQBuCJ4XTD6cqQox5SI0TASOZ+wyAEjbDRXzL73XqRAFZ1LOpb2ONkolS+RutMB\n"
253 "vshvCsWPeNe7eGLuOh6DyC6r1vX9xhw3xnjM2mTSvmtimgzSLacNGKqRrsucUgcb\n"
254 "0+O5C2jZAtAMLyZksL92cxmWbtVzUYzem4chjHu5cRxUlPNzUJWrrczueB7Ip4A8\n"
255 "aQuFMfNXYc0x+WLWjy//urypMKjhAgMBAAGjggGjMIIBnzAbBgNVHREEFDASghB3\n"
256 "d3cubWJhbmsuY29tLnBsMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgWgMB0GA1Ud\n"
257 "JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBEBgNVHSAEPTA7MDkGC2CGSAGG+EUB\n"
258 "BxcGMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9jcHMw\n"
259 "HQYDVR0OBBYEFN37iGaS7mZnENxZ9FGqNLR+QgoMMB8GA1UdIwQYMBaAFPyKULqe\n"
260 "uSVae1WFT5UAY4/pWGtDMEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6Ly9FVlNlY3Vy\n"
261 "ZS1jcmwudmVyaXNpZ24uY29tL0VWU2VjdXJlMjAwNi5jcmwwfAYIKwYBBQUHAQEE\n"
262 "cDBuMC0GCCsGAQUFBzABhiFodHRwOi8vRVZTZWN1cmUtb2NzcC52ZXJpc2lnbi5j\n"
263 "b20wPQYIKwYBBQUHMAKGMWh0dHA6Ly9FVlNlY3VyZS1haWEudmVyaXNpZ24uY29t\n"
264 "L0VWU2VjdXJlMjAwNi5jZXIwDQYJKoZIhvcNAQEFBQADggEBAD0wO+rooUrIM4qp\n"
265 "PHhp+hkXK6WMQ2qzGOmbMcZjw0govg5vkzkefPDryIXXbrF8mRagiJNMSfNaWWeh\n"
266 "Cj41OV24EdUl0OLbFxNzcvub599zRs/apfaRLTfsmlmOgi0/YP305i+3tJ2ll946\n"
267 "P+qV1wXnXqTqEdIl4Ys3+1HmDCdTB1hoDwAAzqRVUXZ5+iiwPAU7R/LTHfMjV1ke\n"
268 "8jtNFfrorlZMCfVH/7eEnHJvVjOJt+YFe4aFMzE+DfuYIK7MH+olC2v79kBwbnEQ\n"
269 "fvHMA9gFwOYLUBBdSfcocp8EKZ+mRlNPGR/3LBrPeaQQ0GZEkxzRK+v/aNTuiYfr\n"
271 "-----END CERTIFICATE-----\n"
274 cv.emplace_back(createCert(
275 "-----BEGIN CERTIFICATE-----\n"
276 "MIIF5DCCBMygAwIBAgIQW3dZxheE4V7HJ8AylSkoazANBgkqhkiG9w0BAQUFADCB\n"
277 "yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\n"
278 "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp\n"
279 "U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW\n"
280 "ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0\n"
281 "aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMTYxMTA3MjM1OTU5WjCBujEL\n"
282 "MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW\n"
283 "ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQg\n"
284 "aHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNjE0MDIGA1UEAxMrVmVy\n"
285 "aVNpZ24gQ2xhc3MgMyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNTTCBDQTCCASIwDQYJ\n"
286 "KoZIhvcNAQEBBQADggEPADCCAQoCggEBAJjboFXrnP0XeeOabhQdsVuYI4cWbod2\n"
287 "nLU4O7WgerQHYwkZ5iqISKnnnbYwWgiXDOyq5BZpcmIjmvt6VCiYxQwtt9citsj5\n"
288 "OBfH3doxRpqUFI6e7nigtyLUSVSXTeV0W5K87Gws3+fBthsaVWtmCAN/Ra+aM/EQ\n"
289 "wGyZSpIkMQht3QI+YXZ4eLbtfjeubPOJ4bfh3BXMt1afgKCxBX9ONxX/ty8ejwY4\n"
290 "P1C3aSijtWZfNhpSSENmUt+ikk/TGGC+4+peGXEFv54cbGhyJW+ze3PJbb0S/5tB\n"
291 "Ml706H7FC6NMZNFOvCYIZfsZl1h44TO/7Wg+sSdFb8Di7Jdp91zT91ECAwEAAaOC\n"
292 "AdIwggHOMB0GA1UdDgQWBBT8ilC6nrklWntVhU+VAGOP6VhrQzASBgNVHRMBAf8E\n"
293 "CDAGAQH/AgEAMD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRw\n"
294 "czovL3d3dy52ZXJpc2lnbi5jb20vY3BzMD0GA1UdHwQ2MDQwMqAwoC6GLGh0dHA6\n"
295 "Ly9FVlNlY3VyZS1jcmwudmVyaXNpZ24uY29tL3BjYTMtZzUuY3JsMA4GA1UdDwEB\n"
296 "/wQEAwIBBjARBglghkgBhvhCAQEEBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZ\n"
297 "MFcwVRYJaW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7\n"
298 "GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwKQYDVR0R\n"
299 "BCIwIKQeMBwxGjAYBgNVBAMTEUNsYXNzM0NBMjA0OC0xLTQ3MD0GCCsGAQUFBwEB\n"
300 "BDEwLzAtBggrBgEFBQcwAYYhaHR0cDovL0VWU2VjdXJlLW9jc3AudmVyaXNpZ24u\n"
301 "Y29tMB8GA1UdIwQYMBaAFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqGSIb3DQEB\n"
302 "BQUAA4IBAQCWovp/5j3t1CvOtxU/wHIDX4u6FpAl98KD2Md1NGNoElMMU4l7yVYJ\n"
303 "p8M2RE4O0GJis4b66KGbNGeNUyIXPv2s7mcuQ+JdfzOE8qJwwG6Cl8A0/SXGI3/t\n"
304 "5rDFV0OEst4t8dD2SB8UcVeyrDHhlyQjyRNddOVG7wl8nuGZMQoIeRuPcZ8XZsg4\n"
305 "z+6Ml7YGuXNG5NOUweVgtSV1LdlpMezNlsOjdv3odESsErlNv1HoudRETifLriDR\n"
306 "fip8tmNHnna6l9AW5wtsbfdDbzMLKTB3+p359U64drPNGLT5IO892+bKrZvQTtKH\n"
307 "qQ2mRHNQ3XBb7a1+Srwi1agm5MKFIA3Z\n"
308 "-----END CERTIFICATE-----\n"
313 CertVector certs = initializeCerts();
315 const RawBuffer raw_buffer(const char* buffer)
317 return RawBuffer(buffer, buffer + strlen(buffer));
320 const RawBuffer test_buffer = raw_buffer("test_string");
322 template <typename F, typename... Args>
323 void test_negative(F&& func, int expected, Args... args)
325 MyObserverPtr obs = make_shared<MyObserver>();
328 (mgr.*func)(static_pointer_cast < ManagerAsync::Observer > (obs), args...);
329 obs->WaitForResponse();
331 RUNNER_ASSERT_MSG(obs->m_finished, "Request is not finished!");
333 obs->m_error == expected,
334 "Expected " << expected << "/" << ErrorToString(expected) <<
335 " got: " << obs->m_error << "/" << ErrorToString(obs->m_error));
338 template <typename F, typename... Args>
339 void test_invalid_param(F&& func, Args... args)
341 test_negative(move(func), CKM_API_ERROR_INPUT_PARAM, args...);
344 template <typename F, typename... Args>
345 void test_no_observer(F&& func, Args... args)
347 ManagerAsync::ObserverPtr obs;
351 (mgr.*func)(obs, args...);
352 RUNNER_ASSERT_MSG(false, "function() should have thrown an exception");
353 } catch (const invalid_argument& e) {
356 RUNNER_ASSERT_MSG(false, "Unexpected exception");
360 template <typename F, typename... Args>
361 MyObserverPtr test_positive(F&& func, Args... args)
363 MyObserverPtr obs = make_shared<MyObserver>();
366 (mgr.*func)(static_pointer_cast < ManagerAsync::Observer > (obs), args...);
367 obs->WaitForResponse();
369 RUNNER_ASSERT_MSG(obs->m_finished, "Request is not finished!");
370 RUNNER_ASSERT_MSG(obs->m_error == 0,
371 "Request failed " << obs->m_error << "/" << ErrorToString(obs->m_error));
375 template <typename F, typename... Args>
376 void test_check_aliases(F&& func, const AliasVector& expected, Args... args)
378 auto obs = test_positive(move(func), args...);
379 RUNNER_ASSERT_MSG(obs->m_aliases == expected, "Retrieved aliases differ from expected");
382 template <typename F, typename... Args>
383 void test_check_cert_chain(F&& func, size_t expected, Args... args)
385 auto obs = test_positive(move(func), args...);
387 obs->m_certChain.size() == expected,
388 "Expected chain length: " << expected << " got: " << obs->m_certChain.size());
391 typedef void (ManagerAsync::*certChainFn1)(const ManagerAsync::ObserverPtr&,
392 const CertificateShPtr&,
393 const CertificateShPtrVector&);
395 typedef void (ManagerAsync::*certChainFn2)(const ManagerAsync::ObserverPtr&,
396 const CertificateShPtr&,
398 } // namespace anonymous
401 RUNNER_TEST_GROUP_INIT(CKM_ASYNC_API);
403 RUNNER_TEST(TA0000_init)
406 ControlShPtr control = Control::create();
407 RUNNER_ASSERT_MSG(CKM_API_SUCCESS == (temp = control->removeUserData(APP_UID)),
408 "Error=" << ErrorToString(temp));
412 RUNNER_CHILD_TEST(TA0010_save_key_invalid_param)
414 switch_to_storage_user(TEST_LABEL);
416 test_no_observer(&ManagerAsync::saveKey, "alias", keys[RSA][0].prv, Policy());
417 test_invalid_param(&ManagerAsync::saveKey, "", keys[RSA][0].prv, Policy());
418 test_invalid_param(&ManagerAsync::saveKey, "alias", KeyShPtr(), Policy());
421 RUNNER_CHILD_TEST(TA0020_save_key_already_exists)
423 switch_to_storage_user(TEST_LABEL);
426 test_positive(&ManagerAsync::saveKey, dbc.alias("alias"), keys[RSA][0].prv, Policy());
427 test_negative(&ManagerAsync::saveKey,
428 CKM_API_ERROR_DB_ALIAS_EXISTS,
434 RUNNER_CHILD_TEST(TA0050_save_key_positive)
436 switch_to_storage_user(TEST_LABEL);
439 test_positive(&ManagerAsync::saveKey, dbc.alias("alias"), keys[RSA][0].prv, Policy());
444 RUNNER_CHILD_TEST(TA0110_save_cert_invalid_param)
446 switch_to_storage_user(TEST_LABEL);
448 CertificateShPtr cert = Certificate::create(test_buffer, DataFormat::FORM_PEM);
449 test_no_observer(&ManagerAsync::saveCertificate, "", cert, Policy());
450 test_invalid_param(&ManagerAsync::saveCertificate, "", cert, Policy());
451 test_invalid_param(&ManagerAsync::saveCertificate, "alias", CertificateShPtr(), Policy());
454 RUNNER_CHILD_TEST(TA0120_save_cert_already_exists)
456 switch_to_storage_user(TEST_LABEL);
459 test_positive(&ManagerAsync::saveCertificate, dbc.alias("alias"), certs[0], Policy());
460 test_negative(&ManagerAsync::saveCertificate,
461 CKM_API_ERROR_DB_ALIAS_EXISTS,
467 RUNNER_CHILD_TEST(TA0150_save_cert_positive)
469 switch_to_storage_user(TEST_LABEL);
472 test_positive(&ManagerAsync::saveCertificate, dbc.alias("alias"), certs[0], Policy());
477 RUNNER_CHILD_TEST(TA0210_save_data_invalid_param)
479 switch_to_storage_user(TEST_LABEL);
481 test_no_observer(&ManagerAsync::saveData, "", test_buffer, Policy());
482 test_invalid_param(&ManagerAsync::saveData, "", test_buffer, Policy());
483 test_invalid_param(&ManagerAsync::saveData, "alias", RawBuffer(), Policy());
486 RUNNER_CHILD_TEST(TA0220_save_data_already_exists)
488 switch_to_storage_user(TEST_LABEL);
491 test_positive(&ManagerAsync::saveData, dbc.alias("alias"), test_buffer, Policy());
492 test_negative(&ManagerAsync::saveData,
493 CKM_API_ERROR_DB_ALIAS_EXISTS,
499 RUNNER_CHILD_TEST(TA0250_save_data_positive)
501 switch_to_storage_user(TEST_LABEL);
504 test_positive(&ManagerAsync::saveData, dbc.alias("alias"), test_buffer, Policy());
509 RUNNER_CHILD_TEST(TA0310_remove_alias_invalid_param)
511 switch_to_storage_user(TEST_LABEL);
513 test_no_observer(&ManagerAsync::removeAlias, "alias");
514 test_invalid_param(&ManagerAsync::removeAlias, "");
517 RUNNER_CHILD_TEST(TA0330_remove_alias_unknown_alias)
519 switch_to_storage_user(TEST_LABEL);
521 test_negative(&ManagerAsync::removeAlias, CKM_API_ERROR_DB_ALIAS_UNKNOWN, "non-existing-alias");
524 RUNNER_CHILD_TEST(TA0350_remove_key_positive)
526 switch_to_storage_user(TEST_LABEL);
529 test_positive(&ManagerAsync::saveKey, dbc.alias("alias"), keys[RSA][0].prv, Policy());
530 test_positive(&ManagerAsync::removeAlias, dbc.alias("alias"));
534 RUNNER_CHILD_TEST(TA0450_remove_cert_positive)
536 switch_to_storage_user(TEST_LABEL);
539 test_positive(&ManagerAsync::saveCertificate, dbc.alias("alias"), certs[0], Policy());
540 test_positive(&ManagerAsync::removeAlias, dbc.alias("alias"));
544 RUNNER_CHILD_TEST(TA0550_remove_data_positive)
546 switch_to_storage_user(TEST_LABEL);
549 test_positive(&ManagerAsync::saveData, dbc.alias("alias"), test_buffer, Policy());
550 test_positive(&ManagerAsync::removeAlias, dbc.alias("alias"));
555 RUNNER_CHILD_TEST(TA0610_get_key_invalid_param)
557 switch_to_storage_user(TEST_LABEL);
559 test_no_observer(&ManagerAsync::getKey, "alias", "");
560 test_invalid_param(&ManagerAsync::getKey, "", "");
563 RUNNER_CHILD_TEST(TA0630_get_key_unknown_alias)
565 switch_to_storage_user(TEST_LABEL);
567 test_negative(&ManagerAsync::getKey, CKM_API_ERROR_DB_ALIAS_UNKNOWN, "non-existing-alias", "");
570 RUNNER_CHILD_TEST(TA0640_get_key_wrong_password)
572 switch_to_storage_user(TEST_LABEL);
575 test_positive(&ManagerAsync::saveKey, dbc.alias("alias"), keys[RSA][0].prv, Policy("password"));
576 test_negative(&ManagerAsync::getKey,
577 CKM_API_ERROR_SERVER_ERROR,
582 RUNNER_CHILD_TEST(TA0650_get_key_positive)
584 switch_to_storage_user(TEST_LABEL);
587 test_positive(&ManagerAsync::saveKey, dbc.alias("alias"), keys[RSA][0].prv, Policy("password"));
588 test_positive(&ManagerAsync::getKey, dbc.alias("alias"), "password");
593 RUNNER_CHILD_TEST(TA0710_get_cert_invalid_param)
595 switch_to_storage_user(TEST_LABEL);
597 test_no_observer(&ManagerAsync::getCertificate, "alias", "");
598 test_invalid_param(&ManagerAsync::getCertificate, "", "");
601 RUNNER_CHILD_TEST(TA0730_get_cert_unknown_alias)
603 switch_to_storage_user(TEST_LABEL);
605 test_negative(&ManagerAsync::getCertificate,
606 CKM_API_ERROR_DB_ALIAS_UNKNOWN,
607 "non-existing-alias",
611 RUNNER_CHILD_TEST(TA0740_get_cert_wrong_password)
613 switch_to_storage_user(TEST_LABEL);
616 test_positive(&ManagerAsync::saveCertificate,
620 test_negative(&ManagerAsync::getCertificate,
621 CKM_API_ERROR_SERVER_ERROR,
626 RUNNER_CHILD_TEST(TA0750_get_cert_positive)
628 switch_to_storage_user(TEST_LABEL);
631 test_positive(&ManagerAsync::saveCertificate, dbc.alias("alias"), certs[0], Policy("password"));
632 test_positive(&ManagerAsync::getCertificate, dbc.alias("alias"), "password");
637 RUNNER_CHILD_TEST(TA0810_get_data_invalid_param)
639 switch_to_storage_user(TEST_LABEL);
641 test_no_observer(&ManagerAsync::getData, "alias", "");
642 test_invalid_param(&ManagerAsync::getData, "", "");
645 RUNNER_CHILD_TEST(TA0830_get_data_unknown_alias)
647 switch_to_storage_user(TEST_LABEL);
649 test_negative(&ManagerAsync::getData, CKM_API_ERROR_DB_ALIAS_UNKNOWN, "non-existing-alias", "");
652 RUNNER_CHILD_TEST(TA0840_get_data_wrong_password)
654 switch_to_storage_user(TEST_LABEL);
657 test_positive(&ManagerAsync::saveData, dbc.alias("alias"), test_buffer, Policy("password"));
658 test_negative(&ManagerAsync::getData,
659 CKM_API_ERROR_SERVER_ERROR,
664 RUNNER_CHILD_TEST(TA0850_get_data_positive)
666 switch_to_storage_user(TEST_LABEL);
669 test_positive(&ManagerAsync::saveData, dbc.alias("alias"), test_buffer, Policy("password"));
670 test_positive(&ManagerAsync::getData, dbc.alias("alias"), "password");
675 RUNNER_CHILD_TEST(TA0910_get_key_alias_vector_invalid_param)
677 switch_to_storage_user(TEST_LABEL);
679 test_no_observer(&ManagerAsync::getKeyAliasVector);
682 RUNNER_CHILD_TEST(TA0950_get_key_alias_vector_positive)
684 switch_to_storage_user(TEST_LABEL);
687 test_positive(&ManagerAsync::saveKey, dbc.alias("alias1"), keys[RSA][0].prv, Policy());
688 test_check_aliases(&ManagerAsync::getKeyAliasVector, { aliasWithLabel(TEST_LABEL, dbc.alias("alias1")) });
690 test_positive(&ManagerAsync::saveKey, dbc.alias("alias2"), keys[DSA][0].prv, Policy());
691 test_check_aliases(&ManagerAsync::getKeyAliasVector, { aliasWithLabel(TEST_LABEL, dbc.alias("alias1")),
692 aliasWithLabel(TEST_LABEL, dbc.alias("alias2")) });
694 test_positive(&ManagerAsync::removeAlias, dbc.alias("alias1"));
695 test_check_aliases(&ManagerAsync::getKeyAliasVector, { aliasWithLabel(TEST_LABEL, dbc.alias("alias2")) });
699 // getCertificateAliasVector
700 RUNNER_CHILD_TEST(TA1010_get_cert_alias_vector_invalid_param)
702 switch_to_storage_user(TEST_LABEL);
704 test_no_observer(&ManagerAsync::getCertificateAliasVector);
707 RUNNER_CHILD_TEST(TA1050_get_cert_alias_vector_positive)
709 switch_to_storage_user(TEST_LABEL);
712 test_positive(&ManagerAsync::saveCertificate, dbc.alias("alias1"), certs[0], Policy());
713 test_check_aliases(&ManagerAsync::getCertificateAliasVector, { aliasWithLabel(TEST_LABEL, dbc.alias("alias1")) });
715 test_positive(&ManagerAsync::saveCertificate, dbc.alias("alias2"), certs[1], Policy());
716 test_check_aliases(&ManagerAsync::getCertificateAliasVector, { aliasWithLabel(TEST_LABEL, dbc.alias("alias1")),
717 aliasWithLabel(TEST_LABEL, dbc.alias("alias2")) });
719 test_positive(&ManagerAsync::removeAlias, dbc.alias("alias1"));
720 test_check_aliases(&ManagerAsync::getCertificateAliasVector, { aliasWithLabel(TEST_LABEL, dbc.alias("alias2")) });
724 // getDataAliasVector
725 RUNNER_CHILD_TEST(TA1110_get_data_alias_vector_invalid_param)
727 switch_to_storage_user(TEST_LABEL);
729 test_no_observer(&ManagerAsync::getDataAliasVector);
732 RUNNER_CHILD_TEST(TA1150_get_data_alias_vector_positive)
734 switch_to_storage_user(TEST_LABEL);
737 test_positive(&ManagerAsync::saveData, dbc.alias("alias1"), test_buffer, Policy());
738 test_check_aliases(&ManagerAsync::getDataAliasVector, { aliasWithLabel(TEST_LABEL, dbc.alias("alias1")) });
740 test_positive(&ManagerAsync::saveData, dbc.alias("alias2"), test_buffer, Policy());
741 test_check_aliases(&ManagerAsync::getDataAliasVector, { aliasWithLabel(TEST_LABEL, dbc.alias("alias1")),
742 aliasWithLabel(TEST_LABEL, dbc.alias("alias2")) });
744 test_positive(&ManagerAsync::removeAlias, dbc.alias("alias1"));
745 test_check_aliases(&ManagerAsync::getDataAliasVector, { aliasWithLabel(TEST_LABEL, dbc.alias("alias2")) });
750 RUNNER_CHILD_TEST(TA1210_create_key_pair_rsa_invalid_param)
752 switch_to_storage_user(TEST_LABEL);
754 test_no_observer(&ManagerAsync::createKeyPairRSA,
762 RUNNER_CHILD_TEST(TA1220_create_key_pair_rsa_already_exists)
764 switch_to_storage_user(TEST_LABEL);
767 test_positive(&ManagerAsync::saveKey, dbc.alias("alias_prv"), keys[RSA][0].prv, Policy());
768 test_negative(&ManagerAsync::createKeyPairRSA,
769 CKM_API_ERROR_DB_ALIAS_EXISTS,
771 dbc.alias("alias_prv"),
772 dbc.alias("alias_pub"),
777 RUNNER_CHILD_TEST(TA1250_create_key_pair_rsa_positive)
779 switch_to_storage_user(TEST_LABEL);
782 test_positive(&ManagerAsync::createKeyPairRSA,
784 dbc.alias("alias_prv"),
785 dbc.alias("alias_pub"),
789 test_check_aliases(&ManagerAsync::getKeyAliasVector, { aliasWithLabel(TEST_LABEL, dbc.alias("alias_prv")),
790 aliasWithLabel(TEST_LABEL, dbc.alias("alias_pub")) });
794 RUNNER_CHILD_TEST(TA1270_create_key_pair_dsa_invalid_param)
796 switch_to_storage_user(TEST_LABEL);
798 test_no_observer(&ManagerAsync::createKeyPairDSA,
806 RUNNER_CHILD_TEST(TA1280_create_key_pair_dsa_already_exists)
808 switch_to_storage_user(TEST_LABEL);
811 test_positive(&ManagerAsync::saveKey, dbc.alias("alias_prv"), keys[DSA][0].prv, Policy());
812 test_negative(&ManagerAsync::createKeyPairDSA,
813 CKM_API_ERROR_DB_ALIAS_EXISTS,
815 dbc.alias("alias_prv"),
816 dbc.alias("alias_pub"),
821 RUNNER_CHILD_TEST(TA1290_create_key_pair_dsa_positive)
823 switch_to_storage_user(TEST_LABEL);
826 test_positive(&ManagerAsync::createKeyPairDSA,
828 dbc.alias("alias_prv"),
829 dbc.alias("alias_pub"),
833 test_check_aliases(&ManagerAsync::getKeyAliasVector, { aliasWithLabel(TEST_LABEL, dbc.alias("alias_prv")),
834 aliasWithLabel(TEST_LABEL, dbc.alias("alias_pub")) });
837 // createKeyPairECDSA
838 RUNNER_CHILD_TEST(TA1310_create_key_pair_ecdsa_invalid_param)
840 switch_to_storage_user(TEST_LABEL);
842 test_no_observer(&ManagerAsync::createKeyPairECDSA,
843 ElipticCurve::prime192v1,
850 RUNNER_CHILD_TEST(TA1320_create_key_pair_ecdsa_already_exists)
852 switch_to_storage_user(TEST_LABEL);
855 test_positive(&ManagerAsync::saveKey, dbc.alias("alias_prv"), keys[ECDSA][0].prv, Policy());
856 test_negative(&ManagerAsync::createKeyPairECDSA,
857 CKM_API_ERROR_DB_ALIAS_EXISTS,
858 ElipticCurve::prime192v1,
859 dbc.alias("alias_prv"),
860 dbc.alias("alias_pub"),
865 RUNNER_CHILD_TEST(TA1350_create_key_pair_ecdsa_positive)
867 switch_to_storage_user(TEST_LABEL);
870 test_positive(&ManagerAsync::createKeyPairECDSA,
871 ElipticCurve::prime192v1,
872 dbc.alias("alias_prv"),
873 dbc.alias("alias_pub"),
877 test_check_aliases(&ManagerAsync::getKeyAliasVector, { aliasWithLabel(TEST_LABEL, dbc.alias("alias_prv")),
878 aliasWithLabel(TEST_LABEL, dbc.alias("alias_pub")) });
882 // getCertificateChain
883 RUNNER_CHILD_TEST(TA1410_get_certificate_chain_invalid_param)
885 switch_to_storage_user(TEST_LABEL);
887 CertificateShPtr cert = certs[0];
888 CertificateShPtrVector certv = { certs[1] };
889 test_no_observer<certChainFn1>(&ManagerAsync::getCertificateChain, cert, certv);
890 test_invalid_param<certChainFn1>(&ManagerAsync::getCertificateChain,
894 Alias alias = "alias";
895 AliasVector aliasv = { alias };
896 test_no_observer<certChainFn2>(&ManagerAsync::getCertificateChain, cert, aliasv);
897 test_invalid_param<certChainFn2>(&ManagerAsync::getCertificateChain,
902 RUNNER_CHILD_TEST(TA1420_get_certificate_chain_negative)
904 switch_to_storage_user(TEST_LABEL);
907 CertificateShPtr cert = certs[0];
908 CertificateShPtrVector certv = { certs[0] };
909 test_negative<certChainFn1>(&ManagerAsync::getCertificateChain,
910 CKM_API_ERROR_VERIFICATION_FAILED,
912 CertificateShPtrVector());
913 test_negative<certChainFn1>(&ManagerAsync::getCertificateChain,
914 CKM_API_ERROR_VERIFICATION_FAILED,
917 AliasVector aliasv = { dbc.alias("alias") };
918 test_positive(&ManagerAsync::saveCertificate, aliasv[0], certs[0], Policy());
919 test_negative<certChainFn2>(&ManagerAsync::getCertificateChain,
920 CKM_API_ERROR_VERIFICATION_FAILED,
923 test_negative<certChainFn2>(&ManagerAsync::getCertificateChain,
924 CKM_API_ERROR_VERIFICATION_FAILED,
929 RUNNER_CHILD_TEST(TA1450_get_certificate_chain_positive)
931 switch_to_storage_user(TEST_LABEL);
934 CertificateShPtr cert = certs[0];
935 CertificateShPtrVector certv = { certs[1] };
936 test_check_cert_chain<certChainFn1>(&ManagerAsync::getCertificateChain, 3, cert, certv);
938 AliasVector aliasv = { dbc.alias("alias") };
939 test_positive(&ManagerAsync::saveCertificate, aliasv[0], certs[1], Policy());
940 test_check_cert_chain<certChainFn2>(&ManagerAsync::getCertificateChain, 3, cert, aliasv);
945 RUNNER_CHILD_TEST(TA1510_create_signature_invalid_param)
947 switch_to_storage_user(TEST_LABEL);
949 test_no_observer(&ManagerAsync::createSignature,
954 RSAPaddingAlgorithm::PKCS1);
955 test_invalid_param(&ManagerAsync::createSignature,
960 RSAPaddingAlgorithm::PKCS1);
961 test_invalid_param(&ManagerAsync::createSignature,
966 RSAPaddingAlgorithm::PKCS1);
969 RUNNER_CHILD_TEST(TA1520_create_signature_invalid_password)
971 switch_to_storage_user(TEST_LABEL);
974 test_positive(&ManagerAsync::saveKey, dbc.alias("alias"), keys[RSA][0].prv, Policy("password"));
975 test_negative(&ManagerAsync::createSignature,
976 CKM_API_ERROR_INPUT_PARAM,
981 RSAPaddingAlgorithm::PKCS1);
984 RUNNER_CHILD_TEST(TA1550_create_signature_positive)
986 switch_to_storage_user(TEST_LABEL);
989 test_positive(&ManagerAsync::saveKey, dbc.alias("alias"), keys[RSA][0].prv, Policy("password"));
990 test_positive(&ManagerAsync::createSignature,
995 RSAPaddingAlgorithm::PKCS1);
1000 RUNNER_CHILD_TEST(TA1610_verify_signature_invalid_param)
1002 switch_to_storage_user(TEST_LABEL);
1004 test_no_observer(&ManagerAsync::verifySignature,
1009 HashAlgorithm::SHA1,
1010 RSAPaddingAlgorithm::PKCS1);
1011 test_invalid_param(&ManagerAsync::verifySignature,
1016 HashAlgorithm::SHA1,
1017 RSAPaddingAlgorithm::PKCS1);
1020 RUNNER_CHILD_TEST(TA1620_verify_signature_invalid_password)
1022 switch_to_storage_user(TEST_LABEL);
1025 test_positive(&ManagerAsync::saveKey, dbc.alias("alias_prv"), keys[RSA][0].prv, Policy("pass1"));
1026 test_positive(&ManagerAsync::saveKey, dbc.alias("alias_pub"), keys[RSA][0].pub, Policy("pass2"));
1027 auto obs = test_positive(&ManagerAsync::createSignature,
1028 dbc.alias("alias_prv"),
1031 HashAlgorithm::SHA1,
1032 RSAPaddingAlgorithm::PKCS1);
1034 test_negative(&ManagerAsync::verifySignature,
1035 CKM_API_ERROR_SERVER_ERROR,
1036 dbc.alias("alias_pub"),
1040 HashAlgorithm::SHA1,
1041 RSAPaddingAlgorithm::PKCS1);
1044 RUNNER_CHILD_TEST(TA1630_verify_signature_invalid_message)
1046 switch_to_storage_user(TEST_LABEL);
1049 test_positive(&ManagerAsync::saveKey, dbc.alias("alias_prv"), keys[RSA][0].prv, Policy(""));
1050 test_positive(&ManagerAsync::saveKey, dbc.alias("alias_pub"), keys[RSA][0].pub, Policy(""));
1052 auto obs = test_positive(&ManagerAsync::createSignature,
1053 dbc.alias("alias_prv"),
1056 HashAlgorithm::SHA1,
1057 RSAPaddingAlgorithm::PKCS1);
1059 test_negative(&ManagerAsync::verifySignature,
1060 CKM_API_ERROR_VERIFICATION_FAILED,
1061 dbc.alias("alias_pub"),
1063 raw_buffer("invalid-unsigned-mesage"),
1065 HashAlgorithm::SHA1,
1066 RSAPaddingAlgorithm::PKCS1);
1069 RUNNER_CHILD_TEST(TA1640_verify_signature_invalid_signature)
1071 switch_to_storage_user(TEST_LABEL);
1074 test_positive(&ManagerAsync::saveKey, dbc.alias("alias_pub"), keys[RSA][0].pub, Policy(""));
1076 test_negative(&ManagerAsync::verifySignature,
1077 CKM_API_ERROR_VERIFICATION_FAILED,
1078 dbc.alias("alias_pub"),
1081 raw_buffer("invalid-signature"),
1082 HashAlgorithm::SHA1,
1083 RSAPaddingAlgorithm::PKCS1);
1086 RUNNER_CHILD_TEST(TA1650_verify_signature_wrong_key)
1088 switch_to_storage_user(TEST_LABEL);
1091 test_positive(&ManagerAsync::saveKey, dbc.alias("alias_prv"), keys[RSA][0].prv, Policy(""));
1092 auto obs = test_positive(&ManagerAsync::createSignature,
1093 dbc.alias("alias_prv"),
1096 HashAlgorithm::SHA1,
1097 RSAPaddingAlgorithm::PKCS1);
1099 test_negative(&ManagerAsync::verifySignature,
1100 CKM_API_ERROR_SERVER_ERROR,
1101 dbc.alias("alias_prv"),
1105 HashAlgorithm::SHA1,
1106 RSAPaddingAlgorithm::PKCS1);
1109 RUNNER_CHILD_TEST(TA1660_verify_signature_positive)
1111 switch_to_storage_user(TEST_LABEL);
1114 test_positive(&ManagerAsync::saveKey, dbc.alias("alias_prv"), keys[RSA][0].prv, Policy("pass1"));
1115 test_positive(&ManagerAsync::saveKey, dbc.alias("alias_pub"), keys[RSA][0].pub, Policy("pass2"));
1116 auto obs = test_positive(&ManagerAsync::createSignature,
1117 dbc.alias("alias_prv"),
1120 HashAlgorithm::SHA1,
1121 RSAPaddingAlgorithm::PKCS1);
1123 test_positive(&ManagerAsync::verifySignature,
1124 dbc.alias("alias_pub"),
1128 HashAlgorithm::SHA1,
1129 RSAPaddingAlgorithm::PKCS1);
1134 RUNNER_CHILD_TEST(TA1710_ocsp_check_invalid_param)
1136 test_no_observer(&ManagerAsync::ocspCheck, CertificateShPtrVector());
1137 test_invalid_param(&ManagerAsync::ocspCheck, CertificateShPtrVector());
1140 RUNNER_CHILD_TEST(TA1720_ocsp_check_negative)
1142 switch_to_storage_ocsp_user(TEST_LABEL);
1145 CertificateShPtrVector certv = { certs[0], certs[0] };
1147 auto obs = test_positive(&ManagerAsync::ocspCheck, certv);
1148 RUNNER_ASSERT_MSG(obs->m_ocspStatus != CKM_API_OCSP_STATUS_GOOD,
1149 "Verification should fail. Got: " << obs->m_ocspStatus);
1152 RUNNER_CHILD_TEST(TA1750_ocsp_check_positive)
1154 RUNNER_IGNORED_MSG("Fixed in next version of ckm!");
1155 switch_to_storage_ocsp_user(TEST_LABEL);
1158 CertificateShPtr cert = certs[0];
1159 CertificateShPtrVector certv = { certs[1] };
1160 auto obs = test_positive<certChainFn1>(&ManagerAsync::getCertificateChain, cert, certv);
1162 auto obs2 = test_positive(&ManagerAsync::ocspCheck, obs->m_certChain);
1163 RUNNER_ASSERT_MSG(obs2->m_ocspStatus == CKM_API_OCSP_STATUS_GOOD,
1164 "Verification failed. Error: " << obs->m_ocspStatus);
1168 RUNNER_CHILD_TEST(TA1810_allow_access_invalid_param)
1170 switch_to_storage_user(TEST_LABEL);
1172 test_no_observer(&ManagerAsync::setPermission, "alias", "accessor", CKM::Permission::READ | CKM::Permission::REMOVE);
1173 test_invalid_param(&ManagerAsync::setPermission, "", "accessor", CKM::Permission::READ | CKM::Permission::REMOVE);
1174 test_invalid_param(&ManagerAsync::setPermission, "alias", "", CKM::Permission::READ | CKM::Permission::REMOVE);
1177 RUNNER_TEST(TA1820_allow_access)
1180 CharPtr top_label = get_label();
1181 test_positive(&ManagerAsync::saveData, dbc.alias("alias"), test_buffer, Policy());
1182 test_positive(&ManagerAsync::saveData, dbc.alias("alias2"), test_buffer, Policy());
1183 test_positive(&ManagerAsync::saveData, dbc.alias("alias3"), test_buffer, Policy());
1184 test_positive(&ManagerAsync::setPermission,
1185 dbc.alias("alias2"),
1187 CKM::Permission::READ);
1188 test_positive(&ManagerAsync::setPermission,
1189 dbc.alias("alias3"),
1191 CKM::Permission::READ | CKM::Permission::REMOVE);
1194 ScopedLabel label(TEST_LABEL);
1196 test_negative(&ManagerAsync::getData, CKM_API_ERROR_DB_ALIAS_UNKNOWN, dbc.alias("alias"), "");
1197 test_negative(&ManagerAsync::removeAlias, CKM_API_ERROR_DB_ALIAS_UNKNOWN, dbc.alias("alias"));
1199 // test from allowed label, but without properly addressing alias (coming from default label)
1200 test_negative(&ManagerAsync::getData, CKM_API_ERROR_DB_ALIAS_UNKNOWN, dbc.alias("alias2"), "");
1202 // now test with appropriate addressing
1203 std::string full_alias2_address = aliasWithLabel(top_label.get(), dbc.alias("alias2"));
1204 test_positive(&ManagerAsync::getData, full_alias2_address, "");
1205 test_negative(&ManagerAsync::removeAlias, CKM_API_ERROR_ACCESS_DENIED, full_alias2_address);
1207 std::string full_alias3_address = aliasWithLabel(top_label.get(), dbc.alias("alias3"));
1208 test_positive(&ManagerAsync::getData, full_alias3_address, "");
1209 test_positive(&ManagerAsync::removeAlias, full_alias3_address);
1214 RUNNER_CHILD_TEST(TA1910_deny_access_invalid_param)
1216 switch_to_storage_user(TEST_LABEL);
1218 test_no_observer(&ManagerAsync::setPermission, "alias", "accessor", CKM::Permission::NONE);
1219 test_invalid_param(&ManagerAsync::setPermission, "", "accessor", CKM::Permission::NONE);
1220 test_invalid_param(&ManagerAsync::setPermission, "alias", "", CKM::Permission::NONE);
1223 RUNNER_TEST(TA1920_deny_access)
1226 CharPtr top_label = get_label();
1227 test_positive(&ManagerAsync::saveData, dbc.alias("alias"), test_buffer, Policy());
1228 test_positive(&ManagerAsync::setPermission,
1231 CKM::Permission::READ | CKM::Permission::REMOVE);
1232 test_positive(&ManagerAsync::setPermission, dbc.alias("alias"), TEST_LABEL, CKM::Permission::NONE);
1235 ScopedLabel label(TEST_LABEL);
1237 std::string full_alias_address = aliasWithLabel(top_label.get(), dbc.alias("alias"));
1238 test_negative(&ManagerAsync::getData, CKM_API_ERROR_DB_ALIAS_UNKNOWN, full_alias_address, "");
1239 test_negative(&ManagerAsync::removeAlias, CKM_API_ERROR_DB_ALIAS_UNKNOWN, full_alias_address);
1245 CKM::Alias alias_PKCS_exportable = "async-test-PKCS-export";
1246 CKM::Alias alias_PKCS_not_exportable = "async-test-PKCS-no-export";
1249 RUNNER_TEST(TA2000_PKCS_add_bundle_with_chain_certs)
1252 auto manager = CKM::Manager::create();
1253 std::ifstream is("/usr/share/ckm-test/pkcs.p12");
1254 std::istreambuf_iterator<char> begin(is), end;
1255 std::vector<char> buff(begin, end);
1257 CKM::RawBuffer buffer(buff.size());
1258 memcpy(buffer.data(), buff.data(), buff.size());
1260 auto pkcs = CKM::PKCS12::create(buffer, CKM::Password());
1261 RUNNER_ASSERT_MSG_BT(
1263 "Error in PKCS12::create()");
1265 auto cert = pkcs->getCertificate();
1266 RUNNER_ASSERT_MSG_BT(
1268 "Error in PKCS12::getCertificate()");
1270 auto key = pkcs->getKey();
1271 RUNNER_ASSERT_MSG_BT(
1273 "Error in PKCS12::getKey()");
1275 auto caVector = pkcs->getCaCertificateShPtrVector();
1276 RUNNER_ASSERT_MSG_BT(
1277 2 == caVector.size(),
1278 "Wrong size of vector");
1282 CKM::Policy exportable;
1283 CKM::Policy notExportable(CKM::Password(), false);
1285 test_positive(&ManagerAsync::savePKCS12,
1286 alias_PKCS_exportable,
1290 test_negative(&ManagerAsync::savePKCS12,
1291 CKM_API_ERROR_DB_ALIAS_EXISTS,
1292 alias_PKCS_exportable,
1297 test_positive(&ManagerAsync::savePKCS12,
1298 alias_PKCS_not_exportable,
1302 test_negative(&ManagerAsync::savePKCS12,
1303 CKM_API_ERROR_DB_ALIAS_EXISTS,
1304 alias_PKCS_not_exportable,
1310 RUNNER_TEST(TA2010_PKCS_get)
1314 auto manager = CKM::Manager::create();
1317 test_negative(&ManagerAsync::getPKCS12,
1318 CKM_API_ERROR_DB_ALIAS_UNKNOWN,
1322 // fail - not exportable
1323 test_negative(&ManagerAsync::getPKCS12,
1324 CKM_API_ERROR_NOT_EXPORTABLE,
1325 dbc.alias(alias_PKCS_not_exportable.c_str()));
1327 // success - exportable
1328 auto obs = test_positive(&ManagerAsync::getPKCS12,
1329 dbc.alias(alias_PKCS_exportable.c_str()));
1331 auto cert = obs->m_pkcs->getCertificate();
1332 RUNNER_ASSERT_MSG_BT(
1334 "Error in PKCS12::getCertificate()");
1336 auto key = obs->m_pkcs->getKey();
1337 RUNNER_ASSERT_MSG_BT(
1339 "Error in PKCS12::getKey()");
1341 auto caVector = obs->m_pkcs->getCaCertificateShPtrVector();
1342 RUNNER_ASSERT_MSG_BT(
1343 2 == caVector.size(),
1344 "Wrong size of vector");
1347 RUNNER_TEST(TA9999_deinit)
1350 ControlShPtr control = Control::create();
1351 RUNNER_ASSERT_MSG(CKM_API_SUCCESS == (temp = control->lockUserKey(APP_UID)),
1352 "Error=" << ErrorToString(temp));
1353 RUNNER_ASSERT_MSG(CKM_API_SUCCESS == (temp = control->removeUserData(APP_UID)),
1354 "Error=" << ErrorToString(temp));