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