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_CERT_CHAIN_DATA_PEM_H
17 #define CRYPTO_X509_CERT_CHAIN_DATA_PEM_H
18 
19 #include <stdint.h>
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 /*
26  * validity Validity SEQUENCE (2 elem)
27  *    notBefore Time UTCTime 2023-12-05 07:39:00 UTC  (*)
28  *    notAfter Time UTCTime 2024-10-31 23:59:00 UTC
29  *
30  * validity Validity SEQUENCE (2 elem)
31  *    notBefore Time UTCTime 2023-12-05 07:37:00 UTC
32  *    notAfter Time UTCTime 2024-09-01 23:59:00 UTC (*)
33  *
34  * validity Validity SEQUENCE (2 elem)
35  *    notBefore Time UTCTime 2023-12-05 00:00:00 UTC
36  *    notAfter Time UTCTime 2024-12-04 23:59:59 UTC
37  */
38 
39 #define TEST_SUBJECT_ALTERNATIVE_NAMES_SIZE 13
40 #define VARIABLE_ARRAY_SIZE_OFFSET 30
41 
42 struct VariableArray {
43     uint8_t size;
44     uint8_t data[VARIABLE_ARRAY_SIZE_OFFSET];
45 };
46 
47 static const char g_testCertChainValidatorCaCert[] =
48     "-----BEGIN CERTIFICATE-----\r\n"
49     "MIIFwTCCA6mgAwIBAgIUBfKGru//yxvdRovc8iW9U9dzgqMwDQYJKoZIhvcNAQEL\r\n"
50     "BQAwbzELMAkGA1UEBhMCQ0kxCzAJBgNVBAgMAmhuMQswCQYDVQQHDAJzaDELMAkG\r\n"
51     "A1UECgwCaGgxCzAJBgNVBAsMAmlpMQswCQYDVQQDDAJhYjEfMB0GCSqGSIb3DQEJ\r\n"
52     "ARYQY3J5cHRvQGhlbGxvLmNvbTAgFw0yMjA4MjAxMjIyMzZaGA8yMDYyMDgyMDEy\r\n"
53     "MjIzNlowbzELMAkGA1UEBhMCQ0kxCzAJBgNVBAgMAmhuMQswCQYDVQQHDAJzaDEL\r\n"
54     "MAkGA1UECgwCaGgxCzAJBgNVBAsMAmlpMQswCQYDVQQDDAJhYjEfMB0GCSqGSIb3\r\n"
55     "DQEJARYQY3J5cHRvQGhlbGxvLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC\r\n"
56     "AgoCggIBAOXkcX7cHglTySl4XmjwMhiyxhMQUSTnZtAyjIiudyJmr9q6Ci8OXGTz\r\n"
57     "yPKmvDejwKcWqwYNpSJstwLUl7o8nFgIJmC9zkQ2ZwdEr5gDNehuR9nNjD55tVKD\r\n"
58     "68svuLGEWbyFI9AL8p578VPTex18KnLYTnJzYu2rVslFNBzQFVNyFPGhbN/ZEcnE\r\n"
59     "ICW4qFovuqNdWH/R9wuyilF08CJjBdXAfFvukooleM3Ip/FNSNb0ygs9N+GnxKuw\r\n"
60     "xybcgC/qZlPHtnl03ebI7/gRgL863E7SZR1lDIMFQ35+Z+TcM4SPqbokNr+nCiUV\r\n"
61     "hmTW56rZJSLDDKvzHzSbon1atd7bjjWWDA/FkUZtvjrP+IVHe+McOS1pDxUOyUv6\r\n"
62     "2YiRD6UkHADAqK0shEo/ejbd92CRbobVLapY9GJ0VOolE061PeNDiy/cMI1ihhbB\r\n"
63     "bq6S5YN/mnjgn0ylDD/6SA4rcc8Pep7ubXSVzhp/mugkJltDvYWoTO8rtZJryqP7\r\n"
64     "hehpJ8lZ1sGjlBE+1H4673wqx+HeGToGpBwrXM+3mKa27KDMtSRt0CvLuycR1SIW\r\n"
65     "FmZXy8n8eVemeA4d9flSYak2Mv5PPXttpSM58rylI2BoSTJgxN/j1tE1Lo8hadwp\r\n"
66     "i5g68H0Fd19HONd+LFxAhpgJ2ZUJb3qoGypEy1J322FCq6djIrIXAgMBAAGjUzBR\r\n"
67     "MB0GA1UdDgQWBBRH2csGuD+kwo6tU03rVbR5dtBhfjAfBgNVHSMEGDAWgBRH2csG\r\n"
68     "uD+kwo6tU03rVbR5dtBhfjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUA\r\n"
69     "A4ICAQCovX+y4fN27gjPZuT1x8Lbm1c6UPcraWOUx5fQq7gpbxGhkWvcNWDEM6FD\r\n"
70     "9bNIT3oA0YiiUqPVOG+2pYiDEwsQJbwgrHZmQIYaufMZevO+a5I4u6FHttj05/ju\r\n"
71     "Z/j5xVECUWIpGFIl+q9U8B5dZ7GbI5zMNZ+k1/KWt+6x5zqRYU1ysxlxITokVfzq\r\n"
72     "Bu/DtMGqsrw36FqGEVUc0kYHGW9gwsNLXmw+YMpQMinAOE8uU0Pw8wtQeX9UcA+b\r\n"
73     "UdP4v9R7YkEtE3rfUCZ1pilEEB5XoklOPn6HYwAhrSB8gb1Ar8gmLUcbO0BT85yS\r\n"
74     "oPLJcw/m8XFC8Dj9ZFU25ux4lhvwmRs9HFFcBUJtYxB13UdfqlFTAlZdtPWi00IQ\r\n"
75     "C7MujV0ijoR6PnntwpBhLHIry1XZxzkrHmuJGQuZO7Taf9FyblrydIprkRyLZRSj\r\n"
76     "r3j1va/amhZZZeKZu1A8KLmTK/VF1IU8f9vMBbmrI6Rx0hgmwOr4kVexDdKyhuZw\r\n"
77     "U0u0HqJMJR1Vin93IFMRE63hjNno3NPL7d0mlhmwjEywrY0MmXYiQ6ag8o0PYAXg\r\n"
78     "Nr8NxOEvBY7ZOkWd2deJIyARDEc9nPcY46MiwowJ6bPMVPCXYGOxSfRpvY5SEjgj\r\n"
79     "llVnK3ULIM3AfVqDe7n3GnD4pHbHZQPLGpq0bQH9JUnCraB60g==\r\n"
80     "-----END CERTIFICATE-----\r\n";
81 
82 static const char g_testCertChainValidatorSecondCaCert[] =
83     "-----BEGIN CERTIFICATE-----\r\n"
84     "MIIFvDCCA6SgAwIBAgIUZDZSgan7tFvmeMmUD80kk+opOZwwDQYJKoZIhvcNAQEL\r\n"
85     "BQAwbzELMAkGA1UEBhMCQ0kxCzAJBgNVBAgMAmhuMQswCQYDVQQHDAJzaDELMAkG\r\n"
86     "A1UECgwCaGgxCzAJBgNVBAsMAmlpMQswCQYDVQQDDAJhYjEfMB0GCSqGSIb3DQEJ\r\n"
87     "ARYQY3J5cHRvQGhlbGxvLmNvbTAeFw0yMjA4MjAxMjI4MDhaFw00MjA4MjAxMjI4\r\n"
88     "MDhaMHwxCzAJBgNVBAYTAkNOMQ4wDAYDVQQIDAVIVU5BTjERMA8GA1UEBwwIU0hB\r\n"
89     "R05IQUkxCzAJBgNVBAoMAmhoMQswCQYDVQQLDAJpaTEPMA0GA1UEAwwGYXV0aG9y\r\n"
90     "MR8wHQYJKoZIhvcNAQkBFhBjcnlwdG9AaGVsbG8uY29tMIICIjANBgkqhkiG9w0B\r\n"
91     "AQEFAAOCAg8AMIICCgKCAgEAuSVyrlsC5nO+64mTYGAVJb1bdRJhz7ATMy2CE2AC\r\n"
92     "yo/RAl2p4Yoz8uJ6U23Ip4F+HmAGqXnIRGezwb+U1XaMkxX6WJQybngbYhdJX0As\r\n"
93     "rElz2CZsh0ZE9bsfAakpMtSrCm7RCucHxDD9R6WDWO2p3ARq8QbmLPk6M0tl9Ibo\r\n"
94     "4y/nJ84rvNfEkjgVNnWh3JLJ8a9OnaPBm+3j/1fPhzcTAo5VAXzEcUomxoV/JZdU\r\n"
95     "Dc0uFjqVeG9svMEx0dbn/xYrPm3OygmNjmbwuWkU9wx1aBDB0k5EwZ2pEagus7Wb\r\n"
96     "Qx37MryvLIMZIlOfqCnygwi478FLD2Ml0+1S/3VQR8S4MptlPrlpfNtkFuh5In/l\r\n"
97     "EgN340I8cdQfv4ZFlZ1BcFhz09MYJFo+toQm62umoZFBdH76wy634FGb1JlhJv6v\r\n"
98     "MguyM8QUTYsF9NBLXKqT5GtuiK4paqwwiNz/mu7ulfxAwKh2u5Jiw0xd+QCNNk3d\r\n"
99     "i3Kchx0ZtomjvmHQh57OZRRfO3lNplnujd9/4oloP+N4xGZ9Uknw9KH+Xx0VZy68\r\n"
100     "1luyaW2BtEKc3K5vcFBAt8FSSAYp9/bJbqfXNIDLPJogQ8EKsccOfs/IiMDP3Wgt\r\n"
101     "T3v1Cr76z+dbBo05fHew3n2Y5STCnxnxxth/jo59bO6IeUhN+kfnnKGA7uxwPppk\r\n"
102     "/CECAwEAAaNDMEEwDAYDVR0TBAUwAwEB/zAxBgNVHR8EKjAoMCagJKAihiBodHRw\r\n"
103     "czovL2NhLnhpZXhpYW5iaW4uY24vY3JsLnBlbTANBgkqhkiG9w0BAQsFAAOCAgEA\r\n"
104     "KVB7IIZ2WHSvRLnkMkaDdIu37l60VMhj79MfOTTI/0CcZ0p8G+fqOKGTCtOTFLfz\r\n"
105     "nXCgDOYH9F5tugLLd9B7FiLys5eBdXRym22BHs/jtzUXFrxSFWBhxvW0cwCwy59g\r\n"
106     "5c/vX3QcvliJfjaLq67CwHIdKlKocogJp1qeROy7HfLQMQJHE/Fc30QZXp5bJcmg\r\n"
107     "KDYGdvrgKGpzgf4zjOYH+OMhwB2G9Nd6en7TCihq3A8HiGj+M3OzrKgWR4qiHmPg\r\n"
108     "3SX7njPLPVerly+o8oh2pSwxSLQMKgPHpbvMHIr5vRIAklGg2TP7WV5+Wc+MC+Ls\r\n"
109     "fZ5M7WSZWD6BV2XIHA2iM3N7wYzvH0lNlgR1Pu8vhflPfSjFouILbEHnsokHPsUd\r\n"
110     "bxnNmOyMpCDCg3cjuZYIyjAIB/OoADAekAHX3cAitBBzzD9MBK/UXRkMded6JVwf\r\n"
111     "bZGq+2LLNzXzqMWQeCcGocRHiV+7uw3klLANfF9NyXvW6FYN50LhnoroGwsuGetY\r\n"
112     "22F/8s1N0oC7Ucn/JmZUA9xjaCDEeoTDoefv8/3zSr2sR6wR7hIHgvC9NNOTzdSS\r\n"
113     "Rqc3AfUz90kdsAoZowql7CrZy7LiqzaJMy1F+2H8jmzfCV6DBaCYgzlBGS/dq/Q7\r\n"
114     "A9kbZrfCeb/yEgz0h0LrWnBWww7r2T+Hk4LQ/jLtC1Q=\r\n"
115     "-----END CERTIFICATE-----\r\n";
116 
117     static const char g_testCertChainValidatorInvalidCaCert[] =
118     "-----BEGIN CERTIFICATE-----\r\n"
119     "MIIFwTCCA6mgAwIBAgIUBQorsmfkw1hrf85bkGSOiJLFCfYwDQYJKoZIhvcNAQEL\r\n"
120     "BQAwezELMAkGA1UEBhMCQ04xETAPBgNVBAgMCFNIQU5HSEFJMREwDwYDVQQHDAhT\r\n"
121     "SEFOR0hBSTELMAkGA1UECgwCQUExCzAJBgNVBAsMAkJCMQswCQYDVQQDDAJDQzEf\r\n"
122     "MB0GCSqGSIb3DQEJARYQc2Vjb25kQGhlbGxvLmNvbTAeFw0yMjA4MjMxMTM4NDNa\r\n"
123     "Fw00MjA4MjMxMTM4NDNaMHoxCzAJBgNVBAYTAkNBMREwDwYDVQQIDAhTSEFOR0hB\r\n"
124     "STERMA8GA1UEBwwIU0hBTkdIQUkxCzAJBgNVBAoMAkFBMQswCQYDVQQLDAJCQjEL\r\n"
125     "MAkGA1UEAwwCQ0MxHjAcBgkqhkiG9w0BCQEWD3RoaXJkQGhlbGxvLmNvbTCCAiIw\r\n"
126     "DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMoRJDPA4mVDVgO7TGQqFZh4OxbV\r\n"
127     "uGaYmlEIVMwadsjA16l7xKB25bX7WmzHVDgZaJ0zJIyxbXXKvlmELS4mqDVmHUhh\r\n"
128     "sDHM+N00LVjV70F0xjaMRb1s6hOWlQ8Y314iDjW+c1lcHhWFliXqIp2Y7/c2QNKH\r\n"
129     "cRd+cqBzR45a9axHQTxS5ajTmLBSSAuSi3u1uVnA7BE7e0i0WSiISOtWiKoqG/R4\r\n"
130     "o+6llKg68LY0zHdWPyHn6F3aTvP+OJN+NHM+2onovpujDI28sTMRKeT92h/Ubf+s\r\n"
131     "q+kD25ADBZbq5kOXKq2m2jyh3RHSrxoPRyVUCFfWeqJk2ZUyOleHqV+orOCvTM37\r\n"
132     "LfbgIG6vchwMRnZHNBYWIm0BYkyo+O9wFV2+wC9iQwk/k+st9sQYNNwH6C2gzNnQ\r\n"
133     "WHgEYbGRSiUYsyXvkoUjw2gsBZJHjtKBNEqVwUA+yapbVRPsIPnzMr2IcLj9K2LM\r\n"
134     "FxOtpuliUjg/pqb4r5m83ZJQDBT3mvJr3NWbzbFKhqIaZyjjacCWr0vaumRsryEz\r\n"
135     "FwOVUZoPvLz/CgTAOAoouxGPs7qJhXb5CtXLdC15U9IEtsP88SExFa4gvO9nZPHE\r\n"
136     "HW9rc8/kppulsPGEDeZxYonGnk8l55ORqjmxcUQnWxWG1sqz4oTwUifWf9cybwMS\r\n"
137     "PpDQ4piAyncWY2jbAgMBAAGjPjA8MAwGA1UdEwQFMAMBAf8wLAYDVR0fBCUwIzAh\r\n"
138     "oB+gHYYbaHR0cHM6Ly9jYS50aGlyZC5jbi9jcmwucGVtMA0GCSqGSIb3DQEBCwUA\r\n"
139     "A4ICAQA0CP5FEccMxxd83S0IL5uwNCPPBzN3qHGZWm1PJD4dvbzsB5AtWbhDvfvD\r\n"
140     "GQRvfH83t3701U2J7wAUuFgG8UCNVKLSLfSv3Gqo5wKhEnZcoE0KZot56IA+lwVe\r\n"
141     "LfwAYgrzPMOWl1pyQ/BE5BcKthS/7OTH7qdNHc0J59xsanKFU9jnGEjfZv14XSRo\r\n"
142     "/iCM9ZIb4tVETnGFVfjp3Rjgnw2OZjdJcfVLIF/zTlkkGOQLqfyJqoafy0MIuM/k\r\n"
143     "nosPXJHX7tqQs5+ckKhPRkBltGsoLv2HzoIGiiGLvFmulvkyUd9FDq8UwfetAKU6\r\n"
144     "BTO6ZkjeS0S+2SBZ29Hm5F2xMoQjTtzYkmxCxbhFkAF2SWvR+hVXoOsAgG2csU15\r\n"
145     "ef+IgUw1aX7RK2OxYEYvX9BFLaoc8zima+ZzUbScZznVsyPGLZl+7tiOkQVFUSOY\r\n"
146     "F2TJqRXT8Obb0gQ1rHfU+ilDuP3+eUuUFfmzInqXTkGDArDEkwKoHezXgHhsvLTu\r\n"
147     "vBYSV/GOZHduz4WmiPQri3CkntSe4/JWeYoJHD+IWBO/Czvh6nNOciRxZSif917h\r\n"
148     "FQ6og3z/5CyHLd7EWKX/CwUqZ0jmGUdGoaO5i7xTeVzYGpkPzoTTRUv2T/go3roE\r\n"
149     "3hd5yG48AaYNKhJ26auBrOARpJe/ktKZTMuU3zHuPRtv3Wtdiw==\r\n"
150     "-----END CERTIFICATE-----\r\n";
151 
152 static const char g_testSelfSignedCaCertValid[] =
153     "-----BEGIN CERTIFICATE-----\r\n"
154     "MIIDHTCCAgWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0\r\n"
155     "IE5DIENBIDEwIBcNMjExMjAyMTcyNTAyWhgPMjEyMTEyMDMxNzI1MDJaMDwxIzAh\r\n"
156     "BgNVBAoMGkdvb2QgTkMgVGVzdCBDZXJ0aWZpY2F0ZSAxMRUwEwYDVQQDDAx3d3cu\r\n"
157     "Z29vZC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDqx1t7HiPe\r\n"
158     "kRAWdiGUt4pklKGZ7338An6R7/y0e/8Grx2jeUfyc19BAB7MW1p8L+zdMjbclNE0\r\n"
159     "UZ6RZZNexfgMksNI/nW+4Lzu8qu2wFx1MjbTpMT8w/vnsGBMthxLu6+2wdnpdD1B\r\n"
160     "0led8xu7PSBgVULqyHcUvoLeRGEsB14yGx7dbIsokYxno1nr4u3BK5ic9KTTSxJR\r\n"
161     "Ig93qwo2pAZR7mfnOo33B9alhzvSwmEKJ9v7pERDnIP5ED0HaWFAeXl7GFgoH2y9\r\n"
162     "QDyJVuwWsoSWIx4Mr8UIr0IbVJU6KsqEiqqc5P5rX/y4tYMkpHZd9U1EONd2uwmX\r\n"
163     "dwSp0LEmQb/DAgMBAAGjTTBLMB0GA1UdDgQWBBSfJPZqs1tk+xjjDrovr13ORDWn\r\n"
164     "ojAfBgNVHSMEGDAWgBQI0Zv55tVkcKDxaxqe7VLa3fVQQzAJBgNVHRMEAjAAMA0G\r\n"
165     "CSqGSIb3DQEBCwUAA4IBAQAEKXs56hB4DOO1vJe7pByfCHU33ij/ux7u68BdkDQ8\r\n"
166     "S9SNaoD7h1XNSmC8kKULvpoKctJzJxh1IH4wtvGGGXsUt1By0a6Y5SnKW9/mG4NM\r\n"
167     "D4fGea0G2AeI8BHFs6vl8voYK9wgx9Ygus3Kj/8h6V7t2zB8ZhhVqpZkAQEjj0C2\r\n"
168     "1IV273wD0VdZl7uB+MEKk+7eTjNMeo6JzlBBf5GhtA1WbLNdszMfI0ljo7HAX+9L\r\n"
169     "yco0xKSKkZQ+v7VdJBfC6odp+epPMZqfyHrkFzUr8XRJfriP1lydPK7AbXLVrLJg\r\n"
170     "fIXCvUdxQx4B1LaclUDORL5r2tRhRYdAEKtUz7RpQzJK\r\n"
171     "-----END CERTIFICATE-----\r\n";
172 
173 static const uint8_t g_testChainPubkeyPemRootData[] = { 0x30, 0x2A, 0x30, 0x05, 0x06, 0x03, 0x2B, 0x65, 0x70, 0x03,
174     0x21, 0x00, 0xBB, 0x16, 0x9D, 0x8F, 0x5C, 0x30, 0xD0, 0xBA, 0x8F, 0x37, 0x6E, 0x33, 0xAF, 0x6F, 0x23, 0x71, 0x23,
175     0xA5, 0x49, 0x60, 0x1E, 0xD1, 0x07, 0x4B, 0xC9, 0x11, 0x7E, 0x66, 0x01, 0xBA, 0x92, 0x52 };
176 
177 static const uint8_t g_testChainPubkeyPemRootHasPubKey[] = { 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE,
178     0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xC9, 0xC1,
179     0x89, 0x06, 0x0E, 0x5A, 0xDC, 0x3D, 0xE2, 0x04, 0xBE, 0x53, 0x5C, 0xA0, 0xD8, 0xC1, 0x36, 0x43, 0x19, 0x7B, 0xAC,
180     0xDF, 0xB6, 0x86, 0x8C, 0x0B, 0x0C, 0x60, 0x13, 0xD4, 0xAC, 0x14, 0xAB, 0x4E, 0xC8, 0xEC, 0x16, 0x1F, 0x0E, 0xAE,
181     0x43, 0x5A, 0x7B, 0xA0, 0x9E, 0x80, 0x18, 0x24, 0x73, 0x4C, 0x0F, 0x7F, 0xDE, 0x85, 0xBA, 0x8B, 0x3D, 0x69, 0xC9,
182     0x53, 0x42, 0x24, 0x03, 0xE1 };
183 
184 static const uint8_t g_testChainSubjectPemRootData[] = { 0x30, 0x5a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
185     0x06, 0x13, 0x02, 0x45, 0x4e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x07, 0x45, 0x6e, 0x67,
186     0x6c, 0x61, 0x6e, 0x64, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x06, 0x4c, 0x6f, 0x6e, 0x64,
187     0x6f, 0x6e, 0x31, 0x0c, 0x30, 0x0a, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x03, 0x74, 0x73, 0x31, 0x31, 0x0c, 0x30,
188     0x0a, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x03, 0x74, 0x73, 0x31, 0x31, 0x0c, 0x30, 0x0a, 0x06, 0x03, 0x55, 0x04,
189     0x03, 0x13, 0x03, 0x74, 0x73, 0x31 };
190 
191 static const uint8_t g_testChainSubjectPemOtherSubjectData[] = { 0x30, 0x6e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55,
192     0x04, 0x06, 0x13, 0x02, 0x43, 0x4e, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x09, 0x67, 0x75,
193     0x61, 0x6e, 0x67, 0x64, 0x6f, 0x6e, 0x67, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x09, 0x73,
194     0x68, 0x65, 0x6e, 0x7a, 0x68, 0x65, 0x6e, 0x67, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08,
195     0x74, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x6f, 0x74, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x08,
196     0x74, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x6f, 0x74, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x08,
197     0x74, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x6f, 0x74 };
198 
199 static const uint8_t g_testChainPubkeyPemNoRootLast[] = { 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE,
200     0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xC0, 0xE7,
201     0x66, 0x0A, 0x74, 0x6F, 0xDB, 0xDF, 0x6C, 0x94, 0xE1, 0xAE, 0x7A, 0xCF, 0xB3, 0xD9, 0xA5, 0x24, 0x95, 0x51, 0x11,
202     0x13, 0xEA, 0x92, 0x13, 0x51, 0x6B, 0x28, 0x8C, 0x51, 0x0B, 0x8F, 0xF8, 0xED, 0x87, 0xAC, 0x7F, 0xA0, 0x5B, 0xB8,
203     0x34, 0x4A, 0xBF, 0x3F, 0x86, 0x4B, 0x27, 0xF8, 0x09, 0xE5, 0x6F, 0xF6, 0xC6, 0x66, 0x8D, 0x45, 0xA2, 0x6E, 0x17,
204     0xBD, 0x52, 0xAF, 0x83, 0x00 };
205 
206 static const uint8_t g_testChainSubjectPemNoRootLastUp[] = { 0x30, 0x2d, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
207     0x06, 0x13, 0x02, 0x43, 0x4e, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x04, 0x74, 0x65, 0x73,
208     0x74, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x63, 0x61 };
209 
210 static const uint8_t g_testChainPubkeyPemNoRootLastUp[] = { 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce,
211     0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0xc9, 0xc1,
212     0x89, 0x06, 0x0e, 0x5a, 0xdc, 0x3d, 0xe2, 0x04, 0xbe, 0x53, 0x5c, 0xa0, 0xd8, 0xc1, 0x36, 0x43, 0x19, 0x7b, 0xac,
213     0xdf, 0xb6, 0x86, 0x8c, 0x0b, 0x0c, 0x60, 0x13, 0xd4, 0xac, 0x14, 0xab, 0x4e, 0xc8, 0xec, 0x16, 0x1f, 0x0e, 0xae,
214     0x43, 0x5a, 0x7b, 0xa0, 0x9e, 0x80, 0x18, 0x24, 0x73, 0x4c, 0x0f, 0x7f, 0xde, 0x85, 0xba, 0x8b, 0x3d, 0x69, 0xc9,
215     0x53, 0x42, 0x24, 0x03, 0xe1 };
216 
217 static const uint8_t g_testChainSubjectPemNoRootLast[] = { 0x30, 0x2c, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
218     0x06, 0x13, 0x02, 0x43, 0x4e, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x04, 0x74, 0x65, 0x73,
219     0x74, 0x31, 0x0e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x05, 0x73, 0x75, 0x62, 0x63, 0x61 };
220 
221 const uint8_t g_testIssuer[] = { 0x30, 0x76, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43,
222     0x4E, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0C, 0x02, 0x42, 0x4A, 0x31, 0x0B, 0x30, 0x09, 0x06,
223     0x03, 0x55, 0x04, 0x07, 0x0C, 0x02, 0x42, 0x4A, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x0C, 0x02,
224     0x48, 0x44, 0x31, 0x0C, 0x30, 0x0A, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x0C, 0x03, 0x64, 0x65, 0x76, 0x31, 0x0B, 0x30,
225     0x09, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x02, 0x63, 0x61, 0x31, 0x25, 0x30, 0x23, 0x06, 0x09, 0x2A, 0x86, 0x48,
226     0x86, 0xF7, 0x0D, 0x01, 0x09, 0x01, 0x16, 0x16, 0x63, 0x61, 0x40, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6F, 0x66, 0x72,
227     0x61, 0x6D, 0x65, 0x77, 0x6F, 0x72, 0x6B, 0x2E, 0x63, 0x6F, 0x6D };
228 
229 const uint8_t g_testSubject[] = { 0x30, 0x76, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x43,
230     0x4E, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0C, 0x02, 0x42, 0x4A, 0x31, 0x0B, 0x30, 0x09, 0x06,
231     0x03, 0x55, 0x04, 0x07, 0x0C, 0x02, 0x42, 0x4A, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x0C, 0x02,
232     0x48, 0x44, 0x31, 0x0C, 0x30, 0x0A, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x0C, 0x03, 0x64, 0x65, 0x76, 0x31, 0x0B, 0x30,
233     0x09, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x02, 0x63, 0x61, 0x31, 0x25, 0x30, 0x23, 0x06, 0x09, 0x2A, 0x86, 0x48,
234     0x86, 0xF7, 0x0D, 0x01, 0x09, 0x01, 0x16, 0x16, 0x63, 0x61, 0x40, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6F, 0x66, 0x72,
235     0x61, 0x6D, 0x65, 0x77, 0x6F, 0x72, 0x6B, 0x2E, 0x63, 0x6F, 0x6D };
236 
237 const struct VariableArray g_testSubjectAlternativeNames[TEST_SUBJECT_ALTERNATIVE_NAMES_SIZE] = {
238     { 20, { 0x82, 0x12, 0x77, 0x77, 0x77, 0x2E, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x73, 0x69, 0x67, 0x6E, 0x2E, 0x63,
239             0x6F, 0x6D } },
240     { 23, { 0x82, 0x15, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2E, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x73, 0x69, 0x67,
241             0x6E, 0x2E, 0x63, 0x6F, 0x6D } },
242     { 19, { 0x82, 0x11, 0x74, 0x68, 0x2E, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x73, 0x69, 0x67, 0x6E, 0x2E, 0x63, 0x6F,
243             0x6D } },
244     { 20, { 0x82, 0x12, 0x64, 0x65, 0x76, 0x2E, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x73, 0x69, 0x67, 0x6E, 0x2E, 0x63,
245             0x6F, 0x6D } },
246     { 21, { 0x82, 0x13, 0x69, 0x6E, 0x66, 0x6F, 0x2E, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x73, 0x69, 0x67, 0x6E, 0x2E,
247             0x63, 0x6F, 0x6D } },
248     { 24, { 0x82, 0x16, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x2E, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x73, 0x69,
249             0x67, 0x6E, 0x2E, 0x63, 0x6F, 0x6D } },
250     { 24, { 0x82, 0x16, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x31, 0x2E, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x73, 0x69,
251             0x67, 0x6E, 0x2E, 0x63, 0x6F, 0x6D } },
252     { 24, { 0x82, 0x16, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x32, 0x2E, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x73, 0x69,
253             0x67, 0x6E, 0x2E, 0x63, 0x6F, 0x6D } },
254     { 21, { 0x82, 0x13, 0x62, 0x6C, 0x6F, 0x67, 0x2E, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x73, 0x69, 0x67, 0x6E, 0x2E,
255             0x63, 0x6F, 0x6D } },
256     { 25, { 0x82, 0x17, 0x73, 0x73, 0x6C, 0x63, 0x68, 0x65, 0x63, 0x6B, 0x2E, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x73,
257             0x69, 0x67, 0x6E, 0x2E, 0x63, 0x6F, 0x6D } },
258     { 23, { 0x82, 0x15, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x73, 0x69, 0x67,
259             0x6E, 0x2E, 0x63, 0x6F, 0x6D } },
260     { 26, { 0x82, 0x18, 0x6F, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C,
261             0x73, 0x69, 0x67, 0x6E, 0x2E, 0x63, 0x6F, 0x6D } },
262     { 16, { 0x82, 0x0E, 0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x73, 0x69, 0x67, 0x6E, 0x2E, 0x63, 0x6F, 0x6D } }
263 };
264 
265 const uint8_t g_testAuthorityKeyIdentifier[] = { 0x30, 0x16, 0x80, 0x14, 0xB0, 0xB0, 0x4A, 0xFD, 0x1C, 0x75, 0x28, 0xF8,
266     0x1C, 0x61, 0xAA, 0x13, 0xF6, 0xFA, 0xC1, 0x90, 0x3D, 0x6B, 0x16, 0xA3 };
267 
268 const uint8_t g_testExtendedKeyUsage[] = { 0x31, 0x2e, 0x33, 0x2e, 0x36, 0x2e, 0x31, 0x2e, 0x35, 0x2e, 0x35, 0x2e, 0x37,
269     0x2e, 0x33, 0x2e, 0x31, 0x00 };
270 
271 const uint8_t g_testNameConstraints[] = { 0x16, 0x0b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f,
272     0x6d };
273 
274 const uint8_t g_testNameConstraintsEDIParty[] = { 0x30, 0x04, 0xa1, 0x02, 0x1f, 0x00 };
275 const uint8_t g_testNameConstraintsEDIPartyInvalid[] = { 0x30, 0x04, 0xa1, 0x02, 0x1f, 0x01 };
276 const uint8_t g_testNameConstraintsIPADDR[] = { 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
277 
278 const uint8_t g_testCertPolicy[] = { 0x31, 0x2e, 0x33, 0x2e, 0x36, 0x2e, 0x31, 0x2e, 0x34, 0x2e, 0x31, 0x2e, 0x34, 0x31,
279     0x34, 0x36, 0x2e, 0x31, 0x2e, 0x31, 0x00 };
280 
281 const char g_testPrivateKeyValid[] = "241121-00:00:00Z";
282 const char g_testPrivateKeyInvalid[] = "abc";
283 
284 const uint8_t g_testSubjectKeyIdentifier[] = { 0x04, 0x14, 0xAF, 0x32, 0x84, 0xC3, 0x94, 0x50, 0x74, 0x69, 0x58, 0x15,
285     0xAC, 0xD9, 0x24, 0x4B, 0x54, 0x12, 0x99, 0x87, 0xF1, 0xD7 };
286 
287 const char g_testUpdateDateTime[] = "20250101080000Z";
288 
289 #ifdef __cplusplus
290 }
291 #endif
292 #endif
293