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 <cstddef>
17 #include <cstdint>
18 #include <unistd.h>
19 #include <cstdio>
20 #include "params_run_tool.h"
21 #include "code_signing.h"
22
23 namespace OHOS {
24 namespace SignatureTools {
DoSomethingInterestingWithMyAPI(const uint8_t * data,size_t size)25 bool DoSomethingInterestingWithMyAPI(const uint8_t* data, size_t size)
26 {
27 if (!data || !size) {
28 return true;
29 }
30 char arg0[] = "";
31 char arg1[] = "sign-app";
32 char arg2[] = "-keyAlias";
33 char arg3[] = "oh-app1-key-v1";
34 char arg4[] = "-keyPwd";
35 char arg5[] = "123456";
36 char arg6[] = "-mode";
37 char arg7[] = "localSign";
38 char arg8[] = "-signCode";
39 char arg9[] = "1";
40 char arg10[] = "-signAlg";
41 char arg11[] = "SHA256withECDSA";
42 char arg12[] = "-appCertFile";
43 char arg13[] = "./generateKeyPair/app-release1.pem";
44 char arg14[] = "-profileFile";
45 char arg15[] = "./generateKeyPair/signed-profile.p7b";
46 char arg16[] = "-inFile";
47 char arg17[] = "./generateKeyPair/entry-default-unsigned-so.hap";
48 char arg18[] = "-keystoreFile";
49 char arg19[] = "./generateKeyPair/OpenHarmony.p12";
50 char arg20[] = "-keystorePwd";
51 char arg21[] = "123456";
52 char arg22[] = "-outFile";
53 char arg23[] = "./generateKeyPair/entry-default-signed-so.hap";
54 char* argv[] = {arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12,
55 arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23};
56 int argc = 24;
57 CodeSigning obj;
58
59 bool ret = ParamsRunTool::ProcessCmd(argv, argc);
60 return ret;
61 }
62
RemoteSignTest(const uint8_t * data,size_t size)63 bool RemoteSignTest(const uint8_t* data, size_t size)
64 {
65 if (!data || !size) {
66 return true;
67 }
68
69 std::ofstream dummySO("./generateKeyPair/dummySO.txt", std::ios::binary);
70 dummySO << ' ';
71 dummySO.close();
72
73 char arg0[] = "";
74 char arg1[] = "sign-app";
75 char arg2[] = "-mode";
76 char arg3[] = "remoteSign";
77 char arg4[] = "-keyAlias";
78 char arg5[] = "oh-app1-key-v1";
79 char arg6[] = "-profileFile";
80 char arg7[] = "./generateKeyPair/signed-profile.p7b";
81 char arg8[] = "-inFile";
82 char arg9[] = "./generateKeyPair/entry-default-unsigned-so.hap";
83 char arg10[] = "-signAlg";
84 char arg11[] = "SHA256withECDSA";
85 char arg12[] = "-outFile";
86 char arg13[] = "./generateKeyPair/entry-default-remote-signed-so.hap";
87 char arg14[] = "-signServer";
88 char arg15[] = "./generateKeyPair/app-release1.pem";
89 char arg16[] = "-signerPlugin";
90 char arg17[] = "./generateKeyPair/dummySO.txt";
91 char arg18[] = "-onlineAuthMode";
92 char arg19[] = "./generateKeyPair/OpenHarmony.p12";
93 char arg20[] = "-username";
94 char arg21[] = "123456";
95 char arg22[] = "-userPwd";
96 char arg23[] = "123456";
97 char* argv[] = {arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12,
98 arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23};
99 int argc = 24;
100 bool ret = ParamsRunTool::ProcessCmd(argv, argc);
101 return ret;
102 }
103
SignElf(const uint8_t * data,size_t size)104 bool SignElf(const uint8_t* data, size_t size)
105 {
106 if (!data || !size) {
107 return true;
108 }
109 char arg0[] = "";
110 char arg1[] = "sign-app";
111 char arg2[] = "-keyAlias";
112 char arg3[] = "oh-app1-key-v1";
113 char arg4[] = "-keyPwd";
114 char arg5[] = "123456";
115 char arg6[] = "-mode";
116 char arg7[] = "localSign";
117 char arg8[] = "-signCode";
118 char arg9[] = "1";
119 char arg10[] = "-signAlg";
120 char arg11[] = "SHA256withECDSA";
121 char arg12[] = "-appCertFile";
122 char arg13[] = "./generateKeyPair/app-release1.pem";
123 char arg14[] = "-profileFile";
124 char arg15[] = "./generateKeyPair/signed-profile.p7b";
125 char arg16[] = "-inFile";
126 char arg17[] = "./generateKeyPair/entry-default-unsigned-so.hap";
127 char arg18[] = "-keystoreFile";
128 char arg19[] = "./generateKeyPair/OpenHarmony.p12";
129 char arg20[] = "-keystorePwd";
130 char arg21[] = "123456";
131 char arg22[] = "-outFile";
132 char arg23[] = "./generateKeyPair/entry-default-signed-so.elf";
133 char arg24[] = "-inForm";
134 char arg25[] = "elf";
135 char* argv[] = {arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12,
136 arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24, arg25};
137 int argc = 26;
138 bool ret = ParamsRunTool::ProcessCmd(argv, argc);
139 return ret;
140 }
141
SignBin(const uint8_t * data,size_t size)142 bool SignBin(const uint8_t* data, size_t size)
143 {
144 if (!data || !size) {
145 return true;
146 }
147 char arg0[] = "";
148 char arg1[] = "sign-app";
149 char arg2[] = "-keyAlias";
150 char arg3[] = "oh-app1-key-v1";
151 char arg4[] = "-keyPwd";
152 char arg5[] = "123456";
153 char arg6[] = "-mode";
154 char arg7[] = "localSign";
155 char arg8[] = "-signCode";
156 char arg9[] = "1";
157 char arg10[] = "-signAlg";
158 char arg11[] = "SHA256withECDSA";
159 char arg12[] = "-appCertFile";
160 char arg13[] = "./generateKeyPair/app-release1.pem";
161 char arg14[] = "-profileFile";
162 char arg15[] = "./generateKeyPair/signed-profile.p7b";
163 char arg16[] = "-inFile";
164 char arg17[] = "./generateKeyPair/entry-default-unsigned-so.hap";
165 char arg18[] = "-keystoreFile";
166 char arg19[] = "./generateKeyPair/OpenHarmony.p12";
167 char arg20[] = "-keystorePwd";
168 char arg21[] = "123456";
169 char arg22[] = "-outFile";
170 char arg23[] = "./generateKeyPair/entry-default-signed-so.bin";
171 char arg24[] = "-inForm";
172 char arg25[] = "bin";
173 char* argv[] = {arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12,
174 arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24, arg25};
175 int argc = 26;
176 bool ret = ParamsRunTool::ProcessCmd(argv, argc);
177 return ret;
178 }
179 } // namespace SignatureTools
180 } // namespace OHOS
181
182 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)183 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
184 {
185 (void)rename("./generateKeyPair/entry-default-unsigned-so.txt", "./generateKeyPair/entry-default-unsigned-so.hap");
186 sync();
187 /* Run your code on data */
188 OHOS::SignatureTools::DoSomethingInterestingWithMyAPI(data, size);
189 OHOS::SignatureTools::RemoteSignTest(data, size);
190 OHOS::SignatureTools::SignElf(data, size);
191 OHOS::SignatureTools::SignBin(data, size);
192 return 0;
193 }