2 #include "gnunet_util_lib.h"
4 #include "gnunet_signatures.h"
12 * Weather to print the token
14 static int print_token;
20 const struct GNUNET_CONFIGURATION_Handle *c)
25 char* header_b64 = strtok (token, ".");
26 char* payload_b64 = strtok(NULL, ".");
27 char* signature_b32 = strtok(NULL, ".");
28 const char* keystring;
31 json_t *keystring_json;
33 struct GNUNET_CRYPTO_EcdsaPublicKey key;
34 struct GNUNET_CRYPTO_EccSignaturePurpose *purpose;
35 struct GNUNET_CRYPTO_EcdsaSignature sig;
37 GNUNET_STRINGS_base64_decode (payload_b64,
41 GNUNET_STRINGS_base64_decode (header_b64,
48 GNUNET_asprintf(&data,
52 char *val = GNUNET_malloc (sizeof (struct GNUNET_CRYPTO_EccSignaturePurpose) + strlen (data));
53 purpose = (struct GNUNET_CRYPTO_EccSignaturePurpose*)val;
54 purpose->size = htonl(sizeof (struct GNUNET_CRYPTO_EccSignaturePurpose) + strlen (data));
55 purpose->purpose = htonl(GNUNET_SIGNATURE_PURPOSE_GNUID_TOKEN);
56 memcpy (&purpose[1], data, strlen(data));
59 payload_json = json_loads (payload, 0, &error);
60 if ((NULL == payload_json) || !json_is_object (payload_json))
64 keystring_json = json_object_get (payload_json, "iss");
65 if (!json_is_string (keystring_json))
69 keystring = json_string_value (keystring_json);
70 if (GNUNET_OK != GNUNET_CRYPTO_ecdsa_public_key_from_string (keystring,
76 GNUNET_STRINGS_string_to_data (signature_b32,
77 strlen (signature_b32),
79 sizeof (struct GNUNET_CRYPTO_EcdsaSignature));
82 printf ("Token:\nHeader:\t\t%s\nPayload:\t%s\nSignature:\t%s\n", header, payload, keystring);
85 if (GNUNET_OK != GNUNET_CRYPTO_ecdsa_verify(GNUNET_SIGNATURE_PURPOSE_GNUID_TOKEN,
90 printf("Signature not OK!\n");
93 printf("Signature OK!\n");
97 main(int argc, char *const argv[])
99 static const struct GNUNET_GETOPT_CommandLineOption options[] = {
101 gettext_noop ("GNUid token"), 1,
102 &GNUNET_GETOPT_set_string, &token},
104 gettext_noop ("Print token contents"), 0,
105 &GNUNET_GETOPT_set_one, &print_token},
107 GNUNET_GETOPT_OPTION_END
109 return GNUNET_PROGRAM_run (argc, argv, "ct",