diff options
author | Christian Grothoff <christian@grothoff.org> | 2019-10-05 15:09:28 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2019-10-05 15:09:28 +0200 |
commit | c4e9ba925ffd758aaa3feee2ccfc0b76f26fe207 (patch) | |
tree | cac3ce030d77b4cbe7c7dc62ed58cfe6d24f73e1 /src/credential/gnunet-credential.c | |
parent | fbb71d527c7d6babf269a8fefce1db291b9f7068 (diff) | |
download | gnunet-c4e9ba925ffd758aaa3feee2ccfc0b76f26fe207.tar.gz gnunet-c4e9ba925ffd758aaa3feee2ccfc0b76f26fe207.zip |
global reindent, now with uncrustify hook enabled
Diffstat (limited to 'src/credential/gnunet-credential.c')
-rw-r--r-- | src/credential/gnunet-credential.c | 673 |
1 files changed, 340 insertions, 333 deletions
diff --git a/src/credential/gnunet-credential.c b/src/credential/gnunet-credential.c index 415525e9a..0558ca5fc 100644 --- a/src/credential/gnunet-credential.c +++ b/src/credential/gnunet-credential.c | |||
@@ -126,23 +126,23 @@ static int collect; | |||
126 | * @param cls unused | 126 | * @param cls unused |
127 | */ | 127 | */ |
128 | static void | 128 | static void |
129 | do_shutdown(void *cls) | 129 | do_shutdown (void *cls) |
130 | { | 130 | { |
131 | if (NULL != verify_request) | 131 | if (NULL != verify_request) |
132 | { | 132 | { |
133 | GNUNET_CREDENTIAL_request_cancel(verify_request); | 133 | GNUNET_CREDENTIAL_request_cancel (verify_request); |
134 | verify_request = NULL; | 134 | verify_request = NULL; |
135 | } | 135 | } |
136 | if (NULL != credential) | 136 | if (NULL != credential) |
137 | { | 137 | { |
138 | GNUNET_CREDENTIAL_disconnect(credential); | 138 | GNUNET_CREDENTIAL_disconnect (credential); |
139 | credential = NULL; | 139 | credential = NULL; |
140 | } | 140 | } |
141 | if (NULL != tt) | 141 | if (NULL != tt) |
142 | { | 142 | { |
143 | GNUNET_SCHEDULER_cancel(tt); | 143 | GNUNET_SCHEDULER_cancel (tt); |
144 | tt = NULL; | 144 | tt = NULL; |
145 | } | 145 | } |
146 | } | 146 | } |
147 | 147 | ||
148 | 148 | ||
@@ -152,91 +152,91 @@ do_shutdown(void *cls) | |||
152 | * @param cls unused | 152 | * @param cls unused |
153 | */ | 153 | */ |
154 | static void | 154 | static void |
155 | do_timeout(void *cls) | 155 | do_timeout (void *cls) |
156 | { | 156 | { |
157 | tt = NULL; | 157 | tt = NULL; |
158 | GNUNET_SCHEDULER_shutdown(); | 158 | GNUNET_SCHEDULER_shutdown (); |
159 | } | 159 | } |
160 | 160 | ||
161 | static void | 161 | static void |
162 | handle_collect_result(void *cls, | 162 | handle_collect_result (void *cls, |
163 | unsigned int d_count, | 163 | unsigned int d_count, |
164 | struct GNUNET_CREDENTIAL_Delegation *dc, | 164 | struct GNUNET_CREDENTIAL_Delegation *dc, |
165 | unsigned int c_count, | 165 | unsigned int c_count, |
166 | struct GNUNET_CREDENTIAL_Credential *cred) | 166 | struct GNUNET_CREDENTIAL_Credential *cred) |
167 | { | 167 | { |
168 | int i; | 168 | int i; |
169 | char* line; | 169 | char*line; |
170 | 170 | ||
171 | verify_request = NULL; | 171 | verify_request = NULL; |
172 | if (NULL != cred) | 172 | if (NULL != cred) |
173 | { | ||
174 | for (i = 0; i < c_count; i++) | ||
173 | { | 175 | { |
174 | for (i = 0; i < c_count; i++) | 176 | line = GNUNET_CREDENTIAL_credential_to_string (&cred[i]); |
175 | { | 177 | printf ("%s\n", |
176 | line = GNUNET_CREDENTIAL_credential_to_string(&cred[i]); | 178 | line); |
177 | printf("%s\n", | 179 | GNUNET_free (line); |
178 | line); | ||
179 | GNUNET_free(line); | ||
180 | } | ||
181 | } | 180 | } |
181 | } | ||
182 | 182 | ||
183 | 183 | ||
184 | GNUNET_SCHEDULER_shutdown(); | 184 | GNUNET_SCHEDULER_shutdown (); |
185 | } | 185 | } |
186 | 186 | ||
187 | 187 | ||
188 | static void | 188 | static void |
189 | handle_verify_result(void *cls, | 189 | handle_verify_result (void *cls, |
190 | unsigned int d_count, | 190 | unsigned int d_count, |
191 | struct GNUNET_CREDENTIAL_Delegation *dc, | 191 | struct GNUNET_CREDENTIAL_Delegation *dc, |
192 | unsigned int c_count, | 192 | unsigned int c_count, |
193 | struct GNUNET_CREDENTIAL_Credential *cred) | 193 | struct GNUNET_CREDENTIAL_Credential *cred) |
194 | { | 194 | { |
195 | int i; | 195 | int i; |
196 | char* iss_key; | 196 | char*iss_key; |
197 | char* sub_key; | 197 | char*sub_key; |
198 | 198 | ||
199 | verify_request = NULL; | 199 | verify_request = NULL; |
200 | if (NULL == cred) | 200 | if (NULL == cred) |
201 | printf("Failed.\n"); | 201 | printf ("Failed.\n"); |
202 | else | 202 | else |
203 | { | ||
204 | printf ("Delegation Chain:\n"); | ||
205 | for (i = 0; i < d_count; i++) | ||
206 | { | ||
207 | iss_key = GNUNET_CRYPTO_ecdsa_public_key_to_string (&dc[i].issuer_key); | ||
208 | sub_key = GNUNET_CRYPTO_ecdsa_public_key_to_string (&dc[i].subject_key); | ||
209 | if (0 != dc[i].subject_attribute_len) | ||
210 | { | ||
211 | printf ("(%d) %s.%s <- %s.%s\n", i, | ||
212 | iss_key, dc[i].issuer_attribute, | ||
213 | sub_key, dc[i].subject_attribute); | ||
214 | } | ||
215 | else | ||
216 | { | ||
217 | printf ("(%d) %s.%s <- %s\n", i, | ||
218 | iss_key, dc[i].issuer_attribute, | ||
219 | sub_key); | ||
220 | } | ||
221 | GNUNET_free (iss_key); | ||
222 | GNUNET_free (sub_key); | ||
223 | } | ||
224 | printf ("\nCredentials:\n"); | ||
225 | for (i = 0; i < c_count; i++) | ||
203 | { | 226 | { |
204 | printf("Delegation Chain:\n"); | 227 | iss_key = GNUNET_CRYPTO_ecdsa_public_key_to_string (&cred[i].issuer_key); |
205 | for (i = 0; i < d_count; i++) | 228 | sub_key = GNUNET_CRYPTO_ecdsa_public_key_to_string (&cred[i].subject_key); |
206 | { | 229 | printf ("%s.%s <- %s\n", |
207 | iss_key = GNUNET_CRYPTO_ecdsa_public_key_to_string(&dc[i].issuer_key); | 230 | iss_key, cred[i].issuer_attribute, |
208 | sub_key = GNUNET_CRYPTO_ecdsa_public_key_to_string(&dc[i].subject_key); | 231 | sub_key); |
209 | if (0 != dc[i].subject_attribute_len) | 232 | GNUNET_free (iss_key); |
210 | { | 233 | GNUNET_free (sub_key); |
211 | printf("(%d) %s.%s <- %s.%s\n", i, | ||
212 | iss_key, dc[i].issuer_attribute, | ||
213 | sub_key, dc[i].subject_attribute); | ||
214 | } | ||
215 | else | ||
216 | { | ||
217 | printf("(%d) %s.%s <- %s\n", i, | ||
218 | iss_key, dc[i].issuer_attribute, | ||
219 | sub_key); | ||
220 | } | ||
221 | GNUNET_free(iss_key); | ||
222 | GNUNET_free(sub_key); | ||
223 | } | ||
224 | printf("\nCredentials:\n"); | ||
225 | for (i = 0; i < c_count; i++) | ||
226 | { | ||
227 | iss_key = GNUNET_CRYPTO_ecdsa_public_key_to_string(&cred[i].issuer_key); | ||
228 | sub_key = GNUNET_CRYPTO_ecdsa_public_key_to_string(&cred[i].subject_key); | ||
229 | printf("%s.%s <- %s\n", | ||
230 | iss_key, cred[i].issuer_attribute, | ||
231 | sub_key); | ||
232 | GNUNET_free(iss_key); | ||
233 | GNUNET_free(sub_key); | ||
234 | } | ||
235 | printf("Successful.\n"); | ||
236 | } | 234 | } |
235 | printf ("Successful.\n"); | ||
236 | } | ||
237 | 237 | ||
238 | 238 | ||
239 | GNUNET_SCHEDULER_shutdown(); | 239 | GNUNET_SCHEDULER_shutdown (); |
240 | } | 240 | } |
241 | 241 | ||
242 | /** | 242 | /** |
@@ -247,8 +247,8 @@ handle_verify_result(void *cls, | |||
247 | * @param ego an ego known to identity service, or NULL | 247 | * @param ego an ego known to identity service, or NULL |
248 | */ | 248 | */ |
249 | static void | 249 | static void |
250 | identity_cb(void *cls, | 250 | identity_cb (void *cls, |
251 | const struct GNUNET_IDENTITY_Ego *ego) | 251 | const struct GNUNET_IDENTITY_Ego *ego) |
252 | { | 252 | { |
253 | const struct GNUNET_CRYPTO_EcdsaPrivateKey *privkey; | 253 | const struct GNUNET_CRYPTO_EcdsaPrivateKey *privkey; |
254 | struct GNUNET_CREDENTIAL_Credential *crd; | 254 | struct GNUNET_CREDENTIAL_Credential *crd; |
@@ -258,77 +258,77 @@ identity_cb(void *cls, | |||
258 | 258 | ||
259 | el = NULL; | 259 | el = NULL; |
260 | if (NULL == ego) | 260 | if (NULL == ego) |
261 | { | ||
262 | if (NULL != ego_name) | ||
261 | { | 263 | { |
262 | if (NULL != ego_name) | 264 | fprintf (stderr, |
263 | { | 265 | _ ("Ego `%s' not known to identity service\n"), |
264 | fprintf(stderr, | 266 | ego_name); |
265 | _("Ego `%s' not known to identity service\n"), | ||
266 | ego_name); | ||
267 | } | ||
268 | GNUNET_SCHEDULER_shutdown(); | ||
269 | return; | ||
270 | } | 267 | } |
268 | GNUNET_SCHEDULER_shutdown (); | ||
269 | return; | ||
270 | } | ||
271 | 271 | ||
272 | if (GNUNET_YES == collect) | 272 | if (GNUNET_YES == collect) |
273 | { | ||
274 | if (GNUNET_OK != | ||
275 | GNUNET_CRYPTO_ecdsa_public_key_from_string (issuer_key, | ||
276 | strlen (issuer_key), | ||
277 | &issuer_pkey)) | ||
273 | { | 278 | { |
274 | if (GNUNET_OK != | 279 | fprintf (stderr, |
275 | GNUNET_CRYPTO_ecdsa_public_key_from_string(issuer_key, | 280 | _ ("Issuer public key `%s' is not well-formed\n"), |
276 | strlen(issuer_key), | 281 | issuer_key); |
277 | &issuer_pkey)) | 282 | GNUNET_SCHEDULER_shutdown (); |
278 | { | ||
279 | fprintf(stderr, | ||
280 | _("Issuer public key `%s' is not well-formed\n"), | ||
281 | issuer_key); | ||
282 | GNUNET_SCHEDULER_shutdown(); | ||
283 | } | ||
284 | privkey = GNUNET_IDENTITY_ego_get_private_key(ego); | ||
285 | |||
286 | collect_request = GNUNET_CREDENTIAL_collect(credential, | ||
287 | &issuer_pkey, | ||
288 | issuer_attr, //TODO argument | ||
289 | privkey, | ||
290 | &handle_collect_result, | ||
291 | NULL); | ||
292 | return; | ||
293 | } | 283 | } |
284 | privkey = GNUNET_IDENTITY_ego_get_private_key (ego); | ||
294 | 285 | ||
295 | //Else issue | 286 | collect_request = GNUNET_CREDENTIAL_collect (credential, |
296 | 287 | &issuer_pkey, | |
297 | if (NULL == expiration) | 288 | issuer_attr, // TODO argument |
298 | { | 289 | privkey, |
299 | fprintf(stderr, | 290 | &handle_collect_result, |
300 | "Please specify a TTL\n"); | 291 | NULL); |
301 | GNUNET_SCHEDULER_shutdown(); | 292 | return; |
302 | return; | 293 | } |
303 | } | ||
304 | else if (GNUNET_OK == GNUNET_STRINGS_fancy_time_to_relative(expiration, | ||
305 | &etime_rel)) | ||
306 | { | ||
307 | etime_abs = GNUNET_TIME_relative_to_absolute(etime_rel); | ||
308 | } | ||
309 | else if (GNUNET_OK != GNUNET_STRINGS_fancy_time_to_absolute(expiration, | ||
310 | &etime_abs)) | ||
311 | { | ||
312 | fprintf(stderr, | ||
313 | "%s is not a valid ttl!\n", | ||
314 | expiration); | ||
315 | GNUNET_SCHEDULER_shutdown(); | ||
316 | return; | ||
317 | } | ||
318 | 294 | ||
295 | // Else issue | ||
319 | 296 | ||
320 | privkey = GNUNET_IDENTITY_ego_get_private_key(ego); | 297 | if (NULL == expiration) |
321 | GNUNET_free_non_null(ego_name); | 298 | { |
299 | fprintf (stderr, | ||
300 | "Please specify a TTL\n"); | ||
301 | GNUNET_SCHEDULER_shutdown (); | ||
302 | return; | ||
303 | } | ||
304 | else if (GNUNET_OK == GNUNET_STRINGS_fancy_time_to_relative (expiration, | ||
305 | &etime_rel)) | ||
306 | { | ||
307 | etime_abs = GNUNET_TIME_relative_to_absolute (etime_rel); | ||
308 | } | ||
309 | else if (GNUNET_OK != GNUNET_STRINGS_fancy_time_to_absolute (expiration, | ||
310 | &etime_abs)) | ||
311 | { | ||
312 | fprintf (stderr, | ||
313 | "%s is not a valid ttl!\n", | ||
314 | expiration); | ||
315 | GNUNET_SCHEDULER_shutdown (); | ||
316 | return; | ||
317 | } | ||
318 | |||
319 | |||
320 | privkey = GNUNET_IDENTITY_ego_get_private_key (ego); | ||
321 | GNUNET_free_non_null (ego_name); | ||
322 | ego_name = NULL; | 322 | ego_name = NULL; |
323 | crd = GNUNET_CREDENTIAL_credential_issue(privkey, | 323 | crd = GNUNET_CREDENTIAL_credential_issue (privkey, |
324 | &subject_pkey, | 324 | &subject_pkey, |
325 | issuer_attr, | 325 | issuer_attr, |
326 | &etime_abs); | 326 | &etime_abs); |
327 | 327 | ||
328 | res = GNUNET_CREDENTIAL_credential_to_string(crd); | 328 | res = GNUNET_CREDENTIAL_credential_to_string (crd); |
329 | GNUNET_free(crd); | 329 | GNUNET_free (crd); |
330 | printf("%s\n", res); | 330 | printf ("%s\n", res); |
331 | GNUNET_SCHEDULER_shutdown(); | 331 | GNUNET_SCHEDULER_shutdown (); |
332 | } | 332 | } |
333 | 333 | ||
334 | 334 | ||
@@ -343,180 +343,181 @@ identity_cb(void *cls, | |||
343 | * @param c configuration | 343 | * @param c configuration |
344 | */ | 344 | */ |
345 | static void | 345 | static void |
346 | run(void *cls, | 346 | run (void *cls, |
347 | char *const *args, | 347 | char *const *args, |
348 | const char *cfgfile, | 348 | const char *cfgfile, |
349 | const struct GNUNET_CONFIGURATION_Handle *c) | 349 | const struct GNUNET_CONFIGURATION_Handle *c) |
350 | { | 350 | { |
351 | cfg = c; | 351 | cfg = c; |
352 | 352 | ||
353 | 353 | ||
354 | tt = GNUNET_SCHEDULER_add_delayed(timeout, | 354 | tt = GNUNET_SCHEDULER_add_delayed (timeout, |
355 | &do_timeout, NULL); | 355 | &do_timeout, NULL); |
356 | GNUNET_SCHEDULER_add_shutdown(&do_shutdown, NULL); | 356 | GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL); |
357 | 357 | ||
358 | if (GNUNET_YES == collect) | 358 | if (GNUNET_YES == collect) |
359 | { | ||
360 | if (NULL == issuer_key) | ||
359 | { | 361 | { |
360 | if (NULL == issuer_key) | 362 | fprintf (stderr, |
361 | { | 363 | _ ("Issuer public key not well-formed\n")); |
362 | fprintf(stderr, | 364 | GNUNET_SCHEDULER_shutdown (); |
363 | _("Issuer public key not well-formed\n")); | ||
364 | GNUNET_SCHEDULER_shutdown(); | ||
365 | return; | ||
366 | } | ||
367 | |||
368 | credential = GNUNET_CREDENTIAL_connect(cfg); | ||
369 | |||
370 | if (NULL == credential) | ||
371 | { | ||
372 | fprintf(stderr, | ||
373 | _("Failed to connect to CREDENTIAL\n")); | ||
374 | GNUNET_SCHEDULER_shutdown(); | ||
375 | return; | ||
376 | } | ||
377 | if (NULL == issuer_attr) | ||
378 | { | ||
379 | fprintf(stderr, | ||
380 | _("You must provide issuer the attribute\n")); | ||
381 | GNUNET_SCHEDULER_shutdown(); | ||
382 | return; | ||
383 | } | ||
384 | |||
385 | if (NULL == ego_name) | ||
386 | { | ||
387 | fprintf(stderr, | ||
388 | _("ego required\n")); | ||
389 | GNUNET_SCHEDULER_shutdown(); | ||
390 | return; | ||
391 | } | ||
392 | el = GNUNET_IDENTITY_ego_lookup(cfg, | ||
393 | ego_name, | ||
394 | &identity_cb, | ||
395 | (void *)cfg); | ||
396 | return; | 365 | return; |
397 | } | 366 | } |
398 | 367 | ||
399 | if (NULL == subject_key) | 368 | credential = GNUNET_CREDENTIAL_connect (cfg); |
369 | |||
370 | if (NULL == credential) | ||
400 | { | 371 | { |
401 | fprintf(stderr, | 372 | fprintf (stderr, |
402 | _("Subject public key needed\n")); | 373 | _ ("Failed to connect to CREDENTIAL\n")); |
403 | GNUNET_SCHEDULER_shutdown(); | 374 | GNUNET_SCHEDULER_shutdown (); |
404 | return; | 375 | return; |
405 | } | 376 | } |
406 | if (GNUNET_OK != | 377 | if (NULL == issuer_attr) |
407 | GNUNET_CRYPTO_ecdsa_public_key_from_string(subject_key, | 378 | { |
408 | strlen(subject_key), | 379 | fprintf (stderr, |
409 | &subject_pkey)) | 380 | _ ("You must provide issuer the attribute\n")); |
381 | GNUNET_SCHEDULER_shutdown (); | ||
382 | return; | ||
383 | } | ||
384 | |||
385 | if (NULL == ego_name) | ||
410 | { | 386 | { |
411 | fprintf(stderr, | 387 | fprintf (stderr, |
412 | _("Subject public key `%s' is not well-formed\n"), | 388 | _ ("ego required\n")); |
413 | subject_key); | 389 | GNUNET_SCHEDULER_shutdown (); |
414 | GNUNET_SCHEDULER_shutdown(); | ||
415 | return; | 390 | return; |
416 | } | 391 | } |
392 | el = GNUNET_IDENTITY_ego_lookup (cfg, | ||
393 | ego_name, | ||
394 | &identity_cb, | ||
395 | (void *) cfg); | ||
396 | return; | ||
397 | } | ||
398 | |||
399 | if (NULL == subject_key) | ||
400 | { | ||
401 | fprintf (stderr, | ||
402 | _ ("Subject public key needed\n")); | ||
403 | GNUNET_SCHEDULER_shutdown (); | ||
404 | return; | ||
405 | } | ||
406 | if (GNUNET_OK != | ||
407 | GNUNET_CRYPTO_ecdsa_public_key_from_string (subject_key, | ||
408 | strlen (subject_key), | ||
409 | &subject_pkey)) | ||
410 | { | ||
411 | fprintf (stderr, | ||
412 | _ ("Subject public key `%s' is not well-formed\n"), | ||
413 | subject_key); | ||
414 | GNUNET_SCHEDULER_shutdown (); | ||
415 | return; | ||
416 | } | ||
417 | if (GNUNET_YES == verify) | 417 | if (GNUNET_YES == verify) |
418 | { | ||
419 | if (NULL == issuer_key) | ||
418 | { | 420 | { |
419 | if (NULL == issuer_key) | 421 | fprintf (stderr, |
420 | { | 422 | _ ("Issuer public key not well-formed\n")); |
421 | fprintf(stderr, | 423 | GNUNET_SCHEDULER_shutdown (); |
422 | _("Issuer public key not well-formed\n")); | 424 | return; |
423 | GNUNET_SCHEDULER_shutdown(); | ||
424 | return; | ||
425 | } | ||
426 | if (GNUNET_OK != | ||
427 | GNUNET_CRYPTO_ecdsa_public_key_from_string(issuer_key, | ||
428 | strlen(issuer_key), | ||
429 | &issuer_pkey)) | ||
430 | { | ||
431 | fprintf(stderr, | ||
432 | _("Issuer public key `%s' is not well-formed\n"), | ||
433 | issuer_key); | ||
434 | GNUNET_SCHEDULER_shutdown(); | ||
435 | return; | ||
436 | } | ||
437 | credential = GNUNET_CREDENTIAL_connect(cfg); | ||
438 | |||
439 | if (NULL == credential) | ||
440 | { | ||
441 | fprintf(stderr, | ||
442 | _("Failed to connect to CREDENTIAL\n")); | ||
443 | GNUNET_SCHEDULER_shutdown(); | ||
444 | return; | ||
445 | } | ||
446 | if (NULL == issuer_attr || NULL == subject_credential) | ||
447 | { | ||
448 | fprintf(stderr, | ||
449 | _("You must provide issuer and subject attributes\n")); | ||
450 | GNUNET_SCHEDULER_shutdown(); | ||
451 | return; | ||
452 | } | ||
453 | |||
454 | //Subject credentials are comma separated | ||
455 | char *tmp = GNUNET_strdup(subject_credential); | ||
456 | char *tok = strtok(tmp, ","); | ||
457 | if (NULL == tok) | ||
458 | { | ||
459 | fprintf(stderr, | ||
460 | "Invalid subject credentials\n"); | ||
461 | GNUNET_free(tmp); | ||
462 | GNUNET_SCHEDULER_shutdown(); | ||
463 | return; | ||
464 | } | ||
465 | int count = 1; | ||
466 | int i; | ||
467 | while (NULL != (tok = strtok(NULL, ","))) | ||
468 | count++; | ||
469 | struct GNUNET_CREDENTIAL_Credential credentials[count]; | ||
470 | struct GNUNET_CREDENTIAL_Credential *cred; | ||
471 | GNUNET_free(tmp); | ||
472 | tmp = GNUNET_strdup(subject_credential); | ||
473 | tok = strtok(tmp, ","); | ||
474 | for (i = 0; i < count; i++) | ||
475 | { | ||
476 | cred = GNUNET_CREDENTIAL_credential_from_string(tok); | ||
477 | GNUNET_memcpy(&credentials[i], | ||
478 | cred, | ||
479 | sizeof(struct GNUNET_CREDENTIAL_Credential)); | ||
480 | credentials[i].issuer_attribute = GNUNET_strdup(cred->issuer_attribute); | ||
481 | tok = strtok(NULL, ","); | ||
482 | GNUNET_free(cred); | ||
483 | } | ||
484 | |||
485 | verify_request = GNUNET_CREDENTIAL_verify(credential, | ||
486 | &issuer_pkey, | ||
487 | issuer_attr, //TODO argument | ||
488 | &subject_pkey, | ||
489 | count, | ||
490 | credentials, | ||
491 | &handle_verify_result, | ||
492 | NULL); | ||
493 | for (i = 0; i < count; i++) | ||
494 | { | ||
495 | GNUNET_free((char*)credentials[i].issuer_attribute); | ||
496 | } | ||
497 | GNUNET_free(tmp); | ||
498 | } | 425 | } |
499 | else if (GNUNET_YES == create_cred) | 426 | if (GNUNET_OK != |
427 | GNUNET_CRYPTO_ecdsa_public_key_from_string (issuer_key, | ||
428 | strlen (issuer_key), | ||
429 | &issuer_pkey)) | ||
500 | { | 430 | { |
501 | if (NULL == ego_name) | 431 | fprintf (stderr, |
502 | { | 432 | _ ("Issuer public key `%s' is not well-formed\n"), |
503 | fprintf(stderr, | 433 | issuer_key); |
504 | _("Issuer ego required\n")); | 434 | GNUNET_SCHEDULER_shutdown (); |
505 | GNUNET_SCHEDULER_shutdown(); | ||
506 | return; | ||
507 | } | ||
508 | el = GNUNET_IDENTITY_ego_lookup(cfg, | ||
509 | ego_name, | ||
510 | &identity_cb, | ||
511 | (void *)cfg); | ||
512 | return; | 435 | return; |
513 | } | 436 | } |
514 | else | 437 | credential = GNUNET_CREDENTIAL_connect (cfg); |
438 | |||
439 | if (NULL == credential) | ||
440 | { | ||
441 | fprintf (stderr, | ||
442 | _ ("Failed to connect to CREDENTIAL\n")); | ||
443 | GNUNET_SCHEDULER_shutdown (); | ||
444 | return; | ||
445 | } | ||
446 | if ((NULL == issuer_attr) ||(NULL == subject_credential) ) | ||
515 | { | 447 | { |
516 | fprintf(stderr, | 448 | fprintf (stderr, |
517 | _("Please specify name to lookup, subject key and issuer key!\n")); | 449 | _ ("You must provide issuer and subject attributes\n")); |
518 | GNUNET_SCHEDULER_shutdown(); | 450 | GNUNET_SCHEDULER_shutdown (); |
451 | return; | ||
452 | } | ||
453 | |||
454 | // Subject credentials are comma separated | ||
455 | char *tmp = GNUNET_strdup (subject_credential); | ||
456 | char *tok = strtok (tmp, ","); | ||
457 | if (NULL == tok) | ||
458 | { | ||
459 | fprintf (stderr, | ||
460 | "Invalid subject credentials\n"); | ||
461 | GNUNET_free (tmp); | ||
462 | GNUNET_SCHEDULER_shutdown (); | ||
463 | return; | ||
464 | } | ||
465 | int count = 1; | ||
466 | int i; | ||
467 | while (NULL != (tok = strtok (NULL, ","))) | ||
468 | count++; | ||
469 | struct GNUNET_CREDENTIAL_Credential credentials[count]; | ||
470 | struct GNUNET_CREDENTIAL_Credential *cred; | ||
471 | GNUNET_free (tmp); | ||
472 | tmp = GNUNET_strdup (subject_credential); | ||
473 | tok = strtok (tmp, ","); | ||
474 | for (i = 0; i < count; i++) | ||
475 | { | ||
476 | cred = GNUNET_CREDENTIAL_credential_from_string (tok); | ||
477 | GNUNET_memcpy (&credentials[i], | ||
478 | cred, | ||
479 | sizeof(struct GNUNET_CREDENTIAL_Credential)); | ||
480 | credentials[i].issuer_attribute = GNUNET_strdup (cred->issuer_attribute); | ||
481 | tok = strtok (NULL, ","); | ||
482 | GNUNET_free (cred); | ||
519 | } | 483 | } |
484 | |||
485 | verify_request = GNUNET_CREDENTIAL_verify (credential, | ||
486 | &issuer_pkey, | ||
487 | issuer_attr, // TODO argument | ||
488 | &subject_pkey, | ||
489 | count, | ||
490 | credentials, | ||
491 | &handle_verify_result, | ||
492 | NULL); | ||
493 | for (i = 0; i < count; i++) | ||
494 | { | ||
495 | GNUNET_free ((char*) credentials[i].issuer_attribute); | ||
496 | } | ||
497 | GNUNET_free (tmp); | ||
498 | } | ||
499 | else if (GNUNET_YES == create_cred) | ||
500 | { | ||
501 | if (NULL == ego_name) | ||
502 | { | ||
503 | fprintf (stderr, | ||
504 | _ ("Issuer ego required\n")); | ||
505 | GNUNET_SCHEDULER_shutdown (); | ||
506 | return; | ||
507 | } | ||
508 | el = GNUNET_IDENTITY_ego_lookup (cfg, | ||
509 | ego_name, | ||
510 | &identity_cb, | ||
511 | (void *) cfg); | ||
512 | return; | ||
513 | } | ||
514 | else | ||
515 | { | ||
516 | fprintf (stderr, | ||
517 | _ ( | ||
518 | "Please specify name to lookup, subject key and issuer key!\n")); | ||
519 | GNUNET_SCHEDULER_shutdown (); | ||
520 | } | ||
520 | return; | 521 | return; |
521 | } | 522 | } |
522 | 523 | ||
@@ -529,67 +530,73 @@ run(void *cls, | |||
529 | * @return 0 ok, 1 on error | 530 | * @return 0 ok, 1 on error |
530 | */ | 531 | */ |
531 | int | 532 | int |
532 | main(int argc, char *const *argv) | 533 | main (int argc, char *const *argv) |
533 | { | 534 | { |
534 | struct GNUNET_GETOPT_CommandLineOption options[] = { | 535 | struct GNUNET_GETOPT_CommandLineOption options[] = { |
535 | GNUNET_GETOPT_option_flag('I', | 536 | GNUNET_GETOPT_option_flag ('I', |
536 | "issue", | 537 | "issue", |
537 | gettext_noop("create credential"), | 538 | gettext_noop ("create credential"), |
538 | &create_cred), | 539 | &create_cred), |
539 | GNUNET_GETOPT_option_flag('V', | 540 | GNUNET_GETOPT_option_flag ('V', |
540 | "verify", | 541 | "verify", |
541 | gettext_noop("verify credential against attribute"), | 542 | gettext_noop ( |
542 | &verify), | 543 | "verify credential against attribute"), |
543 | GNUNET_GETOPT_option_string('s', | 544 | &verify), |
544 | "subject", | 545 | GNUNET_GETOPT_option_string ('s', |
545 | "PKEY", | 546 | "subject", |
546 | gettext_noop("The public key of the subject to lookup the credential for"), | 547 | "PKEY", |
547 | &subject_key), | 548 | gettext_noop ( |
548 | GNUNET_GETOPT_option_string('b', | 549 | "The public key of the subject to lookup the credential for"), |
549 | "credential", | 550 | &subject_key), |
550 | "CRED", | 551 | GNUNET_GETOPT_option_string ('b', |
551 | gettext_noop("The name of the credential presented by the subject"), | 552 | "credential", |
552 | &subject_credential), | 553 | "CRED", |
553 | GNUNET_GETOPT_option_string('i', | 554 | gettext_noop ( |
554 | "issuer", | 555 | "The name of the credential presented by the subject"), |
555 | "PKEY", | 556 | &subject_credential), |
556 | gettext_noop("The public key of the authority to verify the credential against"), | 557 | GNUNET_GETOPT_option_string ('i', |
557 | &issuer_key), | 558 | "issuer", |
558 | GNUNET_GETOPT_option_string('e', | 559 | "PKEY", |
559 | "ego", | 560 | gettext_noop ( |
560 | "EGO", | 561 | "The public key of the authority to verify the credential against"), |
561 | gettext_noop("The ego to use"), | 562 | &issuer_key), |
562 | &ego_name), | 563 | GNUNET_GETOPT_option_string ('e', |
563 | GNUNET_GETOPT_option_string('a', | 564 | "ego", |
564 | "attribute", | 565 | "EGO", |
565 | "ATTR", | 566 | gettext_noop ("The ego to use"), |
566 | gettext_noop("The issuer attribute to verify against or to issue"), | 567 | &ego_name), |
567 | &issuer_attr), | 568 | GNUNET_GETOPT_option_string ('a', |
568 | GNUNET_GETOPT_option_string('T', | 569 | "attribute", |
569 | "ttl", | 570 | "ATTR", |
570 | "EXP", | 571 | gettext_noop ( |
571 | gettext_noop("The time to live for the credential"), | 572 | "The issuer attribute to verify against or to issue"), |
572 | &expiration), | 573 | &issuer_attr), |
573 | GNUNET_GETOPT_option_flag('g', | 574 | GNUNET_GETOPT_option_string ('T', |
574 | "collect", | 575 | "ttl", |
575 | gettext_noop("collect credentials"), | 576 | "EXP", |
576 | &collect), | 577 | gettext_noop ( |
578 | "The time to live for the credential"), | ||
579 | &expiration), | ||
580 | GNUNET_GETOPT_option_flag ('g', | ||
581 | "collect", | ||
582 | gettext_noop ("collect credentials"), | ||
583 | &collect), | ||
577 | GNUNET_GETOPT_OPTION_END | 584 | GNUNET_GETOPT_OPTION_END |
578 | }; | 585 | }; |
579 | int ret; | 586 | int ret; |
580 | 587 | ||
581 | timeout = GNUNET_TIME_UNIT_FOREVER_REL; | 588 | timeout = GNUNET_TIME_UNIT_FOREVER_REL; |
582 | if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args(argc, argv, &argc, &argv)) | 589 | if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv)) |
583 | return 2; | 590 | return 2; |
584 | 591 | ||
585 | GNUNET_log_setup("gnunet-credential", "WARNING", NULL); | 592 | GNUNET_log_setup ("gnunet-credential", "WARNING", NULL); |
586 | ret = | 593 | ret = |
587 | (GNUNET_OK == | 594 | (GNUNET_OK == |
588 | GNUNET_PROGRAM_run(argc, argv, "gnunet-credential", | 595 | GNUNET_PROGRAM_run (argc, argv, "gnunet-credential", |
589 | _("GNUnet credential resolver tool"), | 596 | _ ("GNUnet credential resolver tool"), |
590 | options, | 597 | options, |
591 | &run, NULL)) ? 0 : 1; | 598 | &run, NULL)) ? 0 : 1; |
592 | GNUNET_free((void*)argv); | 599 | GNUNET_free ((void*) argv); |
593 | return ret; | 600 | return ret; |
594 | } | 601 | } |
595 | 602 | ||