2 * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License
17 * @file algo-params.cpp
18 * @author Krzysztof Jackiewicz (k.jackiewicz@samsung.com)
27 #include <dpl/test/test_runner.h>
28 #include <ckm-common.h>
29 #include <ckmc/ckmc-type.h>
30 #include <ckm/ckm-type.h>
34 struct CryptoAlgorithmWrapper : public CKM::CryptoAlgorithm
36 bool empty() const { return m_params.empty(); }
37 size_t count() const { return m_params.size(); }
40 ckmc_param_list_h* EMPTY_PLIST = NULL;
41 ckmc_param_list_h EMPTY_LIST = NULL;
43 const size_t DEFAULT_IV_LEN = 16;
44 const size_t DEFAULT_IV_LEN_BITS = 8*DEFAULT_IV_LEN;
46 RawBufferPtr IV(createRandomBufferCAPI(DEFAULT_IV_LEN), ckmc_buffer_free);
48 void assert_list_empty(ckmc_param_list_h list)
50 const CryptoAlgorithmWrapper* caw = reinterpret_cast<const CryptoAlgorithmWrapper*>(list);
51 RUNNER_ASSERT_MSG(caw->empty(), "Parameter list is not empty");
54 void check_int_param(ckmc_param_list_h list,
55 ckmc_param_name_e name,
58 RUNNER_ASSERT_MSG(list, "List is NULL");
60 int ret = ckmc_param_list_get_integer(list, name, &got);
61 RUNNER_ASSERT_MSG(ret == CKMC_ERROR_NONE, "No such integer param: " << name);
62 RUNNER_ASSERT_MSG(expected == got,
63 "Param " << name << " expected value: " << expected << " got: " << got);
66 void check_buffer_param(ckmc_param_list_h list,
67 ckmc_param_name_e name,
68 const ckmc_raw_buffer_s& expected)
70 RUNNER_ASSERT_MSG(list, "List is NULL");
71 ckmc_raw_buffer_s* got = NULL;
72 int ret = ckmc_param_list_get_buffer(list, name, &got);
73 RUNNER_ASSERT_MSG(ret == CKMC_ERROR_NONE, "No such buffer param: " << name);
74 assert_buffers_equal(expected, *got);
77 void assert_param_count(ckmc_param_list_h list, size_t expected)
79 RUNNER_ASSERT_MSG(list, "List is NULL");
80 const CryptoAlgorithmWrapper* caw = reinterpret_cast<const CryptoAlgorithmWrapper*>(list);
81 size_t count = caw->count();
82 RUNNER_ASSERT_MSG(count == expected, "Expected param count: " << expected << " got: " << count);
85 } // anonymous namespace
87 RUNNER_TEST_GROUP_INIT(CKM_ALGO_PARAMS);
89 RUNNER_TEST(TAP_0010_new_invalid_param)
91 assert_invalid_param(ckmc_param_list_new, EMPTY_PLIST);
94 RUNNER_TEST(TAP_0020_free_invalid_param)
96 ckmc_param_list_free(EMPTY_LIST); // should not throw/segfault
99 RUNNER_TEST(TAP_0030_new_free)
101 ParamListPtr list = createParamListPtr();
102 assert_list_empty(list.get());
105 RUNNER_TEST(TAP_0040_add_integer_invalid_param)
107 assert_invalid_param(ckmc_param_list_set_integer,
109 CKMC_PARAM_ALGO_TYPE,
112 ParamListPtr list = createParamListPtr();
113 assert_invalid_param(ckmc_param_list_set_integer,
115 static_cast<ckmc_param_name_e>(-1),
117 assert_list_empty(list.get());
120 RUNNER_TEST(TAP_0050_add_buffer_invalid_param)
122 assert_invalid_param(ckmc_param_list_set_buffer,
127 ParamListPtr list = createParamListPtr();
128 assert_invalid_param(ckmc_param_list_set_buffer,
132 assert_list_empty(list.get());
134 ckmc_raw_buffer_s buffer;
135 buffer.data = nullptr;
137 assert_invalid_param(ckmc_param_list_set_buffer,
141 assert_list_empty(list.get());
143 assert_invalid_param(ckmc_param_list_set_buffer,
145 static_cast<ckmc_param_name_e>(-1),
147 assert_list_empty(list.get());
150 RUNNER_TEST(TAP_0060_add_param)
152 ParamListPtr list = createParamListPtr();
153 assert_positive(ckmc_param_list_set_integer,
155 CKMC_PARAM_ALGO_TYPE,
157 check_int_param(list.get(), CKMC_PARAM_ALGO_TYPE, CKMC_ALGO_AES_GCM);
158 assert_param_count(list.get(),1);
160 RawBufferPtr buffer(createRandomBufferCAPI(DEFAULT_IV_LEN), ckmc_buffer_free);
161 assert_positive(ckmc_param_list_set_buffer,
165 check_int_param(list.get(), CKMC_PARAM_ALGO_TYPE, CKMC_ALGO_AES_GCM);
166 check_buffer_param(list.get(), CKMC_PARAM_ED_IV, *buffer.get());
167 assert_param_count(list.get(),2);
170 RUNNER_TEST(TAP_0070_generate_invalid_param)
172 assert_invalid_param(ckmc_generate_new_params, static_cast<ckmc_algo_type_e>(-1), EMPTY_PLIST);
175 RUNNER_TEST(TAP_0080_generate)
177 ckmc_param_list_h handle = NULL;
178 assert_positive(ckmc_generate_new_params, CKMC_ALGO_AES_CTR, &handle);
179 ParamListPtr list = ParamListPtr(handle, ckmc_param_list_free);
180 check_int_param(list.get(), CKMC_PARAM_ALGO_TYPE, CKMC_ALGO_AES_CTR);
181 check_int_param(list.get(), CKMC_PARAM_ED_CTR_LEN, DEFAULT_IV_LEN_BITS);
183 CKM::CryptoAlgorithm* ca = reinterpret_cast<CKM::CryptoAlgorithm*>(list.get());
185 bool ret = ca->getParam(CKM::ParamName::ED_IV, iv);
186 RUNNER_ASSERT_MSG(!ret, "ED_IV param should not be present");
187 assert_param_count(list.get(),2);