+BOOST_AUTO_TEST_CASE(kmsb_aes_decrypt_fail_n,
+ * boost::unit_test::precondition(aes_mode_checker(KMSB_ALGO_AES_CBC)))
+{
+ kmsb_error_e ret = KMSB_ERROR_NONE;
+
+ unsigned char input[32] = {0x01};
+ unsigned char iv[16] = {0x02};
+ unsigned char *output1 = NULL;
+ unsigned char *output2 = NULL;
+ unsigned int output_len = 0;
+
+ kmsb_aes_param_s param;
+ param.mode = KMSB_ALGO_AES_CBC;
+ param.iv = iv;
+ param.iv_len = 16;
+
+ ret = kmsb_aes_encrypt(TEST_AES_KEY_IDX, ¶m,
+ input, sizeof(input),
+ &output1, &output_len);
+ BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
+
+ output_len--;
+ ret = kmsb_aes_decrypt(TEST_AES_KEY_IDX, ¶m,
+ output1, output_len,
+ &output2, &output_len);
+ BOOST_REQUIRE(ret == KMSB_ERROR_OPERATION_FAILED);
+
+ if (output1) free(output1);
+ if (output2) free(output2);
+}
+
+BOOST_AUTO_TEST_CASE(kmsb_aes_encrypt_invalid_parameters_n,
+ * boost::unit_test::precondition(aes_mode_checker(KMSB_ALGO_AES_CBC)))
+{
+ kmsb_error_e ret = KMSB_ERROR_NONE;
+
+ unsigned char input[32] = {0x01};
+ unsigned char iv[16] = {0x02};
+ unsigned char *output = NULL;
+ unsigned int output_len = 0;
+ unsigned int key_idx = TEST_AES_KEY_IDX;
+
+ kmsb_aes_param_s param;
+ param.mode = KMSB_ALGO_AES_CBC;
+ param.iv = iv;
+ param.iv_len = 16;
+
+ ret = kmsb_aes_encrypt(key_idx, ¶m,
+ NULL, sizeof(input),
+ &output, &output_len);
+ BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
+
+ ret = kmsb_aes_encrypt(key_idx, ¶m,
+ input, 0,
+ &output, &output_len);
+ BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
+
+ param.iv = NULL;
+ ret = kmsb_aes_encrypt(key_idx, ¶m,
+ input, sizeof(input),
+ &output, &output_len);
+ BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
+
+ param.iv = iv;
+ param.iv_len = 0;
+ ret = kmsb_aes_encrypt(key_idx, ¶m,
+ input, sizeof(input),
+ &output, &output_len);
+ BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
+}
+
+BOOST_AUTO_TEST_CASE(kmsb_aes_decrypt_invalid_parameters_n,
+ * boost::unit_test::precondition(aes_mode_checker(KMSB_ALGO_AES_CBC)))
+{
+ kmsb_error_e ret = KMSB_ERROR_NONE;
+
+ unsigned char input[32] = {0x01};
+ unsigned char iv[16] = {0x02};
+ unsigned char *output = NULL;
+ unsigned int output_len = 0;
+ unsigned int key_idx = TEST_AES_KEY_IDX;
+
+ kmsb_aes_param_s param;
+ param.mode = KMSB_ALGO_AES_CBC;
+ param.iv = iv;
+ param.iv_len = 16;
+
+ ret = kmsb_aes_encrypt(key_idx, ¶m,
+ input, sizeof(input),
+ &output, &output_len);
+ BOOST_REQUIRE(ret == KMSB_ERROR_NONE);
+
+ ret = kmsb_aes_decrypt(key_idx, ¶m,
+ NULL, sizeof(input),
+ &output, &output_len);
+ BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
+
+ ret = kmsb_aes_decrypt(key_idx, ¶m,
+ input, 0,
+ &output, &output_len);
+ BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
+
+ ret = kmsb_aes_decrypt(key_idx, ¶m,
+ input, sizeof(input),
+ NULL, &output_len);
+ BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
+
+ ret = kmsb_aes_decrypt(key_idx, ¶m,
+ input, sizeof(input),
+ &output, NULL);
+ BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
+
+ param.iv = NULL;
+ ret = kmsb_aes_decrypt(key_idx, ¶m,
+ input, sizeof(input),
+ &output, &output_len);
+ BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
+
+ param.iv = iv;
+ param.iv_len = 0;
+ ret = kmsb_aes_encrypt(key_idx, ¶m,
+ input, sizeof(input),
+ &output, &output_len);
+ BOOST_REQUIRE(ret == KMSB_ERROR_INVALID_PARAMETER);
+
+ if (output) free(output);
+}
+
+bool _hash_curv_checker(kmsb_hash_algo_e hash, kmsb_ec_type_e ec)
+{
+ bool valid = true;
+ unsigned char input[32] = {0x01};
+ unsigned char *signature = NULL;
+ unsigned int signature_len = 0;
+
+ kmsb_error_e ret = KMSB_ERROR_NONE;
+ kmsb_sign_param_s param;
+ param.ec_type = ec;
+ param.hash_algo = hash;
+
+ int key_idx = 0;
+ switch (ec) {
+ case KMSB_EC_PRIME192V1:
+ key_idx = TEST_ECDSA_P192_KEY_IDX;
+ break;
+ case KMSB_EC_PRIME256V1:
+ key_idx = TEST_ECDSA_P256_KEY_IDX;
+ break;
+ case KMSB_EC_SECP384R1:
+ key_idx = TEST_ECDSA_S384_KEY_IDX;
+ break;
+ }
+
+ ret = kmsb_create_signature(key_idx, ¶m,
+ input, sizeof(input),
+ &signature, &signature_len);
+ if (ret == KMSB_ERROR_NOT_SUPPORTED)
+ valid = false;
+
+ BOOST_TEST_MESSAGE( "Check Support of hash mode(" << hash << "|" << ec << "): Valid="
+ << std::boolalpha << valid );
+ if (signature) free(signature);
+ return valid;
+}
+
+struct ec_checker
+{
+ ec_checker() {}
+ ec_checker(kmsb_hash_algo_e hash, kmsb_ec_type_e ec): _hash(hash), _ec(ec) {}
+ boost::test_tools::assertion_result operator()(boost::unit_test::test_unit_id)
+ {
+ return _hash_curv_checker(_hash, _ec);
+ }
+ kmsb_hash_algo_e _hash;
+ kmsb_ec_type_e _ec;
+};
+
+void test_kmsb_create_signature(int key_idx,