CKM: Check backend info
[platform/core/test/security-tests.git] / src / ckm / ckm-common.h
index d5f6081..07cf3cc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  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.
@@ -28,6 +28,7 @@
 #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>
 
@@ -41,7 +42,6 @@ extern const char *TEST_LABEL_5;
 
 // support for error printing
 const char * CKMCErrorToString(int error);
-const char * CKMErrorToString(int error);
 std::string CKMCReadableError(int error);
 
 // RUNNER_ASSERT wrappers
@@ -79,9 +79,6 @@ size_t list_size(const T* list)
     return size;
 }
 
-// scoped free
-typedef std::unique_ptr<char, void (*)(void *)> CharPtr;
-
 std::string getLabel();
 // returns process owner id
 std::string getOwnerIdFromSelf();
@@ -90,8 +87,12 @@ std::string aliasWithLabel(const char *label, const char *alias);
 
 std::string aliasWithLabelFromSelf(const char *alias);
 
-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:
@@ -145,6 +146,28 @@ void reset_user_data(uid_t user_id, const char *passwd);
 ckmc_raw_buffer_s prepare_message_buffer(const char * input);
 void check_alias_list(const CKM::AliasVector& expected);
 
+struct Info {
+    Info(const CKM::Alias &alias,
+         bool passwordProtected,
+         CKM::BackendId backend = CKM::BackendId::SW) :
+        alias(alias),
+        passwordProtected(passwordProtected),
+        backend(backend) {}
+
+    CKM::Alias alias;
+    bool passwordProtected;
+    CKM::BackendId backend;
+};
+typedef std::vector<Info> InfoVector;
+typedef std::unordered_map<std::string, Info> InfoMap;
+
+CKM::BackendId backend();
+
+void check_alias_info_list_helper(const InfoVector& expected,
+                                  const InfoMap& actual,
+                                  const std::string &userSmackLabel = {});
+void check_alias_info_list(const InfoVector& expected);
+
 typedef enum {
     ALIAS_KEY,
     ALIAS_CERT,
@@ -158,6 +181,7 @@ ckmc_raw_buffer_s* createRandomBufferCAPI(size_t random_bytes);
 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>
@@ -189,13 +213,18 @@ public:
 
 typedef std::shared_ptr<ckmc_raw_buffer_s> RawBufferPtr;
 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)
@@ -212,3 +241,30 @@ void test_no_observer(F&& func, Args... args)
         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[]);