aboutsummaryrefslogtreecommitdiff
path: root/src/identity-token/identity-token.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/identity-token/identity-token.c')
-rw-r--r--src/identity-token/identity-token.c269
1 files changed, 138 insertions, 131 deletions
diff --git a/src/identity-token/identity-token.c b/src/identity-token/identity-token.c
index dc0154c21..a9f210b14 100644
--- a/src/identity-token/identity-token.c
+++ b/src/identity-token/identity-token.c
@@ -26,7 +26,7 @@
26#include "platform.h" 26#include "platform.h"
27#include "gnunet_util_lib.h" 27#include "gnunet_util_lib.h"
28#include "gnunet_signatures.h" 28#include "gnunet_signatures.h"
29#include "identity-token.h" 29#include "gnunet_identity_provider_lib.h"
30#include <jansson.h> 30#include <jansson.h>
31 31
32 32
@@ -189,13 +189,22 @@ encrypt_str_ecdhe (const char *plaintext,
189 * @param id the JSON API resource id 189 * @param id the JSON API resource id
190 * @return a new JSON API resource or NULL on error. 190 * @return a new JSON API resource or NULL on error.
191 */ 191 */
192struct IdentityToken* 192struct GNUNET_IDENTITY_PROVIDER_Token*
193identity_token_create (const char* issuer, 193GNUNET_IDENTITY_PROVIDER_token_create (const struct GNUNET_CRYPTO_EcdsaPublicKey* iss,
194 const char* audience) 194 const struct GNUNET_CRYPTO_EcdsaPublicKey* aud)
195{ 195{
196 struct IdentityToken *token; 196 struct GNUNET_IDENTITY_PROVIDER_Token *token;
197 char* audience;
198 char* issuer;
197 199
198 token = GNUNET_malloc (sizeof (struct IdentityToken)); 200 issuer = GNUNET_STRINGS_data_to_string_alloc (iss,
201 sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey));
202 audience = GNUNET_STRINGS_data_to_string_alloc (aud,
203 sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey));
204
205
206
207 token = GNUNET_malloc (sizeof (struct GNUNET_IDENTITY_PROVIDER_Token));
199 208
200 token->header = json_object(); 209 token->header = json_object();
201 token->payload = json_object(); 210 token->payload = json_object();
@@ -206,16 +215,14 @@ identity_token_create (const char* issuer,
206 json_object_set_new (token->payload, "iss", json_string (issuer)); 215 json_object_set_new (token->payload, "iss", json_string (issuer));
207 json_object_set_new (token->payload, "aud", json_string (audience)); 216 json_object_set_new (token->payload, "aud", json_string (audience));
208 217
209 GNUNET_STRINGS_string_to_data (audience, 218 token->aud_key = *aud;
210 strlen (audience), 219 GNUNET_free (issuer);
211 &token->aud_key, 220 GNUNET_free (audience);
212 sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey));
213
214 return token; 221 return token;
215} 222}
216 223
217void 224void
218identity_token_destroy (struct IdentityToken *token) 225GNUNET_IDENTITY_PROVIDER_token_destroy (struct GNUNET_IDENTITY_PROVIDER_Token *token)
219{ 226{
220 json_decref (token->header); 227 json_decref (token->header);
221 json_decref (token->payload); 228 json_decref (token->payload);
@@ -223,9 +230,9 @@ identity_token_destroy (struct IdentityToken *token)
223} 230}
224 231
225void 232void
226identity_token_add_attr (const struct IdentityToken *token, 233GNUNET_IDENTITY_PROVIDER_token_add_attr (const struct GNUNET_IDENTITY_PROVIDER_Token *token,
227 const char* key, 234 const char* key,
228 const char* value) 235 const char* value)
229{ 236{
230 GNUNET_assert (NULL != token); 237 GNUNET_assert (NULL != token);
231 GNUNET_assert (NULL != token->payload); 238 GNUNET_assert (NULL != token->payload);
@@ -234,9 +241,9 @@ identity_token_add_attr (const struct IdentityToken *token,
234} 241}
235 242
236void 243void
237identity_token_add_json (const struct IdentityToken *token, 244GNUNET_IDENTITY_PROVIDER_token_add_json (const struct GNUNET_IDENTITY_PROVIDER_Token *token,
238 const char* key, 245 const char* key,
239 json_t* value) 246 json_t* value)
240{ 247{
241 GNUNET_assert (NULL != token); 248 GNUNET_assert (NULL != token);
242 GNUNET_assert (NULL != token->payload); 249 GNUNET_assert (NULL != token->payload);
@@ -246,10 +253,10 @@ identity_token_add_json (const struct IdentityToken *token,
246 253
247 254
248int 255int
249identity_token_parse2 (const char* raw_data, 256GNUNET_IDENTITY_PROVIDER_token_parse2 (const char* raw_data,
250 const struct GNUNET_CRYPTO_EcdhePrivateKey *priv_key, 257 const struct GNUNET_CRYPTO_EcdhePrivateKey *priv_key,
251 const struct GNUNET_CRYPTO_EcdsaPublicKey *aud_key, 258 const struct GNUNET_CRYPTO_EcdsaPublicKey *aud_key,
252 struct IdentityToken **result) 259 struct GNUNET_IDENTITY_PROVIDER_Token **result)
253{ 260{
254 char *enc_token_str; 261 char *enc_token_str;
255 char *tmp_buf; 262 char *tmp_buf;
@@ -292,7 +299,7 @@ identity_token_parse2 (const char* raw_data,
292 //TODO signature 299 //TODO signature
293 300
294 301
295 *result = GNUNET_malloc (sizeof (struct IdentityToken)); 302 *result = GNUNET_malloc (sizeof (struct GNUNET_IDENTITY_PROVIDER_Token));
296 (*result)->aud_key = *aud_key; 303 (*result)->aud_key = *aud_key;
297 (*result)->header = json_loads (header, JSON_DECODE_ANY, &err_json); 304 (*result)->header = json_loads (header, JSON_DECODE_ANY, &err_json);
298 (*result)->payload = json_loads (payload, JSON_DECODE_ANY, &err_json); 305 (*result)->payload = json_loads (payload, JSON_DECODE_ANY, &err_json);
@@ -305,9 +312,9 @@ identity_token_parse2 (const char* raw_data,
305} 312}
306 313
307int 314int
308identity_token_parse (const char* raw_data, 315GNUNET_IDENTITY_PROVIDER_token_parse (const char* raw_data,
309 const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key, 316 const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key,
310 struct IdentityToken **result) 317 struct GNUNET_IDENTITY_PROVIDER_Token **result)
311{ 318{
312 char *ecdh_pubkey_str; 319 char *ecdh_pubkey_str;
313 char *enc_token_str; 320 char *enc_token_str;
@@ -356,7 +363,7 @@ identity_token_parse (const char* raw_data,
356 //TODO signature and aud key 363 //TODO signature and aud key
357 364
358 365
359 *result = GNUNET_malloc (sizeof (struct IdentityToken)); 366 *result = GNUNET_malloc (sizeof (struct GNUNET_IDENTITY_PROVIDER_Token));
360 (*result)->header = json_loads (header, JSON_DECODE_ANY, &err_json); 367 (*result)->header = json_loads (header, JSON_DECODE_ANY, &err_json);
361 (*result)->payload = json_loads (payload, JSON_DECODE_ANY, &err_json); 368 (*result)->payload = json_loads (payload, JSON_DECODE_ANY, &err_json);
362 GNUNET_free (enc_token); 369 GNUNET_free (enc_token);
@@ -368,9 +375,9 @@ identity_token_parse (const char* raw_data,
368} 375}
369 376
370int 377int
371identity_token_to_string (const struct IdentityToken *token, 378GNUNET_IDENTITY_PROVIDER_token_to_string (const struct GNUNET_IDENTITY_PROVIDER_Token *token,
372 const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key, 379 const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key,
373 char **result) 380 char **result)
374{ 381{
375 char *payload_str; 382 char *payload_str;
376 char *header_str; 383 char *header_str;
@@ -436,10 +443,10 @@ identity_token_to_string (const struct IdentityToken *token,
436} 443}
437 444
438int 445int
439identity_token_serialize (const struct IdentityToken *token, 446GNUNET_IDENTITY_PROVIDER_token_serialize (const struct GNUNET_IDENTITY_PROVIDER_Token *token,
440 const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key, 447 const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key,
441 struct GNUNET_CRYPTO_EcdhePrivateKey **ecdh_privkey, 448 struct GNUNET_CRYPTO_EcdhePrivateKey **ecdh_privkey,
442 char **result) 449 char **result)
443{ 450{
444 char *token_str; 451 char *token_str;
445 char *enc_token; 452 char *enc_token;
@@ -447,9 +454,9 @@ identity_token_serialize (const struct IdentityToken *token,
447 char *enc_token_base64; 454 char *enc_token_base64;
448 struct GNUNET_CRYPTO_EcdhePublicKey ecdh_pubkey; 455 struct GNUNET_CRYPTO_EcdhePublicKey ecdh_pubkey;
449 456
450 GNUNET_assert (GNUNET_OK == identity_token_to_string (token, 457 GNUNET_assert (GNUNET_OK == GNUNET_IDENTITY_PROVIDER_token_to_string (token,
451 priv_key, 458 priv_key,
452 &token_str)); 459 &token_str));
453 460
454 GNUNET_assert (GNUNET_OK == encrypt_str_ecdhe (token_str, 461 GNUNET_assert (GNUNET_OK == encrypt_str_ecdhe (token_str,
455 &token->aud_key, 462 &token->aud_key,
@@ -469,14 +476,14 @@ identity_token_serialize (const struct IdentityToken *token,
469 return GNUNET_OK; 476 return GNUNET_OK;
470} 477}
471 478
472struct IdentityTokenCodePayload* 479struct GNUNET_IDENTITY_PROVIDER_TokenTicketPayload*
473identity_token_code_payload_create (const char* nonce, 480GNUNET_IDENTITY_PROVIDER_ticket_payload_create (const char* nonce,
474 const struct GNUNET_CRYPTO_EcdsaPublicKey* identity_pkey, 481 const struct GNUNET_CRYPTO_EcdsaPublicKey* identity_pkey,
475 const char* lbl_str) 482 const char* lbl_str)
476{ 483{
477 struct IdentityTokenCodePayload* payload; 484 struct GNUNET_IDENTITY_PROVIDER_TokenTicketPayload* payload;
478 485
479 payload = GNUNET_malloc (sizeof (struct IdentityTokenCodePayload)); 486 payload = GNUNET_malloc (sizeof (struct GNUNET_IDENTITY_PROVIDER_TokenTicketPayload));
480 GNUNET_asprintf (&payload->nonce, nonce, strlen (nonce)); 487 GNUNET_asprintf (&payload->nonce, nonce, strlen (nonce));
481 payload->identity_key = *identity_pkey; 488 payload->identity_key = *identity_pkey;
482 GNUNET_asprintf (&payload->label, lbl_str, strlen (lbl_str)); 489 GNUNET_asprintf (&payload->label, lbl_str, strlen (lbl_str));
@@ -484,7 +491,7 @@ identity_token_code_payload_create (const char* nonce,
484} 491}
485 492
486void 493void
487identity_token_code_payload_destroy (struct IdentityTokenCodePayload* payload) 494GNUNET_IDENTITY_PROVIDER_ticket_payload_destroy (struct GNUNET_IDENTITY_PROVIDER_TokenTicketPayload* payload)
488{ 495{
489 GNUNET_free (payload->nonce); 496 GNUNET_free (payload->nonce);
490 GNUNET_free (payload->label); 497 GNUNET_free (payload->label);
@@ -492,8 +499,8 @@ identity_token_code_payload_destroy (struct IdentityTokenCodePayload* payload)
492} 499}
493 500
494void 501void
495identity_token_code_payload_serialize (struct IdentityTokenCodePayload *payload, 502GNUNET_IDENTITY_PROVIDER_ticket_payload_serialize (struct GNUNET_IDENTITY_PROVIDER_TokenTicketPayload *payload,
496 char **result) 503 char **result)
497{ 504{
498 char* identity_key_str; 505 char* identity_key_str;
499 506
@@ -512,60 +519,60 @@ identity_token_code_payload_serialize (struct IdentityTokenCodePayload *payload,
512 * Create the token code 519 * Create the token code
513 * The metadata is encrypted with a share ECDH derived secret using B (aud_key) 520 * The metadata is encrypted with a share ECDH derived secret using B (aud_key)
514 * and e (ecdh_privkey) 521 * and e (ecdh_privkey)
515 * The token_code also contains E (ecdh_pubkey) and a signature over the 522 * The ticket also contains E (ecdh_pubkey) and a signature over the
516 * metadata and E 523 * metadata and E
517 */ 524 */
518struct IdentityTokenCode* 525struct GNUNET_IDENTITY_PROVIDER_TokenTicket*
519identity_token_code_create (const char* nonce_str, 526GNUNET_IDENTITY_PROVIDER_ticket_create (const char* nonce_str,
520 const struct GNUNET_CRYPTO_EcdsaPublicKey* identity_pkey, 527 const struct GNUNET_CRYPTO_EcdsaPublicKey* identity_pkey,
521 const char* lbl_str, 528 const char* lbl_str,
522 const struct GNUNET_CRYPTO_EcdsaPublicKey *aud_key) 529 const struct GNUNET_CRYPTO_EcdsaPublicKey *aud_key)
523{ 530{
524 struct IdentityTokenCode *token_code; 531 struct GNUNET_IDENTITY_PROVIDER_TokenTicket *ticket;
525 struct IdentityTokenCodePayload *code_payload; 532 struct GNUNET_IDENTITY_PROVIDER_TokenTicketPayload *code_payload;
526 533
527 token_code = GNUNET_malloc (sizeof (struct IdentityTokenCode)); 534 ticket = GNUNET_malloc (sizeof (struct GNUNET_IDENTITY_PROVIDER_TokenTicket));
528 code_payload = identity_token_code_payload_create (nonce_str, 535 code_payload = GNUNET_IDENTITY_PROVIDER_ticket_payload_create (nonce_str,
529 identity_pkey, 536 identity_pkey,
530 lbl_str); 537 lbl_str);
531 token_code->aud_key = *aud_key; 538 ticket->aud_key = *aud_key;
532 token_code->payload = code_payload; 539 ticket->payload = code_payload;
533 540
534 541
535 return token_code; 542 return ticket;
536} 543}
537 544
538void 545void
539identity_token_code_destroy (struct IdentityTokenCode *token_code) 546GNUNET_IDENTITY_PROVIDER_ticket_destroy (struct GNUNET_IDENTITY_PROVIDER_TokenTicket *ticket)
540{ 547{
541 identity_token_code_payload_destroy (token_code->payload); 548 GNUNET_IDENTITY_PROVIDER_ticket_payload_destroy (ticket->payload);
542 GNUNET_free (token_code); 549 GNUNET_free (ticket);
543} 550}
544 551
545int 552int
546identity_token_code_serialize (struct IdentityTokenCode *identity_token_code, 553GNUNET_IDENTITY_PROVIDER_ticket_serialize (struct GNUNET_IDENTITY_PROVIDER_TokenTicket *ticket,
547 const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key, 554 const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key,
548 char **result) 555 char **result)
549{ 556{
550 char *code_payload_str; 557 char *code_payload_str;
551 char *enc_token_code_payload; 558 char *enc_ticket_payload;
552 char *token_code_payload_str; 559 char *ticket_payload_str;
553 char *token_code_sig_str; 560 char *ticket_sig_str;
554 char *token_code_str; 561 char *ticket_str;
555 char *dh_key_str; 562 char *dh_key_str;
556 char *write_ptr; 563 char *write_ptr;
557 struct GNUNET_CRYPTO_EcdhePrivateKey *ecdhe_privkey; 564 struct GNUNET_CRYPTO_EcdhePrivateKey *ecdhe_privkey;
558 565
559 struct GNUNET_CRYPTO_EccSignaturePurpose *purpose; 566 struct GNUNET_CRYPTO_EccSignaturePurpose *purpose;
560 567
561 identity_token_code_payload_serialize (identity_token_code->payload, 568 GNUNET_IDENTITY_PROVIDER_ticket_payload_serialize (ticket->payload,
562 &code_payload_str); 569 &code_payload_str);
563 570
564 GNUNET_assert (GNUNET_OK == encrypt_str_ecdhe (code_payload_str, 571 GNUNET_assert (GNUNET_OK == encrypt_str_ecdhe (code_payload_str,
565 &identity_token_code->aud_key, 572 &ticket->aud_key,
566 &enc_token_code_payload, 573 &enc_ticket_payload,
567 &ecdhe_privkey, 574 &ecdhe_privkey,
568 &identity_token_code->ecdh_pubkey)); 575 &ticket->ecdh_pubkey));
569 576
570 GNUNET_free (ecdhe_privkey); 577 GNUNET_free (ecdhe_privkey);
571 578
@@ -577,44 +584,44 @@ identity_token_code_serialize (struct IdentityTokenCode *identity_token_code,
577 htonl (sizeof (struct GNUNET_CRYPTO_EccSignaturePurpose) + 584 htonl (sizeof (struct GNUNET_CRYPTO_EccSignaturePurpose) +
578 sizeof (struct GNUNET_CRYPTO_EcdhePublicKey) + 585 sizeof (struct GNUNET_CRYPTO_EcdhePublicKey) +
579 strlen (code_payload_str)); 586 strlen (code_payload_str));
580 purpose->purpose = htonl(GNUNET_SIGNATURE_PURPOSE_GNUID_TOKEN_CODE); 587 purpose->purpose = htonl(GNUNET_SIGNATURE_PURPOSE_GNUID_TICKET);
581 write_ptr = (char*) &purpose[1]; 588 write_ptr = (char*) &purpose[1];
582 memcpy (write_ptr, 589 memcpy (write_ptr,
583 &identity_token_code->ecdh_pubkey, 590 &ticket->ecdh_pubkey,
584 sizeof (struct GNUNET_CRYPTO_EcdhePublicKey)); 591 sizeof (struct GNUNET_CRYPTO_EcdhePublicKey));
585 write_ptr += sizeof (struct GNUNET_CRYPTO_EcdhePublicKey); 592 write_ptr += sizeof (struct GNUNET_CRYPTO_EcdhePublicKey);
586 memcpy (write_ptr, enc_token_code_payload, strlen (code_payload_str)); 593 memcpy (write_ptr, enc_ticket_payload, strlen (code_payload_str));
587 GNUNET_assert (GNUNET_OK == GNUNET_CRYPTO_ecdsa_sign (priv_key, 594 GNUNET_assert (GNUNET_OK == GNUNET_CRYPTO_ecdsa_sign (priv_key,
588 purpose, 595 purpose,
589 &identity_token_code->signature)); 596 &ticket->signature));
590 GNUNET_STRINGS_base64_encode (enc_token_code_payload, 597 GNUNET_STRINGS_base64_encode (enc_ticket_payload,
591 strlen (code_payload_str), 598 strlen (code_payload_str),
592 &token_code_payload_str); 599 &ticket_payload_str);
593 token_code_sig_str = GNUNET_STRINGS_data_to_string_alloc (&identity_token_code->signature, 600 ticket_sig_str = GNUNET_STRINGS_data_to_string_alloc (&ticket->signature,
594 sizeof (struct GNUNET_CRYPTO_EcdsaSignature)); 601 sizeof (struct GNUNET_CRYPTO_EcdsaSignature));
595 602
596 dh_key_str = GNUNET_STRINGS_data_to_string_alloc (&identity_token_code->ecdh_pubkey, 603 dh_key_str = GNUNET_STRINGS_data_to_string_alloc (&ticket->ecdh_pubkey,
597 sizeof (struct GNUNET_CRYPTO_EcdhePublicKey)); 604 sizeof (struct GNUNET_CRYPTO_EcdhePublicKey));
598 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Using ECDH pubkey %s to encrypt\n", dh_key_str); 605 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Using ECDH pubkey %s to encrypt\n", dh_key_str);
599 GNUNET_asprintf (&token_code_str, "{\"meta\": \"%s\", \"ecdh\": \"%s\", \"signature\": \"%s\"}", 606 GNUNET_asprintf (&ticket_str, "{\"meta\": \"%s\", \"ecdh\": \"%s\", \"signature\": \"%s\"}",
600 token_code_payload_str, dh_key_str, token_code_sig_str); 607 ticket_payload_str, dh_key_str, ticket_sig_str);
601 GNUNET_STRINGS_base64_encode (token_code_str, strlen (token_code_str), result); 608 GNUNET_STRINGS_base64_encode (ticket_str, strlen (ticket_str), result);
602 GNUNET_free (dh_key_str); 609 GNUNET_free (dh_key_str);
603 GNUNET_free (purpose); 610 GNUNET_free (purpose);
604 GNUNET_free (token_code_str); 611 GNUNET_free (ticket_str);
605 GNUNET_free (token_code_sig_str); 612 GNUNET_free (ticket_sig_str);
606 GNUNET_free (code_payload_str); 613 GNUNET_free (code_payload_str);
607 GNUNET_free (enc_token_code_payload); 614 GNUNET_free (enc_ticket_payload);
608 GNUNET_free (token_code_payload_str); 615 GNUNET_free (ticket_payload_str);
609 return GNUNET_OK; 616 return GNUNET_OK;
610} 617}
611 618
612int 619int
613identity_token_code_payload_parse(const char *raw_data, 620GNUNET_IDENTITY_PROVIDER_ticket_payload_parse(const char *raw_data,
614 ssize_t data_len, 621 ssize_t data_len,
615 const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key, 622 const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key,
616 const struct GNUNET_CRYPTO_EcdhePublicKey *ecdhe_pkey, 623 const struct GNUNET_CRYPTO_EcdhePublicKey *ecdhe_pkey,
617 struct IdentityTokenCodePayload **result) 624 struct GNUNET_IDENTITY_PROVIDER_TokenTicketPayload **result)
618{ 625{
619 const char* label_str; 626 const char* label_str;
620 const char* nonce_str; 627 const char* nonce_str;
@@ -690,9 +697,9 @@ identity_token_code_payload_parse(const char *raw_data,
690 nonce_str = json_string_value (nonce_json); 697 nonce_str = json_string_value (nonce_json);
691 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Found nonce: %s\n", nonce_str); 698 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Found nonce: %s\n", nonce_str);
692 699
693 *result = identity_token_code_payload_create (nonce_str, 700 *result = GNUNET_IDENTITY_PROVIDER_ticket_payload_create (nonce_str,
694 (const struct GNUNET_CRYPTO_EcdsaPublicKey*)&id_pkey, 701 (const struct GNUNET_CRYPTO_EcdsaPublicKey*)&id_pkey,
695 label_str); 702 label_str);
696 GNUNET_free (meta_str); 703 GNUNET_free (meta_str);
697 json_decref (root); 704 json_decref (root);
698 return GNUNET_OK; 705 return GNUNET_OK;
@@ -700,9 +707,9 @@ identity_token_code_payload_parse(const char *raw_data,
700} 707}
701 708
702int 709int
703identity_token_code_parse (const char *raw_data, 710GNUNET_IDENTITY_PROVIDER_ticket_parse (const char *raw_data,
704 const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key, 711 const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key,
705 struct IdentityTokenCode **result) 712 struct GNUNET_IDENTITY_PROVIDER_TokenTicket **result)
706{ 713{
707 const char* enc_meta_str; 714 const char* enc_meta_str;
708 const char* ecdh_enc_str; 715 const char* ecdh_enc_str;
@@ -714,17 +721,17 @@ identity_token_code_parse (const char *raw_data,
714 json_t *enc_meta_json; 721 json_t *enc_meta_json;
715 json_error_t err_json; 722 json_error_t err_json;
716 char* enc_meta; 723 char* enc_meta;
717 char* token_code_decoded; 724 char* ticket_decoded;
718 char* write_ptr; 725 char* write_ptr;
719 size_t enc_meta_len; 726 size_t enc_meta_len;
720 struct GNUNET_CRYPTO_EccSignaturePurpose *purpose; 727 struct GNUNET_CRYPTO_EccSignaturePurpose *purpose;
721 struct IdentityTokenCode *token_code; 728 struct GNUNET_IDENTITY_PROVIDER_TokenTicket *ticket;
722 struct IdentityTokenCodePayload *token_code_payload; 729 struct GNUNET_IDENTITY_PROVIDER_TokenTicketPayload *ticket_payload;
723 730
724 token_code_decoded = NULL; 731 ticket_decoded = NULL;
725 GNUNET_STRINGS_base64_decode (raw_data, strlen (raw_data), &token_code_decoded); 732 GNUNET_STRINGS_base64_decode (raw_data, strlen (raw_data), &ticket_decoded);
726 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Token Code: %s\n", token_code_decoded); 733 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Token Code: %s\n", ticket_decoded);
727 root = json_loads (token_code_decoded, JSON_DECODE_ANY, &err_json); 734 root = json_loads (ticket_decoded, JSON_DECODE_ANY, &err_json);
728 if (!root) 735 if (!root)
729 { 736 {
730 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 737 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -740,27 +747,27 @@ identity_token_code_parse (const char *raw_data,
740 ecdh_enc_str = json_string_value (ecdh_json); 747 ecdh_enc_str = json_string_value (ecdh_json);
741 enc_meta_str = json_string_value (enc_meta_json); 748 enc_meta_str = json_string_value (enc_meta_json);
742 749
743 token_code = GNUNET_malloc (sizeof (struct IdentityTokenCode)); 750 ticket = GNUNET_malloc (sizeof (struct GNUNET_IDENTITY_PROVIDER_TokenTicket));
744 751
745 if (GNUNET_OK != GNUNET_STRINGS_string_to_data (ecdh_enc_str, 752 if (GNUNET_OK != GNUNET_STRINGS_string_to_data (ecdh_enc_str,
746 strlen (ecdh_enc_str), 753 strlen (ecdh_enc_str),
747 &token_code->ecdh_pubkey, 754 &ticket->ecdh_pubkey,
748 sizeof (struct GNUNET_CRYPTO_EcdhePublicKey))) 755 sizeof (struct GNUNET_CRYPTO_EcdhePublicKey)))
749 { 756 {
750 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "ECDH PKEY %s invalid in metadata\n", ecdh_enc_str); 757 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "ECDH PKEY %s invalid in metadata\n", ecdh_enc_str);
751 json_decref (root); 758 json_decref (root);
752 GNUNET_free (token_code); 759 GNUNET_free (ticket);
753 return GNUNET_SYSERR; 760 return GNUNET_SYSERR;
754 } 761 }
755 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Using ECDH pubkey %s for metadata decryption\n", ecdh_enc_str); 762 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Using ECDH pubkey %s for metadata decryption\n", ecdh_enc_str);
756 if (GNUNET_OK != GNUNET_STRINGS_string_to_data (signature_enc_str, 763 if (GNUNET_OK != GNUNET_STRINGS_string_to_data (signature_enc_str,
757 strlen (signature_enc_str), 764 strlen (signature_enc_str),
758 &token_code->signature, 765 &ticket->signature,
759 sizeof (struct GNUNET_CRYPTO_EcdsaSignature))) 766 sizeof (struct GNUNET_CRYPTO_EcdsaSignature)))
760 { 767 {
761 json_decref (root); 768 json_decref (root);
762 GNUNET_free (token_code_decoded); 769 GNUNET_free (ticket_decoded);
763 GNUNET_free (token_code); 770 GNUNET_free (ticket);
764 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "ECDH signature invalid in metadata\n"); 771 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "ECDH signature invalid in metadata\n");
765 return GNUNET_SYSERR; 772 return GNUNET_SYSERR;
766 } 773 }
@@ -770,13 +777,13 @@ identity_token_code_parse (const char *raw_data,
770 &enc_meta); 777 &enc_meta);
771 778
772 779
773 identity_token_code_payload_parse (enc_meta, 780 GNUNET_IDENTITY_PROVIDER_ticket_payload_parse (enc_meta,
774 enc_meta_len, 781 enc_meta_len,
775 priv_key, 782 priv_key,
776 (const struct GNUNET_CRYPTO_EcdhePublicKey*)&token_code->ecdh_pubkey, 783 (const struct GNUNET_CRYPTO_EcdhePublicKey*)&ticket->ecdh_pubkey,
777 &token_code_payload); 784 &ticket_payload);
778 785
779 token_code->payload = token_code_payload; 786 ticket->payload = ticket_payload;
780 //TODO: check signature here 787 //TODO: check signature here
781 purpose = 788 purpose =
782 GNUNET_malloc (sizeof (struct GNUNET_CRYPTO_EccSignaturePurpose) + 789 GNUNET_malloc (sizeof (struct GNUNET_CRYPTO_EccSignaturePurpose) +
@@ -786,30 +793,30 @@ identity_token_code_parse (const char *raw_data,
786 htonl (sizeof (struct GNUNET_CRYPTO_EccSignaturePurpose) + 793 htonl (sizeof (struct GNUNET_CRYPTO_EccSignaturePurpose) +
787 sizeof (struct GNUNET_CRYPTO_EcdhePublicKey) + 794 sizeof (struct GNUNET_CRYPTO_EcdhePublicKey) +
788 enc_meta_len); 795 enc_meta_len);
789 purpose->purpose = htonl(GNUNET_SIGNATURE_PURPOSE_GNUID_TOKEN_CODE); 796 purpose->purpose = htonl(GNUNET_SIGNATURE_PURPOSE_GNUID_TICKET);
790 write_ptr = (char*) &purpose[1]; 797 write_ptr = (char*) &purpose[1];
791 memcpy (write_ptr, &token_code->ecdh_pubkey, sizeof (struct GNUNET_CRYPTO_EcdhePublicKey)); 798 memcpy (write_ptr, &ticket->ecdh_pubkey, sizeof (struct GNUNET_CRYPTO_EcdhePublicKey));
792 write_ptr += sizeof (struct GNUNET_CRYPTO_EcdhePublicKey); 799 write_ptr += sizeof (struct GNUNET_CRYPTO_EcdhePublicKey);
793 memcpy (write_ptr, enc_meta, enc_meta_len); 800 memcpy (write_ptr, enc_meta, enc_meta_len);
794 801
795 if (GNUNET_OK != GNUNET_CRYPTO_ecdsa_verify (GNUNET_SIGNATURE_PURPOSE_GNUID_TOKEN_CODE, 802 if (GNUNET_OK != GNUNET_CRYPTO_ecdsa_verify (GNUNET_SIGNATURE_PURPOSE_GNUID_TICKET,
796 purpose, 803 purpose,
797 &token_code->signature, 804 &ticket->signature,
798 &token_code_payload->identity_key)) 805 &ticket_payload->identity_key))
799 { 806 {
800 identity_token_code_destroy (token_code); 807 GNUNET_IDENTITY_PROVIDER_ticket_destroy (ticket);
801 GNUNET_free (token_code_decoded); 808 GNUNET_free (ticket_decoded);
802 json_decref (root); 809 json_decref (root);
803 GNUNET_free (purpose); 810 GNUNET_free (purpose);
804 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 811 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
805 "Error verifying signature for token code\n"); 812 "Error verifying signature for token code\n");
806 return GNUNET_SYSERR; 813 return GNUNET_SYSERR;
807 } 814 }
808 *result = token_code; 815 *result = ticket;
809 GNUNET_free (purpose); 816 GNUNET_free (purpose);
810 817
811 GNUNET_free (enc_meta); 818 GNUNET_free (enc_meta);
812 GNUNET_free (token_code_decoded); 819 GNUNET_free (ticket_decoded);
813 json_decref (root); 820 json_decref (root);
814 return GNUNET_OK; 821 return GNUNET_OK;
815 822