[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r13223 - in gnunet/src: core include util
From: |
gnunet |
Subject: |
[GNUnet-SVN] r13223 - in gnunet/src: core include util |
Date: |
Fri, 8 Oct 2010 13:16:17 +0200 |
Author: durner
Date: 2010-10-08 13:16:17 +0200 (Fri, 08 Oct 2010)
New Revision: 13223
Modified:
gnunet/src/core/gnunet-service-core.c
gnunet/src/include/gnunet_crypto_lib.h
gnunet/src/util/crypto_hkdf.c
gnunet/src/util/crypto_kdf.c
gnunet/src/util/test_crypto_hkdf.c
Log:
style fixes, minor bugfixes
Modified: gnunet/src/core/gnunet-service-core.c
===================================================================
--- gnunet/src/core/gnunet-service-core.c 2010-10-08 11:12:56 UTC (rev
13222)
+++ gnunet/src/core/gnunet-service-core.c 2010-10-08 11:16:17 UTC (rev
13223)
@@ -734,8 +734,8 @@
static void
derive_auth_key (struct GNUNET_CRYPTO_AuthKey *akey,
const struct GNUNET_CRYPTO_AesSessionKey *skey,
- const unsigned int seed,
- const struct GNUNET_TIME_Absolute creation_time)
+ uint32_t seed,
+ struct GNUNET_TIME_Absolute creation_time)
{
static char ctx[] = "authentication key";
Modified: gnunet/src/include/gnunet_crypto_lib.h
===================================================================
--- gnunet/src/include/gnunet_crypto_lib.h 2010-10-08 11:12:56 UTC (rev
13222)
+++ gnunet/src/include/gnunet_crypto_lib.h 2010-10-08 11:16:17 UTC (rev
13223)
@@ -618,7 +618,7 @@
*/
int
GNUNET_CRYPTO_hkdf (void *result,
- unsigned long long out_len,
+ size_t out_len,
int xtr_algo, int prf_algo,
const void *xts, size_t xts_len,
const void *skm, size_t skm_len,
@@ -640,7 +640,7 @@
*/
int
GNUNET_CRYPTO_hkdf_v (void *result,
- const unsigned long long out_len, /* FIXME: size_t? */
+ size_t out_len,
int xtr_algo,
int prf_algo,
const void *xts, size_t xts_len,
@@ -661,7 +661,7 @@
*/
int
GNUNET_CRYPTO_kdf_v (void *result,
- unsigned long long out_len,
+ size_t out_len,
const void *xts, size_t xts_len,
const void *skm, size_t skm_len,
va_list argp);
@@ -679,9 +679,9 @@
* @return GNUNET_YES on success
*/
int
-GNUNET_CRYPTO_kdf (void *result, const unsigned long long out_len,
- const void *xts, const size_t xts_len, const void *skm,
- const size_t skm_len, ...);
+GNUNET_CRYPTO_kdf (void *result, size_t out_len,
+ const void *xts, size_t xts_len, const void *skm,
+ size_t skm_len, ...);
/**
Modified: gnunet/src/util/crypto_hkdf.c
===================================================================
--- gnunet/src/util/crypto_hkdf.c 2010-10-08 11:12:56 UTC (rev 13222)
+++ gnunet/src/util/crypto_hkdf.c 2010-10-08 11:16:17 UTC (rev 13223)
@@ -24,6 +24,7 @@
* @file src/util/crypto_hkdf.c
* @brief Hash-based KDF as defined in RFC 5869
* @see http://www.rfc-editor.org/rfc/rfc5869.txt
+ * @todo remove GNUNET references
* @author Nils Durner
*/
@@ -36,6 +37,7 @@
/**
* @brief Compute the HMAC
+ * @todo use chunked buffers
* @param mac gcrypt MAC handle
* @param key HMAC key
* @param key_len length of key
@@ -66,8 +68,8 @@
*/
static int
getPRK (gcry_md_hd_t mac,
- const void *xts, unsigned long long xts_len, /* FIXME: size_t? */
- const void *skm, unsigned long long skm_len,
+ const void *xts, size_t xts_len,
+ const void *skm, size_t skm_len,
void *prk)
{
const void *ret;
@@ -115,40 +117,46 @@
* @return GNUNET_YES on success
*/
int
-GNUNET_CRYPTO_hkdf_v (void *result, unsigned long long out_len,
+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)
{
- void *prk, *plain;
const void *hc;
- unsigned long long plain_len;
unsigned long i, t, d;
- unsigned int k, xtr_len;
+ 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;
- prk = plain = NULL;
- xtr_len = gcry_md_get_algo_dlen (xtr_algo);
- k = gcry_md_get_algo_dlen (prf_algo);
- gcry_md_open(&xtr, xtr_algo, GCRY_MD_FLAG_HMAC);
- gcry_md_open(&prf, prf_algo, GCRY_MD_FLAG_HMAC);
+ if (k == 0)
+ return GNUNET_SYSERR;
- if (out_len > (2 ^ 32 * k) || !xtr_algo || !prf_algo)
+ // FIXME: what is the check for?
+ if (out_len > (2 ^ 32 * k))
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)
+ {
+ gcry_md_close (xtr);
+ return GNUNET_SYSERR;
+ }
+
va_copy (args, argp);
- for (ctx_len = 0; va_arg (args, void *);)
+
+ ctx_len = 0;
+ while (NULL != va_arg (args, void *))
ctx_len += va_arg (args, size_t);
va_end(args);
- prk = GNUNET_malloc (xtr_len);
-
memset (result, 0, out_len);
- gcry_md_reset (xtr);
if (getPRK (xtr, xts, xts_len, skm, skm_len, prk)
!= GNUNET_YES)
goto hkdf_error;
@@ -160,13 +168,13 @@
d = out_len % k;
/* K(1) */
- plain_len = k + ctx_len + 1;
- plain = GNUNET_malloc (plain_len);
- if (t > 0)
- {
- void *ctx, *dst;
+ {
+ size_t plain_len = k + ctx_len + 1;
+ char plain[plain_len];
+ const void *ctx;
+ char *dst;
- dst = plain;
+ dst = plain + k;
va_copy (args, argp);
while ((ctx = va_arg (args, void *)))
{
@@ -178,37 +186,21 @@
}
va_end (args);
- memset (dst, 1, 1);
- gcry_md_reset (prf);
+ if (t > 0)
+ {
+ memset (plain + k + ctx_len, 1, 1);
#if DEBUG_HKDF
dump("K(1)", plain, plain_len);
#endif
hc = doHMAC (prf,
prk,
- xtr_len, plain, ctx_len + 1);
+ xtr_len, &plain[k], ctx_len + 1);
if (hc == NULL)
goto hkdf_error;
memcpy (result, hc, k);
result += k;
}
- if (t > 1 || d > 0)
- {
- void *ctx, *dst;
-
- dst = plain + k;
- va_copy (args, argp);
- while ((ctx = va_arg (args, void *)))
- {
- size_t len;
-
- len = va_arg (args, size_t);
- memcpy (dst, ctx, len);
- dst += len;
- }
- va_end (args);
- }
-
/* K(i+1) */
for (i = 1; i < t; i++)
{
@@ -235,7 +227,10 @@
#if DEBUG_HKDF
dump("K(t):d", plain, plain_len);
#endif
- hc = doHMAC (prf, prk, xtr_len, plain, plain_len);
+ if (t > 0)
+ hc = doHMAC (prf, prk, xtr_len, plain, plain_len);
+ else
+ hc = doHMAC (prf, prk, xtr_len, plain + k, plain_len - k);
if (hc == NULL)
goto hkdf_error;
memcpy (result, hc, d);
@@ -246,12 +241,10 @@
ret = GNUNET_YES;
goto hkdf_ok;
-
+ }
hkdf_error:
ret = GNUNET_SYSERR;
hkdf_ok:
- GNUNET_free (prk);
- GNUNET_free_non_null (plain);
gcry_md_close (prf);
gcry_md_close (xtr);
@@ -274,7 +267,7 @@
* @return GNUNET_YES on success
*/
int
-GNUNET_CRYPTO_hkdf (void *result, unsigned long long out_len,
+GNUNET_CRYPTO_hkdf (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,
Modified: gnunet/src/util/crypto_kdf.c
===================================================================
--- gnunet/src/util/crypto_kdf.c 2010-10-08 11:12:56 UTC (rev 13222)
+++ gnunet/src/util/crypto_kdf.c 2010-10-08 11:16:17 UTC (rev 13223)
@@ -41,9 +41,9 @@
* @return GNUNET_YES on success
*/
int
-GNUNET_CRYPTO_kdf_v (void *result, const unsigned long long out_len,
- const void *xts, const size_t xts_len, const void *skm,
- const size_t skm_len, va_list argp)
+GNUNET_CRYPTO_kdf_v (void *result, size_t out_len,
+ const void *xts, size_t xts_len, const void *skm,
+ size_t skm_len, va_list argp)
{
/*
"Finally, we point out to a particularly advantageous instantiation using
@@ -73,9 +73,9 @@
* @return GNUNET_YES on success
*/
int
-GNUNET_CRYPTO_kdf (void *result, const unsigned long long out_len,
- const void *xts, const size_t xts_len, const void *skm,
- const size_t skm_len, ...)
+GNUNET_CRYPTO_kdf (void *result, size_t out_len,
+ const void *xts, size_t xts_len, const void *skm,
+ size_t skm_len, ...)
{
va_list argp;
int ret;
Modified: gnunet/src/util/test_crypto_hkdf.c
===================================================================
--- gnunet/src/util/test_crypto_hkdf.c 2010-10-08 11:12:56 UTC (rev 13222)
+++ gnunet/src/util/test_crypto_hkdf.c 2010-10-08 11:16:17 UTC (rev 13223)
@@ -23,6 +23,7 @@
/**
* @file src/util/test_crypt_hkdf.c
* @brief Testcases for HKDF
+ * @todo: test for out_len < hash_len
* @author Nils Durner
*/
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r13223 - in gnunet/src: core include util,
gnunet <=