mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-14 15:23:27 +01:00
Add benchmark to test onionskin performance.
This commit is contained in:
parent
3c3084e165
commit
4f60bca1c1
@ -15,9 +15,12 @@ const char tor_git_revision[] = "";
|
|||||||
#include "orconfig.h"
|
#include "orconfig.h"
|
||||||
|
|
||||||
#define RELAY_PRIVATE
|
#define RELAY_PRIVATE
|
||||||
|
#define CONFIG_PRIVATE
|
||||||
|
|
||||||
#include "or.h"
|
#include "or.h"
|
||||||
|
#include "onion.h"
|
||||||
#include "relay.h"
|
#include "relay.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_PROCESS_CPUTIME_ID)
|
#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_PROCESS_CPUTIME_ID)
|
||||||
static uint64_t nanostart;
|
static uint64_t nanostart;
|
||||||
@ -96,6 +99,66 @@ bench_aes(void)
|
|||||||
crypto_cipher_free(c);
|
crypto_cipher_free(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
bench_onion_TAP(void)
|
||||||
|
{
|
||||||
|
const int iters = 1<<9;
|
||||||
|
int i;
|
||||||
|
crypto_pk_t *key, *key2;
|
||||||
|
uint64_t start, end;
|
||||||
|
char os[ONIONSKIN_CHALLENGE_LEN];
|
||||||
|
char or[ONIONSKIN_REPLY_LEN];
|
||||||
|
crypto_dh_t *dh_out;
|
||||||
|
|
||||||
|
key = crypto_pk_new();
|
||||||
|
key2 = crypto_pk_new();
|
||||||
|
crypto_pk_generate_key_with_bits(key, 1024);
|
||||||
|
crypto_pk_generate_key_with_bits(key2, 1024);
|
||||||
|
|
||||||
|
reset_perftime();
|
||||||
|
start = perftime();
|
||||||
|
for (i = 0; i < iters; ++i) {
|
||||||
|
onion_skin_create(key, &dh_out, os);
|
||||||
|
crypto_dh_free(dh_out);
|
||||||
|
}
|
||||||
|
end = perftime();
|
||||||
|
printf("Client-side, part 1: %f msec.\n", NANOCOUNT(start, end, iters)/1e6);
|
||||||
|
|
||||||
|
onion_skin_create(key, &dh_out, os);
|
||||||
|
start = perftime();
|
||||||
|
for (i = 0; i < iters; ++i) {
|
||||||
|
char key_out[CPATH_KEY_MATERIAL_LEN];
|
||||||
|
onion_skin_server_handshake(os, key, NULL, or, key_out, sizeof(key_out));
|
||||||
|
}
|
||||||
|
end = perftime();
|
||||||
|
printf("Server-side, key guessed right: %f msec\n",
|
||||||
|
NANOCOUNT(start, end, iters)/1e6);
|
||||||
|
|
||||||
|
start = perftime();
|
||||||
|
for (i = 0; i < iters; ++i) {
|
||||||
|
char key_out[CPATH_KEY_MATERIAL_LEN];
|
||||||
|
onion_skin_server_handshake(os, key2, key, or, key_out, sizeof(key_out));
|
||||||
|
}
|
||||||
|
end = perftime();
|
||||||
|
printf("Server-side, key guessed wrong: %f msec.\n",
|
||||||
|
NANOCOUNT(start, end, iters)/1e6);
|
||||||
|
|
||||||
|
start = perftime();
|
||||||
|
for (i = 0; i < iters; ++i) {
|
||||||
|
crypto_dh_t *dh;
|
||||||
|
char key_out[CPATH_KEY_MATERIAL_LEN];
|
||||||
|
int s;
|
||||||
|
dh = crypto_dh_dup(dh_out);
|
||||||
|
s = onion_skin_client_handshake(dh, or, key_out, sizeof(key_out));
|
||||||
|
tor_assert(s == 0);
|
||||||
|
}
|
||||||
|
end = perftime();
|
||||||
|
printf("Client-side, part 2: %f msec.\n",
|
||||||
|
NANOCOUNT(start, end, iters)/1e6);
|
||||||
|
|
||||||
|
crypto_pk_free(key);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
bench_cell_aes(void)
|
bench_cell_aes(void)
|
||||||
{
|
{
|
||||||
@ -261,6 +324,7 @@ typedef struct benchmark_t {
|
|||||||
static struct benchmark_t benchmarks[] = {
|
static struct benchmark_t benchmarks[] = {
|
||||||
ENT(dmap),
|
ENT(dmap),
|
||||||
ENT(aes),
|
ENT(aes),
|
||||||
|
ENT(onion_TAP),
|
||||||
ENT(cell_aes),
|
ENT(cell_aes),
|
||||||
ENT(cell_ops),
|
ENT(cell_ops),
|
||||||
{NULL,NULL,0}
|
{NULL,NULL,0}
|
||||||
@ -286,6 +350,8 @@ main(int argc, const char **argv)
|
|||||||
int i;
|
int i;
|
||||||
int list=0, n_enabled=0;
|
int list=0, n_enabled=0;
|
||||||
benchmark_t *b;
|
benchmark_t *b;
|
||||||
|
char *errmsg;
|
||||||
|
or_options_t *options;
|
||||||
|
|
||||||
tor_threads_init();
|
tor_threads_init();
|
||||||
|
|
||||||
@ -306,6 +372,16 @@ main(int argc, const char **argv)
|
|||||||
reset_perftime();
|
reset_perftime();
|
||||||
|
|
||||||
crypto_seed_rng(1);
|
crypto_seed_rng(1);
|
||||||
|
options = options_new();
|
||||||
|
init_logging();
|
||||||
|
options->command = CMD_RUN_UNITTESTS;
|
||||||
|
options->DataDirectory = tor_strdup("");
|
||||||
|
options_init(options);
|
||||||
|
if (set_options(options, &errmsg) < 0) {
|
||||||
|
printf("Failed to set initial options: %s\n", errmsg);
|
||||||
|
tor_free(errmsg);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
for (b = benchmarks; b->name; ++b) {
|
for (b = benchmarks; b->name; ++b) {
|
||||||
if (b->enabled || n_enabled == 0) {
|
if (b->enabled || n_enabled == 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user