check_read(TEST_OBJECT1, self_label.c_str(), big_data.data(), BIG_SIZE, CKMC_ERROR_NONE);
}
+RUNNER_TEST(T3046_save_get_password_protected_data)
+{
+ const char *alias = "T3046_data_alias";
+ const char *password = "test-password";
+ std::vector<unsigned char> data = { 0x28, 0x34, 0x5a, 0xf3 };
+
+ ckmc_raw_buffer_s raw_buffer;
+ raw_buffer.data = data.data();
+ raw_buffer.size = data.size();
+
+ ckmc_policy_s policy;
+ policy.password = const_cast<char *>(password);
+ policy.extractable = 1;
+
+ int temp;
+
+ RUNNER_ASSERT_MSG(
+ CKMC_ERROR_NONE == (temp = ckmc_save_data(alias, raw_buffer, policy)),
+ CKMCReadableError(temp));
+
+ ckmc_raw_buffer_s *raw_buffer_stored = nullptr;
+
+ // test negative case first
+ temp = ckmc_get_data(alias, "invalid_password", &raw_buffer_stored);
+
+ // make scoped buffer for in case of success
+ std::unique_ptr<ckmc_raw_buffer_s, void(*)(ckmc_raw_buffer_s *)> scoped_buffer(
+ raw_buffer_stored, ckmc_buffer_free);
+
+ RUNNER_ASSERT_MSG(temp == CKMC_ERROR_AUTHENTICATION_FAILED,
+ "expected(" << CKMCErrorToString(CKMC_ERROR_AUTHENTICATION_FAILED)
+ << ") but ret(" << CKMCErrorToString(temp) << ")");
+
+ temp = ckmc_get_data(alias, password, &raw_buffer_stored);
+ // reset buffer with raw buffer of positive case
+ scoped_buffer.reset(raw_buffer_stored);
+ RUNNER_ASSERT_MSG(CKMC_ERROR_NONE == temp, CKMCReadableError(temp));
+
+ RUNNER_ASSERT_MSG(
+ raw_buffer_stored->size == raw_buffer.size,
+ "stored raw buffer size(" << raw_buffer_stored->size
+ << ") is differ to original raw buffer size(" << raw_buffer.size << ")");
+ for (size_t i = 0; i < raw_buffer_stored->size; ++i)
+ RUNNER_ASSERT_MSG(
+ raw_buffer_stored->data[i] == raw_buffer.data[i],
+ "stored raw buffer data[" << i << "](" << raw_buffer_stored->data[i]
+ << ") is differ to original raw buffer data["
+ << i << "](" << raw_buffer.data[i] << ")");
+
+ RUNNER_ASSERT_MSG(
+ CKMC_ERROR_NONE == (temp = ckmc_remove_alias(alias)),
+ CKMCReadableError(temp));
+}
+
RUNNER_TEST(T3050_deinit_C_API)
{
int temp;