1 /*
2  * Copyright (c) 2023-2024 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 #ifndef CRYPTO_X509_TEST_COMMON_H
17 #define CRYPTO_X509_TEST_COMMON_H
18 
19 #include <stdbool.h>
20 
21 #include "asy_key_generator.h"
22 #include "cf_memory.h"
23 #include "cipher.h"
24 #include "crypto_x509_cert_chain_data_der.h"
25 #include "crypto_x509_cert_chain_data_p7b.h"
26 #include "crypto_x509_cert_chain_data_pem.h"
27 #include "crypto_x509_cert_chain_data_pem_added.h"
28 #include "crypto_x509_cert_chain_data_pem_ex.h"
29 #include "key_pair.h"
30 #include "memory_mock.h"
31 #include "securec.h"
32 #include "x509_cert_chain.h"
33 #include "x509_crl.h"
34 
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38 
39 static const char g_deviceTestCert[] =
40     "-----BEGIN CERTIFICATE-----\r\n"
41     "MIIBLzCB1QIUO/QDVJwZLIpeJyPjyTvE43xvE5cwCgYIKoZIzj0EAwIwGjEYMBYG\r\n"
42     "A1UEAwwPRXhhbXBsZSBSb290IENBMB4XDTIzMDkwNDExMjAxOVoXDTI2MDUzMDEx\r\n"
43     "MjAxOVowGjEYMBYGA1UEAwwPRXhhbXBsZSBSb290IENBMFkwEwYHKoZIzj0CAQYI\r\n"
44     "KoZIzj0DAQcDQgAEHjG74yMIueO7z3T+dyuEIrhxTg2fqgeNB3SGfsIXlsiUfLTa\r\n"
45     "tUsU0i/sePnrKglj2H8Abbx9PK0tsW/VgqwDIDAKBggqhkjOPQQDAgNJADBGAiEA\r\n"
46     "0ce/fvA4tckNZeB865aOApKXKlBjiRlaiuq5mEEqvNACIQDPD9WyC21MXqPBuRUf\r\n"
47     "BetUokslUfjT6+s/X4ByaxycAA==\r\n"
48     "-----END CERTIFICATE-----";
49 extern const int g_deviceTestCertSize;
50 static const char g_rootCert[] =
51     "-----BEGIN CERTIFICATE-----\r\n"
52     "MIIGQDCCBCigAwIBAgIUKNQFxqguJbKjFXanBmC2ZwUv9dkwDQYJKoZIhvcNAQEL\r\n"
53     "BQAwejELMAkGA1UEBhMCQ04xETAPBgNVBAgMCFNIQU5HSEFJMREwDwYDVQQHDAhT\r\n"
54     "SEFOR0hBSTELMAkGA1UECgwCQUExCzAJBgNVBAsMAkJCMQswCQYDVQQDDAJDQzEe\r\n"
55     "MBwGCSqGSIb3DQEJARYPZmlyc3RAaGVsbG8uY29tMCAXDTIyMDgyMzExMjk0MVoY\r\n"
56     "DzIwNjIwODIzMTEyOTQxWjB6MQswCQYDVQQGEwJDTjERMA8GA1UECAwIU0hBTkdI\r\n"
57     "QUkxETAPBgNVBAcMCFNIQU5HSEFJMQswCQYDVQQKDAJBQTELMAkGA1UECwwCQkIx\r\n"
58     "CzAJBgNVBAMMAkNDMR4wHAYJKoZIhvcNAQkBFg9maXJzdEBoZWxsby5jb20wggIi\r\n"
59     "MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCr4nXrmskgHytDYcp8/BRORk71\r\n"
60     "f2idSs6cxxSOycILA3fbhbCB3qA8Bj4k1bT592j99MsKm+djMFvUOW/mS6iEWcoS\r\n"
61     "sK1HvYX2d7y0GMDnltT9I/KlcYDHiwcq0UgHX4OSbB70EUt9vUmq/opYeUJFIbfq\r\n"
62     "QJvGu57PJw+lxdsq3mZvx8n04fIMxqJdQSXu2foh0fSIePthNIV5JNtO9tTmmKn9\r\n"
63     "b+L9Eb1IfhKnvxNVuq046+eUwRA3Qva4HQOkCplamfU+b2dQGXnpha/NzXfCVuZK\r\n"
64     "R13xhUXjuXADGAIoRl9BgxgONTVpy209xQ7W1UvVEbSVDf8r9OlPDf3olRoavTAv\r\n"
65     "+EaYyqrFoEtTzIRZDiLIhqjoqtpbrl5oVggfH/qn8qDyZ+a6puwa81+9Mad8CLwh\r\n"
66     "Q9sa0uT+AET86gCGgpOBPF31+xYgnznQjd2wRs5a2rrYjy5wqAYyGPNUy9lm2EaU\r\n"
67     "03jMv+JzgeSdyqly8g3oCxBhRENgtGWlMUzzqZoM+Z6/NUn+pebRr53z4lzQWFFV\r\n"
68     "M1M81OHIKnleuud5CTnuRNfX7jVX9O+iu/bHjU2YKKrB3L1+ZY0cf6RXUDsBFSxg\r\n"
69     "dRZXBVvjJ8Ag+PDYOGG4Cbh9NByhvNvoKa7eBDpWXkOcP6VqnlIL33AUNKk9NEZc\r\n"
70     "KpyN1Dbk3eN/c9pIBQIDAQABo4G7MIG4MB0GA1UdDgQWBBRn2V1KId/KpzEztYbH\r\n"
71     "PHbCFqIioTAfBgNVHSMEGDAWgBRn2V1KId/KpzEztYbHPHbCFqIioTASBgNVHRMB\r\n"
72     "Af8ECDAGAQH/AgEDMAsGA1UdDwQEAwIBBjAdBgNVHSUEFjAUBggrBgEFBQcDAQYI\r\n"
73     "KwYBBQUHAwIwGgYDVR0RBBMwEYEPZmlyc3RAaGVsbG8uY29tMBoGA1UdEgQTMBGB\r\n"
74     "D2ZpcnN0QGhlbGxvLmNvbTANBgkqhkiG9w0BAQsFAAOCAgEAqbo9c3pEMfk4pmTL\r\n"
75     "Oays4RGZy9kZtZMOgdNvZ1gLbRow85x3mSOQ7ew8trt4PbjEp48EQzTFy4AxsBj/\r\n"
76     "Kw7p6Y9RAu/fBQMOMwIKzBUW9gayehpOyRTgnt27jDUBBXcq21HDy+WK9FTreqTG\r\n"
77     "R2CH/Yt75pfsHLWulq7Ou3s5sWvLyuYxohVDsIJfJHwgUSGPB33bFGqSxzN4qOMJ\r\n"
78     "4+M1OO0+hHVWzqESmYBaroX7XYoFeVOJsEDdjU9lccIZpfupbZ4ljjdBk3v45WSt\r\n"
79     "gbTS2NYauczjl3wT/p5EU7iGf1a8rSOjUqZS6cmDP7Tq0PL4+1iMCZlF1ZXLvPb4\r\n"
80     "dCAebIPMF7Pn1BLjANsQ94iKWHmPWdl8m6QmdCtSGgt7zNx3W0N6kF/7tRdshUQD\r\n"
81     "mPXFZed3U3vVVCOGPPY/KYnNvU2umJ4EsDSThlRPPafZ8GDuj1cF4OGdxfNx6bSQ\r\n"
82     "E6Zuj4oYR1k5+vAWbVS6F25KV0C6mXkrmL/pl2JQt+fyWIjGxP3pkBcxBYyP+OgQ\r\n"
83     "hX9yv+cUIkDPNa9yytVn2Z+9CFJbz3l/AxIxTqR5a3m9Qlls4otQKco0E9ArA3ce\r\n"
84     "v9YYMHEDo61jQYTd2rz7BvIdvQ+ds4V+GjmgDFa21tMvpNxC6LMy4gS4PmOSAbMu\r\n"
85     "jI6AaoTlr5I7zPhFbR8/XEs7DzI=\r\n"
86     "-----END CERTIFICATE-----\r\n";
87 extern const int g_rootCertSize;
88 static const char g_secondCert[] =
89     "-----BEGIN CERTIFICATE-----\r\n"
90     "MIIFwjCCA6qgAwIBAgIUTUs0/9mQvlKZ67Q3nDR+5bwvyoowDQYJKoZIhvcNAQEL\r\n"
91     "BQAwejELMAkGA1UEBhMCQ04xETAPBgNVBAgMCFNIQU5HSEFJMREwDwYDVQQHDAhT\r\n"
92     "SEFOR0hBSTELMAkGA1UECgwCQUExCzAJBgNVBAsMAkJCMQswCQYDVQQDDAJDQzEe\r\n"
93     "MBwGCSqGSIb3DQEJARYPZmlyc3RAaGVsbG8uY29tMB4XDTIyMDgyMzExMzQwMFoX\r\n"
94     "DTQyMDgyMzExMzQwMFowezELMAkGA1UEBhMCQ04xETAPBgNVBAgMCFNIQU5HSEFJ\r\n"
95     "MREwDwYDVQQHDAhTSEFOR0hBSTELMAkGA1UECgwCQUExCzAJBgNVBAsMAkJCMQsw\r\n"
96     "CQYDVQQDDAJDQzEfMB0GCSqGSIb3DQEJARYQc2Vjb25kQGhlbGxvLmNvbTCCAiIw\r\n"
97     "DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJkLbBN8iHBWDHCdoMPpUwIeCSpW\r\n"
98     "nWdqJJ83Hmp3KQvm2sY9l2VOMFE+D9QJr3rRLuzQLYwcGjCcqcq+a7up7jfyB+wm\r\n"
99     "FR+H1d9Mnv3G4n1ljwBuGqYr7QQh/6tZ7OsMaSdj6hAQe6b2eFeB1qpTORA2smX+\r\n"
100     "uQZ6C47kKOVkna/P8ipSgnQZejX5f+O/SsystdCLbtkZCGXOahMhi9mmdbK0jNuy\r\n"
101     "ZhM2sea8NiQONQjSFQm1pC0wpMyvCsZt0Xucxgv9pBvcX/w2BV8DrJ67yD61Lac2\r\n"
102     "4x9u7FgBlJRHqBz8pdMo11dwXaBKLL0RHEJR5eZYivX9krRdWH5/8YUwAFnZ09HH\r\n"
103     "IajVxZMBRSuUcHmFrGFbQcNCEsERx1DnWzb6j2iNo55s6kYWbvuF2vdAdZEJPWWk\r\n"
104     "NKRn+OJYQR1t0micL+RRS0rvktc49AOa25xqHIDK9wV6kXlJA36mRa2x9/ijB2c8\r\n"
105     "ZSn5vKhWRZOYQAQpB9kG5H2cK4xx48EOCNDnQ74RSVsP/xq8yJx6NOHDFkXhOq4M\r\n"
106     "7daCtrY57GjyUgIEhhGi7DIAjfLqrwdihLWvUip1gS32lc9Qy806r+yQYHFzqImI\r\n"
107     "GACoP9i5MfZDq5TUbwx4Z9yDQ0Djraa9GCU+GHmaZc84hiXwh2PsPCswG3mme87G\r\n"
108     "OydzdjYF/KKO9P33AgMBAAGjPzA9MAwGA1UdEwQFMAMBAf8wLQYDVR0fBCYwJDAi\r\n"
109     "oCCgHoYcaHR0cHM6Ly9jYS5zZWNvbmQuY24vY3JsLnBlbTANBgkqhkiG9w0BAQsF\r\n"
110     "AAOCAgEASJmN9D3Nf5YHOSa28gZLKhGziwNG9ykRXK59vLNIeYYDuoR51m+zkqtm\r\n"
111     "I5SuYDb+IfjicJCyMnrMlP/d/Lv/YUi/rEF/BS0YF2YlnX+5JmG8RG1Sh2OSfp28\r\n"
112     "rmh5srMg76EuDXIPN1+qHeQqpbNj11DzKL3Z2Tv+ohj2+/WauJt2KTdRWbRU7AT7\r\n"
113     "xRlgFOofQUFUo78JG+Op1yfQnbDqJNBB04ASwEi4ru9yliBgS6Ves/zn5xAjwe98\r\n"
114     "1tGuGFhEYXEKzP3cPGShefdFgyI53YrsVxXy4+x5OdfyRiq9+ao/jAAezZc6fcBe\r\n"
115     "V6gADyhpt9vSDinTcI3xBRqwLIa+ujTd/HEqSu9Di8xYJ+RbKJ0wFRK1VJqMZXKu\r\n"
116     "HIo7mgfBUwojxFbIk+FSXWWvWBtaOQxy4BZxv5NjAFlYU2k3p0rJOhQ3CCpTd6Sf\r\n"
117     "HVd68XS0xK+RLCYxbTK0ejZ8gGN3DHpdtCWRcVXOo47mR3eCgIWAdkWeRO+xs2LV\r\n"
118     "5afFCeGtpITsNUkqh9YVTvMxLEBwSmNH4SHVzJN5Xj6hgfLg2ZhbI7r1DC8CaTr7\r\n"
119     "H56qZfZmrvZbBc1q9yIhqJNPwwOZ0N0QJnZObBE1E8PX7if3lPlOoGIlbYcyEyu4\r\n"
120     "neNdebXmjLY6R8J9/eLy36xX7vRdjDBT1gva9AIthH0dg0tpPJI=\r\n"
121     "-----END CERTIFICATE-----\r\n";
122 extern const int g_secondCertSize;
123 static const char g_testInvalidCert[] =
124     "-----xxxx CERTIFICATE-----\r\n"
125     "MIIDpzCCAo+gAwIBAgICAQAwDQYJKoZIhvcNAQELBQAwbDELMAkGA1UEBhMCQ04x\r\n"
126     "CzAJBgNVBAgMAkJKMQswCQYDVQQHDAJCSjELMAkGA1UECgwCSEQxDDAKBgNVBAsM\r\n"
127     "A2RldjELMAkGA1UEAwwCY2ExGzAZBgkqhkiG9w0BCQEWDGNhQHdvcmxkLmNvbTAe\r\n"
128     "Fw0yMjA4MTkwNTE2MTVaFw0yMzA4MTkwNTE2MTVaMGwxCzAJBgNVBAYTAkNOMQsw\r\n"
129     "CQYDVQQIDAJCSjELMAkGA1UEBwwCQkoxCzAJBgNVBAoMAkhEMQwwCgYDVQQLDANk\r\n"
130     "ZXYxCzAJBgNVBAMMAmNhMRswGQYJKoZIhvcNAQkBFgxjYUB3b3JsZC5jb20wggEi\r\n"
131     "MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuvLoVT5em7ApBma8xtgpcFcaU\r\n"
132     "CbXBJSUl2NpFW2sriucbEOvKRdw9KvLa/tSP6CupPZVKIzHAP2oeW88aFBr23miG\r\n"
133     "iR49M52c73Iw3H3EG2ckK8M1mxEzXSqynivqiNZDKG+bA5cFzcfmk6Th1bJan9w9\r\n"
134     "Ci8HPSBvgg7Rc6pqNM4HjTHl3Bb6cf4Xh3/GgpjypTd9jAAEyq+l/+1pnTYVlIJA\r\n"
135     "WGh0Z26RosXfzwfFKH77ysTjoj9ambvGmFsMXvNXEyYmBCeYND6xGj4pa2lylsra\r\n"
136     "kfYmGxcFQ45Lj5oWdNQQVdvrQiYWu3SJOC/WqB5UIAq92PPrq1apznxfjqABAgMB\r\n"
137     "AAGjUzBRMB0GA1UdDgQWBBRI5iWwjBMAOCcgcUjUCYJdsvwEMjAfBgNVHSMEGDAW\r\n"
138     "gBRI5iWwjBMAOCcgcUjUCYJdsvwEMjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3\r\n"
139     "DQEBCwUAA4IBAQABop7EJgS2czHKWVzdEwjbi9m5ZUPy6aOV9paV1e/5IyFNHwun\r\n"
140     "B64iwcg03+FmIWNuynb1mglHHrUoXygXu9GIR8cWfOI3W+Pnn8fDi8MxQMn/e/Jj\r\n"
141     "BuGcnRwKynRhyLdkyWYn1YwqenMuFJu9yzkhfAPltGFEuPYCWDatdhm6zhFdu1PE\r\n"
142     "EMErHpQOT45z5cgC4XqgKlE+n8L4/5RfZnbuUJ3bV+FuI+VApLGXJQlJQAOTqBDg\r\n"
143     "k7DMSgPUUxYYa6AGMFy6vqQ6hcgCMK08ko8LdjVd1MobKzM9Oh480GFZA/ubR3QW\r\n"
144     "lv3OuOhmnIxNGcPUiqpSiWKqR5tf1KUImIR9\r\n"
145     "-----END CERTIFICATE-----\r\n";
146 extern const int g_testInvalidCertSize;
147 static const char g_testSelfSignedCaCert[] =
148     "-----BEGIN CERTIFICATE-----\r\n"
149     "MIIEMjCCAxqgAwIBAgICARAwDQYJKoZIhvcNAQELBQAwdjELMAkGA1UEBhMCQ04x\r\n"
150     "CzAJBgNVBAgMAkJKMQswCQYDVQQHDAJCSjELMAkGA1UECgwCSEQxDDAKBgNVBAsM\r\n"
151     "A2RldjELMAkGA1UEAwwCY2ExJTAjBgkqhkiG9w0BCQEWFmNhQGNyeXB0b2ZyYW1l\r\n"
152     "d29yay5jb20wHhcNMjIwODE5MTI0OTA2WhcNMzIwODE2MTI0OTA2WjB2MQswCQYD\r\n"
153     "VQQGEwJDTjELMAkGA1UECAwCQkoxCzAJBgNVBAcMAkJKMQswCQYDVQQKDAJIRDEM\r\n"
154     "MAoGA1UECwwDZGV2MQswCQYDVQQDDAJjYTElMCMGCSqGSIb3DQEJARYWY2FAY3J5\r\n"
155     "cHRvZnJhbWV3b3JrLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\r\n"
156     "AJ8p0IWE7WwwbtATg+AbYQj33WNBBktU+/AVf+Tl1aAa4TOeW2/ZARc4sdwLVTxd\r\n"
157     "XCipFseuiGN30hwXrXFUHrcMf0w2sCkznJVZ/rQcfEO5Kb1vBz6DEEcgISYEhhqO\r\n"
158     "BfYBit5qfpq5R2+2R/Th/ybV+kBrUl+GssXbDAe6oZCy56lGphDvmHMUO7a13j+S\r\n"
159     "FmThMbI2yeyua1LagSoaBJfY1J+i7jWPmmEFR0dQ2p0EGjHTgQGhRo5VuwDHipNS\r\n"
160     "v0XP8OUA/PYbL/SBj1Fq4C3gtfvjeswUbzVaMoq/wCuy1qcXI80ZLe3whR24c0cX\r\n"
161     "YFO0uGi9egPp24fw7yYGqgECAwEAAaOByTCBxjAdBgNVHQ4EFgQUjKM7QmMBs01R\r\n"
162     "9uQttYN/GDkvt7UwHwYDVR0jBBgwFoAUjKM7QmMBs01R9uQttYN/GDkvt7UwEgYD\r\n"
163     "VR0TAQH/BAgwBgEB/wIBAjALBgNVHQ8EBAMCAQYwHQYDVR0lBBYwFAYIKwYBBQUH\r\n"
164     "AwEGCCsGAQUFBwMCMCEGA1UdEQQaMBiBFmNhQGNyeXB0b2ZyYW1ld29yay5jb20w\r\n"
165     "IQYDVR0SBBowGIEWY2FAY3J5cHRvZnJhbWV3b3JrLmNvbTANBgkqhkiG9w0BAQsF\r\n"
166     "AAOCAQEAh+4RE6cJ62/gLYssLkc7ESg7exKwZlmisHyBicuy/+XagOZ3cTbgQNXl\r\n"
167     "QoZKbw/ks/B/cInbQGYbpAm47Sudo+I/G9xj0X7gQB9wtSrbStOs6SjnLiYU0xFc\r\n"
168     "Fsc0j6k2SrlyiwRQcjS4POKiUS0Cm3F3DHGdj55PlBkXxudXCq2V3J3VwKf2bVjQ\r\n"
169     "bzz2+M/Q1m+P7FhB+JmeO8eemkqMQ0tFMU3EM441NpejC5iFVAGgownC8S0B+fxH\r\n"
170     "9dBJuHM6vpxEWw3ckZFDZQ1kd91YRgr7jY8fc0v/T0tzHWbOEVzklEIBWL1mompL\r\n"
171     "BCwe0/Gw+BO60bfi2MoJw8t2IcB1Qw==\r\n"
172     "-----END CERTIFICATE-----\r\n";
173 
174 extern const int g_testSelfSignedCaCertSize;
175 static const uint8_t g_testSubjectAndIssuerNameDerData[] = {
176     0x30, 0x76, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4E, 0x31, 0x0B, 0x30,
177     0x09, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0C, 0x02, 0x42, 0x4A, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
178     0x07, 0x0C, 0x02, 0x42, 0x4A, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x0C, 0x02, 0x48, 0x44,
179     0x31, 0x0C, 0x30, 0x0A, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x0C, 0x03, 0x64, 0x65, 0x76, 0x31, 0x0B, 0x30, 0x09,
180     0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x02, 0x63, 0x61, 0x31, 0x25, 0x30, 0x23, 0x06, 0x09, 0x2A, 0x86, 0x48,
181     0x86, 0xF7, 0x0D, 0x01, 0x09, 0x01, 0x16, 0x16, 0x63, 0x61, 0x40, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6F, 0x66,
182     0x72, 0x61, 0x6D, 0x65, 0x77, 0x6F, 0x72, 0x6B, 0x2E, 0x63, 0x6F, 0x6D
183 };
184 extern const int g_testSubjectAndIssuerNameDerDataSize;
185 static const uint8_t g_testCrlSubAndIssNameDerData[] = {
186     0x30, 0x2C, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43, 0x4E, 0x31, 0x0D, 0x30,
187     0x0B, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x0C, 0x04, 0x74, 0x65, 0x73, 0x74, 0x31, 0x0E, 0x30, 0x0C, 0x06, 0x03,
188     0x55, 0x04, 0x03, 0x0C, 0x05, 0x73, 0x75, 0x62, 0x63, 0x61
189 };
190 extern const int g_testCrlSubAndIssNameDerDataSize;
191 static const uint8_t g_testPublicKeyDerData[] = {
192     0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05,
193     0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0x9f, 0x29, 0xd0,
194     0x85, 0x84, 0xed, 0x6c, 0x30, 0x6e, 0xd0, 0x13, 0x83, 0xe0, 0x1b, 0x61, 0x08, 0xf7, 0xdd, 0x63, 0x41, 0x06,
195     0x4b, 0x54, 0xfb, 0xf0, 0x15, 0x7f, 0xe4, 0xe5, 0xd5, 0xa0, 0x1a, 0xe1, 0x33, 0x9e, 0x5b, 0x6f, 0xd9, 0x01,
196     0x17, 0x38, 0xb1, 0xdc, 0x0b, 0x55, 0x3c, 0x5d, 0x5c, 0x28, 0xa9, 0x16, 0xc7, 0xae, 0x88, 0x63, 0x77, 0xd2,
197     0x1c, 0x17, 0xad, 0x71, 0x54, 0x1e, 0xb7, 0x0c, 0x7f, 0x4c, 0x36, 0xb0, 0x29, 0x33, 0x9c, 0x95, 0x59, 0xfe,
198     0xb4, 0x1c, 0x7c, 0x43, 0xb9, 0x29, 0xbd, 0x6f, 0x07, 0x3e, 0x83, 0x10, 0x47, 0x20, 0x21, 0x26, 0x04, 0x86,
199     0x1a, 0x8e, 0x05, 0xf6, 0x01, 0x8a, 0xde, 0x6a, 0x7e, 0x9a, 0xb9, 0x47, 0x6f, 0xb6, 0x47, 0xf4, 0xe1, 0xff,
200     0x26, 0xd5, 0xfa, 0x40, 0x6b, 0x52, 0x5f, 0x86, 0xb2, 0xc5, 0xdb, 0x0c, 0x07, 0xba, 0xa1, 0x90, 0xb2, 0xe7,
201     0xa9, 0x46, 0xa6, 0x10, 0xef, 0x98, 0x73, 0x14, 0x3b, 0xb6, 0xb5, 0xde, 0x3f, 0x92, 0x16, 0x64, 0xe1, 0x31,
202     0xb2, 0x36, 0xc9, 0xec, 0xae, 0x6b, 0x52, 0xda, 0x81, 0x2a, 0x1a, 0x04, 0x97, 0xd8, 0xd4, 0x9f, 0xa2, 0xee,
203     0x35, 0x8f, 0x9a, 0x61, 0x05, 0x47, 0x47, 0x50, 0xda, 0x9d, 0x04, 0x1a, 0x31, 0xd3, 0x81, 0x01, 0xa1, 0x46,
204     0x8e, 0x55, 0xbb, 0x00, 0xc7, 0x8a, 0x93, 0x52, 0xbf, 0x45, 0xcf, 0xf0, 0xe5, 0x00, 0xfc, 0xf6, 0x1b, 0x2f,
205     0xf4, 0x81, 0x8f, 0x51, 0x6a, 0xe0, 0x2d, 0xe0, 0xb5, 0xfb, 0xe3, 0x7a, 0xcc, 0x14, 0x6f, 0x35, 0x5a, 0x32,
206     0x8a, 0xbf, 0xc0, 0x2b, 0xb2, 0xd6, 0xa7, 0x17, 0x23, 0xcd, 0x19, 0x2d, 0xed, 0xf0, 0x85, 0x1d, 0xb8, 0x73,
207     0x47, 0x17, 0x60, 0x53, 0xb4, 0xb8, 0x68, 0xbd, 0x7a, 0x03, 0xe9, 0xdb, 0x87, 0xf0, 0xef, 0x26, 0x06, 0xaa,
208     0x01, 0x02, 0x03, 0x01, 0x00, 0x01
209 };
210 extern const int g_testPublicKeyDerDataSize;
211 
212 static const char g_testErrorCert[] =
213     "-----BEGIN CERTIFICATE-----\r\n"
214     "MIIBLzCB1QIUO/QDVJwZLIpeJyPjyTvE43xvE5cwCgYIKoZIzj0EAwIwGjEYMBYG\r\n"
215     "A1UEAwwPRXhhbXBsZSBSb290IENBMB4XDTIzMDkwNDExMjAxOVoXDTI2MDUzMDEx\r\n"
216     "MjAxOVowGjEYMBYGA1UEAwwPRXhhbXBsZSBSb290IENBMFkwEwYHKoZIzj0CAQYI\r\n"
217     "KoZIzj0DAQcDQgAEHjG74yMIueO7z3T+dyuEIrhxTg2fqgeNB3SGfsIXlsiUfLTa\r\n"
218     "tUsU0i/sePnrKglj2H8Abbx9PK0tsW/VgqwDIDAKBggqhkjOPQQDAgNJADBGAiEA\r\n"
219     "0ce/fvA4tckNZeB865aOApKXKlBjiRlaiuq5mEEqvNACIQDPD9WyC21MXqPBuRUf\r\n"
220     "BetUokslUfjT6+s/X4ByaxycAA==\r\n"
221     "-----END CERTIFICATE-----";
222 extern const int g_testErrorCertSize;
223 static const char g_testCert[] =
224     "-----BEGIN CERTIFICATE-----\r\n"
225     "MIIDTzCCAjegAwIBAgICA+gwDQYJKoZIhvcNAQELBQAwLDELMAkGA1UEBhMCQ04x\r\n"
226     "DTALBgNVBAoMBHRlc3QxDjAMBgNVBAMMBXN1YmNhMB4XDTIzMDkxMjA2NDc0OVoX\r\n"
227     "DTMzMDkwOTA2NDc0OVowLDELMAkGA1UEBhMCQ04xDTALBgNVBAoMBHRlc3QxDjAM\r\n"
228     "BgNVBAMMBWxvY2FsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuEcw\r\n"
229     "tv/K2MnMB+AX2oL2KsTMjKteaQncpr6BPfe/LvSXQImnETvzSSIX2Iy19ZEbEDxn\r\n"
230     "osFXGvmrE8iT1P8lP+LYC8WIjzArbQeBvM6n8gq7QW2jAlfAmVy2/SBeBhRFT1Eq\r\n"
231     "rwqld6qqGa0WTnRTnax7v52FddvpG9XBAexE2gQ6UyScWikAKuDgnSQsivz6SMTQ\r\n"
232     "vbax3ffiy2p2RjxH9ZrQTxpUFDRHqMxJvq57wBDLkAtG4TlhQMDIB86cbOQfHHam\r\n"
233     "VHPVSvyZgmr3V4kb9UlDwB9bjrjSMlRsnNqocGEepZQ57IKgLf5SCWRec5Oww+OO\r\n"
234     "3WJOa7ja10sZ0LDdxwIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQf\r\n"
235     "Fh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQURsHdrG4w\r\n"
236     "i4GQKaFbmEpdNyNkvB4wHwYDVR0jBBgwFoAUIisY3oTZME72Pd/X9ALtRCKEIOgw\r\n"
237     "DQYJKoZIhvcNAQELBQADggEBAKVdgTE4Q8Nl5nQUQVL/uZMVCmDRcpXdJHq3cyAH\r\n"
238     "4BtbFW/K3MbVcZl2j1tPl6bgI5pn9Tk4kkc+SfxGUKAPR7FQ01zfgEJipSlsmAxS\r\n"
239     "wOZL+PGUbYUL1jzU8207PZOIZcyD67Sj8LeOV4BCNLiBIo++MjpD++x77GnP3veg\r\n"
240     "bDKHfDSVILdH/qnqyGSAGJ4YGJld00tehnTAqBWzmkXVIgWk0bnPTNE0dn5Tj7ZY\r\n"
241     "7zh6YU5JILHnrkjRGdNGmpz8SXJ+bh7u8ffHc4R9FO1q4c9/1YSsOXQj0KazyDIP\r\n"
242     "IArlydFj8wK8sHvYC9WhPs+hiirrRb9Y2ApFzcYX5aYn46Y=\r\n"
243     "-----END CERTIFICATE-----\r\n";
244 extern const int g_testCertSize;
245 static const char g_testCrl[] =
246     "-----BEGIN X509 CRL-----\r\n"
247     "MIIB4zCBzAIBATANBgkqhkiG9w0BAQsFADAsMQswCQYDVQQGEwJDTjENMAsGA1UE\r\n"
248     "CgwEdGVzdDEOMAwGA1UEAwwFc3ViY2EXDTIzMDkxMjA2NDc1MFoXDTIzMTAxMjA2\r\n"
249     "NDc1MFowOzATAgID6BcNMjMwOTEyMDY0NzQ5WjAkAhMXXWqf7KkJ1xKySFKmPkj2\r\n"
250     "EpOpFw0yMzA5MTIwNjQyNTRaoC8wLTAfBgNVHSMEGDAWgBQiKxjehNkwTvY939f0\r\n"
251     "Au1EIoQg6DAKBgNVHRQEAwIBAjANBgkqhkiG9w0BAQsFAAOCAQEAQKGCXs5aXY56\r\n"
252     "06A/0HynLmq+frJ7p5Uj9cD2vwbZV4xaP2E5jXogBz7YCjmxp0PB995XC9oi3QKQ\r\n"
253     "gLVKY4Nz21WQRecmmZm1cDweDDPwGJ8/I0d2CwMTJfP7rEgsuhgIBq+JUjFcNNaW\r\n"
254     "dia2Gu/aAuIjlaJ5A4W7vvhGVUx9CDUdN8YF5knA3BoQ1uFc1z7gNckkIpTTccQL\r\n"
255     "zoELFDG8/z+bOnAuSg1lZCyv9fOz9lVafC+qaHo+NW9rdChxV1oC5S6jHTu879CO\r\n"
256     "MQnLr3jEBCszNzDjFI64l6f3JVnLZepp6NU1gdunjQL4gtWQXZFlFV75xR8aahd8\r\n"
257     "seB5oDTPQg==\r\n"
258     "-----END X509 CRL-----\r\n";
259 extern const int g_testCrlSize;
260 static const char g_testCrlWithoutExts[] =
261     "-----BEGIN X509 CRL-----\r\n"
262     "MIHzMF4CAQMwDQYJKoZIhvcNAQEEBQAwFTETMBEGA1UEAxMKQ1JMIGlzc3VlchcN\r\n"
263     "MTcwODA3MTExOTU1WhcNMzIxMjE0MDA1MzIwWjAVMBMCAgPoFw0zMjEyMTQwMDUz\r\n"
264     "MjBaMA0GCSqGSIb3DQEBBAUAA4GBACEPHhlaCTWA42ykeaOyR0SGQIHIOUR3gcDH\r\n"
265     "J1LaNwiL+gDxI9rMQmlhsUGJmPIPdRs9uYyI+f854lsWYisD2PUEpn3DbEvzwYeQ\r\n"
266     "5SqQoPDoM+YfZZa23hoTLsu52toXobP74sf/9K501p/+8hm4ROMLBoRT86GQKY6g\r\n"
267     "eavsH0Q3\r\n"
268     "-----END X509 CRL-----\r\n";
269 extern const int g_testCrlWithoutExtsSize;
270 static const char g_testCrlWithBignumSerial[] =
271     "-----BEGIN X509 CRL-----\r\n"
272     "MIICEzCB/AIBATANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJDTjEQMA4GA1UE\r\n"
273     "CAwHSmlhbmdTdTEQMA4GA1UEBwwHTmFuSmluZzEKMAgGA1UECgwBdDEKMAgGA1UE\r\n"
274     "CwwBdDEMMAoGA1UEAwwDemhiMRswGQYJKoZIhvcNAQkBFgx0ZXN0QDEyMy5jb20X\r\n"
275     "DTIzMTEwNzAyNTIwN1oXDTIzMTIwNzAyNTIwN1owLDAqAhkA/wH/Af8B/wH/////\r\n"
276     "//////////////8BFw0yMzExMDcwMjUxMDNaoCYwJDAiBgNVHRQEGwIZAP8B/wH/\r\n"
277     "Af8B////////////////////ATANBgkqhkiG9w0BAQsFAAOCAQEAcB23lkrRYo48\r\n"
278     "YT5RiTxIyjSK1kTT+Zxc3oJ6gXcPoS1j7/Td+fDmFfjLOUeKWYrrx/T7NyfjFxjn\r\n"
279     "On37RKmQCHlVJtqAxIstnXCwoSzq68kqK9uczZCaYzWr+aPz/obQRxFWRs0aJy2x\r\n"
280     "KvXp6iBObXlAQVSHXkI5ikjkxR5Xpfi+VH0ojTi5NjpPssLJMN4b7qCZ/334qkZ7\r\n"
281     "eH6O355R2z0XM4vxQJDAJBoF5X9EFYFJc/uwdZPITnSKaG5IBMt1k5ei5jOLsMDa\r\n"
282     "tQSBrPschBRBmg2kBAz8Zq6jgW2j5UaQZ6e0/oKOiiXB/uAPwkpBLAGewinkeZKJ\r\n"
283     "VBgXORYAFg==\r\n"
284     "-----END X509 CRL-----\r\n";
285 extern const int g_testCrlWithBignumSerialSize;
286 static const char g_testCrlWhichEntryWithExt[] =
287     "-----BEGIN X509 CRL-----\r\n"
288     "MIIBDjB5AgEDMA0GCSqGSIb3DQEBBAUAMBUxEzARBgNVBAMTCkNSTCBpc3N1ZXIX\r\n"
289     "DTIzMTExMzExMTYxM1oXDTIzMTExMzExNDkzM1owMDAuAgMAq80XDTIzMTExMzEx\r\n"
290     "NDkzM1owGDAWBglghkgBhvhCAQ0BAf8EBhYEdGVzdDANBgkqhkiG9w0BAQQFAAOB\r\n"
291     "gQAJlecMe4ImV/IKP2LvT+vO1Os8Z2/tUERk9aleJB9mRpWXfk6hYbUr8RAw3nSu\r\n"
292     "4aYnlhdRxS8tkthv2FFxp4Ms/Oto+biyby8zFyzgbjWocPlOx/kL65+itylJGXzN\r\n"
293     "28Vgfm9pJFiUQWI34lohYeHyyvT0IlOkhUc8/fdzCZdATA==\r\n"
294     "-----END X509 CRL-----\r\n";
295 extern const int g_testCrlWhichEntryWithExtSize;
296 static const char g_testIssuerCert[] =
297     "-----BEGIN CERTIFICATE-----\r\n"
298     "MIIDKDCCAhCgAwIBAgICA+gwDQYJKoZIhvcNAQELBQAwLTELMAkGA1UEBhMCQ04x\r\n"
299     "DTALBgNVBAoMBHRlc3QxDzANBgNVBAMMBnJvb3RjYTAeFw0yMzA5MTIwNjQ3NDla\r\n"
300     "Fw0zMzA5MDkwNjQ3NDlaMCwxCzAJBgNVBAYTAkNOMQ0wCwYDVQQKDAR0ZXN0MQ4w\r\n"
301     "DAYDVQQDDAVzdWJjYTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALpr\r\n"
302     "uLwlJjJ9uowa0N6aEmIIdf6YxR5+q6yDYg4it2cLJmkU/0P1Lt2Yl/MiBvW0t3DW\r\n"
303     "I6cKFv8rZ+GdwRIfIrTmINJhKjPwvrUqXJctFEkxEgtux4/+C8n06vZJypy5p6Vy\r\n"
304     "LFWbLIM1FGkPuBtwjnIQdyUxo+R+oBSVXyvA5w9CX0Ak08jRvsBWc1Oh2Avcm6nF\r\n"
305     "0T+ac4Kf0NzVkkMjKoYwUdoPMppjpYGDX0jdRzJhdFUFjGMLR3YQJtlqLeUqVGnO\r\n"
306     "mws5K7picMM/Z7tO3tIT6BBPljGzsLheu2tM5yuXBRt4A6D7j9qW+ufNnL7Lklvu\r\n"
307     "X6TWn5BKoA/h7cIgc5UCAwEAAaNTMFEwHQYDVR0OBBYEFCIrGN6E2TBO9j3f1/QC\r\n"
308     "7UQihCDoMB8GA1UdIwQYMBaAFP+lNpyMpRzNOeVYvU7ecYdvfIhSMA8GA1UdEwEB\r\n"
309     "/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBALKHwCrQWu3fHRrCO2usfxNdI2S7\r\n"
310     "SkkYDKHiuf4P5VMypSwCewCrEDZwkzLcMlFZ+RMnz1a14viBUvqb3CMbR9Hg52EF\r\n"
311     "aFjOeZOGEuJF6hCVi0gJ9AddS8hGaUAzo82BlNCGsM8SGHCP5GsOSyKbvRrWc3jR\r\n"
312     "0qDOnHzAbesV6lw2g3MoeXCXIw/HBtv7k9SlJZyAREtmMAkYRm0X4tekqFq/6Mwk\r\n"
313     "g9WNnnzPNI1tBp1Nvv3JD3jVHLVXQUp9iOej7KX/OC0NETjn8sXLsjc0ZS1Ub2Nw\r\n"
314     "wWFdrSrSmjNbibrOHqQaoP/cpcqNP2EA5lFWSYVjJVkpv2YojGjLhjwqxP0=\r\n"
315     "-----END CERTIFICATE-----\r\n";
316 extern const int g_testIssuerCertSize;
317 extern const int g_testChainDataP7bSize;
318 extern const int g_testChainDataDerSize;
319 extern const int g_testCertChainPemSize;
320 extern const int g_testCertChainPemMidSize;
321 extern const int g_testCertChainPemRootSize;
322 extern const int g_testCertChainPemMidCRLSize;
323 extern const int g_testCertChainPemNoRootSize;
324 
325 static const uint8_t g_crlDerData[] = {
326     0x30, 0x82, 0x01, 0xE3, 0x30, 0x81, 0xCC, 0x02, 0x01, 0x01, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86,
327     0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x30, 0x2C, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06,
328     0x13, 0x02, 0x43, 0x4E, 0x31, 0x0D, 0x30, 0x0B, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x0C, 0x04, 0x74, 0x65, 0x73,
329     0x74, 0x31, 0x0E, 0x30, 0x0C, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x05, 0x73, 0x75, 0x62, 0x63, 0x61, 0x17,
330     0x0D, 0x32, 0x33, 0x30, 0x39, 0x31, 0x32, 0x30, 0x36, 0x34, 0x37, 0x35, 0x30, 0x5A, 0x17, 0x0D, 0x32, 0x33,
331     0x31, 0x30, 0x31, 0x32, 0x30, 0x36, 0x34, 0x37, 0x35, 0x30, 0x5A, 0x30, 0x3B, 0x30, 0x13, 0x02, 0x02, 0x03,
332     0xE8, 0x17, 0x0D, 0x32, 0x33, 0x30, 0x39, 0x31, 0x32, 0x30, 0x36, 0x34, 0x37, 0x34, 0x39, 0x5A, 0x30, 0x24,
333     0x02, 0x13, 0x17, 0x5D, 0x6A, 0x9F, 0xEC, 0xA9, 0x09, 0xD7, 0x12, 0xB2, 0x48, 0x52, 0xA6, 0x3E, 0x48, 0xF6,
334     0x12, 0x93, 0xA9, 0x17, 0x0D, 0x32, 0x33, 0x30, 0x39, 0x31, 0x32, 0x30, 0x36, 0x34, 0x32, 0x35, 0x34, 0x5A,
335     0xA0, 0x2F, 0x30, 0x2D, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x22,
336     0x2B, 0x18, 0xDE, 0x84, 0xD9, 0x30, 0x4E, 0xF6, 0x3D, 0xDF, 0xD7, 0xF4, 0x02, 0xED, 0x44, 0x22, 0x84, 0x20,
337     0xE8, 0x30, 0x0A, 0x06, 0x03, 0x55, 0x1D, 0x14, 0x04, 0x03, 0x02, 0x01, 0x02, 0x30, 0x0D, 0x06, 0x09, 0x2A,
338     0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x40, 0xA1, 0x82,
339     0x5E, 0xCE, 0x5A, 0x5D, 0x8E, 0x7A, 0xD3, 0xA0, 0x3F, 0xD0, 0x7C, 0xA7, 0x2E, 0x6A, 0xBE, 0x7E, 0xB2, 0x7B,
340     0xA7, 0x95, 0x23, 0xF5, 0xC0, 0xF6, 0xBF, 0x06, 0xD9, 0x57, 0x8C, 0x5A, 0x3F, 0x61, 0x39, 0x8D, 0x7A, 0x20,
341     0x07, 0x3E, 0xD8, 0x0A, 0x39, 0xB1, 0xA7, 0x43, 0xC1, 0xF7, 0xDE, 0x57, 0x0B, 0xDA, 0x22, 0xDD, 0x02, 0x90,
342     0x80, 0xB5, 0x4A, 0x63, 0x83, 0x73, 0xDB, 0x55, 0x90, 0x45, 0xE7, 0x26, 0x99, 0x99, 0xB5, 0x70, 0x3C, 0x1E,
343     0x0C, 0x33, 0xF0, 0x18, 0x9F, 0x3F, 0x23, 0x47, 0x76, 0x0B, 0x03, 0x13, 0x25, 0xF3, 0xFB, 0xAC, 0x48, 0x2C,
344     0xBA, 0x18, 0x08, 0x06, 0xAF, 0x89, 0x52, 0x31, 0x5C, 0x34, 0xD6, 0x96, 0x76, 0x26, 0xB6, 0x1A, 0xEF, 0xDA,
345     0x02, 0xE2, 0x23, 0x95, 0xA2, 0x79, 0x03, 0x85, 0xBB, 0xBE, 0xF8, 0x46, 0x55, 0x4C, 0x7D, 0x08, 0x35, 0x1D,
346     0x37, 0xC6, 0x05, 0xE6, 0x49, 0xC0, 0xDC, 0x1A, 0x10, 0xD6, 0xE1, 0x5C, 0xD7, 0x3E, 0xE0, 0x35, 0xC9, 0x24,
347     0x22, 0x94, 0xD3, 0x71, 0xC4, 0x0B, 0xCE, 0x81, 0x0B, 0x14, 0x31, 0xBC, 0xFF, 0x3F, 0x9B, 0x3A, 0x70, 0x2E,
348     0x4A, 0x0D, 0x65, 0x64, 0x2C, 0xAF, 0xF5, 0xF3, 0xB3, 0xF6, 0x55, 0x5A, 0x7C, 0x2F, 0xAA, 0x68, 0x7A, 0x3E,
349     0x35, 0x6F, 0x6B, 0x74, 0x28, 0x71, 0x57, 0x5A, 0x02, 0xE5, 0x2E, 0xA3, 0x1D, 0x3B, 0xBC, 0xEF, 0xD0, 0x8E,
350     0x31, 0x09, 0xCB, 0xAF, 0x78, 0xC4, 0x04, 0x2B, 0x33, 0x37, 0x30, 0xE3, 0x14, 0x8E, 0xB8, 0x97, 0xA7, 0xF7,
351     0x25, 0x59, 0xCB, 0x65, 0xEA, 0x69, 0xE8, 0xD5, 0x35, 0x81, 0xDB, 0xA7, 0x8D, 0x02, 0xF8, 0x82, 0xD5, 0x90,
352     0x5D, 0x91, 0x65, 0x15, 0x5E, 0xF9, 0xC5, 0x1F, 0x1A, 0x6A, 0x17, 0x7C, 0xB1, 0xE0, 0x79, 0xA0, 0x34, 0xCF,
353     0x42
354 };
355 extern const int g_crlDerDataSize;
356 extern const int g_testChainPubkeyPemRootDataSize;
357 extern const int g_testChainSubjectPemRootDataSize;
358 extern const int g_testChainSubjectPemOtherSubjectDataSize;
359 extern const int g_testChainPubkeyPemRootHasPubKeySize;
360 extern const int g_testChainPubkeyPemNoRootLastSize;
361 extern const int g_testChainSubjectPemNoRootLastUpSize;
362 extern const int g_testChainPubkeyPemNoRootLastUpSize;
363 extern const int g_testChainSubjectPemNoRootLastSize;
364 
365 static const char g_testCertChainPemMid[] =
366     "-----BEGIN CERTIFICATE-----\r\n"
367     "MIIC0zCCAoWgAwIBAgIIXpLoPpQVWnkwBQYDK2VwMFoxCzAJBgNVBAYTAkVOMRAw\r\n"
368     "DgYDVQQIEwdFbmdsYW5kMQ8wDQYDVQQHEwZMb25kb24xDDAKBgNVBAoTA3RzMTEM\r\n"
369     "MAoGA1UECxMDdHMxMQwwCgYDVQQDEwN0czEwHhcNMjMxMjA1MDczNzAwWhcNMjQw\r\n"
370     "OTAxMjM1OTAwWjBaMQswCQYDVQQGEwJFTjEQMA4GA1UECBMHRW5nbGFuZDEPMA0G\r\n"
371     "A1UEBxMGTG9uZG9uMQwwCgYDVQQKEwN0czIxDDAKBgNVBAsTA3RzMjEMMAoGA1UE\r\n"
372     "AxMDdHMyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtt+2QxUevbol\r\n"
373     "YLp51QGcUpageI4fwGLIqv4fj4aoVnHFOOBqVOVpfCLRp26LFV/F8ebwPyo8YEBK\r\n"
374     "SwXzMD1573rMSbaH9BalscH5lZYAbetXoio6YRvzlcmcrVvLBNMeVnxY86xHpo0M\r\n"
375     "TNyP7W024rZsxWO98xFQVdoiaBC+7+midlisx2Y+7u0jzT9GjeUP6JLdLFUZJKUP\r\n"
376     "STK3jVzw9v1eZQZKYoNfU6vFMd6ndtwW6qEnwpzmmX/UT+p5ThAMH593zszlz330\r\n"
377     "nTSXBjIsGkyvOz9gSB0Z0LAuJj06XUNhGL5xKJYKbdI38MFQFJKvRHfgTAvVsvAv\r\n"
378     "pBUM2DuBKwIDAQABo28wbTAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBQ37B0zGcKA\r\n"
379     "OnmgxZQVMg6ZGvrGLTALBgNVHQ8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMB4G\r\n"
380     "CWCGSAGG+EIBDQQRFg94Y2EgY2VydGlmaWNhdGUwBQYDK2VwA0EAuasLBe55YgvF\r\n"
381     "b4wmHeohylc9r8cFGS1LNQ5UcSn3sGqMYf6ehnef16NLuCW6upHCs8Sui4iAMvsP\r\n"
382     "uKPWR9dKBA==\r\n"
383     "-----END CERTIFICATE-----\r\n";
384 
385 static const char g_testCertChainPemMidCRL[] =
386     "-----BEGIN X509 CRL-----\r\n"
387     "MIICDTCB9gIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJFTjEQMA4GA1UE\r\n"
388     "CBMHRW5nbGFuZDEPMA0GA1UEBxMGTG9uZG9uMQwwCgYDVQQKEwN0czIxDDAKBgNV\r\n"
389     "BAsTA3RzMjEMMAoGA1UEAxMDdHMyFw0yMzEyMTUwMjMyMDBaFw0yNDAxMTQwMjMy\r\n"
390     "MDBaMDcwNQIIIM2q/TmRoLcXDTIzMTIxNTAyMzA1M1owGjAYBgNVHRgEERgPMjAy\r\n"
391     "MzEyMTQwMjMwMDBaoC8wLTAfBgNVHSMEGDAWgBQ37B0zGcKAOnmgxZQVMg6ZGvrG\r\n"
392     "LTAKBgNVHRQEAwIBATANBgkqhkiG9w0BAQsFAAOCAQEAomTBBa9igM3xigouO6uh\r\n"
393     "A2P4ws3xr53KYVmpM9nBsuzzzlVBbKh4SbJXboLxFA7NL+FK00lm4is6gQylyPf1\r\n"
394     "rcjgKJx8Ol9n2BfrfH9Jlig4EYD7U/NDFB1S7fTbCbYqztZr0oVEfCwKRfCTTPiT\r\n"
395     "v2a0S4LZylcAdIKzcDUi9bET5d4/NQBVLz1P3gtEQMZAQlh+VNlk80lcSGdCgejz\r\n"
396     "YYbmQ6Lh+AE9QbZMAnCvYD5lT2oU4hUwZcY2ZGhktFnoyFTw80ZjOP/dOwqdkuYi\r\n"
397     "SQhs90WaiBhEGmnau0BcJa6FFShTU0CrxFlx5Q0OvqCDtQuxvoYLLosf021Aw5kp\r\n"
398     "hg==\r\n"
399     "-----END X509 CRL-----\r\n";
400 
401 static const char g_testCertChainPemRoot[] =
402     "-----BEGIN CERTIFICATE-----\r\n"
403     "MIIB3zCCAZGgAwIBAgIIWQvOEDl+ya4wBQYDK2VwMFoxCzAJBgNVBAYTAkVOMRAw\r\n"
404     "DgYDVQQIEwdFbmdsYW5kMQ8wDQYDVQQHEwZMb25kb24xDDAKBgNVBAoTA3RzMTEM\r\n"
405     "MAoGA1UECxMDdHMxMQwwCgYDVQQDEwN0czEwHhcNMjMxMjA1MDAwMDAwWhcNMjQx\r\n"
406     "MjA0MjM1OTU5WjBaMQswCQYDVQQGEwJFTjEQMA4GA1UECBMHRW5nbGFuZDEPMA0G\r\n"
407     "A1UEBxMGTG9uZG9uMQwwCgYDVQQKEwN0czExDDAKBgNVBAsTA3RzMTEMMAoGA1UE\r\n"
408     "AxMDdHMxMCowBQYDK2VwAyEAuxadj1ww0LqPN24zr28jcSOlSWAe0QdLyRF+ZgG6\r\n"
409     "klKjdTBzMBIGA1UdEwEB/wQIMAYBAf8CARQwHQYDVR0OBBYEFNSgpoQvfxR8A1Y4\r\n"
410     "St8NjOHkRpm4MAsGA1UdDwQEAwIBBjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZI\r\n"
411     "AYb4QgENBBEWD3hjYSBjZXJ0aWZpY2F0ZTAFBgMrZXADQQAblBgoa72X/K13WOvc\r\n"
412     "KW0fqBgFKvLy85hWD6Ufi61k4ProQiZzMK+0+y9jReKelPx/zRdCCgSbQroAR2mV\r\n"
413     "xjoE\r\n"
414     "-----END CERTIFICATE-----\r\n";
415 
416 static const char g_testExtAttrCert[] =
417     "-----BEGIN CERTIFICATE-----\r\n"
418     "MIIGujCCBaKgAwIBAgISESG8vx4IzALnkqQG05AvM+2bMA0GCSqGSIb3DQEBBQUA\r\n"
419     "MFkxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS8wLQYD\r\n"
420     "VQQDEyZHbG9iYWxTaWduIEV4dGVuZGVkIFZhbGlkYXRpb24gQ0EgLSBHMjAeFw0x\r\n"
421     "MjA4MTQxMjM1MDJaFw0xMzA4MTUxMDMxMjlaMIIBCjEdMBsGA1UEDwwUUHJpdmF0\r\n"
422     "ZSBPcmdhbml6YXRpb24xDzANBgNVBAUTBjU3ODYxMTETMBEGCysGAQQBgjc8AgED\r\n"
423     "EwJVUzEeMBwGCysGAQQBgjc8AgECEw1OZXcgSGFtcHNoaXJlMQswCQYDVQQGEwJV\r\n"
424     "UzEWMBQGA1UECAwNTmV3IEhhbXBzaGlyZTETMBEGA1UEBwwKUG9ydHNtb3V0aDEg\r\n"
425     "MB4GA1UECRMXVHdvIEludGVybmF0aW9uYWwgRHJpdmUxDTALBgNVBAsMBC5DT00x\r\n"
426     "GzAZBgNVBAoMEkdNTyBHbG9iYWxTaWduIEluYzEbMBkGA1UEAwwSd3d3Lmdsb2Jh\r\n"
427     "bHNpZ24uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqx/nHBP4\r\n"
428     "6s5KKMDlfZS4qFDiAWsoPSRn6WO4nrUF/G2S3I/AdJ0IcSDOHb48/3APj5alqbgo\r\n"
429     "o4IzdG6KLAbENpHMl0L3pHBq/5tJPTi02SbiYUHfp2fhueMauRo8spfEk6fNRnDn\r\n"
430     "QpyMFRkYd7Jz+KMerTO1xAcOH+xp0KkcP0i2jFTEuM3LwR0yTms1rry+RryjDDt5\r\n"
431     "7W0DLnNFWhyGd6YymzNkCPeL6weV8uk2uYRKKf2XOAzgIpNo3zU6iakZOzlQB9h9\r\n"
432     "qRuIks2AU/cZ89cBkDjHua0ezX5rG3/Url33jAT9cR5zCXHWtj7VzlOjDXXnn16b\r\n"
433     "L9/AWsvGMNkYHQIDAQABo4ICxzCCAsMwDgYDVR0PAQH/BAQDAgWgMEwGA1UdIARF\r\n"
434     "MEMwQQYJKwYBBAGgMgEBMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2Jh\r\n"
435     "bHNpZ24uY29tL3JlcG9zaXRvcnkvMIIBKwYDVR0RBIIBIjCCAR6CEnd3dy5nbG9i\r\n"
436     "YWxzaWduLmNvbYIVc3RhdHVzLmdsb2JhbHNpZ24uY29tghF0aC5nbG9iYWxzaWdu\r\n"
437     "LmNvbYISZGV2Lmdsb2JhbHNpZ24uY29tghNpbmZvLmdsb2JhbHNpZ24uY29tghZh\r\n"
438     "cmNoaXZlLmdsb2JhbHNpZ24uY29tghZzdGF0aWMxLmdsb2JhbHNpZ24uY29tghZz\r\n"
439     "dGF0aWMyLmdsb2JhbHNpZ24uY29tghNibG9nLmdsb2JhbHNpZ24uY29tghdzc2xj\r\n"
440     "aGVjay5nbG9iYWxzaWduLmNvbYIVc3lzdGVtLmdsb2JhbHNpZ24uY29tghhvcGVy\r\n"
441     "YXRpb24uZ2xvYmFsc2lnbi5jb22CDmdsb2JhbHNpZ24uY29tMAkGA1UdEwQCMAAw\r\n"
442     "HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMD8GA1UdHwQ4MDYwNKAyoDCG\r\n"
443     "Lmh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vZ3MvZ3NleHRlbmR2YWxnMi5jcmww\r\n"
444     "gYgGCCsGAQUFBwEBBHwwejBBBggrBgEFBQcwAoY1aHR0cDovL3NlY3VyZS5nbG9i\r\n"
445     "YWxzaWduLmNvbS9jYWNlcnQvZ3NleHRlbmR2YWxnMi5jcnQwNQYIKwYBBQUHMAGG\r\n"
446     "KWh0dHA6Ly9vY3NwMi5nbG9iYWxzaWduLmNvbS9nc2V4dGVuZHZhbGcyMB0GA1Ud\r\n"
447     "DgQWBBSvMoTDlFB0aVgVrNkkS1QSmYfx1zAfBgNVHSMEGDAWgBSwsEr9HHUo+Bxh\r\n"
448     "qhP2+sGQPWsWozANBgkqhkiG9w0BAQUFAAOCAQEAgnohm8IRw1ukfc0GmArK3ZLC\r\n"
449     "DLGpsefwWMvNrclqwrgtVrBx4pfe5xGAjqyQ2QI8V8a8a1ytVMCSC1AMWiWxawvW\r\n"
450     "fw48fHunqtpTYNDyEe1Q+7tTGZ0SQ3HljYY9toVEjAMDhiM0Szl6ERRO5S7BTCen\r\n"
451     "mDpWZF8w3ScRRY2UJc8xwWFiYyGWDNzNL1O8R2Y95QIkHUgQpSD3cjl4YvF/Xx/o\r\n"
452     "hBEzl884uNAggIyQRu0ImLEetEtHWB2w0pZG3nTAqjOAAAyH2Q8IHoJtjQzvg6fy\r\n"
453     "IQEO1C5GoQ7isiKIjKBXVYOm+gKSQXlzwj1BlU/OW6kEe24IiERhAN9ILA24wA==\r\n"
454     "-----END CERTIFICATE-----\r\n";
455 
456 static const char g_testCertWithPrivateKeyValid[] =
457     "-----BEGIN CERTIFICATE-----\r\n"
458     "MIIE0DCCA7igAwIBAgIIAziWeqd+Il8wDQYJKoZIhvcNAQELBQAwZDELMAkGA1UE\r\n"
459     "BhMCQ04xEDAOBgNVBAgTB0ppYW5nc3UxEDAOBgNVBAcTB05hbmppbmcxDzANBgNV\r\n"
460     "BAoTBnRlc3RDYTEPMA0GA1UECxMGdGVzdENhMQ8wDQYDVQQDEwZ0ZXN0Q2EwHhcN\r\n"
461     "MjMxMTIxMDkwNzAwWhcNMjQxMTIxMDkwNzAwWjBsMQswCQYDVQQGEwJDTjEOMAwG\r\n"
462     "A1UECBMFdGVzdDExDjAMBgNVBAcTBXRlc3QyMRMwEQYDVQQKEwp0ZXN0RW50aXR5\r\n"
463     "MRMwEQYDVQQLEwp0ZXN0RW50aXR5MRMwEQYDVQQDEwp0ZXN0RW50aXR5MIIBIjAN\r\n"
464     "BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlJYIV6tGD9ud/5oIKEU675s9bC4\r\n"
465     "u8T5QFz5/lBji9Msm8yIKw0A0f3ObUSnTiHK7N6HW8mifOR7Ol0qqyySsAAXOHaS\r\n"
466     "75uhLsGe33RUDudVqRRperdCtWoTKOAJ57bAf+a0YtSggoXbFD501FpD+PyAmJPd\r\n"
467     "8X2IpHVhlsKlclaG75uva8jmM8yGSprF/U7eNqQRC/AC+/chCWnU4EOhWwKGtNbv\r\n"
468     "83QiC5Bdkzg0XU86XSkSl5a1DBOlFKNaok96auEBUUqT2aqn7n+51CFIo+7gURrW\r\n"
469     "7lQA4CJrgVQ5E5067jn5gcCBTQ/769S1tyef7t0d3Ch7EbBlkCdk6GDr0QIDAQAB\r\n"
470     "o4IBfDCCAXgwHwYDVR0jBBgwFoAUEuUlpeu7/V4AKWsn3soGdQI5VW0wKwYDVR0Q\r\n"
471     "BCQwIoAPMjAyMzExMjEwMDAwMDBagQ8yMDI4MTEyMTAwMDAwMFowDAYDVR0TAQH/\r\n"
472     "BAIwADAdBgNVHQ4EFgQUEuUlpeu7/V4AKWsn3soGdQI5VW0wDAYDVR0PBAUDAwcD\r\n"
473     "gDApBgNVHSUEIjAgBggrBgEFBQcDBAYIKwYBBQUHAwgGCisGAQQBgjcCARUwGQYD\r\n"
474     "VR0RBBIwEIEOdGVzdDFAdGVzdC5jb20wFwYDVR0gBBAwDjAFBgMqAwQwBQYDKgIC\r\n"
475     "MFsGA1UdHgRUMFKgHjANggtleGFtcGxlLmNvbTANggtleGFtcGxlLm9yZ6EwMAqH\r\n"
476     "CAAAAAAAAAAAMCKHIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBEG\r\n"
477     "CWCGSAGG+EIBAQQEAwIGQDAeBglghkgBhvhCAQ0EERYPeGNhIGNlcnRpZmljYXRl\r\n"
478     "MA0GCSqGSIb3DQEBCwUAA4IBAQCmPFuLoIcOOkTaSiuPEu9XuNXkMAzNI3u92xhp\r\n"
479     "S4/LXPb9ruFBChYMsW6+1obSfDTx7553LhkH7X6Mt7AXKWmnSMY0yQJ/lPoGIIyB\r\n"
480     "Ir7D32aDPrZNBg5WxSzUkddbgEId8iILt9jAWAfvGHNJLiDtHh5bfTx1ZtSPvmON\r\n"
481     "+kG4XvRCn+KnP+ZWSsURXfLqNbs9pRSFk42S5FP4dUy3Ohij+U0/tnr0C6Kfakd8\r\n"
482     "pZ31DXtKBoID52qpVFziQkpLZSqXAUvO5v4X5RSZvN3PnCzBEng0NqS2SoaS0mMV\r\n"
483     "fAk3kUyZVj3fRpxEXYleD96l3gP4pP3mrS8pxPoqGzuIQoEU\r\n"
484     "-----END CERTIFICATE-----\r\n";
485 
486 extern const CfEncodingBlob g_crlDerInStream;
487 extern const CfEncodingBlob g_invalidCrlDerInStream;
488 extern const CfEncodingBlob g_inStreamCrl;
489 extern const CfEncodingBlob g_inStreamSelfSignedCaCert;
490 extern const CfEncodingBlob g_crlWithoutExtPemInStream;
491 extern const CfEncodingBlob g_crlWithBignumSerialInStream;
492 extern const CfEncodingBlob g_crlWhichEntryWithExtInStream;
493 extern const CfEncodingBlob g_inStreamCert;
494 extern const CfEncodingBlob g_inStreamIssuerCert;
495 extern const CfEncodingBlob g_inStreamChainDataP7b;
496 extern const CfEncodingBlob g_inStreamChainDataDer;
497 extern const CfEncodingBlob g_inStreamChainDataPem;
498 extern const CfEncodingBlob g_inStreamChainDataPemMid;
499 extern const CfEncodingBlob g_inStreamChainDataPemRoot;
500 extern const CfEncodingBlob g_inStreamChainDataPemNoRoot;
501 extern const CfEncodingBlob g_inStreamChainDataPemMidCRL;
502 extern const CfEncodingBlob g_inStreamChainPemNoRootHasPubKey;
503 extern const CfEncodingBlob g_inStreamChainPemNoRootLast;
504 extern const CfEncodingBlob g_inStreamChainDataPemDisorder;
505 extern const CfEncodingBlob g_inStreamChainDataPem163;
506 extern const CfEncodingBlob g_inStreamChainDataPemRoot163;
507 extern const CfEncodingBlob g_inStreamOcspResponderCert;
508 
509 const char *GetInvalidCertClass(void);
510 const char *GetInvalidCrlClass(void);
511 SubAltNameArray *ConstructSubAltNameArrayData();
512 CfArray *ConstructCertPolicyData();
513 const char *GetValidCrlClass(void);
514 const char *GetValidX509CertificateClass(void);
515 void FreeTrustAnchor(HcfX509TrustAnchor *&trustAnchor);
516 void BuildAnchorArr(const CfEncodingBlob &certInStream, HcfX509TrustAnchorArray &trustAnchorArray);
517 void FreeTrustAnchorArr(HcfX509TrustAnchorArray &trustAnchorArray);
518 void BuildCollectionArr(const CfEncodingBlob *certInStream, const CfEncodingBlob *crlInStream,
519     HcfCertCRLCollectionArray &certCRLCollections);
520 void FreeCertCrlCollectionArr(HcfCertCRLCollectionArray &certCRLCollections);
521 void FreeValidateResult(HcfX509CertChainValidateResult &result);
522 
523 #ifdef __cplusplus
524 }
525 #endif
526 #endif
527