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 <chrono>
16 #include <thread>
17 #include <string>
18 #include <filesystem>
19 
20 #include "gtest/gtest.h"
21 #include "options.h"
22 #include "sign_tool_service_impl.h"
23 #include "nlohmann/json.hpp"
24 #include "signer_factory.h"
25 #include "profile_sign_tool.h"
26 #include "params_run_tool.h"
27 #include "pkcs7_data.h"
28 #include "signer_config.h"
29 #include "local_signer.h"
30 #include "bc_pkcs7_generator.h"
31 #include "bc_signeddata_generator.h"
32 #include "profile_verify.h"
33 #include "constant.h"
34 #include "cms_utils.h"
35 
36 using  nlohmann::json;
37 
38 namespace OHOS {
39 namespace SignatureTools {
40 
41 // sign profile使用的全局参数
42 static const std::string SIGN_PROFILE_MODE = "localSign";
43 static const std::string SIGN_PROFILE_KEY_ALIAS = "oh-profile1-key-v1";
44 static const std::string SIGN_PROFILE_PROFILE_CERT_FILE = "./signProfile/profile-release1.pem";
45 static const std::string SIGN_PROFILE_SIGN_ALG = "SHA384withECDSA";
46 static const std::string SIGN_PROFILE_KEY_STORE_FILE = "./signProfile/ohtest.p12";
47 static const std::string SIGN_PROFILE_OUT_FILE = "./signProfile/signed-profile.p7b";
48 static const std::string SIGN_PROFILE_IN_FILE = "./signProfile/profile.json";
49 
50 static const std::string SIGN_PROFILE_CERT_PEM = "./signProfile/profile-release1-cert.pem";
51 static const std::string SIGN_PROFILE_REVERSE_PEM = "./signProfile/profile-release1-reverse.pem";
52 static const std::string SIGN_PROFILE_DOUBLE_CERT_PEM = "./signProfile/profile-release1-invalid_cert_chain.pem";
53 
54 // verify profile 使用的全局参数
55 static const std::string VERIFY_PROFILE_IN_FILE = "./signProfile/app1-profile1.p7b";
56 static const std::string VERIFY_PROFILE_OUT_FILE = "./signProfile/VerifyResult.json";
57 // sign app 使用全局参数
58 static const std::string SIGN_APP_MODE = "localSign";
59 static const std::string SIGN_APP_KEY_ALIAS = "oh-app1-key-v1";
60 static const std::string SIGN_APP_APP_CERT_FILE = "./signProfile/app-release1.pem";
61 static const std::string SIGN_APP_PROFILE_FILE = "./signProfile/app1-profile1.p7b";
62 static const std::string SIGN_APP_IN_FILE = "./signProfile/unsigned.hap";
63 static const std::string SIGN_APP_IN_FILE_TXT = "./signProfile/unsigned.txt";
64 static const std::string SIGN_APP_SIGN_ALG = "SHA256withECDSA";
65 static const std::string SIGN_APP_KEY_STORE_FILE = "./signProfile/ohtest.p12";
66 static const std::string SIGN_APP_OUT_FILE = "./signProfile/signed.hap";
67 
68 class ProvisionTest : public testing::Test {
69 public:
70     static void SetUpTestCase(void);
71     static void TearDownTestCase(void);
72     void SetUp()override;
73     void TearDown()override;
74 };
SetUpTestCase(void)75 void ProvisionTest::SetUpTestCase(void)
76 {
77     std::filesystem::copy(SIGN_APP_IN_FILE_TXT, SIGN_APP_IN_FILE);
78 }
79 
TearDownTestCase(void)80 void ProvisionTest::TearDownTestCase(void)
81 {
82     std::filesystem::remove(SIGN_APP_IN_FILE);
83 }
84 
SetUp()85 void ProvisionTest::SetUp()
86 {
87 }
88 
TearDown()89 void ProvisionTest::TearDown()
90 {
91 }
92 
93 /**
94  * @tc.name: provision_test001
95  * @tc.desc: Test function of LocalSigner::GetCrls() interface get NULL crls.
96  * @tc.size: MEDIUM
97  * @tc.type: FUNC
98  * @tc.level Level 1
99  * @tc.require: SR000H63TL
100  */
HWTEST_F(ProvisionTest, provision_test001, testing::ext::TestSize.Level1)101 HWTEST_F(ProvisionTest, provision_test001, testing::ext::TestSize.Level1)
102 {
103     EVP_PKEY* pkey = NULL;
104     STACK_OF(X509)* certs = NULL;
105     std::shared_ptr<LocalSigner> signer = std::make_shared<LocalSigner>(pkey, certs);
106     STACK_OF(X509_CRL)* crls = signer->GetCrls();
107     EXPECT_TRUE(crls == NULL);
108 }
109 
110 /**
111  * @tc.name: provision_test002
112  * @tc.desc: Test function of LocalSigner::GetSignature() interface diffrent sign algorithm
113  * for success only support SHA256/384withECDSA.
114  * @tc.size: MEDIUM
115  * @tc.type: FUNC
116  * @tc.level Level 1
117  * @tc.require: SR000H63TL
118  */
HWTEST_F(ProvisionTest, provision_test002, testing::ext::TestSize.Level1)119 HWTEST_F(ProvisionTest, provision_test002, testing::ext::TestSize.Level1)
120 {
121     std::string content = "signed content data";
122     Options options;
123     std::string mode = SIGN_PROFILE_MODE;
124     std::string keyAlias = SIGN_PROFILE_KEY_ALIAS;
125     std::string profileCertFile = SIGN_PROFILE_PROFILE_CERT_FILE;
126     std::string signAlg = SIGN_PROFILE_SIGN_ALG;
127     std::string keystoreFile = SIGN_PROFILE_KEY_STORE_FILE;
128     std::string outFile = SIGN_PROFILE_OUT_FILE;
129     std::string inFile = SIGN_PROFILE_IN_FILE;
130     char keyStorePwd[] = "123456";
131     char keypwd[] = "123456";
132     options[Options::KEY_ALIAS] = keyAlias;
133     options[Options::MODE] = mode;
134     options[Options::PROFILE_CERT_FILE] = profileCertFile;
135     options[Options::SIGN_ALG] = signAlg;
136     options[Options::KEY_STORE_FILE] = keystoreFile;
137     options[Options::OUT_FILE] = outFile;
138     options[Options::IN_FILE] = inFile;
139     options[Options::KEY_RIGHTS] = keypwd;
140     options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
141 
142     LocalizationAdapter adapter(&options);
143     SignerFactory factory;
144     std::shared_ptr<Signer> signer = factory.GetSigner(adapter);
145     std::string signature1 = signer->GetSignature(content, "SHA384withECDSA");
146     EXPECT_TRUE(signature1.size());
147     std::string signature2 = signer->GetSignature(content, "SHA256withECDSA");
148     EXPECT_TRUE(signature2.size());
149     std::string signature3 = signer->GetSignature(content, "SHA999withECDSA");
150     EXPECT_TRUE(signature3.empty());
151     std::string signature4 = signer->GetSignature("", "SHA384withECDSA");
152     EXPECT_FALSE(signature4.empty());
153 }
154 
155 /**
156  * @tc.name: provision_test003
157  * @tc.desc: Test function of ParseProvision() failed for not debug/release provision.
158  * @tc.size: MEDIUM
159  * @tc.type: FUNC
160  * @tc.level Level 1
161  * @tc.require: SR000H63TL
162  */
HWTEST_F(ProvisionTest, provision_test003, testing::ext::TestSize.Level1)163 HWTEST_F(ProvisionTest, provision_test003, testing::ext::TestSize.Level1)
164 {
165     std::string provision = "{\"acls\":{\"allowed-acls\":[\"ac1\",\"ac2\"]},\"bundle-info\":{\"app-feature\":"
166         "\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"developer-id\":\"OpenHarmony\","
167         "\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
168         "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
169         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
170         "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
171         "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
172         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
173         "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
174         "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
175         "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
176         "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
177         "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
178         "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
179         "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
180         "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
181         "-----END CERTIFICATE-----\\n"
182         "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0CB44ABCD53029605"
183         "4159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C7679A73F958732865\"]},"
184         "\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\":[\"\"]},\"type\":\"invalid de"
185         "bug\",\"uuid\""
186         ":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":{\"not-after\":1705127532,\"not-before\":1610519532}"
187         ",\"version-code\":1,\"version-name\":\"1.0.0\",\"baseapp-info\":{\"package-name\":\"package_name\",\"packag"
188         "e-cert\":\"package_cert\"}}";
189     ProfileInfo info;
190     AppProvisionVerifyResult result = ParseProvision(provision, info);
191     EXPECT_FALSE(result == PROVISION_OK);
192 }
193 
194 /**
195  * @tc.name: provision_test004
196  * @tc.desc: Test function of ParseProvision() interface for SUCCESS.
197  * @tc.size: MEDIUM
198  * @tc.type: FUNC
199  * @tc.level Level 1
200  * @tc.require: SR000H63TL
201  */
HWTEST_F(ProvisionTest, provision_test004, testing::ext::TestSize.Level1)202 HWTEST_F(ProvisionTest, provision_test004, testing::ext::TestSize.Level1)
203 {
204     std::string provision = "{\"acls\":{\"allowed-acls\":[\"ac1\",\"ac2\"]},\"bundle-info\":{\"app-feature\":"
205         "\"hos_system_"
206         "app\",\"bundle-name\":\".*\",\"developer-id\":\"OpenHarmony\",\"development-certificate\":"
207         "\"-----BEGIN CERTIFICATE-----\\n"
208         "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
209         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
210         "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
211         "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
212         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
213         "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
214         "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
215         "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
216         "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
217         "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
218         "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
219         "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
220         "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
221         "-----END CERTIFICATE-----\\n"
222         "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0CB44ABCD530296"
223         "054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C7679A73F958732865\"]},\""
224         "issuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\":[\"\"]},\"type\":\"debug\",\"uuid"
225         "\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":{\"not-after\":1705127532,\"not-before\":161051"
226         "9532},\"version-code\":1,\"version-name\":\"1.0.0\",\"baseapp-info\":{\"package-name\":\"package_name\","
227         "\"package-cert\":\"package_cert\"}}";
228     ProfileInfo info2;
229     AppProvisionVerifyResult result = ParseProvision(provision, info2);
230     EXPECT_TRUE(result == PROVISION_OK);
231 }
232 /**
233  * @tc.name: provision_test005
234  * @tc.desc: Test function of ParseProvision() failed for not struct json.
235  * @tc.size: MEDIUM
236  * @tc.type: FUNC
237  * @tc.level Level 1
238  * @tc.require: SR000H63TL
239  */
HWTEST_F(ProvisionTest, provision_test005, testing::ext::TestSize.Level1)240 HWTEST_F(ProvisionTest, provision_test005, testing::ext::TestSize.Level1)
241 {
242     ProfileInfo info;
243     std::string provision = "55.2";
244     AppProvisionVerifyResult result = ParseProvision(provision, info);
245     EXPECT_FALSE(result == PROVISION_OK);
246 }
247 
248 /**
249  * @tc.name: provision_test006
250  * @tc.desc: Test function of ParseProvision() failed for discarded json.
251  * @tc.size: MEDIUM
252  * @tc.type: FUNC
253  * @tc.level Level 1
254  * @tc.require: SR000H63TL
255  */
HWTEST_F(ProvisionTest, provision_test006, testing::ext::TestSize.Level1)256 HWTEST_F(ProvisionTest, provision_test006, testing::ext::TestSize.Level1)
257 {
258     ProfileInfo info;
259     std::string provision = "{\"name\": \"feixing\",\"age\": 18}+";
260     AppProvisionVerifyResult result = ParseProvision(provision, info);
261     EXPECT_FALSE(result == PROVISION_OK);
262 }
263 
264 /**
265 n * @tc.name: provision_test009
266  * @tc.desc: Test function of ParseProfile() interface for SUCCESS.
267  * @tc.size: MEDIUM
268  * @tc.type: FUNC
269  * @tc.level Level 1
270  * @tc.require: SR000H63TL
271  */
HWTEST_F(ProvisionTest, provision_test009, testing::ext::TestSize.Level1)272 HWTEST_F(ProvisionTest, provision_test009, testing::ext::TestSize.Level1)
273 {
274     ProfileInfo info;
275     std::string provision = "[88,99,42,11,22]";
276     AppProvisionVerifyResult result = ParseProfile(provision, info);
277     EXPECT_TRUE(result == PROVISION_OK);
278 }
279 
280 /**
281  * @tc.name: provision_test010
282  * @tc.desc: Test function of ParseProvision() interface for SUCCESS.
283  * @tc.size: MEDIUM
284  * @tc.type: FUNC
285  * @tc.level Level 1
286  * @tc.require: SR000H63TL
287  */
HWTEST_F(ProvisionTest, provision_test010, testing::ext::TestSize.Level1)288 HWTEST_F(ProvisionTest, provision_test010, testing::ext::TestSize.Level1)
289 {
290     ProfileInfo info;
291     std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"app-feature\""
292         ":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"developer-id\":\"OpenHarm"
293         "ony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
294         "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
295         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
296         "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
297         "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
298         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
299         "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
300         "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
301         "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
302         "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
303         "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
304         "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
305         "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
306         "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
307         "-----END CERTIFICATE-----\\n"
308         "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0CB44ABCD"
309         "530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C7679A73F95873"
310         "2865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\":[\"\"]},\"type\":"
311         "\"debug\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":{\"not-after\":1705127532"
312         ",\"not-before\":1610519532},\"version-code\":1,\"version-name\":\"1.0.0\"}";
313     AppProvisionVerifyResult result = ParseProvision(provision, info);
314     EXPECT_TRUE(result == PROVISION_OK);
315 }
316 
317 /**
318  * @tc.name: provision_test014
319  * @tc.desc: Test function of ParseProvision() interface for SUCCESS.
320  * @tc.size: MEDIUM
321  * @tc.type: FUNC
322  * @tc.level Level 1
323  * @tc.require: SR000H63TL
324  */
HWTEST_F(ProvisionTest, provision_test014, testing::ext::TestSize.Level1)325 HWTEST_F(ProvisionTest, provision_test014, testing::ext::TestSize.Level1)
326 {
327     ProfileInfo info;
328     std::string provision = "{\"app-privilege-capabilities\": [99,\"88\"],\"bundle-info\":{\"app"
329         "-feature\":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"developer"
330         "-id\":\"OpenHarmony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
331         "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
332         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
333         "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
334         "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
335         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
336         "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
337         "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
338         "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
339         "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
340         "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
341         "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
342         "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
343         "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
344         "-----END CERTIFICATE-----\\n"
345         "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0CB"
346         "44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C7"
347         "679A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\""
348         ":[\"\"]},\"type\":\"debug\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":"
349         "{\"not-after\":1705127532,\"not-before\":1610519532},\"version-code\":1,\"version-name\":\"1.0.0\"}";
350     AppProvisionVerifyResult result = ParseProvision(provision, info);
351     EXPECT_TRUE(result == PROVISION_OK);
352 }
353 /**
354  * @tc.name: provision_test019
355  * @tc.desc: Test function of ParseProvision() failed for development-certificate is empty.
356  * @tc.size: MEDIUM
357  * @tc.type: FUNC
358  * @tc.level Level 1
359  * @tc.require: SR000H63TL
360  */
HWTEST_F(ProvisionTest, provision_test019, testing::ext::TestSize.Level1)361 HWTEST_F(ProvisionTest, provision_test019, testing::ext::TestSize.Level1)
362 {
363     ProfileInfo info;
364     std::string provision = "{\"bundle-info\":{\"app-feature\":\"hos_system_app\",\"bundle-name\":\"com"
365         ".example.nativetemplatedemo\",\"developer-id\":\"OpenHarmony\",\"development-certificate\":\"\"},\""
366         "d""ebug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0CB44ABCD53029"
367         "6054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C7679A73F95873286"
368         "5\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\":[\"\"]},\"type\":\"de"
369         "bug\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":{\"not-after\":1705127532,\"no"
370         "t-before\":1610519532},\"version-code\":1,\"version-name\":\"1.0.0\"}";
371     AppProvisionVerifyResult result = ParseProvision(provision, info);
372     EXPECT_FALSE(result == PROVISION_OK);
373 }
374 
375 /**
376  * @tc.name: provision_test021
377  * @tc.desc: Test function of Provision operator==() interface stability.
378  * @tc.size: MEDIUM
379  * @tc.type: FUNC
380  * @tc.level Level 1
381  * @tc.require: SR000H63TL
382  */
HWTEST_F(ProvisionTest, provision_test021, testing::ext::TestSize.Level1)383 HWTEST_F(ProvisionTest, provision_test021, testing::ext::TestSize.Level1)
384 {
385     ProfileInfo info;
386     ProfileInfo info2;
387     info2.profileBlockLength = 0;
388     info = info2;
389     EXPECT_EQ(info.profileBlockLength, info2.profileBlockLength);
390 }
391 
392 /**
393  * @tc.name: provision_test023
394  * @tc.desc: Test function of Provision operator==() interface stability.
395  * @tc.size: MEDIUM
396  * @tc.type: FUNC
397  * @tc.level Level 1
398  * @tc.require: SR000H63TL
399  */
HWTEST_F(ProvisionTest, provision_test023, testing::ext::TestSize.Level1)400 HWTEST_F(ProvisionTest, provision_test023, testing::ext::TestSize.Level1)
401 {
402     ProfileInfo info;
403     ProfileInfo info2;
404     info2.profileBlockLength = 5;
405     info2.profileBlock = NULL;
406     info = info2;
407     EXPECT_EQ(info.profileBlockLength, info2.profileBlockLength);
408 }
409 
410 /**
411  * @tc.name: provision_test025
412  * @tc.desc: Test function of ProfileSignTool::GenerateP7b() failed for invalid keyStorePassword.
413  * @tc.size: MEDIUM
414  * @tc.type: FUNC
415  * @tc.level Level 1
416  * @tc.require: SR000H63TL
417  */
HWTEST_F(ProvisionTest, provision_test025, testing::ext::TestSize.Level1)418 HWTEST_F(ProvisionTest, provision_test025, testing::ext::TestSize.Level1)
419 {
420     Options options;
421     char keyStorePwd[] = "123456";
422     char invalidKeyPwd[] = "12345";
423     options[Options::KEY_ALIAS] = SIGN_PROFILE_KEY_ALIAS;
424     options[Options::MODE] = SIGN_PROFILE_MODE;
425     options[Options::PROFILE_CERT_FILE] = SIGN_PROFILE_PROFILE_CERT_FILE;
426     options[Options::SIGN_ALG] = SIGN_PROFILE_SIGN_ALG;
427     options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
428     options[Options::OUT_FILE] = SIGN_PROFILE_OUT_FILE;
429     options[Options::IN_FILE] = SIGN_PROFILE_IN_FILE;
430     options[Options::KEY_RIGHTS] = invalidKeyPwd;
431     options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
432 
433     LocalizationAdapter adapter(&options);
434     std::string content = "json content";
435     std::string ret;
436     int result = ProfileSignTool::GenerateP7b(adapter, content, ret);
437     EXPECT_FALSE(result == 0);
438 }
439 
440 /**
441  * @tc.name: provision_test026
442  * @tc.desc: Test function of ProfileSignTool::GenerateP7b() failed for invalid sign algorithm.
443  * @tc.size: MEDIUM
444  * @tc.type: FUNC
445  * @tc.level Level 1
446  * @tc.require: SR000H63TL
447  */
HWTEST_F(ProvisionTest, provision_test026, testing::ext::TestSize.Level1)448 HWTEST_F(ProvisionTest, provision_test026, testing::ext::TestSize.Level1)
449 {
450     Options options;
451     char keyStorePwd[] = "123456";
452     char keypwd[] = "123456";
453     std::string invalid_sigAlg = "SHA385withECDSA";
454     options[Options::KEY_ALIAS] = SIGN_PROFILE_KEY_ALIAS;
455     options[Options::MODE] = SIGN_PROFILE_MODE;
456     options[Options::PROFILE_CERT_FILE] = SIGN_PROFILE_PROFILE_CERT_FILE;
457     options[Options::SIGN_ALG] = invalid_sigAlg;
458     options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
459     options[Options::OUT_FILE] = SIGN_PROFILE_OUT_FILE;
460     options[Options::IN_FILE] = SIGN_PROFILE_IN_FILE;
461     options[Options::KEY_RIGHTS] = keypwd;
462     options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
463 
464     LocalizationAdapter adapter(&options);
465     std::string content = "json content";
466     std::string ret;
467     int result = ProfileSignTool::GenerateP7b(adapter, content, ret);
468     EXPECT_FALSE(result == 0);
469 }
470 
471 /**
472  * @tc.name: provision_test027
473  * @tc.desc: Test function of ProfileSignTool::GenerateP7b() interface for SUCCESS.
474  * @tc.size: MEDIUM
475  * @tc.type: FUNC
476  * @tc.level Level 1
477  * @tc.require: SR000H63TL
478  */
HWTEST_F(ProvisionTest, provision_test027, testing::ext::TestSize.Level1)479 HWTEST_F(ProvisionTest, provision_test027, testing::ext::TestSize.Level1)
480 {
481     Options options;
482     char keyStorePwd[] = "123456";
483     char keypwd[] = "123456";
484     options[Options::KEY_ALIAS] = SIGN_PROFILE_KEY_ALIAS;
485     options[Options::MODE] = SIGN_PROFILE_MODE;
486     options[Options::PROFILE_CERT_FILE] = SIGN_PROFILE_PROFILE_CERT_FILE;
487     options[Options::SIGN_ALG] = SIGN_PROFILE_SIGN_ALG;
488     options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
489     options[Options::OUT_FILE] = SIGN_PROFILE_OUT_FILE;
490     options[Options::IN_FILE] = SIGN_PROFILE_IN_FILE;
491     options[Options::KEY_RIGHTS] = keypwd;
492     options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
493 
494     LocalizationAdapter adapter(&options);
495     std::string content = "json content";
496     std::string ret;
497     int result = ProfileSignTool::GenerateP7b(adapter, content, ret);
498     EXPECT_TRUE(result == 0);
499 }
500 
501 /**
502  * @tc.name: provision_test028
503  * @tc.desc: Test function of ProfileSignTool::SignProfile() interface for SUCCESS.
504  * @tc.size: MEDIUM
505  * @tc.type: FUNC
506  * @tc.level Level 1
507  * @tc.require: SR000H63TL
508  */
HWTEST_F(ProvisionTest, provision_test028, testing::ext::TestSize.Level1)509 HWTEST_F(ProvisionTest, provision_test028, testing::ext::TestSize.Level1)
510 {
511     Options options;
512     char keyStorePwd[] = "123456";
513     char keypwd[] = "123456";
514     options[Options::KEY_ALIAS] = SIGN_PROFILE_KEY_ALIAS;
515     options[Options::MODE] = SIGN_PROFILE_MODE;
516     options[Options::PROFILE_CERT_FILE] = SIGN_PROFILE_PROFILE_CERT_FILE;
517     options[Options::SIGN_ALG] = SIGN_PROFILE_SIGN_ALG;
518     options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
519     options[Options::OUT_FILE] = SIGN_PROFILE_OUT_FILE;
520     options[Options::IN_FILE] = SIGN_PROFILE_IN_FILE;
521     options[Options::KEY_RIGHTS] = keypwd;
522     options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
523 
524     LocalizationAdapter adapter(&options);
525     SignerFactory factory;
526     std::shared_ptr<Signer> signer = factory.GetSigner(adapter);
527     std::string content = "json content";
528     std::string ret;
529     int result = ProfileSignTool::SignProfile(content, signer, SIGN_PROFILE_SIGN_ALG, ret);
530     EXPECT_TRUE(result == 0);
531 }
532 
533 /**
534  * @tc.name: provision_test029
535  * @tc.desc: Test function of ProfileSignTool::GenerateP7b() failed for invalid certchain.
536  * @tc.size: MEDIUM
537  * @tc.type: FUNC
538  * @tc.level Level 1
539  * @tc.require: SR000H63TL
540  */
HWTEST_F(ProvisionTest, provision_test029, testing::ext::TestSize.Level1)541 HWTEST_F(ProvisionTest, provision_test029, testing::ext::TestSize.Level1)
542 {
543     Options options;
544     char keyStorePwd[] = "123456";
545     char keypwd[] = "123456";
546     options[Options::KEY_ALIAS] = SIGN_PROFILE_KEY_ALIAS;
547     options[Options::MODE] = SIGN_PROFILE_MODE;
548     options[Options::PROFILE_CERT_FILE] = SIGN_PROFILE_CERT_PEM;
549     options[Options::SIGN_ALG] = SIGN_PROFILE_SIGN_ALG;
550     options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
551     options[Options::OUT_FILE] = SIGN_PROFILE_OUT_FILE;
552     options[Options::IN_FILE] = SIGN_PROFILE_IN_FILE;
553     options[Options::KEY_RIGHTS] = keypwd;
554     options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
555 
556     LocalizationAdapter adapter(&options);
557     std::string content = "json content";
558     std::string ret;
559     int result = ProfileSignTool::GenerateP7b(adapter, content, ret);
560     EXPECT_FALSE(result == 0);
561 }
562 
563 /**
564  * @tc.name: provision_test030
565  * @tc.desc: Test function of ProfileSignTool::GenerateP7b() failed for invalid certichain.
566  * @tc.size: MEDIUM
567  * @tc.type: FUNC
568  * @tc.level Level 1
569  * @tc.require: SR000H63TL
570  */
HWTEST_F(ProvisionTest, provision_test030, testing::ext::TestSize.Level1)571 HWTEST_F(ProvisionTest, provision_test030, testing::ext::TestSize.Level1)
572 {
573     Options options;
574     char keyStorePwd[] = "123456";
575     char keypwd[] = "123456";
576     options[Options::KEY_ALIAS] = SIGN_PROFILE_KEY_ALIAS;
577     options[Options::MODE] = SIGN_PROFILE_MODE;
578     options[Options::PROFILE_CERT_FILE] = SIGN_PROFILE_DOUBLE_CERT_PEM;
579     options[Options::SIGN_ALG] = SIGN_PROFILE_SIGN_ALG;
580     options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
581     options[Options::OUT_FILE] = SIGN_PROFILE_OUT_FILE;
582     options[Options::IN_FILE] = SIGN_PROFILE_IN_FILE;
583     options[Options::KEY_RIGHTS] = keypwd;
584     options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
585 
586     LocalizationAdapter adapter(&options);
587     std::string content = "json content";
588     std::string ret;
589     int result = ProfileSignTool::GenerateP7b(adapter, content, ret);
590     EXPECT_FALSE(result == 0);
591 }
592 
593 /**
594  * @tc.name: provision_test031
595  * @tc.desc: Test function of LocalSigner::GetCrls() interface get NULL crls.
596  * @tc.size: MEDIUM
597  * @tc.type: FUNC
598  * @tc.level Level 1
599  * @tc.require: SR000H63TL
600  */
HWTEST_F(ProvisionTest, provision_test031, testing::ext::TestSize.Level1)601 HWTEST_F(ProvisionTest, provision_test031, testing::ext::TestSize.Level1)
602 {
603     Options options;
604     std::string mode = SIGN_PROFILE_MODE;
605     std::string keyAlias = SIGN_PROFILE_KEY_ALIAS;
606     std::string profileCertFile = SIGN_PROFILE_PROFILE_CERT_FILE;
607     std::string signAlg = SIGN_PROFILE_SIGN_ALG;
608     std::string keystoreFile = SIGN_PROFILE_KEY_STORE_FILE;
609     std::string outFile = SIGN_PROFILE_OUT_FILE;
610     std::string inFile = SIGN_PROFILE_IN_FILE;
611     char keyStorePwd[] = "123456";
612     char keypwd[] = "123456";
613     options[Options::KEY_ALIAS] = keyAlias;
614     options[Options::MODE] = mode;
615     options[Options::PROFILE_CERT_FILE] = profileCertFile;
616     options[Options::SIGN_ALG] = signAlg;
617     options[Options::KEY_STORE_FILE] = keystoreFile;
618     options[Options::OUT_FILE] = outFile;
619     options[Options::IN_FILE] = inFile;
620     options[Options::KEY_RIGHTS] = keypwd;
621     options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
622 
623     LocalizationAdapter adapter(&options);
624     SignerFactory factory;
625     std::shared_ptr<Signer> signer = factory.GetSigner(adapter);
626     STACK_OF(X509_CRL)* crls = signer->GetCrls();
627     EXPECT_TRUE(crls == NULL);
628 }
629 
630 /**
631  * @tc.name: provision_test032
632  * @tc.desc: Test function of LocalSigner() constructor.
633  * @tc.size: MEDIUM
634  * @tc.type: FUNC
635  * @tc.level Level 1
636  * @tc.require: SR000H63TL
637  */
HWTEST_F(ProvisionTest, provision_test032, testing::ext::TestSize.Level1)638 HWTEST_F(ProvisionTest, provision_test032, testing::ext::TestSize.Level1)
639 {
640     Options options;
641     std::string mode = SIGN_PROFILE_MODE;
642     std::string keyAlias = SIGN_PROFILE_KEY_ALIAS;
643     std::string profileCertFile = SIGN_PROFILE_PROFILE_CERT_FILE;
644     std::string signAlg = SIGN_PROFILE_SIGN_ALG;
645     std::string keystoreFile = SIGN_PROFILE_KEY_STORE_FILE;
646     std::string outFile = SIGN_PROFILE_OUT_FILE;
647     std::string inFile = SIGN_PROFILE_IN_FILE;
648     char keyStorePwd[] = "123456";
649     char keypwd[] = "123456";
650     options[Options::KEY_ALIAS] = keyAlias;
651     options[Options::MODE] = mode;
652     options[Options::PROFILE_CERT_FILE] = profileCertFile;
653     options[Options::SIGN_ALG] = signAlg;
654     options[Options::KEY_STORE_FILE] = keystoreFile;
655     options[Options::OUT_FILE] = outFile;
656     options[Options::IN_FILE] = inFile;
657     options[Options::KEY_RIGHTS] = keypwd;
658     options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
659 
660     EVP_PKEY* pkey = NULL;
661     STACK_OF(X509)* certs = NULL;
662     std::shared_ptr<Signer> signer = NULL;
663     signer = std::make_shared<LocalSigner>(pkey, certs);
664     EXPECT_NE(signer, nullptr);
665 }
666 
667 /**
668  * @tc.name: provision_test033
669  * @tc.desc: Test function of LocalSigner() interface constructor.
670  * @tc.size: MEDIUM
671  * @tc.type: FUNC
672  * @tc.level Level 1
673  * @tc.require: SR000H63TL
674  */
HWTEST_F(ProvisionTest, provision_test033, testing::ext::TestSize.Level1)675 HWTEST_F(ProvisionTest, provision_test033, testing::ext::TestSize.Level1)
676 {
677     Options options;
678     std::string mode = SIGN_PROFILE_MODE;
679     std::string keyAlias = SIGN_PROFILE_KEY_ALIAS;
680     std::string profileCertFile = SIGN_PROFILE_PROFILE_CERT_FILE;
681     std::string signAlg = SIGN_PROFILE_SIGN_ALG;
682     std::string keystoreFile = SIGN_PROFILE_KEY_STORE_FILE;
683     std::string outFile = SIGN_PROFILE_OUT_FILE;
684     std::string inFile = SIGN_PROFILE_IN_FILE;
685     char keyStorePwd[] = "123456";
686     char keypwd[] = "123456";
687     options[Options::KEY_ALIAS] = keyAlias;
688     options[Options::MODE] = mode;
689     options[Options::PROFILE_CERT_FILE] = profileCertFile;
690     options[Options::SIGN_ALG] = signAlg;
691     options[Options::KEY_STORE_FILE] = keystoreFile;
692     options[Options::OUT_FILE] = outFile;
693     options[Options::IN_FILE] = inFile;
694     options[Options::KEY_RIGHTS] = keypwd;
695     options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
696 
697     EVP_PKEY* pkey = NULL;
698     STACK_OF(X509)* certs = NULL;
699     LocalizationAdapter adapter(&options);
700     pkey = adapter.GetAliasKey(false);
701     std::shared_ptr<Signer> signer = std::make_shared<LocalSigner>(pkey, certs);
702     EXPECT_NE(signer, nullptr);
703 }
704 
705 /**
706  * @tc.name: provision_test034
707  * @tc.desc: Test function of LocalSigner() interface constructor.
708  * @tc.size: MEDIUM
709  * @tc.type: FUNC
710  * @tc.level Level 1
711  * @tc.require: SR000H63TL
712  */
HWTEST_F(ProvisionTest, provision_test034, testing::ext::TestSize.Level1)713 HWTEST_F(ProvisionTest, provision_test034, testing::ext::TestSize.Level1)
714 {
715     Options options;
716     std::string mode = SIGN_PROFILE_MODE;
717     std::string keyAlias = SIGN_PROFILE_KEY_ALIAS;
718     std::string profileCertFile = SIGN_PROFILE_PROFILE_CERT_FILE;
719     std::string signAlg = SIGN_PROFILE_SIGN_ALG;
720     std::string keystoreFile = SIGN_PROFILE_KEY_STORE_FILE;
721     std::string outFile = SIGN_PROFILE_OUT_FILE;
722     std::string inFile = SIGN_PROFILE_IN_FILE;
723     char keyStorePwd[] = "123456";
724     char keypwd[] = "123456";
725     options[Options::KEY_ALIAS] = keyAlias;
726     options[Options::MODE] = mode;
727     options[Options::PROFILE_CERT_FILE] = profileCertFile;
728     options[Options::SIGN_ALG] = signAlg;
729     options[Options::KEY_STORE_FILE] = keystoreFile;
730     options[Options::OUT_FILE] = outFile;
731     options[Options::IN_FILE] = inFile;
732     options[Options::KEY_RIGHTS] = keypwd;
733     options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
734 
735     EVP_PKEY* pkey = NULL;
736     STACK_OF(X509)* certs = sk_X509_new(NULL);
737     LocalizationAdapter adapter(&options);
738     pkey = adapter.GetAliasKey(false);
739     std::shared_ptr<Signer> signer = std::make_shared<LocalSigner>(pkey, certs);
740     EXPECT_NE(signer, nullptr);
741 }
742 
743 /**
744  * @tc.name: provision_test035
745  * @tc.desc: Test function of GetSignature::GetSignature() interface for SUCCESS.
746  * @tc.size: MEDIUM
747  * @tc.type: FUNC
748  * @tc.level Level 1
749  * @tc.require: SR000H63TL
750  */
HWTEST_F(ProvisionTest, provision_test035, testing::ext::TestSize.Level1)751 HWTEST_F(ProvisionTest, provision_test035, testing::ext::TestSize.Level1)
752 {
753     Options options;
754     std::string mode = SIGN_PROFILE_MODE;
755     std::string keyAlias = SIGN_PROFILE_KEY_ALIAS;
756     std::string profileCertFile = SIGN_PROFILE_PROFILE_CERT_FILE;
757     std::string signAlg = SIGN_PROFILE_SIGN_ALG;
758     std::string keystoreFile = SIGN_PROFILE_KEY_STORE_FILE;
759     std::string outFile = SIGN_PROFILE_OUT_FILE;
760     std::string inFile = SIGN_PROFILE_IN_FILE;
761     char keyStorePwd[] = "123456";
762     char keypwd[] = "123456";
763     options[Options::KEY_ALIAS] = keyAlias;
764     options[Options::MODE] = mode;
765     options[Options::PROFILE_CERT_FILE] = profileCertFile;
766     options[Options::SIGN_ALG] = signAlg;
767     options[Options::KEY_STORE_FILE] = keystoreFile;
768     options[Options::OUT_FILE] = outFile;
769     options[Options::IN_FILE] = inFile;
770     options[Options::KEY_RIGHTS] = keypwd;
771     options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
772 
773     EVP_PKEY* pkey = NULL;
774     LocalizationAdapter adapter(&options);
775     SignerFactory factory;
776     std::shared_ptr<Signer> signer = factory.GetSigner(adapter);
777     STACK_OF(X509)* certs = signer->GetCertificates();
778     STACK_OF(X509)* certsDup = sk_X509_new(NULL);
779     X509* cert = sk_X509_value(certs, 0);
780     X509_up_ref(cert);
781     sk_X509_push(certsDup, cert);
782     std::shared_ptr<Signer> signer2 = std::make_shared<LocalSigner>(pkey, certsDup);
783     std::string signature = signer2->GetSignature("content", "SHA384withECDSA");
784     EXPECT_NE(signer, nullptr);
785 }
786 
787 /**
788  * @tc.name: provision_test036
789  * @tc.desc: Test function of ParseProvision() failed for distribution-certificate is empty.
790  * @tc.size: MEDIUM
791  * @tc.type: FUNC
792  * @tc.level Level 1
793  * @tc.require: SR000H63TL
794  */
HWTEST_F(ProvisionTest, provision_test036, testing::ext::TestSize.Level1)795 HWTEST_F(ProvisionTest, provision_test036, testing::ext::TestSize.Level1)
796 {
797     ProfileInfo info;
798     std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"app-distribution-type"
799         "\": \"app_gallery\",\"bundle-info\":{\"app-feature\":\"hos_system_app\",\"bundle-name\":\"co"
800         "m.example.nativetemplatedemo\",\"developer-id\":\"OpenHarmony\",\"development-certifica"
801         "te\":\"-----BEGIN CERTIFICATE-----\\n"
802         "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
803         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
804         "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
805         "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
806         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
807         "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
808         "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
809         "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
810         "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
811         "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
812         "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
813         "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
814         "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
815         "-----END CERTIFICATE-----\\n"
816         "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0CB44ABCD530"
817         "296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C7679A73F958732865"
818         "\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\":[\"\"]},\"type\":\"re"
819         "lease\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":{\"not-after\":1705127532,\"n"
820         "ot-before\":1610519532},\"version-code\":1,\"version-name\":\"1.0.0\"}";
821     AppProvisionVerifyResult result = ParseProvision(provision, info);
822     EXPECT_FALSE(result == PROVISION_OK);
823 }
824 
825 /**
826  * @tc.name: provision_test037
827  * @tc.desc: Test function of ParseProvision() failed for distribution-certificate is empty.
828  * @tc.size: MEDIUM
829  * @tc.type: FUNC
830  * @tc.level Level 1
831  * @tc.require: SR000H63TL
832  */
HWTEST_F(ProvisionTest, provision_test037, testing::ext::TestSize.Level1)833 HWTEST_F(ProvisionTest, provision_test037, testing::ext::TestSize.Level1)
834 {
835     ProfileInfo info;
836     std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"app-featur"
837         "e\":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"developer-id\":\"Ope"
838         "nHarmony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
839         "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
840         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
841         "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
842         "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
843         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
844         "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
845         "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
846         "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
847         "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
848         "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
849         "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
850         "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
851         "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
852         "-----END CERTIFICATE-----\\n"
853         "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0CB44A"
854         "BCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C7679A73"
855         "F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\":[\"\"]"
856         "},\"type\":\"release\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":{\"not-a"
857         "fter\":1705127532,\"not-before\":1610519532},\"version-code\":0,\"version-name\":\"1.0.0\"}";
858     AppProvisionVerifyResult result = ParseProvision(provision, info);
859     EXPECT_FALSE(result == PROVISION_OK);
860 }
861 
862 /**
863  * @tc.name: provision_test038
864  * @tc.desc: Test function of ParseProvision() failed for distribution-certificate is empty.
865  * @tc.size: MEDIUM
866  * @tc.type: FUNC
867  * @tc.level Level 1
868  * @tc.require: SR000H63TL
869  */
HWTEST_F(ProvisionTest, provision_test038, testing::ext::TestSize.Level1)870 HWTEST_F(ProvisionTest, provision_test038, testing::ext::TestSize.Level1)
871 {
872     ProfileInfo info;
873     std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"app-fea"
874         "ture\":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"developer-id\":\""
875         "OpenHarmony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
876         "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
877         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
878         "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
879         "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
880         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
881         "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
882         "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
883         "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
884         "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
885         "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
886         "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
887         "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
888         "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
889         "-----END CERTIFICATE-----\\n"
890         "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0C"
891         "B44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718"
892         "C7679A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-permission"
893         "s\":[\"\"]},\"type\":\"release\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"valid"
894         "ity\":{\"not-after\":1705127532,\"not-before\":1610519532},\"version-code_no\":0,\"ver"
895         "sion-name\":\"1.0.0\"}";
896     AppProvisionVerifyResult result = ParseProvision(provision, info);
897     EXPECT_FALSE(result == PROVISION_OK);
898 }
899 
900 /**
901  * @tc.name: provision_test039
902  * @tc.desc: Test function of ParseProvision() failed for distribution-certificate is empty.
903  * @tc.size: MEDIUM
904  * @tc.type: FUNC
905  * @tc.level Level 1
906  * @tc.require: SR000H63TL
907  */
HWTEST_F(ProvisionTest, provision_test039, testing::ext::TestSize.Level1)908 HWTEST_F(ProvisionTest, provision_test039, testing::ext::TestSize.Level1)
909 {
910     ProfileInfo info;
911     std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"app-f"
912         "eature\":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"developer-"
913         "id\":\"OpenHarmony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
914         "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
915         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
916         "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
917         "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
918         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
919         "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
920         "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
921         "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
922         "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
923         "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
924         "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
925         "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
926         "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
927         "-----END CERTIFICATE-----\\n"
928         "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69"
929         "C7505BE341BDA5948C3C0CB44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7E"
930         "ED06506FCE6325EB2E2FAA019458B856AB10493A6718C7679A73F958732865\"]},\"is"
931         "suer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\":[\"\"]},\"t"
932         "ype\":\"release\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":{\"no"
933         "t-after\":1705127532,\"not-before\":1610519532},\"version-code\":\"0\",\"version-name\":\"1.0.0\"}";
934     AppProvisionVerifyResult result = ParseProvision(provision, info);
935     EXPECT_FALSE(result == PROVISION_OK);
936 }
937 
938 /**
939  * @tc.name: provision_test040
940  * @tc.desc: Test function of ParseProvision() failed for distribution-certificate is empty.
941  * @tc.size: MEDIUM
942  * @tc.type: FUNC
943  * @tc.level Level 1
944  * @tc.require: SR000H63TL
945  */
HWTEST_F(ProvisionTest, provision_test040, testing::ext::TestSize.Level1)946 HWTEST_F(ProvisionTest, provision_test040, testing::ext::TestSize.Level1)
947 {
948     ProfileInfo info;
949     std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"app-privilege-cap"
950         "abilities\": [99,\"88\"],\"bundle-info\":{\"app-feature\":\"hos_system_app\",\"bundle-"
951         "name\":\"com.example.nativetemplatedemo\",\"developer-id\":\"OpenHarmony\",\"develop"
952         "ment-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
953         "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
954         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
955         "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
956         "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
957         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
958         "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
959         "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
960         "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
961         "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
962         "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
963         "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
964         "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
965         "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
966         "-----END CERTIFICATE-----\\n"
967         "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341B"
968         "DA5948C3C0CB44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2F"
969         "AA019458B856AB10493A6718C7679A73F958732865\"]},\"issuer\":\"pki_internal\",\"perm"
970         "issions\":{\"restricted-permissions\":[\"\"]},\"type\":\"release\",\"uuid\":\"fe6"
971         "86e1b-3770-4824-a938-961b140a7c98\",\"validity\":{\"not-after\":1705127532,\"not-bef"
972         "ore\":1610519532},\"version-code\":1,\"version-name\":\"1.0.0\"}";
973     AppProvisionVerifyResult result = ParseProvision(provision, info);
974     EXPECT_FALSE(result == PROVISION_OK);
975 }
976 
977 /**
978  * @tc.name: provision_test041
979  * @tc.desc: Test function of ParseProvision() failed for distribution-certificate is empty.
980  * @tc.size: MEDIUM
981  * @tc.type: FUNC
982  * @tc.level Level 1
983  * @tc.require: SR000H63TL
984  */
HWTEST_F(ProvisionTest, provision_test041, testing::ext::TestSize.Level1)985 HWTEST_F(ProvisionTest, provision_test041, testing::ext::TestSize.Level1)
986 {
987     ProfileInfo info;
988     std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-in"
989         "fo\":{\"app-feature\":\"hos_system_app\",\"bundle-name\":\"\",\"developer-id\":\"Op"
990         "enHarmony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
991         "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
992         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
993         "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
994         "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
995         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
996         "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
997         "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
998         "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
999         "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
1000         "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
1001         "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
1002         "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
1003         "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
1004         "-----END CERTIFICATE-----\\n"
1005         "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA"
1006         "5948C3C0CB44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA0194"
1007         "58B856AB10493A6718C7679A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions"
1008         "\":{\"restricted-permissions\":[\"\"]},\"type\":\"release\",\"uuid\":\"fe686e1b-37"
1009         "70-4824-a938-961b140a7c98\",\"validity\":{\"not-after\":1705127532,\"not-before\":1610"
1010         "519532},\"version-code\":1,\"version-name\":\"1.0.0\"}";
1011     AppProvisionVerifyResult result = ParseProvision(provision, info);
1012     EXPECT_FALSE(result == PROVISION_OK);
1013 }
1014 
1015 /**
1016  * @tc.name: provision_test042
1017  * @tc.desc: Test function of ParseProvision() failed for distribution-certificate is empty.
1018  * @tc.size: MEDIUM
1019  * @tc.type: FUNC
1020  * @tc.level Level 1
1021  * @tc.require: SR000H63TL
1022  */
HWTEST_F(ProvisionTest, provision_test042, testing::ext::TestSize.Level1)1023 HWTEST_F(ProvisionTest, provision_test042, testing::ext::TestSize.Level1)
1024 {
1025     ProfileInfo info;
1026     std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"ap"
1027         "p-feature\":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"devel"
1028         "oper-id\":\"OpenHarmony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
1029         "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
1030         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1031         "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
1032         "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
1033         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1034         "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
1035         "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
1036         "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
1037         "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
1038         "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
1039         "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
1040         "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
1041         "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
1042         "-----END CERTIFICATE-----\\n"
1043         "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C"
1044         "0CB44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493"
1045         "A6718C7679A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-pe"
1046         "rmissions\":[\"\"]},\"type\":\"release\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c9"
1047         "8\",\"validity\":{\"not-after\":1705127532,\"not-before\":1610519532},\"version-code\":"
1048         "1,\"version-name\":\"\"}";
1049     AppProvisionVerifyResult result = ParseProvision(provision, info);
1050     EXPECT_FALSE(result == PROVISION_OK);
1051 }
1052 
1053 /**
1054  * @tc.name: provision_test043
1055  * @tc.desc: Test function of ParseProvision() failed for distribution-certificate is empty.
1056  * @tc.size: MEDIUM
1057  * @tc.type: FUNC
1058  * @tc.level Level 1
1059  * @tc.require: SR000H63TL
1060  */
HWTEST_F(ProvisionTest, provision_test043, testing::ext::TestSize.Level1)1061 HWTEST_F(ProvisionTest, provision_test043, testing::ext::TestSize.Level1)
1062 {
1063     ProfileInfo info;
1064     std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"a"
1065         "pp-feature\":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"d"
1066         "eveloper-id\":\"OpenHarmony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
1067         "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
1068         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1069         "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
1070         "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
1071         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1072         "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
1073         "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
1074         "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
1075         "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
1076         "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
1077         "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
1078         "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
1079         "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
1080         "-----END CERTIFICATE-----\\n"
1081         "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA59"
1082         "48C3C0CB44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B"
1083         "856AB10493A6718C7679A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"r"
1084         "estricted-permissions\":[\"\"]},\"type\":\"release\",\"uuid\":\"\",\"validity\":{\"no"
1085         "t-after\":1705127532,\"not-before\":1610519532},\"version-code\":1,\"version-name\":\"\"}";
1086     AppProvisionVerifyResult result = ParseProvision(provision, info);
1087     EXPECT_FALSE(result == PROVISION_OK);
1088 }
1089 
1090 /**
1091  * @tc.name: provision_test044
1092  * @tc.desc: Test function of ParseProvision() failed for distribution-certificate is empty.
1093  * @tc.size: MEDIUM
1094  * @tc.type: FUNC
1095  * @tc.level Level 1
1096  * @tc.require: SR000H63TL
1097  */
HWTEST_F(ProvisionTest, provision_test044, testing::ext::TestSize.Level1)1098 HWTEST_F(ProvisionTest, provision_test044, testing::ext::TestSize.Level1)
1099 {
1100     ProfileInfo info;
1101     std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"app"
1102         "-feature\":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"develo"
1103         "per-id\":\"\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
1104         "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
1105         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1106         "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
1107         "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
1108         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1109         "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
1110         "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
1111         "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
1112         "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
1113         "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
1114         "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
1115         "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
1116         "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
1117         "-----END CERTIFICATE-----\\n"
1118         "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5"
1119         "948C3C0CB44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B"
1120         "856AB10493A6718C7679A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"re"
1121         "stricted-permissions\":[\"\"]},\"type\":\"release\",\"uuid\":\"fe686e1b-3770-4824-a938"
1122         "-961b140a7c98\",\"validity\":{\"not-after\":1705127532,\"not-before\":1610519532},\"ver"
1123         "sion-code\":1,\"version-name\":\"1.0.0\"}";
1124     AppProvisionVerifyResult result = ParseProvision(provision, info);
1125     EXPECT_FALSE(result == PROVISION_OK);
1126 }
1127 
1128 /**
1129  * @tc.name: provision_test045
1130  * @tc.desc: Test function of ParseProvision() failed for development-certificate is empty..
1131  * @tc.size: MEDIUM
1132  * @tc.type: FUNC
1133  * @tc.level Level 1
1134  * @tc.require: SR000H63TL
1135  */
HWTEST_F(ProvisionTest, provision_test045, testing::ext::TestSize.Level1)1136 HWTEST_F(ProvisionTest, provision_test045, testing::ext::TestSize.Level1)
1137 {
1138     ProfileInfo info;
1139     std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"a"
1140         "pp-feature\":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"dev"
1141         "eloper-id\":\"OpenHarmony\",\"development-certificate\":\"\"},\"debug-info\":{\"device-i"
1142         "d-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0CB44ABCD530296054159EFE0BD16"
1143         "A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C7679A73F958732865\"]},\"i"
1144         "ssuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\":[\"\"]},\"type\":\"de"
1145         "bug\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":{\"not-after\":17051275"
1146         "32,\"not-before\":1610519532},\"version-code\":1,\"version-name\":\"1.0.0\"}";
1147     AppProvisionVerifyResult result = ParseProvision(provision, info);
1148     EXPECT_FALSE(result == PROVISION_OK);
1149 }
1150 
1151 /**
1152  * @tc.name: provision_test046
1153  * @tc.desc: Test function of ParseProvision() distribution-certificate is empty..
1154  * @tc.size: MEDIUM
1155  * @tc.type: FUNC
1156  * @tc.level Level 1
1157  * @tc.require: SR000H63TL
1158  */
HWTEST_F(ProvisionTest, provision_test046, testing::ext::TestSize.Level1)1159 HWTEST_F(ProvisionTest, provision_test046, testing::ext::TestSize.Level1)
1160 {
1161     ProfileInfo info;
1162     std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-in"
1163         "fo\":{\"app-feature\":\"\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"de"
1164         "veloper-id\":\"OpenHarmony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
1165         "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
1166         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1167         "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
1168         "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
1169         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1170         "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
1171         "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
1172         "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
1173         "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
1174         "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
1175         "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
1176         "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
1177         "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
1178         "-----END CERTIFICATE-----\\n"
1179         "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA59"
1180         "48C3C0CB44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B8"
1181         "56AB10493A6718C7679A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"re"
1182         "stricted-permissions\":[\"\"]},\"type\":\"release\",\"uuid\":\"fe686e1b-3770-4824-a938-"
1183         "961b140a7c98\",\"validity\":{\"not-after\":1705127532,\"not-before\":1610519532},\"ver"
1184         "sion-code\":1,\"version-name\":\"1.0.0\"}";
1185     AppProvisionVerifyResult result = ParseProvision(provision, info);
1186     EXPECT_FALSE(result == PROVISION_OK);
1187 }
1188 
1189 /**
1190  * @tc.name: provision_test047
1191  * @tc.desc: Test function of ParseProvision() interface for SUCCESS.
1192  * @tc.size: MEDIUM
1193  * @tc.type: FUNC
1194  * @tc.level Level 1
1195  * @tc.require: SR000H63TL
1196  */
HWTEST_F(ProvisionTest, provision_test047, testing::ext::TestSize.Level1)1197 HWTEST_F(ProvisionTest, provision_test047, testing::ext::TestSize.Level1)
1198 {
1199     ProfileInfo info;
1200     std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"a"
1201         "pl\":\"apl_\",\"app-feature\":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemp"
1202         "latedemo\",\"developer-id\":\"OpenHarmony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
1203         "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
1204         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1205         "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
1206         "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
1207         "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1208         "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
1209         "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
1210         "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
1211         "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
1212         "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
1213         "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
1214         "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
1215         "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
1216         "-----END CERTIFICATE-----\\n"
1217         "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA594"
1218         "8C3C0CB44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856A"
1219         "B10493A6718C7679A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restr"
1220         "icted-permissions\":[\"\"]},\"type\":\"debug\",\"uuid\":\"fe686e1b-3770-4824-a938-961b"
1221         "140a7c98\",\"validity\":{\"not-after\":1705127532,\"not-before\":1610519532},\"versio"
1222         "n-code\":3,\"version-name\":\"1.0.0\"}";
1223     AppProvisionVerifyResult result = ParseProvision(provision, info);
1224     EXPECT_TRUE(result == PROVISION_OK);
1225 }
1226 
1227 }
1228 }
1229