]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
tests: remove *hello_random_value tests
authorDaiki Ueno <ueno@gnu.org>
Sat, 30 Jan 2021 17:35:14 +0000 (18:35 +0100)
committerDaiki Ueno <ueno@gnu.org>
Fri, 19 Feb 2021 04:44:51 +0000 (05:44 +0100)
Those tests are meaningless and merely introduces extra flakiness, now
that the uninitialized random bytes are detected by valgrind.

Signed-off-by: Daiki Ueno <ueno@gnu.org>
.gitignore
tests/Makefile.am
tests/dtls_hello_random_value.c [deleted file]
tests/tls13/hello_random_value.c [deleted file]
tests/tls_hello_random_value.c [deleted file]

index 44bc48d72b7767fbe096af79901d3e71215005a4..b1f835ce40953d369dee6a46dae4b34c4a2e8dec 100644 (file)
@@ -407,7 +407,6 @@ tests/dtls1.0-cert-key-exchange
 tests/dtls1.2-cert-key-exchange
 tests/dtls10-cert-key-exchange
 tests/dtls12-cert-key-exchange
-tests/dtls_hello_random_value
 tests/duplicate-extensions
 tests/eagain
 tests/eagain-auto-auth
@@ -853,7 +852,6 @@ tests/tls13-without-timeout-func
 tests/tls13/anti_replay
 tests/tls13/change_cipher_spec
 tests/tls13/cookie
-tests/tls13/hello_random_value
 tests/tls13/hello_retry_request
 tests/tls13/hello_retry_request_resume
 tests/tls13/key_limits
@@ -876,7 +874,6 @@ tests/tls13/psk-dumbfw
 tests/tls13/psk-ext
 tests/tls13/supported_versions
 tests/tls13/tls12-no-tls13-exts
-tests/tls_hello_random_value
 tests/tlsext-decoding
 tests/tlsfeature-crt
 tests/tlsfeature-ext
index d0880e716d3d4ef867f9b445588ef88359cd3d1a..992d2750bae0a5e0ceb0b47c9cd522d626a79f57 100644 (file)
@@ -112,7 +112,7 @@ ctests = tls13/supported_versions tls13/tls12-no-tls13-exts \
        tls13/post-handshake-with-cert tls13/post-handshake-without-cert \
        tls13/cookie tls13/key_share tls13/prf tls13/post-handshake-with-cert-ticket \
        tls12-rollback-detection tls11-rollback-detection \
-       tls12-check-rollback-val tls11-check-rollback-val tls13/hello_random_value \
+       tls12-check-rollback-val tls11-check-rollback-val \
        tls13/post-handshake-with-psk tls13/post-handshake-with-cert-auto \
        tls13/anti_replay
 
@@ -222,7 +222,7 @@ ctests += mini-record-2 simple gnutls_hmac_fast set_pkcs12_cred cert certuniquei
         sign-verify-newapi sign-verify-deterministic iov aead-cipher-vec \
         tls13-without-timeout-func buffer status-request-revoked \
         set_x509_ocsp_multi_cli kdf-api keylog-func handshake-write \
-        dtls_hello_random_value tls_hello_random_value x509cert-dntypes
+        x509cert-dntypes
 
 if HAVE_SECCOMP_TESTS
 ctests += dtls-with-seccomp tls-with-seccomp dtls-client-with-seccomp tls-client-with-seccomp
