aboutsummaryrefslogtreecommitdiff
path: root/src/util/crypto_hkdf.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-11-04 14:00:32 +0000
committerChristian Grothoff <christian@grothoff.org>2011-11-04 14:00:32 +0000
commit83b19539f4d322b43683f5838b72e9ec2c8e6073 (patch)
treed0ab9329fcbefe360d9d14e2ace21a6b3396dfe9 /src/util/crypto_hkdf.c
parent28a2eb43281a1f08a67954f07beb9af3a9bc9a35 (diff)
downloadgnunet-83b19539f4d322b43683f5838b72e9ec2c8e6073.tar.gz
gnunet-83b19539f4d322b43683f5838b72e9ec2c8e6073.zip
curly wars / auto-indentation
Diffstat (limited to 'src/util/crypto_hkdf.c')
-rw-r--r--src/util/crypto_hkdf.c118
1 files changed, 59 insertions, 59 deletions
diff --git a/src/util/crypto_hkdf.c b/src/util/crypto_hkdf.c
index 6af76ba68..40bfa6774 100644
--- a/src/util/crypto_hkdf.c
+++ b/src/util/crypto_hkdf.c
@@ -74,7 +74,7 @@
74 */ 74 */
75static const void * 75static const void *
76doHMAC (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,
77 size_t buf_len) 77 size_t buf_len)
78{ 78{
79 gcry_md_setkey (mac, key, key_len); 79 gcry_md_setkey (mac, key, key_len);
80 gcry_md_write (mac, buf, buf_len); 80 gcry_md_write (mac, buf, buf_len);
@@ -94,7 +94,7 @@ doHMAC (gcry_md_hd_t mac, const void *key, size_t key_len, const void *buf,
94 */ 94 */
95static int 95static int
96getPRK (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,
97 size_t skm_len, void *prk) 97 size_t skm_len, void *prk)
98{ 98{
99 const void *ret; 99 const void *ret;
100 100
@@ -115,9 +115,9 @@ dump (const char *src, const void *p, unsigned int l)
115 115
116 printf ("\n%s: ", src); 116 printf ("\n%s: ", src);
117 for (i = 0; i < l; i++) 117 for (i = 0; i < l; i++)
118 { 118 {
119 printf ("%2x", (int) ((const unsigned char *) p)[i]); 119 printf ("%2x", (int) ((const unsigned char *) p)[i]);
120 } 120 }
121 printf ("\n"); 121 printf ("\n");
122} 122}
123#endif 123#endif
@@ -137,9 +137,9 @@ dump (const char *src, const void *p, unsigned int l)
137 * @return GNUNET_YES on success 137 * @return GNUNET_YES on success
138 */ 138 */
139int 139int
140GNUNET_CRYPTO_hkdf_v (void *result, size_t out_len, int xtr_algo, 140GNUNET_CRYPTO_hkdf_v (void *result, size_t out_len, int xtr_algo, int prf_algo,
141 int prf_algo, const void *xts, size_t xts_len, 141 const void *xts, size_t xts_len, const void *skm,
142 const void *skm, size_t skm_len, va_list argp) 142 size_t skm_len, va_list argp)
143{ 143{
144 const void *hc; 144 const void *hc;
145 unsigned long i, t, d; 145 unsigned long i, t, d;
@@ -158,16 +158,16 @@ GNUNET_CRYPTO_hkdf_v (void *result, size_t out_len, int xtr_algo,
158 return GNUNET_SYSERR; 158 return GNUNET_SYSERR;
159 159
160 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)
161 { 161 {
162 gcry_md_close (xtr); 162 gcry_md_close (xtr);
163 return GNUNET_SYSERR; 163 return GNUNET_SYSERR;
164 } 164 }
165 165
166 va_copy (args, argp); 166 va_copy (args, argp);
167 167
168 ctx_len = 0; 168 ctx_len = 0;
169 while (NULL != va_arg (args, void *)) 169 while (NULL != va_arg (args, void *))
170 ctx_len += va_arg (args, size_t); 170 ctx_len += va_arg (args, size_t);
171 171
172 va_end (args); 172 va_end (args);
173 173
@@ -191,65 +191,65 @@ GNUNET_CRYPTO_hkdf_v (void *result, size_t out_len, int xtr_algo,
191 dst = plain + k; 191 dst = plain + k;
192 va_copy (args, argp); 192 va_copy (args, argp);
193 while ((ctx = va_arg (args, void *))) 193 while ((ctx = va_arg (args, void *)))
194 { 194 {
195 size_t len; 195 size_t len;
196 196
197 len = va_arg (args, size_t); 197 len = va_arg (args, size_t);
198 memcpy (dst, ctx, len); 198 memcpy (dst, ctx, len);
199 dst += len; 199 dst += len;
200 } 200 }
201 va_end (args); 201 va_end (args);
202 202
203 if (t > 0) 203 if (t > 0)
204 { 204 {
205 memset (plain + k + ctx_len, 1, 1); 205 memset (plain + k + ctx_len, 1, 1);
206#if DEBUG_HKDF 206#if DEBUG_HKDF
207 dump ("K(1)", plain, plain_len); 207 dump ("K(1)", plain, plain_len);
208#endif 208#endif
209 hc = doHMAC (prf, prk, xtr_len, &plain[k], ctx_len + 1); 209 hc = doHMAC (prf, prk, xtr_len, &plain[k], ctx_len + 1);
210 if (hc == NULL) 210 if (hc == NULL)
211 goto hkdf_error; 211 goto hkdf_error;
212 memcpy (result, hc, k); 212 memcpy (result, hc, k);
213 result += k; 213 result += k;
214 } 214 }
215 215
216 /* K(i+1) */ 216 /* K(i+1) */
217 for (i = 1; i < t; i++) 217 for (i = 1; i < t; i++)
218 { 218 {
219 memcpy (plain, result - k, k); 219 memcpy (plain, result - k, k);
220 memset (plain + k + ctx_len, i + 1, 1); 220 memset (plain + k + ctx_len, i + 1, 1);
221 gcry_md_reset (prf); 221 gcry_md_reset (prf);
222#if DEBUG_HKDF 222#if DEBUG_HKDF
223 dump ("K(i+1)", plain, plain_len); 223 dump ("K(i+1)", plain, plain_len);
224#endif 224#endif
225 hc = doHMAC (prf, prk, xtr_len, plain, plain_len); 225 hc = doHMAC (prf, prk, xtr_len, plain, plain_len);
226 if (hc == NULL) 226 if (hc == NULL)
227 goto hkdf_error; 227 goto hkdf_error;
228 memcpy (result, hc, k); 228 memcpy (result, hc, k);
229 result += k; 229 result += k;
230 } 230 }
231 231
232 /* K(t):d */ 232 /* K(t):d */
233 if (d > 0) 233 if (d > 0)
234 {
235 if (t > 0)
234 { 236 {
235 if (t > 0) 237 memcpy (plain, result - k, k);
236 { 238 i++;
237 memcpy (plain, result - k, k); 239 }
238 i++; 240 memset (plain + k + ctx_len, i, 1);
239 } 241 gcry_md_reset (prf);
240 memset (plain + k + ctx_len, i, 1);
241 gcry_md_reset (prf);
242#if DEBUG_HKDF 242#if DEBUG_HKDF
243 dump ("K(t):d", plain, plain_len); 243 dump ("K(t):d", plain, plain_len);
244#endif 244#endif
245 if (t > 0) 245 if (t > 0)
246 hc = doHMAC (prf, prk, xtr_len, plain, plain_len); 246 hc = doHMAC (prf, prk, xtr_len, plain, plain_len);
247 else 247 else
248 hc = doHMAC (prf, prk, xtr_len, plain + k, plain_len - k); 248 hc = doHMAC (prf, prk, xtr_len, plain + k, plain_len - k);
249 if (hc == NULL) 249 if (hc == NULL)
250 goto hkdf_error; 250 goto hkdf_error;
251 memcpy (result, hc, d); 251 memcpy (result, hc, d);
252 } 252 }
253#if DEBUG_HKDF 253#if DEBUG_HKDF
254 dump ("result", result - k, out_len); 254 dump ("result", result - k, out_len);
255#endif 255#endif
@@ -281,16 +281,16 @@ hkdf_ok:
281 */ 281 */
282int 282int
283GNUNET_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,
284 const void *xts, size_t xts_len, const void *skm, 284 const void *xts, size_t xts_len, const void *skm,
285 size_t skm_len, ...) 285 size_t skm_len, ...)
286{ 286{
287 va_list argp; 287 va_list argp;
288 int ret; 288 int ret;
289 289
290 va_start (argp, skm_len); 290 va_start (argp, skm_len);
291 ret = 291 ret =
292 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,
293 skm, skm_len, argp); 293 skm, skm_len, argp);
294 va_end (argp); 294 va_end (argp);
295 295
296 return ret; 296 return ret;