From e32a95423e3e54f983df02e88e5f0d2e81cc6d4f Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Mon, 28 Nov 2011 17:39:25 +0000 Subject: [PATCH] cache signature upon first generation to avoid useless re-signing of the same data --- src/nse/gnunet-service-nse.c | 28 ++++++++++++++++++++++------ src/nse/nse_api.c | 2 +- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/nse/gnunet-service-nse.c b/src/nse/gnunet-service-nse.c index 6e866f82c..57bfcde2f 100644 --- a/src/nse/gnunet-service-nse.c +++ b/src/nse/gnunet-service-nse.c @@ -828,6 +828,7 @@ find_proof (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) sizeof (uint64_t)]; GNUNET_HashCode result; unsigned int i; + const struct GNUNET_CRYPTO_RsaSignature *sig_cache; proof_task = GNUNET_SCHEDULER_NO_TASK; memcpy (&buf[sizeof (uint64_t)], &my_public_key, @@ -845,19 +846,34 @@ find_proof (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Proof of work found: %llu!\n", (unsigned long long) GNUNET_ntohll (counter)); #endif + sig_cache = NULL; for (i = 0; i < HISTORY_SIZE; i++) if (ntohl (size_estimate_messages[i].hop_count) == 0) { size_estimate_messages[i].proof_of_work = my_proof; if (nse_work_required > 0) - GNUNET_assert (GNUNET_OK == - GNUNET_CRYPTO_rsa_sign (my_private_key, - &size_estimate_messages - [i].purpose, - &size_estimate_messages - [i].signature)); + { + if (sig_cache == NULL) + { + GNUNET_assert (GNUNET_OK == + GNUNET_CRYPTO_rsa_sign (my_private_key, + &size_estimate_messages + [i].purpose, + &size_estimate_messages + [i].signature)); + sig_cache = &size_estimate_messages[i].signature; + } + else + { + /* use cached signature */ + size_estimate_messages[i].signature = *sig_cache; + } + } else + { + /* no signature required */ memset (&size_estimate_messages[i].signature, 0, sizeof (struct GNUNET_CRYPTO_RsaSignature)); + } } write_proof (); return; diff --git a/src/nse/nse_api.c b/src/nse/nse_api.c index db5e9d117..e32c08e4b 100644 --- a/src/nse/nse_api.c +++ b/src/nse/nse_api.c @@ -105,7 +105,7 @@ message_handler (void *cls, const struct GNUNET_MessageHeader *msg) if (msg == NULL) { - /* Error, timeout, death */ + /* Error, timeout, death */ GNUNET_CLIENT_disconnect (h->client, GNUNET_NO); h->client = NULL; h->reconnect_task = -- 2.25.1