154aa6d63Sopenharmony_ci/*
254aa6d63Sopenharmony_ci * Copyright (c) 2024-2024 Huawei Device Co., Ltd.
354aa6d63Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
454aa6d63Sopenharmony_ci * you may not use this file except in compliance with the License.
554aa6d63Sopenharmony_ci * You may obtain a copy of the License at
654aa6d63Sopenharmony_ci *
754aa6d63Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
854aa6d63Sopenharmony_ci *
954aa6d63Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1054aa6d63Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1154aa6d63Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1254aa6d63Sopenharmony_ci * See the License for the specific language governing permissions and
1354aa6d63Sopenharmony_ci * limitations under the License.
1454aa6d63Sopenharmony_ci */
1554aa6d63Sopenharmony_ci#include <chrono>
1654aa6d63Sopenharmony_ci#include <thread>
1754aa6d63Sopenharmony_ci#include <string>
1854aa6d63Sopenharmony_ci#include <filesystem>
1954aa6d63Sopenharmony_ci
2054aa6d63Sopenharmony_ci#include "gtest/gtest.h"
2154aa6d63Sopenharmony_ci#include "options.h"
2254aa6d63Sopenharmony_ci#include "sign_tool_service_impl.h"
2354aa6d63Sopenharmony_ci#include "nlohmann/json.hpp"
2454aa6d63Sopenharmony_ci#include "signer_factory.h"
2554aa6d63Sopenharmony_ci#include "profile_sign_tool.h"
2654aa6d63Sopenharmony_ci#include "params_run_tool.h"
2754aa6d63Sopenharmony_ci#include "pkcs7_data.h"
2854aa6d63Sopenharmony_ci#include "signer_config.h"
2954aa6d63Sopenharmony_ci#include "local_signer.h"
3054aa6d63Sopenharmony_ci#include "bc_pkcs7_generator.h"
3154aa6d63Sopenharmony_ci#include "bc_signeddata_generator.h"
3254aa6d63Sopenharmony_ci#include "profile_verify.h"
3354aa6d63Sopenharmony_ci#include "constant.h"
3454aa6d63Sopenharmony_ci#include "cms_utils.h"
3554aa6d63Sopenharmony_ci
3654aa6d63Sopenharmony_ciusing  nlohmann::json;
3754aa6d63Sopenharmony_ci
3854aa6d63Sopenharmony_cinamespace OHOS {
3954aa6d63Sopenharmony_cinamespace SignatureTools {
4054aa6d63Sopenharmony_ci
4154aa6d63Sopenharmony_ci// sign profile使用的全局参数
4254aa6d63Sopenharmony_cistatic const std::string SIGN_PROFILE_MODE = "localSign";
4354aa6d63Sopenharmony_cistatic const std::string SIGN_PROFILE_KEY_ALIAS = "oh-profile1-key-v1";
4454aa6d63Sopenharmony_cistatic const std::string SIGN_PROFILE_PROFILE_CERT_FILE = "./signProfile/profile-release1.pem";
4554aa6d63Sopenharmony_cistatic const std::string SIGN_PROFILE_SIGN_ALG = "SHA384withECDSA";
4654aa6d63Sopenharmony_cistatic const std::string SIGN_PROFILE_KEY_STORE_FILE = "./signProfile/ohtest.p12";
4754aa6d63Sopenharmony_cistatic const std::string SIGN_PROFILE_OUT_FILE = "./signProfile/signed-profile.p7b";
4854aa6d63Sopenharmony_cistatic const std::string SIGN_PROFILE_IN_FILE = "./signProfile/profile.json";
4954aa6d63Sopenharmony_ci
5054aa6d63Sopenharmony_cistatic const std::string SIGN_PROFILE_CERT_PEM = "./signProfile/profile-release1-cert.pem";
5154aa6d63Sopenharmony_cistatic const std::string SIGN_PROFILE_REVERSE_PEM = "./signProfile/profile-release1-reverse.pem";
5254aa6d63Sopenharmony_cistatic const std::string SIGN_PROFILE_DOUBLE_CERT_PEM = "./signProfile/profile-release1-invalid_cert_chain.pem";
5354aa6d63Sopenharmony_cistatic const std::string SIGN_PROFILE_TMP_P7B = "./signProfile/tmp.p7b";
5454aa6d63Sopenharmony_ci
5554aa6d63Sopenharmony_ci// verify profile 使用的全局参数
5654aa6d63Sopenharmony_cistatic const std::string VERIFY_PROFILE_IN_FILE = "./signProfile/app1-profile1.p7b";
5754aa6d63Sopenharmony_cistatic const std::string VERIFY_PROFILE_OUT_FILE = "./signProfile/VerifyResult.json";
5854aa6d63Sopenharmony_ci// sign app 使用全局参数
5954aa6d63Sopenharmony_cistatic const std::string SIGN_APP_MODE = "localSign";
6054aa6d63Sopenharmony_cistatic const std::string SIGN_APP_KEY_ALIAS = "oh-app1-key-v1";
6154aa6d63Sopenharmony_cistatic const std::string SIGN_APP_APP_CERT_FILE = "./signProfile/app-release1.pem";
6254aa6d63Sopenharmony_cistatic const std::string SIGN_APP_PROFILE_FILE = "./signProfile/app1-profile1.p7b";
6354aa6d63Sopenharmony_cistatic const std::string SIGN_APP_IN_FILE = "./signProfile/unsigned.hap";
6454aa6d63Sopenharmony_cistatic const std::string SIGN_APP_IN_FILE_TXT = "./signProfile/unsigned.txt";
6554aa6d63Sopenharmony_cistatic const std::string SIGN_APP_SIGN_ALG = "SHA256withECDSA";
6654aa6d63Sopenharmony_cistatic const std::string SIGN_APP_KEY_STORE_FILE = "./signProfile/ohtest.p12";
6754aa6d63Sopenharmony_cistatic const std::string SIGN_APP_OUT_FILE = "./signProfile/signed.hap";
6854aa6d63Sopenharmony_ci
6954aa6d63Sopenharmony_ciclass ProfileTest : public testing::Test {
7054aa6d63Sopenharmony_cipublic:
7154aa6d63Sopenharmony_ci    static void SetUpTestCase(void);
7254aa6d63Sopenharmony_ci    static void TearDownTestCase(void);
7354aa6d63Sopenharmony_ci    void SetUp()override;
7454aa6d63Sopenharmony_ci    void TearDown()override;
7554aa6d63Sopenharmony_ci};
7654aa6d63Sopenharmony_civoid ProfileTest::SetUpTestCase(void)
7754aa6d63Sopenharmony_ci{
7854aa6d63Sopenharmony_ci    std::filesystem::copy(SIGN_APP_IN_FILE_TXT, SIGN_APP_IN_FILE);
7954aa6d63Sopenharmony_ci}
8054aa6d63Sopenharmony_ci
8154aa6d63Sopenharmony_civoid ProfileTest::TearDownTestCase(void)
8254aa6d63Sopenharmony_ci{
8354aa6d63Sopenharmony_ci    std::filesystem::remove(SIGN_APP_IN_FILE);
8454aa6d63Sopenharmony_ci}
8554aa6d63Sopenharmony_ci
8654aa6d63Sopenharmony_civoid ProfileTest::SetUp()
8754aa6d63Sopenharmony_ci{
8854aa6d63Sopenharmony_ci}
8954aa6d63Sopenharmony_ci
9054aa6d63Sopenharmony_civoid ProfileTest::TearDown()
9154aa6d63Sopenharmony_ci{
9254aa6d63Sopenharmony_ci}
9354aa6d63Sopenharmony_ci
9454aa6d63Sopenharmony_ci/**
9554aa6d63Sopenharmony_ci * @tc.name: profile_test004
9654aa6d63Sopenharmony_ci * @tc.desc: Test function of Pkcs7Generator::GenerateSignedData() failed for empty content.
9754aa6d63Sopenharmony_ci * @tc.size: MEDIUM
9854aa6d63Sopenharmony_ci * @tc.type: FUNC
9954aa6d63Sopenharmony_ci * @tc.level Level 1
10054aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
10154aa6d63Sopenharmony_ci */
10254aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test004, testing::ext::TestSize.Level1)
10354aa6d63Sopenharmony_ci{
10454aa6d63Sopenharmony_ci    std::string content;
10554aa6d63Sopenharmony_ci    SignerConfig* config = nullptr;
10654aa6d63Sopenharmony_ci    std::string ret;
10754aa6d63Sopenharmony_ci    std::shared_ptr<Pkcs7Generator> generator = std::make_shared<BCPkcs7Generator>();
10854aa6d63Sopenharmony_ci    int result = generator->GenerateSignedData(content, config, ret);
10954aa6d63Sopenharmony_ci    EXPECT_TRUE(result <= 0);
11054aa6d63Sopenharmony_ci}
11154aa6d63Sopenharmony_ci
11254aa6d63Sopenharmony_ci/**
11354aa6d63Sopenharmony_ci * @tc.name: profile_test005
11454aa6d63Sopenharmony_ci * @tc.desc: Test function of Pkcs7Generator::GenerateSignedData() failed for nullptr config.
11554aa6d63Sopenharmony_ci * @tc.size: MEDIUM
11654aa6d63Sopenharmony_ci * @tc.type: FUNC
11754aa6d63Sopenharmony_ci * @tc.level Level 1
11854aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
11954aa6d63Sopenharmony_ci */
12054aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test005, testing::ext::TestSize.Level1)
12154aa6d63Sopenharmony_ci{
12254aa6d63Sopenharmony_ci    std::string content = "hello,world";
12354aa6d63Sopenharmony_ci    SignerConfig* config = nullptr;
12454aa6d63Sopenharmony_ci    std::string ret;
12554aa6d63Sopenharmony_ci    std::shared_ptr<Pkcs7Generator> generator = std::make_shared<BCPkcs7Generator>();
12654aa6d63Sopenharmony_ci    int result = generator->GenerateSignedData(content, config, ret);
12754aa6d63Sopenharmony_ci    EXPECT_TRUE(result <= 0);
12854aa6d63Sopenharmony_ci}
12954aa6d63Sopenharmony_ci
13054aa6d63Sopenharmony_ci/**
13154aa6d63Sopenharmony_ci * @tc.name: profile_test006
13254aa6d63Sopenharmony_ci * @tc.desc: Test function of Pkcs7Generator::GenerateSignedData() failed for nullptr signer.
13354aa6d63Sopenharmony_ci * @tc.size: MEDIUM
13454aa6d63Sopenharmony_ci * @tc.type: FUNC
13554aa6d63Sopenharmony_ci * @tc.level Level 1
13654aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
13754aa6d63Sopenharmony_ci */
13854aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test006, testing::ext::TestSize.Level1)
13954aa6d63Sopenharmony_ci{
14054aa6d63Sopenharmony_ci    Options options;
14154aa6d63Sopenharmony_ci    options[Options::MODE] = SIGN_APP_MODE;
14254aa6d63Sopenharmony_ci    options[Options::KEY_ALIAS] = SIGN_APP_KEY_ALIAS;
14354aa6d63Sopenharmony_ci    options[Options::APP_CERT_FILE] = SIGN_APP_APP_CERT_FILE;
14454aa6d63Sopenharmony_ci    options[Options::PROFILE_FILE] = SIGN_APP_PROFILE_FILE;
14554aa6d63Sopenharmony_ci    options[Options::IN_FILE] = SIGN_APP_IN_FILE;
14654aa6d63Sopenharmony_ci    options[Options::SIGN_ALG] = SIGN_APP_SIGN_ALG;
14754aa6d63Sopenharmony_ci    options[Options::KEY_STORE_FILE] = "";
14854aa6d63Sopenharmony_ci    options[Options::OUT_FILE] = SIGN_APP_OUT_FILE;
14954aa6d63Sopenharmony_ci    char keyStorePwd[] = "123456";
15054aa6d63Sopenharmony_ci    char keypwd[] = "123456";
15154aa6d63Sopenharmony_ci    options[Options::KEY_RIGHTS] = keyStorePwd;
15254aa6d63Sopenharmony_ci    options[Options::KEY_STORE_RIGHTS] = keypwd;
15354aa6d63Sopenharmony_ci
15454aa6d63Sopenharmony_ci    // config设置算法 signer
15554aa6d63Sopenharmony_ci    SignerConfig config;
15654aa6d63Sopenharmony_ci    config.SetOptions(&options);
15754aa6d63Sopenharmony_ci    SignatureAlgorithmHelper algClass;
15854aa6d63Sopenharmony_ci    std::vector<SignatureAlgorithmHelper> sigs;
15954aa6d63Sopenharmony_ci    sigs.resize(1);
16054aa6d63Sopenharmony_ci    sigs[0].m_id = SignatureAlgorithmId::ECDSA_WITH_SHA256;
16154aa6d63Sopenharmony_ci    config.SetSignatureAlgorithms(sigs);
16254aa6d63Sopenharmony_ci
16354aa6d63Sopenharmony_ci    std::string content = "digest content";
16454aa6d63Sopenharmony_ci    std::string signedData;
16554aa6d63Sopenharmony_ci    std::shared_ptr<Pkcs7Generator> pkcs7Generator = std::make_shared<BCPkcs7Generator>();
16654aa6d63Sopenharmony_ci    int result = pkcs7Generator->GenerateSignedData(content, &config, signedData);
16754aa6d63Sopenharmony_ci    EXPECT_TRUE(result < 0);
16854aa6d63Sopenharmony_ci}
16954aa6d63Sopenharmony_ci
17054aa6d63Sopenharmony_ci/**
17154aa6d63Sopenharmony_ci * @tc.name: profile_test007
17254aa6d63Sopenharmony_ci * @tc.desc: Test function of Pkcs7Generator::GenerateSignedData() failed for generate pkcs7 block.
17354aa6d63Sopenharmony_ci * @tc.size: MEDIUM
17454aa6d63Sopenharmony_ci * @tc.type: FUNC
17554aa6d63Sopenharmony_ci * @tc.level Level 1
17654aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
17754aa6d63Sopenharmony_ci */
17854aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test007, testing::ext::TestSize.Level1)
17954aa6d63Sopenharmony_ci{
18054aa6d63Sopenharmony_ci    Options options;
18154aa6d63Sopenharmony_ci    options[Options::MODE] = SIGN_APP_MODE;
18254aa6d63Sopenharmony_ci    options[Options::KEY_ALIAS] = SIGN_APP_KEY_ALIAS;
18354aa6d63Sopenharmony_ci    options[Options::APP_CERT_FILE] = SIGN_APP_APP_CERT_FILE;
18454aa6d63Sopenharmony_ci    options[Options::PROFILE_FILE] = SIGN_APP_PROFILE_FILE;
18554aa6d63Sopenharmony_ci    options[Options::IN_FILE] = SIGN_APP_IN_FILE;
18654aa6d63Sopenharmony_ci    options[Options::SIGN_ALG] = SIGN_APP_SIGN_ALG;
18754aa6d63Sopenharmony_ci    options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
18854aa6d63Sopenharmony_ci    options[Options::OUT_FILE] = SIGN_APP_OUT_FILE;
18954aa6d63Sopenharmony_ci    char keyStorePwd[] = "123456";
19054aa6d63Sopenharmony_ci    char keypwd[] = "123456";
19154aa6d63Sopenharmony_ci    options[Options::KEY_RIGHTS] = keyStorePwd;
19254aa6d63Sopenharmony_ci    options[Options::KEY_STORE_RIGHTS] = keypwd;
19354aa6d63Sopenharmony_ci
19454aa6d63Sopenharmony_ci    // config设置算法 signer
19554aa6d63Sopenharmony_ci    SignerConfig config;
19654aa6d63Sopenharmony_ci    config.SetOptions(&options);
19754aa6d63Sopenharmony_ci    SignatureAlgorithmHelper algClass;
19854aa6d63Sopenharmony_ci    std::vector<SignatureAlgorithmHelper> sigs;
19954aa6d63Sopenharmony_ci    sigs.resize(1);
20054aa6d63Sopenharmony_ci    sigs[0].m_id = SignatureAlgorithmId::DSA_WITH_SHA512;
20154aa6d63Sopenharmony_ci    config.SetSignatureAlgorithms(sigs);
20254aa6d63Sopenharmony_ci
20354aa6d63Sopenharmony_ci    std::string content = "digest content";
20454aa6d63Sopenharmony_ci    std::string signedData;
20554aa6d63Sopenharmony_ci    std::shared_ptr<Pkcs7Generator> pkcs7Generator = std::make_shared<BCPkcs7Generator>();
20654aa6d63Sopenharmony_ci    int result = pkcs7Generator->GenerateSignedData(content, &config, signedData);
20754aa6d63Sopenharmony_ci    EXPECT_TRUE(result < 0);
20854aa6d63Sopenharmony_ci}
20954aa6d63Sopenharmony_ci
21054aa6d63Sopenharmony_ci/**
21154aa6d63Sopenharmony_ci * @tc.name: profile_test008
21254aa6d63Sopenharmony_ci * @tc.desc: Test function of Pkcs7Generator::GenerateSignedData() failed for invalid certchain.
21354aa6d63Sopenharmony_ci * @tc.size: MEDIUM
21454aa6d63Sopenharmony_ci * @tc.type: FUNC
21554aa6d63Sopenharmony_ci * @tc.level Level 1
21654aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
21754aa6d63Sopenharmony_ci */
21854aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test008, testing::ext::TestSize.Level1)
21954aa6d63Sopenharmony_ci{
22054aa6d63Sopenharmony_ci    Options options;
22154aa6d63Sopenharmony_ci    options[Options::MODE] = SIGN_APP_MODE;
22254aa6d63Sopenharmony_ci    options[Options::KEY_ALIAS] = SIGN_PROFILE_KEY_ALIAS;
22354aa6d63Sopenharmony_ci    options[Options::APP_CERT_FILE] = SIGN_PROFILE_DOUBLE_CERT_PEM;
22454aa6d63Sopenharmony_ci    options[Options::PROFILE_FILE] = SIGN_APP_PROFILE_FILE;
22554aa6d63Sopenharmony_ci    options[Options::IN_FILE] = SIGN_APP_IN_FILE;
22654aa6d63Sopenharmony_ci    options[Options::SIGN_ALG] = SIGN_APP_SIGN_ALG;
22754aa6d63Sopenharmony_ci    options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
22854aa6d63Sopenharmony_ci    options[Options::OUT_FILE] = SIGN_APP_OUT_FILE;
22954aa6d63Sopenharmony_ci    char keyStorePwd[] = "123456";
23054aa6d63Sopenharmony_ci    char keypwd[] = "123456";
23154aa6d63Sopenharmony_ci    options[Options::KEY_RIGHTS] = keyStorePwd;
23254aa6d63Sopenharmony_ci    options[Options::KEY_STORE_RIGHTS] = keypwd;
23354aa6d63Sopenharmony_ci
23454aa6d63Sopenharmony_ci    // config设置算法 signer
23554aa6d63Sopenharmony_ci    SignerConfig config;
23654aa6d63Sopenharmony_ci    config.SetOptions(&options);
23754aa6d63Sopenharmony_ci    SignatureAlgorithmHelper algClass;
23854aa6d63Sopenharmony_ci    std::vector<SignatureAlgorithmHelper> sigs;
23954aa6d63Sopenharmony_ci    sigs.resize(1);
24054aa6d63Sopenharmony_ci    sigs[0].m_id = SignatureAlgorithmId::ECDSA_WITH_SHA256;
24154aa6d63Sopenharmony_ci    config.SetSignatureAlgorithms(sigs);
24254aa6d63Sopenharmony_ci
24354aa6d63Sopenharmony_ci    std::string content = "digest content";
24454aa6d63Sopenharmony_ci    std::string signedData;
24554aa6d63Sopenharmony_ci    std::shared_ptr<Pkcs7Generator> pkcs7Generator = std::make_shared<BCPkcs7Generator>();
24654aa6d63Sopenharmony_ci    int result = pkcs7Generator->GenerateSignedData(content, &config, signedData);
24754aa6d63Sopenharmony_ci    EXPECT_TRUE(result < 0);
24854aa6d63Sopenharmony_ci}
24954aa6d63Sopenharmony_ci
25054aa6d63Sopenharmony_ci/**
25154aa6d63Sopenharmony_ci * @tc.name: profile_test009
25254aa6d63Sopenharmony_ci * @tc.desc: Test function of SignedDataGenerator::GenerateSignedData() failed for invalid sigAlg.
25354aa6d63Sopenharmony_ci * @tc.size: MEDIUM
25454aa6d63Sopenharmony_ci * @tc.type: FUNC
25554aa6d63Sopenharmony_ci * @tc.level Level 1
25654aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
25754aa6d63Sopenharmony_ci */
25854aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test009, testing::ext::TestSize.Level1)
25954aa6d63Sopenharmony_ci{
26054aa6d63Sopenharmony_ci    Options options;
26154aa6d63Sopenharmony_ci    options[Options::MODE] = SIGN_APP_MODE;
26254aa6d63Sopenharmony_ci    options[Options::KEY_ALIAS] = SIGN_APP_KEY_ALIAS;
26354aa6d63Sopenharmony_ci    options[Options::APP_CERT_FILE] = SIGN_APP_APP_CERT_FILE;
26454aa6d63Sopenharmony_ci    options[Options::PROFILE_FILE] = SIGN_APP_PROFILE_FILE;
26554aa6d63Sopenharmony_ci    options[Options::IN_FILE] = SIGN_APP_IN_FILE;
26654aa6d63Sopenharmony_ci    options[Options::SIGN_ALG] = SIGN_APP_SIGN_ALG;
26754aa6d63Sopenharmony_ci    options[Options::KEY_STORE_FILE] = SIGN_APP_KEY_STORE_FILE;
26854aa6d63Sopenharmony_ci    options[Options::OUT_FILE] = SIGN_APP_OUT_FILE;
26954aa6d63Sopenharmony_ci    char keyStorePwd[] = "123456";
27054aa6d63Sopenharmony_ci    char keypwd[] = "123456";
27154aa6d63Sopenharmony_ci    options[Options::KEY_RIGHTS] = keyStorePwd;
27254aa6d63Sopenharmony_ci    options[Options::KEY_STORE_RIGHTS] = keypwd;
27354aa6d63Sopenharmony_ci
27454aa6d63Sopenharmony_ci    // config设置算法 signer
27554aa6d63Sopenharmony_ci    SignerConfig config;
27654aa6d63Sopenharmony_ci    config.SetOptions(&options);
27754aa6d63Sopenharmony_ci    SignatureAlgorithmHelper algClass;
27854aa6d63Sopenharmony_ci    std::vector<SignatureAlgorithmHelper> sigs;
27954aa6d63Sopenharmony_ci    sigs.resize(1);
28054aa6d63Sopenharmony_ci    sigs[0].m_id = SignatureAlgorithmId::ECDSA_WITH_SHA512;
28154aa6d63Sopenharmony_ci    config.SetSignatureAlgorithms(sigs);
28254aa6d63Sopenharmony_ci
28354aa6d63Sopenharmony_ci    std::string content = "digest content";
28454aa6d63Sopenharmony_ci    std::string signedData;
28554aa6d63Sopenharmony_ci    std::shared_ptr<BCSignedDataGenerator> signedDataGenerator =
28654aa6d63Sopenharmony_ci        std::make_shared<BCSignedDataGenerator>();
28754aa6d63Sopenharmony_ci    signedDataGenerator->SetOwnerId(OWNERID_OID);
28854aa6d63Sopenharmony_ci    int result = signedDataGenerator->GenerateSignedData(content, &config, signedData);
28954aa6d63Sopenharmony_ci    EXPECT_TRUE(result < 0);
29054aa6d63Sopenharmony_ci}
29154aa6d63Sopenharmony_ci
29254aa6d63Sopenharmony_ci/**
29354aa6d63Sopenharmony_ci * @tc.name: profile_test010
29454aa6d63Sopenharmony_ci * @tc.desc: Test function of SignedDataGenerator::GenerateSignedData() failed for invalid certchain.
29554aa6d63Sopenharmony_ci * @tc.size: MEDIUM
29654aa6d63Sopenharmony_ci * @tc.type: FUNC
29754aa6d63Sopenharmony_ci * @tc.level Level 1
29854aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
29954aa6d63Sopenharmony_ci */
30054aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test010, testing::ext::TestSize.Level1)
30154aa6d63Sopenharmony_ci{
30254aa6d63Sopenharmony_ci    Options options;
30354aa6d63Sopenharmony_ci    options[Options::MODE] = SIGN_APP_MODE;
30454aa6d63Sopenharmony_ci    options[Options::KEY_ALIAS] = SIGN_PROFILE_KEY_ALIAS;
30554aa6d63Sopenharmony_ci    options[Options::APP_CERT_FILE] = SIGN_PROFILE_DOUBLE_CERT_PEM;
30654aa6d63Sopenharmony_ci    options[Options::PROFILE_FILE] = SIGN_APP_PROFILE_FILE;
30754aa6d63Sopenharmony_ci    options[Options::IN_FILE] = SIGN_APP_IN_FILE;
30854aa6d63Sopenharmony_ci    options[Options::SIGN_ALG] = SIGN_APP_SIGN_ALG;
30954aa6d63Sopenharmony_ci    options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
31054aa6d63Sopenharmony_ci    options[Options::OUT_FILE] = SIGN_APP_OUT_FILE;
31154aa6d63Sopenharmony_ci    char keyStorePwd[] = "123456";
31254aa6d63Sopenharmony_ci    char keypwd[] = "123456";
31354aa6d63Sopenharmony_ci    options[Options::KEY_RIGHTS] = keyStorePwd;
31454aa6d63Sopenharmony_ci    options[Options::KEY_STORE_RIGHTS] = keypwd;
31554aa6d63Sopenharmony_ci
31654aa6d63Sopenharmony_ci    // config设置算法 signer
31754aa6d63Sopenharmony_ci    SignerConfig config;
31854aa6d63Sopenharmony_ci    config.SetOptions(&options);
31954aa6d63Sopenharmony_ci    SignatureAlgorithmHelper algClass;
32054aa6d63Sopenharmony_ci    std::vector<SignatureAlgorithmHelper> sigs;
32154aa6d63Sopenharmony_ci    sigs.resize(1);
32254aa6d63Sopenharmony_ci    sigs[0].m_id = SignatureAlgorithmId::ECDSA_WITH_SHA256;
32354aa6d63Sopenharmony_ci    config.SetSignatureAlgorithms(sigs);
32454aa6d63Sopenharmony_ci
32554aa6d63Sopenharmony_ci    std::string content = "digest content";
32654aa6d63Sopenharmony_ci    std::string signedData;
32754aa6d63Sopenharmony_ci    std::shared_ptr<BCSignedDataGenerator> signedDataGenerator =
32854aa6d63Sopenharmony_ci        std::make_shared<BCSignedDataGenerator>();
32954aa6d63Sopenharmony_ci    signedDataGenerator->SetOwnerId("ownerID str");
33054aa6d63Sopenharmony_ci    int result = signedDataGenerator->GenerateSignedData(content, &config, signedData);
33154aa6d63Sopenharmony_ci    EXPECT_TRUE(result < 0);
33254aa6d63Sopenharmony_ci}
33354aa6d63Sopenharmony_ci
33454aa6d63Sopenharmony_ci/**
33554aa6d63Sopenharmony_ci * @tc.name: profile_test011
33654aa6d63Sopenharmony_ci * @tc.desc: Test function of Pkcs7Data::Verify() failed for invalid certchain.
33754aa6d63Sopenharmony_ci * @tc.size: MEDIUM
33854aa6d63Sopenharmony_ci * @tc.type: FUNC
33954aa6d63Sopenharmony_ci * @tc.level Level 1
34054aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
34154aa6d63Sopenharmony_ci */
34254aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test011, testing::ext::TestSize.Level1)
34354aa6d63Sopenharmony_ci{
34454aa6d63Sopenharmony_ci    std::string content = "signed content data";
34554aa6d63Sopenharmony_ci    Options options;
34654aa6d63Sopenharmony_ci    char keyStorePwd[] = "123456";
34754aa6d63Sopenharmony_ci    char keypwd[] = "123456";
34854aa6d63Sopenharmony_ci    options[Options::KEY_ALIAS] = SIGN_PROFILE_KEY_ALIAS;
34954aa6d63Sopenharmony_ci    options[Options::MODE] = SIGN_PROFILE_MODE;
35054aa6d63Sopenharmony_ci    options[Options::PROFILE_CERT_FILE] = SIGN_PROFILE_PROFILE_CERT_FILE;
35154aa6d63Sopenharmony_ci    options[Options::SIGN_ALG] = SIGN_PROFILE_SIGN_ALG;
35254aa6d63Sopenharmony_ci    options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
35354aa6d63Sopenharmony_ci    options[Options::OUT_FILE] = SIGN_PROFILE_OUT_FILE;
35454aa6d63Sopenharmony_ci    options[Options::IN_FILE] = SIGN_PROFILE_IN_FILE;
35554aa6d63Sopenharmony_ci    options[Options::KEY_RIGHTS] = keypwd;
35654aa6d63Sopenharmony_ci    options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
35754aa6d63Sopenharmony_ci
35854aa6d63Sopenharmony_ci    LocalizationAdapter adapter(&options);
35954aa6d63Sopenharmony_ci    SignerFactory factory;
36054aa6d63Sopenharmony_ci    std::shared_ptr<Signer> signer = factory.GetSigner(adapter);
36154aa6d63Sopenharmony_ci    PKCS7Data p7;
36254aa6d63Sopenharmony_ci    std::string p7b;
36354aa6d63Sopenharmony_ci    PKCS7* pkcs7 = nullptr;
36454aa6d63Sopenharmony_ci    int result = p7.Sign(content, signer, "SHA384withECDSA", p7b);
36554aa6d63Sopenharmony_ci    EXPECT_EQ(result, 0);
36654aa6d63Sopenharmony_ci    const unsigned char* p = reinterpret_cast<const unsigned char*>(p7b.data());
36754aa6d63Sopenharmony_ci    pkcs7 = d2i_PKCS7(nullptr, &p, static_cast<long>(p7b.size()));
36854aa6d63Sopenharmony_ci    STACK_OF(X509)* certs = pkcs7->d.sign->cert;
36954aa6d63Sopenharmony_ci    int num = 1;
37054aa6d63Sopenharmony_ci    while (sk_X509_num(certs) > num) {
37154aa6d63Sopenharmony_ci        X509* cert = sk_X509_delete(certs, sk_X509_num(certs) - 1);
37254aa6d63Sopenharmony_ci        X509_free(cert);
37354aa6d63Sopenharmony_ci    }
37454aa6d63Sopenharmony_ci    sk_X509_push(certs, sk_X509_value(certs, 0));
37554aa6d63Sopenharmony_ci    X509_up_ref(sk_X509_value(certs, 0));
37654aa6d63Sopenharmony_ci    unsigned char* out = nullptr;
37754aa6d63Sopenharmony_ci    int len = 0;
37854aa6d63Sopenharmony_ci    len = i2d_PKCS7(pkcs7, &out);
37954aa6d63Sopenharmony_ci    p7b.assign(out, out + len);
38054aa6d63Sopenharmony_ci    result = p7.Parse(p7b);
38154aa6d63Sopenharmony_ci    EXPECT_EQ(result, 0);
38254aa6d63Sopenharmony_ci    result = p7.Verify();
38354aa6d63Sopenharmony_ci    PKCS7_free(pkcs7);
38454aa6d63Sopenharmony_ci    EXPECT_TRUE(result < 0);
38554aa6d63Sopenharmony_ci}
38654aa6d63Sopenharmony_ci
38754aa6d63Sopenharmony_ci/**
38854aa6d63Sopenharmony_ci * @tc.name: profile_test013
38954aa6d63Sopenharmony_ci * @tc.desc: Test function of Pkcs7Data::Verify() failed for invalid certchain.
39054aa6d63Sopenharmony_ci * @tc.size: MEDIUM
39154aa6d63Sopenharmony_ci * @tc.type: FUNC
39254aa6d63Sopenharmony_ci * @tc.level Level 1
39354aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
39454aa6d63Sopenharmony_ci */
39554aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test013, testing::ext::TestSize.Level1)
39654aa6d63Sopenharmony_ci{
39754aa6d63Sopenharmony_ci    std::string content = "signed content data";
39854aa6d63Sopenharmony_ci    Options options;
39954aa6d63Sopenharmony_ci    char keyStorePwd[] = "123456";
40054aa6d63Sopenharmony_ci    char keypwd[] = "123456";
40154aa6d63Sopenharmony_ci    options[Options::KEY_ALIAS] = SIGN_PROFILE_KEY_ALIAS;
40254aa6d63Sopenharmony_ci    options[Options::MODE] = SIGN_PROFILE_MODE;
40354aa6d63Sopenharmony_ci    options[Options::PROFILE_CERT_FILE] = SIGN_PROFILE_PROFILE_CERT_FILE;
40454aa6d63Sopenharmony_ci    options[Options::SIGN_ALG] = SIGN_PROFILE_SIGN_ALG;
40554aa6d63Sopenharmony_ci    options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
40654aa6d63Sopenharmony_ci    options[Options::OUT_FILE] = SIGN_PROFILE_OUT_FILE;
40754aa6d63Sopenharmony_ci    options[Options::IN_FILE] = SIGN_PROFILE_IN_FILE;
40854aa6d63Sopenharmony_ci    options[Options::KEY_RIGHTS] = keypwd;
40954aa6d63Sopenharmony_ci    options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
41054aa6d63Sopenharmony_ci
41154aa6d63Sopenharmony_ci    LocalizationAdapter adapter(&options);
41254aa6d63Sopenharmony_ci    SignerFactory factory;
41354aa6d63Sopenharmony_ci    std::shared_ptr<Signer> signer = factory.GetSigner(adapter);
41454aa6d63Sopenharmony_ci    PKCS7Data p7;
41554aa6d63Sopenharmony_ci    std::string p7b;
41654aa6d63Sopenharmony_ci    PKCS7* pkcs7 = nullptr;
41754aa6d63Sopenharmony_ci    int result = p7.Sign(content, signer, "SHA384withECDSA", p7b);
41854aa6d63Sopenharmony_ci    EXPECT_EQ(result, 0);
41954aa6d63Sopenharmony_ci    const unsigned char* p = reinterpret_cast<const unsigned char*>(p7b.data());
42054aa6d63Sopenharmony_ci    pkcs7 = d2i_PKCS7(nullptr, &p, static_cast<long>(p7b.size()));
42154aa6d63Sopenharmony_ci    STACK_OF(X509)* certs = pkcs7->d.sign->cert;
42254aa6d63Sopenharmony_ci    sk_X509_delete(certs, 2);
42354aa6d63Sopenharmony_ci    unsigned char* out = nullptr;
42454aa6d63Sopenharmony_ci    int len = 0;
42554aa6d63Sopenharmony_ci    len = i2d_PKCS7(pkcs7, &out);
42654aa6d63Sopenharmony_ci    p7b.assign(out, out + len);
42754aa6d63Sopenharmony_ci    result = p7.Parse(p7b);
42854aa6d63Sopenharmony_ci    EXPECT_EQ(result, 0);
42954aa6d63Sopenharmony_ci    result = p7.Verify();
43054aa6d63Sopenharmony_ci    PKCS7_free(pkcs7);
43154aa6d63Sopenharmony_ci    EXPECT_TRUE(result < 0);
43254aa6d63Sopenharmony_ci}
43354aa6d63Sopenharmony_ci
43454aa6d63Sopenharmony_ci/**
43554aa6d63Sopenharmony_ci * @tc.name: profile_test014
43654aa6d63Sopenharmony_ci * @tc.desc: Test function of Pkcs7Data::Verify() failed for invalid certchain.
43754aa6d63Sopenharmony_ci * @tc.size: MEDIUM
43854aa6d63Sopenharmony_ci * @tc.type: FUNC
43954aa6d63Sopenharmony_ci * @tc.level Level 1
44054aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
44154aa6d63Sopenharmony_ci */
44254aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test014, testing::ext::TestSize.Level1)
44354aa6d63Sopenharmony_ci{
44454aa6d63Sopenharmony_ci    std::string content = "signed content data";
44554aa6d63Sopenharmony_ci    Options options;
44654aa6d63Sopenharmony_ci    char keyStorePwd[] = "123456";
44754aa6d63Sopenharmony_ci    char keypwd[] = "123456";
44854aa6d63Sopenharmony_ci    options[Options::KEY_ALIAS] = SIGN_PROFILE_KEY_ALIAS;
44954aa6d63Sopenharmony_ci    options[Options::MODE] = SIGN_PROFILE_MODE;
45054aa6d63Sopenharmony_ci    options[Options::PROFILE_CERT_FILE] = SIGN_PROFILE_PROFILE_CERT_FILE;
45154aa6d63Sopenharmony_ci    options[Options::SIGN_ALG] = SIGN_PROFILE_SIGN_ALG;
45254aa6d63Sopenharmony_ci    options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
45354aa6d63Sopenharmony_ci    options[Options::OUT_FILE] = SIGN_PROFILE_OUT_FILE;
45454aa6d63Sopenharmony_ci    options[Options::IN_FILE] = SIGN_PROFILE_IN_FILE;
45554aa6d63Sopenharmony_ci    options[Options::KEY_RIGHTS] = keypwd;
45654aa6d63Sopenharmony_ci    options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
45754aa6d63Sopenharmony_ci
45854aa6d63Sopenharmony_ci    LocalizationAdapter adapter(&options);
45954aa6d63Sopenharmony_ci    SignerFactory factory;
46054aa6d63Sopenharmony_ci    std::shared_ptr<Signer> signer = factory.GetSigner(adapter);
46154aa6d63Sopenharmony_ci    PKCS7Data p7;
46254aa6d63Sopenharmony_ci    std::string p7b;
46354aa6d63Sopenharmony_ci    PKCS7* pkcs7 = nullptr;
46454aa6d63Sopenharmony_ci    int result = p7.Sign(content, signer, "SHA384withECDSA", p7b);
46554aa6d63Sopenharmony_ci    EXPECT_EQ(result, 0);
46654aa6d63Sopenharmony_ci    const unsigned char* p = reinterpret_cast<const unsigned char*>(p7b.data());
46754aa6d63Sopenharmony_ci    pkcs7 = d2i_PKCS7(nullptr, &p, static_cast<long>(p7b.size()));
46854aa6d63Sopenharmony_ci    STACK_OF(X509)* certs = pkcs7->d.sign->cert;
46954aa6d63Sopenharmony_ci    sk_X509_delete(certs, 2);
47054aa6d63Sopenharmony_ci    sk_X509_push(certs, sk_X509_value(certs, 1));
47154aa6d63Sopenharmony_ci    X509_up_ref(sk_X509_value(certs, 1));
47254aa6d63Sopenharmony_ci    PKCS7Data::PrintCertChainSub(certs);
47354aa6d63Sopenharmony_ci    unsigned char* out = nullptr;
47454aa6d63Sopenharmony_ci    int len = 0;
47554aa6d63Sopenharmony_ci    len = i2d_PKCS7(pkcs7, &out);
47654aa6d63Sopenharmony_ci    p7b.assign(out, out + len);
47754aa6d63Sopenharmony_ci    result = p7.Parse(p7b);
47854aa6d63Sopenharmony_ci    PKCS7Data::PrintCertChainSub(certs);
47954aa6d63Sopenharmony_ci    EXPECT_EQ(result, 0);
48054aa6d63Sopenharmony_ci    result = p7.Verify();
48154aa6d63Sopenharmony_ci    PKCS7_free(pkcs7);
48254aa6d63Sopenharmony_ci    EXPECT_TRUE(result < 0);
48354aa6d63Sopenharmony_ci}
48454aa6d63Sopenharmony_ci
48554aa6d63Sopenharmony_ci/**
48654aa6d63Sopenharmony_ci * @tc.name: profile_test015
48754aa6d63Sopenharmony_ci * @tc.desc: Test function of Provision operator ==() interface .
48854aa6d63Sopenharmony_ci * @tc.size: MEDIUM
48954aa6d63Sopenharmony_ci * @tc.type: FUNC
49054aa6d63Sopenharmony_ci * @tc.level Level 1
49154aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
49254aa6d63Sopenharmony_ci */
49354aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test015, testing::ext::TestSize.Level1)
49454aa6d63Sopenharmony_ci{
49554aa6d63Sopenharmony_ci    ProfileInfo* info = nullptr;
49654aa6d63Sopenharmony_ci    ProfileInfo info2;
49754aa6d63Sopenharmony_ci    info = &info2;
49854aa6d63Sopenharmony_ci    info2 = *info;
49954aa6d63Sopenharmony_ci    EXPECT_EQ(info2.profileBlockLength, info->profileBlockLength);
50054aa6d63Sopenharmony_ci}
50154aa6d63Sopenharmony_ci
50254aa6d63Sopenharmony_ci/**
50354aa6d63Sopenharmony_ci * @tc.name: profile_test016
50454aa6d63Sopenharmony_ci * @tc.desc: Test function of CmsUtils::VerifySignDataWithUnsignedDataDigest() failed for not matched unsigned data.
50554aa6d63Sopenharmony_ci * @tc.size: MEDIUM
50654aa6d63Sopenharmony_ci * @tc.type: FUNC
50754aa6d63Sopenharmony_ci * @tc.level Level 1
50854aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
50954aa6d63Sopenharmony_ci */
51054aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test016, testing::ext::TestSize.Level1)
51154aa6d63Sopenharmony_ci{
51254aa6d63Sopenharmony_ci    Options options;
51354aa6d63Sopenharmony_ci    std::string mode = SIGN_PROFILE_MODE;
51454aa6d63Sopenharmony_ci    std::string keyAlias = SIGN_PROFILE_KEY_ALIAS;
51554aa6d63Sopenharmony_ci    std::string profileCertFile = SIGN_PROFILE_PROFILE_CERT_FILE;
51654aa6d63Sopenharmony_ci    std::string signAlg = SIGN_PROFILE_SIGN_ALG;
51754aa6d63Sopenharmony_ci    std::string keystoreFile = SIGN_PROFILE_KEY_STORE_FILE;
51854aa6d63Sopenharmony_ci    std::string outFile = SIGN_PROFILE_OUT_FILE;
51954aa6d63Sopenharmony_ci    std::string inFile = SIGN_PROFILE_IN_FILE;
52054aa6d63Sopenharmony_ci    char keyStorePwd[] = "123456";
52154aa6d63Sopenharmony_ci    char keypwd[] = "123456";
52254aa6d63Sopenharmony_ci    options[Options::KEY_ALIAS] = keyAlias;
52354aa6d63Sopenharmony_ci    options[Options::MODE] = mode;
52454aa6d63Sopenharmony_ci    options[Options::PROFILE_CERT_FILE] = profileCertFile;
52554aa6d63Sopenharmony_ci    options[Options::SIGN_ALG] = signAlg;
52654aa6d63Sopenharmony_ci    options[Options::KEY_STORE_FILE] = keystoreFile;
52754aa6d63Sopenharmony_ci    options[Options::OUT_FILE] = outFile;
52854aa6d63Sopenharmony_ci    options[Options::IN_FILE] = inFile;
52954aa6d63Sopenharmony_ci    options[Options::KEY_RIGHTS] = keypwd;
53054aa6d63Sopenharmony_ci    options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
53154aa6d63Sopenharmony_ci
53254aa6d63Sopenharmony_ci    LocalizationAdapter adapter(&options);
53354aa6d63Sopenharmony_ci    std::string content = "json content";
53454aa6d63Sopenharmony_ci    std::string ret;
53554aa6d63Sopenharmony_ci    int result = ProfileSignTool::GenerateP7b(adapter, content, ret);
53654aa6d63Sopenharmony_ci    EXPECT_EQ(result, 0);
53754aa6d63Sopenharmony_ci    std::vector<int8_t> signedData(ret.begin(), ret.end());
53854aa6d63Sopenharmony_ci    std::string data = "hello,world";
53954aa6d63Sopenharmony_ci    std::vector<int8_t> unsignedData(data.begin(), data.end());
54054aa6d63Sopenharmony_ci    EXPECT_EQ(CmsUtils::VerifySignDataWithUnsignedDataDigest(unsignedData, signedData), false);
54154aa6d63Sopenharmony_ci}
54254aa6d63Sopenharmony_ci
54354aa6d63Sopenharmony_ci/**
54454aa6d63Sopenharmony_ci * @tc.name: profile_test017
54554aa6d63Sopenharmony_ci * @tc.desc: Test function of PKCS7Data::SortX509Stack() failed for cert count is 0.
54654aa6d63Sopenharmony_ci * @tc.size: MEDIUM
54754aa6d63Sopenharmony_ci * @tc.type: FUNC
54854aa6d63Sopenharmony_ci * @tc.level Level 1
54954aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
55054aa6d63Sopenharmony_ci */
55154aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, test017, testing::ext::TestSize.Level1)
55254aa6d63Sopenharmony_ci{
55354aa6d63Sopenharmony_ci    STACK_OF(X509)* certs = sk_X509_new(nullptr);
55454aa6d63Sopenharmony_ci    EXPECT_TRUE(PKCS7Data::SortX509Stack(certs) < 0);
55554aa6d63Sopenharmony_ci    sk_X509_free(certs);
55654aa6d63Sopenharmony_ci}
55754aa6d63Sopenharmony_ci
55854aa6d63Sopenharmony_ci/**
55954aa6d63Sopenharmony_ci * @tc.name: profile_test019
56054aa6d63Sopenharmony_ci * @tc.desc: Test function of PKCS7Data::PrintCertChainSub() interface for SUCCESS.
56154aa6d63Sopenharmony_ci * @tc.size: MEDIUM
56254aa6d63Sopenharmony_ci * @tc.type: FUNC
56354aa6d63Sopenharmony_ci * @tc.level Level 1
56454aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
56554aa6d63Sopenharmony_ci */
56654aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test019, testing::ext::TestSize.Level1)
56754aa6d63Sopenharmony_ci{
56854aa6d63Sopenharmony_ci    STACK_OF(X509)* certs = nullptr;
56954aa6d63Sopenharmony_ci    PKCS7Data::PrintCertChainSub(certs);
57054aa6d63Sopenharmony_ci    EXPECT_EQ(certs, nullptr);
57154aa6d63Sopenharmony_ci}
57254aa6d63Sopenharmony_ci
57354aa6d63Sopenharmony_ci/**
57454aa6d63Sopenharmony_ci * @tc.name: profile_test020
57554aa6d63Sopenharmony_ci * @tc.desc: Test function of PKCS7Data::GetASN1Time() failed for nullptr asn1_time.
57654aa6d63Sopenharmony_ci * @tc.size: MEDIUM
57754aa6d63Sopenharmony_ci * @tc.type: FUNC
57854aa6d63Sopenharmony_ci * @tc.level Level 1
57954aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
58054aa6d63Sopenharmony_ci */
58154aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test020, testing::ext::TestSize.Level1)
58254aa6d63Sopenharmony_ci{
58354aa6d63Sopenharmony_ci    ASN1_TIME* time = nullptr;
58454aa6d63Sopenharmony_ci    std::string result = PKCS7Data::GetASN1Time(time);
58554aa6d63Sopenharmony_ci    EXPECT_TRUE(result.empty());
58654aa6d63Sopenharmony_ci}
58754aa6d63Sopenharmony_ci
58854aa6d63Sopenharmony_ci/**
58954aa6d63Sopenharmony_ci * @tc.name: profile_test021
59054aa6d63Sopenharmony_ci * @tc.desc: Test function of PKCS7Data::SortX509Stack() failed for invalide certs.
59154aa6d63Sopenharmony_ci * @tc.size: MEDIUM
59254aa6d63Sopenharmony_ci * @tc.type: FUNC
59354aa6d63Sopenharmony_ci * @tc.level Level 1
59454aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
59554aa6d63Sopenharmony_ci */
59654aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test021, testing::ext::TestSize.Level1)
59754aa6d63Sopenharmony_ci{
59854aa6d63Sopenharmony_ci    STACK_OF(X509)* certs = nullptr;
59954aa6d63Sopenharmony_ci    EXPECT_TRUE(PKCS7Data::SortX509Stack(certs) < 0);
60054aa6d63Sopenharmony_ci}
60154aa6d63Sopenharmony_ci
60254aa6d63Sopenharmony_ci/**
60354aa6d63Sopenharmony_ci * @tc.name: profile_test022
60454aa6d63Sopenharmony_ci * @tc.desc: Test function of ParseProfile() interface for SUCCESS.
60554aa6d63Sopenharmony_ci * @tc.size: MEDIUM
60654aa6d63Sopenharmony_ci * @tc.type: FUNC
60754aa6d63Sopenharmony_ci * @tc.level Level 1
60854aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
60954aa6d63Sopenharmony_ci */
61054aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test022, testing::ext::TestSize.Level1)
61154aa6d63Sopenharmony_ci{
61254aa6d63Sopenharmony_ci    std::string  provision = "{\"bundle-info\":{\"app-feature\":\"hos_system_app\",\"bundle-n"
61354aa6d63Sopenharmony_ci        "ame\":\"com.OpenHarmony.app.test\",\"developer-id\":\"OpenHarmony\",\"development-certi"
61454aa6d63Sopenharmony_ci        "ficate\":\"-----BEGIN CERTIFICATE-----\\n"
61554aa6d63Sopenharmony_ci        "MIICMzCCAbegAwIBAgIEaOC/zDAMBggqhkjOPQQDAwUAMGMxCzAJBgNVBAYTAkNO\\n"
61654aa6d63Sopenharmony_ci        "MRQwEgYDVQQKEwtPcGVuSGFybW9ueTEZMBcGA1UECxMQT3Blbkhhcm1vbnkgVGVh\\n"
61754aa6d63Sopenharmony_ci        "bTEjMCEGA1UEAxMaT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gQ0EwHhcNMjEwMjAy\\n"
61854aa6d63Sopenharmony_ci        "MTIxOTMxWhcNNDkxMjMxMTIxOTMxWjBoMQswCQYDVQQGEwJDTjEUMBIGA1UEChML\\n"
61954aa6d63Sopenharmony_ci        "T3Blbkhhcm1vbnkxGTAXBgNVBAsTEE9wZW5IYXJtb255IFRlYW0xKDAmBgNVBAMT\\n"
62054aa6d63Sopenharmony_ci        "H09wZW5IYXJtb255IEFwcGxpY2F0aW9uIFJlbGVhc2UwWTATBgcqhkjOPQIBBggq\\n"
62154aa6d63Sopenharmony_ci        "hkjOPQMBBwNCAATbYOCQQpW5fdkYHN45v0X3AHax12jPBdEDosFRIZ1eXmxOYzSG\\n"
62254aa6d63Sopenharmony_ci        "JwMfsHhUU90E8lI0TXYZnNmgM1sovubeQqATo1IwUDAfBgNVHSMEGDAWgBTbhrci\\n"
62354aa6d63Sopenharmony_ci        "FtULoUu33SV7ufEFfaItRzAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFPtxruhl\\n"
62454aa6d63Sopenharmony_ci        "cRBQsJdwcZqLu9oNUVgaMAwGCCqGSM49BAMDBQADaAAwZQIxAJta0PQ2p4DIu/ps\\n"
62554aa6d63Sopenharmony_ci        "LMdLCDgQ5UH1l0B4PGhBlMgdi2zf8nk9spazEQI/0XNwpft8QAIwHSuA2WelVi/o\\n"
62654aa6d63Sopenharmony_ci        "zAlF08DnbJrOOtOnQq5wHOPlDYB4OtUzOYJk9scotrEnJxJzGsh/\\n"
62754aa6d63Sopenharmony_ci        "-----END CERTIFICATE-----\\n"
62854aa6d63Sopenharmony_ci        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA594"
62954aa6d63Sopenharmony_ci        "8C3C0CB44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856"
63054aa6d63Sopenharmony_ci        "AB10493A6718C7679A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"rest"
63154aa6d63Sopenharmony_ci        "ricted-permissions\":[\"\"]},\"type\":\"debug\",\"uuid\":\"fe686e1b-3770-4824-a938-961"
63254aa6d63Sopenharmony_ci        "b140a7c98\",\"validity\":{\"not-after\":1705127532,\"not-before\":\"1610519532\"},\"ve"
63354aa6d63Sopenharmony_ci        "rsion-code\":1,\"version-name\":\"1.0.0\"}";
63454aa6d63Sopenharmony_ci    ProfileInfo info;
63554aa6d63Sopenharmony_ci    AppProvisionVerifyResult result = ParseProfile(provision, info);
63654aa6d63Sopenharmony_ci    EXPECT_EQ(result, AppProvisionVerifyResult::PROVISION_OK);
63754aa6d63Sopenharmony_ci}
63854aa6d63Sopenharmony_ci
63954aa6d63Sopenharmony_ci/**
64054aa6d63Sopenharmony_ci * @tc.name: profile_test023
64154aa6d63Sopenharmony_ci * @tc.desc: Test function of ParseProfile() interface for SUCCESS.
64254aa6d63Sopenharmony_ci * @tc.size: MEDIUM
64354aa6d63Sopenharmony_ci * @tc.type: FUNC
64454aa6d63Sopenharmony_ci * @tc.level Level 1
64554aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
64654aa6d63Sopenharmony_ci */
64754aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test023, testing::ext::TestSize.Level1)
64854aa6d63Sopenharmony_ci{
64954aa6d63Sopenharmony_ci    std::string  provision = "{\"bundle-info\":{\"app-feature\":\"hos_system_app\",\"bundle-nam"
65054aa6d63Sopenharmony_ci        "e\":\"com.OpenHarmony.app.test\",\"developer-id\":\"OpenHarmony\",\"development-certi"
65154aa6d63Sopenharmony_ci        "ficate\":\"-----BEGIN CERTIFICATE-----\\n"
65254aa6d63Sopenharmony_ci        "MIICMzCCAbegAwIBAgIEaOC/zDAMBggqhkjOPQQDAwUAMGMxCzAJBgNVBAYTAkNO\\n"
65354aa6d63Sopenharmony_ci        "MRQwEgYDVQQKEwtPcGVuSGFybW9ueTEZMBcGA1UECxMQT3Blbkhhcm1vbnkgVGVh\\n"
65454aa6d63Sopenharmony_ci        "bTEjMCEGA1UEAxMaT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gQ0EwHhcNMjEwMjAy\\n"
65554aa6d63Sopenharmony_ci        "MTIxOTMxWhcNNDkxMjMxMTIxOTMxWjBoMQswCQYDVQQGEwJDTjEUMBIGA1UEChML\\n"
65654aa6d63Sopenharmony_ci        "T3Blbkhhcm1vbnkxGTAXBgNVBAsTEE9wZW5IYXJtb255IFRlYW0xKDAmBgNVBAMT\\n"
65754aa6d63Sopenharmony_ci        "H09wZW5IYXJtb255IEFwcGxpY2F0aW9uIFJlbGVhc2UwWTATBgcqhkjOPQIBBggq\\n"
65854aa6d63Sopenharmony_ci        "hkjOPQMBBwNCAATbYOCQQpW5fdkYHN45v0X3AHax12jPBdEDosFRIZ1eXmxOYzSG\\n"
65954aa6d63Sopenharmony_ci        "JwMfsHhUU90E8lI0TXYZnNmgM1sovubeQqATo1IwUDAfBgNVHSMEGDAWgBTbhrci\\n"
66054aa6d63Sopenharmony_ci        "FtULoUu33SV7ufEFfaItRzAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFPtxruhl\\n"
66154aa6d63Sopenharmony_ci        "cRBQsJdwcZqLu9oNUVgaMAwGCCqGSM49BAMDBQADaAAwZQIxAJta0PQ2p4DIu/ps\\n"
66254aa6d63Sopenharmony_ci        "LMdLCDgQ5UH1l0B4PGhBlMgdi2zf8nk9spazEQI/0XNwpft8QAIwHSuA2WelVi/o\\n"
66354aa6d63Sopenharmony_ci        "zAlF08DnbJrOOtOnQq5wHOPlDYB4OtUzOYJk9scotrEnJxJzGsh/\\n"
66454aa6d63Sopenharmony_ci        "-----END CERTIFICATE-----\\n"
66554aa6d63Sopenharmony_ci        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C"
66654aa6d63Sopenharmony_ci        "3C0CB44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB1"
66754aa6d63Sopenharmony_ci        "0493A6718C7679A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restric"
66854aa6d63Sopenharmony_ci        "ted-permissions\":[\"\"]},\"type\":\"debug\",\"uuid\":\"fe686e1b-3770-4824-a938-961b14"
66954aa6d63Sopenharmony_ci        "0a7c98\",\"validity\":{\"name\":\"weixing\"},\"version-code\":1,\"version-name\":\"1.0.0\"}";
67054aa6d63Sopenharmony_ci    ProfileInfo info;
67154aa6d63Sopenharmony_ci    AppProvisionVerifyResult result = ParseProfile(provision, info);
67254aa6d63Sopenharmony_ci    EXPECT_EQ(result, AppProvisionVerifyResult::PROVISION_OK);
67354aa6d63Sopenharmony_ci}
67454aa6d63Sopenharmony_ci
67554aa6d63Sopenharmony_ci/**
67654aa6d63Sopenharmony_ci * @tc.name: profile_test024
67754aa6d63Sopenharmony_ci * @tc.desc: Test function of ParseProvision() interface for SUCCESS.
67854aa6d63Sopenharmony_ci * @tc.size: MEDIUM
67954aa6d63Sopenharmony_ci * @tc.type: FUNC
68054aa6d63Sopenharmony_ci * @tc.level Level 1
68154aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
68254aa6d63Sopenharmony_ci */
68354aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test024, testing::ext::TestSize.Level1)
68454aa6d63Sopenharmony_ci{
68554aa6d63Sopenharmony_ci    std::string  provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"app-"
68654aa6d63Sopenharmony_ci        "feature\":\"hos_system_app\",\"bundle-name\":\"com.OpenHarmony.app.test\",\"developer-id\":\"O"
68754aa6d63Sopenharmony_ci        "penHarmony\",\"distribution-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
68854aa6d63Sopenharmony_ci        "MIICMzCCAbegAwIBAgIEaOC/zDAMBggqhkjOPQQDAwUAMGMxCzAJBgNVBAYTAkNO\\n"
68954aa6d63Sopenharmony_ci        "MRQwEgYDVQQKEwtPcGVuSGFybW9ueTEZMBcGA1UECxMQT3Blbkhhcm1vbnkgVGVh\\n"
69054aa6d63Sopenharmony_ci        "bTEjMCEGA1UEAxMaT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gQ0EwHhcNMjEwMjAy\\n"
69154aa6d63Sopenharmony_ci        "MTIxOTMxWhcNNDkxMjMxMTIxOTMxWjBoMQswCQYDVQQGEwJDTjEUMBIGA1UEChML\\n"
69254aa6d63Sopenharmony_ci        "T3Blbkhhcm1vbnkxGTAXBgNVBAsTEE9wZW5IYXJtb255IFRlYW0xKDAmBgNVBAMT\\n"
69354aa6d63Sopenharmony_ci        "H09wZW5IYXJtb255IEFwcGxpY2F0aW9uIFJlbGVhc2UwWTATBgcqhkjOPQIBBggq\\n"
69454aa6d63Sopenharmony_ci        "hkjOPQMBBwNCAATbYOCQQpW5fdkYHN45v0X3AHax12jPBdEDosFRIZ1eXmxOYzSG\\n"
69554aa6d63Sopenharmony_ci        "JwMfsHhUU90E8lI0TXYZnNmgM1sovubeQqATo1IwUDAfBgNVHSMEGDAWgBTbhrci\\n"
69654aa6d63Sopenharmony_ci        "FtULoUu33SV7ufEFfaItRzAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFPtxruhl\\n"
69754aa6d63Sopenharmony_ci        "cRBQsJdwcZqLu9oNUVgaMAwGCCqGSM49BAMDBQADaAAwZQIxAJta0PQ2p4DIu/ps\\n"
69854aa6d63Sopenharmony_ci        "LMdLCDgQ5UH1l0B4PGhBlMgdi2zf8nk9spazEQI/0XNwpft8QAIwHSuA2WelVi/o\\n"
69954aa6d63Sopenharmony_ci        "zAlF08DnbJrOOtOnQq5wHOPlDYB4OtUzOYJk9scotrEnJxJzGsh/\\n"
70054aa6d63Sopenharmony_ci        "-----END CERTIFICATE-----\\n"
70154aa6d63Sopenharmony_ci        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0CB"
70254aa6d63Sopenharmony_ci        "44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C76"
70354aa6d63Sopenharmony_ci        "79A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\":"
70454aa6d63Sopenharmony_ci        "[\"\"]},\"type\":\"release\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":"
70554aa6d63Sopenharmony_ci        "{\"not-after\":1705127532,\"not-before\":1610519532},\"version-code\":1,\"version-name\":\"1.0.0\"}";
70654aa6d63Sopenharmony_ci    ProfileInfo info;
70754aa6d63Sopenharmony_ci    AppProvisionVerifyResult result = ParseProvision(provision, info);
70854aa6d63Sopenharmony_ci    EXPECT_EQ(result, AppProvisionVerifyResult::PROVISION_OK);
70954aa6d63Sopenharmony_ci}
71054aa6d63Sopenharmony_ci
71154aa6d63Sopenharmony_ci/**
71254aa6d63Sopenharmony_ci * @tc.name: profile_test027
71354aa6d63Sopenharmony_ci * @tc.desc: Test function of ParseProvision() interface for SUCCESS.
71454aa6d63Sopenharmony_ci * @tc.size: MEDIUM
71554aa6d63Sopenharmony_ci * @tc.type: FUNC
71654aa6d63Sopenharmony_ci * @tc.level Level 1
71754aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
71854aa6d63Sopenharmony_ci */
71954aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test027, testing::ext::TestSize.Level1)
72054aa6d63Sopenharmony_ci{
72154aa6d63Sopenharmony_ci    std::string  provision = "{\"app-distribution-type\": \"app_gallery\","
72254aa6d63Sopenharmony_ci        "\"bundle-info\":{\"app-feature\":\"hos_system_app\",\"bundle-name\":"
72354aa6d63Sopenharmony_ci        "\"com.OpenHarmony.app.test\",\"developer-id\":\"OpenHarmony\","
72454aa6d63Sopenharmony_ci        "\"distribution-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
72554aa6d63Sopenharmony_ci        "MIICMzCCAbegAwIBAgIEaOC/zDAMBggqhkjOPQQDAwUAMGMxCzAJBgNVBAYTAkNO\\n"
72654aa6d63Sopenharmony_ci        "MRQwEgYDVQQKEwtPcGVuSGFybW9ueTEZMBcGA1UECxMQT3Blbkhhcm1vbnkgVGVh\\n"
72754aa6d63Sopenharmony_ci        "bTEjMCEGA1UEAxMaT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gQ0EwHhcNMjEwMjAy\\n"
72854aa6d63Sopenharmony_ci        "MTIxOTMxWhcNNDkxMjMxMTIxOTMxWjBoMQswCQYDVQQGEwJDTjEUMBIGA1UEChML\\n"
72954aa6d63Sopenharmony_ci        "T3Blbkhhcm1vbnkxGTAXBgNVBAsTEE9wZW5IYXJtb255IFRlYW0xKDAmBgNVBAMT\\n"
73054aa6d63Sopenharmony_ci        "H09wZW5IYXJtb255IEFwcGxpY2F0aW9uIFJlbGVhc2UwWTATBgcqhkjOPQIBBggq\\n"
73154aa6d63Sopenharmony_ci        "hkjOPQMBBwNCAATbYOCQQpW5fdkYHN45v0X3AHax12jPBdEDosFRIZ1eXmxOYzSG\\n"
73254aa6d63Sopenharmony_ci        "JwMfsHhUU90E8lI0TXYZnNmgM1sovubeQqATo1IwUDAfBgNVHSMEGDAWgBTbhrci\\n"
73354aa6d63Sopenharmony_ci        "FtULoUu33SV7ufEFfaItRzAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFPtxruhl\\n"
73454aa6d63Sopenharmony_ci        "cRBQsJdwcZqLu9oNUVgaMAwGCCqGSM49BAMDBQADaAAwZQIxAJta0PQ2p4DIu/ps\\n"
73554aa6d63Sopenharmony_ci        "LMdLCDgQ5UH1l0B4PGhBlMgdi2zf8nk9spazEQI/0XNwpft8QAIwHSuA2WelVi/o\\n"
73654aa6d63Sopenharmony_ci        "zAlF08DnbJrOOtOnQq5wHOPlDYB4OtUzOYJk9scotrEnJxJzGsh/\\n"
73754aa6d63Sopenharmony_ci        "-----END CERTIFICATE-----\\n"
73854aa6d63Sopenharmony_ci        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":["
73954aa6d63Sopenharmony_ci        "\"69C7505BE341BDA5948C3C0CB44ABCD530296054159EFE0BD16A16CD0129CC42\","
74054aa6d63Sopenharmony_ci        "\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C7679A73F958732865\"]},"
74154aa6d63Sopenharmony_ci        "\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions"
74254aa6d63Sopenharmony_ci        "\":[\"\"]},\"type\":\"release\",\"uuid\":\"\",\"validity\":{\"not-after"
74354aa6d63Sopenharmony_ci        "\":1705127532,\"not-before\":1610519532},\"version-code\":1,\"version-name\":\"1.0.0\"}";
74454aa6d63Sopenharmony_ci    ProfileInfo info;
74554aa6d63Sopenharmony_ci    AppProvisionVerifyResult result = ParseProvision(provision, info);
74654aa6d63Sopenharmony_ci    EXPECT_EQ(result, AppProvisionVerifyResult::PROVISION_OK);
74754aa6d63Sopenharmony_ci}
74854aa6d63Sopenharmony_ci
74954aa6d63Sopenharmony_ci/**
75054aa6d63Sopenharmony_ci * @tc.name: profile_test028
75154aa6d63Sopenharmony_ci * @tc.desc: Test function of ParseProvision() interface for SUCCESS.
75254aa6d63Sopenharmony_ci * @tc.size: MEDIUM
75354aa6d63Sopenharmony_ci * @tc.type: FUNC
75454aa6d63Sopenharmony_ci * @tc.level Level 1
75554aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
75654aa6d63Sopenharmony_ci */
75754aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test028, testing::ext::TestSize.Level1)
75854aa6d63Sopenharmony_ci{
75954aa6d63Sopenharmony_ci    std::string  provision = "{\"app-distribution-type\": \"app_gallery\","
76054aa6d63Sopenharmony_ci        "\"bundle-info\":{\"app-feature\":\"hos_system_app\",\"bundle-name\":"
76154aa6d63Sopenharmony_ci        "\"com.OpenHarmony.app.test\",\"developer-id\":\"OpenHarmony\","
76254aa6d63Sopenharmony_ci        "\"distribution-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
76354aa6d63Sopenharmony_ci        "MIICMzCCAbegAwIBAgIEaOC/zDAMBggqhkjOPQQDAwUAMGMxCzAJBgNVBAYTAkNO\\n"
76454aa6d63Sopenharmony_ci        "MRQwEgYDVQQKEwtPcGVuSGFybW9ueTEZMBcGA1UECxMQT3Blbkhhcm1vbnkgVGVh\\n"
76554aa6d63Sopenharmony_ci        "bTEjMCEGA1UEAxMaT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gQ0EwHhcNMjEwMjAy\\n"
76654aa6d63Sopenharmony_ci        "MTIxOTMxWhcNNDkxMjMxMTIxOTMxWjBoMQswCQYDVQQGEwJDTjEUMBIGA1UEChML\\n"
76754aa6d63Sopenharmony_ci        "T3Blbkhhcm1vbnkxGTAXBgNVBAsTEE9wZW5IYXJtb255IFRlYW0xKDAmBgNVBAMT\\n"
76854aa6d63Sopenharmony_ci        "H09wZW5IYXJtb255IEFwcGxpY2F0aW9uIFJlbGVhc2UwWTATBgcqhkjOPQIBBggq\\n"
76954aa6d63Sopenharmony_ci        "hkjOPQMBBwNCAATbYOCQQpW5fdkYHN45v0X3AHax12jPBdEDosFRIZ1eXmxOYzSG\\n"
77054aa6d63Sopenharmony_ci        "JwMfsHhUU90E8lI0TXYZnNmgM1sovubeQqATo1IwUDAfBgNVHSMEGDAWgBTbhrci\\n"
77154aa6d63Sopenharmony_ci        "FtULoUu33SV7ufEFfaItRzAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFPtxruhl\\n"
77254aa6d63Sopenharmony_ci        "cRBQsJdwcZqLu9oNUVgaMAwGCCqGSM49BAMDBQADaAAwZQIxAJta0PQ2p4DIu/ps\\n"
77354aa6d63Sopenharmony_ci        "LMdLCDgQ5UH1l0B4PGhBlMgdi2zf8nk9spazEQI/0XNwpft8QAIwHSuA2WelVi/o\\n"
77454aa6d63Sopenharmony_ci        "zAlF08DnbJrOOtOnQq5wHOPlDYB4OtUzOYJk9scotrEnJxJzGsh/\\n"
77554aa6d63Sopenharmony_ci        "-----END CERTIFICATE-----\\n"
77654aa6d63Sopenharmony_ci        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":["
77754aa6d63Sopenharmony_ci        "\"69C7505BE341BDA5948C3C0CB44ABCD530296054159EFE0BD16A16CD0129CC42\","
77854aa6d63Sopenharmony_ci        "\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C7679A73F958732865\"]},"
77954aa6d63Sopenharmony_ci        "\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions"
78054aa6d63Sopenharmony_ci        "\":[\"\"]},\"type\":\"release\",\"uuid\":\"\",\"validity\":{\"not-after"
78154aa6d63Sopenharmony_ci        "\":1705127532,\"not-before\":1610519532},\"version-code\":1,\"version-name\":\"1.0.0\"}";
78254aa6d63Sopenharmony_ci    ProfileInfo info;
78354aa6d63Sopenharmony_ci    AppProvisionVerifyResult result = ParseProvision(provision, info);
78454aa6d63Sopenharmony_ci    EXPECT_EQ(result, AppProvisionVerifyResult::PROVISION_OK);
78554aa6d63Sopenharmony_ci}
78654aa6d63Sopenharmony_ci
78754aa6d63Sopenharmony_ci/**
78854aa6d63Sopenharmony_ci * @tc.name: profile_test029
78954aa6d63Sopenharmony_ci * @tc.desc: Test function of RunSignApp() failed for invalid json.
79054aa6d63Sopenharmony_ci * @tc.size: MEDIUM
79154aa6d63Sopenharmony_ci * @tc.type: FUNC
79254aa6d63Sopenharmony_ci * @tc.level Level 1
79354aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
79454aa6d63Sopenharmony_ci */
79554aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test029, testing::ext::TestSize.Level1)
79654aa6d63Sopenharmony_ci{
79754aa6d63Sopenharmony_ci    std::unique_ptr<SignToolServiceImpl> api = std::make_unique<SignToolServiceImpl>();
79854aa6d63Sopenharmony_ci    std::shared_ptr<Options> params = std::make_shared<Options>();
79954aa6d63Sopenharmony_ci    char keyPwd[] = "123456";
80054aa6d63Sopenharmony_ci    char keystorePwd[] = "123456";
80154aa6d63Sopenharmony_ci    std::string  provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"app-"
80254aa6d63Sopenharmony_ci        "feature\":\"hos_system_app\",\"bundle-name\":\"com.OpenHarmony.app.test\",\"developer-id\":\"O"
80354aa6d63Sopenharmony_ci        "penHarmony\",\"distribution-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
80454aa6d63Sopenharmony_ci        "MIICMzCCAbegAwIBAgIEaOC/zDAMBggqhkjOPQQDAwUAMGMxCzAJBgNVBAYTAkNO\\n"
80554aa6d63Sopenharmony_ci        "MRQwEgYDVQQKEwtPcGVuSGFybW9ueTEZMBcGA1UECxMQT3Blbkhhcm1vbnkgVGVh\\n"
80654aa6d63Sopenharmony_ci        "bTEjMCEGA1UEAxMaT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gQ0EwHhcNMjEwMjAy\\n"
80754aa6d63Sopenharmony_ci        "MTIxOTMxWhcNNDkxMjMxMTIxOTMxWjBoMQswCQYDVQQGEwJDTjEUMBIGA1UEChML\\n"
80854aa6d63Sopenharmony_ci        "T3Blbkhhcm1vbnkxGTAXBgNVBAsTEE9wZW5IYXJtb255IFRlYW0xKDAmBgNVBAMT\\n"
80954aa6d63Sopenharmony_ci        "H09wZW5IYXJtb255IEFwcGxpY2F0aW9uIFJlbGVhc2UwWTATBgcqhkjOPQIBBggq\\n"
81054aa6d63Sopenharmony_ci        "hkjOPQMBBwNCAATbYOCQQpW5fdkYHN45v0X3AHax12jPBdEDosFRIZ1eXmxOYzSG\\n"
81154aa6d63Sopenharmony_ci        "JwMfsHhUU90E8lI0TXYZnNmgM1sovubeQqATo1IwUDAfBgNVHSMEGDAWgBTbhrci\\n"
81254aa6d63Sopenharmony_ci        "FtULoUu33SV7ufEFfaItRzAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFPtxruhl\\n"
81354aa6d63Sopenharmony_ci        "cRBQsJdwcZqLu9oNUVgaMAwGCCqGSM49BAMDBQADaAAwZQIxAJta0PQ2p4DIu/ps\\n"
81454aa6d63Sopenharmony_ci        "LMdLCDgQ5UH1l0B4PGhBlMgdi2zf8nk9spazEQI/0XNwpft8QAIwHSuA2WelVi/o\\n"
81554aa6d63Sopenharmony_ci        "zAlF08DnbJrOOtOnQq5wHOPlDYB4OtUzOYJk9scotrEnJxJzGsh/\\n"
81654aa6d63Sopenharmony_ci        "-----END CERTIFICATE-----\\n"
81754aa6d63Sopenharmony_ci        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0CB"
81854aa6d63Sopenharmony_ci        "44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C76"
81954aa6d63Sopenharmony_ci        "79A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\":"
82054aa6d63Sopenharmony_ci        "[\"\"]},\"type\":\"release\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":"
82154aa6d63Sopenharmony_ci        "{\"not-after\":1705127532,\"not-before\":1610519532},\"version-code\":1,\"version-name\":\"1.0.0\"}";
82254aa6d63Sopenharmony_ci    FileUtils::Write(provision, VERIFY_PROFILE_OUT_FILE);
82354aa6d63Sopenharmony_ci    (*params)["mode"] = SIGN_APP_MODE;
82454aa6d63Sopenharmony_ci    (*params)["keyAlias"] = SIGN_APP_KEY_ALIAS;
82554aa6d63Sopenharmony_ci    (*params)["signAlg"] = SIGN_APP_SIGN_ALG;
82654aa6d63Sopenharmony_ci    (*params)["appCertFile"] = SIGN_APP_APP_CERT_FILE;
82754aa6d63Sopenharmony_ci    (*params)["profileFile"] = VERIFY_PROFILE_OUT_FILE;
82854aa6d63Sopenharmony_ci    (*params)["inFile"] = SIGN_APP_IN_FILE;
82954aa6d63Sopenharmony_ci    (*params)["keystoreFile"] = SIGN_APP_KEY_STORE_FILE;
83054aa6d63Sopenharmony_ci    (*params)["outFile"] = SIGN_APP_OUT_FILE;
83154aa6d63Sopenharmony_ci    (*params)["keyPwd"] = keyPwd;
83254aa6d63Sopenharmony_ci    (*params)["keystorePwd"] = keystorePwd;
83354aa6d63Sopenharmony_ci    (*params)["inForm"] = std::string("zip");
83454aa6d63Sopenharmony_ci    (*params)["profileSigned"] = std::string("0");
83554aa6d63Sopenharmony_ci    (*params)["signCode"] = std::string("0");
83654aa6d63Sopenharmony_ci
83754aa6d63Sopenharmony_ci    bool ret = ParamsRunTool::RunSignApp(params.get(), *api);
83854aa6d63Sopenharmony_ci    EXPECT_EQ(ret, true);
83954aa6d63Sopenharmony_ci}
84054aa6d63Sopenharmony_ci
84154aa6d63Sopenharmony_cistatic void GenerateTmpP7b()
84254aa6d63Sopenharmony_ci{
84354aa6d63Sopenharmony_ci    Options options;
84454aa6d63Sopenharmony_ci    char keyStorePwd[] = "123456";
84554aa6d63Sopenharmony_ci    char keypwd[] = "123456";
84654aa6d63Sopenharmony_ci    options[Options::KEY_ALIAS] = SIGN_PROFILE_KEY_ALIAS;
84754aa6d63Sopenharmony_ci    options[Options::MODE] = SIGN_PROFILE_MODE;
84854aa6d63Sopenharmony_ci    options[Options::PROFILE_CERT_FILE] = SIGN_PROFILE_DOUBLE_CERT_PEM;
84954aa6d63Sopenharmony_ci    options[Options::SIGN_ALG] = SIGN_PROFILE_SIGN_ALG;
85054aa6d63Sopenharmony_ci    options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
85154aa6d63Sopenharmony_ci    options[Options::OUT_FILE] = SIGN_PROFILE_OUT_FILE;
85254aa6d63Sopenharmony_ci    options[Options::IN_FILE] = SIGN_PROFILE_IN_FILE;
85354aa6d63Sopenharmony_ci    options[Options::KEY_RIGHTS] = keypwd;
85454aa6d63Sopenharmony_ci    options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
85554aa6d63Sopenharmony_ci
85654aa6d63Sopenharmony_ci    LocalizationAdapter adapter(&options);
85754aa6d63Sopenharmony_ci    std::string  provision = "45";
85854aa6d63Sopenharmony_ci    std::string ret;
85954aa6d63Sopenharmony_ci    int result = ProfileSignTool::GenerateP7b(adapter, provision, ret);
86054aa6d63Sopenharmony_ci    FileUtils::Write(ret, SIGN_PROFILE_TMP_P7B);
86154aa6d63Sopenharmony_ci    EXPECT_TRUE(result < 0);
86254aa6d63Sopenharmony_ci}
86354aa6d63Sopenharmony_ci
86454aa6d63Sopenharmony_ci/**
86554aa6d63Sopenharmony_ci * @tc.name: profile_test030
86654aa6d63Sopenharmony_ci * @tc.desc: Test function of RunSignApp() failed for invalid p7b.
86754aa6d63Sopenharmony_ci * @tc.size: MEDIUM
86854aa6d63Sopenharmony_ci * @tc.type: FUNC
86954aa6d63Sopenharmony_ci * @tc.level Level 1
87054aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
87154aa6d63Sopenharmony_ci */
87254aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test030, testing::ext::TestSize.Level1)
87354aa6d63Sopenharmony_ci{
87454aa6d63Sopenharmony_ci    GenerateTmpP7b();
87554aa6d63Sopenharmony_ci    std::unique_ptr<SignToolServiceImpl> api = std::make_unique<SignToolServiceImpl>();
87654aa6d63Sopenharmony_ci    std::shared_ptr<Options> params = std::make_shared<Options>();
87754aa6d63Sopenharmony_ci    char keyPwd[] = "123456";
87854aa6d63Sopenharmony_ci    char keystorePwd[] = "123456";
87954aa6d63Sopenharmony_ci    (*params)["mode"] = SIGN_APP_MODE;
88054aa6d63Sopenharmony_ci    (*params)["keyAlias"] = SIGN_APP_KEY_ALIAS;
88154aa6d63Sopenharmony_ci    (*params)["signAlg"] = SIGN_APP_SIGN_ALG;
88254aa6d63Sopenharmony_ci    (*params)["appCertFile"] = SIGN_APP_APP_CERT_FILE;
88354aa6d63Sopenharmony_ci    (*params)["profileFile"] = SIGN_PROFILE_TMP_P7B;
88454aa6d63Sopenharmony_ci    (*params)["inFile"] = SIGN_APP_IN_FILE;
88554aa6d63Sopenharmony_ci    (*params)["keystoreFile"] = SIGN_APP_KEY_STORE_FILE;
88654aa6d63Sopenharmony_ci    (*params)["outFile"] = SIGN_APP_OUT_FILE;
88754aa6d63Sopenharmony_ci    (*params)["keyPwd"] = keyPwd;
88854aa6d63Sopenharmony_ci    (*params)["keystorePwd"] = keystorePwd;
88954aa6d63Sopenharmony_ci    (*params)["inForm"] = std::string("zip");
89054aa6d63Sopenharmony_ci    (*params)["profileSigned"] = std::string("1");
89154aa6d63Sopenharmony_ci    (*params)["signCode"] = std::string("0");
89254aa6d63Sopenharmony_ci
89354aa6d63Sopenharmony_ci    bool ret = ParamsRunTool::RunSignApp(params.get(), *api);
89454aa6d63Sopenharmony_ci    EXPECT_FALSE(ret);
89554aa6d63Sopenharmony_ci}
89654aa6d63Sopenharmony_ci
89754aa6d63Sopenharmony_cistatic STACK_OF(X509)* ReadCerts(const std::string& path)
89854aa6d63Sopenharmony_ci{
89954aa6d63Sopenharmony_ci    X509* cert = nullptr;
90054aa6d63Sopenharmony_ci    BIO* in = nullptr;
90154aa6d63Sopenharmony_ci    STACK_OF(X509)* certs = nullptr;
90254aa6d63Sopenharmony_ci    certs = sk_X509_new(nullptr);
90354aa6d63Sopenharmony_ci    if (certs == nullptr)
90454aa6d63Sopenharmony_ci        goto err;
90554aa6d63Sopenharmony_ci    in = BIO_new_file(path.c_str(), "rb");
90654aa6d63Sopenharmony_ci    if (in == nullptr)
90754aa6d63Sopenharmony_ci        goto err;
90854aa6d63Sopenharmony_ci    while ((cert = PEM_read_bio_X509(in, nullptr, nullptr, nullptr)))
90954aa6d63Sopenharmony_ci    {
91054aa6d63Sopenharmony_ci        sk_X509_push(certs, cert);
91154aa6d63Sopenharmony_ci    }
91254aa6d63Sopenharmony_ci    BIO_free(in);
91354aa6d63Sopenharmony_ci    return certs;
91454aa6d63Sopenharmony_cierr:
91554aa6d63Sopenharmony_ci    BIO_free(in);
91654aa6d63Sopenharmony_ci    sk_X509_pop_free(certs, X509_free);
91754aa6d63Sopenharmony_ci    return nullptr;
91854aa6d63Sopenharmony_ci}
91954aa6d63Sopenharmony_ci
92054aa6d63Sopenharmony_ci/**
92154aa6d63Sopenharmony_ci * @tc.name: profile_test031
92254aa6d63Sopenharmony_ci * @tc.desc: Test function of SortX509Stack() failed for invalid certchain.
92354aa6d63Sopenharmony_ci * @tc.size: MEDIUM
92454aa6d63Sopenharmony_ci * @tc.type: FUNC
92554aa6d63Sopenharmony_ci * @tc.level Level 1
92654aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
92754aa6d63Sopenharmony_ci */
92854aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test031, testing::ext::TestSize.Level1)
92954aa6d63Sopenharmony_ci{
93054aa6d63Sopenharmony_ci    STACK_OF(X509)* certs = ReadCerts(SIGN_PROFILE_CERT_PEM);
93154aa6d63Sopenharmony_ci    EXPECT_TRUE(PKCS7Data::SortX509Stack(certs) < 0);
93254aa6d63Sopenharmony_ci    sk_X509_pop_free(certs, X509_free);
93354aa6d63Sopenharmony_ci}
93454aa6d63Sopenharmony_ci
93554aa6d63Sopenharmony_ci/**
93654aa6d63Sopenharmony_ci * @tc.name: profile_test032
93754aa6d63Sopenharmony_ci * @tc.desc: Test function of SortX509Stack() failed for invalid certchain.
93854aa6d63Sopenharmony_ci * @tc.size: MEDIUM
93954aa6d63Sopenharmony_ci * @tc.type: FUNC
94054aa6d63Sopenharmony_ci * @tc.level Level 1
94154aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
94254aa6d63Sopenharmony_ci */
94354aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test032, testing::ext::TestSize.Level1)
94454aa6d63Sopenharmony_ci{
94554aa6d63Sopenharmony_ci    STACK_OF(X509)* certs = ReadCerts(SIGN_PROFILE_PROFILE_CERT_FILE);
94654aa6d63Sopenharmony_ci    EXPECT_TRUE(PKCS7Data::SortX509Stack(certs) == 0);
94754aa6d63Sopenharmony_ci    X509* entityCert = sk_X509_value(certs, 0);
94854aa6d63Sopenharmony_ci    X509* entityCopy = X509_dup(entityCert);
94954aa6d63Sopenharmony_ci    X509* root = sk_X509_pop(certs);
95054aa6d63Sopenharmony_ci    X509* middle = sk_X509_pop(certs);
95154aa6d63Sopenharmony_ci    X509_free(root);
95254aa6d63Sopenharmony_ci    X509_free(middle);
95354aa6d63Sopenharmony_ci    sk_X509_insert(certs, entityCopy, 0);
95454aa6d63Sopenharmony_ci    EXPECT_TRUE(PKCS7Data::SortX509Stack(certs) < 0);
95554aa6d63Sopenharmony_ci    sk_X509_pop_free(certs, X509_free);
95654aa6d63Sopenharmony_ci}
95754aa6d63Sopenharmony_ci
95854aa6d63Sopenharmony_ci/**
95954aa6d63Sopenharmony_ci * @tc.name: profile_test033
96054aa6d63Sopenharmony_ci * @tc.desc: Test function of SortX509Stack() failed for invalid certchain.
96154aa6d63Sopenharmony_ci * @tc.size: MEDIUM
96254aa6d63Sopenharmony_ci * @tc.type: FUNC
96354aa6d63Sopenharmony_ci * @tc.level Level 1
96454aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
96554aa6d63Sopenharmony_ci */
96654aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test033, testing::ext::TestSize.Level1)
96754aa6d63Sopenharmony_ci{
96854aa6d63Sopenharmony_ci    STACK_OF(X509)* certs = ReadCerts(SIGN_PROFILE_PROFILE_CERT_FILE);
96954aa6d63Sopenharmony_ci    EXPECT_TRUE(PKCS7Data::SortX509Stack(certs) == 0);
97054aa6d63Sopenharmony_ci    X509* root = sk_X509_pop(certs);
97154aa6d63Sopenharmony_ci    X509_free(root);
97254aa6d63Sopenharmony_ci    EXPECT_TRUE(PKCS7Data::SortX509Stack(certs) < 0);
97354aa6d63Sopenharmony_ci    sk_X509_pop_free(certs, X509_free);
97454aa6d63Sopenharmony_ci}
97554aa6d63Sopenharmony_ci
97654aa6d63Sopenharmony_ci/**
97754aa6d63Sopenharmony_ci * @tc.name: profile_test030
97854aa6d63Sopenharmony_ci * @tc.desc: Test function of SortX509Stack() interface failed for invalid certchain.
97954aa6d63Sopenharmony_ci * @tc.size: MEDIUM
98054aa6d63Sopenharmony_ci * @tc.type: FUNC
98154aa6d63Sopenharmony_ci * @tc.level Level 1
98254aa6d63Sopenharmony_ci * @tc.require: SR000H63TL
98354aa6d63Sopenharmony_ci */
98454aa6d63Sopenharmony_ciHWTEST_F(ProfileTest, profile_test034, testing::ext::TestSize.Level1)
98554aa6d63Sopenharmony_ci{
98654aa6d63Sopenharmony_ci    STACK_OF(X509)* certs = ReadCerts(SIGN_PROFILE_PROFILE_CERT_FILE);
98754aa6d63Sopenharmony_ci    EXPECT_TRUE(PKCS7Data::SortX509Stack(certs) == 0);
98854aa6d63Sopenharmony_ci    X509* root = sk_X509_pop(certs);
98954aa6d63Sopenharmony_ci    X509* middle = sk_X509_pop(certs);
99054aa6d63Sopenharmony_ci    X509* entity = sk_X509_pop(certs);
99154aa6d63Sopenharmony_ci    X509_free(entity);
99254aa6d63Sopenharmony_ci    sk_X509_insert(certs, middle, 0);
99354aa6d63Sopenharmony_ci    sk_X509_insert(certs, X509_dup(middle), 0);
99454aa6d63Sopenharmony_ci    sk_X509_insert(certs, root, 0);
99554aa6d63Sopenharmony_ci    EXPECT_TRUE(PKCS7Data::SortX509Stack(certs) < 0);
99654aa6d63Sopenharmony_ci    sk_X509_pop_free(certs, X509_free);
99754aa6d63Sopenharmony_ci}
99854aa6d63Sopenharmony_ci}
99954aa6d63Sopenharmony_ci}
1000