2 * Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved
4 * Contact: Lukasz Pawelczyk <l.pawelczyk@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
21 * @author Lukasz Pawelczyk <l.pawelczyk@samsung.com>
22 * @brief Key API unit tests.
25 #include <boost/test/unit_test.hpp>
28 #include <yaca_crypto.h>
29 #include <yaca_encrypt.h>
31 #include <yaca_simple.h>
32 #include <yaca_error.h>
39 int import_export(yaca_key_h key, yaca_key_type_e type, const char *password,
40 yaca_key_format_e format, yaca_key_file_format_e file_format)
43 yaca_key_h imported = YACA_KEY_NULL;
47 yaca_key_type_e key_type;
50 ret = yaca_key_export(key, format, file_format,
51 password, &data, &data_len);
52 if (ret != YACA_ERROR_NONE) goto exit;
54 ret = yaca_key_import(type, password, data, data_len, &imported);
55 if (ret != YACA_ERROR_NONE) goto exit;
57 ret = yaca_key_get_type(imported, &key_type);
58 if (ret != YACA_ERROR_NONE) goto exit;
59 ret = yaca_key_get_bit_length(imported, &key_length);
60 if (ret != YACA_ERROR_NONE) goto exit;
63 yaca_key_destroy(imported);
71 BOOST_AUTO_TEST_SUITE(MOCK_TESTS_KEY)
73 BOOST_FIXTURE_TEST_CASE(T1201__mock__negative__key_symmetric_all, InitFixture)
77 yaca_key_bit_length_e len;
80 const std::vector<struct key_args> kargs = {
81 {YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_256BIT},
82 {YACA_KEY_TYPE_DES, YACA_KEY_LENGTH_192BIT},
83 {YACA_KEY_TYPE_IV, YACA_KEY_LENGTH_IV_64BIT}
86 for (const auto &ka: kargs) {
87 auto test_code = [&ka]()
90 yaca_key_h key = YACA_KEY_NULL;
92 ret = yaca_key_generate(ka.type, ka.len, &key);
93 if (ret != YACA_ERROR_NONE) goto exit;
95 ret = import_export(key, ka.type, "",
96 YACA_KEY_FORMAT_DEFAULT,
97 YACA_KEY_FILE_FORMAT_RAW);
98 if (ret != YACA_ERROR_NONE) goto exit;
100 ret = import_export(key, ka.type, "",
101 YACA_KEY_FORMAT_DEFAULT,
102 YACA_KEY_FILE_FORMAT_BASE64);
103 if (ret != YACA_ERROR_NONE) goto exit;
106 yaca_key_destroy(key);
110 call_mock_test(test_code);
114 BOOST_FIXTURE_TEST_CASE(T1202__mock__negative__key_asymmetric_generate_all, InitFixture)
117 yaca_key_type_e type_priv;
118 yaca_key_type_e type_pub;
119 yaca_key_type_e type_params;
120 yaca_key_bit_length_e len;
123 const std::vector<struct key_args> kargs = {
124 {YACA_KEY_TYPE_RSA_PRIV,
125 YACA_KEY_TYPE_RSA_PUB,
126 YACA_INVALID_KEY_TYPE,
127 YACA_KEY_LENGTH_512BIT},
128 {YACA_KEY_TYPE_DSA_PRIV,
129 YACA_KEY_TYPE_DSA_PUB,
130 YACA_KEY_TYPE_DSA_PARAMS,
131 YACA_KEY_LENGTH_512BIT},
132 {YACA_KEY_TYPE_DH_PRIV,
133 YACA_KEY_TYPE_DH_PUB,
134 YACA_KEY_TYPE_DH_PARAMS,
135 (yaca_key_bit_length_e)YACA_KEY_LENGTH_DH_RFC_1024_160},
136 {YACA_KEY_TYPE_EC_PRIV,
137 YACA_KEY_TYPE_EC_PUB,
138 YACA_KEY_TYPE_EC_PARAMS,
139 (yaca_key_bit_length_e)YACA_KEY_LENGTH_EC_PRIME192V1}
142 for (const auto &ka: kargs) {
143 auto test_code = [&ka]()
146 yaca_key_h priv = YACA_KEY_NULL;
147 yaca_key_h priv2 = YACA_KEY_NULL;
148 yaca_key_h pub = YACA_KEY_NULL;
149 yaca_key_h params = YACA_KEY_NULL;
150 yaca_key_h params2 = YACA_KEY_NULL;
152 ret = yaca_key_generate(ka.type_priv, ka.len, &priv);
153 if (ret != YACA_ERROR_NONE) goto exit;
155 ret = yaca_key_extract_public(priv, &pub);
156 if (ret != YACA_ERROR_NONE) goto exit;
158 if (ka.type_params != YACA_INVALID_KEY_TYPE) {
159 ret = yaca_key_generate(ka.type_params, ka.len, ¶ms);
160 if (ret != YACA_ERROR_NONE) goto exit;
162 ret = yaca_key_generate_from_parameters(params, &priv2);
163 if (ret != YACA_ERROR_NONE) goto exit;
165 ret = yaca_key_extract_parameters(pub, ¶ms2);
166 if (ret != YACA_ERROR_NONE) goto exit;
170 yaca_key_destroy(params);
171 yaca_key_destroy(params2);
172 yaca_key_destroy(priv);
173 yaca_key_destroy(priv2);
174 yaca_key_destroy(pub);
178 call_mock_test(test_code);
182 BOOST_FIXTURE_TEST_CASE(T1204__mock__negative__key_asymmetric_import_export, InitFixture)
185 yaca_key_type_e type_priv;
186 yaca_key_type_e type_pub;
187 yaca_key_type_e type_params;
188 yaca_key_bit_length_e len;
191 const std::vector<struct key_args> kargs = {
192 {YACA_KEY_TYPE_RSA_PRIV,
193 YACA_KEY_TYPE_RSA_PUB,
194 YACA_INVALID_KEY_TYPE,
195 YACA_KEY_LENGTH_512BIT},
196 {YACA_KEY_TYPE_DSA_PRIV,
197 YACA_KEY_TYPE_DSA_PUB,
198 YACA_KEY_TYPE_DSA_PARAMS,
199 YACA_KEY_LENGTH_512BIT},
200 {YACA_KEY_TYPE_EC_PRIV,
201 YACA_KEY_TYPE_EC_PUB,
202 YACA_KEY_TYPE_EC_PARAMS,
203 (yaca_key_bit_length_e)YACA_KEY_LENGTH_EC_PRIME192V1},
204 {YACA_KEY_TYPE_DH_PRIV,
205 YACA_KEY_TYPE_DH_PUB,
206 YACA_KEY_TYPE_DH_PARAMS,
207 (yaca_key_bit_length_e)YACA_KEY_LENGTH_DH_RFC_1024_160},
210 for (const auto &ka: kargs) {
211 auto test_code = [&ka]()
214 yaca_key_h key_priv = YACA_KEY_NULL;
215 yaca_key_h key_pub = YACA_KEY_NULL;
216 yaca_key_h key_params = YACA_KEY_NULL;
218 ret = yaca_key_generate(ka.type_priv, ka.len, &key_priv);
219 if (ret != YACA_ERROR_NONE) goto exit;
221 ret = import_export(key_priv, ka.type_priv, NULL,
222 YACA_KEY_FORMAT_DEFAULT,
223 YACA_KEY_FILE_FORMAT_DER);
224 if (ret != YACA_ERROR_NONE) goto exit;
226 ret = import_export(key_priv, ka.type_priv, NULL,
227 YACA_KEY_FORMAT_DEFAULT,
228 YACA_KEY_FILE_FORMAT_PEM);
229 if (ret != YACA_ERROR_NONE) goto exit;
231 ret = yaca_key_extract_public(key_priv, &key_pub);
232 if (ret != YACA_ERROR_NONE) goto exit;
234 ret = import_export(key_pub, ka.type_pub, "",
235 YACA_KEY_FORMAT_DEFAULT,
236 YACA_KEY_FILE_FORMAT_DER);
237 if (ret != YACA_ERROR_NONE) goto exit;
239 ret = import_export(key_pub, ka.type_pub, "",
240 YACA_KEY_FORMAT_DEFAULT,
241 YACA_KEY_FILE_FORMAT_PEM);
242 if (ret != YACA_ERROR_NONE) goto exit;
244 if (ka.type_params != YACA_INVALID_KEY_TYPE) {
245 ret = yaca_key_extract_parameters(key_priv, &key_params);
246 if (ret != YACA_ERROR_NONE) goto exit;
248 ret = import_export(key_params, ka.type_params, NULL,
249 YACA_KEY_FORMAT_DEFAULT,
250 YACA_KEY_FILE_FORMAT_DER);
251 if (ret != YACA_ERROR_NONE) goto exit;
253 ret = import_export(key_params, ka.type_params, NULL,
254 YACA_KEY_FORMAT_DEFAULT,
255 YACA_KEY_FILE_FORMAT_PEM);
256 if (ret != YACA_ERROR_NONE) goto exit;
260 yaca_key_destroy(key_params);
261 yaca_key_destroy(key_priv);
262 yaca_key_destroy(key_pub);
266 call_mock_test(test_code);
270 BOOST_FIXTURE_TEST_CASE(T1205__mock__negative__key_encrypted_import_export, InitFixture)
272 static const char *PASSWORD = "ExamplE_PassworD";
274 struct default_args {
275 yaca_key_type_e type;
276 yaca_key_bit_length_e len;
279 const std::vector<struct default_args> dargs = {
280 {YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_512BIT},
281 {YACA_KEY_TYPE_DSA_PRIV, YACA_KEY_LENGTH_512BIT}
284 for (const auto &da: dargs) {
285 auto test_code = [&da]()
288 yaca_key_h key = YACA_KEY_NULL;
290 ret = yaca_key_generate(da.type, da.len, &key);
291 if (ret != YACA_ERROR_NONE) goto exit;
293 ret = import_export(key, da.type, PASSWORD,
294 YACA_KEY_FORMAT_DEFAULT,
295 YACA_KEY_FILE_FORMAT_PEM);
296 if (ret != YACA_ERROR_NONE) goto exit;
299 yaca_key_destroy(key);
303 call_mock_test(test_code);
307 yaca_key_type_e type;
308 yaca_key_bit_length_e len;
311 const std::vector<struct pkcs8_args> pargs {
312 {YACA_KEY_TYPE_RSA_PRIV,
313 YACA_KEY_LENGTH_512BIT},
314 {YACA_KEY_TYPE_DSA_PRIV,
315 YACA_KEY_LENGTH_512BIT},
316 {YACA_KEY_TYPE_EC_PRIV,
317 (yaca_key_bit_length_e)YACA_KEY_LENGTH_EC_PRIME256V1},
318 {YACA_KEY_TYPE_DH_PRIV,
319 (yaca_key_bit_length_e)YACA_KEY_LENGTH_DH_RFC_1024_160},
322 for (const auto &pa: pargs) {
323 auto test_code2 = [&pa]()
326 yaca_key_h key = YACA_KEY_NULL;
328 ret = yaca_key_generate(pa.type, pa.len, &key);
329 if (ret != YACA_ERROR_NONE) goto exit;
331 ret = import_export(key, pa.type, PASSWORD,
332 YACA_KEY_FORMAT_PKCS8,
333 YACA_KEY_FILE_FORMAT_DER);
334 if (ret != YACA_ERROR_NONE) goto exit;
336 ret = import_export(key, pa.type, PASSWORD,
337 YACA_KEY_FORMAT_PKCS8,
338 YACA_KEY_FILE_FORMAT_PEM);
339 if (ret != YACA_ERROR_NONE) goto exit;
342 yaca_key_destroy(key);
346 call_mock_test(test_code2);
350 BOOST_FIXTURE_TEST_CASE(T1206__mock__negative__key_derive_dh, InitFixture)
353 yaca_key_type_e type;
354 yaca_key_bit_length_e len;
357 const std::vector<struct key_args> kargs = {
358 {YACA_KEY_TYPE_DH_PRIV,
359 (yaca_key_bit_length_e)YACA_KEY_LENGTH_DH_RFC_1024_160},
360 {YACA_KEY_TYPE_EC_PRIV,
361 (yaca_key_bit_length_e)YACA_KEY_LENGTH_EC_SECP256K1}
364 for (const auto &ka: kargs) {
365 auto test_code = [&ka]()
368 yaca_key_h priv1 = YACA_KEY_NULL, pub1 = YACA_KEY_NULL;
369 yaca_key_h priv2 = YACA_KEY_NULL, pub2 = YACA_KEY_NULL;
370 char *secret1 = NULL, *secret2 = NULL;
371 size_t secret1_len, secret2_len;
373 ret = yaca_key_generate(ka.type, ka.len, &priv1);
374 if (ret != YACA_ERROR_NONE) goto exit;
375 ret = yaca_key_generate(ka.type, ka.len, &priv2);
376 if (ret != YACA_ERROR_NONE) goto exit;
377 ret = yaca_key_extract_public(priv1, &pub1);
378 if (ret != YACA_ERROR_NONE) goto exit;
379 ret = yaca_key_extract_public(priv2, &pub2);
380 if (ret != YACA_ERROR_NONE) goto exit;
382 ret = yaca_key_derive_dh(priv1, pub2, &secret1, &secret1_len);
383 if (ret != YACA_ERROR_NONE) goto exit;
384 ret = yaca_key_derive_dh(priv2, pub1, &secret2, &secret2_len);
385 if (ret != YACA_ERROR_NONE) goto exit;
388 yaca_key_destroy(priv1);
389 yaca_key_destroy(priv2);
390 yaca_key_destroy(pub1);
391 yaca_key_destroy(pub2);
397 call_mock_test(test_code);
401 BOOST_FIXTURE_TEST_CASE(T1207__mock__negative__key_derive_kdf, InitFixture)
403 static const size_t SECRET_LEN = 128;
404 static const size_t MATERIAL_LEN = 256;
408 yaca_digest_algorithm_e digest;
411 const std::vector<struct kdf_args> kargs = {
412 {YACA_KDF_X942, YACA_DIGEST_SHA1},
413 {YACA_KDF_X962, YACA_DIGEST_MD5}
417 char secret[SECRET_LEN];
419 ret = yaca_randomize_bytes(secret, SECRET_LEN);
420 BOOST_REQUIRE(ret == YACA_ERROR_NONE);
422 for (const auto &ka: kargs) {
423 auto test_code = [&ka, &secret]()
426 char *key_material = NULL;;
428 ret = yaca_key_derive_kdf(ka.kdf, ka.digest, secret, SECRET_LEN,
429 NULL, 0, MATERIAL_LEN, &key_material);
431 yaca_free(key_material);
435 call_mock_test(test_code);
439 BOOST_FIXTURE_TEST_CASE(T1208__mock__negative__key_derive_pbkdf2, InitFixture)
441 static const char *PASSWORD = "Password_ExamplE";
442 static const size_t SALT_LEN = 64;
445 yaca_digest_algorithm_e digest;
450 const std::vector<struct pbkdf2_args> pargs = {
451 {YACA_DIGEST_MD5, 1, 256},
452 {YACA_DIGEST_SHA512, 50, 512}
458 ret = yaca_randomize_bytes(salt, SALT_LEN);
459 BOOST_REQUIRE(ret == YACA_ERROR_NONE);
461 for (const auto &pa: pargs) {
462 auto test_code = [&pa, &salt]()
465 yaca_key_h key = YACA_KEY_NULL;
467 ret = yaca_key_derive_pbkdf2(PASSWORD, salt, SALT_LEN, pa.iter,
468 pa.digest, pa.bit_len, &key);
470 yaca_key_destroy(key);
474 call_mock_test(test_code);
478 BOOST_FIXTURE_TEST_CASE(T1209__mock__negative__import_x509_cert, InitFixture)
480 static const char data_pem[] = "-----BEGIN CERTIFICATE-----\n\
481 MIIC9jCCAl+gAwIBAgIUaWM7DVy/evvsrKz8gkz3qWZKw7EwDQYJKoZIhvcNAQEL\n\
482 BQAwgYwxCzAJBgNVBAYTAlBMMRQwEgYDVQQIDAtNYXpvd2llY2tpZTERMA8GA1UE\n\
483 BwwIV2Fyc3phd2ExEDAOBgNVBAoMB1NhbXN1bmcxCzAJBgNVBAsMAklUMRQwEgYD\n\
484 VQQDDAtzYW1zdW5nLmNvbTEfMB0GCSqGSIb3DQEJARYQbm9uZUBzYW1zdW5nLmNv\n\
485 bTAeFw0yMDA0MDkxNzUzMDlaFw0yNTA0MDgxNzUzMDlaMIGMMQswCQYDVQQGEwJQ\n\
486 TDEUMBIGA1UECAwLTWF6b3dpZWNraWUxETAPBgNVBAcMCFdhcnN6YXdhMRAwDgYD\n\
487 VQQKDAdTYW1zdW5nMQswCQYDVQQLDAJJVDEUMBIGA1UEAwwLc2Ftc3VuZy5jb20x\n\
488 HzAdBgkqhkiG9w0BCQEWEG5vbmVAc2Ftc3VuZy5jb20wgZ8wDQYJKoZIhvcNAQEB\n\
489 BQADgY0AMIGJAoGBAMrx4VdcBEWSXdOa7nJr6Vh53TDfnqhgOGRUC8c+kGUu45Cp\n\
490 hcGU7q44zfqvEdgkVBK+Y6GBMrbB0TALo2zK4RVDIgTc8UskbiBjiP4cHB+Zl460\n\
491 kU/0vKZPWt7yWq9g87lppEr/f0RTGrKkkcVadCxmKILr4ZtS9563xXH+kKAlAgMB\n\
492 AAGjUzBRMB0GA1UdDgQWBBQBroKxSi+l6RqOD5jQGRYyoM0I1jAfBgNVHSMEGDAW\n\
493 gBQBroKxSi+l6RqOD5jQGRYyoM0I1jAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3\n\
494 DQEBCwUAA4GBAC1f+n4ly876nTXMjdINH8qmxrHOH55vt7v1KYWqCVFSJbqtQMlT\n\
495 E9+bqRGN2LpzMBkDdNkGSrCesI1l/FUStjqdpBGMi1fqFDNDyBXkLJDH5HAMR3ei\n\
496 hajHIasdGWcAfj+Cyuk1KcTIEkBfdYR6a8C4g04Vbg6M0qEjFl5UTMwm\n\
497 -----END CERTIFICATE-----";
499 /* THIS CHUNK OF BYTES IS AUTOMATICALLY GENERATED */
500 static const unsigned char data_der[] = {
501 0x30, 0x82, 0x02, 0xf2, 0x30, 0x82, 0x02, 0x5b, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x14, 0x3e,
502 0x03, 0xd9, 0x79, 0x86, 0xae, 0xa4, 0x85, 0x59, 0xd6, 0x2b, 0x53, 0x29, 0xee, 0xfd, 0x2c, 0x26,
503 0xe8, 0x72, 0x57, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b,
504 0x05, 0x00, 0x30, 0x81, 0x8a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02,
505 0x50, 0x4c, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x0b, 0x4d, 0x61, 0x7a,
506 0x6f, 0x77, 0x69, 0x65, 0x63, 0x6b, 0x69, 0x65, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04,
507 0x07, 0x0c, 0x06, 0x57, 0x61, 0x72, 0x73, 0x61, 0x77, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55,
508 0x04, 0x0a, 0x0c, 0x07, 0x53, 0x61, 0x6d, 0x73, 0x75, 0x6e, 0x67, 0x31, 0x0b, 0x30, 0x09, 0x06,
509 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x02, 0x49, 0x54, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04,
510 0x03, 0x0c, 0x0b, 0x73, 0x61, 0x6d, 0x73, 0x75, 0x6e, 0x67, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x1f,
511 0x30, 0x1d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x10, 0x6e,
512 0x6f, 0x6e, 0x65, 0x40, 0x73, 0x61, 0x6d, 0x73, 0x75, 0x6e, 0x67, 0x2e, 0x63, 0x6f, 0x6d, 0x30,
513 0x1e, 0x17, 0x0d, 0x32, 0x30, 0x30, 0x34, 0x31, 0x34, 0x31, 0x35, 0x32, 0x33, 0x30, 0x37, 0x5a,
514 0x17, 0x0d, 0x32, 0x31, 0x30, 0x34, 0x31, 0x34, 0x31, 0x35, 0x32, 0x33, 0x30, 0x37, 0x5a, 0x30,
515 0x81, 0x8a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x50, 0x4c, 0x31,
516 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x0b, 0x4d, 0x61, 0x7a, 0x6f, 0x77, 0x69,
517 0x65, 0x63, 0x6b, 0x69, 0x65, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x06,
518 0x57, 0x61, 0x72, 0x73, 0x61, 0x77, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c,
519 0x07, 0x53, 0x61, 0x6d, 0x73, 0x75, 0x6e, 0x67, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
520 0x0b, 0x0c, 0x02, 0x49, 0x54, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0b,
521 0x73, 0x61, 0x6d, 0x73, 0x75, 0x6e, 0x67, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x1f, 0x30, 0x1d, 0x06,
522 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x10, 0x6e, 0x6f, 0x6e, 0x65,
523 0x40, 0x73, 0x61, 0x6d, 0x73, 0x75, 0x6e, 0x67, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x81, 0x9f, 0x30,
524 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81,
525 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xc9, 0x73, 0x11, 0x8f, 0x63, 0x4d, 0xaa,
526 0x8e, 0xc5, 0xb5, 0x6d, 0x9c, 0xea, 0x30, 0x43, 0xb5, 0x5d, 0xd3, 0xb2, 0x9c, 0x59, 0x23, 0xdf,
527 0xa8, 0x69, 0xe6, 0x0d, 0xfe, 0x0a, 0xdb, 0xce, 0x22, 0x64, 0x15, 0x02, 0xf6, 0xa4, 0xe9, 0x22,
528 0x04, 0xce, 0x73, 0x9e, 0x89, 0x1e, 0x87, 0x93, 0x31, 0x07, 0x91, 0x0e, 0xbd, 0x98, 0x45, 0x3d,
529 0x66, 0xe9, 0x59, 0x02, 0xfc, 0x2f, 0xd9, 0x11, 0x71, 0xc4, 0x11, 0x3f, 0x20, 0xf3, 0x49, 0xb6,
530 0x59, 0x26, 0xb2, 0x8c, 0x9f, 0x74, 0xe0, 0x09, 0x3b, 0x4f, 0xdd, 0xf4, 0x13, 0x8b, 0x91, 0x48,
531 0x1e, 0x1b, 0xf5, 0x86, 0xca, 0xe6, 0xd6, 0x1d, 0x29, 0x74, 0x1d, 0xb6, 0x84, 0x0b, 0x48, 0xe7,
532 0x40, 0x14, 0x60, 0x65, 0xb2, 0x35, 0xf0, 0x48, 0xe9, 0x93, 0xea, 0x77, 0x63, 0x77, 0x53, 0x77,
533 0xaf, 0xbb, 0xac, 0xc2, 0x86, 0x40, 0xc7, 0xb0, 0x0b, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x53,
534 0x30, 0x51, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xd0, 0xb1, 0x78,
535 0xed, 0xee, 0xb4, 0x57, 0x7b, 0x4f, 0xed, 0x45, 0xba, 0x0b, 0x5a, 0x32, 0xe5, 0xe1, 0x32, 0xee,
536 0x83, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xd0, 0xb1,
537 0x78, 0xed, 0xee, 0xb4, 0x57, 0x7b, 0x4f, 0xed, 0x45, 0xba, 0x0b, 0x5a, 0x32, 0xe5, 0xe1, 0x32,
538 0xee, 0x83, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03,
539 0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b,
540 0x05, 0x00, 0x03, 0x81, 0x81, 0x00, 0x2e, 0xf4, 0x42, 0x8b, 0xde, 0xfe, 0x36, 0x79, 0x6d, 0xaa,
541 0x51, 0x85, 0x65, 0xe3, 0x0f, 0x89, 0x1f, 0x84, 0xce, 0x5c, 0x34, 0x03, 0x0d, 0x59, 0x2a, 0xad,
542 0xfb, 0x09, 0xd2, 0xcd, 0xbc, 0xac, 0x51, 0x4a, 0xe3, 0xcb, 0x9e, 0xe5, 0x75, 0x26, 0x36, 0x5e,
543 0xe7, 0xc6, 0x86, 0x6b, 0xf8, 0xc4, 0x96, 0x99, 0x43, 0xb6, 0x53, 0xcc, 0x6a, 0x14, 0x57, 0xcd,
544 0x08, 0xad, 0x53, 0x11, 0x5f, 0x17, 0x97, 0xb3, 0x2f, 0x36, 0xbe, 0xd6, 0x5c, 0x03, 0x32, 0xe3,
545 0x2a, 0x4f, 0x69, 0x85, 0xf6, 0xf0, 0x14, 0x13, 0x2b, 0xfc, 0xa6, 0x64, 0x67, 0x4d, 0x7b, 0xab,
546 0xb9, 0xd0, 0x06, 0x00, 0xce, 0xc6, 0x85, 0x08, 0x45, 0xfb, 0xca, 0x70, 0x1b, 0xb4, 0x8f, 0x4e,
547 0x49, 0x2e, 0xfe, 0x94, 0xd7, 0x7b, 0xf1, 0xc6, 0x60, 0x24, 0xa6, 0x79, 0x5a, 0xeb, 0x92, 0xed,
548 0xd7, 0x07, 0x42, 0x65, 0xd3, 0x31
551 auto test_code = []()
554 yaca_key_h key_pem = YACA_KEY_NULL, key_der = YACA_KEY_NULL;
556 ret = yaca_key_import(YACA_KEY_TYPE_RSA_PUB, NULL, data_pem,
557 sizeof(data_pem), &key_pem);
558 if (ret != YACA_ERROR_NONE) goto exit;
560 ret = yaca_key_import(YACA_KEY_TYPE_RSA_PUB, NULL, (char*)data_der,
561 sizeof(data_der), &key_der);
562 if (ret != YACA_ERROR_NONE) goto exit;
565 yaca_key_destroy(key_pem);
566 yaca_key_destroy(key_der);
570 call_mock_test(test_code);
573 BOOST_AUTO_TEST_SUITE_END()