• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024-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 #include <memory>
16 #include <gtest/gtest.h>
17 #include "sign_bin.h"
18 #include "sign_provider.h"
19 #include "local_sign_provider.h"
20 
21 #define VERSION 9
22 #define BYTE_NUMBER 32
23 
24 namespace OHOS {
25 namespace SignatureTools {
ConstructSignerConfig(SignerConfig & signerConfig,Options & options)26 void ConstructSignerConfig(SignerConfig& signerConfig, Options& options)
27 {
28     signerConfig.SetCompatibleVersion(VERSION);
29 
30     std::map<std::string, std::string> params;
31     params["keyPwd"] = "123456";
32     params["mode"] = "localSign";
33     params["keyAlias"] = "oh-app1-key-v1";
34     params["signAlg"] = "SHA256withECDSA";
35     params["appCertFile"] = "./hapSign/app-release1.pem";
36     params["signCode"] = "1";
37     params["compatibleVersion"] = "9";
38     params["outFile"] = "./hapSign/signed.bin";
39     params["profileFile"] = "./hapSign/app1-profile1.p7b";
40     params["keystorePwd"] = "123456";
41     params["keystoreFile"] = "./hapSign/ohtest.p12";
42     params["inFile"] = "./hapSign/unsigned.bin";
43     params["profileSigned"] = "1";
44     signerConfig.FillParameters(params);
45 
46     ContentDigestAlgorithm contentDigestAlgorithm("SHA-256", BYTE_NUMBER);
47     std::pair<std::string, void*> signatureAlgAndParams("SHA256withECDSA", nullptr);
48     SignatureAlgorithmHelper signatureAlgorithm(SignatureAlgorithmId::ECDSA_WITH_SHA256, "ECDSA_WITH_SHA256",
49                                                 contentDigestAlgorithm, signatureAlgAndParams);
50     std::vector<SignatureAlgorithmHelper> signatureAlgorithms;
51     signatureAlgorithms.push_back(signatureAlgorithm);
52     signerConfig.SetSignatureAlgorithms(signatureAlgorithms);
53 
54     options.emplace("mode", std::string("localSign"));
55     char keyPwd[] = "123456";
56     options.emplace("keyPwd", keyPwd);
57     options.emplace("outFile", std::string("./hapSign/signed.bin"));
58     options.emplace("keyAlias", std::string("oh-app1-key-v1"));
59     options.emplace("profileFile", std::string("./hapSign/app1-profile1.p7b"));
60     options.emplace("signAlg", std::string("SHA256withECDSA"));
61     char keystorePwd[] = "123456";
62     options.emplace("keystorePwd", keystorePwd);
63     options.emplace("keystoreFile", std::string("./hapSign/ohtest.p12"));
64     options.emplace("appCertFile", std::string("./hapSign/app-release1.pem"));
65     options.emplace("inFile", std::string("./hapSign/unsigned.bin"));
66     signerConfig.SetOptions(&options);
67 }
68 
ConstructSignParams(std::map<std::string,std::string> & signParams)69 void ConstructSignParams(std::map<std::string, std::string>& signParams)
70 {
71     signParams["a"] = "4";
72     signParams["appCertFile"] = "./hapSign/app-release1.pem";
73     signParams["compatibleVersion"] = "9";
74     signParams["inFile"] = "./hapSign/unsigned.bin";
75     signParams["inForm"] = "bin";
76     signParams["keyAlias"] = "oh-app1-key-v1";
77     signParams["keyPwd"] = "123456";
78     signParams["keystoreFile"] = "./hapSign/ohtest.p12";
79     signParams["keystorePwd"] = "123456";
80     signParams["outFile"] = "./hapSign/signed.bin";
81     signParams["profileFile"] = "./hapSign/app1-profile1.p7b";
82     signParams["profileSigned"] = "1";
83     signParams["signAlg"] = "SHA256withECDSA";
84     signParams["signCode"] = "1";
85 }
86 
87 class SignBinTest : public testing::Test {
88 public:
SetUpTestCase(void)89     static void SetUpTestCase(void)
90     {
91         (void)rename("./hapSign/unsigned.txt", "./hapSign/unsigned.bin");
92     };
TearDownTestCase()93     static void TearDownTestCase()
94     {
95     };
SetUp()96     void SetUp()
97     {
98     };
TearDown()99     void TearDown()
100     {
101     };
102 };
103 
104 /**
105  * @tc.name: GenerateFileDigest001
106  * @tc.desc: The return digest size is 0, because the algorithm does not support.
107  * @tc.size: MEDIUM
108  * @tc.type: FUNC
109  * @tc.level Level 1
110  * @tc.require: SR000H63TL
111  */
112 HWTEST_F(SignBinTest, GenerateFileDigest001, testing::ext::TestSize.Level1)
113 {
114     std::shared_ptr<SignBin> api = std::make_shared<SignBin>();
115     std::vector<int8_t> generateFileDigest = api->GenerateFileDigest("./signed.bin", "SHA266");
116     EXPECT_EQ(generateFileDigest.size(), 0);
117 }
118 
119 /**
120  * @tc.name: GenerateFileDigest002
121  * @tc.desc: The return digest size is 0, because the input file does not exist.
122  * @tc.size: MEDIUM
123  * @tc.type: FUNC
124  * @tc.level Level 1
125  * @tc.require: SR000H63TL
126  */
127 HWTEST_F(SignBinTest, GenerateFileDigest002, testing::ext::TestSize.Level1)
128 {
129     std::shared_ptr<SignBin> api = std::make_shared<SignBin>();
130     std::vector<int8_t> generateFileDigest = api->GenerateFileDigest("./signed.bin", "SHA384withECDSA");
131     EXPECT_EQ(generateFileDigest.size(), 0);
132 }
133 
134 /**
135  * @tc.name: Sign001
136  * @tc.desc: The block head data made failed
137  * @tc.size: MEDIUM
138  * @tc.type: FUNC
139  * @tc.level Level 1
140  * @tc.require: SR000H63TL
141  */
142 HWTEST_F(SignBinTest, Sign001, testing::ext::TestSize.Level1)
143 {
144     // go to branch "The block head data made failed"
145     std::shared_ptr<SignBin> api = std::make_shared<SignBin>();
146 
147     // 1.construct SignerConfig
148     SignerConfig signerConfig;
149     Options options;
150     ConstructSignerConfig(signerConfig, options);
151 
152     // 2.construct signParams
153     std::string appCertFile = "./hapSign/app-release1.pem";
154     std::string compatibleVersion = "9";
155     std::string inFile = "./hapSign/unvalid.bin";
156     std::string inForm = "bin";
157     std::string keyAlias = "oh-app1-key-v1";
158     static char keyPwd[] = "123456";
159     std::string keystoreFile = "./hapSign/ohtest.p12";
160     static char keystorePwd[] = "123456";
161     std::string outFile = "./hapSign/signed.bin";
162     std::string profileFile = "./hapSign/app1-profile1.p7b";
163     std::string profileSigned = "1";
164     std::string signAlg = "SHA256withECDSA";
165     std::string signCode = "1";
166     std::string mode = "localSign";
167 
168     std::map<std::string, std::string> signParams;
169     signParams["a"] = "4";
170     signParams["appCertFile"] = appCertFile;
171     signParams["compatibleVersion"] = compatibleVersion;
172     signParams["inFile"] = inFile;
173     signParams["inForm"] = inForm;
174     signParams["keyAlias"] = keyAlias;
175     signParams["keyPwd"] = keyPwd;
176     signParams["keystoreFile"] = keystoreFile;
177     signParams["keystorePwd"] = keystorePwd;
178     signParams["outFile"] = outFile;
179     signParams["profileFile"] = profileFile;
180     signParams["profileSigned"] = profileSigned;
181     signParams["signAlg"] = signAlg;
182     signParams["signCode"] = signCode;
183     signParams["mode"] = mode;
184 
185     bool flag = api->Sign(signerConfig, signParams);
186     EXPECT_EQ(flag, false);
187 }
188 
189 /**
190  * @tc.name: Sign002
191  * @tc.desc: The sign data made failed.
192  * @tc.size: MEDIUM
193  * @tc.type: FUNC
194  * @tc.level Level 1
195  * @tc.require: SR000H63TL
196  */
197 HWTEST_F(SignBinTest, Sign002, testing::ext::TestSize.Level1)
198 {
199     // go to branch "The sign data made failed"
200     std::shared_ptr<SignBin> api = std::make_shared<SignBin>();
201 
202     // 1.construct SignerConfig
203     SignerConfig signerConfig;
204     Options options;
205     ConstructSignerConfig(signerConfig, options);
206 
207     // 2.construct sign params
208     std::map<std::string, std::string> signParams;
209     ConstructSignParams(signParams);
210 
211     bool flag = api->Sign(signerConfig, signParams);
212     EXPECT_EQ(flag, false);
213 }
214 
215 /**
216  * @tc.name: SignBin001
217  * @tc.desc: check Compatible Version failed.
218  * @tc.size: MEDIUM
219  * @tc.type: FUNC
220  * @tc.level Level 1
221  * @tc.require: SR000H63TL
222  */
223 HWTEST_F(SignBinTest, SignBin001, testing::ext::TestSize.Level1)
224 {
225     // go to branch "check Compatible Version failed"
226     std::unique_ptr<SignProvider> signProvider = std::make_unique<LocalSignProvider>();
227     std::shared_ptr<Options> params = std::make_shared<Options>();
228 
229     std::string mode = "localSign";
230     std::string keyAlias = "oh-app1-key-v1";
231     std::string signAlg = "SHA256withECDSA";
232     std::string signCode = "1";
233     std::string appCertFile = "./hapSign/app-release1.pem";
234     std::string profileFile = "./hapSign/app1-profile1.p7b";
235     std::string inFile = "./hapSign/unsigned.bin";
236     std::string keystoreFile = "./hapSign/ohtest.p12";
237     std::string outFile = "./hapSign/signed.bin";
238     std::string inForm = "bin";
239     char keyPwd[] = "123456";
240     char keystorePwd[] = "123456";
241     std::string compatibleVersion = "";
242 
243     (*params)["mode"] = mode;
244     (*params)["keyAlias"] = keyAlias;
245     (*params)["signAlg"] = signAlg;
246     (*params)["signCode"] = signCode;
247     (*params)["appCertFile"] = appCertFile;
248     (*params)["profileFile"] = profileFile;
249     (*params)["inFile"] = inFile;
250     (*params)["keystoreFile"] = keystoreFile;
251     (*params)["outFile"] = outFile;
252     (*params)["inForm"] = inForm;
253     (*params)["keyPwd"] = keyPwd;
254     (*params)["keystorePwd"] = keystorePwd;
255     (*params)["compatibleVersion"] = compatibleVersion;
256     bool ret = signProvider->SignBin(params.get());
257     EXPECT_EQ(ret, false);
258 }
259 
260 /**
261  * @tc.name: SignBin002
262  * @tc.desc: Test function result of SignBin002 will be SUCCESS.
263  * @tc.size: MEDIUM
264  * @tc.type: FUNC
265  * @tc.level Level 1
266  * @tc.require: SR000H63TL
267  */
268 HWTEST_F(SignBinTest, SignBin002, testing::ext::TestSize.Level1)
269 {
270     std::unique_ptr<SignProvider> signProvider = std::make_unique<LocalSignProvider>();
271     std::shared_ptr<Options> params = std::make_shared<Options>();
272 
273     std::string mode = "localSign";
274     std::string keyAlias = "oh-app1-key-v1";
275     std::string signAlg = "SHA256withECDSA";
276     std::string signCode = "1";
277     std::string appCertFile = "./hapSign/app-release1.pem";
278     std::string profileFile = "./hapSign/app1-profile1.p7b";
279     std::string inFile = "./hapSign/unsigned.bin";
280     std::string keystoreFile = "./hapSign/ohtest.p12";
281     std::string outFile = "./hapSign/signed.bin";
282     std::string inForm = "bin";
283     char keyPwd[] = "123456";
284     char keystorePwd[] = "123456";
285     std::string compatibleVersion = "9";
286 
287     (*params)["mode"] = mode;
288     (*params)["keyAlias"] = keyAlias;
289     (*params)["signAlg"] = signAlg;
290     (*params)["signCode"] = signCode;
291     (*params)["appCertFile"] = appCertFile;
292     (*params)["profileFile"] = profileFile;
293     (*params)["inFile"] = inFile;
294     (*params)["keystoreFile"] = keystoreFile;
295     (*params)["outFile"] = outFile;
296     (*params)["inForm"] = inForm;
297     (*params)["keyPwd"] = keyPwd;
298     (*params)["keystorePwd"] = keystorePwd;
299     (*params)["compatibleVersion"] = compatibleVersion;
300     bool ret = signProvider->SignBin(params.get());
301     EXPECT_EQ(ret, true);
302 }
303 
304 } // namespace SignatureTools
305 } // namespace OHOS
306