• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 
16 #include <cstring>
17 #include <gtest/gtest.h>
18 #include <securec.h>
19 
20 #include "lnn_huks_utils.h"
21 #include "softbus_adapter_mem.h"
22 #include "softbus_error_code.h"
23 
24 namespace OHOS {
25 using namespace testing::ext;
26 
27 static constexpr char KEY_ALIAS[] = "dsoftbus_test_key_alias";
28 static constexpr char RANDOM_KEY[] = "b0d8bfed90d1e018c84f0a1abd4cbcc7f33481b42476719b401b1d70d3998a7c";
29 constexpr uint32_t TIME_SIZE = 3;
30 
31 static struct HksBlob g_keyAlias = { 0 };
32 
33 class LNNHuksUtilsTest : public testing::Test {
34 public:
35     static void SetUpTestCase();
36     static void TearDownTestCase();
37     void SetUp();
38     void TearDown();
39 };
40 
SetUpTestCase()41 void LNNHuksUtilsTest::SetUpTestCase()
42 {
43     g_keyAlias.size = strlen(KEY_ALIAS);
44     g_keyAlias.data = (uint8_t *)KEY_ALIAS;
45 
46     EXPECT_EQ(LnnInitHuksInterface(), SOFTBUS_OK);
47 }
48 
TearDownTestCase()49 void LNNHuksUtilsTest::TearDownTestCase()
50 {
51     LnnDeinitHuksInterface();
52 }
53 
SetUp()54 void LNNHuksUtilsTest::SetUp() { }
55 
TearDown()56 void LNNHuksUtilsTest::TearDown()
57 {
58     (void)LnnDeleteKeyByHuks(&g_keyAlias);
59 }
60 
61 /*
62  * @tc.name: Generate_Key_Test_001
63  * @tc.desc: generate key test
64  * @tc.type: FUNC
65  * @tc.require: I5RHYE
66  */
67 HWTEST_F(LNNHuksUtilsTest, Generate_Key_Test_01, TestSize.Level0)
68 {
69     struct HksBlob keyAlias = { 0 };
70     keyAlias.size = strlen(KEY_ALIAS);
71     keyAlias.data = (uint8_t *)KEY_ALIAS;
72 
73     EXPECT_EQ(LnnGenerateKeyByHuks(&keyAlias), SOFTBUS_OK);
74 }
75 
76 /*
77  * @tc.name: Generate_Key_Test_002
78  * @tc.desc: generate key twice test
79  * @tc.type: FUNC
80  * @tc.require: I5RHYE
81  */
82 HWTEST_F(LNNHuksUtilsTest, Generate_Key_Test_02, TestSize.Level0)
83 {
84     struct HksBlob keyAlias = { 0 };
85     keyAlias.size = strlen(KEY_ALIAS);
86     keyAlias.data = (uint8_t *)KEY_ALIAS;
87 
88     EXPECT_EQ(LnnGenerateKeyByHuks(&keyAlias), SOFTBUS_OK);
89     EXPECT_EQ(LnnGenerateKeyByHuks(&keyAlias), SOFTBUS_OK);
90 }
91 
92 /*
93  * @tc.name: Generate_Random_Test_001
94  * @tc.desc: generate randowm key test
95  * @tc.type: FUNC
96  * @tc.require: I5RHYE
97  */
98 HWTEST_F(LNNHuksUtilsTest, Generate_Random_Test_01, TestSize.Level0)
99 {
100     uint8_t randomKey[LNN_HUKS_AES_COMMON_SIZE] = { 0 };
101 
102     EXPECT_EQ(LnnGenerateRandomByHuks(randomKey, LNN_HUKS_AES_COMMON_SIZE), SOFTBUS_OK);
103 }
104 
105 /*
106  * @tc.name: Encrypt_Data_Test_001
107  * @tc.desc: encrypt data test
108  * @tc.type: FUNC
109  * @tc.require: I5RHYE
110  */
111 HWTEST_F(LNNHuksUtilsTest, Encrypt_Data_Test_01, TestSize.Level0)
112 {
113     struct HksBlob inData = { 0 };
114     inData.size = strlen(RANDOM_KEY);
115     inData.data = (uint8_t *)RANDOM_KEY;
116 
117     struct HksBlob outData = { 0 };
118     outData.data = (uint8_t *)SoftBusCalloc(LNN_HUKS_AES_COMMON_SIZE);
119     ASSERT_NE(outData.data, nullptr);
120 
121     EXPECT_EQ(LnnGenerateKeyByHuks(&g_keyAlias), SOFTBUS_OK);
122     EXPECT_EQ(LnnEncryptDataByHuks(&g_keyAlias, &inData, &outData), SOFTBUS_OK);
123     EXPECT_NE(memcmp(inData.data, outData.data, inData.size), 0);
124     SoftBusFree(outData.data);
125 }
126 
127 /*
128  * @tc.name: LNN_GENERATE_CEKEY_BY_HUKS_Test_001
129  * @tc.desc: keyAlias data is nullptr
130  * @tc.type: FUNC
131  * @tc.require: I5RHYE
132  */
133 HWTEST_F(LNNHuksUtilsTest, LNN_GENERATE_CEKEY_BY_HUKS_Test_001, TestSize.Level0)
134 {
135     struct HksBlob *keyAlias = nullptr;
136     int32_t ret = LnnGenerateCeKeyByHuks(keyAlias);
137     EXPECT_EQ(ret, SOFTBUS_INVALID_PARAM);
138 }
139 
140 /*
141  * @tc.name: LNN_DELETE_CEKEY_BY_HUKS_Test_001
142  * @tc.desc: keyAlias data is nullptr
143  * @tc.type: FUNC
144  * @tc.require: I5RHYE
145  */
146 HWTEST_F(LNNHuksUtilsTest, LNN_DELETE_CEKEY_BY_HUKS_Test_001, TestSize.Level0)
147 {
148     struct HksBlob *keyAlias = nullptr;
149     int32_t ret = LnnDeleteCeKeyByHuks(keyAlias);
150     EXPECT_EQ(ret, SOFTBUS_INVALID_PARAM);
151 }
152 
153 /*
154  * @tc.name: LNN_CE_ENCRYPT_DATA_BY_HUKS_Test_001
155  * @tc.desc: keyAlias is nullptr
156  * @tc.type: FUNC
157  * @tc.require: I5RHYE
158  */
159 HWTEST_F(LNNHuksUtilsTest, LNN_CE_ENCRYPT_DATA_BY_HUKS_Test_001, TestSize.Level0)
160 {
161     struct HksBlob *keyAlias = nullptr;
162     struct HksBlob inData = { 0 };
163     inData.size = TIME_SIZE;
164     inData.data = (uint8_t *)SoftBusCalloc(inData.size);
165     if (inData.data == nullptr) {
166         GTEST_LOG_(INFO) << "calloc inData data fail";
167         return;
168     }
169     struct HksBlob outData = { 0 };
170     outData.size = TIME_SIZE;
171     outData.data = (uint8_t *)SoftBusCalloc(outData.size);
172     if (outData.data == nullptr) {
173         GTEST_LOG_(INFO) << "calloc outData data fail";
174         SoftBusFree(inData.data);
175         return;
176     }
177     int32_t ret = LnnCeEncryptDataByHuks(keyAlias, &inData, &outData);
178     EXPECT_EQ(ret, SOFTBUS_INVALID_PARAM);
179     SoftBusFree(outData.data);
180     SoftBusFree(inData.data);
181 }
182 
183 /*
184  * @tc.name: LNN_CE_ENCRYPT_DATA_BY_HUKS_Test_002
185  * @tc.desc: inData is nullptr
186  * @tc.type: FUNC
187  * @tc.require: I5RHYE
188  */
189 HWTEST_F(LNNHuksUtilsTest, LNN_CE_ENCRYPT_DATA_BY_HUKS_Test_002, TestSize.Level0)
190 {
191     struct HksBlob keyAlias = { 0 };
192     keyAlias.size = TIME_SIZE;
193     keyAlias.data = (uint8_t *)SoftBusCalloc(keyAlias.size);
194     if (keyAlias.data == nullptr) {
195         GTEST_LOG_(INFO) << "calloc keyAlias data fail";
196         return;
197     }
198     struct HksBlob *inData = nullptr;
199     struct HksBlob outData = { 0 };
200     outData.size = TIME_SIZE;
201     outData.data = (uint8_t *)SoftBusCalloc(outData.size);
202     if (outData.data == nullptr) {
203         GTEST_LOG_(INFO) << "calloc outData data fail";
204         SoftBusFree(keyAlias.data);
205         return;
206     }
207     int32_t ret = LnnCeEncryptDataByHuks(&keyAlias, inData, &outData);
208     EXPECT_EQ(ret, SOFTBUS_INVALID_PARAM);
209     SoftBusFree(outData.data);
210     SoftBusFree(keyAlias.data);
211 }
212 
213 /*
214  * @tc.name: LNN_CE_ENCRYPT_DATA_BY_HUKS_Test_003
215  * @tc.desc: outData data is nullptr
216  * @tc.type: FUNC
217  * @tc.require: I5RHYE
218  */
219 HWTEST_F(LNNHuksUtilsTest, LNN_CE_ENCRYPT_DATA_BY_HUKS_Test_003, TestSize.Level0)
220 {
221     struct HksBlob keyAlias = { 0 };
222     keyAlias.size = TIME_SIZE;
223     keyAlias.data = (uint8_t *)SoftBusCalloc(keyAlias.size);
224     if (keyAlias.data == nullptr) {
225         GTEST_LOG_(INFO) << "calloc keyAlias data fail";
226         return;
227     }
228     struct HksBlob inData = { 0 };
229     inData.size = TIME_SIZE;
230     inData.data = (uint8_t *)SoftBusCalloc(inData.size);
231     if (inData.data == nullptr) {
232         GTEST_LOG_(INFO) << "calloc inData data fail";
233         SoftBusFree(keyAlias.data);
234         return;
235     }
236     struct HksBlob *outData = nullptr;
237     int32_t ret = LnnCeEncryptDataByHuks(&keyAlias, &inData, outData);
238     EXPECT_EQ(ret, SOFTBUS_INVALID_PARAM);
239     SoftBusFree(inData.data);
240     SoftBusFree(keyAlias.data);
241 }
242 
243 /*
244  * @tc.name: LNN_CE_ENCRYPT_DATA_BY_HUKS_Test_004
245  * @tc.desc: inData size is INVALID_PARAM
246  * @tc.type: FUNC
247  * @tc.require: I5RHYE
248  */
249 HWTEST_F(LNNHuksUtilsTest, LNN_CE_ENCRYPT_DATA_BY_HUKS_Test_004, TestSize.Level0)
250 {
251     struct HksBlob keyAlias = { 0 };
252     keyAlias.size = TIME_SIZE;
253     keyAlias.data = (uint8_t *)SoftBusCalloc(keyAlias.size);
254     if (keyAlias.data == nullptr) {
255         GTEST_LOG_(INFO) << "calloc keyAlias data fail";
256         return;
257     }
258     struct HksBlob inData = { 0 };
259     inData.size = TIME_SIZE;
260     inData.data = (uint8_t *)SoftBusCalloc(inData.size);
261     if (inData.data == nullptr) {
262         GTEST_LOG_(INFO) << "calloc inData data fail";
263         SoftBusFree(keyAlias.data);
264         return;
265     }
266     struct HksBlob outData = { 0 };
267     outData.size = TIME_SIZE;
268     outData.data = (uint8_t *)SoftBusCalloc(outData.size);
269     if (outData.data == nullptr) {
270         GTEST_LOG_(INFO) << "calloc outData data fail";
271         SoftBusFree(inData.data);
272         SoftBusFree(keyAlias.data);
273         return;
274     }
275     inData.size = 0;
276     int32_t ret = LnnCeEncryptDataByHuks(&keyAlias, &inData, &outData);
277     EXPECT_EQ(ret, SOFTBUS_INVALID_PARAM);
278     SoftBusFree(outData.data);
279     SoftBusFree(inData.data);
280     SoftBusFree(keyAlias.data);
281 }
282 
283 /*
284  * @tc.name: Decrypt_Data_Test_001
285  * @tc.desc: decrypt data test
286  * @tc.type: FUNC
287  * @tc.require: I5RHYE
288  */
289 HWTEST_F(LNNHuksUtilsTest, Decrypt_Data_Test_01, TestSize.Level0)
290 {
291     struct HksBlob plainData = { 0 };
292     plainData.size = strlen(RANDOM_KEY);
293     plainData.data = (uint8_t *)RANDOM_KEY;
294 
295     struct HksBlob encryptData = { 0 };
296     encryptData.data = (uint8_t *)SoftBusCalloc(LNN_HUKS_AES_COMMON_SIZE);
297     ASSERT_NE(encryptData.data, nullptr);
298 
299     struct HksBlob decryptData = { 0 };
300     decryptData.data = (uint8_t *)SoftBusCalloc(LNN_HUKS_AES_COMMON_SIZE);
301     if (decryptData.data == nullptr) {
302         SoftBusFree(encryptData.data);
303         return;
304     }
305     EXPECT_EQ(LnnGenerateKeyByHuks(&g_keyAlias), SOFTBUS_OK);
306     EXPECT_EQ(LnnEncryptDataByHuks(&g_keyAlias, &plainData, &encryptData), SOFTBUS_OK);
307     EXPECT_NE(memcmp(plainData.data, encryptData.data, plainData.size), 0);
308 
309     EXPECT_EQ(LnnDecryptDataByHuks(&g_keyAlias, &encryptData, &decryptData), SOFTBUS_OK);
310     EXPECT_EQ(memcmp(decryptData.data, plainData.data, decryptData.size), 0);
311     SoftBusFree(encryptData.data);
312     SoftBusFree(decryptData.data);
313 }
314 } // namespace OHOS
315