diff --git a/tests/dtls_hello_random_value.c b/tests/dtls_hello_random_value.c
deleted file mode 100644 (file)
index f4503fa..0000000
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
- * Copyright (C) 2017-2020 Red Hat, Inc.
- *
- * Author: Nikos Mavrogiannopoulos
- *
- * This file is part of GnuTLS.
- *
- * GnuTLS is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * GnuTLS is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program.  If not, see <https://www.gnu.org/licenses/>
- */
-
-/* This program tests whether the second DTLS client hello contains the same
- * random value, and whether it is initialized.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if defined(_WIN32)
-
-/* socketpair isn't supported on Win32. */
-int main(int argc, char **argv)
-{
-       exit(77);
-}
-
-#else
-
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#if !defined(_WIN32)
-#include <sys/wait.h>
-#include <signal.h>
-#endif
-#include <unistd.h>
-#include <gnutls/gnutls.h>
-#include <gnutls/dtls.h>
-#include <assert.h>
-
-#include "utils.h"
-#include "cert-common.h"
-
-const char *side = "";
-
-static void tls_log_func(int level, const char *str)
-{
-       fprintf(stderr, "%s|<%d>| %s", side, level, str);
-}
-
-unsigned char crandom[32];
-static unsigned cb_called = 0;
-
-static int hello_callback(gnutls_session_t session, unsigned int htype,
-                         unsigned post, unsigned int incoming, const gnutls_datum_t *msg)
-{
-       unsigned non_zero = 0, i;
-
-       if (htype == GNUTLS_HANDSHAKE_CLIENT_HELLO && post == GNUTLS_HOOK_POST) {
-               if (cb_called == 0) {
-                       /* save first value */
-                       gnutls_datum_t tmp;
-                       gnutls_session_get_random(session, &tmp, NULL);
-                       assert(tmp.size == 32);
-
-                       memcpy(crandom, tmp.data, tmp.size);
-                       cb_called++;
-
-                       /* check if uninitialized */
-                       for (i=0;i<32;i++) {
-                               if (crandom[i] != 0) {
-                                       non_zero++;
-                               }
-                       }
-
-                       if (non_zero <= 8) {
-                               fail("the client random value seems uninitialized\n");
-                       }
-               } else { /* verify it is the same */
-                       gnutls_datum_t tmp;
-                       gnutls_session_get_random(session, &tmp, NULL);
-
-                       assert(tmp.size == 32);
-                       if (memcmp(tmp.data, crandom, tmp.size) != 0) {
-                               fail("the random values differ!\n");
-                       }
-                       cb_called++;
-               }
-       } if (htype == GNUTLS_HANDSHAKE_SERVER_HELLO && post == GNUTLS_HOOK_POST) {
-               gnutls_datum_t tmp;
-               gnutls_session_get_random(session, NULL, &tmp);
-               assert(tmp.size == 32);
-
-               for (i=0;i<32;i++) {
-                       if (tmp.data[i] != 0) {
-                               non_zero++;
-                       }
-               }
-               if (non_zero <= 8) {
-                       fail("the server random value seems uninitialized\n");
-               }
-       }
-
-       return 0;
-}
-
-static void client(int sd, const char *priority)
-{
-       int ret;
-       gnutls_session_t session;
-       gnutls_certificate_credentials_t clientx509cred;
-
-       gnutls_global_set_log_function(tls_log_func);
-       if (debug)
-               gnutls_global_set_log_level(4711);
-
-       side = "client";
-
-       gnutls_certificate_allocate_credentials(&clientx509cred);
-
-       assert(gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_DATAGRAM)>=0);
-
-       if (!priority) {
-               assert(gnutls_set_default_priority(session) >= 0);
-       } else {
-               assert(gnutls_priority_set_direct(session, priority, NULL) >= 0);
-       }
-
-       gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE,
-                               clientx509cred);
-
-       gnutls_transport_set_int(session, sd);
-       gnutls_dtls_set_mtu(session, 1500);
-       gnutls_handshake_set_timeout(session, get_timeout());
-
-       gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY,
-                                          GNUTLS_HOOK_BOTH, hello_callback);
-
-       ret = gnutls_handshake(session);
-
-       if (ret < 0) {
-               fail("client: Handshake failed: %s\n", gnutls_strerror(ret));
-       } else {
-               if (debug)
-                       success("client: Handshake was completed\n");
-       }
-
-       if (cb_called != 2) {
-               fail("client: the callback was not seen twice!\n");
-       }
-
-       gnutls_bye(session, GNUTLS_SHUT_WR);
-       close(sd);
-
-       gnutls_deinit(session);
-
-       gnutls_certificate_free_credentials(clientx509cred);
-}
-
-#define MAX_BUF 1024
-#define CLI_ADDR (void*)"test"
-#define CLI_ADDR_LEN 4
-
-static ssize_t
-push(gnutls_transport_ptr_t tr, const void *data, size_t len)
-{
-       int fd = (long int) tr;
-
-       return send(fd, data, len, 0);
-}
-
-static void server(int sd, const char *priority)
-{
-       int ret, csend = 0;
-       char buffer[MAX_BUF + 1];
-       gnutls_certificate_credentials_t serverx509cred;
-       gnutls_dtls_prestate_st prestate;
-       gnutls_session_t session;
-       gnutls_datum_t cookie_key;
-
-       gnutls_global_set_log_function(tls_log_func);
-       if (debug)
-               gnutls_global_set_log_level(4711);
-
-       side = "server";
-
-       ret = gnutls_key_generate(&cookie_key, GNUTLS_COOKIE_KEY_SIZE);
-       if (ret < 0) {
-               fail("Cannot generate key: %s\n", gnutls_strerror(ret));
-       }
-
-       for (;;) {
-               ret = recv(sd, buffer, sizeof(buffer), MSG_PEEK);
-               if (ret < 0) {
-                       fail("Cannot receive data\n");
-               }
-
-               memset(&prestate, 0, sizeof(prestate));
-               ret =
-                   gnutls_dtls_cookie_verify(&cookie_key, CLI_ADDR,
-                                             CLI_ADDR_LEN, buffer, ret,
-                                             &prestate);
-               if (ret < 0) {  /* cookie not valid */
-                       if (debug)
-                               success("Sending hello verify request\n");
-
-                       ret =
-                           gnutls_dtls_cookie_send(&cookie_key, CLI_ADDR,
-                                                   CLI_ADDR_LEN,
-                                                   &prestate,
-                                                   (gnutls_transport_ptr_t)
-                                                   (long) sd, push);
-                       if (ret < 0) {
-                               fail("Cannot send data\n");
-                       }
-
-                       /* discard peeked data */
-                       recv(sd, buffer, sizeof(buffer), 0);
-                       csend++;
-
-                       if (csend > 2) {
-                               fail("too many cookies sent\n");
-                       }
-
-                       continue;
-               }
-
-               /* success */
-               break;
-       }
-
-       assert(gnutls_certificate_allocate_credentials(&serverx509cred)>=0);
-       assert(gnutls_certificate_set_x509_key_mem(serverx509cred,
-                                           &server_cert, &server_key,
-                                           GNUTLS_X509_FMT_PEM)>=0);
-
-       assert(gnutls_init(&session, GNUTLS_SERVER|GNUTLS_DATAGRAM)>=0);
-       assert(session != NULL);
-
-       if (!priority) {
-               assert(gnutls_set_default_priority(session) >= 0);
-       } else {
-               assert(gnutls_priority_set_direct(session, priority, NULL) >= 0);
-       }
-
-       gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE,
-                               serverx509cred);
-
-       gnutls_transport_set_int(session, sd);
-       gnutls_handshake_set_timeout(session, get_timeout());
-       gnutls_dtls_set_mtu(session, 1500);
-
-       gnutls_dtls_prestate_set(session, &prestate);
-
-       ret = gnutls_handshake(session);
-       if (ret < 0) {
-               fail("server: Handshake has failed: %s\n\n",
-                    gnutls_strerror(ret));
-       }
-       if (debug)
-               success("server: Handshake was completed\n");
-
-       /* do not wait for the peer to close the connection.
-        */
-       gnutls_bye(session, GNUTLS_SHUT_WR);
-       close(sd);
-       gnutls_deinit(session);
-
-       gnutls_certificate_free_credentials(serverx509cred);
-       gnutls_free(cookie_key.data);
-
-       if (debug)
-               success("server: finished\n");
-}
-
-static void start(const char *name, const char *priority)
-{
-       pid_t child;
-       int sockets[2];
-       int err;
-
-       success("testing: %s\n", name);
-       cb_called = 0;
-
-       err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets);
-       if (err == -1) {
-               perror("socketpair");
-               fail("socketpair failed\n");
-               return;
-       }
-
-       child = fork();
-       if (child < 0) {
-               perror("fork");
-               fail("fork");
-               return;
-       }
-
-       if (child) {
-               int status = 0;
-               /* parent */
-               close(sockets[1]);
-               client(sockets[0], priority);
-               wait(&status);
-               check_wait_status(status);
-       } else {
-               close(sockets[0]);
-               server(sockets[1], priority);
-               exit(0);
-       }
-}
-
-void doit(void)
-{
-       signal(SIGPIPE, SIG_IGN);
-
-       start("default", NULL);
-       start("dtls1.2", "NORMAL:-VERS-ALL:+VERS-DTLS1.2");
-       start("dtls1.0", "NORMAL:-VERS-ALL:+VERS-DTLS1.0");
-}
-
-#endif                         /* _WIN32 */
diff --git a/tests/tls13/hello_random_value.c b/tests/tls13/hello_random_value.c
deleted file mode 100644 (file)
index d91663c..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Copyright (C) 2017 Red Hat, Inc.
- *
- * Author: Nikos Mavrogiannopoulos
- *
- * This file is part of GnuTLS.
- *
- * GnuTLS is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * GnuTLS is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program.  If not, see <https://www.gnu.org/licenses/>
- */
-
-/* This program tests whether the second client hello contains the same
- * random value.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if defined(_WIN32)
-
-/* socketpair isn't supported on Win32. */
-int main(int argc, char **argv)
-{
-       exit(77);
-}
-
-#else
-
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#if !defined(_WIN32)
-#include <sys/wait.h>
-#include <signal.h>
-#endif
-#include <unistd.h>
-#include <gnutls/gnutls.h>
-#include <assert.h>
-
-#include "utils.h"
-#include "cert-common.h"
-
-const char *side = "";
-
-static void tls_log_func(int level, const char *str)
-{
-       fprintf(stderr, "%s|<%d>| %s", side, level, str);
-}
-
-unsigned char crandom[32];
-static unsigned cb_called = 0;
-
-static int client_hello_callback(gnutls_session_t session, unsigned int htype,
-        unsigned post, unsigned int incoming, const gnutls_datum_t *msg)
-{
-       unsigned ok = 0, i;
-
-       if (htype == GNUTLS_HANDSHAKE_CLIENT_HELLO && post == GNUTLS_HOOK_POST) {
-               if (cb_called == 0) {
-                       /* save first value */
-                       gnutls_datum_t tmp;
-                       gnutls_session_get_random(session, &tmp, NULL);
-                       assert(tmp.size == 32);
-
-                       memcpy(crandom, tmp.data, tmp.size);
-                       cb_called++;
-
-                       /* check if uninitialized */
-                       for (i=0;i<32;i++) {
-                               if (crandom[i] != 0) {
-                                       ok = 1;
-                                       break;
-                               }
-                       }
-                       if (!ok) {
-                               fail("the random value seems uninitialized\n");
-                       }
-               } else { /* verify it is the same */
-                       gnutls_datum_t tmp;
-                       gnutls_session_get_random(session, &tmp, NULL);
-
-                       assert(tmp.size == 32);
-                       if (memcmp(tmp.data, crandom, tmp.size) != 0) {
-                               fail("the random values differ!\n");
-                       }
-                       cb_called++;
-               }
-       }
-
-       return 0;
-}
-
-static void client(int sd)
-{
-       int ret;
-       gnutls_session_t session;
-       gnutls_certificate_credentials_t clientx509cred;
-
-       global_init();
-       gnutls_global_set_log_function(tls_log_func);
-       if (debug)
-               gnutls_global_set_log_level(4711);
-
-       side = "client";
-
-       gnutls_certificate_allocate_credentials(&clientx509cred);
-
-       /* Initialize TLS session
-        */
-       assert(gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_KEY_SHARE_TOP)>=0);
-
-       /* Use default priorities, i.e., SECP256R1 as key primary share
-        * to force hello retry request */
-       assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3",
-                                  NULL)>=0);
-
-       gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE,
-                               clientx509cred);
-
-       gnutls_transport_set_int(session, sd);
-       gnutls_handshake_set_timeout(session, get_timeout());
-       gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY,
-                                          GNUTLS_HOOK_BOTH, client_hello_callback);
-
-       /* Perform the TLS handshake
-        */
-       ret = gnutls_handshake(session);
-
-       if (ret < 0) {
-               fail("client: Handshake failed: %s\n", gnutls_strerror(ret));
-               goto end;
-       } else {
-               if (debug)
-                       success("client: Handshake was completed\n");
-       }
-
-       if (cb_called != 2) {
-               fail("client: the callback was not seen twice!\n");
-       }
-
-       gnutls_bye(session, GNUTLS_SHUT_WR);
-
-end:
-       close(sd);
-
-       gnutls_deinit(session);
-
-       gnutls_certificate_free_credentials(clientx509cred);
-
-       gnutls_global_deinit();
-}
-
-static void server(int sd)
-{
-       gnutls_certificate_credentials_t serverx509cred;
-       int ret;
-       gnutls_session_t session;
-
-       /* this must be called once in the program
-        */
-       global_init();
-       gnutls_global_set_log_function(tls_log_func);
-       if (debug)
-               gnutls_global_set_log_level(4711);
-
-       side = "server";
-
-       gnutls_certificate_allocate_credentials(&serverx509cred);
-       gnutls_certificate_set_x509_key_mem(serverx509cred,
-                                           &server_cert, &server_key,
-                                           GNUTLS_X509_FMT_PEM);
-
-       gnutls_init(&session, GNUTLS_SERVER);
-
-
-       /* force a hello retry request by disabling all the groups that are
-        * enabled by default. */
-       assert(gnutls_priority_set_direct(session,
-                                         "NORMAL:-VERS-ALL:+VERS-TLS1.3:"
-                                         "-GROUP-SECP256R1",
-                                         NULL)>=0);
-
-       gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE,
-                               serverx509cred);
-
-       gnutls_transport_set_int(session, sd);
-       gnutls_handshake_set_timeout(session, get_timeout());
-
-       ret = gnutls_handshake(session);
-       if (ret < 0) {
-               fail("server: Handshake has failed: %s\n\n",
-                    gnutls_strerror(ret));
-               goto end;
-       }
-       if (debug)
-               success("server: Handshake was completed\n");
-
-       /* do not wait for the peer to close the connection.
-        */
-       gnutls_bye(session, GNUTLS_SHUT_WR);
-
-end:
-       close(sd);
-       gnutls_deinit(session);
-
-       gnutls_certificate_free_credentials(serverx509cred);
-
-       gnutls_global_deinit();
-
-       if (debug)
-               success("server: finished\n");
-}
-
-void doit(void)
-{
-       pid_t child;
-       int sockets[2];
-       int err;
-
-       signal(SIGPIPE, SIG_IGN);
-
-       err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets);
-       if (err == -1) {
-               perror("socketpair");
-               fail("socketpair failed\n");
-               return;
-       }
-
-       child = fork();
-       if (child < 0) {
-               perror("fork");
-               fail("fork");
-               return;
-       }
-
-       if (child) {
-               int status = 0;
-               /* parent */
-               close(sockets[1]);
-               client(sockets[0]);
-               wait(&status);
-               check_wait_status(status);
-       } else {
-               close(sockets[0]);
-               server(sockets[1]);
-       }
-}
-
-#endif                         /* _WIN32 */
diff --git a/tests/tls_hello_random_value.c b/tests/tls_hello_random_value.c
deleted file mode 100644 (file)
index 4410000..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * Copyright (C) 2017-2020 Red Hat, Inc.
- *
- * Author: Nikos Mavrogiannopoulos
- *
- * This file is part of GnuTLS.
- *
- * GnuTLS is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * GnuTLS is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program.  If not, see <https://www.gnu.org/licenses/>
- */
-
-/* This program tests whether the second DTLS client hello contains the same
- * random value, and whether it is initialized.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if defined(_WIN32)
-
-/* socketpair isn't supported on Win32. */
-int main(int argc, char **argv)
-{
-       exit(77);
-}
-
-#else
-
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#if !defined(_WIN32)
-#include <sys/wait.h>
-#include <signal.h>
-#endif
-#include <unistd.h>
-#include <gnutls/gnutls.h>
-#include <assert.h>
-
-#include "utils.h"
-#include "cert-common.h"
-
-const char *side = "";
-
-static void tls_log_func(int level, const char *str)
-{
-       fprintf(stderr, "%s|<%d>| %s", side, level, str);
-}
-
-static unsigned cb_called = 0;
-
-static int hello_callback(gnutls_session_t session, unsigned int htype,
-                         unsigned post, unsigned int incoming, const gnutls_datum_t *msg)
-{
-       unsigned non_zero = 0, i;
-
-       if (htype == GNUTLS_HANDSHAKE_CLIENT_HELLO && post == GNUTLS_HOOK_POST) {
-               if (cb_called == 0) {
-                       unsigned char crandom[32];
-                       gnutls_datum_t tmp;
-                       gnutls_session_get_random(session, &tmp, NULL);
-                       assert(tmp.size == 32);
-
-                       memcpy(crandom, tmp.data, tmp.size);
-                       cb_called++;
-
-                       /* check if uninitialized */
-                       for (i=0;i<32;i++) {
-                               if (crandom[i] != 0) {
-                                       non_zero++;
-                               }
-                       }
-                       if (non_zero <= 8) {
-                               fail("the client random value seems uninitialized\n");
-                       }
-               } else {
-                       cb_called++;
-               }
-       } else if (htype == GNUTLS_HANDSHAKE_SERVER_HELLO && post == GNUTLS_HOOK_POST) {
-               unsigned char crandom[32];
-               gnutls_datum_t tmp;
-               gnutls_session_get_random(session, NULL, &tmp);
-               assert(tmp.size == 32);
-
-               memcpy(crandom, tmp.data, tmp.size);
-
-               /* check if uninitialized */
-               for (i=0;i<32;i++) {
-                       if (crandom[i] != 0) {
-                               non_zero++;
-                       }
-               }
-               if (non_zero <= 8) {
-                       fail("the server random value seems uninitialized\n");
-               }
-       }
-
-       return 0;
-}
-
-static void client(int sd, const char *priority)
-{
-       int ret;
-       gnutls_session_t session;
-       gnutls_certificate_credentials_t clientx509cred;
-
-       gnutls_global_set_log_function(tls_log_func);
-       if (debug)
-               gnutls_global_set_log_level(4711);
-
-       side = "client";
-
-       gnutls_certificate_allocate_credentials(&clientx509cred);
-
-       assert(gnutls_init(&session, GNUTLS_CLIENT)>=0);
-
-       if (!priority) {
-               assert(gnutls_set_default_priority(session) >= 0);
-       } else {
-               assert(gnutls_priority_set_direct(session, priority, NULL) >= 0);
-       }
-
-       gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE,
-                               clientx509cred);
-
-       gnutls_transport_set_int(session, sd);
-       gnutls_handshake_set_timeout(session, get_timeout());
-
-       gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY,
-                                          GNUTLS_HOOK_BOTH, hello_callback);
-
-       ret = gnutls_handshake(session);
-
-       if (ret < 0) {
-               fail("client: Handshake failed: %s\n", gnutls_strerror(ret));
-       } else {
-               if (debug)
-                       success("client: Handshake was completed\n");
-       }
-
-       if (cb_called != 1) {
-               fail("client: the callback was not seen (%d)!\n", cb_called);
-       }
-
-       gnutls_bye(session, GNUTLS_SHUT_WR);
-       close(sd);
-
-       gnutls_deinit(session);
-
-       gnutls_certificate_free_credentials(clientx509cred);
-}
-
-static void server(int sd, const char *priority)
-{
-       int ret;
-       gnutls_certificate_credentials_t serverx509cred;
-       gnutls_session_t session;
-
-       gnutls_global_set_log_function(tls_log_func);
-       if (debug)
-               gnutls_global_set_log_level(4711);
-
-       side = "server";
-
-       assert(gnutls_certificate_allocate_credentials(&serverx509cred)>=0);
-       assert(gnutls_certificate_set_x509_key_mem(serverx509cred,
-                                           &server_cert, &server_key,
-                                           GNUTLS_X509_FMT_PEM)>=0);
-
-       assert(gnutls_init(&session, GNUTLS_SERVER)>=0);
-       assert(session != NULL);
-
-       if (!priority) {
-               assert(gnutls_set_default_priority(session) >= 0);
-       } else {
-               assert(gnutls_priority_set_direct(session, priority, NULL) >= 0);
-       }
-
-       gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE,
-                               serverx509cred);
-
-       gnutls_transport_set_int(session, sd);
-       gnutls_handshake_set_timeout(session, get_timeout());
-
-       ret = gnutls_handshake(session);
-       if (ret < 0) {
-               fail("server: Handshake has failed: %s\n\n",
-                    gnutls_strerror(ret));
-       }
-       if (debug)
-               success("server: Handshake was completed\n");
-
-       /* do not wait for the peer to close the connection.
-        */
-       gnutls_bye(session, GNUTLS_SHUT_WR);
-       close(sd);
-       gnutls_deinit(session);
-
-       gnutls_certificate_free_credentials(serverx509cred);
-
-       if (debug)
-               success("server: finished\n");
-}
-
-static void start(const char *name, const char *priority)
-{
-       pid_t child;
-       int sockets[2];
-       int err;
-
-       success("testing: %s\n", name);
-       cb_called = 0;
-
-       err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets);
-       if (err == -1) {
-               perror("socketpair");
-               fail("socketpair failed\n");
-               return;
-       }
-
-       child = fork();
-       if (child < 0) {
-               perror("fork");
-               fail("fork");
-               return;
-       }
-
-       if (child) {
-               int status = 0;
-               /* parent */
-               close(sockets[1]);
-               client(sockets[0], priority);
-               wait(&status);
-               check_wait_status(status);
-       } else {
-               close(sockets[0]);
-               server(sockets[1], priority);
-               exit(0);
-       }
-}
-
-void doit(void)
-{
-       signal(SIGPIPE, SIG_IGN);
-
-       start("default", NULL);
-       start("tls1.3", "NORMAL:-VERS-ALL:+VERS-TLS1.3");
-       start("tls1.2", "NORMAL:-VERS-ALL:+VERS-TLS1.2");
-       start("tls1.1", "NORMAL:-VERS-ALL:+VERS-TLS1.1");
-       start("tls1.0", "NORMAL:-VERS-ALL:+VERS-TLS1.0");
-}
-
-#endif                         /* _WIN32 */