2 * Copyright (C) 2011-2012 Free Software Foundation, Inc.
4 * Author: Nikos Mavrogiannopoulos
6 * This file is part of GnuTLS.
8 * GnuTLS is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 3 of the License, or
11 * (at your option) any later version.
13 * GnuTLS is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with GnuTLS; if not, write to the Free Software Foundation,
20 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
31 #include <gnutls/gnutls.h>
32 #include <gnutls/crypto.h>
36 fprintf(stderr, __VA_ARGS__); \
40 #include "../tests/eagain-common.h"
41 #include "benchmark.h"
43 const char* side
= "";
45 #define PRIO_DH "NONE:+VERS-TLS1.0:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+DHE-RSA"
46 #define PRIO_ECDH "NONE:+VERS-TLS1.0:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+ECDHE-RSA:+CURVE-SECP192R1"
47 #define PRIO_ECDHE_ECDSA "NONE:+VERS-TLS1.0:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+ECDHE-ECDSA:+CURVE-SECP192R1"
48 #define PRIO_RSA "NONE:+VERS-TLS1.0:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+RSA"
50 #define PRIO_AES_CBC_SHA1 "NONE:+VERS-TLS1.0:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+ANON-DH"
51 #define PRIO_ARCFOUR_128_MD5 "NONE:+VERS-TLS1.0:+ARCFOUR-128:+MD5:+SIGN-ALL:+COMP-NULL:+ANON-DH"
52 #define PRIO_AES_GCM "NONE:+VERS-TLS1.2:+AES-128-GCM:+AEAD:+SIGN-ALL:+COMP-NULL:+ANON-DH"
53 #define PRIO_CAMELLIA_CBC_SHA1 "NONE:+VERS-TLS1.0:+CAMELLIA-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+ANON-DH"
55 // #define PARAMS_1024
59 static const int rsa_bits
= 1024, ec_bits
= 192;
62 "-----BEGIN DH PARAMETERS-----\n"
63 "MIIBCwKBgQCsIrA9BK23OUVIwrC4c65YJ2t8bqoGpJpuISjO07lAbWHWa47Kf9/t\n"
64 "F9ckO2AF6Yj1Y7xS+FSCDeoIZsp0LCq3nAP9Ls25fgHrKSMPQBJt2vd5mUdm90Wr\n"
65 "wCK2YjogQ7YVQlovVHsnJWC6Kf0P+OQ4hrihoBCGSj9sGK3wH57m+wKBgH5xlPNR\n"
66 "pI8E2WBNqB6y4sV3eMGRvygScbbFUFFO1ccmNJl5Y5L/O+fP0ZXtmUJVsSvlY0fp\n"
67 "Kcl6k5WCWMY8h6iHlJ9teHmC4s2jifXtaV759kJXdqrGEjRPEku50y3ANzDLzklW\n"
68 "8R7HcSO397vIdouaUt38FbQESnIWOIZqDtq6AgIAnw==\n"
69 "-----END DH PARAMETERS-----\n";
71 /* RSA key of 1024 bits */
72 static unsigned char server_cert_pem
[] =
73 "-----BEGIN CERTIFICATE-----\n"
74 "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n"
75 "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTIxWhcNMDgwNDE3MTMyOTIxWjA3MRsw\n"
76 "GQYDVQQKExJHbnVUTFMgdGVzdCBzZXJ2ZXIxGDAWBgNVBAMTD3Rlc3QuZ251dGxz\n"
77 "Lm9yZzCBnDALBgkqhkiG9w0BAQEDgYwAMIGIAoGA17pcr6MM8C6pJ1aqU46o63+B\n"
78 "dUxrmL5K6rce+EvDasTaDQC46kwTHzYWk95y78akXrJutsoKiFV1kJbtple8DDt2\n"
79 "DZcevensf9Op7PuFZKBroEjOd35znDET/z3IrqVgbtm2jFqab7a+n2q9p/CgMyf1\n"
80 "tx2S5Zacc1LWn9bIjrECAwEAAaOBkzCBkDAMBgNVHRMBAf8EAjAAMBoGA1UdEQQT\n"
81 "MBGCD3Rlc3QuZ251dGxzLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8B\n"
82 "Af8EBQMDB6AAMB0GA1UdDgQWBBTrx0Vu5fglyoyNgw106YbU3VW0dTAfBgNVHSME\n"
83 "GDAWgBTpPBz7rZJu5gakViyi4cBTJ8jylTALBgkqhkiG9w0BAQUDgYEAaFEPTt+7\n"
84 "bzvBuOf7+QmeQcn29kT6Bsyh1RHJXf8KTk5QRfwp6ogbp94JQWcNQ/S7YDFHglD1\n"
85 "AwUNBRXwd3riUsMnsxgeSDxYBfJYbDLeohNBsqaPDJb7XailWbMQKfAbFQ8cnOxg\n"
86 "rOKLUQRWJ0K3HyXRMhbqjdLIaQiCvQLuizo=\n" "-----END CERTIFICATE-----\n";
87 static unsigned char server_key_pem
[] =
88 "-----BEGIN RSA PRIVATE KEY-----\n"
89 "MIICXAIBAAKBgQDXulyvowzwLqknVqpTjqjrf4F1TGuYvkrqtx74S8NqxNoNALjq\n"
90 "TBMfNhaT3nLvxqResm62ygqIVXWQlu2mV7wMO3YNlx696ex/06ns+4VkoGugSM53\n"
91 "fnOcMRP/PciupWBu2baMWppvtr6far2n8KAzJ/W3HZLllpxzUtaf1siOsQIDAQAB\n"
92 "AoGAYAFyKkAYC/PYF8e7+X+tsVCHXppp8AoP8TEZuUqOZz/AArVlle/ROrypg5kl\n"
93 "8YunrvUdzH9R/KZ7saNZlAPLjZyFG9beL/am6Ai7q7Ma5HMqjGU8kTEGwD7K+lbG\n"
94 "iomokKMOl+kkbY/2sI5Czmbm+/PqLXOjtVc5RAsdbgvtmvkCQQDdV5QuU8jap8Hs\n"
95 "Eodv/tLJ2z4+SKCV2k/7FXSKWe0vlrq0cl2qZfoTUYRnKRBcWxc9o92DxK44wgPi\n"
96 "oMQS+O7fAkEA+YG+K9e60sj1K4NYbMPAbYILbZxORDecvP8lcphvwkOVUqbmxOGh\n"
97 "XRmTZUuhBrJhJKKf6u7gf3KWlPl6ShKEbwJASC118cF6nurTjuLf7YKARDjNTEws\n"
98 "qZEeQbdWYINAmCMj0RH2P0mvybrsXSOD5UoDAyO7aWuqkHGcCLv6FGG+qwJAOVqq\n"
99 "tXdUucl6GjOKKw5geIvRRrQMhb/m5scb+5iw8A4LEEHPgGiBaF5NtJZLALgWfo5n\n"
100 "hmC8+G8F0F78znQtPwJBANexu+Tg5KfOnzSILJMo3oXiXhf5PqXIDmbN0BKyCKAQ\n"
101 "LfkcEcUbVfmDaHpvzwY9VEaoMOKVLitETXdNSxVpvWM=\n"
102 "-----END RSA PRIVATE KEY-----\n";
106 static const int rsa_bits
= 1840, ec_bits
= 192;
108 /* DH of 1840 bits that is pretty close equivalent to 192 bits of ECDH.
111 "-----BEGIN DH PARAMETERS-----\n"
112 "MIIB1gKB5kX/Dun+gVTZ1WXWxpS5efQUQY8XNGxi2V0IYHSqKMkrt8UGruv4Gqop\n"
113 "vAoG/+llD/t84cIdUxNwHtLd5y/ae7lFOKFNhP+glvK/GsCfTcACRy9OFKphWi6E\n"
114 "NDMyWV0miiZgIc/LrXgC4RcDMlmxRR3UW/+eVu1ti6PLMLYSooMwn60K6CWmgaM6\n"
115 "VZaiD++gQtsgJdJv2+eNiVotodBPItJ5KcaPNVEdP1D8MzljO98UIOBR3YnalIAW\n"
116 "oyTjWMcX5oxwIR4eSywPeUQokMFFAKxZfo6/IUv05sQ9semagqAilg52Q5CfAoHm\n"
117 "RL1euKirrpaXqUtrV8r0l962oVFlLD92ReJOcjHFni8FY26qZ4IZba1lLP2Q4DTX\n"
118 "ovR7HPMaa6Ss6EdR2hba8Q1LAiCCUFH5jiKjMU8bSM2Zi23GOdoHqYpHMbcSKkpX\n"
119 "IQpbHHNap53/VxcPj4PK9SbQLt0KWe/253l8Ib5zivb6jKSOY/KzwoXO+MiPae01\n"
120 "BdQhrMtsdntRWo5jChSBUidGP7orra3gPBOXhWdNeeTTshc0AZdSWP3NicokW/q7\n"
121 "jHBuaadmhVv3yd6BvFkSePhVWcSKXXG27K9d3RNsXmaBasNYIhsCAgDf\n"
122 "-----END DH PARAMETERS-----\n";
124 static unsigned char server_cert_pem
[] =
125 "-----BEGIN CERTIFICATE-----\n"
126 "MIIC3TCCAeCgAwIBAgIETwIyNzANBgkqhkiG9w0BAQsFADAhMQswCQYDVQQGEwJH\n"
127 "UjESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEyMDEwMjIyMzk1MloXDTE3MDYwNjIy\n"
128 "Mzk1NlowITELMAkGA1UEBhMCR1IxEjAQBgNVBAMTCWxvY2FsaG9zdDCCAQUwDQYJ\n"
129 "KoZIhvcNAQEBBQADgfMAMIHvAoHnAMnMTaYe76aNxyhPDDZ1YWuj8SQh9PC7PRDD\n"
130 "8qL+G8se+DwiJOL3fjRCXi2R1zt6gUrJmycmW+1xc9GdVST6oO09ZG6NQ8CRvU+K\n"
131 "EcaDRQojUFM9QLmkDO1MyEZDMuXBpM+9TFkyDWgrsgYgcNU+Y9FN9Y45OT780+kl\n"
132 "DjZItjl1jnD3tfWaYORQE//Xy4i2HrxTgikP26PB+3ynI+SDj7Sdt4oasgUo1Fpd\n"
133 "OWDQ0hYQ6sn51mOYUnhYZax5y4lI6Cm4KOQc1NMn3iaX5+nS5YGcFhS/Usb8KsX1\n"
134 "fHGsvePSyS/oxTMlAgMBAAGjVTBTMAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYI\n"
135 "KwYBBQUHAwEwDwYDVR0PAQH/BAUDAwegADAdBgNVHQ4EFgQUgQI1pnj7olEUcUu3\n"
136 "SVCbJwYyuF4wDQYJKoZIhvcNAQELBQADgecAs2veVEtkSIlj2nEy1NI/lr0Wf51K\n"
137 "0E2/oAeZJGoGo4wK5HUDfW2HlO+UVTkPei2Zk5Kjl/hpd9zG4BhTurL5mncPntXx\n"
138 "Q6F3FMklBld4AYKeq5SSl+GG/PoEDzEJjazABCWgLa/U3EYjuwSXZj9RMibB6NQX\n"
139 "bKCaj4cjRZSa1UmdLl2KTgRfG1ZDU4EBObagkdaOGD0XJ8EEZaBRktMtT8byxM8A\n"
140 "m2pRMdwPvbxENmMhLXcIPQTaPaEYZyq9LA8Pee5wJosN66l8JVlsz2XEcH35DcG0\n"
141 "bSUX8CSDmUPyHRyzVNeEcHc=\n"
142 "-----END CERTIFICATE-----\n";
144 static unsigned char server_key_pem
[] =
145 "-----BEGIN RSA PRIVATE KEY-----\n"
146 "MIIEKQIBAAKB5wDJzE2mHu+mjccoTww2dWFro/EkIfTwuz0Qw/Ki/hvLHvg8IiTi\n"
147 "9340Ql4tkdc7eoFKyZsnJlvtcXPRnVUk+qDtPWRujUPAkb1PihHGg0UKI1BTPUC5\n"
148 "pAztTMhGQzLlwaTPvUxZMg1oK7IGIHDVPmPRTfWOOTk+/NPpJQ42SLY5dY5w97X1\n"
149 "mmDkUBP/18uIth68U4IpD9ujwft8pyPkg4+0nbeKGrIFKNRaXTlg0NIWEOrJ+dZj\n"
150 "mFJ4WGWsecuJSOgpuCjkHNTTJ94ml+fp0uWBnBYUv1LG/CrF9XxxrL3j0skv6MUz\n"
151 "JQIDAQABAoHnALSPqarKY4STt2/JyxOvU8wMlOfPumrsHmex7JkK5bOJsnOb2YV8\n"
152 "DeCUwc/kfsEpjCZu3fTZzcdXjFoyfMzptLSSChshK05TGSDiWaVWL6AymNziIdf5\n"
153 "gdeSrGCyIAiUi/OVXYsxze03q8LvpAYqHQZayysto69IOe6P5Qt17xYPgsRIA6k9\n"
154 "LAgBIjCN2ukgR/fWERGSn2jC/aBlO3jwmG80LsdPNaQ6+esQcwjwMjFajkf5A1XE\n"
155 "OiYlIdmUS2liuWnUQK+D76WSUTrlwKKjxQiB0A9wugCN43BWHfV/Kf6ohIM1kIAB\n"
156 "AnQA/g8rrF0cTe6ZsiZU0m7nyIQkmATENlLhu37DtcsdqTAwV3+UqzLIh46sHiRa\n"
157 "D3SKlhhNs6iTqw/Wv02ZHy+//pxCmWWNAxhhwPCM6/OO6i5oEYU4uH+llEcu5Flh\n"
158 "udFt7fMy/tzpwPsZRFpXaO1wScU2AQJ0AMtW7rsVrdqZqOdVGNI7vRsLC1SM26j4\n"
159 "2bouNvKPuaLOsLBSlFopSpFRDgOxe+OOqk9Reg6RzO/q+496bEOqixofCE5Gfc/I\n"
160 "pwlwwRGTP7sA0w6Y+Vo+qiATht/YaruscXL3AdQ3BulaqunAzsKN0Iz2ZSUCdACu\n"
161 "bTX74fVj4BPvxvdnfrNt7KO/J06bSW4nr1GpB6n2ldoqyLIGlBgvUZoEG8slX0si\n"
162 "387BMVUpFffHYfxl9/+mTBxBewJEhMHgmIb4HEEbsP7MQJ3/tcu1sOWV63P4Aryp\n"
163 "qNZzOrLWRs9DKY9nv9TfISIBAnMFNzCeadrwvXpAnMUrN08Nb4YV4BsORXvIM8FD\n"
164 "DX60d1q+2w9lFKQOACc83wOPfaxOpodb8k9wY/WZ44j9X1V8EQm0gEhf2QS30EWT\n"
165 "ftRmponDWRckQnE4q2eNPE7Yi37JdR594/9wYtv5bPGgueR8iSFlAnQAjinshgPe\n"
166 "kfAYhgSBbyJJvmCCp3jSra5JzoBnmMy2JyEJT+trCs9pmaP79GP/6BjPXHImnN0w\n"
167 "PsTvmNPD3U2BqsGRuu6OGg9VRP/LDLpPGmV7j8nTraVJCkc4w/n/gazAbPydZZbz\n"
168 "qRP/3et96JUHZnmn6g==\n"
169 "-----END RSA PRIVATE KEY-----\n";
172 static unsigned char server_ecc_key_pem
[] =
173 "-----BEGIN EC PRIVATE KEY-----\n"
174 "MGACAQEEGQCovzs4UsfRncfJXO3WOZUe/Zf+usKzEcWgCgYIKoZIzj0DAQGhNAMy\n"
175 "AAREwuCcUHKNWyetsymkAaqA0GCgksI2AjewpOWsraGrfea3GPw1uuyOQRMR7kka\n"
177 "-----END EC PRIVATE KEY-----\n";
179 static unsigned char server_ecc_cert_pem
[] =
180 "-----BEGIN CERTIFICATE-----\n"
181 "MIIBYDCCARWgAwIBAgIETuILrDAKBggqhkjOPQQDAjAcMQswCQYDVQQGEwJCRTEN\n"
182 "MAsGA1UEChMEVGVzdDAeFw0xMTEyMDkxMzIyNTJaFw0xNzA4MTExMzIyNTlaMBwx\n"
183 "CzAJBgNVBAYTAkJFMQ0wCwYDVQQKEwRUZXN0MEkwEwYHKoZIzj0CAQYIKoZIzj0D\n"
184 "AQEDMgAERMLgnFByjVsnrbMppAGqgNBgoJLCNgI3sKTlrK2hq33mtxj8NbrsjkET\n"
185 "Ee5JGr+ro1UwUzAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA8G\n"
186 "A1UdDwEB/wQFAwMHgAAwHQYDVR0OBBYEFKeR27mtYWFaH43U2zEvjd28Zf+CMAoG\n"
187 "CCqGSM49BAMCAzkAMDYCGQD7WWWiFV+ddI7tIyMFepKFA1dX4nlc/+ICGQCCPdHc\n"
188 "gMyHv2XyfOGHLhq0HmDTOOiwfC4=\n"
189 "-----END CERTIFICATE-----\n";
191 const gnutls_datum_t server_cert
= { server_cert_pem
,
192 sizeof (server_cert_pem
)
195 const gnutls_datum_t server_key
= { server_key_pem
,
196 sizeof (server_key_pem
)
199 const gnutls_datum_t server_ecc_cert
= { server_ecc_cert_pem
,
200 sizeof (server_ecc_cert_pem
)
203 const gnutls_datum_t server_ecc_key
= { server_ecc_key_pem
,
204 sizeof (server_ecc_key_pem
)
207 char buffer
[64 * 1024];
209 static void tls_log_func(int level
, const char *str
)
211 fprintf(stderr
, "%s|<%d>| %s", side
, level
, str
);
214 static void test_ciphersuite(const char *cipher_prio
, int size
)
217 gnutls_anon_server_credentials_t s_anoncred
;
218 const gnutls_datum_t p3
= { (void*) pkcs3
, strlen(pkcs3
) };
219 static gnutls_dh_params_t dh_params
;
220 gnutls_session_t server
;
224 gnutls_anon_client_credentials_t c_anoncred
;
225 gnutls_session_t client
;
226 /* Need to enable anonymous KX specifically. */
228 struct benchmark_st st
;
231 gnutls_anon_allocate_server_credentials(&s_anoncred
);
232 gnutls_dh_params_init(&dh_params
);
233 gnutls_dh_params_import_pkcs3(dh_params
, &p3
, GNUTLS_X509_FMT_PEM
);
234 gnutls_anon_set_server_dh_params(s_anoncred
, dh_params
);
235 gnutls_init(&server
, GNUTLS_SERVER
);
236 ret
= gnutls_priority_set_direct(server
, cipher_prio
, &str
);
238 fprintf(stderr
, "Error in %s\n", str
);
241 gnutls_credentials_set(server
, GNUTLS_CRD_ANON
, s_anoncred
);
242 gnutls_dh_set_prime_bits(server
, 1024);
243 gnutls_transport_set_push_function(server
, server_push
);
244 gnutls_transport_set_pull_function(server
, server_pull
);
245 gnutls_transport_set_ptr(server
, (gnutls_transport_ptr_t
) server
);
249 gnutls_anon_allocate_client_credentials(&c_anoncred
);
250 gnutls_init(&client
, GNUTLS_CLIENT
);
252 ret
= gnutls_priority_set_direct(client
, cipher_prio
, &str
);
254 fprintf(stderr
, "Error in %s\n", str
);
257 gnutls_credentials_set(client
, GNUTLS_CRD_ANON
, c_anoncred
);
258 gnutls_transport_set_push_function(client
, client_push
);
259 gnutls_transport_set_pull_function(client
, client_pull
);
260 gnutls_transport_set_ptr(client
, (gnutls_transport_ptr_t
) client
);
262 HANDSHAKE(client
, server
);
264 fprintf(stdout
, "Testing %s with %d packet size: ",
265 gnutls_cipher_suite_get_name(gnutls_kx_get(server
),
266 gnutls_cipher_get(server
),
267 gnutls_mac_get(server
)), size
);
270 gnutls_rnd(GNUTLS_RND_NONCE
, buffer
, sizeof(buffer
));
272 start_benchmark(&st
);
276 ret
= gnutls_record_send(client
, buffer
, size
);
278 while (ret
== GNUTLS_E_AGAIN
);
281 fprintf(stderr
, "Failed sending to server\n");
286 ret
= gnutls_record_recv(server
, buffer
, sizeof(buffer
));
288 while (ret
== GNUTLS_E_AGAIN
);
291 fprintf(stderr
, "Failed receiving from client\n");
297 while (benchmark_must_finish
== 0);
299 stop_benchmark(&st
, NULL
);
301 gnutls_bye(client
, GNUTLS_SHUT_WR
);
302 gnutls_bye(server
, GNUTLS_SHUT_WR
);
304 gnutls_deinit(client
);
305 gnutls_deinit(server
);
307 gnutls_anon_free_client_credentials(c_anoncred
);
308 gnutls_anon_free_server_credentials(s_anoncred
);
310 gnutls_dh_params_deinit(dh_params
);
314 static void test_ciphersuite_kx(const char *cipher_prio
)
317 gnutls_anon_server_credentials_t s_anoncred
;
318 const gnutls_datum_t p3
= { (void*) pkcs3
, strlen(pkcs3
) };
319 static gnutls_dh_params_t dh_params
;
320 gnutls_session_t server
;
323 const char *suite
= NULL
;
325 gnutls_anon_client_credentials_t c_anoncred
;
326 gnutls_certificate_credentials_t c_certcred
, s_certcred
;
327 gnutls_session_t client
;
328 /* Need to enable anonymous KX specifically. */
330 struct benchmark_st st
;
333 gnutls_certificate_allocate_credentials(&s_certcred
);
334 gnutls_anon_allocate_server_credentials(&s_anoncred
);
335 gnutls_dh_params_init(&dh_params
);
336 if ((ret
=gnutls_dh_params_import_pkcs3(dh_params
, &p3
, GNUTLS_X509_FMT_PEM
)) < 0) {
337 fprintf(stderr
, "Error importing the PKCS #3 params: %s\n", gnutls_strerror(ret
));
340 gnutls_anon_set_server_dh_params(s_anoncred
, dh_params
);
341 gnutls_certificate_set_dh_params(s_certcred
, dh_params
);
343 gnutls_certificate_set_x509_key_mem (s_certcred
, &server_cert
, &server_key
,
344 GNUTLS_X509_FMT_PEM
);
345 gnutls_certificate_set_x509_key_mem (s_certcred
, &server_ecc_cert
, &server_ecc_key
,
346 GNUTLS_X509_FMT_PEM
);
348 start_benchmark(&st
);
351 gnutls_init(&server
, GNUTLS_SERVER
);
352 ret
= gnutls_priority_set_direct(server
, cipher_prio
, &str
);
354 fprintf(stderr
, "Error in %s\n", str
);
357 gnutls_credentials_set(server
, GNUTLS_CRD_ANON
, s_anoncred
);
358 gnutls_credentials_set(server
, GNUTLS_CRD_CERTIFICATE
, s_certcred
);
359 gnutls_transport_set_push_function(server
, server_push
);
360 gnutls_transport_set_pull_function(server
, server_pull
);
361 gnutls_transport_set_ptr(server
, (gnutls_transport_ptr_t
) server
);
365 gnutls_anon_allocate_client_credentials(&c_anoncred
);
366 gnutls_certificate_allocate_credentials(&c_certcred
);
368 gnutls_init(&client
, GNUTLS_CLIENT
);
370 ret
= gnutls_priority_set_direct(client
, cipher_prio
, &str
);
372 fprintf(stderr
, "Error in %s\n", str
);
375 gnutls_credentials_set(client
, GNUTLS_CRD_ANON
, c_anoncred
);
376 gnutls_credentials_set(client
, GNUTLS_CRD_CERTIFICATE
, c_certcred
);
378 gnutls_transport_set_push_function(client
, client_push
);
379 gnutls_transport_set_pull_function(client
, client_pull
);
380 gnutls_transport_set_ptr(client
, (gnutls_transport_ptr_t
) client
);
382 HANDSHAKE(client
, server
);
385 suite
= gnutls_cipher_suite_get_name(gnutls_kx_get(server
),
386 gnutls_cipher_get(server
),
387 gnutls_mac_get(server
));
389 gnutls_deinit(client
);
390 gnutls_deinit(server
);
394 while (benchmark_must_finish
== 0);
396 fprintf(stdout
, "Tested %s: ", suite
);
397 stop_benchmark(&st
, "transactions");
399 gnutls_anon_free_client_credentials(c_anoncred
);
400 gnutls_anon_free_server_credentials(s_anoncred
);
402 gnutls_dh_params_deinit(dh_params
);
406 void benchmark_tls(int debug_level
)
408 gnutls_global_set_log_function(tls_log_func
);
409 gnutls_global_set_log_level(debug_level
);
410 gnutls_global_init();
412 printf("Testing throughput in cipher/MAC combinations:\n");
414 test_ciphersuite(PRIO_ARCFOUR_128_MD5
, 1024);
415 test_ciphersuite(PRIO_ARCFOUR_128_MD5
, 4096);
416 test_ciphersuite(PRIO_ARCFOUR_128_MD5
, 8 * 1024);
417 test_ciphersuite(PRIO_ARCFOUR_128_MD5
, 15 * 1024);
419 test_ciphersuite(PRIO_AES_GCM
, 1024);
420 test_ciphersuite(PRIO_AES_GCM
, 4096);
421 test_ciphersuite(PRIO_AES_GCM
, 8 * 1024);
422 test_ciphersuite(PRIO_AES_GCM
, 15 * 1024);
424 test_ciphersuite(PRIO_AES_CBC_SHA1
, 1024);
425 test_ciphersuite(PRIO_AES_CBC_SHA1
, 4096);
426 test_ciphersuite(PRIO_AES_CBC_SHA1
, 8 * 1024);
427 test_ciphersuite(PRIO_AES_CBC_SHA1
, 15 * 1024);
429 test_ciphersuite(PRIO_CAMELLIA_CBC_SHA1
, 1024);
430 test_ciphersuite(PRIO_CAMELLIA_CBC_SHA1
, 4096);
431 test_ciphersuite(PRIO_CAMELLIA_CBC_SHA1
, 8 * 1024);
432 test_ciphersuite(PRIO_CAMELLIA_CBC_SHA1
, 15 * 1024);
434 printf("\nTesting key exchanges (RSA/DH bits: %d, EC bits: %d):\n", rsa_bits
, ec_bits
);
435 test_ciphersuite_kx(PRIO_DH
);
436 test_ciphersuite_kx(PRIO_ECDH
);
437 test_ciphersuite_kx(PRIO_ECDHE_ECDSA
);
438 test_ciphersuite_kx(PRIO_RSA
);
440 gnutls_global_deinit();