#include <ckm-common.h>
#include <string>
+#include <fstream>
#include <string.h>
#include <stdio.h>
#include <stddef.h>
const int GROUP_APP = 5000;
const char* USER_PASS = "user-pass";
const char* TEST_LABEL = "test_label";
+const char *const TEST_OBJECT1 = "OBJECT1";
+const std::string TEST_ALIAS1 = aliasWithLabel(TEST_LABEL,TEST_OBJECT1);
const char* TEST_SYSTEM_ALIAS = "system-alias-1";
const char* TEST_DATA = "ABCD";
} // namespace anonymous
RUNNER_TEST(T3041_init_C_API)
{
- int temp;
remove_user_data(0);
- RUNNER_ASSERT_MSG(
- CKMC_ERROR_NONE == (temp = ckmc_unlock_user_key(USER_APP, "simple-password")),
- CKMCReadableError(temp));
+ reset_user_data(USER_APP, "simple-password");
}
RUNNER_TEST(T3042_save_get_bin_data_C_API)
CKMCReadableError(temp));
}
-RUNNER_TEST(T3045_deinit_C_API)
+RUNNER_TEST(T3045_save_big_data_C_API)
+{
+ GarbageCollector gc;
+ const size_t BIG_SIZE = 5000000; // can't go much further because of stack size limit
+ ScopedAccessProvider ap(TEST_LABEL, USER_APP, GROUP_APP);
+
+ char big_data[BIG_SIZE];
+ std::ifstream is("/dev/urandom", std::ifstream::binary);
+ if(is)
+ is.read(big_data, BIG_SIZE);
+
+ RUNNER_ASSERT_MSG(is,
+ "Only " << is.gcount() << "/" << BIG_SIZE << " bytes read from /dev/urandom");
+
+ gc.save(TEST_ALIAS1.c_str(), big_data, BIG_SIZE, CKMC_ERROR_NONE);
+
+ check_read(TEST_OBJECT1, TEST_LABEL, big_data, BIG_SIZE, CKMC_ERROR_NONE);
+}
+
+RUNNER_TEST(T3050_deinit_C_API)
{
int temp;
void save_data(const char* alias, const char *data, int expected_err)
{
+ save_data(alias, data, strlen(data), expected_err);
+}
+
+void save_data(const char* alias, const char *data, size_t len, int expected_err = CKMC_ERROR_NONE)
+{
RUNNER_ASSERT(alias);
RUNNER_ASSERT(data);
ckmc_raw_buffer_s buffer;
buffer.data = reinterpret_cast<unsigned char*>(const_cast<char*>(data));
- buffer.size = strlen(data);
+ buffer.size = len;
ckmc_policy_s policy;
policy.password = NULL;
policy.extractable = true;
void GarbageCollector::save(const char* alias, const char *data, int expected_err)
{
- save_data(alias, data, expected_err);
+ save(alias, data, strlen(data), expected_err);
+}
+
+void GarbageCollector::save(const char* alias, const char *data, size_t len, int expected_err)
+{
+ save_data(alias, data, len, expected_err);
if(CKMC_ERROR_NONE == expected_err)
{
<< CKMCReadableError(ret));
}
-void check_read(const char* alias, const char *label, const char *test_data, int expected_code)
+void check_read(const char* alias,
+ const char *label,
+ const char *test_data,
+ size_t len,
+ int expected_code)
{
ckmc_raw_buffer_s* buffer = NULL;
int ret = ckmc_get_data(aliasWithLabel(label, alias).c_str(), NULL, &buffer);
{
// compare data with expected
RUNNER_ASSERT_MSG(
- buffer->size == strlen(test_data),
- "Extracted data length do not match expected data length (encrypted?).");
+ buffer->size == len,
+ "Extracted data length do not match expected data length (encrypted?):" <<
+ buffer->size << "!=" << len);
RUNNER_ASSERT_MSG(
memcmp(const_cast<const char*>(reinterpret_cast<char*>(buffer->data)),
}
}
+void check_read(const char* alias, const char *label, const char *test_data, int expected_code)
+{
+ check_read(alias, label, test_data, strlen(test_data), expected_code);
+}
+
void check_read_allowed(const char* alias, const char *data)
{
// try to read previously saved data - label taken implicitly
};
void save_data(const char* alias, const char *data, int expected_err = CKMC_ERROR_NONE);
+void save_data(const char* alias, const char *data, size_t len, int expected_err);
class ScopedSaveData
{
public:
{
public:
void save(const char* alias, const char *data, int expected_err = CKMC_ERROR_NONE);
+ void save(const char* alias, const char *data, size_t len, int expected_err);
virtual ~GarbageCollector();
private:
void check_remove_allowed(const char* alias);
void check_remove_denied(const char* alias);
void check_remove_not_visible(const char* alias);
-void check_read(const char* alias, const char *label, const char *test_data, int expected_code = CKMC_ERROR_NONE);
+void check_read(const char* alias,
+ const char *label,
+ const char *test_data,
+ size_t len,
+ int expected_code = CKMC_ERROR_NONE);
+void check_read(const char* alias,
+ const char *label,
+ const char *test_data,
+ int expected_code = CKMC_ERROR_NONE);
void check_read_allowed(const char* alias, const char *data);
void check_read_not_visible(const char* alias);
void allow_access(const char* alias, const char* accessor, int permissionMask);