diff options
author | Christian Grothoff <christian@grothoff.org> | 2014-01-07 19:04:09 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2014-01-07 19:04:09 +0000 |
commit | 8b4df530533b6de991dbdc5431c0ac778f1836ae (patch) | |
tree | 8260c93fd58fb6226a8869ec58007d2ecac202c8 /src/util/crypto_hash.c | |
parent | 83d0beb52def13c8c5d162ace16a576338efbb15 (diff) | |
download | gnunet-8b4df530533b6de991dbdc5431c0ac778f1836ae.tar.gz gnunet-8b4df530533b6de991dbdc5431c0ac778f1836ae.zip |
-eliminate repeated calls to gcry_md_open, use reset instead of close/open
Diffstat (limited to 'src/util/crypto_hash.c')
-rw-r--r-- | src/util/crypto_hash.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/util/crypto_hash.c b/src/util/crypto_hash.c index e14e7c898..3244a4371 100644 --- a/src/util/crypto_hash.c +++ b/src/util/crypto_hash.c | |||
@@ -561,19 +561,27 @@ GNUNET_CRYPTO_hmac_derive_key_v (struct GNUNET_CRYPTO_AuthKey *key, | |||
561 | void | 561 | void |
562 | GNUNET_CRYPTO_hmac (const struct GNUNET_CRYPTO_AuthKey *key, | 562 | GNUNET_CRYPTO_hmac (const struct GNUNET_CRYPTO_AuthKey *key, |
563 | const void *plaintext, size_t plaintext_len, | 563 | const void *plaintext, size_t plaintext_len, |
564 | struct GNUNET_HashCode * hmac) | 564 | struct GNUNET_HashCode *hmac) |
565 | { | 565 | { |
566 | gcry_md_hd_t md; | 566 | static int once; |
567 | static gcry_md_hd_t md; | ||
567 | const unsigned char *mc; | 568 | const unsigned char *mc; |
568 | 569 | ||
569 | GNUNET_assert (GPG_ERR_NO_ERROR == | 570 | if (! once) |
570 | gcry_md_open (&md, GCRY_MD_SHA512, GCRY_MD_FLAG_HMAC)); | 571 | { |
572 | once = 1; | ||
573 | GNUNET_assert (GPG_ERR_NO_ERROR == | ||
574 | gcry_md_open (&md, GCRY_MD_SHA512, GCRY_MD_FLAG_HMAC)); | ||
575 | } | ||
576 | else | ||
577 | { | ||
578 | gcry_md_reset (md); | ||
579 | } | ||
571 | gcry_md_setkey (md, key->key, sizeof (key->key)); | 580 | gcry_md_setkey (md, key->key, sizeof (key->key)); |
572 | gcry_md_write (md, plaintext, plaintext_len); | 581 | gcry_md_write (md, plaintext, plaintext_len); |
573 | mc = gcry_md_read (md, GCRY_MD_SHA512); | 582 | mc = gcry_md_read (md, GCRY_MD_SHA512); |
574 | if (mc != NULL) | 583 | GNUNET_assert (NULL != mc); |
575 | memcpy (hmac->bits, mc, sizeof (hmac->bits)); | 584 | memcpy (hmac->bits, mc, sizeof (hmac->bits)); |
576 | gcry_md_close (md); | ||
577 | } | 585 | } |
578 | 586 | ||
579 | 587 | ||