2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License
17 * @file test_cases.cpp
18 * @author Dongsun Lee (ds73.lee@samsung.com)
20 * @brief tests for SE Backend
22 #include <boost/test/unit_test.hpp>
25 #include <key-manager-se-backend.h>
27 BOOST_AUTO_TEST_SUITE(USER)
29 BOOST_AUTO_TEST_SUITE(SE_EMUL);
31 void _print_bin(char *bin, uint32_t len) {
32 for(uint32_t i=0; i<len; i++) {
33 printf("%02X, ", 0x00FF & bin[i]);
40 bool key_exist = true;
41 kmsb_error_e ret = KMSB_ERROR_NONE;
43 unsigned char input[32] = {0x01};
44 unsigned char iv[16] = {0x02};
45 unsigned char *output = NULL;
46 unsigned int output_len = 0;
48 ret = kmsb_encrypt_with_dbp_key(SE_BACKEND_DBP_SCHEME_VERSION,
51 &output, &output_len);
52 if (ret == KMSB_ERROR_NO_KEY)
55 BOOST_TEST_MESSAGE( "Check Existence of DB Protection Key : Exist=" << std::boolalpha << key_exist );
59 struct dbp_key_checker
63 boost::test_tools::assertion_result operator()(boost::unit_test::test_unit_id)
65 return _dbp_key_exist();
69 struct no_dbp_key_checker
71 no_dbp_key_checker() {}
73 boost::test_tools::assertion_result operator()(boost::unit_test::test_unit_id)
75 return !_dbp_key_exist();
79 BOOST_AUTO_TEST_CASE(kmsb_generate_dbp_key_p,
80 * boost::unit_test::precondition(no_dbp_key_checker()))
82 kmsb_error_e ret = KMSB_ERROR_NONE;
84 unsigned char input[32] = {0x01};
85 unsigned char iv[16] = {0x02};
86 unsigned char *output = NULL;
87 unsigned int output_len = 0;
89 ret = kmsb_encrypt_with_dbp_key(SE_BACKEND_DBP_SCHEME_VERSION,
92 &output, &output_len);
93 BOOST_REQUIRE(ret == KMSB_ERROR_NO_KEY);
95 ret = kmsb_generate_dbp_key(false);
96 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
98 ret = kmsb_encrypt_with_dbp_key(SE_BACKEND_DBP_SCHEME_VERSION,
101 &output, &output_len);
102 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
103 if (output) free(output);
106 BOOST_AUTO_TEST_CASE(kmsb_generate_dbp_key_regenerate_p,
107 * boost::unit_test::precondition(dbp_key_checker()))
109 kmsb_error_e ret = kmsb_generate_dbp_key(true);
110 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
113 BOOST_AUTO_TEST_CASE(kmsb_generate_dbp_key_not_permitted_n,
114 * boost::unit_test::precondition(dbp_key_checker()))
116 kmsb_error_e ret = kmsb_generate_dbp_key(false);
117 BOOST_REQUIRE(ret == KMSB_ERROR_NOT_PERMITTED);
120 BOOST_AUTO_TEST_CASE(kmsb_encrypt_with_dbp_key_p,
121 * boost::unit_test::precondition(dbp_key_checker()))
123 kmsb_error_e ret = KMSB_ERROR_NONE;
125 unsigned char input[32] = {0x01};
126 unsigned char iv[16] = {0x02};
127 unsigned char *output1 = NULL;
128 unsigned char *output2 = NULL;
129 unsigned int output_len = 0;
131 ret = kmsb_encrypt_with_dbp_key(SE_BACKEND_DBP_SCHEME_VERSION,
132 input, sizeof(input),
134 &output1, &output_len);
135 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
136 BOOST_REQUIRE(output_len == sizeof(input));
138 ret = kmsb_encrypt_with_dbp_key(SE_BACKEND_DBP_SCHEME_VERSION,
139 input, sizeof(input),
141 &output2, &output_len);
142 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
143 BOOST_REQUIRE(output_len == sizeof(input));
145 BOOST_REQUIRE(std::memcmp(output1, output2, output_len) == 0);
147 if (output1) free(output1);
148 if (output2) free(output2);
151 BOOST_AUTO_TEST_CASE(kmsb_encrypt_with_dbp_key_invalid_parameter_n)
153 kmsb_error_e ret = KMSB_ERROR_NONE;
155 unsigned char input[32] = {0x01};
156 unsigned char iv[16] = {0x02};
157 unsigned char *output = NULL;
158 unsigned int output_len = 0;
160 ret = kmsb_encrypt_with_dbp_key(0,
161 input, sizeof(input),
163 &output, &output_len);
164 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
166 ret = kmsb_encrypt_with_dbp_key(SE_BACKEND_DBP_SCHEME_VERSION,
169 &output, &output_len);
170 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
172 ret = kmsb_encrypt_with_dbp_key(SE_BACKEND_DBP_SCHEME_VERSION,
175 &output, &output_len);
176 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
178 ret = kmsb_encrypt_with_dbp_key(SE_BACKEND_DBP_SCHEME_VERSION,
179 input, sizeof(input),
181 &output, &output_len);
182 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
184 ret = kmsb_encrypt_with_dbp_key(SE_BACKEND_DBP_SCHEME_VERSION,
185 input, sizeof(input),
187 &output, &output_len);
188 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
190 ret = kmsb_encrypt_with_dbp_key(SE_BACKEND_DBP_SCHEME_VERSION,
191 input, sizeof(input),
194 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
196 ret = kmsb_encrypt_with_dbp_key(SE_BACKEND_DBP_SCHEME_VERSION,
197 input, sizeof(input),
200 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
203 ///////////////////////////
204 const int TEST_AES_KEY_IDX = 1;
205 const int TEST_ECDSA_P192_KEY_IDX = 2;
206 const int TEST_ECDSA_P256_KEY_IDX = 3;
207 const int TEST_ECDSA_S384_KEY_IDX = 4;
208 const int TEST_CERT_IDX = 0;
209 const int TEST_DATA_IDX = 0;
211 BOOST_AUTO_TEST_CASE(kmsb_aes_cbc_encrypt_p)
213 kmsb_error_e ret = KMSB_ERROR_NONE;
215 unsigned char input[32] = {0x01};
216 unsigned char iv[16] = {0x02};
217 unsigned char *output1 = NULL;
218 unsigned char *output2 = NULL;
219 unsigned int output_len = 0;
221 kmsb_aes_param_s param;
222 param.mode = KMSB_ALGO_AES_CBC;
226 ret = kmsb_aes_encrypt(TEST_AES_KEY_IDX, ¶m,
227 input, sizeof(input),
228 &output1, &output_len);
229 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
231 ret = kmsb_aes_encrypt(TEST_AES_KEY_IDX, ¶m,
232 input, sizeof(input),
233 &output2, &output_len);
234 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
235 BOOST_REQUIRE(std::memcmp(output1, output2, output_len) == 0);
237 if (output1) free(output1);
238 if (output2) free(output2);
241 BOOST_AUTO_TEST_CASE(kmsb_aes_cbc_decrypt_p)
243 kmsb_error_e ret = KMSB_ERROR_NONE;
245 unsigned char input[32] = {0x01};
246 unsigned char iv[16] = {0x02};
247 unsigned char *output1 = NULL;
248 unsigned char *output2 = NULL;
249 unsigned int output_len = 0;
251 kmsb_aes_param_s param;
252 param.mode = KMSB_ALGO_AES_CBC;
256 ret = kmsb_aes_encrypt(TEST_AES_KEY_IDX, ¶m,
257 input, sizeof(input),
258 &output1, &output_len);
259 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
261 ret = kmsb_aes_decrypt(TEST_AES_KEY_IDX, ¶m,
263 &output2, &output_len);
264 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
265 BOOST_REQUIRE(output_len == sizeof(input));
266 BOOST_REQUIRE(std::memcmp(input, output2, output_len) == 0);
268 if (output1) free(output1);
269 if (output2) free(output2);
272 BOOST_AUTO_TEST_CASE(kmsb_aes_ctr_encrypt_p)
274 kmsb_error_e ret = KMSB_ERROR_NONE;
276 unsigned char input[32] = {0x01};
277 unsigned char iv[16] = {0x02};
278 unsigned char *output1 = NULL;
279 unsigned char *output2 = NULL;
280 unsigned int output_len = 0;
282 kmsb_aes_param_s param;
283 param.mode = KMSB_ALGO_AES_CTR;
286 ret = kmsb_aes_encrypt(TEST_AES_KEY_IDX, ¶m,
287 input, sizeof(input),
288 &output1, &output_len);
289 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
290 BOOST_REQUIRE(output_len == sizeof(input));
292 ret = kmsb_aes_encrypt(TEST_AES_KEY_IDX, ¶m,
293 input, sizeof(input),
294 &output2, &output_len);
295 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
296 BOOST_REQUIRE(output_len == sizeof(input));
298 BOOST_REQUIRE(std::memcmp(output1, output2, output_len) == 0);
300 if (output1) free(output1);
301 if (output2) free(output2);
304 BOOST_AUTO_TEST_CASE(kmsb_aes_ctr_decrypt_p)
306 kmsb_error_e ret = KMSB_ERROR_NONE;
308 unsigned char input[32] = {0x01};
309 unsigned char iv[16] = {0x02};
310 unsigned char *output1 = NULL;
311 unsigned char *output2 = NULL;
312 unsigned int output_len = 0;
314 kmsb_aes_param_s param;
315 param.mode = KMSB_ALGO_AES_CTR;
319 ret = kmsb_aes_encrypt(TEST_AES_KEY_IDX, ¶m,
320 input, sizeof(input),
321 &output1, &output_len);
322 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
323 BOOST_REQUIRE(output_len == sizeof(input));
325 ret = kmsb_aes_decrypt(TEST_AES_KEY_IDX, ¶m,
327 &output2, &output_len);
328 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
329 BOOST_REQUIRE(output_len == sizeof(input));
330 BOOST_REQUIRE(std::memcmp(input, output2, output_len) == 0);
332 if (output1) free(output1);
333 if (output2) free(output2);
336 BOOST_AUTO_TEST_CASE(kmsb_aes_cfb_encrypt_p)
338 kmsb_error_e ret = KMSB_ERROR_NONE;
340 unsigned char input[32] = {0x01};
341 unsigned char iv[16] = {0x02};
342 unsigned char *output1 = NULL;
343 unsigned char *output2 = NULL;
344 unsigned int output_len = 0;
346 kmsb_aes_param_s param;
347 param.mode = KMSB_ALGO_AES_CFB;
350 ret = kmsb_aes_encrypt(TEST_AES_KEY_IDX, ¶m,
351 input, sizeof(input),
352 &output1, &output_len);
353 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
354 BOOST_REQUIRE(output_len == sizeof(input));
356 ret = kmsb_aes_encrypt(TEST_AES_KEY_IDX, ¶m,
357 input, sizeof(input),
358 &output2, &output_len);
359 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
360 BOOST_REQUIRE(output_len == sizeof(input));
362 BOOST_REQUIRE(std::memcmp(output1, output2, output_len) == 0);
364 if (output1) free(output1);
365 if (output2) free(output2);
368 BOOST_AUTO_TEST_CASE(kmsb_aes_cfb_decrypt_p)
370 kmsb_error_e ret = KMSB_ERROR_NONE;
372 unsigned char input[32] = {0x01};
373 unsigned char iv[16] = {0x02};
374 unsigned char *output1 = NULL;
375 unsigned char *output2 = NULL;
376 unsigned int output_len = 0;
378 kmsb_aes_param_s param;
379 param.mode = KMSB_ALGO_AES_CFB;
383 ret = kmsb_aes_encrypt(TEST_AES_KEY_IDX, ¶m,
384 input, sizeof(input),
385 &output1, &output_len);
386 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
387 BOOST_REQUIRE(output_len == sizeof(input));
389 ret = kmsb_aes_decrypt(TEST_AES_KEY_IDX, ¶m,
391 &output2, &output_len);
392 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
393 BOOST_REQUIRE(output_len == sizeof(input));
394 BOOST_REQUIRE(std::memcmp(input, output2, output_len) == 0);
396 if (output1) free(output1);
397 if (output2) free(output2);
400 BOOST_AUTO_TEST_CASE(kmsb_aes_gcm_encrypt_p)
402 kmsb_error_e ret = KMSB_ERROR_NONE;
404 unsigned char input[32] = {0x01};
405 unsigned char iv[16] = {0x02};
406 unsigned char aad[16] = {0x03};
407 unsigned char tag[16];
408 unsigned char *output1 = NULL;
409 unsigned char *output2 = NULL;
410 unsigned int output_len = 0;
412 kmsb_aes_param_s param;
413 param.mode = KMSB_ALGO_AES_GCM;
417 param.aad_len = sizeof(aad),
419 ret = kmsb_aes_encrypt(TEST_AES_KEY_IDX, ¶m,
420 input, sizeof(input),
421 &output1, &output_len);
422 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
423 BOOST_REQUIRE(output_len == sizeof(input));
425 ret = kmsb_aes_encrypt(TEST_AES_KEY_IDX, ¶m,
426 input, sizeof(input),
427 &output2, &output_len);
428 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
429 BOOST_REQUIRE(output_len == sizeof(input));
431 BOOST_REQUIRE(std::memcmp(output1, output2, output_len) == 0);
433 if (output1) free(output1);
434 if (output2) free(output2);
437 BOOST_AUTO_TEST_CASE(kmsb_aes_gcm_decrypt_p)
439 kmsb_error_e ret = KMSB_ERROR_NONE;
441 unsigned char input[32] = {0x01};
442 unsigned char iv[16] = {0x02};
443 unsigned char aad[16] = {0x03};
444 unsigned char tag[16];
445 unsigned char *output1 = NULL;
446 unsigned char *output2 = NULL;
447 unsigned int output_len = 0;
449 kmsb_aes_param_s param;
450 param.mode = KMSB_ALGO_AES_GCM;
454 param.aad_len = sizeof(aad);
457 ret = kmsb_aes_encrypt(TEST_AES_KEY_IDX, ¶m,
458 input, sizeof(input),
459 &output1, &output_len);
460 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
461 BOOST_REQUIRE(output_len == sizeof(input));
463 ret = kmsb_aes_decrypt(TEST_AES_KEY_IDX, ¶m,
465 &output2, &output_len);
466 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
467 BOOST_REQUIRE(output_len == sizeof(input));
468 BOOST_REQUIRE(std::memcmp(input, output2, output_len) == 0);
470 if (output1) free(output1);
471 if (output2) free(output2);
474 void test_kmsb_create_signature(int key_idx,
475 kmsb_hash_algo_e alg, kmsb_ec_type_e ec,
476 unsigned char *input, unsigned int input_len,
477 unsigned char **output, unsigned int *output_len)
479 kmsb_error_e ret = KMSB_ERROR_NONE;
480 kmsb_sign_param_s param;
482 param.hash_algo = alg;
484 ret = kmsb_create_signature(key_idx, ¶m,
487 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
490 void test_kmsb_verify_signature(int key_idx,
491 kmsb_hash_algo_e alg, kmsb_ec_type_e ec,
492 unsigned char *input, unsigned int input_len,
493 unsigned char **output, unsigned int *output_len)
495 kmsb_error_e ret = KMSB_ERROR_NONE;
496 kmsb_sign_param_s param;
498 param.hash_algo = alg;
500 ret = kmsb_create_signature(key_idx, ¶m,
503 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
505 ret = kmsb_verify_signature(key_idx, ¶m,
507 *output, *output_len);
508 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
511 BOOST_AUTO_TEST_CASE(kmsb_create_signature_sha1_p)
513 unsigned char input[32] = {0x01};
514 unsigned char *signature = NULL;
515 unsigned int signature_len = 0;
517 kmsb_hash_algo_e alg = KMSB_HASH_SHA1;
518 kmsb_ec_type_e ec = KMSB_EC_PRIME256V1;
519 test_kmsb_create_signature(TEST_ECDSA_P256_KEY_IDX, alg, ec,
520 input, sizeof(input),
521 &signature, &signature_len);
523 if (signature) free(signature);
526 BOOST_AUTO_TEST_CASE(kmsb_create_signature_sha256_p)
528 unsigned char input[32] = {0x01};
529 unsigned char *signature = NULL;
530 unsigned int signature_len = 0;
532 kmsb_hash_algo_e alg = KMSB_HASH_SHA256;
533 kmsb_ec_type_e ec = KMSB_EC_PRIME256V1;
534 test_kmsb_create_signature(TEST_ECDSA_P256_KEY_IDX, alg, ec,
535 input, sizeof(input),
536 &signature, &signature_len);
538 if (signature) free(signature);
541 BOOST_AUTO_TEST_CASE(kmsb_create_signature_sha384_p)
543 unsigned char input[32] = {0x01};
544 unsigned char *signature = NULL;
545 unsigned int signature_len = 0;
547 kmsb_hash_algo_e alg = KMSB_HASH_SHA384;
548 kmsb_ec_type_e ec = KMSB_EC_PRIME256V1;
549 test_kmsb_create_signature(TEST_ECDSA_P256_KEY_IDX, alg, ec,
550 input, sizeof(input),
551 &signature, &signature_len);
553 if (signature) free(signature);
556 BOOST_AUTO_TEST_CASE(kmsb_create_signature_sha512_p)
558 unsigned char input[32] = {0x01};
559 unsigned char *signature = NULL;
560 unsigned int signature_len = 0;
562 kmsb_hash_algo_e alg = KMSB_HASH_SHA512;
563 kmsb_ec_type_e ec = KMSB_EC_PRIME256V1;
564 test_kmsb_create_signature(TEST_ECDSA_P256_KEY_IDX, alg, ec,
565 input, sizeof(input),
566 &signature, &signature_len);
568 if (signature) free(signature);
571 BOOST_AUTO_TEST_CASE(kmsb_create_signature_p192v1_p)
573 unsigned char input[32] = {0x01};
574 unsigned char *signature = NULL;
575 unsigned int signature_len = 0;
577 kmsb_hash_algo_e alg = KMSB_HASH_SHA256;
578 kmsb_ec_type_e ec = KMSB_EC_PRIME192V1;
579 test_kmsb_create_signature(TEST_ECDSA_P192_KEY_IDX, alg, ec,
580 input, sizeof(input),
581 &signature, &signature_len);
583 if (signature) free(signature);
586 BOOST_AUTO_TEST_CASE(kmsb_create_signature_secp384r1_p)
588 unsigned char input[32] = {0x01};
589 unsigned char *signature = NULL;
590 unsigned int signature_len = 0;
592 kmsb_hash_algo_e alg = KMSB_HASH_SHA256;
593 kmsb_ec_type_e ec = KMSB_EC_SECP384R1;
594 test_kmsb_create_signature(TEST_ECDSA_S384_KEY_IDX, alg, ec,
595 input, sizeof(input),
596 &signature, &signature_len);
598 if (signature) free(signature);
601 BOOST_AUTO_TEST_CASE(kmsb_verify_signature_sha1_p)
603 unsigned char input[32] = {0x01};
604 unsigned char *signature = NULL;
605 unsigned int signature_len = 0;
607 kmsb_hash_algo_e alg = KMSB_HASH_SHA1;
608 kmsb_ec_type_e ec = KMSB_EC_PRIME256V1;
609 test_kmsb_verify_signature(TEST_ECDSA_P256_KEY_IDX, alg, ec,
610 input, sizeof(input),
611 &signature, &signature_len);
613 if (signature) free(signature);
616 BOOST_AUTO_TEST_CASE(kmsb_verify_signature_sha256_p)
618 unsigned char input[32] = {0x01};
619 unsigned char *signature = NULL;
620 unsigned int signature_len = 0;
622 kmsb_hash_algo_e alg = KMSB_HASH_SHA256;
623 kmsb_ec_type_e ec = KMSB_EC_PRIME256V1;
624 test_kmsb_verify_signature(TEST_ECDSA_P256_KEY_IDX, alg, ec,
625 input, sizeof(input),
626 &signature, &signature_len);
628 if (signature) free(signature);
631 BOOST_AUTO_TEST_CASE(kmsb_verify_signature_sha384_p)
633 unsigned char input[32] = {0x01};
634 unsigned char *signature = NULL;
635 unsigned int signature_len = 0;
637 kmsb_hash_algo_e alg = KMSB_HASH_SHA384;
638 kmsb_ec_type_e ec = KMSB_EC_PRIME256V1;
639 test_kmsb_verify_signature(TEST_ECDSA_P256_KEY_IDX, alg, ec,
640 input, sizeof(input),
641 &signature, &signature_len);
643 if (signature) free(signature);
646 BOOST_AUTO_TEST_CASE(kmsb_verify_signature_sha512_p)
648 unsigned char input[32] = {0x01};
649 unsigned char *signature = NULL;
650 unsigned int signature_len = 0;
652 kmsb_hash_algo_e alg = KMSB_HASH_SHA512;
653 kmsb_ec_type_e ec = KMSB_EC_PRIME256V1;
654 test_kmsb_verify_signature(TEST_ECDSA_P256_KEY_IDX, alg, ec,
655 input, sizeof(input),
656 &signature, &signature_len);
658 if (signature) free(signature);
661 BOOST_AUTO_TEST_CASE(kmsb_verify_signature_p192v1_p)
663 unsigned char input[32] = {0x01};
664 unsigned char *signature = NULL;
665 unsigned int signature_len = 0;
667 kmsb_hash_algo_e alg = KMSB_HASH_SHA256;
668 kmsb_ec_type_e ec = KMSB_EC_PRIME192V1;
669 test_kmsb_verify_signature(TEST_ECDSA_P192_KEY_IDX, alg, ec,
670 input, sizeof(input),
671 &signature, &signature_len);
673 if (signature) free(signature);
676 BOOST_AUTO_TEST_CASE(kmsb_verify_signature_secp384r1_p)
678 unsigned char input[32] = {0x01};
679 unsigned char *signature = NULL;
680 unsigned int signature_len = 0;
682 kmsb_hash_algo_e alg = KMSB_HASH_SHA256;
683 kmsb_ec_type_e ec = KMSB_EC_SECP384R1;
684 test_kmsb_verify_signature(TEST_ECDSA_S384_KEY_IDX, alg, ec,
685 input, sizeof(input),
686 &signature, &signature_len);
688 if (signature) free(signature);
691 BOOST_AUTO_TEST_CASE(kmsb_aes_decrypt_fail_n)
693 kmsb_error_e ret = KMSB_ERROR_NONE;
695 unsigned char input[32] = {0x01};
696 unsigned char iv[16] = {0x02};
697 unsigned char *output1 = NULL;
698 unsigned char *output2 = NULL;
699 unsigned int output_len = 0;
701 kmsb_aes_param_s param;
702 param.mode = KMSB_ALGO_AES_CBC;
706 ret = kmsb_aes_encrypt(TEST_AES_KEY_IDX, ¶m,
707 input, sizeof(input),
708 &output1, &output_len);
709 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
712 ret = kmsb_aes_decrypt(TEST_AES_KEY_IDX, ¶m,
714 &output2, &output_len);
715 BOOST_REQUIRE(ret == KMSB_ERROR_OPERATION_FAILED);
717 if (output1) free(output1);
718 if (output2) free(output2);
721 BOOST_AUTO_TEST_CASE(kmsb_aes_encrypt_invalid_parameters_n)
723 kmsb_error_e ret = KMSB_ERROR_NONE;
725 unsigned char input[32] = {0x01};
726 unsigned char iv[16] = {0x02};
727 unsigned char *output = NULL;
728 unsigned int output_len = 0;
729 unsigned int key_idx = TEST_AES_KEY_IDX;
731 kmsb_aes_param_s param;
732 param.mode = KMSB_ALGO_AES_CBC;
736 ret = kmsb_aes_encrypt(key_idx, ¶m,
738 &output, &output_len);
739 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
741 ret = kmsb_aes_encrypt(key_idx, ¶m,
743 &output, &output_len);
744 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
747 ret = kmsb_aes_encrypt(key_idx, ¶m,
748 input, sizeof(input),
749 &output, &output_len);
750 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
754 ret = kmsb_aes_encrypt(key_idx, ¶m,
755 input, sizeof(input),
756 &output, &output_len);
757 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
760 BOOST_AUTO_TEST_CASE(kmsb_aes_decrypt_invalid_parameters_n)
762 kmsb_error_e ret = KMSB_ERROR_NONE;
764 unsigned char input[32] = {0x01};
765 unsigned char iv[16] = {0x02};
766 unsigned char *output = NULL;
767 unsigned int output_len = 0;
768 unsigned int key_idx = TEST_AES_KEY_IDX;
770 kmsb_aes_param_s param;
771 param.mode = KMSB_ALGO_AES_CBC;
775 ret = kmsb_aes_encrypt(key_idx, ¶m,
776 input, sizeof(input),
777 &output, &output_len);
778 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
780 ret = kmsb_aes_decrypt(key_idx, ¶m,
782 &output, &output_len);
783 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
785 ret = kmsb_aes_decrypt(key_idx, ¶m,
787 &output, &output_len);
788 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
790 ret = kmsb_aes_decrypt(key_idx, ¶m,
791 input, sizeof(input),
793 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
795 ret = kmsb_aes_decrypt(key_idx, ¶m,
796 input, sizeof(input),
798 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
801 ret = kmsb_aes_decrypt(key_idx, ¶m,
802 input, sizeof(input),
803 &output, &output_len);
804 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
808 ret = kmsb_aes_encrypt(key_idx, ¶m,
809 input, sizeof(input),
810 &output, &output_len);
811 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
813 if (output) free(output);
816 BOOST_AUTO_TEST_CASE(kmsb_verify_signature_fail_n)
818 kmsb_error_e ret = KMSB_ERROR_NONE;
819 unsigned char input[32] = {0x01};
820 unsigned char *signature = NULL;
821 unsigned int signature_len = 0;
823 kmsb_sign_param_s param;
824 param.ec_type = KMSB_EC_PRIME256V1;
825 param.hash_algo = KMSB_HASH_SHA256;
827 ret = kmsb_create_signature(TEST_ECDSA_P256_KEY_IDX, ¶m,
828 input, sizeof(input),
829 &signature, &signature_len);
830 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
833 ret = kmsb_verify_signature(TEST_ECDSA_P256_KEY_IDX, ¶m,
834 input, sizeof(input),
835 signature, signature_len);
836 BOOST_REQUIRE(ret == KMSB_ERROR_VERIFICATION_FAILED);
838 if (signature) free(signature);
841 BOOST_AUTO_TEST_CASE(kmsb_create_signature_wrong_key_idx_n)
843 unsigned char input[32] = {0x01};
844 unsigned char *signature = NULL;
845 unsigned int signature_len = 0;
847 kmsb_hash_algo_e alg = KMSB_HASH_SHA256;
848 kmsb_ec_type_e ec = KMSB_EC_SECP384R1;
849 test_kmsb_create_signature(TEST_ECDSA_P256_KEY_IDX, alg, ec,
850 input, sizeof(input),
851 &signature, &signature_len);
853 if (signature) free(signature);
856 BOOST_AUTO_TEST_CASE(kmsb_verify_signature_wrong_key_idx_n)
858 unsigned char input[32] = {0x01};
859 unsigned char *signature = NULL;
860 unsigned int signature_len = 0;
862 kmsb_hash_algo_e alg = KMSB_HASH_SHA256;
863 kmsb_ec_type_e ec = KMSB_EC_SECP384R1;
864 test_kmsb_verify_signature(TEST_ECDSA_P256_KEY_IDX, alg, ec,
865 input, sizeof(input),
866 &signature, &signature_len);
868 if (signature) free(signature);
871 BOOST_AUTO_TEST_CASE(kmsb_create_signature_invalid_parameters_n)
873 kmsb_error_e ret = KMSB_ERROR_NONE;
874 unsigned char input[32] = {0x01};
875 unsigned char *signature = NULL;
876 unsigned int signature_len = 0;
877 unsigned int key_idx = TEST_ECDSA_P256_KEY_IDX;
879 kmsb_sign_param_s param;
880 param.ec_type = KMSB_EC_PRIME256V1;
881 param.hash_algo = KMSB_HASH_NONE;
882 ret = kmsb_create_signature(key_idx, ¶m,
883 input, sizeof(input),
884 &signature, &signature_len);
885 BOOST_REQUIRE(ret == KMSB_ERROR_NOT_SUPPORTED);
887 param.hash_algo = KMSB_HASH_SHA256;
888 ret = kmsb_create_signature(key_idx, ¶m,
890 &signature, &signature_len);
891 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
893 ret = kmsb_create_signature(key_idx, ¶m,
895 &signature, &signature_len);
896 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
898 ret = kmsb_create_signature(key_idx, ¶m,
899 input, sizeof(input),
900 NULL, &signature_len);
901 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
903 ret = kmsb_create_signature(key_idx, ¶m,
904 input, sizeof(input),
906 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
910 BOOST_AUTO_TEST_CASE(kmsb_verify_signature_invalid_parameters_n)
912 kmsb_error_e ret = KMSB_ERROR_NONE;
913 unsigned char input[32] = {0x01};
914 unsigned char *signature = NULL;
915 unsigned int signature_len = 0;
916 unsigned int key_idx = TEST_ECDSA_P256_KEY_IDX;
918 kmsb_sign_param_s param;
919 param.ec_type = KMSB_EC_PRIME256V1;
920 param.hash_algo = KMSB_HASH_SHA256;
922 ret = kmsb_create_signature(key_idx, ¶m,
923 input, sizeof(input),
924 &signature, &signature_len);
925 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
927 param.hash_algo = KMSB_HASH_NONE;
928 ret = kmsb_verify_signature(key_idx, ¶m,
929 input, sizeof(input),
930 signature, signature_len);
931 BOOST_REQUIRE(ret == KMSB_ERROR_NOT_SUPPORTED);
933 param.hash_algo = KMSB_HASH_SHA256;
934 ret = kmsb_verify_signature(key_idx, ¶m,
936 signature, signature_len);
937 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
939 ret = kmsb_verify_signature(key_idx, ¶m,
941 signature, signature_len);
942 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
944 ret = kmsb_verify_signature(key_idx, ¶m,
945 input, sizeof(input),
946 NULL, signature_len);
947 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
949 ret = kmsb_verify_signature(key_idx, ¶m,
950 input, sizeof(input),
952 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
954 if (signature) free(signature);
957 BOOST_AUTO_TEST_CASE(kmsb_get_key_invalid_parameters_n)
959 kmsb_error_e ret = KMSB_ERROR_NONE;
960 unsigned char *public_key = NULL;
961 unsigned int key_len = 0;
962 unsigned int key_idx = TEST_ECDSA_P256_KEY_IDX;
964 ret = kmsb_get_key(100, &public_key, &key_len);
965 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
967 ret = kmsb_get_key(key_idx, NULL, &key_len);
968 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
970 ret = kmsb_get_key(key_idx, &public_key, NULL);
971 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
973 if (public_key) free(public_key);
976 BOOST_AUTO_TEST_CASE(kmsb_get_key_p192_p)
978 kmsb_error_e ret = KMSB_ERROR_NONE;
979 unsigned char *public_key = NULL;
980 unsigned int key_len = 0;
981 unsigned int key_idx = TEST_ECDSA_P192_KEY_IDX;
983 ret = kmsb_get_key(key_idx, &public_key, &key_len);
984 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
986 if (public_key) free(public_key);
989 BOOST_AUTO_TEST_CASE(kmsb_get_key_p256_n)
991 kmsb_error_e ret = KMSB_ERROR_NONE;
992 unsigned char *public_key = NULL;
993 unsigned int key_len = 0;
994 unsigned int key_idx = TEST_ECDSA_P256_KEY_IDX;
996 ret = kmsb_get_key(key_idx, &public_key, &key_len);
997 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
999 if (public_key) free(public_key);
1002 BOOST_AUTO_TEST_CASE(kmsb_get_key_secp384r1_n)
1004 kmsb_error_e ret = KMSB_ERROR_NONE;
1005 unsigned char *public_key = NULL;
1006 unsigned int key_len = 0;
1007 unsigned int key_idx = TEST_ECDSA_S384_KEY_IDX;
1009 ret = kmsb_get_key(key_idx, &public_key, &key_len);
1010 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
1012 if (public_key) free(public_key);
1015 BOOST_AUTO_TEST_CASE(kmsb_get_certificate_invalid_parameters_n)
1017 kmsb_error_e ret = KMSB_ERROR_NONE;
1018 unsigned char *certificate = NULL;
1019 unsigned int cert_len = 0;
1020 unsigned int cert_idx = TEST_CERT_IDX;
1022 ret = kmsb_get_certificate(100, &certificate, &cert_len);
1023 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
1025 ret = kmsb_get_certificate(cert_idx, NULL, &cert_len);
1026 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
1028 ret = kmsb_get_certificate(cert_idx, &certificate, NULL);
1029 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
1031 if (certificate) free(certificate);
1034 BOOST_AUTO_TEST_CASE(kmsb_get_certificate_p)
1036 kmsb_error_e ret = KMSB_ERROR_NONE;
1037 unsigned char *certificate = NULL;
1038 unsigned int cert_len = 0;
1039 unsigned int cert_idx = TEST_CERT_IDX;
1041 ret = kmsb_get_certificate(cert_idx, &certificate, &cert_len);
1042 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
1044 if (certificate) free(certificate);
1047 BOOST_AUTO_TEST_CASE(kmsb_get_data_invalid_parameters_n)
1049 kmsb_error_e ret = KMSB_ERROR_NONE;
1050 unsigned char *data = NULL;
1051 unsigned int data_len = 0;
1052 unsigned int data_idx = TEST_DATA_IDX;
1054 ret = kmsb_get_data(100, &data, &data_len);
1055 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
1057 ret = kmsb_get_data(data_idx, NULL, &data_len);
1058 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
1060 ret = kmsb_get_data(data_idx, &data, NULL);
1061 BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
1063 if (data) free(data);
1066 BOOST_AUTO_TEST_CASE(kmsb_get_data_p)
1068 kmsb_error_e ret = KMSB_ERROR_NONE;
1069 unsigned char *data = NULL;
1070 unsigned int data_len = 0;
1071 unsigned int data_idx = TEST_DATA_IDX;
1073 ret = kmsb_get_data(data_idx, &data, &data_len);
1074 BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
1076 if (data) free(data);
1079 BOOST_AUTO_TEST_SUITE_END() // SE_EMUL
1081 BOOST_AUTO_TEST_SUITE_END() // USER