]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
test sending and receiving the maximum allowed TLS buffer size.
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 28 Jul 2013 07:22:00 +0000 (09:22 +0200)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 28 Jul 2013 07:23:11 +0000 (09:23 +0200)
tests/record-sizes.c

index 08c8d2b0d08b7555f8a102f09537dc73556f95e4..7c84c5f5fb5784f05d010266c9bc7d0a29f99269 100644 (file)
@@ -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);