[ckm] Add tc for optional password in one round 98/102598/5
authorKyungwook Tak <k.tak@samsung.com>
Tue, 6 Dec 2016 07:19:52 +0000 (16:19 +0900)
committerKyungwook Tak <k.tak@samsung.com>
Thu, 8 Dec 2016 10:11:33 +0000 (19:11 +0900)
Change-Id: Iaf2c566b578abc3759e60214109fbe856c737f76
Signed-off-by: Kyungwook Tak <k.tak@samsung.com>
src/ckm/unprivileged/capi-testcases.cpp

index 22a58a2..99a8085 100644 (file)
@@ -794,6 +794,60 @@ RUNNER_TEST(T3045_save_big_data_C_API, RemoveDataEnv<USER_APP>)
        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;