diff options
author | Christian Grothoff <christian@grothoff.org> | 2011-10-11 09:43:04 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2011-10-11 09:43:04 +0000 |
commit | d9d94d0e53d26af75ec8241383d166544ebd79f3 (patch) | |
tree | 9080b73624389403a198257fe0547bb4634e64d2 /src/util/crypto_hkdf.c | |
parent | 2d792ee2e9cc0c993b8907e2c8edb0c2b8465343 (diff) | |
download | gnunet-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.c | 120 |
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 | */ |
73 | static const void * | 75 | static const void * |
74 | doHMAC (gcry_md_hd_t mac, const void *key, size_t key_len, const void *buf, | 76 | doHMAC (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 | */ |
93 | static int | 95 | static int |
94 | getPRK (gcry_md_hd_t mac, const void *xts, size_t xts_len, const void *skm, | 96 | getPRK (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 | */ |
137 | int | 139 | int |
138 | GNUNET_CRYPTO_hkdf_v (void *result, size_t out_len, int xtr_algo, int prf_algo, | 140 | GNUNET_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 | */ |
280 | int | 282 | int |
281 | GNUNET_CRYPTO_hkdf (void *result, size_t out_len, int xtr_algo, int prf_algo, | 283 | GNUNET_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; |