• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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, &params);
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 }