/*
- * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2000-2020 Samsung Electronics Co., Ltd. All rights reserved
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <string>
#include <memory>
+#include <stdexcept>
#include <ckm/ckm-type.h>
+#include <ckm/ckm-manager-async.h>
#include <ckmc/ckmc-type.h>
#include <ckmc/ckmc-error.h>
+#include <ckmc/ckmc-manager.h>
#include <tests_common.h>
#include <sys/types.h>
+extern const std::string SMACK_USER_APP_PREFIX;
+extern const char *SYSTEM_LABEL;
+extern const char *TEST_LABEL;
+extern const char *TEST_LABEL_2;
+extern const char *TEST_LABEL_3;
+extern const char *TEST_LABEL_4;
+extern const char *TEST_LABEL_5;
+
// support for error printing
const char * CKMCErrorToString(int error);
std::string CKMCReadableError(int error);
return size;
}
-
-// service lifecycle management
-enum ServiceIdx {
- LISTENER,
- MANAGER
-};
-void start_service(ServiceIdx idx);
-void stop_service(ServiceIdx idx);
-
-
-// scoped free
-typedef std::unique_ptr<char, void (*)(void *)> CharPtr;
-
-// returns process label
-CharPtr get_label();
+std::string getLabel();
+// returns process owner id
+std::string getOwnerIdFromSelf();
std::string aliasWithLabel(const char *label, const char *alias);
-// changes process label
-void change_label(const char* label);
+std::string aliasWithLabelFromSelf(const char *alias);
-// changes process label upon construction and restores it upon destruction
-class ScopedLabel
-{
-public:
- ScopedLabel(const char* label);
- ~ScopedLabel();
-
-private:
- CharPtr m_original_label;
-};
-
-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);
+void save_data(const char* alias, const char *data, size_t len, const char* password,
+ int expected_err = CKMC_ERROR_NONE, bool exportable = true);
+void save_data(const char* alias, const char *data, int expected_err = CKMC_ERROR_NONE,
+ bool exportable = true);
+void save_data(const char* alias, const char *data, size_t len,
+ int expected_err = CKMC_ERROR_NONE, bool exportable = true);
class ScopedSaveData
{
public:
std::string m_alias;
};
-class GarbageCollector
-{
-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);
- void add(const char* alias);
- virtual ~GarbageCollector();
-
-private:
- struct save_item {
- std::string item_alias;
- std::string owner_label;
- uid_t owner_uid;
- gid_t owner_gid;
- };
- std::vector<save_item> m_garbage;
-};
-
class ScopedDBUnlock
{
public:
ckmc_raw_buffer_s prepare_message_buffer(const char * input);
void check_alias_list(const CKM::AliasVector& expected);
+struct PasswordInfo {
+ PasswordInfo(const CKM::Alias &alias, bool passwordProtected) : alias(alias), passwordProtected(passwordProtected) {}
+
+ CKM::Alias alias;
+ bool passwordProtected;
+};
+typedef std::vector<PasswordInfo> PasswordInfoVector;
+
+void check_alias_info_list_helper(const PasswordInfoVector& expected,
+ const std::unordered_map<std::string, bool>& actual,
+ const std::string &userSmackLabel = {});
+void check_alias_info_list(const PasswordInfoVector& expected);
+
typedef enum {
ALIAS_KEY,
ALIAS_CERT,
ckmc_key_s *generate_AES_key(size_t lengthBits, const char *passwd);
void validate_AES_key(ckmc_key_s *analyzed);
void compare_AES_keys(ckmc_key_s *first, ckmc_key_s *second); // true if equal
+CKM::Policy generate_ckm_policy(int iterator_nr); // generates policy based on given number
// Test env class for database cleanup. Pass database uids to cleanup before and after test
template <uid_t ...Args>
};
typedef std::shared_ptr<ckmc_raw_buffer_s> RawBufferPtr;
-typedef std::shared_ptr<ckmc_param_list_s> ParamListPtr;
+typedef std::shared_ptr<struct __ckmc_param_list> ParamListPtr;
+typedef std::shared_ptr<struct __ckmc_cipher_ctx> CipherCtxPtr;
ParamListPtr createParamListPtr();
+void setParam(ParamListPtr& params, ckmc_param_name_e name, ckmc_raw_buffer_s* buffer);
+void setParam(ParamListPtr& params, ckmc_param_name_e name, uint64_t integer);
-void assert_buffers_equal(const ckmc_raw_buffer_s b1, const ckmc_raw_buffer_s b2, bool equal=true);
+void assert_buffers_equal(const ckmc_raw_buffer_s* b1, const ckmc_raw_buffer_s* b2, bool equal=true);
RawBufferPtr create_raw_buffer(ckmc_raw_buffer_s* buffer);
+
+CipherCtxPtr create_cipher_ctx(ckmc_cipher_ctx_h ctx);
+
+
+template <typename F, typename... Args>
+void test_no_observer(F&& func, Args... args)
+{
+ CKM::ManagerAsync::ObserverPtr obs;
+ CKM::ManagerAsync mgr;
+
+ try {
+ (mgr.*func)(obs, args...);
+ RUNNER_ASSERT_MSG(false, "function() should have thrown an exception");
+ } catch (const std::invalid_argument& e) {
+ RUNNER_ASSERT(true);
+ } catch (...) {
+ RUNNER_ASSERT_MSG(false, "Unexpected exception");
+ }
+}
+
+class AliasRemover
+{
+public:
+ AliasRemover(const char* alias) : alias(alias) {}
+ ~AliasRemover() {
+ ckmc_remove_alias(alias);
+ }
+
+ AliasRemover(AliasRemover&& other) {
+ alias = other.alias;
+ other.alias = nullptr;
+ }
+
+ AliasRemover& operator=(AliasRemover&& other) {
+ if (&other == this)
+ return *this;
+
+ alias = other.alias;
+ other.alias = nullptr;
+ }
+
+private:
+ const char* alias;
+};
+
+void require_default_user(char *argv[]);