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 "account_module_defines.h"
17 #include "alg_loader.h"
18 #include "common_defs.h"
19 #include "device_auth.h"
20 #include "device_auth_defines.h"
21 #include "json_utils.h"
22 #include "securec.h"
23 #include "base_group_auth.h"
24 #include "json_utils.h"
25 #include "hc_string.h"
26 #include "group_auth_data_operation.h"
27 #include "account_related_group_auth.h"
28 #include "data_manager.h"
29
30 namespace OHOS {
31 #define NUM_TWO 2
32
SetUp()33 void SetUp()
34 {
35 (void)InitDeviceAuthService();
36 }
37
TearDown()38 void TearDown()
39 {
40 DestroyDeviceAuthService();
41 }
42
AccountRelatedGroupAuthTest001()43 void AccountRelatedGroupAuthTest001()
44 {
45 AccountRelatedGroupAuth *groupAuth = (AccountRelatedGroupAuth *)GetAccountRelatedGroupAuth();
46 CJson *param = CreateJson();
47 if (param == nullptr) {
48 return;
49 }
50 QueryGroupParams queryParams;
51 GroupEntryVec vec = CreateGroupEntryVec();
52 (void)groupAuth->getAccountCandidateGroup(0, param, &queryParams, &vec); // For unit test.
53
54 AddStringToJson(param, FIELD_USER_ID, "unit_test"); // For unit test.
55 (void)groupAuth->getAccountCandidateGroup(0, param, &queryParams, &vec); // For unit test.
56 FreeJson(param);
57
58 ClearGroupEntryVec(&vec);
59 // Identical group branch can not be dealed.
60 }
61
OnTransmitTrue(int64_t requestId,const uint8_t * data,uint32_t dataLen)62 static bool OnTransmitTrue(int64_t requestId, const uint8_t *data, uint32_t dataLen)
63 {
64 (void)requestId;
65 (void)data;
66 (void)dataLen;
67 return true;
68 }
69
OnTransmitFalse(int64_t requestId,const uint8_t * data,uint32_t dataLen)70 static bool OnTransmitFalse(int64_t requestId, const uint8_t *data, uint32_t dataLen)
71 {
72 (void)requestId;
73 (void)data;
74 (void)dataLen;
75 return false;
76 }
77
OnSessionKeyReturned(int64_t requestId,const uint8_t * sessionKey,uint32_t sessionKeyLen)78 static void OnSessionKeyReturned(int64_t requestId, const uint8_t *sessionKey, uint32_t sessionKeyLen)
79 {
80 (void)requestId;
81 (void)sessionKey;
82 (void)sessionKeyLen;
83 }
84
OnFinish(int64_t requestId,int operationCode,const char * returnData)85 static void OnFinish(int64_t requestId, int operationCode, const char *returnData)
86 {
87 (void)requestId;
88 (void)operationCode;
89 (void)returnData;
90 }
91
OnError(int64_t requestId,int operationCode,int errorCode,const char * errorReturn)92 static void OnError(int64_t requestId, int operationCode, int errorCode, const char *errorReturn)
93 {
94 (void)requestId;
95 (void)operationCode;
96 (void)errorCode;
97 (void)errorReturn;
98 }
99
OnRequest(int64_t requestId,int operationCode,const char * reqParams)100 static char *OnRequest(int64_t requestId, int operationCode, const char *reqParams)
101 {
102 (void)requestId;
103 (void)operationCode;
104 (void)reqParams;
105 return nullptr;
106 }
107
108 static DeviceAuthCallback g_deviceAuthCallBack = {
109 .onTransmit = OnTransmitTrue,
110 .onSessionKeyReturned = OnSessionKeyReturned,
111 .onFinish = OnFinish,
112 .onError = OnError,
113 .onRequest = OnRequest
114 };
115
AccountRelatedGroupAuthTest002()116 void AccountRelatedGroupAuthTest002()
117 {
118 CJson *authParam = CreateJson();
119 if (authParam == nullptr) {
120 return;
121 }
122 CJson *out = CreateJson();
123 if (out == nullptr) {
124 FreeJson(authParam);
125 return;
126 }
127 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, nullptr); // For unit test.
128
129 CJson *sendToPeer = CreateJson();
130 if (out == nullptr) {
131 FreeJson(authParam);
132 FreeJson(out);
133 return;
134 }
135 (void)AddObjToJson(out, FIELD_SEND_TO_PEER, sendToPeer);
136 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, nullptr); // For unit test.
137
138 (void)AddStringToJson(sendToPeer, "test_key", "test_value"); // For unit test.
139 (void)AddObjToJson(out, FIELD_SEND_TO_PEER, sendToPeer);
140 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, nullptr); // For unit test.
141
142 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
143 FreeJson(sendToPeer);
144 FreeJson(out);
145 FreeJson(authParam);
146 }
147
AccountRelatedGroupAuthTest0021()148 void AccountRelatedGroupAuthTest0021()
149 {
150 CJson *authParam = CreateJson();
151 if (authParam == nullptr) {
152 return;
153 }
154 CJson *out = CreateJson();
155 if (out == nullptr) {
156 FreeJson(authParam);
157 return;
158 }
159 CJson *sendToPeer = CreateJson();
160 if (sendToPeer == nullptr) {
161 FreeJson(authParam);
162 FreeJson(out);
163 return;
164 }
165 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, nullptr); // For unit test.
166
167 (void)AddObjToJson(out, FIELD_SEND_TO_PEER, sendToPeer);
168 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, nullptr); // For unit test.
169
170 (void)AddStringToJson(sendToPeer, "test_key", "test_value"); // For unit test.
171 (void)AddObjToJson(out, FIELD_SEND_TO_PEER, sendToPeer);
172 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, nullptr); // For unit test.
173
174 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
175
176 g_deviceAuthCallBack.onTransmit = OnTransmitFalse;
177 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
178 FreeJson(sendToPeer);
179 FreeJson(out);
180 FreeJson(authParam);
181 }
182
183 // OnAccountFinish -> ReturnSessionKey success branch.
AccountRelatedGroupAuthTest0022()184 void AccountRelatedGroupAuthTest0022()
185 {
186 CJson *authParam = CreateJson();
187 if (authParam == nullptr) {
188 return;
189 }
190 CJson *out = CreateJson();
191 if (out == nullptr) {
192 FreeJson(authParam);
193 return;
194 }
195 CJson *sendToPeer = CreateJson();
196 if (sendToPeer == nullptr) {
197 FreeJson(authParam);
198 FreeJson(out);
199 return;
200 }
201
202 (void)AddObjToJson(out, FIELD_SEND_TO_PEER, sendToPeer);
203 (void)AddStringToJson(sendToPeer, "test_key", "test_value"); // For unit test.
204 (void)AddObjToJson(out, FIELD_SEND_TO_PEER, sendToPeer);
205
206 (void)AddIntToJson(authParam, FIELD_KEY_LENGTH, NUM_TWO); // For unit test.
207 uint8_t sessionKeyTest[2] = { 0x31, 0x32 }; // For unit test.
208 (void)AddByteToJson(out, FIELD_SESSION_KEY, sessionKeyTest, sizeof(sessionKeyTest));
209 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
210 FreeJson(sendToPeer);
211 FreeJson(out);
212 FreeJson(authParam);
213 }
214
215 // OnAccountFinish -> AddTrustedDeviceForAccount success failed.
AccountRelatedGroupAuthTest0023()216 void AccountRelatedGroupAuthTest0023()
217 {
218 CJson *authParam = CreateJson();
219 CJson *out = CreateJson();
220 CJson *sendToPeer = CreateJson();
221
222 (void)AddObjToJson(out, FIELD_SEND_TO_PEER, sendToPeer);
223 (void)AddStringToJson(sendToPeer, "test_key", "test_value"); // For unit test.
224 (void)AddObjToJson(out, FIELD_SEND_TO_PEER, sendToPeer);
225
226 (void)AddIntToJson(authParam, FIELD_KEY_LENGTH, NUM_TWO); // For unit test.
227 uint8_t sessionKeyTest[2] = { 0x31, 0x32 }; // For unit test.
228 (void)AddByteToJson(out, FIELD_SESSION_KEY, sessionKeyTest, sizeof(sessionKeyTest));
229
230 (void)AddIntToJson(authParam, FIELD_OS_ACCOUNT_ID, 0);
231 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
232
233 (void)AddStringToJson(authParam, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID"); // For unit test.
234 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
235
236 (void)AddStringToJson(authParam, FIELD_GROUP_ID, "GROUP_ID"); // For unit test.
237 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
238
239 CJson *sendToSelf = CreateJson();
240
241 (void)AddObjToJson(out, FIELD_SEND_TO_SELF, sendToSelf);
242 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
243
244 (void)AddIntToJson(sendToSelf, FIELD_CREDENTIAL_TYPE, NUM_TWO);
245 (void)AddObjToJson(out, FIELD_SEND_TO_SELF, sendToSelf);
246 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
247
248 (void)AddStringToJson(sendToSelf, FIELD_DEV_ID, "DEV_ID"); // For unit test.
249 (void)AddObjToJson(out, FIELD_SEND_TO_SELF, sendToSelf);
250 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
251
252 (void)AddStringToJson(sendToSelf, FIELD_USER_ID, "USER_ID"); // For unit test.
253 (void)AddObjToJson(out, FIELD_SEND_TO_SELF, sendToSelf);
254 (void)GetAccountRelatedGroupAuth()->onFinish(0, authParam, out, &g_deviceAuthCallBack); // For unit test.
255
256 FreeJson(sendToSelf);
257 FreeJson(out);
258 FreeJson(sendToPeer);
259 FreeJson(authParam);
260 }
261
AccountRelatedGroupAuthTest004()262 void AccountRelatedGroupAuthTest004()
263 {
264 TrustedGroupEntry *entry = CreateGroupEntry();
265 if (entry == nullptr) {
266 return;
267 }
268 TrustedDeviceEntry *localAuthInfo = CreateDeviceEntry();
269 if (localAuthInfo == nullptr) {
270 DestroyGroupEntry(entry);
271 return;
272 }
273 CJson *paramsData = CreateJson();
274 if (paramsData == nullptr) {
275 DestroyGroupEntry(entry);
276 DestroyDeviceEntry(localAuthInfo);
277 return;
278 }
279
280 (void)GetAccountRelatedGroupAuth()->fillDeviceAuthInfo(0, entry, localAuthInfo, paramsData); // For unit test.
281
282 FreeJson(paramsData);
283 DestroyGroupEntry(entry);
284 DestroyDeviceEntry(localAuthInfo);
285 }
286
AccountRelatedGroupAuthTest0041()287 void AccountRelatedGroupAuthTest0041()
288 {
289 TrustedGroupEntry *entry = CreateGroupEntry();
290 if (entry == nullptr) {
291 return;
292 }
293 TrustedDeviceEntry *localAuthInfo = CreateDeviceEntry();
294 if (localAuthInfo == nullptr) {
295 DestroyGroupEntry(entry);
296 return;
297 }
298 CJson *paramsData = CreateJson();
299 if (paramsData == nullptr) {
300 DestroyGroupEntry(entry);
301 DestroyDeviceEntry(localAuthInfo);
302 return;
303 }
304
305 (void)AddStringToJson(paramsData, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID"); // For unit test.
306 (void)GetAccountRelatedGroupAuth()->fillDeviceAuthInfo(0, entry,
307 localAuthInfo, paramsData); // For unit test.
308
309 FreeJson(paramsData);
310 DestroyGroupEntry(entry);
311 DestroyDeviceEntry(localAuthInfo);
312 }
313
AccountRelatedGroupAuthTest0042()314 void AccountRelatedGroupAuthTest0042()
315 {
316 TrustedGroupEntry *entry = CreateGroupEntry();
317 if (entry == nullptr) {
318 return;
319 }
320 TrustedDeviceEntry *localAuthInfo = CreateDeviceEntry();
321 if (localAuthInfo == nullptr) {
322 DestroyGroupEntry(entry);
323 return;
324 }
325 CJson *paramsData = CreateJson();
326 if (paramsData == nullptr) {
327 DestroyGroupEntry(entry);
328 DestroyDeviceEntry(localAuthInfo);
329 return;
330 }
331 (void)AddStringToJson(paramsData, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID"); // For unit test.
332
333 entry->userId = CreateString();
334 (void)StringSetPointer(&entry->userId, "selfUserId"); // For unit test.
335 (void)GetAccountRelatedGroupAuth()->fillDeviceAuthInfo(0, entry,
336 localAuthInfo, paramsData); // For unit test.
337
338 FreeJson(paramsData);
339 DestroyGroupEntry(entry);
340 DestroyDeviceEntry(localAuthInfo);
341 }
342
AccountRelatedGroupAuthTest0043()343 void AccountRelatedGroupAuthTest0043()
344 {
345 TrustedGroupEntry *entry = CreateGroupEntry();
346 if (entry == nullptr) {
347 return;
348 }
349 TrustedDeviceEntry *localAuthInfo = CreateDeviceEntry();
350 if (localAuthInfo == nullptr) {
351 DestroyGroupEntry(entry);
352 return;
353 }
354 CJson *paramsData = CreateJson();
355 if (paramsData == nullptr) {
356 DestroyGroupEntry(entry);
357 DestroyDeviceEntry(localAuthInfo);
358 return;
359 }
360 (void)AddStringToJson(paramsData, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID"); // For unit test.
361 entry->userId = CreateString();
362 (void)StringSetPointer(&entry->userId, "selfUserId"); // For unit test.
363
364 entry->id = CreateString();
365 (void)StringSetPointer(&entry->id, "groupId"); // For unit test.
366 (void)GetAccountRelatedGroupAuth()->fillDeviceAuthInfo(0, entry,
367 localAuthInfo, paramsData); // For unit test.
368
369 FreeJson(paramsData);
370 DestroyGroupEntry(entry);
371 DestroyDeviceEntry(localAuthInfo);
372 }
373
AccountRelatedGroupAuthTest00431()374 void AccountRelatedGroupAuthTest00431()
375 {
376 TrustedGroupEntry *entry = CreateGroupEntry();
377 if (entry == nullptr) {
378 return;
379 }
380 TrustedDeviceEntry *localAuthInfo = CreateDeviceEntry();
381 if (localAuthInfo == nullptr) {
382 DestroyGroupEntry(entry);
383 return;
384 }
385 CJson *paramsData = CreateJson();
386 if (paramsData == nullptr) {
387 DestroyGroupEntry(entry);
388 DestroyDeviceEntry(localAuthInfo);
389 return;
390 }
391 (void)AddStringToJson(paramsData, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID"); // For unit test.
392 entry->userId = CreateString();
393 (void)StringSetPointer(&entry->userId, "selfUserId"); // For unit test.
394
395 entry->id = CreateString();
396 (void)StringSetPointer(&entry->id, "groupId"); // For unit test.
397
398 localAuthInfo->udid = CreateString();
399 (void)StringSetPointer(&localAuthInfo->udid, "selfDeviceId"); // For unit test.
400 (void)GetAccountRelatedGroupAuth()->fillDeviceAuthInfo(0, entry,
401 localAuthInfo, paramsData); // For unit test.
402
403 FreeJson(paramsData);
404 DestroyGroupEntry(entry);
405 DestroyDeviceEntry(localAuthInfo);
406 }
407
AccountRelatedGroupAuthTest0044()408 void AccountRelatedGroupAuthTest0044()
409 {
410 TrustedGroupEntry *entry = CreateGroupEntry();
411 if (entry == nullptr) {
412 return;
413 }
414 TrustedDeviceEntry *localAuthInfo = CreateDeviceEntry();
415 if (localAuthInfo == nullptr) {
416 DestroyGroupEntry(entry);
417 return;
418 }
419 CJson *paramsData = CreateJson();
420 if (paramsData == nullptr) {
421 DestroyGroupEntry(entry);
422 DestroyDeviceEntry(localAuthInfo);
423 return;
424 }
425 entry->userId = CreateString();
426 (void)StringSetPointer(&entry->userId, "selfUserId");
427 entry->id = CreateString();
428 (void)StringSetPointer(&entry->id, "groupId");
429
430 localAuthInfo->udid = CreateString();
431 (void)StringSetPointer(&localAuthInfo->udid, "selfDeviceId");
432 localAuthInfo->udid = CreateString();
433 (void)StringSetPointer(&localAuthInfo->udid, "selfDevId");
434
435 (void)AddStringToJson(paramsData, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID");
436 (void)GetAccountRelatedGroupAuth()->fillDeviceAuthInfo(0, entry,
437 localAuthInfo, paramsData); // For unit test.
438
439 FreeJson(paramsData);
440 DestroyGroupEntry(entry);
441 DestroyDeviceEntry(localAuthInfo);
442 }
443
AccountRelatedGroupAuthTest007()444 void AccountRelatedGroupAuthTest007()
445 {
446 CJson *confirmationJson = CreateJson();
447 if (confirmationJson == nullptr) {
448 return;
449 }
450 CJson *dataFromClient = CreateJson();
451 if (dataFromClient == nullptr) {
452 FreeJson(confirmationJson);
453 return;
454 }
455 (void)GetAccountRelatedGroupAuth()->combineServerConfirmParams(confirmationJson, dataFromClient);
456 FreeJson(confirmationJson);
457 FreeJson(dataFromClient);
458 }
459
AccountRelatedGroupAuthTest0071()460 void AccountRelatedGroupAuthTest0071()
461 {
462 CJson *confirmationJson = CreateJson();
463 if (confirmationJson == nullptr) {
464 return;
465 }
466 CJson *dataFromClient = CreateJson();
467 if (dataFromClient == nullptr) {
468 FreeJson(confirmationJson);
469 return;
470 }
471
472 (void)AddStringToJson(confirmationJson, FIELD_PEER_CONN_DEVICE_ID, "CONN_DEVICE_ID"); // For unit test.
473 (void)GetAccountRelatedGroupAuth()->combineServerConfirmParams(confirmationJson, dataFromClient);
474 FreeJson(confirmationJson);
475 FreeJson(dataFromClient);
476 }
477 // Ending for account_related_group_auth.c test.
478
FuzzDoRegCallback(const uint8_t * data,size_t size)479 bool FuzzDoRegCallback(const uint8_t* data, size_t size)
480 {
481 (void)data;
482 (void)size;
483 SetUp();
484 AccountRelatedGroupAuthTest001();
485 AccountRelatedGroupAuthTest002();
486 AccountRelatedGroupAuthTest0021();
487 AccountRelatedGroupAuthTest0022();
488 AccountRelatedGroupAuthTest0023();
489 AccountRelatedGroupAuthTest004();
490 AccountRelatedGroupAuthTest0041();
491 AccountRelatedGroupAuthTest0042();
492 AccountRelatedGroupAuthTest0043();
493 AccountRelatedGroupAuthTest00431();
494 AccountRelatedGroupAuthTest0044();
495 AccountRelatedGroupAuthTest007();
496 AccountRelatedGroupAuthTest0071();
497
498 TearDown();
499 return true;
500 }
501
502 }
503
504 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)505 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
506 {
507 /* Run your code on data */
508 OHOS::FuzzDoRegCallback(data, size);
509 return 0;
510 }
511
512