From: Nikos Mavrogiannopoulos Date: Sun, 28 Jul 2013 07:22:00 +0000 (+0200) Subject: test sending and receiving the maximum allowed TLS buffer size. X-Git-Tag: gnutls_3_2_3pre0~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c5ce9f782ba597ddbafd84648d4befaf14745146;p=thirdparty%2Fgnutls.git test sending and receiving the maximum allowed TLS buffer size. --- diff --git a/tests/record-sizes.c b/tests/record-sizes.c index 08c8d2b0d0..7c84c5f5fb 100644 --- a/tests/record-sizes.c +++ b/tests/record-sizes.c @@ -44,7 +44,9 @@ tls_log_func (int level, const char *str) /* This test attempts to transfer various sizes using AES-128-CBC. */ -#define MAX_BUF 1024 +#define MAX_BUF 16384 +static char b1[MAX_BUF + 1]; +static char buffer[MAX_BUF + 1]; void doit (void) @@ -60,8 +62,6 @@ doit (void) gnutls_session_t client; int cret = GNUTLS_E_AGAIN, i; /* Need to enable anonymous KX specifically. */ - char b1[MAX_BUF + 1]; - char buffer[MAX_BUF + 1]; ssize_t ns; int ret, transferred = 0; @@ -77,7 +77,7 @@ doit (void) gnutls_dh_params_import_pkcs3 (dh_params, &p3, GNUTLS_X509_FMT_PEM); gnutls_anon_set_server_dh_params (s_anoncred, dh_params); gnutls_init (&server, GNUTLS_SERVER); - gnutls_priority_set_direct (server, "NONE:+VERS-TLS-ALL:+AES-128-CBC:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-DH", NULL); + gnutls_priority_set_direct (server, "NONE:+VERS-TLS-ALL:+AES-128-CBC:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+ANON-DH", NULL); gnutls_credentials_set (server, GNUTLS_CRD_ANON, s_anoncred); gnutls_dh_set_prime_bits (server, 1024); gnutls_transport_set_push_function (server, server_push); @@ -87,7 +87,7 @@ doit (void) /* Init client */ gnutls_anon_allocate_client_credentials (&c_anoncred); gnutls_init (&client, GNUTLS_CLIENT); - gnutls_priority_set_direct (client, "NONE:+VERS-TLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-DH", NULL); + gnutls_priority_set_direct (client, "NONE:+VERS-TLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+ANON-DH", NULL); gnutls_credentials_set (client, GNUTLS_CRD_ANON, c_anoncred); gnutls_transport_set_push_function (client, client_push); gnutls_transport_set_pull_function (client, client_pull); @@ -98,7 +98,43 @@ doit (void) if (debug) success ("Handshake established\n"); + + memset(b1, 1, MAX_BUF); + /* try the maximum allowed */ + ret = gnutls_record_send(client, b1, MAX_BUF); + if (ret < 0) + { + fprintf(stderr, "Error sending %d bytes: %s\n", (int)MAX_BUF, gnutls_strerror(ret)); + exit(1); + } + + if (ret != MAX_BUF) + { + fprintf(stderr, "Couldn't send %d bytes\n", (int)MAX_BUF); + exit(1); + } + + ret = gnutls_record_recv(server, buffer, MAX_BUF); + if (ret < 0) + { + fprintf(stderr, "Error receiving %d bytes: %s\n", (int)MAX_BUF, gnutls_strerror(ret)); + exit(1); + } + + if (ret != MAX_BUF) + { + fprintf(stderr, "Couldn't receive %d bytes, received %d\n", (int)MAX_BUF, ret); + exit(1); + } + + if (memcmp(b1, buffer, MAX_BUF) != 0) + { + fprintf(stderr, "Buffers do not match!\n"); + exit(1); + } + + /* Try sending various other sizes */ for (i=1;i<128;i++) { TRANSFER(client, server, b1, i, buffer, MAX_BUF); @@ -106,6 +142,8 @@ doit (void) if (debug) fputs ("\n", stdout); + + gnutls_bye (client, GNUTLS_SHUT_RDWR); gnutls_bye (server, GNUTLS_SHUT_RDWR);