1/*
2 * Copyright (c) 2024-2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15#include <memory>
16#include <gtest/gtest.h>
17#include "cert_tools.h"
18
19namespace OHOS {
20namespace SignatureTools {
21class CertToolsTest : public testing::Test {
22public:
23    static void SetUpTestCase(void)
24    {
25    };
26    static void TearDownTestCase()
27    {
28    };
29    void SetUp()
30    {
31    };
32    void TearDown()
33    {
34    };
35};
36
37/**
38 * @tc.name: cert_tools_test_001
39 * @tc.desc: parameter basicConstraintsCritical connot convert bool
40 * @tc.type: FUNC
41 */
42HWTEST_F(CertToolsTest, cert_tools_test_001, testing::ext::TestSize.Level1)
43{
44    Options options;
45    options[Options::BASIC_CONSTRAINTS_CRITICAL] = std::string("a");
46    options[Options::BASIC_CONSTRAINTS] = std::string("1");
47    bool result = CertTools::SetBisicConstraints(&options, nullptr);
48    EXPECT_EQ(result, false);
49}
50
51/**
52 * @tc.name: cert_tools_test_002
53 * @tc.desc: parameter basicConstraintsCa connot convert bool
54 * @tc.type: FUNC
55 */
56HWTEST_F(CertToolsTest, cert_tools_test_002, testing::ext::TestSize.Level1)
57{
58    Options options;
59    options[Options::BASIC_CONSTRAINTS_CRITICAL] = std::string("1");
60    options[Options::BASIC_CONSTRAINTS] = std::string("1");
61    options[Options::BASIC_CONSTRAINTS_CA] = std::string("a");
62    bool result = CertTools::SetBisicConstraints(&options, nullptr);
63    EXPECT_EQ(result, false);
64}
65
66/**
67 * @tc.name: cert_tools_test_003
68 * @tc.desc: This function tests success for interface SetBisicConstraints
69 * @tc.type: FUNC
70 */
71HWTEST_F(CertToolsTest, cert_tools_test_003, testing::ext::TestSize.Level1)
72{
73    Options options;
74    options[Options::BASIC_CONSTRAINTS_CRITICAL] = std::string("1");
75    options[Options::BASIC_CONSTRAINTS] = std::string("1");
76    options[Options::BASIC_CONSTRAINTS_CA] = std::string("1");
77    X509* cert = X509_new();
78    bool ret = CertTools::SetBisicConstraints(&options, cert);
79    EXPECT_EQ(ret, true);
80    X509_free(cert);
81}
82
83/**
84 * @tc.name: cert_tools_test_004
85 * @tc.desc: This function tests failed for interface SignForSubCert due to parameter caPrikey is null
86 * @tc.type: FUNC
87 */
88HWTEST_F(CertToolsTest, cert_tools_test_004, testing::ext::TestSize.Level1)
89{
90    Options options;
91    KeyStoreHelper stroe;
92    EVP_PKEY* caPrikey = stroe.GenerateKeyPair("ECC", 256);
93    X509* cert = X509_new();
94    X509_REQ* subcsr = X509_REQ_new();
95    X509_REQ_set_pubkey(subcsr, caPrikey);
96    X509_REQ* rootcsr = X509_REQ_new();
97    bool ret = CertTools::SignForSubCert(cert, subcsr, rootcsr, nullptr, &options);
98    EXPECT_EQ(ret, false);
99}
100
101/**
102 * @tc.name: cert_tools_test_005
103 * @tc.desc: This function tests failed for interface SetSubjectForCert due to parameter cert is null
104 * @tc.type: FUNC
105 */
106HWTEST_F(CertToolsTest, cert_tools_test_005, testing::ext::TestSize.Level1)
107{
108    X509_REQ* certReq = X509_REQ_new();
109    bool ret = CertTools::SetSubjectForCert(certReq, nullptr);
110    EXPECT_EQ(ret, false);
111    X509_REQ_free(certReq);
112}
113
114/**
115 * @tc.name: cert_tools_test_006
116 * @tc.desc: This function tests failed for interface GenerateSubCert due to parameter subject is error
117 * @tc.type: FUNC
118 */
119HWTEST_F(CertToolsTest, cert_tools_test_006, testing::ext::TestSize.Level1)
120{
121    std::shared_ptr<Options> params = std::make_shared<Options>();
122    std::string keyAlias = "alias";
123    std::string issuerkeyAlias = "oh-app1-key-v1";
124    char keyPwd[] = "123456";
125    std::string keyAlg = "ECC";
126    int keySize = 256;
127    std::string keystoreFile = "/data/test/generateKeyPair/keypair.p12";
128    char keystorePwd[] = "123456";
129    std::string signAlg = "SHA384withECDSA";
130    std::string subject = "C=,O=OpenHarmony,OU=OpenHarmony Community,CN= Openharmony Application CA";
131    std::string issuer = "C=CN,O=OpenHarmony_test,OU=OpenHarmony Community,CN= Openharmony Application SUB  CA";
132    char isksPwd[] = "123456";
133    (*params)["keystorePwd"] = keystorePwd;
134    (*params)["issuerKeystorePwd"] = isksPwd;
135    (*params)["keyAlias"] = keyAlias;
136    (*params)["keyPwd"] = keyPwd;
137    (*params)["keyAlg"] = keyAlg;
138    (*params)["keySize"] = keySize;
139    (*params)["keystoreFile"] = keystoreFile;
140    (*params)["signAlg"] = signAlg;
141    (*params)["subject"] = subject;
142    (*params)["issuer"] = issuer;
143    (*params)["issuerKeyAlias"] = issuerkeyAlias;
144    std::unique_ptr<LocalizationAdapter> adaptePtr = std::make_unique<LocalizationAdapter>(params.get());
145    EVP_PKEY* keyPair = nullptr;
146    keyPair = adaptePtr->GetAliasKey(true);
147    X509_REQ* csr = CertTools::GenerateCsr(keyPair, signAlg, subject);
148    bool ret = CertTools::GenerateSubCert(keyPair, csr, params.get());
149    EXPECT_EQ(ret, false);
150}
151
152/**
153 * @tc.name: cert_tools_test_007
154 * @tc.desc: This function tests failed for interface SetCertPublickKey due to parameter subjectCsr no set PublickKey
155 * @tc.type: FUNC
156 */
157HWTEST_F(CertToolsTest, cert_tools_test_007, testing::ext::TestSize.Level1)
158{
159    X509* cert = X509_new();
160    X509_REQ* certReq = X509_REQ_new();
161    bool ret = CertTools::SetCertPublickKey(cert, certReq);
162    EXPECT_EQ(ret, false);
163    X509_REQ_free(certReq);
164    X509_free(cert);
165}
166
167/**
168 * @tc.name: cert_tools_test_008
169 * @tc.desc: This function tests failed for interface SetCertPublickKey due to parameter cert is null
170 * @tc.type: FUNC
171 */
172HWTEST_F(CertToolsTest, cert_tools_test_008, testing::ext::TestSize.Level1)
173{
174    X509_REQ* certReq = X509_REQ_new();
175    KeyStoreHelper stroe;
176    EVP_PKEY* Prikey = stroe.GenerateKeyPair("ECC", 256);
177    X509_REQ_set_pubkey(certReq, Prikey);
178    bool ret = CertTools::SetCertPublickKey(nullptr, certReq);
179    EXPECT_EQ(ret, false);
180    X509_REQ_free(certReq);
181}
182} // namespace SignatureTools
183} // namespace OHOS