[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r31827 - gnunet/src/util
From: |
gnunet |
Subject: |
[GNUnet-SVN] r31827 - gnunet/src/util |
Date: |
Tue, 7 Jan 2014 20:04:10 +0100 |
Author: grothoff
Date: 2014-01-07 20:04:09 +0100 (Tue, 07 Jan 2014)
New Revision: 31827
Modified:
gnunet/src/util/crypto_hash.c
gnunet/src/util/crypto_hkdf.c
Log:
-eliminate repeated calls to gcry_md_open, use reset instead of close/open
Modified: gnunet/src/util/crypto_hash.c
===================================================================
--- gnunet/src/util/crypto_hash.c 2014-01-07 16:19:44 UTC (rev 31826)
+++ gnunet/src/util/crypto_hash.c 2014-01-07 19:04:09 UTC (rev 31827)
@@ -561,19 +561,27 @@
void
GNUNET_CRYPTO_hmac (const struct GNUNET_CRYPTO_AuthKey *key,
const void *plaintext, size_t plaintext_len,
- struct GNUNET_HashCode * hmac)
+ struct GNUNET_HashCode *hmac)
{
- gcry_md_hd_t md;
+ static int once;
+ static gcry_md_hd_t md;
const unsigned char *mc;
- GNUNET_assert (GPG_ERR_NO_ERROR ==
- gcry_md_open (&md, GCRY_MD_SHA512, GCRY_MD_FLAG_HMAC));
+ if (! once)
+ {
+ once = 1;
+ GNUNET_assert (GPG_ERR_NO_ERROR ==
+ gcry_md_open (&md, GCRY_MD_SHA512, GCRY_MD_FLAG_HMAC));
+ }
+ else
+ {
+ gcry_md_reset (md);
+ }
gcry_md_setkey (md, key->key, sizeof (key->key));
gcry_md_write (md, plaintext, plaintext_len);
mc = gcry_md_read (md, GCRY_MD_SHA512);
- if (mc != NULL)
- memcpy (hmac->bits, mc, sizeof (hmac->bits));
- gcry_md_close (md);
+ GNUNET_assert (NULL != mc);
+ memcpy (hmac->bits, mc, sizeof (hmac->bits));
}
Modified: gnunet/src/util/crypto_hkdf.c
===================================================================
--- gnunet/src/util/crypto_hkdf.c 2014-01-07 16:19:44 UTC (rev 31826)
+++ gnunet/src/util/crypto_hkdf.c 2014-01-07 19:04:09 UTC (rev 31827)
@@ -135,33 +135,47 @@
* @param skm source key material
* @param skm_len length of skm
* @param argp va_list of void * & size_t pairs for context chunks
- * @return GNUNET_YES on success
+ * @return #GNUNET_YES on success
*/
int
GNUNET_CRYPTO_hkdf_v (void *result, size_t out_len, int xtr_algo, int prf_algo,
const void *xts, size_t xts_len, const void *skm,
size_t skm_len, va_list argp)
{
+ static int once;
+ static gcry_md_hd_t xtr;
+ static gcry_md_hd_t prf;
const void *hc;
- unsigned long i, t, d;
+ unsigned long i;
+ unsigned long t;
+ unsigned long d;
unsigned int k = gcry_md_get_algo_dlen (prf_algo);
unsigned int xtr_len = gcry_md_get_algo_dlen (xtr_algo);
char prk[xtr_len];
int ret;
- gcry_md_hd_t xtr, prf;
size_t ctx_len;
va_list args;
- if (k == 0)
+ if (0 == k)
return GNUNET_SYSERR;
+ if (! once)
+ {
+ if (GPG_ERR_NO_ERROR !=
+ gcry_md_open (&xtr, xtr_algo, GCRY_MD_FLAG_HMAC))
+ return GNUNET_SYSERR;
- if (gcry_md_open (&xtr, xtr_algo, GCRY_MD_FLAG_HMAC) != GPG_ERR_NO_ERROR)
- return GNUNET_SYSERR;
-
- if (gcry_md_open (&prf, prf_algo, GCRY_MD_FLAG_HMAC) != GPG_ERR_NO_ERROR)
+ if (GPG_ERR_NO_ERROR !=
+ gcry_md_open (&prf, prf_algo, GCRY_MD_FLAG_HMAC))
+ {
+ gcry_md_close (xtr);
+ return GNUNET_SYSERR;
+ }
+ once = 1;
+ }
+ else
{
- gcry_md_close (xtr);
- return GNUNET_SYSERR;
+ gcry_md_reset (xtr);
+ gcry_md_reset (prf);
}
va_copy (args, argp);
@@ -261,9 +275,6 @@
hkdf_error:
ret = GNUNET_SYSERR;
hkdf_ok:
- gcry_md_close (prf);
- gcry_md_close (xtr);
-
return ret;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r31827 - gnunet/src/util,
gnunet <=