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 const CfEncodingBlob g_inStream = {
416     .data = reinterpret_cast<uint8_t *>(g_certWithCrlDp1),
417     .len = strlen(g_certWithCrlDp1) + 1,
418     .encodingFormat = CF_FORMAT_PEM
419 };
420 
SetUpTestCase()421 void CryptoX509CertificateTestPart2::SetUpTestCase()
422 {
423     CfResult ret = OpensslX509CertSpiCreate(&g_inStream, &g_x509CertSpiObj);
424     EXPECT_EQ(ret, CF_SUCCESS);
425     ASSERT_NE(g_x509CertSpiObj, nullptr);
426 }
427 
TearDownTestCase()428 void CryptoX509CertificateTestPart2::TearDownTestCase()
429 {
430     CfObjDestroy(g_x509CertSpiObj);
431 }
432 
SetUp()433 void CryptoX509CertificateTestPart2::SetUp()
434 {
435 }
436 
TearDown()437 void CryptoX509CertificateTestPart2::TearDown()
438 {
439 }
440 
441 /**
442  * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest001
443  * @tc.desc: Generate certificate with 1 CRL DP URI, get URI return success.
444  * @tc.type: FUNC
445  * @tc.require: I86VWA
446  */
447 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest001, TestSize.Level0)
448 {
449     HcfX509Certificate *x509Cert = nullptr;
450     CfResult ret = HcfX509CertificateCreate(&g_inStream, &x509Cert);
451     EXPECT_EQ(ret, CF_SUCCESS);
452     ASSERT_NE(x509Cert, nullptr);
453 
454     CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
455     ret = x509Cert->getCRLDistributionPointsURI(x509Cert, &outURI);
456     EXPECT_EQ(ret, CF_SUCCESS);
457     EXPECT_EQ(outURI.count, 1); /* CRL DP URI count is 1 */
458 
459     CfObjDestroy(x509Cert);
460     CfArrayDataClearAndFree(&outURI);
461 }
462 
463 /**
464  * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest002
465  * @tc.desc: Generate certificate with 2 CRL DP URI, get URI return success.
466  * @tc.type: FUNC
467  * @tc.require: I86VWA
468  */
469 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest002, TestSize.Level0)
470 {
471     HcfX509Certificate *x509Cert = nullptr;
472     CfEncodingBlob inStream = {
473         .data = reinterpret_cast<uint8_t *>(g_certWithCrlDp2),
474         .len = strlen(g_certWithCrlDp2) + 1,
475         .encodingFormat = CF_FORMAT_PEM
476     };
477     CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert);
478     EXPECT_EQ(ret, CF_SUCCESS);
479     ASSERT_NE(x509Cert, nullptr);
480 
481     CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
482     ret = x509Cert->getCRLDistributionPointsURI(x509Cert, &outURI);
483     EXPECT_EQ(ret, CF_SUCCESS);
484     EXPECT_EQ(outURI.count, 2); /* CRL DP URI count is 2 */
485 
486     CfObjDestroy(x509Cert);
487     CfArrayDataClearAndFree(&outURI);
488 }
489 
490 /**
491  * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest003
492  * @tc.desc: Generate certificate with 8 CRL DP URI, get URI return success.
493  * @tc.type: FUNC
494  * @tc.require: I86VWA
495  */
496 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest003, TestSize.Level0)
497 {
498     HcfX509Certificate *x509Cert = nullptr;
499     CfEncodingBlob inStream = {
500         .data = reinterpret_cast<uint8_t *>(g_certWithCrlDp8),
501         .len = strlen(g_certWithCrlDp8) + 1,
502         .encodingFormat = CF_FORMAT_PEM
503     };
504     CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert);
505     EXPECT_EQ(ret, CF_SUCCESS);
506     ASSERT_NE(x509Cert, nullptr);
507 
508     CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
509     ret = x509Cert->getCRLDistributionPointsURI(x509Cert, &outURI);
510     EXPECT_EQ(ret, CF_SUCCESS);
511     EXPECT_EQ(outURI.count, 8); /* CRL DP URI count is 8 */
512 
513     CfObjDestroy(x509Cert);
514     CfArrayDataClearAndFree(&outURI);
515 }
516 
517 /**
518  * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest004
519  * @tc.desc: Generate certificate without CRL DP URI, get URI return CF_NOT_EXIST.
520  * @tc.type: FUNC
521  * @tc.require: I86VWA
522  */
523 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest004, TestSize.Level0)
524 {
525     HcfX509Certificate *x509Cert = nullptr;
526     CfEncodingBlob inStream = {
527         .data = reinterpret_cast<uint8_t *>(g_certWithoutCrlDp),
528         .len = strlen(g_certWithoutCrlDp) + 1,
529         .encodingFormat = CF_FORMAT_PEM
530     };
531     CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert);
532     EXPECT_EQ(ret, CF_SUCCESS);
533     ASSERT_NE(x509Cert, nullptr);
534 
535     CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
536     ret = x509Cert->getCRLDistributionPointsURI(x509Cert, &outURI);
537     EXPECT_EQ(ret, CF_NOT_EXIST);
538 
539     CfObjDestroy(x509Cert);
540     CfArrayDataClearAndFree(&outURI);
541 }
542 
543 /**
544  * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest005
545  * @tc.desc: Generate certificate without CRL DP URI, outURI param is nullptr, get URI return CF_INVALID_PARAMS.
546  * @tc.type: FUNC
547  * @tc.require: I86VWA
548  */
549 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest005, TestSize.Level0)
550 {
551     HcfX509Certificate *x509Cert005 = nullptr;
552     CfResult ret = HcfX509CertificateCreate(&g_inStream, &x509Cert005);
553     EXPECT_EQ(ret, CF_SUCCESS);
554     ASSERT_NE(x509Cert005, nullptr);
555 
556     ret = x509Cert005->getCRLDistributionPointsURI(x509Cert005, nullptr);
557     EXPECT_EQ(ret, CF_INVALID_PARAMS);
558 
559     CfObjDestroy(x509Cert005);
560 }
561 
562 /**
563  * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest006
564  * @tc.desc: self is nullptr, outURI is not nullptr, get URI return CF_INVALID_PARAMS.
565  * @tc.type: FUNC
566  * @tc.require: I86VWA
567  */
568 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest006, TestSize.Level0)
569 {
570     HcfX509Certificate *x509Cert006 = nullptr;
571     CfResult ret = HcfX509CertificateCreate(&g_inStream, &x509Cert006);
572     EXPECT_EQ(ret, CF_SUCCESS);
573     ASSERT_NE(x509Cert006, nullptr);
574 
575     CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
576     ret = x509Cert006->getCRLDistributionPointsURI(nullptr, &outURI);
577     EXPECT_EQ(ret, CF_INVALID_PARAMS);
578 
579     CfObjDestroy(x509Cert006);
580 }
581 
InvalidX509CertClass(void)582 static const char *InvalidX509CertClass(void)
583 {
584     return "INVALID_CERT_CLASS";
585 }
586 
ValidX509CertClass(void)587 static const char *ValidX509CertClass(void)
588 {
589     return "HcfX509Certificate";
590 }
591 
592 /**
593  * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest007
594  * @tc.desc: invalid HcfX509Certificate class, get URI return CF_INVALID_PARAMS.
595  * @tc.type: FUNC
596  * @tc.require: I86VWA
597  */
598 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest007, TestSize.Level0)
599 {
600     HcfX509Certificate *x509Cert007 = nullptr;
601     CfResult ret = HcfX509CertificateCreate(&g_inStream, &x509Cert007);
602     EXPECT_EQ(ret, CF_SUCCESS);
603     ASSERT_NE(x509Cert007, nullptr);
604     x509Cert007->base.base.getClass = InvalidX509CertClass;
605 
606     CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
607     ret = x509Cert007->getCRLDistributionPointsURI(x509Cert007, &outURI);
608     EXPECT_EQ(ret, CF_INVALID_PARAMS);
609 
610     x509Cert007->base.base.getClass = ValidX509CertClass;
611     CfObjDestroy(x509Cert007);
612 }
613 
614 /**
615  * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest008
616  * @tc.desc: cert with CRL DP fullNames, but not has URI, get URI return CF_NOT_EXIST.
617  * @tc.type: FUNC
618  * @tc.require: I86VWA
619  */
620 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest008, TestSize.Level0)
621 {
622     HcfX509Certificate *x509Cert = nullptr;
623     CfEncodingBlob inStream = {
624         .data = reinterpret_cast<uint8_t *>(g_certWithCrlDpNoURI),
625         .len = strlen(g_certWithCrlDpNoURI) + 1,
626         .encodingFormat = CF_FORMAT_PEM
627     };
628     CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert);
629     EXPECT_EQ(ret, CF_SUCCESS);
630     ASSERT_NE(x509Cert, nullptr);
631 
632     CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
633     ret = x509Cert->getCRLDistributionPointsURI(x509Cert, &outURI);
634     EXPECT_EQ(ret, CF_NOT_EXIST);
635 
636     CfObjDestroy(x509Cert);
637     CfArrayDataClearAndFree(&outURI);
638 }
639 
640 /**
641  * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest009
642  * @tc.desc: cert with CRL DP nameRelativeToCRLIssuer, get URI return CF_NOT_EXIST.
643  * @tc.type: FUNC
644  * @tc.require: I86VWA
645  */
646 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest009, TestSize.Level0)
647 {
648     HcfX509Certificate *x509Cert009 = nullptr;
649     CfEncodingBlob inStream = {
650         .data = reinterpret_cast<uint8_t *>(g_certWithCrlDpIssuer),
651         .len = strlen(g_certWithCrlDpIssuer) + 1,
652         .encodingFormat = CF_FORMAT_PEM
653     };
654     CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert009);
655     EXPECT_EQ(ret, CF_SUCCESS);
656     ASSERT_NE(x509Cert009, nullptr);
657 
658     CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
659     ret = x509Cert009->getCRLDistributionPointsURI(x509Cert009, &outURI);
660     EXPECT_EQ(ret, CF_NOT_EXIST);
661 
662     CfObjDestroy(x509Cert009);
663     CfArrayDataClearAndFree(&outURI);
664 }
665 
666 /**
667  * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest010
668  * @tc.desc: cert with CRL DP URI length too long return CF_ERR_CRYPTO_OPERATION.
669  * @tc.type: FUNC
670  * @tc.require: I86VWA
671  */
672 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest010, TestSize.Level0)
673 {
674     HcfX509Certificate *x509Cert010 = nullptr;
675     CfEncodingBlob inStream = {
676         .data = reinterpret_cast<uint8_t *>(g_certWithCrlDpURILenTooLong),
677         .len = strlen(g_certWithCrlDpURILenTooLong) + 1,
678         .encodingFormat = CF_FORMAT_PEM
679     };
680     CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert010);
681     EXPECT_EQ(ret, CF_SUCCESS);
682     ASSERT_NE(x509Cert010, nullptr);
683 
684     CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
685     ret = x509Cert010->getCRLDistributionPointsURI(x509Cert010, &outURI);
686     EXPECT_EQ(ret, CF_ERR_CRYPTO_OPERATION);
687 
688     CfObjDestroy(x509Cert010);
689     CfArrayDataClearAndFree(&outURI);
690 }
691 
692 /**
693  * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest011
694  * @tc.desc: cert with CRL DP URI 100 count, return success.
695  * @tc.type: FUNC
696  * @tc.require: I86VWA
697  */
698 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest011, TestSize.Level0)
699 {
700     HcfX509Certificate *x509Cert011 = nullptr;
701     CfEncodingBlob inStream = {
702         .data = reinterpret_cast<uint8_t *>(g_certWithCrlDp100),
703         .len = strlen(g_certWithCrlDp100) + 1,
704         .encodingFormat = CF_FORMAT_PEM
705     };
706     CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert011);
707     EXPECT_EQ(ret, CF_SUCCESS);
708     ASSERT_NE(x509Cert011, nullptr);
709 
710     CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
711     ret = x509Cert011->getCRLDistributionPointsURI(x509Cert011, &outURI);
712     EXPECT_EQ(ret, CF_SUCCESS);
713     EXPECT_EQ(outURI.count, 100); /* CRL DP URI count is 100 */
714 
715     CfObjDestroy(x509Cert011);
716     CfArrayDataClearAndFree(&outURI);
717 }
718 
719 /**
720  * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURITest012
721  * @tc.desc: cert with CRL DP URI exceed max 100 count, return CF_ERR_CRYPTO_OPERATION
722  * @tc.type: FUNC
723  * @tc.require: I86VWA
724  */
725 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURITest012, TestSize.Level0)
726 {
727     HcfX509Certificate *x509Cert012= nullptr;
728     CfEncodingBlob inStream = {
729         .data = reinterpret_cast<uint8_t *>(g_certWithCrlDp101),
730         .len = strlen(g_certWithCrlDp101) + 1,
731         .encodingFormat = CF_FORMAT_PEM
732     };
733     CfResult ret = HcfX509CertificateCreate(&inStream, &x509Cert012);
734     EXPECT_EQ(ret, CF_SUCCESS);
735     ASSERT_NE(x509Cert012, nullptr);
736 
737     CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
738     ret = x509Cert012->getCRLDistributionPointsURI(x509Cert012, &outURI);
739     EXPECT_EQ(ret, CF_ERR_CRYPTO_OPERATION);
740 
741     CfObjDestroy(x509Cert012);
742     CfArrayDataClearAndFree(&outURI);
743 }
744 
745 /**
746  * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURIEngineTest001
747  * @tc.desc: generate engine cert obj with CRL DP URI, get URI return CF_INVALID_PARAMS.
748  * @tc.type: FUNC
749  * @tc.require: I86VWA
750  */
751 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURIEngineTest001, TestSize.Level0)
752 {
753     HcfX509CertificateSpi *x509CertObj = nullptr;
754     CfResult ret = OpensslX509CertSpiCreate(&g_inStream, &x509CertObj);
755     EXPECT_EQ(ret, CF_SUCCESS);
756     ASSERT_NE(x509CertObj, nullptr);
757 
758     CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
759     ret = x509CertObj->engineGetCRLDistributionPointsURI(x509CertObj, &outURI);
760     EXPECT_EQ(ret, CF_SUCCESS);
761 
762     CfArrayDataClearAndFree(&outURI);
763     CfObjDestroy(x509CertObj);
764 }
765 
766 /**
767  * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURIEngineTest002
768  * @tc.desc: generate engine cert obj with CRL DP URI, outURI is null, get URI return CF_INVALID_PARAMS.
769  * @tc.type: FUNC
770  * @tc.require: I86VWA
771  */
772 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURIEngineTest002, TestSize.Level0)
773 {
774     HcfX509CertificateSpi *x509CertObj = nullptr;
775     CfResult ret = OpensslX509CertSpiCreate(&g_inStream, &x509CertObj);
776     EXPECT_EQ(ret, CF_SUCCESS);
777     ASSERT_NE(x509CertObj, nullptr);
778 
779     ret = x509CertObj->engineGetCRLDistributionPointsURI(x509CertObj, nullptr);
780     EXPECT_EQ(ret, CF_INVALID_PARAMS);
781 
782     CfObjDestroy(x509CertObj);
783 }
784 
785 /**
786  * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURIEngineTest003
787  * @tc.desc: generate engine cert obj with CRL DP URI, outURI is null, get URI return CF_INVALID_PARAMS.
788  * @tc.type: FUNC
789  * @tc.require: I86VWA
790  */
791 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURIEngineTest003, TestSize.Level0)
792 {
793     HcfX509CertificateSpi *x509CertObj = nullptr;
794     CfResult ret = OpensslX509CertSpiCreate(&g_inStream, &x509CertObj);
795     EXPECT_EQ(ret, CF_SUCCESS);
796     ASSERT_NE(x509CertObj, nullptr);
797 
798     CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
799     ret = x509CertObj->engineGetCRLDistributionPointsURI(nullptr, &outURI);
800     EXPECT_EQ(ret, CF_INVALID_PARAMS);
801 
802     CfObjDestroy(x509CertObj);
803 }
804 
InvalidX509EngineCertClass(void)805 static const char *InvalidX509EngineCertClass(void)
806 {
807     return "INVALID_CERT_ENGINE_CLASS";
808 }
809 
ValidX509EngineCertClass(void)810 static const char *ValidX509EngineCertClass(void)
811 {
812     return "X509CertOpensslClass";
813 }
814 
815 /**
816  * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURIEngineTest004
817  * @tc.desc: engine obj class invalid, get URI return CF_INVALID_PARAMS.
818  * @tc.type: FUNC
819  * @tc.require: I86VWA
820  */
821 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURIEngineTest004, TestSize.Level0)
822 {
823     HcfX509CertificateSpi *x509CertObj = nullptr;
824     CfResult ret = OpensslX509CertSpiCreate(&g_inStream, &x509CertObj);
825     EXPECT_EQ(ret, CF_SUCCESS);
826     ASSERT_NE(x509CertObj, nullptr);
827 
828     x509CertObj->base.getClass = InvalidX509EngineCertClass;
829 
830     CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
831     ret = x509CertObj->engineGetCRLDistributionPointsURI(x509CertObj, &outURI);
832     EXPECT_EQ(ret, CF_INVALID_PARAMS);
833 
834     x509CertObj->base.getClass = ValidX509EngineCertClass;
835     CfObjDestroy(x509CertObj);
836 }
837 
838 /**
839  * @tc.name: CryptoX509CertificateTestPart2.CfCRLDpURIEngineTest005
840  * @tc.desc: generate engine cert obj with CRL DP URI, malloc failed.
841  * @tc.type: FUNC
842  * @tc.require: I86VWA
843  */
844 HWTEST_F(CryptoX509CertificateTestPart2, CfCRLDpURIEngineTest005, TestSize.Level0)
845 {
846     HcfX509CertificateSpi *x509CertObj = nullptr;
847     CfResult ret = OpensslX509CertSpiCreate(&g_inStream, &x509CertObj);
848     EXPECT_EQ(ret, CF_SUCCESS);
849     ASSERT_NE(x509CertObj, nullptr);
850 
851     SetMockFlag(true);
852     CfArray outURI = { nullptr, CF_FORMAT_DER, 0 };
853     ret = x509CertObj->engineGetCRLDistributionPointsURI(x509CertObj, &outURI);
854     EXPECT_NE(ret, CF_SUCCESS);
855     SetMockFlag(false);
856 
857     CfArrayDataClearAndFree(&outURI);
858     CfObjDestroy(x509CertObj);
859 }
860 
861 HWTEST_F(CryptoX509CertificateTestPart2, HcfX509CertificateSpiEngineToStringTest001, TestSize.Level0)
862 {
863     CF_LOG_I("HcfX509CertificateSpiEngineToStringTest001");
864     ASSERT_NE(g_x509CertSpiObj, nullptr);
865 
866     CfBlob blob = { 0, nullptr };
867     CfResult ret = g_x509CertSpiObj->engineToString(g_x509CertSpiObj, &blob);
868     EXPECT_EQ(ret, CF_SUCCESS);
869     CfBlobDataFree(&blob);
870 
871     HcfX509CertificateSpi invalidCertSpi;
872     invalidCertSpi.base.getClass = InvalidX509CertClass;
873 
874     ret = g_x509CertSpiObj->engineToString(&invalidCertSpi, &blob);
875     EXPECT_EQ(ret, CF_INVALID_PARAMS);
876 
877     ret = g_x509CertSpiObj->engineToString(NULL, &blob);
878     EXPECT_EQ(ret, CF_INVALID_PARAMS);
879 
880     ret = g_x509CertSpiObj->engineToString(g_x509CertSpiObj, NULL);
881     EXPECT_EQ(ret, CF_INVALID_PARAMS);
882 
883     ret = g_x509CertSpiObj->engineToString(NULL, NULL);
884     EXPECT_EQ(ret, CF_INVALID_PARAMS);
885 }
886 
887 HWTEST_F(CryptoX509CertificateTestPart2, HcfX509CertificateSpiEngineHashCodeTest001, TestSize.Level0)
888 {
889     CF_LOG_I("HcfX509CertificateSpiEngineHashCodeTest001");
890     ASSERT_NE(g_x509CertSpiObj, nullptr);
891 
892     CfBlob blob = { 0, nullptr };
893     CfResult ret = g_x509CertSpiObj->engineHashCode(g_x509CertSpiObj, &blob);
894     EXPECT_EQ(ret, CF_SUCCESS);
895     CfBlobDataFree(&blob);
896 
897     HcfX509CertificateSpi invalidCertSpi;
898     invalidCertSpi.base.getClass = InvalidX509CertClass;
899 
900     ret = g_x509CertSpiObj->engineHashCode(&invalidCertSpi, &blob);
901     EXPECT_EQ(ret, CF_INVALID_PARAMS);
902 
903     ret = g_x509CertSpiObj->engineHashCode(NULL, &blob);
904     EXPECT_EQ(ret, CF_INVALID_PARAMS);
905 
906     ret = g_x509CertSpiObj->engineHashCode(g_x509CertSpiObj, NULL);
907     EXPECT_EQ(ret, CF_INVALID_PARAMS);
908 
909     ret = g_x509CertSpiObj->engineHashCode(NULL, NULL);
910     EXPECT_EQ(ret, CF_INVALID_PARAMS);
911 }
912 
913 HWTEST_F(CryptoX509CertificateTestPart2, HcfX509CertificateSpiEngineGetExtensionsObjectTest001, TestSize.Level0)
914 {
915     CF_LOG_I("HcfX509CertificateSpiEngineGetExtensionsObjectTest001");
916     ASSERT_NE(g_x509CertSpiObj, nullptr);
917 
918     CfBlob blob = { 0, nullptr };
919     CfResult ret = g_x509CertSpiObj->engineGetExtensionsObject(g_x509CertSpiObj, &blob);
920     EXPECT_EQ(ret, CF_SUCCESS);
921     CfBlobDataFree(&blob);
922 
923     HcfX509CertificateSpi invalidCertSpi;
924     invalidCertSpi.base.getClass = InvalidX509CertClass;
925 
926     ret = g_x509CertSpiObj->engineGetExtensionsObject(&invalidCertSpi, &blob);
927     EXPECT_EQ(ret, CF_INVALID_PARAMS);
928 
929     ret = g_x509CertSpiObj->engineGetExtensionsObject(NULL, &blob);
930     EXPECT_EQ(ret, CF_INVALID_PARAMS);
931 
932     ret = g_x509CertSpiObj->engineGetExtensionsObject(g_x509CertSpiObj, NULL);
933     EXPECT_EQ(ret, CF_INVALID_PARAMS);
934 
935     ret = g_x509CertSpiObj->engineGetExtensionsObject(NULL, NULL);
936     EXPECT_EQ(ret, CF_INVALID_PARAMS);
937 }
938 }