1 /*
2  * Copyright (c) 2023 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 
16 #include <fstream>
17 #include <cstring>
18 
19 #include "gtest/gtest.h"
20 #include "openssl/ssl.h"
21 
22 #include "tls_certificate.h"
23 
24 namespace OHOS::NetStack::TlsSocket {
25 class TLSCertificateTest : public testing::Test {
26 public:
27     static void SetUpTestCase();
28     static void TearDownTestCase();
29     void SetUp() override;
30     void TearDown() override;
31 };
32 
SetUpTestCase()33 void TLSCertificateTest::SetUpTestCase() {}
TearDownTestCase()34 void TLSCertificateTest::TearDownTestCase() {}
SetUp()35 void TLSCertificateTest::SetUp() {}
TearDown()36 void TLSCertificateTest::TearDown() {}
37 
38 static const char *PEM_CERT =
39     "-----BEGIN CERTIFICATE-----\n"
40     "MIIDiDCCAnCgAwIBAgIUfIbu2Fl2yRfHMjp3jPnZwQsG4nwwDQYJKoZIhvcNAQEL\n"
41     "BQAwgYwxCzAJBgNVBAYTAlJVMRkwFwYDVQQIDBBTYWludC1QZXRlcnNidXJnMRkw\n"
42     "FwYDVQQHDBBTYWludC1QZXRlcnNidXJnMSAwHgYDVQQKDBdIdWF3ZWkgVGVjaG5v\n"
43     "bG9naWVzIEx0ZDEMMAoGA1UECwwDUiZEMRcwFQYDVQQDDA5IdWF3ZWkgUm9vdCBD\n"
44     "QTAgFw0yMzEyMjkwNzQwMDNaGA8yMTIzMTIwNTA3NDAwM1owFzEVMBMGA1UEAwwM\n"
45     "ZmFrZUZvclByb3h5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAscFh\n"
46     "B11wXp5PyWqGE0a2a4lrYgcvNRuuK/mzw9y1TRy44e+77UqSpxglPbadk0GGQI6Q\n"
47     "jmbk3CCUJ1Wi0uVGiRlLL2Z5moeHnLN+mbLjtt3xhSwZgfLanwM0wHdZBSRalXnI\n"
48     "peOkR3MoiMqHs4ELW09kf1COOooIAS1arFH5q8EODgs8k5/fCoiawgx7rvM6V2G9\n"
49     "4m6HHqsip0rS4RY3EE9a1w3q7uLXh773n/YwsfoRNd/3elch1MRbURzO8ser3vBV\n"
50     "P8NB1YnoFSYyF6szIoasnswOZQRAE3c+kraMzEyYCNL4L1hEkDt2hQOXvJIWO6Nz\n"
51     "mbmIBmlWpEovt8bFmQIDAQABo1QwUjAfBgNVHSMEGDAWgBRaTirB5B1uI7SOD5ei\n"
52     "aMuEm4RyODAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE8DAXBgNVHREEEDAOggxmYWtl\n"
53     "Rm9yUHJveHkwDQYJKoZIhvcNAQELBQADggEBAEwmj+al+eJIP83/Ug5rbYFVmlRu\n"
54     "nnILNl0Sd18/faSKNuNLNUWEK8VgRs/8loTMeAnltSy63bai4fTJIEALWPvVFgbJ\n"
55     "mjVsy+c7MYM1E1nAndfITAzJohRKZBaO9UQjF30ex7xr/TYOHX0rDpArme2Cj7TC\n"
56     "ZkhlFrAVAyNf6DMfMdFNsevWjdOFz0nAzoDcvb27ilkwa8y4zXXYmyUjIQlBpIyX\n"
57     "MCGLY1lzvE7qey26HPDi1Mnkcq0lZaYam7HbkY8OmgewcoiSXypqZnGcvUJ3DrBn\n"
58     "yGToxaOr12CCNDkvs0fkLdXj9x6Ks9DEFPZvXNV0d8iZo+cbAR3B4tsuUHg=\n"
59     "-----END CERTIFICATE-----\n";
60 
HWTEST_F(TLSCertificateTest, TLSCertificateTest001, testing::ext::TestSize.Level1)61 HWTEST_F(TLSCertificateTest, TLSCertificateTest001, testing::ext::TestSize.Level1)
62 {
63     TLSCertificate certificate("DATA", PEM, CA_CERT);
64     EXPECT_EQ(certificate.GetLocalCertString(), "");
65 }
66 
HWTEST_F(TLSCertificateTest, TLSCertificateTest002, testing::ext::TestSize.Level1)67 HWTEST_F(TLSCertificateTest, TLSCertificateTest002, testing::ext::TestSize.Level1)
68 {
69     TLSCertificate certificate("DATA", DER, CA_CERT);
70     EXPECT_EQ(certificate.GetLocalCertString(), "");
71 }
72 
HWTEST_F(TLSCertificateTest, TLSCertificateTest003, testing::ext::TestSize.Level1)73 HWTEST_F(TLSCertificateTest, TLSCertificateTest003, testing::ext::TestSize.Level1)
74 {
75     TLSCertificate certificate("DATA", PEM, LOCAL_CERT);
76     EXPECT_EQ(certificate.GetLocalCertString(), "");
77 }
78 
HWTEST_F(TLSCertificateTest, TLSCertificateTest004, testing::ext::TestSize.Level1)79 HWTEST_F(TLSCertificateTest, TLSCertificateTest004, testing::ext::TestSize.Level1)
80 {
81     TLSCertificate certificate("DATA", DER, LOCAL_CERT);
82     EXPECT_EQ(certificate.GetLocalCertString(), "");
83 }
84 
HWTEST_F(TLSCertificateTest, TLSCertificateTest005, testing::ext::TestSize.Level1)85 HWTEST_F(TLSCertificateTest, TLSCertificateTest005, testing::ext::TestSize.Level1)
86 {
87     TLSCertificate certificate("DATA", static_cast<EncodingFormat>(100), CA_CERT);
88     EXPECT_EQ(certificate.GetLocalCertString(), "");
89 }
90 
HWTEST_F(TLSCertificateTest, TLSCertificateTest006, testing::ext::TestSize.Level1)91 HWTEST_F(TLSCertificateTest, TLSCertificateTest006, testing::ext::TestSize.Level1)
92 {
93     TLSCertificate certificate("DATA", static_cast<EncodingFormat>(100), LOCAL_CERT);
94     EXPECT_EQ(certificate.GetLocalCertString(), "");
95 }
96 
HWTEST_F(TLSCertificateTest, TLSCertificateTest007, testing::ext::TestSize.Level1)97 HWTEST_F(TLSCertificateTest, TLSCertificateTest007, testing::ext::TestSize.Level1)
98 {
99     TLSCertificate certificate("", PEM, CA_CERT);
100     EXPECT_EQ(certificate.GetLocalCertString(), "");
101 }
102 
HWTEST_F(TLSCertificateTest, TLSCertificateTest008, testing::ext::TestSize.Level1)103 HWTEST_F(TLSCertificateTest, TLSCertificateTest008, testing::ext::TestSize.Level1)
104 {
105     TLSCertificate certificate("", DER, CA_CERT);
106     EXPECT_EQ(certificate.GetLocalCertString(), "");
107 }
108 
HWTEST_F(TLSCertificateTest, TLSCertificateTest009, testing::ext::TestSize.Level1)109 HWTEST_F(TLSCertificateTest, TLSCertificateTest009, testing::ext::TestSize.Level1)
110 {
111     TLSCertificate certificate("", PEM, LOCAL_CERT);
112     EXPECT_EQ(certificate.GetLocalCertString(), "");
113 }
114 
HWTEST_F(TLSCertificateTest, TLSCertificateTest010, testing::ext::TestSize.Level1)115 HWTEST_F(TLSCertificateTest, TLSCertificateTest010, testing::ext::TestSize.Level1)
116 {
117     TLSCertificate certificate("", DER, LOCAL_CERT);
118     EXPECT_EQ(certificate.GetLocalCertString(), "");
119 }
120 
HWTEST_F(TLSCertificateTest, TLSCertificateTest011, testing::ext::TestSize.Level1)121 HWTEST_F(TLSCertificateTest, TLSCertificateTest011, testing::ext::TestSize.Level1)
122 {
123     TLSCertificate certificate("", static_cast<EncodingFormat>(100), CA_CERT);
124     EXPECT_EQ(certificate.GetLocalCertString(), "");
125 }
126 
HWTEST_F(TLSCertificateTest, TLSCertificateTest012, testing::ext::TestSize.Level1)127 HWTEST_F(TLSCertificateTest, TLSCertificateTest012, testing::ext::TestSize.Level1)
128 {
129     TLSCertificate certificate("", static_cast<EncodingFormat>(100), LOCAL_CERT);
130     EXPECT_EQ(certificate.GetLocalCertString(), "");
131 }
132 
HWTEST_F(TLSCertificateTest, TLSCertificateTest013, testing::ext::TestSize.Level1)133 HWTEST_F(TLSCertificateTest, TLSCertificateTest013, testing::ext::TestSize.Level1)
134 {
135     TLSCertificate certificate(PEM_CERT, PEM, CA_CERT);
136     EXPECT_EQ(certificate.GetLocalCertString(), "");
137 }
138 
HWTEST_F(TLSCertificateTest, TLSCertificateTest014, testing::ext::TestSize.Level1)139 HWTEST_F(TLSCertificateTest, TLSCertificateTest014, testing::ext::TestSize.Level1)
140 {
141     TLSCertificate certificate(PEM_CERT, DER, CA_CERT);
142     EXPECT_EQ(certificate.GetLocalCertString(), "");
143 }
144 
HWTEST_F(TLSCertificateTest, TLSCertificateTest015, testing::ext::TestSize.Level1)145 HWTEST_F(TLSCertificateTest, TLSCertificateTest015, testing::ext::TestSize.Level1)
146 {
147     TLSCertificate certificate(PEM_CERT, PEM, LOCAL_CERT);
148     EXPECT_EQ(certificate.GetLocalCertString(), "");
149 }
150 
HWTEST_F(TLSCertificateTest, TLSCertificateTest016, testing::ext::TestSize.Level1)151 HWTEST_F(TLSCertificateTest, TLSCertificateTest016, testing::ext::TestSize.Level1)
152 {
153     TLSCertificate certificate(PEM_CERT, DER, LOCAL_CERT);
154     EXPECT_EQ(certificate.GetLocalCertString(), "");
155 }
156 
HWTEST_F(TLSCertificateTest, TLSCertificateTest017, testing::ext::TestSize.Level1)157 HWTEST_F(TLSCertificateTest, TLSCertificateTest017, testing::ext::TestSize.Level1)
158 {
159     TLSCertificate certificate(PEM_CERT, static_cast<EncodingFormat>(100), CA_CERT);
160     EXPECT_EQ(certificate.GetLocalCertString(), "");
161 }
162 
HWTEST_F(TLSCertificateTest, TLSCertificateTest018, testing::ext::TestSize.Level1)163 HWTEST_F(TLSCertificateTest, TLSCertificateTest018, testing::ext::TestSize.Level1)
164 {
165     TLSCertificate certificate(PEM_CERT, static_cast<EncodingFormat>(100), LOCAL_CERT);
166     EXPECT_EQ(certificate.GetLocalCertString(), "");
167 }
168 
HWTEST_F(TLSCertificateTest, TLSCertificateTest019, testing::ext::TestSize.Level1)169 HWTEST_F(TLSCertificateTest, TLSCertificateTest019, testing::ext::TestSize.Level1)
170 {
171     std::ofstream outfile;
172     outfile.open("./test.pem");
173     outfile.write(PEM_CERT, static_cast<std::streamsize>(strlen(PEM_CERT)));
174     outfile.close();
175     TLSCertificate certificate("./test.pem", PEM, CA_CERT);
176     EXPECT_EQ(certificate.GetLocalCertString(), "");
177 }
178 
HWTEST_F(TLSCertificateTest, TLSCertificateTest020, testing::ext::TestSize.Level1)179 HWTEST_F(TLSCertificateTest, TLSCertificateTest020, testing::ext::TestSize.Level1)
180 {
181     std::ofstream outfile;
182     outfile.open("./test.pem");
183     outfile.write(PEM_CERT, static_cast<std::streamsize>(strlen(PEM_CERT)));
184     outfile.close();
185     TLSCertificate certificate(PEM_CERT, DER, CA_CERT);
186     EXPECT_EQ(certificate.GetLocalCertString(), "");
187 }
188 
HWTEST_F(TLSCertificateTest, TLSCertificateTest021, testing::ext::TestSize.Level1)189 HWTEST_F(TLSCertificateTest, TLSCertificateTest021, testing::ext::TestSize.Level1)
190 {
191     std::ofstream outfile;
192     outfile.open("./test.pem");
193     outfile.write(PEM_CERT, static_cast<std::streamsize>(strlen(PEM_CERT)));
194     outfile.close();
195     TLSCertificate certificate;
196     EXPECT_TRUE(certificate.CertificateFromPem("./test.pem", CA_CERT));
197 }
198 
HWTEST_F(TLSCertificateTest, TLSCertificateTest022, testing::ext::TestSize.Level1)199 HWTEST_F(TLSCertificateTest, TLSCertificateTest022, testing::ext::TestSize.Level1)
200 {
201     std::ofstream outfile;
202     outfile.open("./test.pem");
203     outfile.write(PEM_CERT, static_cast<std::streamsize>(strlen(PEM_CERT)));
204     outfile.close();
205     TLSCertificate certificate;
206     EXPECT_TRUE(certificate.CertificateFromPem("./test.pem", LOCAL_CERT));
207 }
208 
HWTEST_F(TLSCertificateTest, TLSCertificateTest023, testing::ext::TestSize.Level1)209 HWTEST_F(TLSCertificateTest, TLSCertificateTest023, testing::ext::TestSize.Level1)
210 {
211     std::ofstream outfile;
212     outfile.open("/system/lib/test.der");
213     outfile.write(PEM_CERT, static_cast<std::streamsize>(strlen(PEM_CERT)));
214     outfile.close();
215     TLSCertificate certificate;
216     EXPECT_FALSE(certificate.CertificateFromDer("/system/lib/test.der", CA_CERT));
217 }
218 
HWTEST_F(TLSCertificateTest, TLSCertificateTest024, testing::ext::TestSize.Level1)219 HWTEST_F(TLSCertificateTest, TLSCertificateTest024, testing::ext::TestSize.Level1)
220 {
221     std::ofstream outfile;
222     outfile.open("/system/lib/test.der");
223     outfile.write(PEM_CERT, static_cast<std::streamsize>(strlen(PEM_CERT)));
224     outfile.close();
225     TLSCertificate certificate;
226     EXPECT_FALSE(certificate.CertificateFromDer("/system/lib/test.der", LOCAL_CERT));
227 }
228 
HWTEST_F(TLSCertificateTest, TLSCertificateTest025, testing::ext::TestSize.Level1)229 HWTEST_F(TLSCertificateTest, TLSCertificateTest025, testing::ext::TestSize.Level1)
230 {
231     std::ofstream outfile;
232     outfile.open("./test.pem");
233     outfile.write(PEM_CERT, static_cast<std::streamsize>(strlen(PEM_CERT)));
234     outfile.close();
235     auto fp = fopen("./test.pem", "r");
236     auto cert = PEM_read_X509(fp, nullptr, nullptr, nullptr);
237     fclose(fp);
238     unsigned char *der = nullptr;
239     auto len = i2d_X509(cert, &der);
240     fp = fopen("/system/lib/test.der", "wb");
241     if (fp != nullptr) {
242         fwrite(der, 1, len, fp);
243         fclose(fp);
244     }
245     TLSCertificate certificate;
246     EXPECT_FALSE(certificate.CertificateFromPem("/system/lib/test.der", LOCAL_CERT));
247 }
248 
HWTEST_F(TLSCertificateTest, TLSCertificateTest026, testing::ext::TestSize.Level1)249 HWTEST_F(TLSCertificateTest, TLSCertificateTest026, testing::ext::TestSize.Level1)
250 {
251     std::ofstream outfile;
252     outfile.open("./test.pem");
253     outfile.write(PEM_CERT, static_cast<std::streamsize>(strlen(PEM_CERT)));
254     outfile.close();
255     auto fp = fopen("./test.pem", "r");
256     auto cert = PEM_read_X509(fp, nullptr, nullptr, nullptr);
257     fclose(fp);
258     unsigned char *der = nullptr;
259     auto len = i2d_X509(cert, &der);
260     fp = fopen("/system/lib/test.der", "wb");
261     if (fp != nullptr) {
262         fwrite(der, 1, len, fp);
263         fclose(fp);
264     }
265 
266     TLSCertificate certificate;
267     EXPECT_FALSE(certificate.CertificateFromPem("/system/lib/test.der", CA_CERT));
268 }
269 } // namespace OHOS::NetStack::TlsSocket