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 <gtest/gtest.h>
17
18 #include "certificate_openssl_common.h"
19 #include "cf_blob.h"
20 #include "cf_log.h"
21 #include "memory_mock.h"
22 #include "securec.h"
23 #include "x509_certificate.h"
24 #include "x509_certificate_openssl.h"
25
26 using namespace std;
27 using namespace testing::ext;
28
29 namespace {
30 HcfX509CertificateSpi *g_x509CertSpiObj = nullptr;
31
32 class CryptoX509CertificateTestPart2 : public testing::Test {
33 public:
34 static void SetUpTestCase();
35 static void TearDownTestCase();
36 void SetUp();
37 void TearDown();
38 };
39
40 static char g_certWithCrlDp1[] =
41 "-----BEGIN CERTIFICATE-----\r\n"
42 "MIIB/jCCAaSgAwIBAgICA+gwCgYIKoZIzj0EAwIwLDELMAkGA1UEBhMCQ04xDTAL\r\n"
43 "BgNVBAoMBHRlc3QxDjAMBgNVBAMMBXN1YmNhMB4XDTIzMTAwNzA0MDEwOFoXDTMz\r\n"
44 "MTAwNDA0MDEwOFowLDELMAkGA1UEBhMCQ04xDTALBgNVBAoMBHRlc3QxDjAMBgNV\r\n"
45 "BAMMBWxvY2FsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZDPvdlJI6Yv4fiaR\r\n"
46 "nQHcusXVbukk90mQ0rBGOYRikFvgvm5cjTdaUGcQKEtwYIKDQl5n6Pf7ElCJ7GRz\r\n"
47 "raWZ+qOBtTCBsjAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdl\r\n"
48 "bmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQU63Gbl8gIsUn0VyZ4rya3PCjm\r\n"
49 "sfEwHwYDVR0jBBgwFoAU77mynM0rz1SD43DQjleWM7bF+MEwNwYDVR0fBDAwLjAs\r\n"
50 "oCqgKIYmaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfMS5jcmwwCgYI\r\n"
51 "KoZIzj0EAwIDSAAwRQIhAISKHH9u221mBgdDWfll3loLvEHJ3or9NUO5Zn6SrX6L\r\n"
52 "AiAtRlOa6/mTD68faQTdhsAaQP955QfW34B4yFqU2Bq72A==\r\n"
53 "-----END CERTIFICATE-----\r\n";
54
55 static char g_certWithCrlDp2[] =
56 "-----BEGIN CERTIFICATE-----\r\n"
57 "MIICLTCCAdKgAwIBAgICA+gwCgYIKoZIzj0EAwIwLDELMAkGA1UEBhMCQ04xDTAL\r\n"
58 "BgNVBAoMBHRlc3QxDjAMBgNVBAMMBXN1YmNhMB4XDTIzMTAwNzAzNTgwNloXDTMz\r\n"
59 "MTAwNDAzNTgwNlowLDELMAkGA1UEBhMCQ04xDTALBgNVBAoMBHRlc3QxDjAMBgNV\r\n"
60 "BAMMBWxvY2FsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZDPvdlJI6Yv4fiaR\r\n"
61 "nQHcusXVbukk90mQ0rBGOYRikFvgvm5cjTdaUGcQKEtwYIKDQl5n6Pf7ElCJ7GRz\r\n"
62 "raWZ+qOB4zCB4DAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdl\r\n"
63 "bmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQU63Gbl8gIsUn0VyZ4rya3PCjm\r\n"
64 "sfEwHwYDVR0jBBgwFoAU77mynM0rz1SD43DQjleWM7bF+MEwZQYDVR0fBF4wXDAs\r\n"
65 "oCqgKIYmaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfMS5jcmwwLKAq\r\n"
66 "oCiGJmh0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzIuY3JsMAoGCCqG\r\n"
67 "SM49BAMCA0kAMEYCIQCt3yL3X3ecFWS2+wkzTKZSV9zyLoAsYEvD+OjGNZbSmwIh\r\n"
68 "AOyFskTB0ZiSBn7EYMZ3gs6T0C0kmFjrNi+clJeynBEp\r\n"
69 "-----END CERTIFICATE-----\r\n";
70
71 static char g_certWithCrlDp8[] =
72 "-----BEGIN CERTIFICATE-----\n"
73 "MIIDSDCCAu6gAwIBAgICA+gwCgYIKoZIzj0EAwIwLDELMAkGA1UEBhMCQ04xDTAL\n"
74 "BgNVBAoMBHRlc3QxDjAMBgNVBAMMBXN1YmNhMB4XDTIzMTAxMDA3NDIyOFoXDTMz\n"
75 "MTAwNzA3NDIyOFowLDELMAkGA1UEBhMCQ04xDTALBgNVBAoMBHRlc3QxDjAMBgNV\n"
76 "BAMMBWxvY2FsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAETaBOoRxQun7uhAkm\n"
77 "5A8x484nBrohN0i9eouxES6Zw3uDCu3nxdwqqReB/teuHipgsrKiVwxGNHdKVFxE\n"
78 "yKIQzaOCAf4wggH6MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wg\n"
79 "R2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSpaV4I7K72Jxu+PWYHOyFP\n"
80 "4eWhXDAfBgNVHSMEGDAWgBSE1UBYzjXlk0cCk3CDPN9sENNP7jCCAX0GA1UdHwSC\n"
81 "AXQwggFwMCygKqAohiZodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF8x\n"
82 "LmNybDAsoCqgKIYmaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfMi5j\n"
83 "cmwwLKAqoCiGJmh0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzMuY3Js\n"
84 "MCygKqAohiZodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF80LmNybDAs\n"
85 "oCqgKIYmaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfNS5jcmwwLKAq\n"
86 "oCiGJmh0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzYuY3JsMCygKqAo\n"
87 "hiZodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF83LmNybDAsoCqgKIYm\n"
88 "aHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfOC5jcmwwCgYIKoZIzj0E\n"
89 "AwIDSAAwRQIgV1rwM5Yk0U8SM0MEI3L5rstpiB58ydrjvubSF+Wgbk0CIQCkRDuS\n"
90 "LgDV2OXx7wXaPQME7nFafzqXk6NdgifDQWMqkw==\n"
91 "-----END CERTIFICATE-----\n";
92
93 static char g_certWithoutCrlDp[] =
94 "-----BEGIN CERTIFICATE-----\r\n"
95 "MIIBnDCCAUKgAwIBAgICA+gwCgYIKoZIzj0EAwIwLTELMAkGA1UEBhMCQ04xDTAL\r\n"
96 "BgNVBAoMBHRlc3QxDzANBgNVBAMMBnJvb3RjYTAeFw0yMzEwMDcwMzU4MDZaFw0z\r\n"
97 "MzEwMDQwMzU4MDZaMCwxCzAJBgNVBAYTAkNOMQ0wCwYDVQQKDAR0ZXN0MQ4wDAYD\r\n"
98 "VQQDDAVzdWJjYTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJqIo1VhLtAnIgNJ\r\n"
99 "0TkfNpqevo92EcCYFL+Wm0wq/Gfm3l0PTWyFngNm6uRfemBsAmGczlONSVRx9v2w\r\n"
100 "Awk+sS+jUzBRMB0GA1UdDgQWBBTvubKczSvPVIPjcNCOV5YztsX4wTAfBgNVHSME\r\n"
101 "GDAWgBSRIhaqS/s2+0ZLFfxS6b7L/cy4wjAPBgNVHRMBAf8EBTADAQH/MAoGCCqG\r\n"
102 "SM49BAMCA0gAMEUCIENRICDJNFiguuJ+g3aAl3qe/RKiPaGwSPv03yJ25u+RAiEA\r\n"
103 "xf55dBUEyMEoOaTb/hhPXrBUUA5XZw8UT6wYujR/AS0=\r\n"
104 "-----END CERTIFICATE-----\r\n";
105
106 static char g_certWithCrlDpNoURI[] =
107 "-----BEGIN CERTIFICATE-----\n"
108 "MIIB3TCCAYKgAwIBAgICA+gwCgYIKoZIzj0EAwIwLDELMAkGA1UEBhMCQ04xDTAL\n"
109 "BgNVBAoMBHRlc3QxDjAMBgNVBAMMBXN1YmNhMB4XDTIzMTAxMDEzMDgxOVoXDTMz\n"
110 "MTAwNzEzMDgxOVowLDELMAkGA1UEBhMCQ04xDTALBgNVBAoMBHRlc3QxDjAMBgNV\n"
111 "BAMMBWxvY2FsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAETaBOoRxQun7uhAkm\n"
112 "5A8x484nBrohN0i9eouxES6Zw3uDCu3nxdwqqReB/teuHipgsrKiVwxGNHdKVFxE\n"
113 "yKIQzaOBkzCBkDAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdl\n"
114 "bmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUqWleCOyu9icbvj1mBzshT+Hl\n"
115 "oVwwHwYDVR0jBBgwFoAUhNVAWM415ZNHApNwgzzfbBDTT+4wFQYDVR0fBA4wDDAK\n"
116 "oAigBocECgEBATAKBggqhkjOPQQDAgNJADBGAiEA3Qe/oPfqrwlGfjErqDHyeZb1\n"
117 "iCYjVEYEoZupg6Ue80ACIQCXtjsGqRyZAm43yHdGhW8j0gE6L3Bv5Vm4UZOJPZRy\n"
118 "Ww==\n"
119 "-----END CERTIFICATE-----\n";
120
121 static char g_certWithCrlDpIssuer[] =
122 "-----BEGIN CERTIFICATE-----\n"
123 "MIICDDCCAbGgAwIBAgICA+gwCgYIKoZIzj0EAwIwLDELMAkGA1UEBhMCQ04xDTAL\n"
124 "BgNVBAoMBHRlc3QxDjAMBgNVBAMMBXN1YmNhMB4XDTIzMTAxOTEyMTc0NloXDTMz\n"
125 "MTAxNjEyMTc0NlowLDELMAkGA1UEBhMCQ04xDTALBgNVBAoMBHRlc3QxDjAMBgNV\n"
126 "BAMMBWxvY2FsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEINihyk+dLPlaRvHb\n"
127 "rbUEp/xtWBt7/eNePaccrS7QkBlNFuRrv+Ea9eg62a41bw8EoYU/hDYRJHoqqXti\n"
128 "OU97bqOBwjCBvzAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdl\n"
129 "bmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUsiyVH5fLNzjOZBKDgWERDTCK\n"
130 "6f0wHwYDVR0jBBgwFoAUjLWOfDZrafbczKOUrx5/NdooOIUwRAYDVR0fBD0wOzA5\n"
131 "gQIFYKIzpDEwLzELMAkGA1UEBhMCQ04xDTALBgNVBAoMBFRlc3QxETAPBgNVBAMM\n"
132 "CFNvbWVOYW1lMAoGCCqGSM49BAMCA0kAMEYCIQCLzL7zNmkakBNDGNTggvbb00qg\n"
133 "7SAMdyynm9BlLGGTAQIhAKGmqy8v0p2QlGM68iYugxo2dq20FxK4aK5Cr3rnMmYE\n"
134 "-----END CERTIFICATE-----\n";
135
136 static char g_certWithCrlDpURILenTooLong[] =
137 "-----BEGIN CERTIFICATE-----\n"
138 "MIIGbzCCBhagAwIBAgICA+gwCgYIKoZIzj0EAwIwLDELMAkGA1UEBhMCQ04xDTAL\n"
139 "BgNVBAoMBHRlc3QxDjAMBgNVBAMMBXN1YmNhMB4XDTIzMTAxOTEyNDEwOFoXDTMz\n"
140 "MTAxNjEyNDEwOFowLDELMAkGA1UEBhMCQ04xDTALBgNVBAoMBHRlc3QxDjAMBgNV\n"
141 "BAMMBWxvY2FsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEINihyk+dLPlaRvHb\n"
142 "rbUEp/xtWBt7/eNePaccrS7QkBlNFuRrv+Ea9eg62a41bw8EoYU/hDYRJHoqqXti\n"
143 "OU97bqOCBSYwggUiMAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wg\n"
144 "R2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSyLJUfl8s3OM5kEoOBYREN\n"
145 "MIrp/TAfBgNVHSMEGDAWgBSMtY58Nmtp9tzMo5SvHn812ig4hTCCBKUGA1UdHwSC\n"
146 "BJwwggSYMIIElKCCBJCgggSMhoIEiGh0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20v\n"
147 "Y3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlz\n"
148 "dHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0\n"
149 "aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9p\n"
150 "bnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3Js\n"
151 "RGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJp\n"
152 "YnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9u\n"
153 "UG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRz\n"
154 "Y3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlz\n"
155 "dHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0\n"
156 "aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9p\n"
157 "bnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3Js\n"
158 "RGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJp\n"
159 "YnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9u\n"
160 "UG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRz\n"
161 "Y3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlz\n"
162 "dHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0\n"
163 "aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9p\n"
164 "bnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3Js\n"
165 "RGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJp\n"
166 "YnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9u\n"
167 "UG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRz\n"
168 "Y3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlz\n"
169 "dHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzY3JsRGlzdHJpYnV0\n"
170 "aW9uUG9pbnRzY3JsRGlzdHJpYnV0aW9uUG9pbnRzMAoGCCqGSM49BAMCA0cAMEQC\n"
171 "ID7BfeTjZ/iEm3ae8FcqWw02wh5resqP1sAQHXhzovMxAiA/5jb7DT5F7i8C35dS\n"
172 "pmYqrumevQAng4kYKpD3VDOD6A==\n"
173 "-----END CERTIFICATE-----\n";
174
175 static char g_certWithCrlDp100[] =
176 "-----BEGIN CERTIFICATE-----\n"
177 "MIIUKzCCE9KgAwIBAgICA+gwCgYIKoZIzj0EAwIwLDELMAkGA1UEBhMCQ04xDTAL\n"
178 "BgNVBAoMBHRlc3QxDjAMBgNVBAMMBXN1YmNhMB4XDTIzMTAyMDAxNDYwOFoXDTMz\n"
179 "MTAxNzAxNDYwOFowLDELMAkGA1UEBhMCQ04xDTALBgNVBAoMBHRlc3QxDjAMBgNV\n"
180 "BAMMBWxvY2FsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEINihyk+dLPlaRvHb\n"
181 "rbUEp/xtWBt7/eNePaccrS7QkBlNFuRrv+Ea9eg62a41bw8EoYU/hDYRJHoqqXti\n"
182 "OU97bqOCEuIwghLeMAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wg\n"
183 "R2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSyLJUfl8s3OM5kEoOBYREN\n"
184 "MIrp/TAfBgNVHSMEGDAWgBSMtY58Nmtp9tzMo5SvHn812ig4hTCCEmEGA1UdHwSC\n"
185 "ElgwghJUMCygKqAohiZodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF8x\n"
186 "LmNybDAsoCqgKIYmaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfMi5j\n"
187 "cmwwLKAqoCiGJmh0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzMuY3Js\n"
188 "MCygKqAohiZodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF80LmNybDAs\n"
189 "oCqgKIYmaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfNS5jcmwwLKAq\n"
190 "oCiGJmh0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzYuY3JsMCygKqAo\n"
191 "hiZodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF83LmNybDAsoCqgKIYm\n"
192 "aHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfOC5jcmwwLKAqoCiGJmh0\n"
193 "dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzkuY3JsMC2gK6AphidodHRw\n"
194 "Oi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF8xMC5jcmwwLaAroCmGJ2h0dHA6\n"
195 "Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzExLmNybDAtoCugKYYnaHR0cDov\n"
196 "L3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfMTIuY3JsMC2gK6AphidodHRwOi8v\n"
197 "dGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF8xMy5jcmwwLaAroCmGJ2h0dHA6Ly90\n"
198 "ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzE0LmNybDAtoCugKYYnaHR0cDovL3Rl\n"
199 "c3QudGVzdENSTGRwLmNvbS9DUkxfRFBfMTUuY3JsMC2gK6AphidodHRwOi8vdGVz\n"
200 "dC50ZXN0Q1JMZHAuY29tL0NSTF9EUF8xNi5jcmwwLaAroCmGJ2h0dHA6Ly90ZXN0\n"
201 "LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzE3LmNybDAtoCugKYYnaHR0cDovL3Rlc3Qu\n"
202 "dGVzdENSTGRwLmNvbS9DUkxfRFBfMTguY3JsMC2gK6AphidodHRwOi8vdGVzdC50\n"
203 "ZXN0Q1JMZHAuY29tL0NSTF9EUF8xOS5jcmwwLaAroCmGJ2h0dHA6Ly90ZXN0LnRl\n"
204 "c3RDUkxkcC5jb20vQ1JMX0RQXzIwLmNybDAtoCugKYYnaHR0cDovL3Rlc3QudGVz\n"
205 "dENSTGRwLmNvbS9DUkxfRFBfMjEuY3JsMC2gK6AphidodHRwOi8vdGVzdC50ZXN0\n"
206 "Q1JMZHAuY29tL0NSTF9EUF8yMi5jcmwwLaAroCmGJ2h0dHA6Ly90ZXN0LnRlc3RD\n"
207 "UkxkcC5jb20vQ1JMX0RQXzIzLmNybDAtoCugKYYnaHR0cDovL3Rlc3QudGVzdENS\n"
208 "TGRwLmNvbS9DUkxfRFBfMjQuY3JsMC2gK6AphidodHRwOi8vdGVzdC50ZXN0Q1JM\n"
209 "ZHAuY29tL0NSTF9EUF8yNS5jcmwwLaAroCmGJ2h0dHA6Ly90ZXN0LnRlc3RDUkxk\n"
210 "cC5jb20vQ1JMX0RQXzI2LmNybDAtoCugKYYnaHR0cDovL3Rlc3QudGVzdENSTGRw\n"
211 "LmNvbS9DUkxfRFBfMjcuY3JsMC2gK6AphidodHRwOi8vdGVzdC50ZXN0Q1JMZHAu\n"
212 "Y29tL0NSTF9EUF8yOC5jcmwwLaAroCmGJ2h0dHA6Ly90ZXN0LnRlc3RDUkxkcC5j\n"
213 "b20vQ1JMX0RQXzI5LmNybDAtoCugKYYnaHR0cDovL3Rlc3QudGVzdENSTGRwLmNv\n"
214 "bS9DUkxfRFBfMzAuY3JsMC2gK6AphidodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29t\n"
215 "L0NSTF9EUF8zMS5jcmwwLaAroCmGJ2h0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20v\n"
216 "Q1JMX0RQXzMyLmNybDAtoCugKYYnaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9D\n"
217 "UkxfRFBfMzMuY3JsMC2gK6AphidodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NS\n"
218 "TF9EUF8zNC5jcmwwLaAroCmGJ2h0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JM\n"
219 "X0RQXzM1LmNybDAtoCugKYYnaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxf\n"
220 "RFBfMzYuY3JsMC2gK6AphidodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9E\n"
221 "UF8zNy5jcmwwLaAroCmGJ2h0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQ\n"
222 "XzM4LmNybDAtoCugKYYnaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBf\n"
223 "MzkuY3JsMC2gK6AphidodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF80\n"
224 "MC5jcmwwLaAroCmGJ2h0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzQx\n"
225 "LmNybDAtoCugKYYnaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfNDIu\n"
226 "Y3JsMC2gK6AphidodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF80My5j\n"
227 "cmwwLaAroCmGJ2h0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzQ0LmNy\n"
228 "bDAtoCugKYYnaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfNDUuY3Js\n"
229 "MC2gK6AphidodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF80Ni5jcmww\n"
230 "LaAroCmGJ2h0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzQ3LmNybDAt\n"
231 "oCugKYYnaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfNDguY3JsMC2g\n"
232 "K6AphidodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF80OS5jcmwwLaAr\n"
233 "oCmGJ2h0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzUwLmNybDAtoCug\n"
234 "KYYnaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfNTEuY3JsMC2gK6Ap\n"
235 "hidodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF81Mi5jcmwwLaAroCmG\n"
236 "J2h0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzUzLmNybDAtoCugKYYn\n"
237 "aHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfNTQuY3JsMC2gK6Aphido\n"
238 "dHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF81NS5jcmwwLaAroCmGJ2h0\n"
239 "dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzU2LmNybDAtoCugKYYnaHR0\n"
240 "cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfNTcuY3JsMC2gK6AphidodHRw\n"
241 "Oi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF81OC5jcmwwLaAroCmGJ2h0dHA6\n"
242 "Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzU5LmNybDAtoCugKYYnaHR0cDov\n"
243 "L3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfNjAuY3JsMC2gK6AphidodHRwOi8v\n"
244 "dGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF82MS5jcmwwLaAroCmGJ2h0dHA6Ly90\n"
245 "ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzYyLmNybDAtoCugKYYnaHR0cDovL3Rl\n"
246 "c3QudGVzdENSTGRwLmNvbS9DUkxfRFBfNjMuY3JsMC2gK6AphidodHRwOi8vdGVz\n"
247 "dC50ZXN0Q1JMZHAuY29tL0NSTF9EUF82NC5jcmwwLaAroCmGJ2h0dHA6Ly90ZXN0\n"
248 "LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzY1LmNybDAtoCugKYYnaHR0cDovL3Rlc3Qu\n"
249 "dGVzdENSTGRwLmNvbS9DUkxfRFBfNjYuY3JsMC2gK6AphidodHRwOi8vdGVzdC50\n"
250 "ZXN0Q1JMZHAuY29tL0NSTF9EUF82Ny5jcmwwLaAroCmGJ2h0dHA6Ly90ZXN0LnRl\n"
251 "c3RDUkxkcC5jb20vQ1JMX0RQXzY4LmNybDAtoCugKYYnaHR0cDovL3Rlc3QudGVz\n"
252 "dENSTGRwLmNvbS9DUkxfRFBfNjkuY3JsMC2gK6AphidodHRwOi8vdGVzdC50ZXN0\n"
253 "Q1JMZHAuY29tL0NSTF9EUF83MC5jcmwwLaAroCmGJ2h0dHA6Ly90ZXN0LnRlc3RD\n"
254 "UkxkcC5jb20vQ1JMX0RQXzcxLmNybDAtoCugKYYnaHR0cDovL3Rlc3QudGVzdENS\n"
255 "TGRwLmNvbS9DUkxfRFBfNzIuY3JsMC2gK6AphidodHRwOi8vdGVzdC50ZXN0Q1JM\n"
256 "ZHAuY29tL0NSTF9EUF83My5jcmwwLaAroCmGJ2h0dHA6Ly90ZXN0LnRlc3RDUkxk\n"
257 "cC5jb20vQ1JMX0RQXzc0LmNybDAtoCugKYYnaHR0cDovL3Rlc3QudGVzdENSTGRw\n"
258 "LmNvbS9DUkxfRFBfNzUuY3JsMC2gK6AphidodHRwOi8vdGVzdC50ZXN0Q1JMZHAu\n"
259 "Y29tL0NSTF9EUF83Ni5jcmwwLaAroCmGJ2h0dHA6Ly90ZXN0LnRlc3RDUkxkcC5j\n"
260 "b20vQ1JMX0RQXzc3LmNybDAtoCugKYYnaHR0cDovL3Rlc3QudGVzdENSTGRwLmNv\n"
261 "bS9DUkxfRFBfNzguY3JsMC2gK6AphidodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29t\n"
262 "L0NSTF9EUF83OS5jcmwwLaAroCmGJ2h0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20v\n"
263 "Q1JMX0RQXzgwLmNybDAtoCugKYYnaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9D\n"
264 "UkxfRFBfODEuY3JsMC2gK6AphidodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NS\n"
265 "TF9EUF84Mi5jcmwwLaAroCmGJ2h0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JM\n"
266 "X0RQXzgzLmNybDAtoCugKYYnaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxf\n"
267 "RFBfODQuY3JsMC2gK6AphidodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9E\n"
268 "UF84NS5jcmwwLaAroCmGJ2h0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQ\n"
269 "Xzg2LmNybDAtoCugKYYnaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBf\n"
270 "ODcuY3JsMC2gK6AphidodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF84\n"
271 "OC5jcmwwLaAroCmGJ2h0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzg5\n"
272 "LmNybDAtoCugKYYnaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfOTAu\n"
273 "Y3JsMC2gK6AphidodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF85MS5j\n"
274 "cmwwLaAroCmGJ2h0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzkyLmNy\n"
275 "bDAtoCugKYYnaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfOTMuY3Js\n"
276 "MC2gK6AphidodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF85NC5jcmww\n"
277 "LaAroCmGJ2h0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzk1LmNybDAt\n"
278 "oCugKYYnaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfOTYuY3JsMC2g\n"
279 "K6AphidodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF85Ny5jcmwwLaAr\n"
280 "oCmGJ2h0dHA6Ly90ZXN0LnRlc3RDUkxkcC5jb20vQ1JMX0RQXzk4LmNybDAtoCug\n"
281 "KYYnaHR0cDovL3Rlc3QudGVzdENSTGRwLmNvbS9DUkxfRFBfOTkuY3JsMC6gLKAq\n"
282 "hihodHRwOi8vdGVzdC50ZXN0Q1JMZHAuY29tL0NSTF9EUF8xMDAuY3JsMAoGCCqG\n"
283 "SM49BAMCA0cAMEQCIDG3YVjrRZauRV49iX4KtoDgNVBqz/Q5nphRfMisG6sEAiAI\n"
284 "WcZaLh0N/XYlkfx6Z88stuyr3uPVQjonrzlSVn5fAQ==\n"
285 "-----END CERTIFICATE-----\n";
286
287 static char g_certWithCrlDp101[] =
288 "-----BEGIN CERTIFICATE-----\n"
289 "MIIXHzCCFsWgAwIBAgICA+gwCgYIKoZIzj0EAwIwLDELMAkGA1UEBhMCQ04xDTAL\n"
290 "BgNVBAoMBHRlc3QxDjAMBgNVBAMMBXN1YmNhMB4XDTIzMTAyMDAxNTExMVoXDTMz\n"
291 "MTAxNzAxNTExMVowLDELMAkGA1UEBhMCQ04xDTALBgNVBAoMBHRlc3QxDjAMBgNV\n"
292 "BAMMBWxvY2FsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEINihyk+dLPlaRvHb\n"
293 "rbUEp/xtWBt7/eNePaccrS7QkBlNFuRrv+Ea9eg62a41bw8EoYU/hDYRJHoqqXti\n"
294 "OU97bqOCFdUwghXRMAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wg\n"
295 "R2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSyLJUfl8s3OM5kEoOBYREN\n"
296 "MIrp/TAfBgNVHSMEGDAWgBSMtY58Nmtp9tzMo5SvHn812ig4hTCCFVQGA1UdHwSC\n"
297 "FUswghVHMDOgMaAvhi1odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9j\n"
298 "cmxfY3BfMS5jcmwwM6AxoC+GLWh0dHA6Ly90ZXN0MS50ZXN0MUNSTGRwLmNvbS90\n"
299 "ZXN0X2NybF9jcF8yLmNybDAzoDGgL4YtaHR0cDovL3Rlc3QxLnRlc3QxQ1JMZHAu\n"
300 "Y29tL3Rlc3RfY3JsX2NwXzMuY3JsMDOgMaAvhi1odHRwOi8vdGVzdDEudGVzdDFD\n"
301 "UkxkcC5jb20vdGVzdF9jcmxfY3BfNC5jcmwwM6AxoC+GLWh0dHA6Ly90ZXN0MS50\n"
302 "ZXN0MUNSTGRwLmNvbS90ZXN0X2NybF9jcF81LmNybDAzoDGgL4YtaHR0cDovL3Rl\n"
303 "c3QxLnRlc3QxQ1JMZHAuY29tL3Rlc3RfY3JsX2NwXzYuY3JsMDOgMaAvhi1odHRw\n"
304 "Oi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNy5jcmwwM6AxoC+G\n"
305 "LWh0dHA6Ly90ZXN0MS50ZXN0MUNSTGRwLmNvbS90ZXN0X2NybF9jcF84LmNybDAz\n"
306 "oDGgL4YtaHR0cDovL3Rlc3QxLnRlc3QxQ1JMZHAuY29tL3Rlc3RfY3JsX2NwXzku\n"
307 "Y3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxf\n"
308 "Y3BfMTAuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVz\n"
309 "dF9jcmxfY3BfMTEuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5j\n"
310 "b20vdGVzdF9jcmxfY3BfMTIuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFD\n"
311 "UkxkcC5jb20vdGVzdF9jcmxfY3BfMTMuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEu\n"
312 "dGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfMTQuY3JsMDSgMqAwhi5odHRwOi8v\n"
313 "dGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfMTUuY3JsMDSgMqAwhi5o\n"
314 "dHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfMTYuY3JsMDSg\n"
315 "MqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfMTcu\n"
316 "Y3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxf\n"
317 "Y3BfMTguY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVz\n"
318 "dF9jcmxfY3BfMTkuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5j\n"
319 "b20vdGVzdF9jcmxfY3BfMjAuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFD\n"
320 "UkxkcC5jb20vdGVzdF9jcmxfY3BfMjEuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEu\n"
321 "dGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfMjIuY3JsMDSgMqAwhi5odHRwOi8v\n"
322 "dGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfMjMuY3JsMDSgMqAwhi5o\n"
323 "dHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfMjQuY3JsMDSg\n"
324 "MqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfMjUu\n"
325 "Y3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxf\n"
326 "Y3BfMjYuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVz\n"
327 "dF9jcmxfY3BfMjcuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5j\n"
328 "b20vdGVzdF9jcmxfY3BfMjguY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFD\n"
329 "UkxkcC5jb20vdGVzdF9jcmxfY3BfMjkuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEu\n"
330 "dGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfMzAuY3JsMDSgMqAwhi5odHRwOi8v\n"
331 "dGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfMzEuY3JsMDSgMqAwhi5o\n"
332 "dHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfMzIuY3JsMDSg\n"
333 "MqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfMzMu\n"
334 "Y3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxf\n"
335 "Y3BfMzQuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVz\n"
336 "dF9jcmxfY3BfMzUuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5j\n"
337 "b20vdGVzdF9jcmxfY3BfMzYuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFD\n"
338 "UkxkcC5jb20vdGVzdF9jcmxfY3BfMzcuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEu\n"
339 "dGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfMzguY3JsMDSgMqAwhi5odHRwOi8v\n"
340 "dGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfMzkuY3JsMDSgMqAwhi5o\n"
341 "dHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNDAuY3JsMDSg\n"
342 "MqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNDEu\n"
343 "Y3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxf\n"
344 "Y3BfNDIuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVz\n"
345 "dF9jcmxfY3BfNDMuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5j\n"
346 "b20vdGVzdF9jcmxfY3BfNDQuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFD\n"
347 "UkxkcC5jb20vdGVzdF9jcmxfY3BfNDUuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEu\n"
348 "dGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNDYuY3JsMDSgMqAwhi5odHRwOi8v\n"
349 "dGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNDcuY3JsMDSgMqAwhi5o\n"
350 "dHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNDguY3JsMDSg\n"
351 "MqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNDku\n"
352 "Y3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxf\n"
353 "Y3BfNTAuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVz\n"
354 "dF9jcmxfY3BfNTEuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5j\n"
355 "b20vdGVzdF9jcmxfY3BfNTIuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFD\n"
356 "UkxkcC5jb20vdGVzdF9jcmxfY3BfNTMuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEu\n"
357 "dGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNTQuY3JsMDSgMqAwhi5odHRwOi8v\n"
358 "dGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNTUuY3JsMDSgMqAwhi5o\n"
359 "dHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNTYuY3JsMDSg\n"
360 "MqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNTcu\n"
361 "Y3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxf\n"
362 "Y3BfNTguY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVz\n"
363 "dF9jcmxfY3BfNTkuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5j\n"
364 "b20vdGVzdF9jcmxfY3BfNjAuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFD\n"
365 "UkxkcC5jb20vdGVzdF9jcmxfY3BfNjEuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEu\n"
366 "dGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNjIuY3JsMDSgMqAwhi5odHRwOi8v\n"
367 "dGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNjMuY3JsMDSgMqAwhi5o\n"
368 "dHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNjQuY3JsMDSg\n"
369 "MqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNjUu\n"
370 "Y3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxf\n"
371 "Y3BfNjYuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVz\n"
372 "dF9jcmxfY3BfNjcuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5j\n"
373 "b20vdGVzdF9jcmxfY3BfNjguY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFD\n"
374 "UkxkcC5jb20vdGVzdF9jcmxfY3BfNjkuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEu\n"
375 "dGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNzAuY3JsMDSgMqAwhi5odHRwOi8v\n"
376 "dGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNzEuY3JsMDSgMqAwhi5o\n"
377 "dHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNzIuY3JsMDSg\n"
378 "MqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNzMu\n"
379 "Y3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxf\n"
380 "Y3BfNzQuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVz\n"
381 "dF9jcmxfY3BfNzUuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5j\n"
382 "b20vdGVzdF9jcmxfY3BfNzYuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFD\n"
383 "UkxkcC5jb20vdGVzdF9jcmxfY3BfNzcuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEu\n"
384 "dGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNzguY3JsMDSgMqAwhi5odHRwOi8v\n"
385 "dGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfNzkuY3JsMDSgMqAwhi5o\n"
386 "dHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfODAuY3JsMDSg\n"
387 "MqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfODEu\n"
388 "Y3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxf\n"
389 "Y3BfODIuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVz\n"
390 "dF9jcmxfY3BfODMuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5j\n"
391 "b20vdGVzdF9jcmxfY3BfODQuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFD\n"
392 "UkxkcC5jb20vdGVzdF9jcmxfY3BfODUuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEu\n"
393 "dGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfODYuY3JsMDSgMqAwhi5odHRwOi8v\n"
394 "dGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfODcuY3JsMDSgMqAwhi5o\n"
395 "dHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfODguY3JsMDSg\n"
396 "MqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfODku\n"
397 "Y3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxf\n"
398 "Y3BfOTAuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVz\n"
399 "dF9jcmxfY3BfOTEuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5j\n"
400 "b20vdGVzdF9jcmxfY3BfOTIuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFD\n"
401 "UkxkcC5jb20vdGVzdF9jcmxfY3BfOTMuY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEu\n"
402 "dGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfOTQuY3JsMDSgMqAwhi5odHRwOi8v\n"
403 "dGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfOTUuY3JsMDSgMqAwhi5o\n"
404 "dHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfOTYuY3JsMDSg\n"
405 "MqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxfY3BfOTcu\n"
406 "Y3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVzdF9jcmxf\n"
407 "Y3BfOTguY3JsMDSgMqAwhi5odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5jb20vdGVz\n"
408 "dF9jcmxfY3BfOTkuY3JsMDWgM6Axhi9odHRwOi8vdGVzdDEudGVzdDFDUkxkcC5j\n"
409 "b20vdGVzdF9jcmxfY3BfMTAwLmNybDA1oDOgMYYvaHR0cDovL3Rlc3QxLnRlc3Qx\n"
410 "Q1JMZHAuY29tL3Rlc3RfY3JsX2NwXzEwMS5jcmwwCgYIKoZIzj0EAwIDSAAwRQIh\n"
411 "AK7dZQaO+HAOfH3AnOEJ83tB/9xeMA2Z+K4ptR880auOAiA2pR5bHiVERvqUKQix\n"
412 "neDdISIVTtOvIqTB//4hVKu0IQ==\n"
413 "-----END CERTIFICATE-----\n";
414
415 static const char g_testUtf8CaCert[] =
416 "-----BEGIN CERTIFICATE-----\r\n"
417 "MIIDizCCAnOgAwIBAgIGAXKnJjrAMA0GCSqGSIb3DQEBCwUAMFwxCzAJBgNVBAYT\r\n"
418 "AkNOMQ8wDQYDVQQIDAbpmZXopb8xEjAQBgNVBAcMCeilv++/peWuiTEQMA4GA1UE\r\n"
419 "CgwH5rWLJeivlTEWMBQGA1UEAwwN5Lit5paHQOa1i+ivlTAeFw0yNDA1MTUwOTQx\r\n"
420 "NTFaFw0zNDA1MTMwOTQxNTFaMFwxCzAJBgNVBAYTAkNOMQ8wDQYDVQQIDAbpmZXo\r\n"
421 "pb8xEjAQBgNVBAcMCeilv++/peWuiTEQMA4GA1UECgwH5rWLJeivlTEWMBQGA1UE\r\n"
422 "AwwN5Lit5paHQOa1i+ivlTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\r\n"
423 "ANE1XpjR6Zrk2eJ6e9arl3S3KEQFNidC4wANm2uTAhRKWk9u3GQhyaMtJ44TCv7J\r\n"
424 "yG4j5Vn5dXHPELYhKrTUoG2vK7qYigDi2xh3VEQcc9yQGa/BMT2j2xoye62OXd4u\r\n"
425 "3SRKK7suAyBNFuYcOCe7bKaiWoQJJI3+EQjwWVUVcXLdW+spS4DvBA0ZATsZmrs+\r\n"
426 "4pw1q5U68pm5Fy0n14lCQohK1SdiaccAHK129bK5B5KHYuJZ9/jfJZn2zIv8qHV2\r\n"
427 "8NNccqBQS36rVGWfRkfSlHscfDhQ4ZxEhInayfu5BY0qxqLLFOtqeQGvmTTjGW/n\r\n"
428 "L2s47mL0/uWnpFlMJ7BxHoECAwEAAaNTMFEwHQYDVR0OBBYEFKsCCrUUhKQDw4Rl\r\n"
429 "ndlKCRybnupnMB8GA1UdIwQYMBaAFKsCCrUUhKQDw4RlndlKCRybnupnMA8GA1Ud\r\n"
430 "EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBACS1dPSJzMpoZaMohs7Kk0zE\r\n"
431 "e7Mv+iZElwDi3vfG11CynbOleIFEFGeixRTQyVW5SMmZGMdwaF3uD3Uoas7Q9G8d\r\n"
432 "NKZsJa0FeFg5aArBBr7ggbVTR5iEDs32cPr9ic/VDNBGqIcQmp10qvZ0cydK10Fl\r\n"
433 "g/0YJB1pw7zZwz+J5YgTKwkTAbtFLva6yqPno8HG+FruMXF3WxGAsLfIOjL9h7rU\r\n"
434 "jG5iRiA0WjdrKW4YTNNzjoez3SFx7/P7NWg1gp51HwBSL7mg+ctVjsG9G4xwhrLI\r\n"
435 "dcJFeuBWEaWbA6lAiW+lAcQKqqfolHOF7VMIB+ieIUR0cavlHEIGLYg/BL5VSKU=\r\n"
436 "-----END CERTIFICATE-----\r\n";
437
438 static const char g_testUtf8CaCertNull[] =
439 "-----BEGIN CERTIFICATE-----\r\n"
440 "MIIBzjCCATegAwIBAgIGAXKnJjrAMA0GCSqGSIb3DQEBCwUAMAAwHhcNMjQwNTE1\r\n"
441 "MDkzMTQ1WhcNMzQwNTEzMDkzMTQ1WjAAMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB\r\n"
442 "iQKBgQCyXbtKPbpKIvQSqFIKThMBHdPkquDJ/Lg8+PDbwP3s+AJ1b6fFhsB9s0oV\r\n"
443 "knmmYT1CYvN52RVYTJJDPFbEFsbBePQLG/OAaMKDg6SXieVgzbvx5MStJaBDvhqT\r\n"
444 "GwdzmxKfadghxdOfT65E4KENUipc2WI0/H2BqvwkXahIugBhJQIDAQABo1MwUTAd\r\n"
445 "BgNVHQ4EFgQUuMkml7Jx2h2A1dEuGt+SLUt2UV8wHwYDVR0jBBgwFoAUuMkml7Jx\r\n"
446 "2h2A1dEuGt+SLUt2UV8wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOB\r\n"
447 "gQAFSN+j8N5bORIt79WaM8rSgtKJspxagkyrQxbX6zerhYy1Jdakp/gk0mzjBllD\r\n"
448 "LS1tc0elUH9uBeGMNe0EHaFmIW+9ZyBHNSgC5kFO+c9foM5IlgX2rffgoyYhymzg\r\n"
449 "QjEAdY2Ni2kz9CUvUj8sy/vGtdOXkBFBpGrNUEKz4STKjA==\r\n"
450 "-----END CERTIFICATE-----\r\n";
451
452 const CfEncodingBlob g_inStream = {
453 .data = reinterpret_cast<uint8_t *>(g_certWithCrlDp1),
454 .len = strlen(g_certWithCrlDp1) + 1,
455 .encodingFormat = CF_FORMAT_PEM
456 };
457
SetUpTestCase()458 void CryptoX509CertificateTestPart2::SetUpTestCase()
459 {
460 CfResult ret = OpensslX509CertSpiCreate(&g_inStream, &g_x509CertSpiObj);
461 EXPECT_EQ(ret, CF_SUCCESS);
462 ASSERT_NE(g_x509CertSpiObj, nullptr);
463 }
464
TearDownTestCase()465 void CryptoX509CertificateTestPart2::TearDownTestCase()
466 {
467 CfObjDestroy(g_x509CertSpiObj);
468 }
469
SetUp()470 void CryptoX509CertificateTestPart2::SetUp()
471 {
472 }
473
TearDown()474 void CryptoX509CertificateTestPart2::TearDown()
475 {
476 }
477
478 /**
479 * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest001
480 * @tc.desc: Generate certificate with 1 CRL DP URI, get URI return success.
481 * @tc.type: FUNC
482 * @tc.require: I86VWA
483 */
484 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest001, TestSize.Level0)
485 {
486 HcfX509Certificate *x509Cert = nullptr;
487 CfResult ret = HcfX509CertificateCreate(&g_inStream, &x509Cert);
488 EXPECT_EQ(ret, CF_SUCCESS);
489 ASSERT_NE(x509Cert, nullptr);
490
491 CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
492 ret = x509Cert->getCRLDistributionPointsURI(x509Cert, &outURI);
493 EXPECT_EQ(ret, CF_SUCCESS);
494 EXPECT_EQ(outURI.count, 1); /* CRL DP URI count is 1 */
495
496 CfObjDestroy(x509Cert);
497 CfArrayDataClearAndFree(&outURI);
498 }
499
500 /**
501 * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest002
502 * @tc.desc: Generate certificate with 2 CRL DP URI, get URI return success.
503 * @tc.type: FUNC
504 * @tc.require: I86VWA
505 */
506 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest002, TestSize.Level0)
507 {
508 HcfX509Certificate *x509Cert = nullptr;
509 CfEncodingBlob inStream = {
510 .data = reinterpret_cast<uint8_t *>(g_certWithCrlDp2),
511 .len = strlen(g_certWithCrlDp2) + 1,
512 .encodingFormat = CF_FORMAT_PEM
513 };
514 CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert);
515 EXPECT_EQ(ret, CF_SUCCESS);
516 ASSERT_NE(x509Cert, nullptr);
517
518 CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
519 ret = x509Cert->getCRLDistributionPointsURI(x509Cert, &outURI);
520 EXPECT_EQ(ret, CF_SUCCESS);
521 EXPECT_EQ(outURI.count, 2); /* CRL DP URI count is 2 */
522
523 CfObjDestroy(x509Cert);
524 CfArrayDataClearAndFree(&outURI);
525 }
526
527 /**
528 * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest003
529 * @tc.desc: Generate certificate with 8 CRL DP URI, get URI return success.
530 * @tc.type: FUNC
531 * @tc.require: I86VWA
532 */
533 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest003, TestSize.Level0)
534 {
535 HcfX509Certificate *x509Cert = nullptr;
536 CfEncodingBlob inStream = {
537 .data = reinterpret_cast<uint8_t *>(g_certWithCrlDp8),
538 .len = strlen(g_certWithCrlDp8) + 1,
539 .encodingFormat = CF_FORMAT_PEM
540 };
541 CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert);
542 EXPECT_EQ(ret, CF_SUCCESS);
543 ASSERT_NE(x509Cert, nullptr);
544
545 CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
546 ret = x509Cert->getCRLDistributionPointsURI(x509Cert, &outURI);
547 EXPECT_EQ(ret, CF_SUCCESS);
548 EXPECT_EQ(outURI.count, 8); /* CRL DP URI count is 8 */
549
550 CfObjDestroy(x509Cert);
551 CfArrayDataClearAndFree(&outURI);
552 }
553
554 /**
555 * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest004
556 * @tc.desc: Generate certificate without CRL DP URI, get URI return CF_NOT_EXIST.
557 * @tc.type: FUNC
558 * @tc.require: I86VWA
559 */
560 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest004, TestSize.Level0)
561 {
562 HcfX509Certificate *x509Cert = nullptr;
563 CfEncodingBlob inStream = {
564 .data = reinterpret_cast<uint8_t *>(g_certWithoutCrlDp),
565 .len = strlen(g_certWithoutCrlDp) + 1,
566 .encodingFormat = CF_FORMAT_PEM
567 };
568 CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert);
569 EXPECT_EQ(ret, CF_SUCCESS);
570 ASSERT_NE(x509Cert, nullptr);
571
572 CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
573 ret = x509Cert->getCRLDistributionPointsURI(x509Cert, &outURI);
574 EXPECT_EQ(ret, CF_NOT_EXIST);
575
576 CfObjDestroy(x509Cert);
577 CfArrayDataClearAndFree(&outURI);
578 }
579
580 /**
581 * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest005
582 * @tc.desc: Generate certificate without CRL DP URI, outURI param is nullptr, get URI return CF_INVALID_PARAMS.
583 * @tc.type: FUNC
584 * @tc.require: I86VWA
585 */
586 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest005, TestSize.Level0)
587 {
588 HcfX509Certificate *x509Cert005 = nullptr;
589 CfResult ret = HcfX509CertificateCreate(&g_inStream, &x509Cert005);
590 EXPECT_EQ(ret, CF_SUCCESS);
591 ASSERT_NE(x509Cert005, nullptr);
592
593 ret = x509Cert005->getCRLDistributionPointsURI(x509Cert005, nullptr);
594 EXPECT_EQ(ret, CF_INVALID_PARAMS);
595
596 CfObjDestroy(x509Cert005);
597 }
598
599 /**
600 * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest006
601 * @tc.desc: self is nullptr, outURI is not nullptr, get URI return CF_INVALID_PARAMS.
602 * @tc.type: FUNC
603 * @tc.require: I86VWA
604 */
605 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest006, TestSize.Level0)
606 {
607 HcfX509Certificate *x509Cert006 = nullptr;
608 CfResult ret = HcfX509CertificateCreate(&g_inStream, &x509Cert006);
609 EXPECT_EQ(ret, CF_SUCCESS);
610 ASSERT_NE(x509Cert006, nullptr);
611
612 CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
613 ret = x509Cert006->getCRLDistributionPointsURI(nullptr, &outURI);
614 EXPECT_EQ(ret, CF_INVALID_PARAMS);
615
616 CfObjDestroy(x509Cert006);
617 }
618
InvalidX509CertClass(void)619 static const char *InvalidX509CertClass(void)
620 {
621 return "INVALID_CERT_CLASS";
622 }
623
ValidX509CertClass(void)624 static const char *ValidX509CertClass(void)
625 {
626 return "HcfX509Certificate";
627 }
628
629 /**
630 * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest007
631 * @tc.desc: invalid HcfX509Certificate class, get URI return CF_INVALID_PARAMS.
632 * @tc.type: FUNC
633 * @tc.require: I86VWA
634 */
635 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest007, TestSize.Level0)
636 {
637 HcfX509Certificate *x509Cert007 = nullptr;
638 CfResult ret = HcfX509CertificateCreate(&g_inStream, &x509Cert007);
639 EXPECT_EQ(ret, CF_SUCCESS);
640 ASSERT_NE(x509Cert007, nullptr);
641 x509Cert007->base.base.getClass = InvalidX509CertClass;
642
643 CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
644 ret = x509Cert007->getCRLDistributionPointsURI(x509Cert007, &outURI);
645 EXPECT_EQ(ret, CF_INVALID_PARAMS);
646
647 x509Cert007->base.base.getClass = ValidX509CertClass;
648 CfObjDestroy(x509Cert007);
649 }
650
651 /**
652 * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest008
653 * @tc.desc: cert with CRL DP fullNames, but not has URI, get URI return CF_NOT_EXIST.
654 * @tc.type: FUNC
655 * @tc.require: I86VWA
656 */
657 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest008, TestSize.Level0)
658 {
659 HcfX509Certificate *x509Cert = nullptr;
660 CfEncodingBlob inStream = {
661 .data = reinterpret_cast<uint8_t *>(g_certWithCrlDpNoURI),
662 .len = strlen(g_certWithCrlDpNoURI) + 1,
663 .encodingFormat = CF_FORMAT_PEM
664 };
665 CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert);
666 EXPECT_EQ(ret, CF_SUCCESS);
667 ASSERT_NE(x509Cert, nullptr);
668
669 CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
670 ret = x509Cert->getCRLDistributionPointsURI(x509Cert, &outURI);
671 EXPECT_EQ(ret, CF_NOT_EXIST);
672
673 CfObjDestroy(x509Cert);
674 CfArrayDataClearAndFree(&outURI);
675 }
676
677 /**
678 * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest009
679 * @tc.desc: cert with CRL DP nameRelativeToCRLIssuer, get URI return CF_NOT_EXIST.
680 * @tc.type: FUNC
681 * @tc.require: I86VWA
682 */
683 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest009, TestSize.Level0)
684 {
685 HcfX509Certificate *x509Cert009 = nullptr;
686 CfEncodingBlob inStream = {
687 .data = reinterpret_cast<uint8_t *>(g_certWithCrlDpIssuer),
688 .len = strlen(g_certWithCrlDpIssuer) + 1,
689 .encodingFormat = CF_FORMAT_PEM
690 };
691 CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert009);
692 EXPECT_EQ(ret, CF_SUCCESS);
693 ASSERT_NE(x509Cert009, nullptr);
694
695 CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
696 ret = x509Cert009->getCRLDistributionPointsURI(x509Cert009, &outURI);
697 EXPECT_EQ(ret, CF_NOT_EXIST);
698
699 CfObjDestroy(x509Cert009);
700 CfArrayDataClearAndFree(&outURI);
701 }
702
703 /**
704 * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest010
705 * @tc.desc: cert with CRL DP URI length too long return CF_ERR_CRYPTO_OPERATION.
706 * @tc.type: FUNC
707 * @tc.require: I86VWA
708 */
709 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest010, TestSize.Level0)
710 {
711 HcfX509Certificate *x509Cert010 = nullptr;
712 CfEncodingBlob inStream = {
713 .data = reinterpret_cast<uint8_t *>(g_certWithCrlDpURILenTooLong),
714 .len = strlen(g_certWithCrlDpURILenTooLong) + 1,
715 .encodingFormat = CF_FORMAT_PEM
716 };
717 CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert010);
718 EXPECT_EQ(ret, CF_SUCCESS);
719 ASSERT_NE(x509Cert010, nullptr);
720
721 CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
722 ret = x509Cert010->getCRLDistributionPointsURI(x509Cert010, &outURI);
723 EXPECT_EQ(ret, CF_ERR_CRYPTO_OPERATION);
724
725 CfObjDestroy(x509Cert010);
726 CfArrayDataClearAndFree(&outURI);
727 }
728
729 /**
730 * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest011
731 * @tc.desc: cert with CRL DP URI 100 count, return success.
732 * @tc.type: FUNC
733 * @tc.require: I86VWA
734 */
735 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest011, TestSize.Level0)
736 {
737 HcfX509Certificate *x509Cert011 = nullptr;
738 CfEncodingBlob inStream = {
739 .data = reinterpret_cast<uint8_t *>(g_certWithCrlDp100),
740 .len = strlen(g_certWithCrlDp100) + 1,
741 .encodingFormat = CF_FORMAT_PEM
742 };
743 CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert011);
744 EXPECT_EQ(ret, CF_SUCCESS);
745 ASSERT_NE(x509Cert011, nullptr);
746
747 CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
748 ret = x509Cert011->getCRLDistributionPointsURI(x509Cert011, &outURI);
749 EXPECT_EQ(ret, CF_SUCCESS);
750 EXPECT_EQ(outURI.count, 100); /* CRL DP URI count is 100 */
751
752 CfObjDestroy(x509Cert011);
753 CfArrayDataClearAndFree(&outURI);
754 }
755
756 /**
757 * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest012
758 * @tc.desc: cert with CRL DP URI exceed max 100 count, return CF_ERR_CRYPTO_OPERATION
759 * @tc.type: FUNC
760 * @tc.require: I86VWA
761 */
762 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest012, TestSize.Level0)
763 {
764 HcfX509Certificate *x509Cert012= nullptr;
765 CfEncodingBlob inStream = {
766 .data = reinterpret_cast<uint8_t *>(g_certWithCrlDp101),
767 .len = strlen(g_certWithCrlDp101) + 1,
768 .encodingFormat = CF_FORMAT_PEM
769 };
770 CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert012);
771 EXPECT_EQ(ret, CF_SUCCESS);
772 ASSERT_NE(x509Cert012, nullptr);
773
774 CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
775 ret = x509Cert012->getCRLDistributionPointsURI(x509Cert012, &outURI);
776 EXPECT_EQ(ret, CF_ERR_CRYPTO_OPERATION);
777
778 CfObjDestroy(x509Cert012);
779 CfArrayDataClearAndFree(&outURI);
780 }
781
782 /**
783 * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURIEngineTest001
784 * @tc.desc: generate engine cert obj with CRL DP URI, get URI return CF_INVALID_PARAMS.
785 * @tc.type: FUNC
786 * @tc.require: I86VWA
787 */
788 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURIEngineTest001, TestSize.Level0)
789 {
790 HcfX509CertificateSpi *x509CertObj = nullptr;
791 CfResult ret = OpensslX509CertSpiCreate(&g_inStream, &x509CertObj);
792 EXPECT_EQ(ret, CF_SUCCESS);
793 ASSERT_NE(x509CertObj, nullptr);
794
795 CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
796 ret = x509CertObj->engineGetCRLDistributionPointsURI(x509CertObj, &outURI);
797 EXPECT_EQ(ret, CF_SUCCESS);
798
799 CfArrayDataClearAndFree(&outURI);
800 CfObjDestroy(x509CertObj);
801 }
802
803 /**
804 * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURIEngineTest002
805 * @tc.desc: generate engine cert obj with CRL DP URI, outURI is null, get URI return CF_INVALID_PARAMS.
806 * @tc.type: FUNC
807 * @tc.require: I86VWA
808 */
809 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURIEngineTest002, TestSize.Level0)
810 {
811 HcfX509CertificateSpi *x509CertObj = nullptr;
812 CfResult ret = OpensslX509CertSpiCreate(&g_inStream, &x509CertObj);
813 EXPECT_EQ(ret, CF_SUCCESS);
814 ASSERT_NE(x509CertObj, nullptr);
815
816 ret = x509CertObj->engineGetCRLDistributionPointsURI(x509CertObj, nullptr);
817 EXPECT_EQ(ret, CF_INVALID_PARAMS);
818
819 CfObjDestroy(x509CertObj);
820 }
821
822 /**
823 * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURIEngineTest003
824 * @tc.desc: generate engine cert obj with CRL DP URI, outURI is null, get URI return CF_INVALID_PARAMS.
825 * @tc.type: FUNC
826 * @tc.require: I86VWA
827 */
828 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURIEngineTest003, TestSize.Level0)
829 {
830 HcfX509CertificateSpi *x509CertObj = nullptr;
831 CfResult ret = OpensslX509CertSpiCreate(&g_inStream, &x509CertObj);
832 EXPECT_EQ(ret, CF_SUCCESS);
833 ASSERT_NE(x509CertObj, nullptr);
834
835 CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
836 ret = x509CertObj->engineGetCRLDistributionPointsURI(nullptr, &outURI);
837 EXPECT_EQ(ret, CF_INVALID_PARAMS);
838
839 CfObjDestroy(x509CertObj);
840 }
841
InvalidX509EngineCertClass(void)842 static const char *InvalidX509EngineCertClass(void)
843 {
844 return "INVALID_CERT_ENGINE_CLASS";
845 }
846
ValidX509EngineCertClass(void)847 static const char *ValidX509EngineCertClass(void)
848 {
849 return "X509CertOpensslClass";
850 }
851
852 /**
853 * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURIEngineTest004
854 * @tc.desc: engine obj class invalid, get URI return CF_INVALID_PARAMS.
855 * @tc.type: FUNC
856 * @tc.require: I86VWA
857 */
858 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURIEngineTest004, TestSize.Level0)
859 {
860 HcfX509CertificateSpi *x509CertObj = nullptr;
861 CfResult ret = OpensslX509CertSpiCreate(&g_inStream, &x509CertObj);
862 EXPECT_EQ(ret, CF_SUCCESS);
863 ASSERT_NE(x509CertObj, nullptr);
864
865 x509CertObj->base.getClass = InvalidX509EngineCertClass;
866
867 CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
868 ret = x509CertObj->engineGetCRLDistributionPointsURI(x509CertObj, &outURI);
869 EXPECT_EQ(ret, CF_INVALID_PARAMS);
870
871 x509CertObj->base.getClass = ValidX509EngineCertClass;
872 CfObjDestroy(x509CertObj);
873 }
874
875 /**
876 * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURIEngineTest005
877 * @tc.desc: generate engine cert obj with CRL DP URI, malloc failed.
878 * @tc.type: FUNC
879 * @tc.require: I86VWA
880 */
881 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURIEngineTest005, TestSize.Level0)
882 {
883 HcfX509CertificateSpi *x509CertObj = nullptr;
884 CfResult ret = OpensslX509CertSpiCreate(&g_inStream, &x509CertObj);
885 EXPECT_EQ(ret, CF_SUCCESS);
886 ASSERT_NE(x509CertObj, nullptr);
887
888 SetMockFlag(true);
889 CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
890 ret = x509CertObj->engineGetCRLDistributionPointsURI(x509CertObj, &outURI);
891 EXPECT_NE(ret, CF_SUCCESS);
892 SetMockFlag(false);
893
894 CfArrayDataClearAndFree(&outURI);
895 CfObjDestroy(x509CertObj);
896 }
897
898 HWTEST_F(CryptoX509CertificateTestPart2, HcfX509CertificateSpiEngineToStringTest001, TestSize.Level0)
899 {
900 CF_LOG_I("HcfX509CertificateSpiEngineToStringTest001");
901 ASSERT_NE(g_x509CertSpiObj, nullptr);
902
903 CfBlob blob = { 0, nullptr };
904 CfResult ret = g_x509CertSpiObj->engineToString(g_x509CertSpiObj, &blob);
905 EXPECT_EQ(ret, CF_SUCCESS);
906 CfBlobDataFree(&blob);
907
908 HcfX509CertificateSpi invalidCertSpi;
909 invalidCertSpi.base.getClass = InvalidX509CertClass;
910
911 ret = g_x509CertSpiObj->engineToString(&invalidCertSpi, &blob);
912 EXPECT_EQ(ret, CF_INVALID_PARAMS);
913
914 ret = g_x509CertSpiObj->engineToString(NULL, &blob);
915 EXPECT_EQ(ret, CF_INVALID_PARAMS);
916
917 ret = g_x509CertSpiObj->engineToString(g_x509CertSpiObj, NULL);
918 EXPECT_EQ(ret, CF_INVALID_PARAMS);
919
920 ret = g_x509CertSpiObj->engineToString(NULL, NULL);
921 EXPECT_EQ(ret, CF_INVALID_PARAMS);
922 }
923
924 HWTEST_F(CryptoX509CertificateTestPart2, HcfX509CertificateSpiEngineHashCodeTest001, TestSize.Level0)
925 {
926 CF_LOG_I("HcfX509CertificateSpiEngineHashCodeTest001");
927 ASSERT_NE(g_x509CertSpiObj, nullptr);
928
929 CfBlob blob = { 0, nullptr };
930 CfResult ret = g_x509CertSpiObj->engineHashCode(g_x509CertSpiObj, &blob);
931 EXPECT_EQ(ret, CF_SUCCESS);
932 CfBlobDataFree(&blob);
933
934 HcfX509CertificateSpi invalidCertSpi;
935 invalidCertSpi.base.getClass = InvalidX509CertClass;
936
937 ret = g_x509CertSpiObj->engineHashCode(&invalidCertSpi, &blob);
938 EXPECT_EQ(ret, CF_INVALID_PARAMS);
939
940 ret = g_x509CertSpiObj->engineHashCode(NULL, &blob);
941 EXPECT_EQ(ret, CF_INVALID_PARAMS);
942
943 ret = g_x509CertSpiObj->engineHashCode(g_x509CertSpiObj, NULL);
944 EXPECT_EQ(ret, CF_INVALID_PARAMS);
945
946 ret = g_x509CertSpiObj->engineHashCode(NULL, NULL);
947 EXPECT_EQ(ret, CF_INVALID_PARAMS);
948 }
949
950 HWTEST_F(CryptoX509CertificateTestPart2, HcfX509CertificateSpiEngineGetExtensionsObjectTest001, TestSize.Level0)
951 {
952 CF_LOG_I("HcfX509CertificateSpiEngineGetExtensionsObjectTest001");
953 ASSERT_NE(g_x509CertSpiObj, nullptr);
954
955 CfBlob blob = { 0, nullptr };
956 CfResult ret = g_x509CertSpiObj->engineGetExtensionsObject(g_x509CertSpiObj, &blob);
957 EXPECT_EQ(ret, CF_SUCCESS);
958 CfBlobDataFree(&blob);
959
960 HcfX509CertificateSpi invalidCertSpi;
961 invalidCertSpi.base.getClass = InvalidX509CertClass;
962
963 ret = g_x509CertSpiObj->engineGetExtensionsObject(&invalidCertSpi, &blob);
964 EXPECT_EQ(ret, CF_INVALID_PARAMS);
965
966 ret = g_x509CertSpiObj->engineGetExtensionsObject(NULL, &blob);
967 EXPECT_EQ(ret, CF_INVALID_PARAMS);
968
969 ret = g_x509CertSpiObj->engineGetExtensionsObject(g_x509CertSpiObj, NULL);
970 EXPECT_EQ(ret, CF_INVALID_PARAMS);
971
972 ret = g_x509CertSpiObj->engineGetExtensionsObject(NULL, NULL);
973 EXPECT_EQ(ret, CF_INVALID_PARAMS);
974 }
975
976 // Certificate issuerName contains Chinese and special characters.
977 HWTEST_F(CryptoX509CertificateTestPart2, getX509CertUtf8Test001, TestSize.Level0)
978 {
979 HcfX509Certificate *x509Cert = nullptr;
980 CfEncodingBlob inStream = { 0 };
981 inStream.data = reinterpret_cast<uint8_t *>(const_cast<char *>(g_testUtf8CaCert));
982 inStream.encodingFormat = CF_FORMAT_PEM;
983 inStream.len = strlen(g_testUtf8CaCert) + 1;
984 CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert);
985 EXPECT_EQ(ret, CF_SUCCESS);
986 EXPECT_NE(x509Cert, nullptr);
987
988 CfBlob out = { 0 };
989 ret = x509Cert->getIssuerNameEx(x509Cert, CF_ENCODING_UTF8, &out);
990 EXPECT_EQ(ret, CF_SUCCESS);
991 EXPECT_NE(out.data, nullptr);
992 CfBlobDataClearAndFree(&out);
993
994 ret = x509Cert->toStringEx(x509Cert, CF_ENCODING_UTF8, &out);
995 EXPECT_EQ(ret, CF_SUCCESS);
996 EXPECT_NE(out.data, nullptr);
997 CfBlobDataClearAndFree(&out);
998
999 CfBlob outData = { 0 };
1000 ret = x509Cert->getIssuerNameDer(x509Cert, &outData);
1001 EXPECT_EQ(ret, CF_SUCCESS);
1002 EXPECT_NE(outData.data, nullptr);
1003
1004 HcfX509DistinguishedName *x509Name = nullptr;
1005 ret = HcfX509DistinguishedNameCreate(&outData, false, &x509Name);
1006 EXPECT_EQ(ret, CF_SUCCESS);
1007 EXPECT_NE(x509Name, nullptr);
1008
1009 ret = x509Name->getNameEx(x509Name, CF_ENCODING_UTF8, &out);
1010 EXPECT_EQ(ret, CF_SUCCESS);
1011 EXPECT_NE(out.data, nullptr);
1012
1013 CfBlobDataClearAndFree(&outData);
1014 CfBlobDataClearAndFree(&out);
1015 CfObjDestroy(x509Name);
1016 CfObjDestroy(x509Cert);
1017 }
1018
1019 // Certificate issuerName is null.
1020 HWTEST_F(CryptoX509CertificateTestPart2, getX509CertUtf8Test002, TestSize.Level0)
1021 {
1022 HcfX509Certificate *x509Cert = nullptr;
1023 CfEncodingBlob inStream = { 0 };
1024 inStream.data = reinterpret_cast<uint8_t *>(const_cast<char *>(g_testUtf8CaCertNull));
1025 inStream.encodingFormat = CF_FORMAT_PEM;
1026 inStream.len = strlen(g_testUtf8CaCertNull) + 1;
1027 CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert);
1028 EXPECT_EQ(ret, CF_SUCCESS);
1029 EXPECT_NE(x509Cert, nullptr);
1030
1031 CfBlob out = { 0 };
1032 ret = x509Cert->getIssuerNameEx(x509Cert, CF_ENCODING_UTF8, &out);
1033 EXPECT_EQ(ret, CF_ERR_CRYPTO_OPERATION);
1034 EXPECT_EQ(out.data, nullptr);
1035
1036 ret = x509Cert->toStringEx(x509Cert, CF_ENCODING_UTF8, &out);
1037 EXPECT_EQ(ret, CF_SUCCESS);
1038 EXPECT_NE(out.data, nullptr);
1039 CfBlobDataClearAndFree(&out);
1040
1041 CfBlob outData = { 0 };
1042 ret = x509Cert->getIssuerNameDer(x509Cert, &outData);
1043 EXPECT_EQ(ret, CF_SUCCESS);
1044 EXPECT_NE(outData.data, nullptr);
1045
1046 HcfX509DistinguishedName *x509Name = nullptr;
1047 ret = HcfX509DistinguishedNameCreate(&outData, false, &x509Name);
1048 EXPECT_EQ(ret, CF_SUCCESS);
1049 EXPECT_NE(x509Name, nullptr);
1050
1051 ret = x509Name->getNameEx(x509Name, CF_ENCODING_UTF8, &out);
1052 EXPECT_EQ(ret, CF_ERR_CRYPTO_OPERATION);
1053
1054 CfBlobDataClearAndFree(&outData);
1055 CfBlobDataClearAndFree(&out);
1056 CfObjDestroy(x509Cert);
1057 CfObjDestroy(x509Name);
1058 }
1059
1060 // invalid input.
1061 HWTEST_F(CryptoX509CertificateTestPart2, getX509CertUtf8Test003, TestSize.Level0)
1062 {
1063 HcfX509Certificate *x509Cert = nullptr;
1064 CfEncodingBlob inStream = { 0 };
1065 inStream.data = reinterpret_cast<uint8_t *>(const_cast<char *>(g_testUtf8CaCert));
1066 inStream.encodingFormat = CF_FORMAT_PEM;
1067 inStream.len = strlen(g_testUtf8CaCert) + 1;
1068 CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert);
1069 EXPECT_EQ(ret, CF_SUCCESS);
1070 EXPECT_NE(x509Cert, nullptr);
1071
1072 CfBlob out = { 0 };
1073 ret = x509Cert->getIssuerNameEx(nullptr, CF_ENCODING_UTF8, &out);
1074 EXPECT_EQ(ret, CF_ERR_INTERNAL);
1075 EXPECT_EQ(out.data, nullptr);
1076
1077 CfEncodinigType encodingType = static_cast<CfEncodinigType>(1);
1078 ret = x509Cert->getIssuerNameEx(nullptr, encodingType, &out);
1079 EXPECT_EQ(ret, CF_ERR_INTERNAL);
1080 EXPECT_EQ(out.data, nullptr);
1081
1082 ret = x509Cert->getIssuerNameEx(x509Cert, CF_ENCODING_UTF8, nullptr);
1083 EXPECT_EQ(ret, CF_ERR_INTERNAL);
1084
1085 ret = x509Cert->toStringEx(nullptr, CF_ENCODING_UTF8, &out);
1086 EXPECT_EQ(ret, CF_ERR_INTERNAL);
1087 EXPECT_EQ(out.data, nullptr);
1088
1089 ret = x509Cert->toStringEx(nullptr, encodingType, &out);
1090 EXPECT_EQ(ret, CF_ERR_INTERNAL);
1091 EXPECT_EQ(out.data, nullptr);
1092
1093 ret = x509Cert->toStringEx(x509Cert, CF_ENCODING_UTF8, nullptr);
1094 EXPECT_EQ(ret, CF_ERR_INTERNAL);
1095
1096 CfBlob outData = { 0 };
1097 ret = x509Cert->getIssuerNameDer(x509Cert, &outData);
1098 EXPECT_EQ(ret, CF_SUCCESS);
1099 EXPECT_NE(outData.data, nullptr);
1100
1101 HcfX509DistinguishedName *x509Name = nullptr;
1102 ret = HcfX509DistinguishedNameCreate(&outData, false, &x509Name);
1103 EXPECT_EQ(ret, CF_SUCCESS);
1104 EXPECT_NE(x509Name, nullptr);
1105
1106 ret = x509Name->getNameEx(nullptr, CF_ENCODING_UTF8, &out);
1107 EXPECT_EQ(ret, CF_ERR_INTERNAL);
1108 EXPECT_EQ(out.data, nullptr);
1109
1110 ret = x509Name->getNameEx(x509Name, encodingType, &out);
1111 EXPECT_EQ(ret, CF_ERR_PARAMETER_CHECK);
1112 EXPECT_EQ(out.data, nullptr);
1113
1114 ret = x509Name->getNameEx(x509Name, encodingType, nullptr);
1115 EXPECT_EQ(ret, CF_ERR_INTERNAL);
1116
1117 CfBlobDataClearAndFree(&outData);
1118 CfBlobDataClearAndFree(&out);
1119 CfObjDestroy(x509Cert);
1120 CfObjDestroy(x509Name);
1121 }
1122 }