1 /*
2 * Copyright (C) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include <cstdint>
16 #include <cstdlib>
17 #include "gtest/gtest.h"
18 #include "gmock/gmock.h"
19 #include "securec.h"
20 #include "hichain.h"
21 #include "huks_adapter.h"
22 #include "distribution.h"
23 #include "auth_info.h"
24
25
26 #define LOG(format, ...) (printf(format"\n", ##__VA_ARGS__))
27
28 using namespace std;
29 using namespace testing::ext;
30
31 namespace {
32 const int KEY_LEN = 16;
33 const int AUTH_ID_LENGTH = 64;
34
35 static struct session_identity g_server_identity = {
36 153666603,
37 {strlen("aaa.bbbb.ccc"), "aaa.bbbb.ccc"},
38 {strlen("CarDevice"), "CarDevice"},
39 0
40 };
41
42
43 static struct hc_pin g_test_pin = {strlen("123456"), "123456"};
44
45 static struct hc_auth_id g_test_client_auth_id;
46 static struct hc_auth_id g_test_server_auth_id;
47
48 static int32_t g_result;
49
50 uint8_t g_testPhoneId[65] = {"14bb6543b893a3250f5793fbbbd48be56641505dc6514be1bb37b032903ebc67"};
51 uint8_t g_testCarId[65] = {"d37cd7ceb894f4393a299ef852b4fc35a1a0d77c48a5b3e0b2599ab1d69b23a6"};
52
InitHcAuthId()53 void InitHcAuthId()
54 {
55 memcpy_s(g_test_client_auth_id.auth_id, AUTH_ID_LENGTH, g_testPhoneId, AUTH_ID_LENGTH);
56 g_test_client_auth_id.length = AUTH_ID_LENGTH;
57
58 memcpy_s(g_test_server_auth_id.auth_id, AUTH_ID_LENGTH, g_testCarId, AUTH_ID_LENGTH);
59 g_test_server_auth_id.length = AUTH_ID_LENGTH;
60 return ;
61 }
62
Transmit(const struct session_identity * identity,const void * data,uint32_t length)63 static void Transmit(const struct session_identity *identity, const void *data, uint32_t length)
64 {
65 LOG("--------Transmit--------");
66 LOG("identity session_id[%d] package_name[%s]", identity->session_id, identity->package_name.name);
67 LOG("length[%u]", length);
68 LOG("--------Transmit--------");
69 }
70
GetProtocolParams(const struct session_identity * identity,int32_t operationCode,struct hc_pin * pin,struct operation_parameter * para)71 static void GetProtocolParams(const struct session_identity *identity, int32_t operationCode,
72 struct hc_pin *pin, struct operation_parameter *para)
73 {
74 LOG("--------GetProtocolParams--------");
75 LOG("identity session_id[%d] package_name[%s]", identity->session_id, identity->package_name.name);
76 LOG("operationCode[%d]", operationCode);
77 pin->length = g_test_pin.length;
78 memcpy_s(pin->pin, pin->length, g_test_pin.pin, pin->length);
79 para->self_auth_id = g_test_server_auth_id;
80 para->peer_auth_id = g_test_client_auth_id;
81 para->key_length = KEY_LEN;
82 LOG("--------GetProtocolParams--------");
83 }
84
SetSessionKey(const struct session_identity * identity,const struct hc_session_key * sessionKey)85 static void SetSessionKey(const struct session_identity *identity, const struct hc_session_key *sessionKey)
86 {
87 LOG("--------SetSessionKey--------");
88 LOG("identity session_id[%d] package_name[%s]", identity->session_id, identity->package_name.name);
89 LOG("sessionKey[%s]", sessionKey->session_key);
90 LOG("--------SetSessionKey--------");
91 }
92
SetServiceResult(const struct session_identity * identity,int32_t result)93 static void SetServiceResult(const struct session_identity *identity, int32_t result)
94 {
95 LOG("--------SetServiceResult--------");
96 LOG("identity session_id[%d] package_name[%s]", identity->session_id, identity->package_name.name);
97 LOG("result[%d]", result);
98 LOG("--------SetServiceResult--------");
99 g_result = result;
100 }
101
ConfirmReceiveRequest(const struct session_identity * identity,int32_t operationCode)102 static int32_t ConfirmReceiveRequest(const struct session_identity *identity, int32_t operationCode)
103 {
104 LOG("--------ConfirmReceiveRequest--------");
105 LOG("identity session_id[%d] package_name[%s]", identity->session_id, identity->package_name.name);
106 LOG("operationCode[%d]", operationCode);
107 LOG("--------ConfirmReceiveRequest--------");
108 return HC_OK;
109 }
110
111 class HichainPakeTest : public testing::Test {
112 public:
113 static void SetUpTestCase(void);
114 static void TearDownTestCase(void);
115 void SetUp();
116 void TearDown();
117 };
118
SetUpTestCase(void)119 void HichainPakeTest::SetUpTestCase(void) {}
TearDownTestCase(void)120 void HichainPakeTest::TearDownTestCase(void) {}
SetUp()121 void HichainPakeTest::SetUp()
122 {
123 InitHcAuthId();
124 }
TearDown()125 void HichainPakeTest::TearDown() {}
126
127 uint8_t g_dataStr011[] = {"{\"message\":32769,\"payload\":{\"version\":"
128 "{\"currentVersion\":\"1.0.0\",\"minVersion\":\"1.0.0\"},"
129 "\"challenge\":\"76539E5634EDA735A94845C3A4F356D6\","
130 "\"salt\":\"025E4B3B2DD3B0E67395C760008A9154\","
131 "\"epk\":\"24EBF8D727B19E8A43B20D22F744113C8B49B226D834B2E3C9CB5B0378732D6CF7C658BFB468682A6762"
132 "2D5FE061F4D8102E4D8912377AA785919C529F0C1289F2188E641C6DC626054FC30304DC804FD9F059F5F5D8CEAA29"
133 "A44814F10CC2A770C5BEB0BE86559E4FA85AD6E480DC2A627F5B28626E23B613EAC21101FF1C1DDA76E35A67A5A70B"
134 "C24ECFD0C92F4F69A5B73FD67BE3EFC0904709BEC26490E21A4A04E29211DF393559B4A71F7368B68F529806DB90C5"
135 "8315EDFF0A1738E26E82A54D2030A5B9B270DCF01A2377300135C55B3F6B273CF157246D0DF928D6E3E2886E79ECEB"
136 "F69F98806C37A6128E4E93C9C43DD01B53963458AF60FA1C0E497F5FD4E807DA4F804EE145967D74792AD9B135C2F3"
137 "A25FAA3427B3666C9D30539F008915A53D1FE2E2DDDCFCFD0815976332575F9EDBC9F4946A83116C7A29C38AC1A5FD"
138 "8E5B894DCB4A1A29672D2647D6C734D4EA74E4A077D3403CAD0CA15318D9560FFF163D71B2991D70148F97CD524244"
139 "7DF2B23C856D734CDD39220EC0\"}}"};
140
141 uint8_t g_dataStr012[] = {"{\"message\":32770,\"payload\":{"
142 "\"kcfData\":\"463853720FFFC312084B9FF288E17"
143 "C3F3D8B9D8F2A609D349CAA712AAD926C26\"}}"};
144
145 uint8_t g_dataStr013[] = {"{\"message\":32771,\"payload\":{\"exAuthInfo\":\"63B2AC76C0645224DA7E395DBCC29D9F"
146 "9AF5E0ABEEC94048962F838D12C501B22193E1B2AD43A7D9443A80EA92C4BD4F53B14C867DD00308167CB2803754"
147 "D4A909C0666B231C17736E0C5BE5A21746BE53AF0E72BE30DC56D56752823D9453F025DD3A56904EDBF54FB16667"
148 "82623DDF7BA29A1FA3CFE34864D4AF958EA616785AB7F06DBC01675ADB19EB12D8CA5CF312AEECE9016CA92BC9A2"
149 "69FE9BA2C579C7EA69F34855FDF689B3153BBFF618464612C6CC8984167842316A7E6E38813CC901DFBE4BA0767C"
150 "914B03AD0CF221BC319860A018078F74454DE18B0A144F812A3560D1A3223084A0BE48F737B49840A331B037CC13"
151 "DF82BFC85C1B95890907972897B827C237071A8D706CE41F9E8B045E3FDD9850BEBB50BFA84721B6E64A23557D0F"
152 "572B33D18FD8DE25C0B6C57F35AB9931EE02\"}}"};
153
154 static HWTEST_F(HichainPakeTest, ReceiveDataTest001, TestSize.Level2)
155 {
156 struct hc_call_back callBack = {
157 Transmit,
158 GetProtocolParams,
159 SetSessionKey,
160 SetServiceResult,
161 ConfirmReceiveRequest
162 };
163
164 const struct operation_parameter params = {g_test_server_auth_id, g_test_client_auth_id, KEY_LEN};
165 hc_handle server = get_instance(&g_server_identity, HC_CENTRE, &callBack);
166 ASSERT_TRUE(server != nullptr);
167 int32_t ret = start_pake(server, ¶ms);
168 EXPECT_EQ(ret, HC_OK);
169 struct uint8_buff data001 = {
170 g_dataStr011,
171 sizeof(g_dataStr011),
172 strlen(reinterpret_cast<char *>(g_dataStr011))
173 };
174 ret = receive_data(server, &data001);
175 EXPECT_EQ(ret, HC_OK);
176 EXPECT_EQ(g_result, KEY_AGREEMENT_PROCESSING);
177 struct uint8_buff data002 = {
178 g_dataStr012,
179 sizeof(g_dataStr012),
180 strlen(reinterpret_cast<char *>(g_dataStr012))
181 };
182 ret = receive_data(server, &data002);
183 EXPECT_EQ(ret, HC_OK);
184 struct uint8_buff data003 = {
185 g_dataStr013,
186 sizeof(g_dataStr013),
187 strlen(reinterpret_cast<char *>(g_dataStr013))
188 };
189 ret = receive_data(server, &data003);
190 EXPECT_EQ(ret, HC_OK);
191 EXPECT_EQ(g_result, END_SUCCESS);
192 destroy(&server);
193 }
194
195 class HichainStructTest : public testing::Test {
196 public:
197 static void SetUpTestCase(void);
198 static void TearDownTestCase(void);
199 void SetUp();
200 void TearDown();
201 };
202
SetUpTestCase(void)203 void HichainStructTest::SetUpTestCase(void) {}
TearDownTestCase(void)204 void HichainStructTest::TearDownTestCase(void) {}
SetUp()205 void HichainStructTest::SetUp() {}
TearDown()206 void HichainStructTest::TearDown() {}
207
208 static HWTEST_F(HichainStructTest, free_auth_start_request_test001, TestSize.Level2)
209 {
210 void *obj = nullptr;
211 free_auth_start_request(obj);
212 obj = static_cast<void*>(MALLOC(sizeof(char)));
213 free_auth_start_request(obj);
214 obj = nullptr;
215 EXPECT_EQ(obj, nullptr);
216 }
217
218
219 static HWTEST_F(HichainStructTest, free_exchange_request_test001, TestSize.Level2)
220 {
221 void *obj = nullptr;
222 free_exchange_request(obj);
223 exchange_request_data *data = static_cast<exchange_request_data *>(MALLOC(sizeof(exchange_request_data)));
224 (void)memset_s(data, sizeof(*data), 0, sizeof(*data));
225 free_exchange_request(data);
226 data = nullptr;
227 EXPECT_EQ(data, nullptr);
228 }
229
230
231 static HWTEST_F(HichainStructTest, parse_header_test001, TestSize.Level2)
232 {
233 std::string data_str = "{\"message\":1,\"payload\":{\"version\":{\"currentVersion\":\"1.0.0\","
234 "\"minVersion\":\"1.0.0\"},\"support256mod\":true,\"operationCode\":1}}";
235 int32_t ret = parse_header(data_str.c_str());
236 EXPECT_EQ(ret, 1);
237 }
238
239 static HWTEST_F(HichainStructTest, parse_header_test002, TestSize.Level2)
240 {
241 int32_t ret = parse_header(nullptr);
242 EXPECT_EQ(ret, -1);
243 }
244
245
246 static HWTEST_F(HichainStructTest, parse_payload_test001, TestSize.Level2)
247 {
248 std::string data_str = "{\"payload\":{\"support256mod\":true,\"operationCode\":1}}";
249 void *ret = parse_payload(data_str.c_str(), JSON_OBJECT_DATA);
250 EXPECT_NE(ret, nullptr);
251 }
252 }