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