key.data = _key;
key.size = keysize;
- printf ("Checking %s with %s (%dkb payload)... ", gnutls_cipher_get_name (algo),
+ printf ("Checking %s with %s (%dkb payload)...\n", gnutls_cipher_get_name (algo),
gnutls_mac_get_name(mac_algo), size);
fflush (stdout);
key.data = _key;
key.size = keysize;
- printf ("Checking %s (%dkb payload)... ", gnutls_cipher_get_name (algo),
+ printf ("Checking %s (%dkb payload)...\n", gnutls_cipher_get_name (algo),
size);
fflush (stdout);
return;
memset (_key, 0xf0, blocksize);
- printf ("Checking %s (%dkb payload)... ", gnutls_mac_get_name (algo), size);
+ printf ("Checking %s (%dkb payload)...\n", gnutls_mac_get_name (algo), size);
fflush (stdout);
start_benchmark(&st);
#include <errno.h>
#include <gnutls/gnutls.h>
#include <gnutls/crypto.h>
+#include <math.h>
#define fail(...) \
{ \
HANDSHAKE(client, server);
- fprintf(stdout, "Testing %s with %d packet size: ",
+ fprintf(stdout, "Testing %s with %d packet size...\n",
gnutls_cipher_suite_get_name(gnutls_kx_get(server),
gnutls_cipher_get(server),
gnutls_mac_get(server)), size);
while (benchmark_must_finish == 0);
stop_benchmark(&st, NULL);
+ fprintf(stdout, "\n");
gnutls_bye(client, GNUTLS_SHUT_WR);
gnutls_bye(server, GNUTLS_SHUT_WR);
}
+static
+double calc_avg(unsigned int *diffs, unsigned int diffs_size)
+{
+double avg = 0;
+unsigned int i;
+
+ for(i=0;i<diffs_size;i++)
+ avg += diffs[i];
+
+ avg /= diffs_size;
+
+ return avg;
+}
+
+static
+double calc_sstdev(unsigned int *diffs, unsigned int diffs_size, double avg)
+{
+double sum = 0, d;
+unsigned int i;
+
+ for (i=0;i<diffs_size;i++) {
+ d = ((double)diffs[i] - avg);
+ d *= d;
+
+ sum += d;
+ }
+ sum /= diffs_size - 1;
+
+ return sum;
+}
+
+
+unsigned int diffs[32*1024];
+unsigned int diffs_size = 0;
+
static void test_ciphersuite_kx(const char *cipher_prio)
{
/* Server stuff. */
/* Need to enable anonymous KX specifically. */
int ret;
struct benchmark_st st;
+ struct timespec tr_start, tr_stop;
+ double avg, sstddev;
/* Init server */
gnutls_certificate_allocate_credentials(&s_certcred);
start_benchmark(&st);
do {
+ gettime(&tr_start);
+
gnutls_init(&server, GNUTLS_SERVER);
ret = gnutls_priority_set_direct(server, cipher_prio, &str);
if (ret < 0) {
gnutls_deinit(client);
gnutls_deinit(server);
+ gettime(&tr_stop);
+
+ diffs[diffs_size++] = timespec_sub_ms(&tr_stop, &tr_start);
+ if (diffs_size > sizeof(diffs))
+ abort();
+
st.size += 1;
}
while (benchmark_must_finish == 0);
- fprintf(stdout, "Tested %s: ", suite);
+ fprintf(stdout, "Benchmarked %s.\n", suite);
stop_benchmark(&st, "transactions");
+ avg = calc_avg(diffs, diffs_size);
+ sstddev = calc_sstdev(diffs, diffs_size, avg);
+
+ printf(" Average time: %.2f ms, sample variance: %.2f\n\n", avg, sstddev);
+
gnutls_anon_free_client_credentials(c_anoncred);
gnutls_anon_free_server_credentials(s_anoncred);
if (ciphers != 0)
{
- printf("Testing throughput in cipher/MAC combinations:\n");
+ printf("Testing throughput in cipher/MAC combinations:\n\n");
test_ciphersuite(PRIO_ARCFOUR_128_MD5, 1024);
test_ciphersuite(PRIO_ARCFOUR_128_MD5, 4096);
}
else
{
- printf("\nTesting key exchanges (RSA/DH bits: %d, EC bits: %d):\n", rsa_bits, ec_bits);
+ printf("\nTesting key exchanges (RSA/DH bits: %d, EC bits: %d):\n\n", rsa_bits, ec_bits);
test_ciphersuite_kx(PRIO_DH);
test_ciphersuite_kx(PRIO_ECDH);
test_ciphersuite_kx(PRIO_ECDHE_ECDSA);
if (metric == NULL)
{ /* assume bytes/sec */
value2human (st->size, secs, &ddata, &dspeed, imetric);
- printf ("Processed %.2f %s in %.2f secs: ", ddata, imetric, secs);
+ printf (" Processed %.2f %s in %.2f secs: ", ddata, imetric, secs);
printf ("%.2f %s/sec\n", dspeed, imetric);
}
else
{
ddata = (double) st->size;
dspeed = ddata / secs;
- printf ("Processed %.2f %s in %.2f secs: ", ddata, metric, secs);
+ printf (" Processed %.2f %s in %.2f secs: ", ddata, metric, secs);
printf ("%.2f %s/sec\n", dspeed, metric);
}