Blame tests/gnutls_x509_crt_list_import.c

Packit Service 4684c1
/*
Packit Service 4684c1
 * Copyright (C) 2017 Nikos Mavrogiannopoulos
Packit Service 4684c1
 *
Packit Service 4684c1
 * Author: Nikos Mavrogiannopoulos
Packit Service 4684c1
 *
Packit Service 4684c1
 * This file is part of GnuTLS.
Packit Service 4684c1
 *
Packit Service 4684c1
 * GnuTLS is free software; you can redistribute it and/or modify it
Packit Service 4684c1
 * under the terms of the GNU General Public License as published by
Packit Service 4684c1
 * the Free Software Foundation; either version 3 of the License, or
Packit Service 4684c1
 * (at your option) any later version.
Packit Service 4684c1
 *
Packit Service 4684c1
 * GnuTLS is distributed in the hope that it will be useful, but
Packit Service 4684c1
 * WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 4684c1
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 4684c1
 * General Public License for more details.
Packit Service 4684c1
 *
Packit Service 4684c1
 * You should have received a copy of the GNU Lesser General Public License
Packit Service 4684c1
 * along with this program.  If not, see <https://www.gnu.org/licenses/>
Packit Service 4684c1
 */
Packit Service 4684c1
Packit Service 4684c1
/* This tests key import for gnutls_x509_privkey_t APIs */
Packit Service 4684c1
Packit Service 4684c1
#ifdef HAVE_CONFIG_H
Packit Service 4684c1
#include <config.h>
Packit Service 4684c1
#endif
Packit Service 4684c1
Packit Service 4684c1
#include <stdio.h>
Packit Service 4684c1
#include <stdlib.h>
Packit Service 4684c1
#include <string.h>
Packit Service 4684c1
#include <sys/types.h>
Packit Service 4684c1
#include <unistd.h>
Packit Service 4684c1
#include <gnutls/gnutls.h>
Packit Service 4684c1
#include <gnutls/abstract.h>
Packit Service 4684c1
#include <gnutls/x509.h>
Packit Service 4684c1
#include <assert.h>
Packit Service 4684c1
#include "cert-common.h"
Packit Service 4684c1
#include "utils.h"
Packit Service 4684c1
Packit Service 4684c1
#define testfail(fmt, ...) \
Packit Service 4684c1
	fail("%s: "fmt, name, ##__VA_ARGS__)
Packit Service 4684c1
Packit Service 4684c1
#define MAX_CERTS 8
Packit Service 4684c1
Packit Service 4684c1
static void load_list(const char *name, const gnutls_datum_t *txt,
Packit Service 4684c1
		      unsigned int ncerts,
Packit Service 4684c1
		      unsigned int max1,
Packit Service 4684c1
		      unsigned int max2,
Packit Service 4684c1
		      unsigned flags, int exp_err)
Packit Service 4684c1
{
Packit Service 4684c1
	gnutls_x509_crt_t certs[MAX_CERTS];
Packit Service 4684c1
	unsigned int max, i;
Packit Service 4684c1
	unsigned retried = 0;
Packit Service 4684c1
	int ret;
Packit Service 4684c1
Packit Service 4684c1
	assert(max1<=MAX_CERTS);
Packit Service 4684c1
	assert(max2<=MAX_CERTS);
Packit Service 4684c1
Packit Service 4684c1
	if (max1)
Packit Service 4684c1
		max = max1;
Packit Service 4684c1
	else
Packit Service 4684c1
		max = MAX_CERTS;
Packit Service 4684c1
Packit Service 4684c1
 retry:
Packit Service 4684c1
	ret = gnutls_x509_crt_list_import(certs, &max, txt, GNUTLS_X509_FMT_PEM, flags);
Packit Service 4684c1
	if (ret < 0) {
Packit Service 4684c1
		if (retried == 0 && ret == GNUTLS_E_SHORT_MEMORY_BUFFER && max2 && max2 != max) {
Packit Service 4684c1
			max = max2;
Packit Service 4684c1
			retried = 1;
Packit Service 4684c1
			goto retry;
Packit Service 4684c1
		}
Packit Service 4684c1
		if (exp_err == ret)
Packit Service 4684c1
			return;
Packit Service 4684c1
		testfail("gnutls_x509_crt_list_import: %s\n", gnutls_strerror(ret));
Packit Service 4684c1
	}
Packit Service 4684c1
Packit Service 4684c1
	for (i=0;i
Packit Service 4684c1
		gnutls_x509_crt_deinit(certs[i]);
Packit Service 4684c1
Packit Service 4684c1
	if (max != ncerts)
Packit Service 4684c1
		testfail("imported number (%d) doesn't match expected (%d)\n", max, ncerts);
Packit Service 4684c1
Packit Service 4684c1
	if (ret != (int)ncerts)
Packit Service 4684c1
		testfail("imported number (%d) doesn't match return value (%d)\n", ncerts, ret);
Packit Service 4684c1
Packit Service 4684c1
	return;
Packit Service 4684c1
}
Packit Service 4684c1
Packit Service 4684c1
typedef struct test_st {
Packit Service 4684c1
	const char *name;
Packit Service 4684c1
	const gnutls_datum_t *certs;
Packit Service 4684c1
	unsigned max1;
Packit Service 4684c1
	unsigned max2;
Packit Service 4684c1
	unsigned ncerts;
Packit Service 4684c1
	unsigned flags;
Packit Service 4684c1
	int exp_err;
Packit Service 4684c1
} test_st;
Packit Service 4684c1
Packit Service 4684c1
static const char long_chain_pem[] = {
Packit Service 4684c1
"-----BEGIN CERTIFICATE-----\n"
Packit Service 4684c1
"MIIDQDCCAiigAwIBAgIMU/xyoxPcYVSaqH7/MA0GCSqGSIb3DQEBCwUAMA8xDTAL\n"
Packit Service 4684c1
"BgNVBAMTBENBLTMwIhgPMjAxNDA4MjYxMTQyMjdaGA85OTk5MTIzMTIzNTk1OVow\n"
Packit Service 4684c1
"EzERMA8GA1UEChMIc2VydmVyLTQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\n"
Packit Service 4684c1
"AoIBAQDkemVOFdbhBX1qwjxQHr3LmPktNEVBmXjrIvyp++dN7gCYzubnpiLcBE+B\n"
Packit Service 4684c1
"S2b+ppxBYm9ynKijhGrO+lZPCQRXWmqUg4YDfvnEqM4n04dCE98jN4IhwvWZyP3p\n"
Packit Service 4684c1
"+U8Ra9mVIBAY2MReo1dcJQHNmo560xzxioHsGNQHAfYgVRHiE5hIXchYbWCkBrKt\n"
Packit Service 4684c1
"XOoSSTmfgCF3L22p6S1q143VoKUr/C9zqinZo6feGAiTprj6YH0tHswjGBbxTFLb\n"
Packit Service 4684c1
"q3ThbGDR5FNYL5q0FvQRNbjoF4oFitZ3P1Qkrzq7VIJd9k8J1C3g/16U2dDTKqRX\n"
Packit Service 4684c1
"ejX7maFZ6oRZJASsRSowEs4wTfRpAgMBAAGjgZMwgZAwDAYDVR0TAQH/BAIwADAa\n"
Packit Service 4684c1
"BgNVHREEEzARgg93d3cuZXhhbXBsZS5jb20wEwYDVR0lBAwwCgYIKwYBBQUHAwEw\n"
Packit Service 4684c1
"DwYDVR0PAQH/BAUDAwegADAdBgNVHQ4EFgQUAEYPmcA7S/KChiet+Z6+RRmogiww\n"
Packit Service 4684c1
"HwYDVR0jBBgwFoAUjxZogHO3y4VdOLuibQHsQYdsGgwwDQYJKoZIhvcNAQELBQAD\n"
Packit Service 4684c1
"ggEBABlA3npOWwl3eBycaLVOsmdPS+fUwhLnF8hxoyKpHe/33k1nIxd7iiqNZ3iw\n"
Packit Service 4684c1
"6pAjnuRUCjajU+mlx6ekrmga8mpmeD6JH0I3lq+mrPeCeFXm8gc1yJpcFJ/C2l4o\n"
Packit Service 4684c1
"+3HNY7RJKcfoQxIbiKOtZ6x9E0aYuk3s1Um3Pf8GLwENoou7Stg5qHsLbkN/GBuP\n"
Packit Service 4684c1
"n3p/4iqik2k7VblldDe3oCob5vMp0qrAEhlNl2Fn65rcB4+bp1EiC1Z+y6X8DpRb\n"
Packit Service 4684c1
"NomKUsOiGcbFjQ4ptT6fePmPHX1mgDCx+5/22cyBUYElefYP7Xzr+C8tqqO3JFKe\n"
Packit Service 4684c1
"hqEmQRsll9bkqpu2dh83c3i9u4g=\n"
Packit Service 4684c1
"-----END CERTIFICATE-----\n"
Packit Service 4684c1
"-----BEGIN CERTIFICATE-----\n"
Packit Service 4684c1
"MIIDATCCAemgAwIBAgIBAzANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0y\n"
Packit Service 4684c1
"MCIYDzIwMTQwODI2MTE0MjI3WhgPOTk5OTEyMzEyMzU5NTlaMA8xDTALBgNVBAMT\n"
Packit Service 4684c1
"BENBLTMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/4ofaL+ilmmM+\n"
Packit Service 4684c1
"bGaFRy5GYQXtkD8sA3+/GWsunR928fQS68Zh6iWU+gPm52i7Gfbh7piKWA5Tb63w\n"
Packit Service 4684c1
"unbS6dPsfPSvgRMZGKJpzxqVcBQAnTS4MuDPlXNg3K3HMyVtbxekII8jFeGEJuCL\n"
Packit Service 4684c1
"mBMT4dI48IZRzj+2mir38w2cQPfomaKtjg2jMokG8Z9/4+SU9VJCcY1/yZk8fCbS\n"
Packit Service 4684c1
"dBbwhnDq10yvhPCHgX6KMYmoJr28CYgH29Q9sDP1XN3VvAx5X+PtW/6pyF0U5E2e\n"
Packit Service 4684c1
"gRzVv7Hr3FJKvytbNxRMCoy2YOyvsTP0fIhiXdtkulTKXyiq4cxA+aYByOu1FjU4\n"
Packit Service 4684c1
"NicWbiZ/AgMBAAGjZDBiMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcE\n"
Packit Service 4684c1
"ADAdBgNVHQ4EFgQUjxZogHO3y4VdOLuibQHsQYdsGgwwHwYDVR0jBBgwFoAUwAx0\n"
Packit Service 4684c1
"aL2SrsoSZcZUuFlq0O17BSgwDQYJKoZIhvcNAQELBQADggEBAGQvj8SquT31w8JK\n"
Packit Service 4684c1
"tHDL4hWOU0EwVwWl4aYsvP17WspiFIIHKApPFfQOD0/Wg9zB48ble5ZSwKA3Vc3B\n"
Packit Service 4684c1
"DJgd77HgVAd/Nu1TS5TFDKhpuvFPJVpJ3cqt3pTsVGMzf6GRz5kG3Ly/pBgkqiMG\n"
Packit Service 4684c1
"gv6vTlEvzNe4FcnhNBEaRKpK5Hc5+GnxtfVoki3tjG5u+oa9/OwzAT+7IOyiIKHw\n"
Packit Service 4684c1
"7F4Cm56QAWMJgVNm329AjZrJLeNuKoQWGueNew4dOe/zlYEaVMG4So74twXQwIAB\n"
Packit Service 4684c1
"Zko7+wk6eI4CkI4Zair36s1jLkCF8xnL8FExTT3sg6B6KBHaNUuwc67WPILVuFuc\n"
Packit Service 4684c1
"VfVBOd8=\n"
Packit Service 4684c1
"-----END CERTIFICATE-----\n"
Packit Service 4684c1
"-----BEGIN CERTIFICATE-----\n"
Packit Service 4684c1
"MIIDMzCCAhugAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0x\n"
Packit Service 4684c1
"MCIYDzIwMTQwODI2MTE0MjI3WhgPOTk5OTEyMzEyMzU5NTlaMA8xDTALBgNVBAMT\n"
Packit Service 4684c1
"BENBLTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIf3as4EONSgWu\n"
Packit Service 4684c1
"Mbm9w3DbKd/su1UWlrYrcpVqmU3MKD5jXBxyoThSBWxmq1+wcNDmE1on6pHY1aad\n"
Packit Service 4684c1
"k3188JKMC83wEcyQXaiH3DlTYFXXkkI+JJNUGlfAMSoXG248SpoCIOhCETUG03iP\n"
Packit Service 4684c1
"Z3AZludaHYsv4akAh1Kl6qn66+bKM53l/YhoQDxhoGaYvO8ZSwKnx5DEiq447jpW\n"
Packit Service 4684c1
"M+sUFe38RPaMjHpyc1GRctvQDzJGm+8ZRujYDH+fGNzVDDlRyRnsVanFGNdyfhmy\n"
Packit Service 4684c1
"BN2D2+2VEvzAWlaGg2wQN8gF3+luavIVEgETXODZPa5FF7ulmQmhqGrZcw6WtDmY\n"
Packit Service 4684c1
"hUbNmbL7AgMBAAGjgZUwgZIwDwYDVR0TAQH/BAUwAwEB/zAuBgNVHR4BAf8EJDAi\n"
Packit Service 4684c1
"oA8wDYILZXhhbXBsZS5jb22hDzANggtleGFtcGxlLm9yZzAPBgNVHQ8BAf8EBQMD\n"
Packit Service 4684c1
"BwQAMB0GA1UdDgQWBBTADHRovZKuyhJlxlS4WWrQ7XsFKDAfBgNVHSMEGDAWgBTg\n"
Packit Service 4684c1
"+khaP8UOjcwSKVxgT+zhh0aWPDANBgkqhkiG9w0BAQsFAAOCAQEASq5yBiib8FPk\n"
Packit Service 4684c1
"oRONZ4COgGqjXvigeOBRgbHf9AfagpoYDbOKDQS8Iwt9VHZfJxdcJ1OuM1aQqXlN\n"
Packit Service 4684c1
"dUyf+JdR/24Nv1yrhL+dEfRGka6Db96YuPsbetVhNIiMm2teXDIPgGzAKuTm4xPA\n"
Packit Service 4684c1
"6zyNVy5AwfDQ5hIZ+EUsfOoerIElNyAbh66law4MWuiv4oyX4u49m5lxLuL6mFpR\n"
Packit Service 4684c1
"CIZYWjZMa0MJvWMKGm/AhpfEOkbT58Fg5YmxhnKMk6ps1eR6mh3NgH1IbUqvEYNC\n"
Packit Service 4684c1
"eS42X3kAMxEDseBOMths0gxeLL+IHdQpXnAjZppW8zEIcN3yfknul35r8R6Qt9aK\n"
Packit Service 4684c1
"q5+/m1ADBw==\n"
Packit Service 4684c1
"-----END CERTIFICATE-----\n"
Packit Service 4684c1
"-----BEGIN CERTIFICATE-----\n"
Packit Service 4684c1
"MIIDATCCAemgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0w\n"
Packit Service 4684c1
"MCIYDzIwMTQwODI2MTE0MjI2WhgPOTk5OTEyMzEyMzU5NTlaMA8xDTALBgNVBAMT\n"
Packit Service 4684c1
"BENBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIe0eOnLaV750K\n"
Packit Service 4684c1
"4+mVaAftRrJp8t68KJivcRFpkl0ucQs6gwNf9EsVkHineOR3RXypjJ7Hsv+4PIKp\n"
Packit Service 4684c1
"BhEOTprYUKcBaxHK/NIezV6NrO1AwuD6MtJDQF9jGpSy0F3eRUoBCjVYhTl+JxcZ\n"
Packit Service 4684c1
"hGHPJd8WMeanQWY4xG4gTwtpjF3tPU5+JGQwLk5SbcLicM2QMG3CapZinOGK3/XC\n"
Packit Service 4684c1
"Fjsvf5ZhxnixayhfiX/n9BmeP1yxz7YORNYPlL8z1CcLZqJsyjZnNkVwNvl4ft9I\n"
Packit Service 4684c1
"FOKBLoOTSGocHFIFXh5b50GG6QHgvN+TiAwdpfRTUskWVg8VVIh7ymgDoI2jQhk4\n"
Packit Service 4684c1
"EeMaZHd/AgMBAAGjZDBiMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcE\n"
Packit Service 4684c1
"ADAdBgNVHQ4EFgQU4PpIWj/FDo3MEilcYE/s4YdGljwwHwYDVR0jBBgwFoAU6XJK\n"
Packit Service 4684c1
"EOUYTuioWHG+1YBuz0yPFmowDQYJKoZIhvcNAQELBQADggEBAJOCrGvbeRqPj+uL\n"
Packit Service 4684c1
"2FIfbkYZAx2nGl3RVv5ZK2YeDpU1udxLihc6Sr67OZbiA4QMKxwgI7pupuwXmyql\n"
Packit Service 4684c1
"vs9dWnNpjzgfc0OqqzVdOFlfw8ew2DQb2sUXCcIkwqXb/pBQ9BvcgdDASu+rm74j\n"
Packit Service 4684c1
"JWDZlhcqeVhZROKfpsjsl+lHgZ7kANwHtUJg/WvK8J971hgElqeBO1O97cGkw/in\n"
Packit Service 4684c1
"e8ooK9Lxk3Td+WdI8C7juCYiwsGqFEKuj7b6937uzvpFmm1fYDdOHhTMcHTHIVTr\n"
Packit Service 4684c1
"uxSSurQ4XSDF6Iuel3+IdpLL79UYJ7Cf4IhBWj0EloF6xWTA6nUYl3gzKpx1Tg1U\n"
Packit Service 4684c1
"x2+26YY=\n"
Packit Service 4684c1
"-----END CERTIFICATE-----\n"
Packit Service 4684c1
"-----BEGIN CERTIFICATE-----\n"
Packit Service 4684c1
"MIIC4DCCAcigAwIBAgIBADANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0w\n"
Packit Service 4684c1
"MCIYDzIwMTQwODI2MTE0MjI2WhgPOTk5OTEyMzEyMzU5NTlaMA8xDTALBgNVBAMT\n"
Packit Service 4684c1
"BENBLTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqLuVrTyiqz+Zs\n"
Packit Service 4684c1
"9Qw5V2Z1y1YSWU6aRDMs+34rP2gwT41C69HBh2LLRS04iJUVQydwnEJukwKlTNRn\n"
Packit Service 4684c1
"1lEpvWgtYmySWA2SyI4xkVzCXgwv0k7WyLwa39hfNY1rXAqhDTL8VO0nXxi8hCMW\n"
Packit Service 4684c1
"ohaXcvsieglhN5uwu6voEdY3Gwtx4V8ysDJ2P9EBo49ZHdpBOv+3YLDxbWZuL/tI\n"
Packit Service 4684c1
"nYkBUHHfWGhUHsRsu0EGob3SFnfiooCbE/vtmn9rUuBEQDqOjOg3el/aTPJzcMi/\n"
Packit Service 4684c1
"RTz+8ho17ZrQRKHZGKWq9Skank+2X9FZoYKFCUlBm6RVud1R54QYZEIj7W9ujQLN\n"
Packit Service 4684c1
"LJrcIwBDAgMBAAGjQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcE\n"
Packit Service 4684c1
"ADAdBgNVHQ4EFgQU6XJKEOUYTuioWHG+1YBuz0yPFmowDQYJKoZIhvcNAQELBQAD\n"
Packit Service 4684c1
"ggEBAEeXYGhZ8fWDpCGfSGEDX8FTqLwfDXxw18ZJjQJwus7bsJ9K/hAXnasXrn0f\n"
Packit Service 4684c1
"TJ+uJi8muqzP1V376mSUzlwXIzLZCtbwRdDhJJYRrLvf5zfHxHeDgvDALn+1AduF\n"
Packit Service 4684c1
"G/GzCVIFsYNSMdKGwNRp6Ucgl43BPZs6Swn2DXrxxW7Gng+8dvUS2XGLLdH6q1O3\n"
Packit Service 4684c1
"U1EgJilng+VXx9Rg3yCs5xDiehASySsM6MN/+v+Ouf9lkoQCEgrtlW5Lb/neOBlA\n"
Packit Service 4684c1
"aS8PPQuKkIEggNd8hW88YWQOJXMiCAgFppVp5B1Vbghn9IDJQISx/AXAoDXQvQfE\n"
Packit Service 4684c1
"bdOzcKFyDuklHl2IQPnYTFxm/G8=\n"
Packit Service 4684c1
"-----END CERTIFICATE-----\n"
Packit Service 4684c1
};
Packit Service 4684c1
Packit Service 4684c1
static const char bad_long_chain_pem[] = { /* 3rd-cert is broken */
Packit Service 4684c1
"-----BEGIN CERTIFICATE-----\n"
Packit Service 4684c1
"MIIDQDCCAiigAwIBAgIMU/xyoxPcYVSaqH7/MA0GCSqGSIb3DQEBCwUAMA8xDTAL\n"
Packit Service 4684c1
"BgNVBAMTBENBLTMwIhgPMjAxNDA4MjYxMTQyMjdaGA85OTk5MTIzMTIzNTk1OVow\n"
Packit Service 4684c1
"EzERMA8GA1UEChMIc2VydmVyLTQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\n"
Packit Service 4684c1
"AoIBAQDkemVOFdbhBX1qwjxQHr3LmPktNEVBmXjrIvyp++dN7gCYzubnpiLcBE+B\n"
Packit Service 4684c1
"S2b+ppxBYm9ynKijhGrO+lZPCQRXWmqUg4YDfvnEqM4n04dCE98jN4IhwvWZyP3p\n"
Packit Service 4684c1
"+U8Ra9mVIBAY2MReo1dcJQHNmo560xzxioHsGNQHAfYgVRHiE5hIXchYbWCkBrKt\n"
Packit Service 4684c1
"XOoSSTmfgCF3L22p6S1q143VoKUr/C9zqinZo6feGAiTprj6YH0tHswjGBbxTFLb\n"
Packit Service 4684c1
"q3ThbGDR5FNYL5q0FvQRNbjoF4oFitZ3P1Qkrzq7VIJd9k8J1C3g/16U2dDTKqRX\n"
Packit Service 4684c1
"ejX7maFZ6oRZJASsRSowEs4wTfRpAgMBAAGjgZMwgZAwDAYDVR0TAQH/BAIwADAa\n"
Packit Service 4684c1
"BgNVHREEEzARgg93d3cuZXhhbXBsZS5jb20wEwYDVR0lBAwwCgYIKwYBBQUHAwEw\n"
Packit Service 4684c1
"DwYDVR0PAQH/BAUDAwegADAdBgNVHQ4EFgQUAEYPmcA7S/KChiet+Z6+RRmogiww\n"
Packit Service 4684c1
"HwYDVR0jBBgwFoAUjxZogHO3y4VdOLuibQHsQYdsGgwwDQYJKoZIhvcNAQELBQAD\n"
Packit Service 4684c1
"ggEBABlA3npOWwl3eBycaLVOsmdPS+fUwhLnF8hxoyKpHe/33k1nIxd7iiqNZ3iw\n"
Packit Service 4684c1
"6pAjnuRUCjajU+mlx6ekrmga8mpmeD6JH0I3lq+mrPeCeFXm8gc1yJpcFJ/C2l4o\n"
Packit Service 4684c1
"+3HNY7RJKcfoQxIbiKOtZ6x9E0aYuk3s1Um3Pf8GLwENoou7Stg5qHsLbkN/GBuP\n"
Packit Service 4684c1
"n3p/4iqik2k7VblldDe3oCob5vMp0qrAEhlNl2Fn65rcB4+bp1EiC1Z+y6X8DpRb\n"
Packit Service 4684c1
"NomKUsOiGcbFjQ4ptT6fePmPHX1mgDCx+5/22cyBUYElefYP7Xzr+C8tqqO3JFKe\n"
Packit Service 4684c1
"hqEmQRsll9bkqpu2dh83c3i9u4g=\n"
Packit Service 4684c1
"-----END CERTIFICATE-----\n"
Packit Service 4684c1
"-----BEGIN CERTIFICATE-----\n"
Packit Service 4684c1
"MIIDATCCAemgAwIBAgIBAzANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0y\n"
Packit Service 4684c1
"MCIYDzIwMTQwODI2MTE0MjI3WhgPOTk5OTEyMzEyMzU5NTlaMA8xDTALBgNVBAMT\n"
Packit Service 4684c1
"BENBLTMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/4ofaL+ilmmM+\n"
Packit Service 4684c1
"bGaFRy5GYQXtkD8sA3+/GWsunR928fQS68Zh6iWU+gPm52i7Gfbh7piKWA5Tb63w\n"
Packit Service 4684c1
"unbS6dPsfPSvgRMZGKJpzxqVcBQAnTS4MuDPlXNg3K3HMyVtbxekII8jFeGEJuCL\n"
Packit Service 4684c1
"mBMT4dI48IZRzj+2mir38w2cQPfomaKtjg2jMokG8Z9/4+SU9VJCcY1/yZk8fCbS\n"
Packit Service 4684c1
"dBbwhnDq10yvhPCHgX6KMYmoJr28CYgH29Q9sDP1XN3VvAx5X+PtW/6pyF0U5E2e\n"
Packit Service 4684c1
"gRzVv7Hr3FJKvytbNxRMCoy2YOyvsTP0fIhiXdtkulTKXyiq4cxA+aYByOu1FjU4\n"
Packit Service 4684c1
"NicWbiZ/AgMBAAGjZDBiMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcE\n"
Packit Service 4684c1
"ADAdBgNVHQ4EFgQUjxZogHO3y4VdOLuibQHsQYdsGgwwHwYDVR0jBBgwFoAUwAx0\n"
Packit Service 4684c1
"aL2SrsoSZcZUuFlq0O17BSgwDQYJKoZIhvcNAQELBQADggEBAGQvj8SquT31w8JK\n"
Packit Service 4684c1
"tHDL4hWOU0EwVwWl4aYsvP17WspiFIIHKApPFfQOD0/Wg9zB48ble5ZSwKA3Vc3B\n"
Packit Service 4684c1
"DJgd77HgVAd/Nu1TS5TFDKhpuvFPJVpJ3cqt3pTsVGMzf6GRz5kG3Ly/pBgkqiMG\n"
Packit Service 4684c1
"gv6vTlEvzNe4FcnhNBEaRKpK5Hc5+GnxtfVoki3tjG5u+oa9/OwzAT+7IOyiIKHw\n"
Packit Service 4684c1
"7F4Cm56QAWMJgVNm329AjZrJLeNuKoQWGueNew4dOe/zlYEaVMG4So74twXQwIAB\n"
Packit Service 4684c1
"Zko7+wk6eI4CkI4Zair36s1jLkCF8xnL8FExTT3sg6B6KBHaNUuwc67WPILVuFuc\n"
Packit Service 4684c1
"VfVBOd8=\n"
Packit Service 4684c1
"-----END CERTIFICATE-----\n"
Packit Service 4684c1
"-----BEGIN CERTIFICATE-----\n"
Packit Service 4684c1
"XXIDMzCCAhugAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0x\n"
Packit Service 4684c1
"MCIYDzIwMTQwODI2MTE0MjI3WhgPOTk5OTEyMzEyMzU5NTlaMA8xDTALBgNVBAMT\n"
Packit Service 4684c1
"BENBLTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIf3as4EONSgWu\n"
Packit Service 4684c1
"Mbm9w3DbKd/su1UWlrYrcpVqmU3MKD5jXBxyoThSBWxmq1+wcNDmE1on6pHY1aad\n"
Packit Service 4684c1
"k3188JKMC83wEcyQXaiH3DlTYFXXkkI+JJNUGlfAMSoXG248SpoCIOhCETUG03iP\n"
Packit Service 4684c1
"Z3AZludaHYsvQQXXh1Kl6qn66+bKM53l/YhoQDxhoGaYvO8ZSwKnx5DEiq447jpW\n"
Packit Service 4684c1
"M+sUFe38RPaMQQXXc1GRctvQDzJGm+8ZRujYDH+fGNzVDDlRyRnsVanFGNdyfhmy\n"
Packit Service 4684c1
"BN2D2+2VEvzAQQXXg2wQN8gF3+luavIVEgETXODZPa5FF7ulmQmhqGrZcw6WtDmY\n"
Packit Service 4684c1
"hUbNmbL7AgMBQQXXgZUwgZIwDwYDVR0TAQH/BAUwAwEB/zAuBgNVHR4BAf8EJDAi\n"
Packit Service 4684c1
"oA8wDYILZXhhQQBsZS5jb22hDzANggtleGFtcGxlLm9yZzAPBgNVHQ8BAf8EBQMD\n"
Packit Service 4684c1
"BwQAMB0GA1UdQQQWBBTADHRovZKuyhJlxlS4WWrQ7XsFKDAfBgNVHSMEGDAWgBTg\n"
Packit Service 4684c1
"+khaP8UOjcwSQQxgT+zhh0aWPDANBgkqhkiG9w0BAQsFAAOCAQEASq5yBiib8FPk\n"
Packit Service 4684c1
"oRONZ4COgGqjQQigeOBRgbHf9AfagpoYDbOKDQS8Iwt9VHZfJxdcJ1OuM1aQqXlN\n"
Packit Service 4684c1
"dUyf+JdR/24NQQyrhL+dEfRGka6Db96YuPsbetVhNIiMm2teXDIPgGzAKuTm4xPA\n"
Packit Service 4684c1
"6zyNVy5AwfDQQQIZ+EUsfOoerIElNyAbh66law4MWuiv4oyX4u49m5lxLuL6mFpR\n"
Packit Service 4684c1
"CIZYWjZMa0MJQQMKGm/AhpfEOkbT58Fg5YmxhnKMk6ps1eR6mh3NgH1IbUqvEYNC\n"
Packit Service 4684c1
"eS42X3kAMxEDQQBOMths0gxeLL+IHdQpXnAjZppW8zEIcN3yfknul35r8R6Qt9aK\n"
Packit Service 4684c1
"q5+/m1ADBw==\n"
Packit Service 4684c1
"-----END CERTIFICATE-----\n"
Packit Service 4684c1
"-----BEGIN CERTIFICATE-----\n"
Packit Service 4684c1
"MIIDATCCAemgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0w\n"
Packit Service 4684c1
"MCIYDzIwMTQwODI2MTE0MjI2WhgPOTk5OTEyMzEyMzU5NTlaMA8xDTALBgNVBAMT\n"
Packit Service 4684c1
"BENBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIe0eOnLaV750K\n"
Packit Service 4684c1
"4+mVaAftRrJp8t68KJivcRFpkl0ucQs6gwNf9EsVkHineOR3RXypjJ7Hsv+4PIKp\n"
Packit Service 4684c1
"BhEOTprYUKcBaxHK/NIezV6NrO1AwuD6MtJDQF9jGpSy0F3eRUoBCjVYhTl+JxcZ\n"
Packit Service 4684c1
"hGHPJd8WMeanQWY4xG4gTwtpjF3tPU5+JGQwLk5SbcLicM2QMG3CapZinOGK3/XC\n"
Packit Service 4684c1
"Fjsvf5ZhxnixayhfiX/n9BmeP1yxz7YORNYPlL8z1CcLZqJsyjZnNkVwNvl4ft9I\n"
Packit Service 4684c1
"FOKBLoOTSGocHFIFXh5b50GG6QHgvN+TiAwdpfRTUskWVg8VVIh7ymgDoI2jQhk4\n"
Packit Service 4684c1
"EeMaZHd/AgMBAAGjZDBiMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcE\n"
Packit Service 4684c1
"ADAdBgNVHQ4EFgQU4PpIWj/FDo3MEilcYE/s4YdGljwwHwYDVR0jBBgwFoAU6XJK\n"
Packit Service 4684c1
"EOUYTuioWHG+1YBuz0yPFmowDQYJKoZIhvcNAQELBQADggEBAJOCrGvbeRqPj+uL\n"
Packit Service 4684c1
"2FIfbkYZAx2nGl3RVv5ZK2YeDpU1udxLihc6Sr67OZbiA4QMKxwgI7pupuwXmyql\n"
Packit Service 4684c1
"vs9dWnNpjzgfc0OqqzVdOFlfw8ew2DQb2sUXCcIkwqXb/pBQ9BvcgdDASu+rm74j\n"
Packit Service 4684c1
"JWDZlhcqeVhZROKfpsjsl+lHgZ7kANwHtUJg/WvK8J971hgElqeBO1O97cGkw/in\n"
Packit Service 4684c1
"e8ooK9Lxk3Td+WdI8C7juCYiwsGqFEKuj7b6937uzvpFmm1fYDdOHhTMcHTHIVTr\n"
Packit Service 4684c1
"uxSSurQ4XSDF6Iuel3+IdpLL79UYJ7Cf4IhBWj0EloF6xWTA6nUYl3gzKpx1Tg1U\n"
Packit Service 4684c1
"x2+26YY=\n"
Packit Service 4684c1
"-----END CERTIFICATE-----\n"
Packit Service 4684c1
"-----BEGIN CERTIFICATE-----\n"
Packit Service 4684c1
"MIIC4DCCAcigAwIBAgIBADANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0w\n"
Packit Service 4684c1
"MCIYDzIwMTQwODI2MTE0MjI2WhgPOTk5OTEyMzEyMzU5NTlaMA8xDTALBgNVBAMT\n"
Packit Service 4684c1
"BENBLTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqLuVrTyiqz+Zs\n"
Packit Service 4684c1
"9Qw5V2Z1y1YSWU6aRDMs+34rP2gwT41C69HBh2LLRS04iJUVQydwnEJukwKlTNRn\n"
Packit Service 4684c1
"1lEpvWgtYmySWA2SyI4xkVzCXgwv0k7WyLwa39hfNY1rXAqhDTL8VO0nXxi8hCMW\n"
Packit Service 4684c1
"ohaXcvsieglhN5uwu6voEdY3Gwtx4V8ysDJ2P9EBo49ZHdpBOv+3YLDxbWZuL/tI\n"
Packit Service 4684c1
"nYkBUHHfWGhUHsRsu0EGob3SFnfiooCbE/vtmn9rUuBEQDqOjOg3el/aTPJzcMi/\n"
Packit Service 4684c1
"RTz+8ho17ZrQRKHZGKWq9Skank+2X9FZoYKFCUlBm6RVud1R54QYZEIj7W9ujQLN\n"
Packit Service 4684c1
"LJrcIwBDAgMBAAGjQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcE\n"
Packit Service 4684c1
"ADAdBgNVHQ4EFgQU6XJKEOUYTuioWHG+1YBuz0yPFmowDQYJKoZIhvcNAQELBQAD\n"
Packit Service 4684c1
"ggEBAEeXYGhZ8fWDpCGfSGEDX8FTqLwfDXxw18ZJjQJwus7bsJ9K/hAXnasXrn0f\n"
Packit Service 4684c1
"TJ+uJi8muqzP1V376mSUzlwXIzLZCtbwRdDhJJYRrLvf5zfHxHeDgvDALn+1AduF\n"
Packit Service 4684c1
"G/GzCVIFsYNSMdKGwNRp6Ucgl43BPZs6Swn2DXrxxW7Gng+8dvUS2XGLLdH6q1O3\n"
Packit Service 4684c1
"U1EgJilng+VXx9Rg3yCs5xDiehASySsM6MN/+v+Ouf9lkoQCEgrtlW5Lb/neOBlA\n"
Packit Service 4684c1
"aS8PPQuKkIEggNd8hW88YWQOJXMiCAgFppVp5B1Vbghn9IDJQISx/AXAoDXQvQfE\n"
Packit Service 4684c1
"bdOzcKFyDuklHl2IQPnYTFxm/G8=\n"
Packit Service 4684c1
"-----END CERTIFICATE-----\n"
Packit Service 4684c1
};
Packit Service 4684c1
Packit Service 4684c1
static const gnutls_datum_t long_chain = {
Packit Service 4684c1
	(void*)long_chain_pem, sizeof(long_chain_pem)-1
Packit Service 4684c1
};
Packit Service 4684c1
Packit Service 4684c1
static const gnutls_datum_t bad_long_chain = {
Packit Service 4684c1
	(void*)bad_long_chain_pem, sizeof(bad_long_chain_pem)-1
Packit Service 4684c1
};
Packit Service 4684c1
Packit Service 4684c1
static const test_st tests[] = {
Packit Service 4684c1
	{.name = "load 5 certs",
Packit Service 4684c1
	 .certs = &long_chain,
Packit Service 4684c1
	 .ncerts = 5,
Packit Service 4684c1
	 .flags = 0
Packit Service 4684c1
	},
Packit Service 4684c1
	{.name = "partial load of 5 certs, with expected failure",
Packit Service 4684c1
	 .certs = &bad_long_chain,
Packit Service 4684c1
	 .ncerts = 5,
Packit Service 4684c1
	 .flags = 0,
Packit Service 4684c1
	 .exp_err = GNUTLS_E_ASN1_TAG_ERROR
Packit Service 4684c1
	},
Packit Service 4684c1
	{.name = "load 2 certs out of 5",
Packit Service 4684c1
	 .certs = &long_chain,
Packit Service 4684c1
	 .max1 = 2,
Packit Service 4684c1
	 .ncerts = 2,
Packit Service 4684c1
	 .flags = 0
Packit Service 4684c1
	},
Packit Service 4684c1
	{.name = "load 1 cert out of 5",
Packit Service 4684c1
	 .certs = &long_chain,
Packit Service 4684c1
	 .ncerts = 1,
Packit Service 4684c1
	 .max1 = 1,
Packit Service 4684c1
	 .max2 = 0,
Packit Service 4684c1
	 .flags = 0
Packit Service 4684c1
	},
Packit Service 4684c1
	{.name = "load 2 certs with fail if exceed",
Packit Service 4684c1
	 .certs = &long_chain,
Packit Service 4684c1
	 .ncerts = 2,
Packit Service 4684c1
	 .max1 = 2,
Packit Service 4684c1
	 .flags = GNUTLS_X509_CRT_LIST_IMPORT_FAIL_IF_EXCEED,
Packit Service 4684c1
	 .exp_err = GNUTLS_E_SHORT_MEMORY_BUFFER
Packit Service 4684c1
	},
Packit Service 4684c1
	{.name = "load 2 certs with fail if exceed and retry",
Packit Service 4684c1
	 .certs = &long_chain,
Packit Service 4684c1
	 .ncerts = 5,
Packit Service 4684c1
	 .max1 = 1,
Packit Service 4684c1
	 .max2 = 6,
Packit Service 4684c1
	 .exp_err = 0,
Packit Service 4684c1
	 .flags = GNUTLS_X509_CRT_LIST_IMPORT_FAIL_IF_EXCEED
Packit Service 4684c1
	},
Packit Service 4684c1
	{.name = "load certs, fail due to size, and retry, and fail again",
Packit Service 4684c1
	 .certs = &long_chain,
Packit Service 4684c1
	 .max1 = 1,
Packit Service 4684c1
	 .max2 = 3,
Packit Service 4684c1
	 .ncerts = 5,
Packit Service 4684c1
	 .flags = GNUTLS_X509_CRT_LIST_IMPORT_FAIL_IF_EXCEED,
Packit Service 4684c1
	 .exp_err = GNUTLS_E_SHORT_MEMORY_BUFFER
Packit Service 4684c1
	}
Packit Service 4684c1
};
Packit Service 4684c1
Packit Service 4684c1
void doit(void)
Packit Service 4684c1
{
Packit Service 4684c1
	unsigned int i;
Packit Service 4684c1
Packit Service 4684c1
	for (i=0;i
Packit Service 4684c1
		success("checking: %s\n", tests[i].name);
Packit Service 4684c1
Packit Service 4684c1
		load_list(tests[i].name, tests[i].certs, tests[i].ncerts,
Packit Service 4684c1
			  tests[i].max1, tests[i].max2, tests[i].flags,
Packit Service 4684c1
			  tests[i].exp_err);
Packit Service 4684c1
	}
Packit Service 4684c1
Packit Service 4684c1
	gnutls_global_deinit();
Packit Service 4684c1
}