summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@redhat.com>2016-05-17 08:43:58 +0200
committerNikos Mavrogiannopoulos <nmav@redhat.com>2016-05-17 08:43:58 +0200
commit596c802fd5195dd0bf2674f83117195e41e3d08a (patch)
treeaf2c8d0ab4e35b1f371ff96ee5e413fa09092bd7 /tests
parent3ed8c5f5ea27a444b411dc6f81c259caaece5d23 (diff)
downloadgnutls-596c802fd5195dd0bf2674f83117195e41e3d08a.tar.gz
tests: cert-callbacks check now checks the server-side callback operation as well
Diffstat (limited to 'tests')
-rw-r--r--tests/mini-x509-cert-callback.c313
1 files changed, 112 insertions, 201 deletions
diff --git a/tests/mini-x509-cert-callback.c b/tests/mini-x509-cert-callback.c
index 814c2d1465..dde39ddff4 100644
--- a/tests/mini-x509-cert-callback.c
+++ b/tests/mini-x509-cert-callback.c
@@ -33,6 +33,7 @@
#include <gnutls/x509.h>
#include "utils.h"
#include "eagain-common.h"
+#include "cert-common.h"
/* This tests gnutls_certificate_set_x509_key() */
@@ -43,142 +44,6 @@ static void tls_log_func(int level, const char *str)
fprintf(stderr, "%s|<%d>| %s", side, level, str);
}
-static unsigned char ca_cert_pem[] =
-"-----BEGIN CERTIFICATE-----\n"
-"MIIC4DCCAcigAwIBAgIBADANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0w\n"
-"MCIYDzIwMTQwNDA5MDgwMjM0WhgPOTk5OTEyMzEyMzU5NTlaMA8xDTALBgNVBAMT\n"
-"BENBLTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuLSye8pe3yWKZ\n"
-"Yp7tLQ4ImwLqqh1aN7x9pc5spLDj6krVArzkyyYDcWvtQNDjErEfLUrZZrCc4aIl\n"
-"oU1Ghb92kI8ofZnHFbj3z5zdcWqiPppj5Y+hRdc4LszTWb+itrD9Ht/D67EK+m7W\n"
-"ev6xxUdyiBYUmb2O3CnPZpUVshMRtEe45EDGI5hUgL2n4Msj41htTq8hATYPXgoq\n"
-"gQUyXFpKAX5XDCyOG+FC6jmEys7UCRYv3SCl7TPWJ4cm+lHcFI2/OTOCBvMlKN2J\n"
-"mWCdfnudZldqthin+8fR9l4nbuutOfPNt1Dj9InDzWZ1W/o4LrjKa7fsvszj2Z5A\n"
-"Fn+xN/4zAgMBAAGjQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcE\n"
-"ADAdBgNVHQ4EFgQUwRHwbXyPosKNNkBiZduEwL5ZCwswDQYJKoZIhvcNAQELBQAD\n"
-"ggEBAEKr0b7WoJL+L8St/LEITU/i7FwFrCP6DkbaNo0kgzPmwnvNmw88MLI6UKwE\n"
-"JecnjFhurRBBZ4FA85ucNyizeBnuXqFcyJ20+XziaXGPKV/ugKyYv9KBoTYkQOCh\n"
-"nbOthmDqjvy2UYQj0BU2dOywkjUKWhYHEZLBpZYck0Orynxydwil5Ncsz4t3smJw\n"
-"ahzCW8SzBFTiO99qQBCH2RH1PbUYzfAnJxZS2VScpcqlu9pr+Qv7r8E3p9qHxnQM\n"
-"gO5laWO6lc13rNsbZRrtlCvacsiDSuDnS8EVXm0ih4fAntpRHacPbXZbOPQqJ/+1\n"
-"G7/qJ6cDC/9aW+fU80ogTkAoFg4=\n"
-"-----END CERTIFICATE-----\n";
-
-const gnutls_datum_t ca_cert = { ca_cert_pem,
- sizeof(ca_cert_pem)
-};
-
-static unsigned char server_cert_pem[] =
-"-----BEGIN CERTIFICATE-----\n"
-"MIIDOjCCAiKgAwIBAgIMU0T+mwoDu5uVLKeeMA0GCSqGSIb3DQEBCwUAMA8xDTAL\n"
-"BgNVBAMTBENBLTEwIhgPMjAxNDA0MDkwODAyMzVaGA85OTk5MTIzMTIzNTk1OVow\n"
-"EzERMA8GA1UEAxMIc2VydmVyLTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\n"
-"AoIBAQDXfvgsMWXHNf3iUaEoZSNztZZr6+UdBkoUhbdWJDR+GwR+GHfnYaYHsuqb\n"
-"bNEl/QFI+8Jeth0SmG7TNB+b/AlHFoBm8TwBt7H+Mn6AQIdo872Vs262UkHgbZN6\n"
-"dEQeRCgiXmlsOVe+MVpf79Xi32MYz1FZ/ueS6tr8sIDhECThIZkq2eulVjAV86N2\n"
-"zQ72Ml1k8rPw4SdK5OFhcXNdXr6CsAol8MmiORKDF0iAZxwtFVc00nBGqQC5rwrN\n"
-"3A8czH5TsvyvrcW0mwV2XOVvZM5kFM1T/X0jF6RQHiGGFBYK4s6JZxSSOhJMFYYh\n"
-"koPEKsuVZdmBJ2yTTdGumHZfG9LDAgMBAAGjgY0wgYowDAYDVR0TAQH/BAIwADAU\n"
-"BgNVHREEDTALgglsb2NhbGhvc3QwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0P\n"
-"AQH/BAUDAwegADAdBgNVHQ4EFgQURXiN5VD5vgqAprhd/37ldGKv4/4wHwYDVR0j\n"
-"BBgwFoAU8MUzmkotjSmVa5r1ejMkMQ6BiZYwDQYJKoZIhvcNAQELBQADggEBABSU\n"
-"cmMX0nGeg43itPnLjSTIUuYEamRhfsFDwgRYQn5w+BcFG1p0scBRxLAShUEb9A2A\n"
-"oEJV4rQDpCn9bcMrMHhTCR5sOlLh/2o9BROjK0+DjQLDkooQK5xa+1GYEiy6QYCx\n"
-"QjdCCnMhHh24oP2/vUggRKhevvD2QQFKcCDT6n13RFYm+HX82gIh6SAtRs0oahY5\n"
-"k9CM9TYRPzXy+tQqhZisJzc8BLTW/XA97kAJW6+hUhPir7AYR6BKJhNeIxcN/yMy\n"
-"jsHzWDLezip/8q+kzw658V5e40hne7ZaJycGUaUdLVnJcpNtBgGE82TRS/XZSQKF\n"
-"fpy8FLGcJynqlIOzdKs=\n"
-"-----END CERTIFICATE-----\n"
-"-----BEGIN CERTIFICATE-----\n"
-"MIIDATCCAemgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0w\n"
-"MCIYDzIwMTQwNDA5MDgwMjM0WhgPOTk5OTEyMzEyMzU5NTlaMA8xDTALBgNVBAMT\n"
-"BENBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZq3sA+mjFadII\n"
-"EMDHfj1fYh+UOUSa8c814E9NfCdYZ9Z11BmPpBeR5mXV12j1DKjkTlqTUL7s4lVR\n"
-"RKfyAdCpQIfeXHDeTYYUq2uBnbi5YMG5Y+WbCiYacgRU3IypYrSzaeh1mY7GiEFe\n"
-"U/NaImHLCf+TdAvTJ3Fo0QPe5QN2Lrv6l//cqOv7enZ91KRWxClDMM6EAr+C/7dk\n"
-"rOTXRrCuH/e/KVBXEJ/YeSYPmBIwolGktRrGdsVagdqYArr4dhJ7VThIVRUX1Ijl\n"
-"THCLstI/LuD8WkDccU3ZSdm47f2U43p/+rSO0MiNOXiaskeK56G/9DbJEeETUbzm\n"
-"/B2712MVAgMBAAGjZDBiMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcE\n"
-"ADAdBgNVHQ4EFgQU8MUzmkotjSmVa5r1ejMkMQ6BiZYwHwYDVR0jBBgwFoAUwRHw\n"
-"bXyPosKNNkBiZduEwL5ZCwswDQYJKoZIhvcNAQELBQADggEBACKxBPj9u1t52uIF\n"
-"eQ2JPb8/u+MBttvSLo0qPKXwpc4q8hNclh66dpqGWiF0iSumsKyKU54r6CIF9Ikm\n"
-"t1V1GR9Ll4iTnz3NdIt1w3ns8rSlU5O/dgKysK/1C/5xJWEUYtEO5mnyi4Zaf8FB\n"
-"hKmQ1aWF5dTB81PVAQxyCiFEnH7YumK7pJeIpnCOPIqLZLUHfrTUeL8zONF4i5Sb\n"
-"7taZ8SQ6b7IaioU+NJ50uT2wy34lsyvCWf76Azezv9bggkdNDo/7ktMgsfRrSyM8\n"
-"+MVob5ePGTjKx5yMy/sy2vUkkefwW3RiEss/y2JRb8Hw7nDlA9ttilYKFwGFwRvw\n"
-"KRsXqo8=\n"
-"-----END CERTIFICATE-----\n";
-
-const gnutls_datum_t server_cert = { server_cert_pem,
- sizeof(server_cert_pem)
-};
-
-static unsigned char server_key_pem[] =
-"-----BEGIN RSA PRIVATE KEY-----\n"
-"MIIEpAIBAAKCAQEA1374LDFlxzX94lGhKGUjc7WWa+vlHQZKFIW3ViQ0fhsEfhh3\n"
-"52GmB7Lqm2zRJf0BSPvCXrYdEphu0zQfm/wJRxaAZvE8Abex/jJ+gECHaPO9lbNu\n"
-"tlJB4G2TenREHkQoIl5pbDlXvjFaX+/V4t9jGM9RWf7nkura/LCA4RAk4SGZKtnr\n"
-"pVYwFfOjds0O9jJdZPKz8OEnSuThYXFzXV6+grAKJfDJojkSgxdIgGccLRVXNNJw\n"
-"RqkAua8KzdwPHMx+U7L8r63FtJsFdlzlb2TOZBTNU/19IxekUB4hhhQWCuLOiWcU\n"
-"kjoSTBWGIZKDxCrLlWXZgSdsk03Rrph2XxvSwwIDAQABAoIBAB7trDS7ij4DM8MN\n"
-"sDGaAnKS91nZ63I0+uDjKCMG4znOKuDmJh9hVnD4bs+L2KC5JTwSVh09ygJnOlC5\n"
-"xGegzrwTMK6VpOUiNjujh6BkooqfoPAhZpxoReguEeKbWUN2yMPWBQ9xU3SKpMvs\n"
-"IiiDozdmWeiuuxHM/00REA49QO3Gnx2logeB+fcvXXD1UiZV3x0xxSApiJt1sr2r\n"
-"NmqSyGdNUgpmnTP8zbKnDaRe5Wj4tj1TCTLE/HZ0tzdRuwlkIqvcpGg1LMtKm5N8\n"
-"xIWjTGMFwGjG+OF8LGqHLH+28pI3iMB6QqO2YLwOp+WZKImKP3+Dp3s8lCw8t8cm\n"
-"q5/Qc9ECgYEA2xwxm+pFkrFmZNLCakP/6S5AZqpfSBRUlF/uX2pBKO7o6I6aOV9o\n"
-"zq2QWYIZfdyD+9MvAFUQ36sWfTVWpGA34WGtsGtcRRygKKTigpJHvBldaPxiuYuk\n"
-"xbS54nWUdix/JzyQAy22xJXlp4XJvtFJjHhA2td0XA7tfng9n8jmvEUCgYEA+8cA\n"
-"uFIQFbaZ2y6pnOvlVj8OH0f1hZa9M+3q01fWy1rnDAsLrIzJy8TZnBtpDwy9lAun\n"
-"Sa6wzu6qeHmF17xwk5U7BCyK2Qj/9KhRLg1mnDebQ/CiLSAaJVnrYFp9Du96fTkN\n"
-"ollvbFiGF92QwPTDf2f1gHZQEPwa+f/ox37ad2cCgYEAwMgXpfUD7cOEMeV2BQV7\n"
-"XnDBXRM97i9lE38sPmtAlYFPD36Yly4pCt+PCBH9181zmtf+nK47wG/Jw7RwXQQD\n"
-"ZpwItBZiArTi/Z/FY9jMoOU4WKznOBVzjjgq7ONDEo6n+Z/BnepUyraQb0q5bNi7\n"
-"e4o6ldHHoU/JCeNFZRbgXHkCgYA6vJU9at+XwS6phHxLQHkTIsivoYD0tlLTX4it\n"
-"30sby8wk8hq6GWomYHkHwxlCSo2bkRBozxkuXV1ll6wSxUJaG7FV6vJFaaUUtYOi\n"
-"w7uRbCOLuQKMlnWjCxQvOUz9g/7GYd39ZvHoi8pUnPrdGPzWpzEN1AwfukCs2/e5\n"
-"Oq3KtwKBgQCkHmDU8h0kOfN28f8ZiyjJemQMNoOGiJqnGexaKvsRd+bt4H+7DsWQ\n"
-"OnyKm/oR0wCCSmFM5aQc6GgzPD7orueKVYHChbY7HLTWKRHNs6Rlk+6hXJvOld0i\n"
-"Cl7KqL2x2ibGMtt4LtSntdzWqa87N7vCWMSTmvd8uLgflBs33xUIiQ==\n"
-"-----END RSA PRIVATE KEY-----\n";
-
-static unsigned char cert_pem[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIICHjCCAYmgAwIBAgIERiYdNzALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n"
- "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTI3WhcNMDgwNDE3MTMyOTI3WjAdMRsw\n"
- "GQYDVQQDExJHbnVUTFMgdGVzdCBjbGllbnQwgZwwCwYJKoZIhvcNAQEBA4GMADCB\n"
- "iAKBgLtmQ/Xyxde2jMzF3/WIO7HJS2oOoa0gUEAIgKFPXKPQ+GzP5jz37AR2ExeL\n"
- "ZIkiW8DdU3w77XwEu4C5KL6Om8aOoKUSy/VXHqLnu7czSZ/ju0quak1o/8kR4jKN\n"
- "zj2AC41179gAgY8oBAOgIo1hBAf6tjd9IQdJ0glhaZiQo1ipAgMBAAGjdjB0MAwG\n"
- "A1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDwYDVR0PAQH/BAUDAweg\n"
- "ADAdBgNVHQ4EFgQUTLkKm/odNON+3svSBxX+odrLaJEwHwYDVR0jBBgwFoAU6Twc\n"
- "+62SbuYGpFYsouHAUyfI8pUwCwYJKoZIhvcNAQEFA4GBALujmBJVZnvaTXr9cFRJ\n"
- "jpfc/3X7sLUsMvumcDE01ls/cG5mIatmiyEU9qI3jbgUf82z23ON/acwJf875D3/\n"
- "U7jyOsBJ44SEQITbin2yUeJMIm1tievvdNXBDfW95AM507ShzP12sfiJkJfjjdhy\n"
- "dc8Siq5JojruiMizAf0pA7in\n" "-----END CERTIFICATE-----\n";
-const gnutls_datum_t cli_cert = { cert_pem, sizeof(cert_pem) - 1};
-
-static unsigned char key_pem[] =
- "-----BEGIN RSA PRIVATE KEY-----\n"
- "MIICXAIBAAKBgQC7ZkP18sXXtozMxd/1iDuxyUtqDqGtIFBACIChT1yj0Phsz+Y8\n"
- "9+wEdhMXi2SJIlvA3VN8O+18BLuAuSi+jpvGjqClEsv1Vx6i57u3M0mf47tKrmpN\n"
- "aP/JEeIyjc49gAuNde/YAIGPKAQDoCKNYQQH+rY3fSEHSdIJYWmYkKNYqQIDAQAB\n"
- "AoGADpmARG5CQxS+AesNkGmpauepiCz1JBF/JwnyiX6vEzUh0Ypd39SZztwrDxvF\n"
- "PJjQaKVljml1zkJpIDVsqvHdyVdse8M+Qn6hw4x2p5rogdvhhIL1mdWo7jWeVJTF\n"
- "RKB7zLdMPs3ySdtcIQaF9nUAQ2KJEvldkO3m/bRJFEp54k0CQQDYy+RlTmwRD6hy\n"
- "7UtMjR0H3CSZJeQ8svMCxHLmOluG9H1UKk55ZBYfRTsXniqUkJBZ5wuV1L+pR9EK\n"
- "ca89a+1VAkEA3UmBelwEv2u9cAU1QjKjmwju1JgXbrjEohK+3B5y0ESEXPAwNQT9\n"
- "TrDM1m9AyxYTWLxX93dI5QwNFJtmbtjeBQJARSCWXhsoaDRG8QZrCSjBxfzTCqZD\n"
- "ZXtl807ymCipgJm60LiAt0JLr4LiucAsMZz6+j+quQbSakbFCACB8SLV1QJBAKZQ\n"
- "YKf+EPNtnmta/rRKKvySsi3GQZZN+Dt3q0r094XgeTsAqrqujVNfPhTMeP4qEVBX\n"
- "/iVX2cmMTSh3w3z8MaECQEp0XJWDVKOwcTW6Ajp9SowtmiZ3YDYo1LF9igb4iaLv\n"
- "sWZGfbnU3ryjvkb6YuFjgtzbZDZHWQCo8/cOtOBmPdk=\n"
- "-----END RSA PRIVATE KEY-----\n";
-const gnutls_datum_t cli_key = { key_pem, sizeof(key_pem) - 1};
-
-const gnutls_datum_t server_key = { server_key_pem,
- sizeof(server_key_pem)
-};
-
static gnutls_privkey_t g_pkey = NULL;
static gnutls_pcert_st *g_pcert = NULL;
@@ -199,11 +64,13 @@ cert_callback(gnutls_session_t session,
}
p = gnutls_malloc(sizeof(*p));
- if (p==NULL)
+ if (p == NULL)
return -1;
if (g_pkey == NULL) {
- ret = gnutls_pcert_import_x509_raw(p, &cli_cert, GNUTLS_X509_FMT_PEM, 0);
+ ret =
+ gnutls_pcert_import_x509_raw(p, &cli_ca3_cert,
+ GNUTLS_X509_FMT_PEM, 0);
if (ret < 0)
return -1;
@@ -211,7 +78,10 @@ cert_callback(gnutls_session_t session,
if (ret < 0)
return -1;
- ret = gnutls_privkey_import_x509_raw(lkey, &cli_key, GNUTLS_X509_FMT_PEM, NULL, 0);
+ ret =
+ gnutls_privkey_import_x509_raw(lkey, &cli_ca3_key,
+ GNUTLS_X509_FMT_PEM, NULL,
+ 0);
if (ret < 0)
return -1;
@@ -225,10 +95,61 @@ cert_callback(gnutls_session_t session,
*pcert = g_pcert;
*pcert_length = 1;
if (gnutls_certificate_client_get_request_status(session) == 0) {
- fail("gnutls_certificate_client_get_request_status failed\n");
- return -1;
+ fail("gnutls_certificate_client_get_request_status failed\n");
+ return -1;
+ }
+ *pkey = g_pkey;
}
- *pkey = g_pkey;
+
+ return 0;
+}
+
+static gnutls_privkey_t server_pkey = NULL;
+static gnutls_pcert_st *server_pcert = NULL;
+
+static int
+server_cert_callback(gnutls_session_t session,
+ const gnutls_datum_t * req_ca_rdn, int nreqs,
+ const gnutls_pk_algorithm_t * sign_algos,
+ int sign_algos_length, gnutls_pcert_st ** pcert,
+ unsigned int *pcert_length, gnutls_privkey_t * pkey)
+{
+ int ret;
+ gnutls_pcert_st *p;
+ gnutls_privkey_t lkey;
+
+ p = gnutls_malloc(sizeof(*p));
+ if (p == NULL)
+ return -1;
+
+ if (server_pkey == NULL) {
+ ret =
+ gnutls_pcert_import_x509_raw(p, &server_ca3_localhost_cert,
+ GNUTLS_X509_FMT_PEM, 0);
+ if (ret < 0)
+ return -1;
+
+ ret = gnutls_privkey_init(&lkey);
+ if (ret < 0)
+ return -1;
+
+ ret =
+ gnutls_privkey_import_x509_raw(lkey, &server_ca3_key,
+ GNUTLS_X509_FMT_PEM, NULL,
+ 0);
+ if (ret < 0)
+ return -1;
+
+ server_pcert = p;
+ server_pkey = lkey;
+
+ *pcert = p;
+ *pcert_length = 1;
+ *pkey = lkey;
+ } else {
+ *pcert = server_pcert;
+ *pcert_length = 1;
+ *pkey = server_pkey;
}
return 0;
@@ -246,10 +167,6 @@ void doit(void)
gnutls_certificate_credentials_t clientx509cred;
gnutls_session_t client;
int cret = GNUTLS_E_AGAIN;
- gnutls_x509_crt_t *crts;
- unsigned int crts_size;
- unsigned i;
- gnutls_x509_privkey_t pkey;
/* General init. */
global_init();
@@ -257,41 +174,16 @@ void doit(void)
if (debug)
gnutls_global_set_log_level(2);
- ret = gnutls_x509_crt_list_import2(&crts, &crts_size, &server_cert, GNUTLS_X509_FMT_PEM,
- GNUTLS_X509_CRT_LIST_FAIL_IF_UNSORTED);
- if (ret < 0) {
- fprintf(stderr, "error: %s\n", gnutls_strerror(ret));
- exit(1);
- }
-
- ret = gnutls_x509_privkey_init(&pkey);
- if (ret < 0) {
- fprintf(stderr, "error: %s\n", gnutls_strerror(ret));
- exit(1);
- }
-
- ret =
- gnutls_x509_privkey_import(pkey, &server_key,
- GNUTLS_X509_FMT_PEM);
- if (ret < 0) {
- fprintf(stderr, "error: %s\n", gnutls_strerror(ret));
- exit(1);
- }
-
/* Init server */
gnutls_certificate_allocate_credentials(&serverx509cred);
- gnutls_certificate_set_x509_key(serverx509cred, crts, crts_size, pkey);
- gnutls_x509_privkey_deinit(pkey);
- for (i=0;i<crts_size;i++)
- gnutls_x509_crt_deinit(crts[i]);
- gnutls_free(crts);
+
+ gnutls_certificate_set_retrieve_function2(serverx509cred,
+ server_cert_callback);
gnutls_init(&server, GNUTLS_SERVER);
- gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE,
- serverx509cred);
+ gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred);
gnutls_priority_set_direct(server,
- "NORMAL:-CIPHER-ALL:+AES-128-GCM",
- NULL);
+ "NORMAL:-CIPHER-ALL:+AES-128-GCM", NULL);
gnutls_transport_set_push_function(server, server_push);
gnutls_transport_set_pull_function(server, server_pull);
gnutls_transport_set_ptr(server, server);
@@ -303,18 +195,21 @@ void doit(void)
if (ret < 0)
exit(1);
- ret = gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca_cert, GNUTLS_X509_FMT_PEM);
+ ret =
+ gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca3_cert,
+ GNUTLS_X509_FMT_PEM);
if (ret < 0)
exit(1);
- gnutls_certificate_set_retrieve_function2(clientx509cred, cert_callback);
+ gnutls_certificate_set_retrieve_function2(clientx509cred,
+ cert_callback);
ret = gnutls_init(&client, GNUTLS_CLIENT);
if (ret < 0)
exit(1);
ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE,
- clientx509cred);
+ clientx509cred);
if (ret < 0)
exit(1);
@@ -343,20 +238,25 @@ void doit(void)
}
gnutls_x509_crt_init(&crt);
- ret = gnutls_x509_crt_import(crt, &server_cert, GNUTLS_X509_FMT_PEM);
+ ret =
+ gnutls_x509_crt_import(crt, &server_ca3_localhost_cert,
+ GNUTLS_X509_FMT_PEM);
if (ret < 0) {
- fail("gnutls_x509_crt_import: %s\n", gnutls_strerror(ret));
+ fail("gnutls_x509_crt_import: %s\n",
+ gnutls_strerror(ret));
exit(1);
}
ret = gnutls_x509_crt_export2(crt, GNUTLS_X509_FMT_DER, &scert);
if (ret < 0) {
- fail("gnutls_x509_crt_export2: %s\n", gnutls_strerror(ret));
+ fail("gnutls_x509_crt_export2: %s\n",
+ gnutls_strerror(ret));
exit(1);
}
gnutls_x509_crt_deinit(crt);
- if (scert.size != mcert->size || memcmp(scert.data, mcert->data, mcert->size) != 0) {
+ if (scert.size != mcert->size
+ || memcmp(scert.data, mcert->data, mcert->size) != 0) {
fail("gnutls_certificate_get_ours output doesn't match cert\n");
exit(1);
}
@@ -376,20 +276,25 @@ void doit(void)
}
gnutls_x509_crt_init(&crt);
- ret = gnutls_x509_crt_import(crt, &cli_cert, GNUTLS_X509_FMT_PEM);
+ ret =
+ gnutls_x509_crt_import(crt, &cli_ca3_cert,
+ GNUTLS_X509_FMT_PEM);
if (ret < 0) {
- fail("gnutls_x509_crt_import: %s\n", gnutls_strerror(ret));
+ fail("gnutls_x509_crt_import: %s\n",
+ gnutls_strerror(ret));
exit(1);
}
ret = gnutls_x509_crt_export2(crt, GNUTLS_X509_FMT_DER, &ccert);
if (ret < 0) {
- fail("gnutls_x509_crt_export2: %s\n", gnutls_strerror(ret));
+ fail("gnutls_x509_crt_export2: %s\n",
+ gnutls_strerror(ret));
exit(1);
}
gnutls_x509_crt_deinit(crt);
- if (ccert.size != mcert->size || memcmp(ccert.data, mcert->data, mcert->size) != 0) {
+ if (ccert.size != mcert->size
+ || memcmp(ccert.data, mcert->data, mcert->size) != 0) {
fail("gnutls_certificate_get_ours output doesn't match cert\n");
exit(1);
}
@@ -406,20 +311,22 @@ void doit(void)
/* check with wrong hostname */
data[0].type = GNUTLS_DT_DNS_HOSTNAME;
- data[0].data = (void*)"localhost1";
+ data[0].data = (void *)"localhost1";
data[1].type = GNUTLS_DT_KEY_PURPOSE_OID;
- data[1].data = (void*)GNUTLS_KP_TLS_WWW_SERVER;
+ data[1].data = (void *)GNUTLS_KP_TLS_WWW_SERVER;
gnutls_certificate_get_peers(client, &cert_list_size);
- if (cert_list_size < 2) {
- fprintf(stderr, "received a certificate list of %d!\n", cert_list_size);
+ if (cert_list_size != 1) {
+ fprintf(stderr, "received a certificate list of %d!\n",
+ cert_list_size);
exit(1);
}
ret = gnutls_certificate_verify_peers(client, data, 2, &status);
if (ret < 0) {
- fprintf(stderr, "could not verify certificate: %s\n", gnutls_strerror(ret));
+ fprintf(stderr, "could not verify certificate: %s\n",
+ gnutls_strerror(ret));
exit(1);
}
@@ -430,20 +337,22 @@ void doit(void)
/* check with wrong purpose */
data[0].type = GNUTLS_DT_DNS_HOSTNAME;
- data[0].data = (void*)"localhost";
+ data[0].data = (void *)"localhost";
data[1].type = GNUTLS_DT_KEY_PURPOSE_OID;
- data[1].data = (void*)GNUTLS_KP_TLS_WWW_CLIENT;
+ data[1].data = (void *)GNUTLS_KP_TLS_WWW_CLIENT;
gnutls_certificate_get_peers(client, &cert_list_size);
- if (cert_list_size < 2) {
- fprintf(stderr, "received a certificate list of %d!\n", cert_list_size);
+ if (cert_list_size != 1) {
+ fprintf(stderr, "received a certificate list of %d!\n",
+ cert_list_size);
exit(1);
}
ret = gnutls_certificate_verify_peers(client, data, 2, &status);
if (ret < 0) {
- fprintf(stderr, "could not verify certificate: %s\n", gnutls_strerror(ret));
+ fprintf(stderr, "could not verify certificate: %s\n",
+ gnutls_strerror(ret));
exit(1);
}
@@ -454,19 +363,21 @@ void doit(void)
/* check with correct purpose */
data[0].type = GNUTLS_DT_DNS_HOSTNAME;
- data[0].data = (void*)"localhost";
+ data[0].data = (void *)"localhost";
data[1].type = GNUTLS_DT_KEY_PURPOSE_OID;
- data[1].data = (void*)GNUTLS_KP_TLS_WWW_SERVER;
+ data[1].data = (void *)GNUTLS_KP_TLS_WWW_SERVER;
ret = gnutls_certificate_verify_peers(client, data, 2, &status);
if (ret < 0) {
- fprintf(stderr, "could not verify certificate: %s\n", gnutls_strerror(ret));
+ fprintf(stderr, "could not verify certificate: %s\n",
+ gnutls_strerror(ret));
exit(1);
}
if (status != 0) {
- fprintf(stderr, "could not verify certificate: %.4x\n", status);
+ fprintf(stderr, "could not verify certificate: %.4x\n",
+ status);
exit(1);
}
}