1 /*
2 * Copyright (c) 2024 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 <string>
17 #include <cstdlib>
18 #include <random>
19 #include <vector>
20
21 #include "device_manager_service_listener.h"
22 #include "dm_auth_manager.h"
23 #include "hichain_connector.h"
24
25 #include "hichain_connector_fuzzer.h"
26
27 namespace OHOS {
28 namespace DistributedHardware {
29
30 class HiChainConnectorCallbackTest : public IHiChainConnectorCallback {
31 public:
HiChainConnectorCallbackTest()32 HiChainConnectorCallbackTest() {}
~HiChainConnectorCallbackTest()33 virtual ~HiChainConnectorCallbackTest() {}
OnGroupCreated(int64_t requestId,const std::string & groupId)34 void OnGroupCreated(int64_t requestId, const std::string &groupId) override
35 {
36 (void)requestId;
37 (void)groupId;
38 }
OnMemberJoin(int64_t requestId,int32_t status)39 void OnMemberJoin(int64_t requestId, int32_t status) override
40 {
41 (void)requestId;
42 (void)status;
43 }
GetConnectAddr(std::string deviceId)44 std::string GetConnectAddr(std::string deviceId) override
45 {
46 (void)deviceId;
47 return "";
48 }
GetPinCode(int32_t & code)49 int32_t GetPinCode(int32_t &code) override
50 {
51 (void)code;
52 return DM_OK;
53 }
54 };
55
HiChainConnectorFuzzTest(const uint8_t * data,size_t size)56 void HiChainConnectorFuzzTest(const uint8_t* data, size_t size)
57 {
58 if ((data == nullptr) || (size < sizeof(int32_t))) {
59 return;
60 }
61
62 std::shared_ptr<HiChainConnector> hichainConnector = std::make_shared<HiChainConnector>();
63 hichainConnector->RegisterHiChainCallback(std::make_shared<HiChainConnectorCallbackTest>());
64
65 std::string userId(reinterpret_cast<const char*>(data), size);
66 int32_t authType = *(reinterpret_cast<const int32_t*>(data));
67 std::vector<GroupInfo> groupList;
68 std::string queryParams(reinterpret_cast<const char*>(data), size);
69 std::string deviceId(reinterpret_cast<const char*>(data), size);
70 std::string reqDeviceId(reinterpret_cast<const char*>(data), size);
71 std::string hostDevice(reinterpret_cast<const char*>(data), size);
72 std::vector<std::string> remoteGroupIdList;
73 int32_t groupType = *(reinterpret_cast<const int32_t*>(data));
74 nlohmann::json jsonDeviceList;
75 std::string groupOwner(reinterpret_cast<const char*>(data), size);
76 std::string credentialInfo(reinterpret_cast<const char*>(data), size);
77 std::string jsonStr(reinterpret_cast<const char*>(data), size);
78 std::vector<std::string> udidList;
79 std::string pkgNameStr(reinterpret_cast<const char*>(data), size);
80 int32_t delUserid = *(reinterpret_cast<const int32_t*>(data));
81
82 hichainConnector->IsRedundanceGroup(userId, authType, groupList);
83 hichainConnector->GetGroupInfo(queryParams, groupList);
84 hichainConnector->GetGroupInfo(delUserid, queryParams, groupList);
85 hichainConnector->GetGroupType(deviceId);
86 hichainConnector->AddMember(deviceId, queryParams);
87 hichainConnector->GetConnectPara(deviceId, reqDeviceId);
88 hichainConnector->IsDevicesInP2PGroup(hostDevice, reqDeviceId);
89 hichainConnector->SyncGroups(deviceId, remoteGroupIdList);
90 hichainConnector->DeleteTimeOutGroup(deviceId.data());
91 hichainConnector->getRegisterInfo(queryParams, jsonStr);
92 hichainConnector->GetGroupId(userId, groupType, queryParams);
93 hichainConnector->addMultiMembers(groupType, userId, jsonDeviceList);
94 hichainConnector->GetGroupIdExt(userId, groupType, queryParams, groupOwner);
95 hichainConnector->ParseRemoteCredentialExt(credentialInfo, queryParams, groupOwner);
96 hichainConnector->addMultiMembersExt(credentialInfo);
97 hichainConnector->GetTrustedDevices(deviceId);
98 hichainConnector->GetTrustedDevicesUdid(jsonStr.data(), udidList);
99 hichainConnector->DeleteAllGroup(delUserid);
100 hichainConnector->DeleteP2PGroup(delUserid);
101 hichainConnector->GetRelatedGroupsCommon(deviceId, pkgNameStr.data(), groupList);
102 hichainConnector->UnRegisterHiChainCallback();
103 }
104
HiChainConnectorSecondFuzzTest(const uint8_t * data,size_t size)105 void HiChainConnectorSecondFuzzTest(const uint8_t* data, size_t size)
106 {
107 std::shared_ptr<HiChainConnector> hichainConnector = std::make_shared<HiChainConnector>();
108 hichainConnector->RegisterHiChainCallback(std::make_shared<HiChainConnectorCallbackTest>());
109
110 std::vector<GroupInfo> groupList;
111 nlohmann::json jsonDeviceList;
112 GroupInfo groupInfo;
113 std::vector<std::string> syncGroupList;
114 hichainConnector->GetSyncGroupList(groupList, syncGroupList);
115 hichainConnector->IsGroupInfoInvalid(groupInfo);
116 hichainConnector->UnRegisterHiChainGroupCallback();
117 hichainConnector->GetJsonStr(jsonDeviceList, "key");
118 }
119 }
120 }
121
122 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)123 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
124 {
125 /* Run your code on data */
126 OHOS::DistributedHardware::HiChainConnectorFuzzTest(data, size);
127 OHOS::DistributedHardware::HiChainConnectorSecondFuzzTest(data, size);
128 return 0;
129 }