1 /*
2  * Copyright (c) 2023 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 "groupoperationcommon_fuzzer.h"
17 
18 #include "alg_defs.h"
19 #include "common_defs.h"
20 #include "device_auth.h"
21 #include "group_operation_common.h"
22 #include "hc_dev_info.h"
23 #include "json_utils.h"
24 #include "securec.h"
25 #include "data_manager.h"
26 
27 namespace OHOS {
28 static const char *NORMAL_STR = "abc";
29 static const Uint8Buff NORMAL_BUFF = { 0, 0 };
30 static QueryGroupParams g_queryGroupParams = {
31     .groupId = NORMAL_STR,
32     .groupName = NORMAL_STR,
33     .ownerName = NORMAL_STR,
34     .groupType = PEER_TO_PEER_GROUP,
35     .userId = nullptr,
36     .groupVisibility = ALL_GROUP_VISIBILITY
37     };
38 
GenerateGroupParams(const CJson * jsonParams,const char * groupId,TrustedGroupEntry * groupParams)39 static int32_t GenerateGroupParams(const CJson *jsonParams, const char *groupId, TrustedGroupEntry *groupParams)
40 {
41     (void)jsonParams;
42     (void)groupId;
43     (void)groupParams;
44     return HC_SUCCESS;
45 }
46 
GenerateDevParams(const CJson * jsonParams,const char * groupId,TrustedDeviceEntry * devParams)47 static int32_t GenerateDevParams(const CJson *jsonParams, const char *groupId, TrustedDeviceEntry *devParams)
48 {
49     (void)jsonParams;
50     (void)groupId;
51     (void)devParams;
52     return HC_SUCCESS;
53 }
54 
GroupOperationTest01(void)55 static void GroupOperationTest01(void)
56 {
57     (void)GetGroupEntryById(DEFAULT_OS_ACCOUNT, nullptr);
58 }
59 
GroupOperationTest02(void)60 static void GroupOperationTest02(void)
61 {
62     (void)IsTrustedDeviceInGroup(DEFAULT_OS_ACCOUNT, nullptr, NORMAL_STR, true);
63 }
64 
GroupOperationTest03(void)65 static void GroupOperationTest03(void)
66 {
67     (void)IsTrustedDeviceInGroup(DEFAULT_OS_ACCOUNT, NORMAL_STR, nullptr, true);
68 }
69 
GroupOperationTest04(void)70 static void GroupOperationTest04(void)
71 {
72     (void)IsTrustedDeviceInGroup(DEFAULT_OS_ACCOUNT, NORMAL_STR, NORMAL_STR, true);
73 }
74 
GroupOperationTest05(void)75 static void GroupOperationTest05(void)
76 {
77     (void)IsGroupOwner(DEFAULT_OS_ACCOUNT, nullptr, NORMAL_STR);
78 }
79 
GroupOperationTest06(void)80 static void GroupOperationTest06(void)
81 {
82     (void)IsGroupOwner(DEFAULT_OS_ACCOUNT, NORMAL_STR, nullptr);
83 }
84 
GroupOperationTest07(void)85 static void GroupOperationTest07(void)
86 {
87     (void)IsGroupOwner(DEFAULT_OS_ACCOUNT, NORMAL_STR, NORMAL_STR);
88 }
89 
GroupOperationTest08(void)90 static void GroupOperationTest08(void)
91 {
92     (void)IsGroupExistByGroupId(DEFAULT_OS_ACCOUNT, nullptr);
93 }
94 
GroupOperationTest09(void)95 static void GroupOperationTest09(void)
96 {
97     (void)CheckGroupAccessible(DEFAULT_OS_ACCOUNT, nullptr, NORMAL_STR);
98 }
99 
GroupOperationTest10(void)100 static void GroupOperationTest10(void)
101 {
102     (void)CheckGroupAccessible(DEFAULT_OS_ACCOUNT, NORMAL_STR, nullptr);
103 }
104 
GroupOperationTest11(void)105 static void GroupOperationTest11(void)
106 {
107     (void)CheckGroupAccessible(DEFAULT_OS_ACCOUNT, NORMAL_STR, NORMAL_STR);
108 }
109 
GroupOperationTest12(void)110 static void GroupOperationTest12(void)
111 {
112     (void)CheckGroupEditAllowed(DEFAULT_OS_ACCOUNT, nullptr, NORMAL_STR);
113 }
114 
GroupOperationTest13(void)115 static void GroupOperationTest13(void)
116 {
117     (void)CheckGroupEditAllowed(DEFAULT_OS_ACCOUNT, NORMAL_STR, nullptr);
118 }
119 
GroupOperationTest14(void)120 static void GroupOperationTest14(void)
121 {
122     (void)CheckGroupEditAllowed(DEFAULT_OS_ACCOUNT, NORMAL_STR, NORMAL_STR);
123 }
124 
GroupOperationTest15(void)125 static void GroupOperationTest15(void)
126 {
127     (void)GetGroupInfo(DEFAULT_OS_ACCOUNT, &g_queryGroupParams, nullptr);
128 }
129 
GroupOperationTest16(void)130 static void GroupOperationTest16(void)
131 {
132     (void)GetTrustedDevInfoById(DEFAULT_OS_ACCOUNT, nullptr, true, NORMAL_STR, nullptr);
133 }
134 
GroupOperationTest17(void)135 static void GroupOperationTest17(void)
136 {
137     (void)GetTrustedDevInfoById(DEFAULT_OS_ACCOUNT, NORMAL_STR, true, nullptr, nullptr);
138 }
139 
GroupOperationTest18(void)140 static void GroupOperationTest18(void)
141 {
142     (void)GetTrustedDevInfoById(DEFAULT_OS_ACCOUNT, NORMAL_STR, true, NORMAL_STR, nullptr);
143 }
144 
GroupOperationTest19(void)145 static void GroupOperationTest19(void)
146 {
147     uint8_t *hashMessage = nullptr;
148     uint32_t messageSize = 0;
149     (void)GetHashMessage(nullptr, &NORMAL_BUFF, &hashMessage, &messageSize);
150 }
151 
GroupOperationTest20(void)152 static void GroupOperationTest20(void)
153 {
154     uint8_t *hashMessage = nullptr;
155     uint32_t messageSize = 0;
156     (void)GetHashMessage(&NORMAL_BUFF, nullptr, &hashMessage, &messageSize);
157 }
158 
GroupOperationTest21(void)159 static void GroupOperationTest21(void)
160 {
161     uint32_t messageSize = 0;
162     (void)GetHashMessage(&NORMAL_BUFF, &NORMAL_BUFF, nullptr, &messageSize);
163 }
164 
GroupOperationTest22(void)165 static void GroupOperationTest22(void)
166 {
167     uint8_t *hashMessage = nullptr;
168     (void)GetHashMessage(&NORMAL_BUFF, &NORMAL_BUFF, &hashMessage, nullptr);
169 }
170 
GroupOperationTest23(void)171 static void GroupOperationTest23(void)
172 {
173     (void)GetCurDeviceNumByGroupId(DEFAULT_OS_ACCOUNT, nullptr);
174 }
175 
GroupOperationTest24(void)176 static void GroupOperationTest24(void)
177 {
178     (void)AssertPeerDeviceNotSelf(nullptr);
179 }
180 
GroupOperationTest25(void)181 static void GroupOperationTest25(void)
182 {
183     char localUdid[INPUT_UDID_LEN] = { 0 };
184     (void)HcGetUdid((uint8_t *)localUdid, INPUT_UDID_LEN);
185     (void)AssertPeerDeviceNotSelf(localUdid);
186 }
187 
GroupOperationTest26(void)188 static void GroupOperationTest26(void)
189 {
190     (void)CheckGroupExist(DEFAULT_OS_ACCOUNT, nullptr);
191 }
192 
GroupOperationTest27(void)193 static void GroupOperationTest27(void)
194 {
195     CJson *jsonParams = CreateJson();
196     (void)AddGroupToDatabaseByJson(DEFAULT_OS_ACCOUNT, nullptr, jsonParams, NORMAL_STR);
197     FreeJson(jsonParams);
198 }
199 
GroupOperationTest28(void)200 static void GroupOperationTest28(void)
201 {
202     (void)AddGroupToDatabaseByJson(DEFAULT_OS_ACCOUNT, GenerateGroupParams, nullptr, NORMAL_STR);
203 }
204 
GroupOperationTest29(void)205 static void GroupOperationTest29(void)
206 {
207     CJson *jsonParams = CreateJson();
208     (void)AddGroupToDatabaseByJson(DEFAULT_OS_ACCOUNT, GenerateGroupParams, jsonParams, nullptr);
209     FreeJson(jsonParams);
210 }
211 
GroupOperationTest30(void)212 static void GroupOperationTest30(void)
213 {
214     CJson *jsonParams = CreateJson();
215     (void)AddDeviceToDatabaseByJson(DEFAULT_OS_ACCOUNT, nullptr, jsonParams, NORMAL_STR);
216     FreeJson(jsonParams);
217 }
218 
GroupOperationTest31(void)219 static void GroupOperationTest31(void)
220 {
221     (void)AddDeviceToDatabaseByJson(DEFAULT_OS_ACCOUNT, GenerateDevParams, nullptr, NORMAL_STR);
222 }
223 
GroupOperationTest32(void)224 static void GroupOperationTest32(void)
225 {
226     CJson *jsonParams = CreateJson();
227     (void)AddDeviceToDatabaseByJson(DEFAULT_OS_ACCOUNT, GenerateDevParams, jsonParams, nullptr);
228     FreeJson(jsonParams);
229 }
230 
GroupOperationTest33(void)231 static void GroupOperationTest33(void)
232 {
233     (void)DelGroupFromDb(DEFAULT_OS_ACCOUNT, nullptr);
234 }
235 
GroupOperationTest34(void)236 static void GroupOperationTest34(void)
237 {
238     const char *groupId = "ABCD";
239     (void)DelGroupFromDb(DEFAULT_OS_ACCOUNT, groupId);
240 }
241 
GroupOperationTest35(void)242 static void GroupOperationTest35(void)
243 {
244     char *returnJsonStr = nullptr;
245     (void)ConvertGroupIdToJsonStr(nullptr, &returnJsonStr);
246 }
247 
GroupOperationTest36(void)248 static void GroupOperationTest36(void)
249 {
250     (void)ConvertGroupIdToJsonStr(NORMAL_STR, nullptr);
251 }
252 
GroupOperationTest37(void)253 static void GroupOperationTest37(void)
254 {
255     char *returnJsonStr = nullptr;
256     (void)GenerateBindSuccessData(nullptr, NORMAL_STR, NORMAL_STR, &returnJsonStr);
257 }
258 
GroupOperationTest38(void)259 static void GroupOperationTest38(void)
260 {
261     char *returnJsonStr = nullptr;
262     (void)GenerateBindSuccessData(NORMAL_STR, nullptr, NORMAL_STR, &returnJsonStr);
263 }
264 
GroupOperationTest39(void)265 static void GroupOperationTest39(void)
266 {
267     (void)GenerateBindSuccessData(NORMAL_STR, NORMAL_STR, NORMAL_STR, nullptr);
268 }
269 
GroupOperationTest40(void)270 static void GroupOperationTest40(void)
271 {
272     char *returnJsonStr = nullptr;
273     (void)GenerateUnbindSuccessData(nullptr, NORMAL_STR, &returnJsonStr);
274 }
275 
GroupOperationTest41(void)276 static void GroupOperationTest41(void)
277 {
278     char *returnJsonStr = nullptr;
279     (void)GenerateUnbindSuccessData(NORMAL_STR, nullptr, &returnJsonStr);
280 }
281 
GroupOperationTest42(void)282 static void GroupOperationTest42(void)
283 {
284     (void)GenerateUnbindSuccessData(NORMAL_STR, NORMAL_STR, nullptr);
285 }
286 
287 
GroupOperationTest43(void)288 static void GroupOperationTest43(void)
289 {
290     (void)ProcessKeyPair(DEFAULT_OS_ACCOUNT, CREATE_KEY_PAIR, nullptr, NORMAL_STR);
291 }
292 
GroupOperationTest44(void)293 static void GroupOperationTest44(void)
294 {
295     CJson *jsonParams = CreateJson();
296     (void)ProcessKeyPair(DEFAULT_OS_ACCOUNT, CREATE_KEY_PAIR, jsonParams, nullptr);
297     FreeJson(jsonParams);
298 }
299 
GroupOperationTest45(void)300 static void GroupOperationTest45(void)
301 {
302     uint32_t groupType;
303     (void)GetGroupTypeFromDb(DEFAULT_OS_ACCOUNT, nullptr, &groupType);
304 }
305 
GroupOperationTest46(void)306 static void GroupOperationTest46(void)
307 {
308     (void)GetGroupTypeFromDb(DEFAULT_OS_ACCOUNT, NORMAL_STR, nullptr);
309 }
310 
GroupOperationTest47(void)311 static void GroupOperationTest47(void)
312 {
313     uint32_t groupType;
314     (void)GetGroupTypeFromDb(DEFAULT_OS_ACCOUNT, NORMAL_STR, &groupType);
315 }
316 
GroupOperationTest48(void)317 static void GroupOperationTest48(void)
318 {
319     char *userId = nullptr;
320     (void)GetUserIdFromJson(nullptr, &userId);
321 }
322 
GroupOperationTest49(void)323 static void GroupOperationTest49(void)
324 {
325     CJson *jsonParams = CreateJson();
326     (void)GetUserIdFromJson(jsonParams, nullptr);
327     FreeJson(jsonParams);
328 }
329 
GroupOperationTest50(void)330 static void GroupOperationTest50(void)
331 {
332     char *userId = nullptr;
333     CJson *jsonParams = CreateJson();
334     (void)GetUserIdFromJson(jsonParams, &userId);
335     FreeJson(jsonParams);
336 }
337 
GroupOperationTest51(void)338 static void GroupOperationTest51(void)
339 {
340     char *sharedUserId = nullptr;
341     (void)GetSharedUserIdFromJson(nullptr, &sharedUserId);
342 }
343 
GroupOperationTest52(void)344 static void GroupOperationTest52(void)
345 {
346     CJson *jsonParams = CreateJson();
347     (void)GetSharedUserIdFromJson(jsonParams, nullptr);
348     FreeJson(jsonParams);
349 }
350 
GroupOperationTest53(void)351 static void GroupOperationTest53(void)
352 {
353     char *sharedUserId = nullptr;
354     CJson *jsonParams = CreateJson();
355     (void)GetSharedUserIdFromJson(jsonParams, &sharedUserId);
356     FreeJson(jsonParams);
357 }
358 
GroupOperationTest54(void)359 static void GroupOperationTest54(void)
360 {
361     const char *groupId = nullptr;
362     (void)GetGroupIdFromJson(nullptr, &groupId);
363 }
364 
GroupOperationTest55(void)365 static void GroupOperationTest55(void)
366 {
367     CJson *jsonParams = CreateJson();
368     (void)GetGroupIdFromJson(jsonParams, nullptr);
369     FreeJson(jsonParams);
370 }
371 
GroupOperationTest56(void)372 static void GroupOperationTest56(void)
373 {
374     const char *groupId = nullptr;
375     CJson *jsonParams = CreateJson();
376     (void)GetGroupIdFromJson(jsonParams, &groupId);
377     FreeJson(jsonParams);
378 }
379 
GroupOperationTest57(void)380 static void GroupOperationTest57(void)
381 {
382     const char *appId = nullptr;
383     (void)GetAppIdFromJson(nullptr, &appId);
384 }
385 
GroupOperationTest58(void)386 static void GroupOperationTest58(void)
387 {
388     CJson *jsonParams = CreateJson();
389     (void)GetAppIdFromJson(jsonParams, nullptr);
390     FreeJson(jsonParams);
391 }
392 
GroupOperationTest59(void)393 static void GroupOperationTest59(void)
394 {
395     const char *appId = nullptr;
396     CJson *jsonParams = CreateJson();
397     (void)GetAppIdFromJson(jsonParams, &appId);
398     FreeJson(jsonParams);
399 }
400 
GroupOperationTest60(void)401 static void GroupOperationTest60(void)
402 {
403     (void)AssertGroupTypeMatch(PEER_TO_PEER_GROUP, IDENTICAL_ACCOUNT_GROUP);
404 }
405 
GroupOperationTest61(void)406 static void GroupOperationTest61(void)
407 {
408     char *hash = nullptr;
409     (void)GetHashResult(nullptr, SHA256_LEN, hash, SHA256_LEN);
410 }
411 
GroupOperationTest62(void)412 static void GroupOperationTest62(void)
413 {
414     const uint8_t *info;
415     (void)GetHashResult(info, SHA256_LEN, nullptr, SHA256_LEN);
416 }
417 
FuzzInnerPart1(void)418 static void FuzzInnerPart1(void)
419 {
420     (void)GroupOperationTest01();
421     (void)GroupOperationTest02();
422     (void)GroupOperationTest03();
423     (void)GroupOperationTest04();
424     (void)GroupOperationTest05();
425     (void)GroupOperationTest06();
426     (void)GroupOperationTest07();
427     (void)GroupOperationTest08();
428     (void)GroupOperationTest09();
429     (void)GroupOperationTest10();
430     (void)GroupOperationTest11();
431     (void)GroupOperationTest12();
432     (void)GroupOperationTest13();
433     (void)GroupOperationTest14();
434     (void)GroupOperationTest15();
435     (void)GroupOperationTest16();
436     (void)GroupOperationTest17();
437     (void)GroupOperationTest18();
438     (void)GroupOperationTest19();
439     (void)GroupOperationTest20();
440     (void)GroupOperationTest21();
441     (void)GroupOperationTest22();
442     (void)GroupOperationTest23();
443     (void)GroupOperationTest24();
444     (void)GroupOperationTest25();
445     (void)GroupOperationTest26();
446     (void)GroupOperationTest27();
447     (void)GroupOperationTest28();
448     (void)GroupOperationTest29();
449     (void)GroupOperationTest30();
450     (void)GroupOperationTest31();
451 }
452 
FuzzInnerPart2(void)453 static void FuzzInnerPart2(void)
454 {
455     (void)GroupOperationTest32();
456     (void)GroupOperationTest33();
457     (void)GroupOperationTest34();
458     (void)GroupOperationTest35();
459     (void)GroupOperationTest36();
460     (void)GroupOperationTest37();
461     (void)GroupOperationTest38();
462     (void)GroupOperationTest39();
463     (void)GroupOperationTest40();
464     (void)GroupOperationTest41();
465     (void)GroupOperationTest42();
466     (void)GroupOperationTest43();
467     (void)GroupOperationTest44();
468     (void)GroupOperationTest45();
469     (void)GroupOperationTest46();
470     (void)GroupOperationTest47();
471     (void)GroupOperationTest48();
472     (void)GroupOperationTest49();
473     (void)GroupOperationTest50();
474     (void)GroupOperationTest51();
475     (void)GroupOperationTest52();
476     (void)GroupOperationTest53();
477     (void)GroupOperationTest54();
478     (void)GroupOperationTest55();
479     (void)GroupOperationTest56();
480     (void)GroupOperationTest57();
481     (void)GroupOperationTest58();
482     (void)GroupOperationTest59();
483     (void)GroupOperationTest60();
484     (void)GroupOperationTest61();
485     (void)GroupOperationTest62();
486 }
487 
FuzzDoCallback(const uint8_t * data,size_t size)488 bool FuzzDoCallback(const uint8_t* data, size_t size)
489 {
490     InitDeviceAuthService();
491     (void)data;
492     (void)size;
493     (void)FuzzInnerPart1();
494     (void)FuzzInnerPart2();
495     DestroyDeviceAuthService();
496     return true;
497 }
498 }
499 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)500 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
501 {
502     /* Run your code on data */
503     OHOS::FuzzDoCallback(data, size);
504     return 0;
505 }
506 
507