aboutsummaryrefslogtreecommitdiff
path: root/src/credential/gnunet-credential.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2019-10-05 15:09:28 +0200
committerChristian Grothoff <christian@grothoff.org>2019-10-05 15:09:28 +0200
commitc4e9ba925ffd758aaa3feee2ccfc0b76f26fe207 (patch)
treecac3ce030d77b4cbe7c7dc62ed58cfe6d24f73e1 /src/credential/gnunet-credential.c
parentfbb71d527c7d6babf269a8fefce1db291b9f7068 (diff)
downloadgnunet-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.c673
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 */
128static void 128static void
129do_shutdown(void *cls) 129do_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 */
154static void 154static void
155do_timeout(void *cls) 155do_timeout (void *cls)
156{ 156{
157 tt = NULL; 157 tt = NULL;
158 GNUNET_SCHEDULER_shutdown(); 158 GNUNET_SCHEDULER_shutdown ();
159} 159}
160 160
161static void 161static void
162handle_collect_result(void *cls, 162handle_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
188static void 188static void
189handle_verify_result(void *cls, 189handle_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 */
249static void 249static void
250identity_cb(void *cls, 250identity_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 */
345static void 345static void
346run(void *cls, 346run (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 */
531int 532int
532main(int argc, char *const *argv) 533main (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