• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }