Merge branch 'upstream' into tizen
[platform/upstream/gnutls.git] / tests / pcert-list.c
1 /*
2  * Copyright (C) 2015 Red Hat, Inc.
3  *
4  * Author: Nikos Mavrogiannopoulos
5  *
6  * This file is part of GnuTLS.
7  *
8  * GnuTLS is free software; you can redistribute it and/or modify it
9  * under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * GnuTLS is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with GnuTLS; if not, write to the Free Software Foundation,
20  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
21  */
22
23 #ifdef HAVE_CONFIG_H
24 #include <config.h>
25 #endif
26
27 #include <stdio.h>
28 #include <stdlib.h>
29 #include <string.h>
30 #include <errno.h>
31 #include <gnutls/gnutls.h>
32 #include <gnutls/abstract.h>
33 #include <gnutls/x509.h>
34 #include "utils.h"
35
36 /* This tests functions related to pcert-lists
37  */
38
39 #define CERT0 \
40 "-----BEGIN CERTIFICATE-----\n" \
41 "MIIEITCCAomgAwIBAgIMVsXM+TCHHodT4TxYMA0GCSqGSIb3DQEBCwUAMA8xDTAL\n" \
42 "BgNVBAMTBENBLTIwIBcNMTYwMjE4MTM1NDAxWhgPOTk5OTEyMzEyMzU5NTlaMBMx\n" \
43 "ETAPBgNVBAMTCHNlcnZlci0zMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKC\n" \
44 "AYEAs6z83Jg9XjIuBb87zm6uuBjGG+45IpSw6gRgU/1izgBUofefrkdvjhpneBYU\n" \
45 "7PySNxTcyKUe1ZijKAYwck5jE76Y/xKNdMffgYqXOusCij7xutssdtvYw7yJjUHv\n" \
46 "43+zqbydONRNebO8qw1/BGXzKCsAE83iYumxJxSkwTsq04Kp9vrfW6zaTpa3VGq5\n" \
47 "wYPBT+neszrT9/E/Bn+QJh66US+EYnl+TlI5XTp4J0XqGP8PB1OYG/WPPjdRgv7j\n" \
48 "C/dSsEaLmV2YdQWjPRqZ+hxQbRJbLaJ9b7czBSdK1lhefAKshUEV+SGQI2MzEVGW\n" \
49 "lP4tLpIhiy33fNWpnkhbxxsa/NnIS2Vb8JvQidKdgQLsJL8hRJ/it41B4JGiaBnM\n" \
50 "uQmIwr+DFbVs2ibm2VlV1oNB1DrFOAYNURSIUJM0th+Wj4vI9hnwIVeUY/u3Dk5V\n" \
51 "bhks+JfbPLmbJ7Tx9JiBCes7isuxNCtWrWRDUQj71IqCc2+iV86Q+gw3rcpLeLYN\n" \
52 "yv3PAgMBAAGjdzB1MAwGA1UdEwEB/wQCMAAwFAYDVR0RBA0wC4IJbG9jYWxob3N0\n" \
53 "MA8GA1UdDwEB/wQFAwMHoAAwHQYDVR0OBBYEFEnsKuMM/IbHLD1TnAK78YwFx0VF\n" \
54 "MB8GA1UdIwQYMBaAFFGRr1BCIq0AHmB59tUBsghMjvz/MA0GCSqGSIb3DQEBCwUA\n" \
55 "A4IBgQB0i38qq4/os7MIhUFnBFD/eduk5B+jaGvPTM8lsZJ/17BbiMBc5dyxjMVY\n" \
56 "WYsm+KI5XEddBEqMYYwjdO/aoJzFLkkDu7E+UnygVZmMdQONuoyeQ/IrLk3l3zGi\n" \
57 "JJlylxFBNkns+a4AnXwSAv/ZiZapjQQUX378IxOpZuqzELAPqCkqp/6LyJApDiVV\n" \
58 "9av7WWySG5Wtp8lNs8o8l8ZxU14++fwo1euH0mQ4AM2DGLAhQSdOqChmROWt4MPd\n" \
59 "7raaO8dl6wMI83OgOHIhZlvlmmZTYqbpPXYm/2lM9ePBU/bkA7Y/X7HFDbTIBH9Y\n" \
60 "rkVZyq3FYPUtYRyqQXa8s730MQBxGmVZkKptCZjLDziZF4sAZGX78EyDeSl3Z3Jg\n" \
61 "I5JGLsdznHlhqEx8hNJnYtINVv1arn2UHO7p3/cB8VXt2UdQP+YJYdVzCvT4WW1E\n" \
62 "PvzTI6JbcwDpOs0MxRIrXrhgEZWylk0W93FO1WErd1+Sn3LZqvrtyXLzYB9wCl1I\n" \
63 "A34kGlE=\n" \
64 "-----END CERTIFICATE-----\n"
65
66 static unsigned char server_cert_pem[] =
67 CERT0
68 "-----BEGIN CERTIFICATE-----\n"
69 "MIIEFDCCAnygAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0x\n"
70 "MCAXDTE2MDIxODEzNTQwMVoYDzk5OTkxMjMxMjM1OTU5WjAPMQ0wCwYDVQQDEwRD\n"
71 "QS0yMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAu1/IharA+97QfzDj\n"
72 "UXEBl9TAFqHkN9B5erj1yhMlwPAakreStR8VvuCx46TA3gP7sbUYU811T+2D5/GU\n"
73 "u7YuMWsFeSmGWvbxa/tKTpXoEM0bNV+rIbxAcfgtxbARZDocv8gxfG/70vc2dSDh\n"
74 "KgZCoMQyO6qGLRdsoPAf+De7YD8sKS7Q3d3Xnfyv4AVnDkbAVFsZhu4lQFuWXyfG\n"
75 "Sl95TT94wLDLdf/Gf/F0nNsv6+D6yb15afhJKdqo6PH19gsyE0U3zj6c/7abha2W\n"
76 "fvVe6hVbaW1HLDZdHZnjlJHamNFdrOHI5Xi+SJO7/3MWvdTzdMVFBDfS5o7TvYyS\n"
77 "pu6iTmVeJvJ1OpXV7Lw1M2dSTW9RJLzUF3fXYOsuh32qMel9IzhnVh8Veyl0I0WL\n"
78 "hThmkF73mGWcVq4lMPXwEnwYJtRLeH5HWvG3rgmb7m827XMNnqKE0NOkPH63OUqJ\n"
79 "0h4b6PBb6wiOgnsC3yZIf0KgB0gToySvmD6MyJsmbN9rQit1AgMBAAGjeTB3MA8G\n"
80 "A1UdEwEB/wQFMAMBAf8wEwYDVR0lBAwwCgYIKwYBBQUHAwkwDwYDVR0PAQH/BAUD\n"
81 "AwcEADAdBgNVHQ4EFgQUUZGvUEIirQAeYHn21QGyCEyO/P8wHwYDVR0jBBgwFoAU\n"
82 "v9x1k1GrVS0yXKvMzD7k/zInm9gwDQYJKoZIhvcNAQELBQADggGBAIwUNzAo7Efm\n"
83 "X8dVGz6OEsfZ/RPIeYxZ5cmqWwcZ4oLBv55xGJNG+nIcgLMA2L6ybtFiK2nKtqy4\n"
84 "hMv/P6qvjX5vVQGVgLclvMkDkmXWVdqkTYDX7cSe/Bv6qIS2KBaVo87r2DIWN8Zu\n"
85 "J3w0U3RcD6ilXVmqvARLeKWBPrCep0DJvg/BEAFSjCgHImrpZdzm6NuUr1eYCfgN\n"
86 "HPwUj5Ivyy9ioPRXGzzHQH6T1p/xIRbuhqTGRUin3MqGQlFseBJ2qXPf6uQmCaWZ\n"
87 "tFp4oWLJThqVmlvHViPDy235roYSKkJXH4qxjbhuv0pgUZOzmSsG7YA/oYNGDm6I\n"
88 "bEvids1r45PjYDHctB4QLhXNY3SJVgMog1KuVCK6JQL8F8XP5Sup1qW4ed/WvXwe\n"
89 "PBTOWbE/ENnxF2/nQLwnr80cgVx8rAE5sxubNNQVHu/6NonPzGUhTHXmGleuXPbb\n"
90 "Mjv4x9s3QftWUVJb7b8GUt5bMAthqo7Y47Jed1kKIt2PAm0SNBMYrw==\n"
91 "-----END CERTIFICATE-----\n"
92 "-----BEGIN CERTIFICATE-----\n"
93 "MIIEFDCCAnygAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0w\n"
94 "MCAXDTE2MDIxODEzNTQwMVoYDzk5OTkxMjMxMjM1OTU5WjAPMQ0wCwYDVQQDEwRD\n"
95 "QS0xMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA0QG/LnrMV5vsE3G7\n"
96 "mGVYr33PFQ/WojwKg1C8GGH9aaIn+VMuBS2d1/mwtM9axoje1uQzwKp/hPT+N3Z3\n"
97 "qmFWeX8somDwowNDWN3skST4ob/M4aSlfP6OhNeIfBNvPTz3GtsbOtN5TkOX7Nf2\n"
98 "+mfFm09xMHQ3z4yyGNmKG/oxGKY2WDe93hp0rlIZ6ihMPcsCHwWLfja3SAT4AcXs\n"
99 "TFrTxEnaTYuVxcRcoW7lEDtcCyGbPfszo/rEQfJxwxRF46Yoz6rrCSkXOzLhQa4v\n"
100 "PPsZJ6ltNqkCtSrnhcCl3SC9JqdI4e7lGsnDylq4evi8RtOYknVOqDwv0q/9DI2+\n"
101 "rhFUy4I0Ah9H2T7dC01KIOjGiHyThCgkt2Nee/AXFflpN2Ws7/SGALdx6Vy3OkVo\n"
102 "NkHYxlKKn/06Yp8XlNPR64EqxeJqPW9Pf742EJUCOeavu5wPWJtLQr03JyKWoeZf\n"
103 "IYT/HwZUJveqEBU1EKeZRSvrRwHnmzQJuxyUhj/2C92QF5edAgMBAAGjeTB3MA8G\n"
104 "A1UdEwEB/wQFMAMBAf8wEwYDVR0lBAwwCgYIKwYBBQUHAwkwDwYDVR0PAQH/BAUD\n"
105 "AwcEADAdBgNVHQ4EFgQUv9x1k1GrVS0yXKvMzD7k/zInm9gwHwYDVR0jBBgwFoAU\n"
106 "2iUEUyXy7fPzZtc8ktanTiDzjuUwDQYJKoZIhvcNAQELBQADggGBAC9X5og786Il\n"
107 "CUKj4FpZrqgfN+Cwf1EebW1tX1iKYASGo8t7JS0Btt3ycVpx04JSJy5WM9cQNFU0\n"
108 "5vimaG0qAsWhHXljhmM0mr4ruW1Jw6KAuqw0V/JJ0oYRZaYnvi6UsoJJjq8YcatW\n"
109 "5ixtKr928933kYD71sMZBN7Um7ictDq0M2oaW4k0/Yt4Uqb9fv20E4EHKEpETMUR\n"
110 "FviTIjONdVsAVj4lxuS3u1Nt7B5ayYCkgFabME28ud6EazelwZWZwBRGiuPr6634\n"
111 "f8lZtnscRVU5oQb6DjkyD/SM+1ue6/wpNapoH7BimnvCcRmLvsG34vlyt7QC0BRO\n"
112 "cRmEPZCq8hIUIuD0x836FRNUSjjMVi2Dj+QjeNolpKgUjRF/h2yKmDRB2A7WAV5g\n"
113 "It7RRjMnkm3pvKj2d7/qb5OaccO4uoAq333PRAX0RLYT5yosFGq+RN8+WCnzuGsB\n"
114 "hCe33/7HCC6mO0/vsrQuRvECvAasznN9mF3t+ZXMvcsqTcOq4Iag1A==\n"
115 "-----END CERTIFICATE-----\n"
116 "-----BEGIN CERTIFICATE-----\n"
117 "MIID8zCCAlugAwIBAgIBADANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0w\n"
118 "MCAXDTE2MDIxODEzNTQwMFoYDzk5OTkxMjMxMjM1OTU5WjAPMQ0wCwYDVQQDEwRD\n"
119 "QS0wMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA0MYBHVUjwlQH7Mvn\n"
120 "4viHyEONr+7M0+fLntPITQHihE8gxU3LpqAUpl7felAA4k0sJTaXvnZA+E1DCcIq\n"
121 "zksAhK3Qr8zZeCKNM41U1klcCh2+3IoGjg+CcQisb8gtiiXybH3qXYFgi3ww2YFG\n"
122 "cIjJAciZj8qLfwMhMcBPMx4IDHR7gdWH9V0xUZZiBkk7x3PBIWCr2FKD0877yR9t\n"
123 "wjlQ4Fbw5NW9j7WaUgeY2LV7iTtBH0bZ7D/04KsYdct6lKhUkzSUBg/bAUWCFp1j\n"
124 "ouFhzyqMf3jFDrcejxPKlRk15e9SkQYD/7dTpudXwbL9ugZfoP1xDRgslEyfyU/Q\n"
125 "DEyG5mlXjVBRiGvL+dfxRNw2E5xLpESt2rlMiBhe1cv8+XL5D6z/WBwDfBNUzoQR\n"
126 "X15YHK2NgNNHQ8u8GLtUbp3ZXaeKgj8fdR3UoRTqWgpy2vjVM3vN1xXFVTo13MJ8\n"
127 "isLXH/QNUR4tnOytDp1HyK2ybHkfXB1a0RMBwM5XDVD2LhPFAgMBAAGjWDBWMA8G\n"
128 "A1UdEwEB/wQFMAMBAf8wEwYDVR0lBAwwCgYIKwYBBQUHAwkwDwYDVR0PAQH/BAUD\n"
129 "AwcGADAdBgNVHQ4EFgQU2iUEUyXy7fPzZtc8ktanTiDzjuUwDQYJKoZIhvcNAQEL\n"
130 "BQADggGBAJrJujtXifCeySYWbnJlraec63Zgqfv4SZIEdLt5GFLdpjk2WCxhFrN3\n"
131 "n6JZgI2aUWin2OL1VA1hfddAPUSHOCV8nP/Vu1f/BEaeQjEVS2AOF7T+eQSTNQtN\n"
132 "MkTTi0UKKXZjIIXiW4YXDs2b22JIOXkL9rFyrvN4vvbIp/jwLWx5UTHFtsktMkai\n"
133 "MteJBobd69ra7kdX43EkUKrgSDNpMQn10y3w4ziPDsLZ9sWaRxESbXWqDn4A7J9t\n"
134 "prfxut+s/3rsZgpt4s2FsswymfuW8DhzH1EjfV1Tb32blpgz/40sIRbU158Wh1UH\n"
135 "/DGQ6RVX0RcRt7ce7QCYTROD/yHYPVucqLfRpVNJ3oujGYaMgnSSuxEOsfwx5u+P\n"
136 "8USIxyQNR9cX/gQswzs3Ouj1rXBnjiSS1YXWZXvqHsUamJ8O7qpnqkL2Ti64O0HA\n"
137 "wdTtAcDO0BTHvanKZojLZm8nStvTvFpSVh7z+8Fu0A5zAcHsDj4vLABsdPDsXUTr\n"
138 "kb2G3Yy/UA==\n"
139 "-----END CERTIFICATE-----\n";
140
141 const gnutls_datum_t server_cert = { server_cert_pem,
142         sizeof(server_cert_pem)
143 };
144
145 static unsigned char unsorted_server_cert_pem[] =
146 CERT0
147 "-----BEGIN CERTIFICATE-----\n"
148 "MIIEFDCCAnygAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0w\n"
149 "MCAXDTE2MDIxODEzNTQwMVoYDzk5OTkxMjMxMjM1OTU5WjAPMQ0wCwYDVQQDEwRD\n"
150 "QS0xMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA0QG/LnrMV5vsE3G7\n"
151 "mGVYr33PFQ/WojwKg1C8GGH9aaIn+VMuBS2d1/mwtM9axoje1uQzwKp/hPT+N3Z3\n"
152 "qmFWeX8somDwowNDWN3skST4ob/M4aSlfP6OhNeIfBNvPTz3GtsbOtN5TkOX7Nf2\n"
153 "+mfFm09xMHQ3z4yyGNmKG/oxGKY2WDe93hp0rlIZ6ihMPcsCHwWLfja3SAT4AcXs\n"
154 "TFrTxEnaTYuVxcRcoW7lEDtcCyGbPfszo/rEQfJxwxRF46Yoz6rrCSkXOzLhQa4v\n"
155 "PPsZJ6ltNqkCtSrnhcCl3SC9JqdI4e7lGsnDylq4evi8RtOYknVOqDwv0q/9DI2+\n"
156 "rhFUy4I0Ah9H2T7dC01KIOjGiHyThCgkt2Nee/AXFflpN2Ws7/SGALdx6Vy3OkVo\n"
157 "NkHYxlKKn/06Yp8XlNPR64EqxeJqPW9Pf742EJUCOeavu5wPWJtLQr03JyKWoeZf\n"
158 "IYT/HwZUJveqEBU1EKeZRSvrRwHnmzQJuxyUhj/2C92QF5edAgMBAAGjeTB3MA8G\n"
159 "A1UdEwEB/wQFMAMBAf8wEwYDVR0lBAwwCgYIKwYBBQUHAwkwDwYDVR0PAQH/BAUD\n"
160 "AwcEADAdBgNVHQ4EFgQUv9x1k1GrVS0yXKvMzD7k/zInm9gwHwYDVR0jBBgwFoAU\n"
161 "2iUEUyXy7fPzZtc8ktanTiDzjuUwDQYJKoZIhvcNAQELBQADggGBAC9X5og786Il\n"
162 "CUKj4FpZrqgfN+Cwf1EebW1tX1iKYASGo8t7JS0Btt3ycVpx04JSJy5WM9cQNFU0\n"
163 "5vimaG0qAsWhHXljhmM0mr4ruW1Jw6KAuqw0V/JJ0oYRZaYnvi6UsoJJjq8YcatW\n"
164 "5ixtKr928933kYD71sMZBN7Um7ictDq0M2oaW4k0/Yt4Uqb9fv20E4EHKEpETMUR\n"
165 "FviTIjONdVsAVj4lxuS3u1Nt7B5ayYCkgFabME28ud6EazelwZWZwBRGiuPr6634\n"
166 "f8lZtnscRVU5oQb6DjkyD/SM+1ue6/wpNapoH7BimnvCcRmLvsG34vlyt7QC0BRO\n"
167 "cRmEPZCq8hIUIuD0x836FRNUSjjMVi2Dj+QjeNolpKgUjRF/h2yKmDRB2A7WAV5g\n"
168 "It7RRjMnkm3pvKj2d7/qb5OaccO4uoAq333PRAX0RLYT5yosFGq+RN8+WCnzuGsB\n"
169 "hCe33/7HCC6mO0/vsrQuRvECvAasznN9mF3t+ZXMvcsqTcOq4Iag1A==\n"
170 "-----END CERTIFICATE-----\n"
171 "-----BEGIN CERTIFICATE-----\n"
172 "MIID8zCCAlugAwIBAgIBADANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0w\n"
173 "MCAXDTE2MDIxODEzNTQwMFoYDzk5OTkxMjMxMjM1OTU5WjAPMQ0wCwYDVQQDEwRD\n"
174 "QS0wMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA0MYBHVUjwlQH7Mvn\n"
175 "4viHyEONr+7M0+fLntPITQHihE8gxU3LpqAUpl7felAA4k0sJTaXvnZA+E1DCcIq\n"
176 "zksAhK3Qr8zZeCKNM41U1klcCh2+3IoGjg+CcQisb8gtiiXybH3qXYFgi3ww2YFG\n"
177 "cIjJAciZj8qLfwMhMcBPMx4IDHR7gdWH9V0xUZZiBkk7x3PBIWCr2FKD0877yR9t\n"
178 "wjlQ4Fbw5NW9j7WaUgeY2LV7iTtBH0bZ7D/04KsYdct6lKhUkzSUBg/bAUWCFp1j\n"
179 "ouFhzyqMf3jFDrcejxPKlRk15e9SkQYD/7dTpudXwbL9ugZfoP1xDRgslEyfyU/Q\n"
180 "DEyG5mlXjVBRiGvL+dfxRNw2E5xLpESt2rlMiBhe1cv8+XL5D6z/WBwDfBNUzoQR\n"
181 "X15YHK2NgNNHQ8u8GLtUbp3ZXaeKgj8fdR3UoRTqWgpy2vjVM3vN1xXFVTo13MJ8\n"
182 "isLXH/QNUR4tnOytDp1HyK2ybHkfXB1a0RMBwM5XDVD2LhPFAgMBAAGjWDBWMA8G\n"
183 "A1UdEwEB/wQFMAMBAf8wEwYDVR0lBAwwCgYIKwYBBQUHAwkwDwYDVR0PAQH/BAUD\n"
184 "AwcGADAdBgNVHQ4EFgQU2iUEUyXy7fPzZtc8ktanTiDzjuUwDQYJKoZIhvcNAQEL\n"
185 "BQADggGBAJrJujtXifCeySYWbnJlraec63Zgqfv4SZIEdLt5GFLdpjk2WCxhFrN3\n"
186 "n6JZgI2aUWin2OL1VA1hfddAPUSHOCV8nP/Vu1f/BEaeQjEVS2AOF7T+eQSTNQtN\n"
187 "MkTTi0UKKXZjIIXiW4YXDs2b22JIOXkL9rFyrvN4vvbIp/jwLWx5UTHFtsktMkai\n"
188 "MteJBobd69ra7kdX43EkUKrgSDNpMQn10y3w4ziPDsLZ9sWaRxESbXWqDn4A7J9t\n"
189 "prfxut+s/3rsZgpt4s2FsswymfuW8DhzH1EjfV1Tb32blpgz/40sIRbU158Wh1UH\n"
190 "/DGQ6RVX0RcRt7ce7QCYTROD/yHYPVucqLfRpVNJ3oujGYaMgnSSuxEOsfwx5u+P\n"
191 "8USIxyQNR9cX/gQswzs3Ouj1rXBnjiSS1YXWZXvqHsUamJ8O7qpnqkL2Ti64O0HA\n"
192 "wdTtAcDO0BTHvanKZojLZm8nStvTvFpSVh7z+8Fu0A5zAcHsDj4vLABsdPDsXUTr\n"
193 "kb2G3Yy/UA==\n"
194 "-----END CERTIFICATE-----\n"
195 "-----BEGIN CERTIFICATE-----\n"
196 "MIIEFDCCAnygAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0x\n"
197 "MCAXDTE2MDIxODEzNTQwMVoYDzk5OTkxMjMxMjM1OTU5WjAPMQ0wCwYDVQQDEwRD\n"
198 "QS0yMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAu1/IharA+97QfzDj\n"
199 "UXEBl9TAFqHkN9B5erj1yhMlwPAakreStR8VvuCx46TA3gP7sbUYU811T+2D5/GU\n"
200 "u7YuMWsFeSmGWvbxa/tKTpXoEM0bNV+rIbxAcfgtxbARZDocv8gxfG/70vc2dSDh\n"
201 "KgZCoMQyO6qGLRdsoPAf+De7YD8sKS7Q3d3Xnfyv4AVnDkbAVFsZhu4lQFuWXyfG\n"
202 "Sl95TT94wLDLdf/Gf/F0nNsv6+D6yb15afhJKdqo6PH19gsyE0U3zj6c/7abha2W\n"
203 "fvVe6hVbaW1HLDZdHZnjlJHamNFdrOHI5Xi+SJO7/3MWvdTzdMVFBDfS5o7TvYyS\n"
204 "pu6iTmVeJvJ1OpXV7Lw1M2dSTW9RJLzUF3fXYOsuh32qMel9IzhnVh8Veyl0I0WL\n"
205 "hThmkF73mGWcVq4lMPXwEnwYJtRLeH5HWvG3rgmb7m827XMNnqKE0NOkPH63OUqJ\n"
206 "0h4b6PBb6wiOgnsC3yZIf0KgB0gToySvmD6MyJsmbN9rQit1AgMBAAGjeTB3MA8G\n"
207 "A1UdEwEB/wQFMAMBAf8wEwYDVR0lBAwwCgYIKwYBBQUHAwkwDwYDVR0PAQH/BAUD\n"
208 "AwcEADAdBgNVHQ4EFgQUUZGvUEIirQAeYHn21QGyCEyO/P8wHwYDVR0jBBgwFoAU\n"
209 "v9x1k1GrVS0yXKvMzD7k/zInm9gwDQYJKoZIhvcNAQELBQADggGBAIwUNzAo7Efm\n"
210 "X8dVGz6OEsfZ/RPIeYxZ5cmqWwcZ4oLBv55xGJNG+nIcgLMA2L6ybtFiK2nKtqy4\n"
211 "hMv/P6qvjX5vVQGVgLclvMkDkmXWVdqkTYDX7cSe/Bv6qIS2KBaVo87r2DIWN8Zu\n"
212 "J3w0U3RcD6ilXVmqvARLeKWBPrCep0DJvg/BEAFSjCgHImrpZdzm6NuUr1eYCfgN\n"
213 "HPwUj5Ivyy9ioPRXGzzHQH6T1p/xIRbuhqTGRUin3MqGQlFseBJ2qXPf6uQmCaWZ\n"
214 "tFp4oWLJThqVmlvHViPDy235roYSKkJXH4qxjbhuv0pgUZOzmSsG7YA/oYNGDm6I\n"
215 "bEvids1r45PjYDHctB4QLhXNY3SJVgMog1KuVCK6JQL8F8XP5Sup1qW4ed/WvXwe\n"
216 "PBTOWbE/ENnxF2/nQLwnr80cgVx8rAE5sxubNNQVHu/6NonPzGUhTHXmGleuXPbb\n"
217 "Mjv4x9s3QftWUVJb7b8GUt5bMAthqo7Y47Jed1kKIt2PAm0SNBMYrw==\n"
218 "-----END CERTIFICATE-----\n";
219
220 const gnutls_datum_t unsorted_server_cert = { unsorted_server_cert_pem,
221         sizeof(unsorted_server_cert_pem)
222 };
223
224 const gnutls_datum_t single_server_cert = { server_cert_pem,
225         sizeof(CERT0)-1
226 };
227
228 static unsigned char isolated_server_cert_pem[] =
229 CERT0
230 "-----BEGIN CERTIFICATE-----\n"
231 "MIID8zCCAlugAwIBAgIBADANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0w\n"
232 "MCAXDTE2MDIxODEzNTQwMFoYDzk5OTkxMjMxMjM1OTU5WjAPMQ0wCwYDVQQDEwRD\n"
233 "QS0wMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA0MYBHVUjwlQH7Mvn\n"
234 "4viHyEONr+7M0+fLntPITQHihE8gxU3LpqAUpl7felAA4k0sJTaXvnZA+E1DCcIq\n"
235 "zksAhK3Qr8zZeCKNM41U1klcCh2+3IoGjg+CcQisb8gtiiXybH3qXYFgi3ww2YFG\n"
236 "cIjJAciZj8qLfwMhMcBPMx4IDHR7gdWH9V0xUZZiBkk7x3PBIWCr2FKD0877yR9t\n"
237 "wjlQ4Fbw5NW9j7WaUgeY2LV7iTtBH0bZ7D/04KsYdct6lKhUkzSUBg/bAUWCFp1j\n"
238 "ouFhzyqMf3jFDrcejxPKlRk15e9SkQYD/7dTpudXwbL9ugZfoP1xDRgslEyfyU/Q\n"
239 "DEyG5mlXjVBRiGvL+dfxRNw2E5xLpESt2rlMiBhe1cv8+XL5D6z/WBwDfBNUzoQR\n"
240 "X15YHK2NgNNHQ8u8GLtUbp3ZXaeKgj8fdR3UoRTqWgpy2vjVM3vN1xXFVTo13MJ8\n"
241 "isLXH/QNUR4tnOytDp1HyK2ybHkfXB1a0RMBwM5XDVD2LhPFAgMBAAGjWDBWMA8G\n"
242 "A1UdEwEB/wQFMAMBAf8wEwYDVR0lBAwwCgYIKwYBBQUHAwkwDwYDVR0PAQH/BAUD\n"
243 "AwcGADAdBgNVHQ4EFgQU2iUEUyXy7fPzZtc8ktanTiDzjuUwDQYJKoZIhvcNAQEL\n"
244 "BQADggGBAJrJujtXifCeySYWbnJlraec63Zgqfv4SZIEdLt5GFLdpjk2WCxhFrN3\n"
245 "n6JZgI2aUWin2OL1VA1hfddAPUSHOCV8nP/Vu1f/BEaeQjEVS2AOF7T+eQSTNQtN\n"
246 "MkTTi0UKKXZjIIXiW4YXDs2b22JIOXkL9rFyrvN4vvbIp/jwLWx5UTHFtsktMkai\n"
247 "MteJBobd69ra7kdX43EkUKrgSDNpMQn10y3w4ziPDsLZ9sWaRxESbXWqDn4A7J9t\n"
248 "prfxut+s/3rsZgpt4s2FsswymfuW8DhzH1EjfV1Tb32blpgz/40sIRbU158Wh1UH\n"
249 "/DGQ6RVX0RcRt7ce7QCYTROD/yHYPVucqLfRpVNJ3oujGYaMgnSSuxEOsfwx5u+P\n"
250 "8USIxyQNR9cX/gQswzs3Ouj1rXBnjiSS1YXWZXvqHsUamJ8O7qpnqkL2Ti64O0HA\n"
251 "wdTtAcDO0BTHvanKZojLZm8nStvTvFpSVh7z+8Fu0A5zAcHsDj4vLABsdPDsXUTr\n"
252 "kb2G3Yy/UA==\n"
253 "-----END CERTIFICATE-----\n";
254
255 const gnutls_datum_t isolated_server_cert = { isolated_server_cert_pem,
256         sizeof(isolated_server_cert_pem)
257 };
258
259 void doit(void)
260 {
261         gnutls_pcert_st pcert_list[16];
262         unsigned pcert_list_size, flags, i;
263         int ret;
264
265         flags = GNUTLS_X509_CRT_LIST_IMPORT_FAIL_IF_EXCEED;
266
267         pcert_list_size = 3;
268         ret = gnutls_pcert_list_import_x509_raw(pcert_list, &pcert_list_size,
269                         &server_cert, GNUTLS_X509_FMT_PEM, flags);
270         if (ret != GNUTLS_E_SHORT_MEMORY_BUFFER) {
271                 fail("the GNUTLS_X509_CRT_LIST_IMPORT_FAIL_IF_EXCEED was not considered\n");
272         }
273
274         pcert_list_size = 3;
275         ret = gnutls_pcert_list_import_x509_raw(pcert_list, &pcert_list_size,
276                         &server_cert, GNUTLS_X509_FMT_PEM, 0);
277         if (ret < 0) {
278                 fail("the normal/smaller import has failed\n");
279         }
280
281         for (i=0;i<pcert_list_size;i++)
282                 gnutls_pcert_deinit(&pcert_list[i]);
283
284
285         pcert_list_size = 16;
286         ret = gnutls_pcert_list_import_x509_raw(pcert_list, &pcert_list_size,
287                         &server_cert, GNUTLS_X509_FMT_PEM, 0);
288         if (ret != 0 || pcert_list_size != 4) {
289                 fail("the normal import failed\n");
290         }
291
292         for (i=0;i<pcert_list_size;i++)
293                 gnutls_pcert_deinit(&pcert_list[i]);
294
295
296         pcert_list_size = 16;
297         flags = GNUTLS_X509_CRT_LIST_FAIL_IF_UNSORTED;
298         ret = gnutls_pcert_list_import_x509_raw(pcert_list, &pcert_list_size,
299                         &server_cert, GNUTLS_X509_FMT_PEM, flags);
300         if (ret != 0 || pcert_list_size != 4) {
301                 fail("the fail if unsorted import failed\n");
302         }
303
304         for (i=0;i<pcert_list_size;i++)
305                 gnutls_pcert_deinit(&pcert_list[i]);
306
307
308         pcert_list_size = 16;
309         flags = GNUTLS_X509_CRT_LIST_SORT;
310         ret = gnutls_pcert_list_import_x509_raw(pcert_list, &pcert_list_size,
311                         &server_cert, GNUTLS_X509_FMT_PEM, flags);
312         if (ret != 0 || pcert_list_size != 4) {
313                 fail("the list sort import failed\n");
314         }
315
316         for (i=0;i<pcert_list_size;i++)
317                 gnutls_pcert_deinit(&pcert_list[i]);
318
319
320         pcert_list_size = 16;
321         flags = GNUTLS_X509_CRT_LIST_SORT|GNUTLS_X509_CRT_LIST_FAIL_IF_UNSORTED;
322         ret = gnutls_pcert_list_import_x509_raw(pcert_list, &pcert_list_size,
323                         &server_cert, GNUTLS_X509_FMT_PEM, flags);
324         if (ret != 0 || pcert_list_size != 4) {
325                 fail("the combined import failed\n");
326         }
327
328         for (i=0;i<pcert_list_size;i++)
329                 gnutls_pcert_deinit(&pcert_list[i]);
330
331         /* try the unsorted list */
332         pcert_list_size = 16;
333         flags = GNUTLS_X509_CRT_LIST_SORT|GNUTLS_X509_CRT_LIST_FAIL_IF_UNSORTED;
334         ret = gnutls_pcert_list_import_x509_raw(pcert_list, &pcert_list_size,
335                         &unsorted_server_cert, GNUTLS_X509_FMT_PEM, flags);
336         if (ret < 0 || pcert_list_size != 4) {
337                 fail("the combined import failed for the unsorted list (%d): %s\n", pcert_list_size, gnutls_strerror(ret));
338         }
339
340         for (i=0;i<pcert_list_size;i++)
341                 gnutls_pcert_deinit(&pcert_list[i]);
342
343         /* try the single cert list */
344         pcert_list_size = 16;
345         flags = GNUTLS_X509_CRT_LIST_SORT|GNUTLS_X509_CRT_LIST_FAIL_IF_UNSORTED;
346         ret = gnutls_pcert_list_import_x509_raw(pcert_list, &pcert_list_size,
347                         &single_server_cert, GNUTLS_X509_FMT_PEM, flags);
348         if (ret < 0 || pcert_list_size != 1) {
349                 fail("the combined import failed for the single cert (%d): %s\n", pcert_list_size, gnutls_strerror(ret));
350         }
351
352         for (i=0;i<pcert_list_size;i++)
353                 gnutls_pcert_deinit(&pcert_list[i]);
354
355         /* try the single final cert list */
356         pcert_list_size = 16;
357         flags = GNUTLS_X509_CRT_LIST_SORT|GNUTLS_X509_CRT_LIST_FAIL_IF_UNSORTED;
358         ret = gnutls_pcert_list_import_x509_raw(pcert_list, &pcert_list_size,
359                         &isolated_server_cert, GNUTLS_X509_FMT_PEM, flags);
360         if (ret < 0 || pcert_list_size != 1) {
361                 fail("the combined import failed for the isolated cert (%d): %s\n", pcert_list_size, gnutls_strerror(ret));
362         }
363
364         for (i=0;i<pcert_list_size;i++)
365                 gnutls_pcert_deinit(&pcert_list[i]);
366
367         success("all ok\n");
368 }