• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }