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