gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r13087 - gnunet/src/util


From: gnunet
Subject: [GNUnet-SVN] r13087 - gnunet/src/util
Date: Tue, 28 Sep 2010 21:12:19 +0200

Author: durner
Date: 2010-09-28 21:12:19 +0200 (Tue, 28 Sep 2010)
New Revision: 13087

Modified:
   gnunet/src/util/crypto_hkdf.c
   gnunet/src/util/test_crypto_hkdf.c
Log:
fixes

Modified: gnunet/src/util/crypto_hkdf.c
===================================================================
--- gnunet/src/util/crypto_hkdf.c       2010-09-28 15:53:26 UTC (rev 13086)
+++ gnunet/src/util/crypto_hkdf.c       2010-09-28 19:12:19 UTC (rev 13087)
@@ -101,14 +101,13 @@
  * @param xts_len length of xts
  * @param skm source key material
  * @param skm_len length of skm
- * @param ctx context info
- * @param ctx_len length of ctx
+ * @param argp va_list of void * & size_t pairs for context chunks
  * @return GNUNET_YES on success
  */
 int
-GNUNET_CRYPTO_hkdf (void *result, const unsigned long long out_len,
+GNUNET_CRYPTO_hkdf_v (void *result, const unsigned long long out_len,
     int xtr_algo, int prf_algo, const void *xts, const size_t xts_len,
-    const void *skm, const size_t skm_len, ...)
+    const void *skm, const size_t skm_len, va_list argp)
 {
   void *prk, *hc, *plain;
   unsigned long long plain_len;
@@ -117,7 +116,7 @@
   int ret;
   gcry_md_hd_t xtr, prf;
   size_t ctx_len;
-  va_list argp;
+  va_list args;
 
   prk = plain = NULL;
   xtr_len = gcry_md_get_algo_dlen (xtr_algo);
@@ -128,10 +127,10 @@
   if (out_len > (2 ^ 32 * k) || !xtr_algo || !prf_algo)
     return GNUNET_SYSERR;
 
-  va_start(argp, skm_len);
-  for (ctx_len = 0; va_arg (argp, void *);)
-    ctx_len += va_arg (argp, size_t);
-  va_end(argp);
+  va_copy (args, argp);
+  for (ctx_len = 0; va_arg (args, void *);)
+    ctx_len += va_arg (args, size_t);
+  va_end(args);
 
   prk = GNUNET_malloc (xtr_len);
 
@@ -155,16 +154,16 @@
       void *ctx, *dst;
 
       dst = plain;
-      va_start (argp, skm_len);
-      while ((ctx = va_arg (argp, void *)))
+      va_copy (args, argp);
+      while ((ctx = va_arg (args, void *)))
         {
           size_t len;
 
-          len = va_arg (argp, size_t);
+          len = va_arg (args, size_t);
           memcpy (dst, ctx, len);
           dst += len;
         }
-      va_end (argp);
+      va_end (args);
 
       memset (dst, 1, 1);
       gcry_md_reset (prf);
@@ -183,10 +182,16 @@
       void *ctx, *dst;
 
       dst = plain + k;
-      va_start(argp, skm_len);
-      while ((ctx = va_arg (argp, void *)))
-        memcpy (dst, ctx, va_arg (argp, size_t));
-      va_end (argp);
+      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) */
@@ -238,5 +243,34 @@
   return ret;
 }
 
+/**
+ * @brief Derive key
+ * @param result buffer for the derived key, allocated by caller
+ * @param out_len desired length of the derived key
+ * @param xtr_algo hash algorithm for the extraction phase, GCRY_MD_...
+ * @param prf_algo hash algorithm for the expansion phase, GCRY_MD_...
+ * @param xts salt
+ * @param xts_len length of xts
+ * @param skm source key material
+ * @param skm_len length of skm
+ * @param ctx context info
+ * @param ctx_len length of ctx
+ * @return GNUNET_YES on success
+ */
+int
+GNUNET_CRYPTO_hkdf (void *result, const unsigned long long out_len,
+    int xtr_algo, int prf_algo, const void *xts, const size_t xts_len,
+    const void *skm, const size_t skm_len, ...)
+{
+  va_list argp;
+  int ret;
 
+  va_start(argp, skm_len);
+  ret = GNUNET_CRYPTO_hkdf_v (result, out_len, xtr_algo, prf_algo, xts,
+      xts_len, skm, skm_len, argp);
+  va_end(argp);
+
+  return ret;
+}
+
 /* end of crypto_hkdf.c */

Modified: gnunet/src/util/test_crypto_hkdf.c
===================================================================
--- gnunet/src/util/test_crypto_hkdf.c  2010-09-28 15:53:26 UTC (rev 13086)
+++ gnunet/src/util/test_crypto_hkdf.c  2010-09-28 19:12:19 UTC (rev 13087)
@@ -214,11 +214,11 @@
       0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
       0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5,
       0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf };
-  unsigned char info1[80] = { 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+  unsigned char info1[34] = { 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
       0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3,
       0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
       0xd0, 0xd1 };
-  unsigned char info2[80] = { 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
+  unsigned char info2[46] = { 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
       0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5,
       0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1,
       0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd,




reply via email to

[Prev in Thread] Current Thread [Next in Thread]