aboutsummaryrefslogtreecommitdiff
path: root/src/util/crypto_hkdf.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-10-11 09:43:04 +0000
committerChristian Grothoff <christian@grothoff.org>2011-10-11 09:43:04 +0000
commitd9d94d0e53d26af75ec8241383d166544ebd79f3 (patch)
tree9080b73624389403a198257fe0547bb4634e64d2 /src/util/crypto_hkdf.c
parent2d792ee2e9cc0c993b8907e2c8edb0c2b8465343 (diff)
downloadgnunet-d9d94d0e53d26af75ec8241383d166544ebd79f3.tar.gz
gnunet-d9d94d0e53d26af75ec8241383d166544ebd79f3.zip
converting to GNUNET_LOG_from*
Diffstat (limited to 'src/util/crypto_hkdf.c')
-rw-r--r--src/util/crypto_hkdf.c120
1 files changed, 61 insertions, 59 deletions
diff --git a/src/util/crypto_hkdf.c b/src/util/crypto_hkdf.c
index 0654b51f6..6af76ba68 100644
--- a/src/util/crypto_hkdf.c
+++ b/src/util/crypto_hkdf.c
@@ -36,6 +36,8 @@
36 * - Matthias Wachs (08.10.2010) 36 * - Matthias Wachs (08.10.2010)
37 */ 37 */
38 38
39#define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__)
40
39/** 41/**
40 * Set this to 0 if you compile this code outside of GNUnet. 42 * Set this to 0 if you compile this code outside of GNUnet.
41 */ 43 */
@@ -72,7 +74,7 @@
72 */ 74 */
73static const void * 75static const void *
74doHMAC (gcry_md_hd_t mac, const void *key, size_t key_len, const void *buf, 76doHMAC (gcry_md_hd_t mac, const void *key, size_t key_len, const void *buf,
75 size_t buf_len) 77 size_t buf_len)
76{ 78{
77 gcry_md_setkey (mac, key, key_len); 79 gcry_md_setkey (mac, key, key_len);
78 gcry_md_write (mac, buf, buf_len); 80 gcry_md_write (mac, buf, buf_len);
@@ -92,7 +94,7 @@ doHMAC (gcry_md_hd_t mac, const void *key, size_t key_len, const void *buf,
92 */ 94 */
93static int 95static int
94getPRK (gcry_md_hd_t mac, const void *xts, size_t xts_len, const void *skm, 96getPRK (gcry_md_hd_t mac, const void *xts, size_t xts_len, const void *skm,
95 size_t skm_len, void *prk) 97 size_t skm_len, void *prk)
96{ 98{
97 const void *ret; 99 const void *ret;
98 100
@@ -113,9 +115,9 @@ dump (const char *src, const void *p, unsigned int l)
113 115
114 printf ("\n%s: ", src); 116 printf ("\n%s: ", src);
115 for (i = 0; i < l; i++) 117 for (i = 0; i < l; i++)
116 { 118 {
117 printf ("%2x", (int) ((const unsigned char *) p)[i]); 119 printf ("%2x", (int) ((const unsigned char *) p)[i]);
118 } 120 }
119 printf ("\n"); 121 printf ("\n");
120} 122}
121#endif 123#endif
@@ -135,9 +137,9 @@ dump (const char *src, const void *p, unsigned int l)
135 * @return GNUNET_YES on success 137 * @return GNUNET_YES on success
136 */ 138 */
137int 139int
138GNUNET_CRYPTO_hkdf_v (void *result, size_t out_len, int xtr_algo, int prf_algo, 140GNUNET_CRYPTO_hkdf_v (void *result, size_t out_len, int xtr_algo,
139 const void *xts, size_t xts_len, const void *skm, 141 int prf_algo, const void *xts, size_t xts_len,
140 size_t skm_len, va_list argp) 142 const void *skm, size_t skm_len, va_list argp)
141{ 143{
142 const void *hc; 144 const void *hc;
143 unsigned long i, t, d; 145 unsigned long i, t, d;
@@ -156,16 +158,16 @@ GNUNET_CRYPTO_hkdf_v (void *result, size_t out_len, int xtr_algo, int prf_algo,
156 return GNUNET_SYSERR; 158 return GNUNET_SYSERR;
157 159
158 if (gcry_md_open (&prf, prf_algo, GCRY_MD_FLAG_HMAC) != GPG_ERR_NO_ERROR) 160 if (gcry_md_open (&prf, prf_algo, GCRY_MD_FLAG_HMAC) != GPG_ERR_NO_ERROR)
159 { 161 {
160 gcry_md_close (xtr); 162 gcry_md_close (xtr);
161 return GNUNET_SYSERR; 163 return GNUNET_SYSERR;
162 } 164 }
163 165
164 va_copy (args, argp); 166 va_copy (args, argp);
165 167
166 ctx_len = 0; 168 ctx_len = 0;
167 while (NULL != va_arg (args, void *)) 169 while (NULL != va_arg (args, void *))
168 ctx_len += va_arg (args, size_t); 170 ctx_len += va_arg (args, size_t);
169 171
170 va_end (args); 172 va_end (args);
171 173
@@ -189,65 +191,65 @@ GNUNET_CRYPTO_hkdf_v (void *result, size_t out_len, int xtr_algo, int prf_algo,
189 dst = plain + k; 191 dst = plain + k;
190 va_copy (args, argp); 192 va_copy (args, argp);
191 while ((ctx = va_arg (args, void *))) 193 while ((ctx = va_arg (args, void *)))
192 { 194 {
193 size_t len; 195 size_t len;
194 196
195 len = va_arg (args, size_t); 197 len = va_arg (args, size_t);
196 memcpy (dst, ctx, len); 198 memcpy (dst, ctx, len);
197 dst += len; 199 dst += len;
198 } 200 }
199 va_end (args); 201 va_end (args);
200 202
201 if (t > 0) 203 if (t > 0)
202 { 204 {
203 memset (plain + k + ctx_len, 1, 1); 205 memset (plain + k + ctx_len, 1, 1);
204#if DEBUG_HKDF 206#if DEBUG_HKDF
205 dump ("K(1)", plain, plain_len); 207 dump ("K(1)", plain, plain_len);
206#endif 208#endif
207 hc = doHMAC (prf, prk, xtr_len, &plain[k], ctx_len + 1); 209 hc = doHMAC (prf, prk, xtr_len, &plain[k], ctx_len + 1);
208 if (hc == NULL) 210 if (hc == NULL)
209 goto hkdf_error; 211 goto hkdf_error;
210 memcpy (result, hc, k); 212 memcpy (result, hc, k);
211 result += k; 213 result += k;
212 } 214 }
213 215
214 /* K(i+1) */ 216 /* K(i+1) */
215 for (i = 1; i < t; i++) 217 for (i = 1; i < t; i++)
216 { 218 {
217 memcpy (plain, result - k, k); 219 memcpy (plain, result - k, k);
218 memset (plain + k + ctx_len, i + 1, 1); 220 memset (plain + k + ctx_len, i + 1, 1);
219 gcry_md_reset (prf); 221 gcry_md_reset (prf);
220#if DEBUG_HKDF 222#if DEBUG_HKDF
221 dump ("K(i+1)", plain, plain_len); 223 dump ("K(i+1)", plain, plain_len);
222#endif 224#endif
223 hc = doHMAC (prf, prk, xtr_len, plain, plain_len); 225 hc = doHMAC (prf, prk, xtr_len, plain, plain_len);
224 if (hc == NULL) 226 if (hc == NULL)
225 goto hkdf_error; 227 goto hkdf_error;
226 memcpy (result, hc, k); 228 memcpy (result, hc, k);
227 result += k; 229 result += k;
228 } 230 }
229 231
230 /* K(t):d */ 232 /* K(t):d */
231 if (d > 0) 233 if (d > 0)
232 {
233 if (t > 0)
234 { 234 {
235 memcpy (plain, result - k, k); 235 if (t > 0)
236 i++; 236 {
237 } 237 memcpy (plain, result - k, k);
238 memset (plain + k + ctx_len, i, 1); 238 i++;
239 gcry_md_reset (prf); 239 }
240 memset (plain + k + ctx_len, i, 1);
241 gcry_md_reset (prf);
240#if DEBUG_HKDF 242#if DEBUG_HKDF
241 dump ("K(t):d", plain, plain_len); 243 dump ("K(t):d", plain, plain_len);
242#endif 244#endif
243 if (t > 0) 245 if (t > 0)
244 hc = doHMAC (prf, prk, xtr_len, plain, plain_len); 246 hc = doHMAC (prf, prk, xtr_len, plain, plain_len);
245 else 247 else
246 hc = doHMAC (prf, prk, xtr_len, plain + k, plain_len - k); 248 hc = doHMAC (prf, prk, xtr_len, plain + k, plain_len - k);
247 if (hc == NULL) 249 if (hc == NULL)
248 goto hkdf_error; 250 goto hkdf_error;
249 memcpy (result, hc, d); 251 memcpy (result, hc, d);
250 } 252 }
251#if DEBUG_HKDF 253#if DEBUG_HKDF
252 dump ("result", result - k, out_len); 254 dump ("result", result - k, out_len);
253#endif 255#endif
@@ -279,16 +281,16 @@ hkdf_ok:
279 */ 281 */
280int 282int
281GNUNET_CRYPTO_hkdf (void *result, size_t out_len, int xtr_algo, int prf_algo, 283GNUNET_CRYPTO_hkdf (void *result, size_t out_len, int xtr_algo, int prf_algo,
282 const void *xts, size_t xts_len, const void *skm, 284 const void *xts, size_t xts_len, const void *skm,
283 size_t skm_len, ...) 285 size_t skm_len, ...)
284{ 286{
285 va_list argp; 287 va_list argp;
286 int ret; 288 int ret;
287 289
288 va_start (argp, skm_len); 290 va_start (argp, skm_len);
289 ret = 291 ret =
290 GNUNET_CRYPTO_hkdf_v (result, out_len, xtr_algo, prf_algo, xts, xts_len, 292 GNUNET_CRYPTO_hkdf_v (result, out_len, xtr_algo, prf_algo, xts, xts_len,
291 skm, skm_len, argp); 293 skm, skm_len, argp);
292 va_end (argp); 294 va_end (argp);
293 295
294 return ret; 296 return ret;