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_assert (NULL != header_b64);
38 GNUNET_assert (NULL != payload_b64);
39 GNUNET_assert (NULL != signature_b32);
42 GNUNET_STRINGS_base64_decode (payload_b64,
46 GNUNET_STRINGS_base64_decode (header_b64,
53 GNUNET_asprintf(&data,
57 char *val = GNUNET_malloc (sizeof (struct GNUNET_CRYPTO_EccSignaturePurpose) + strlen (data));
58 purpose = (struct GNUNET_CRYPTO_EccSignaturePurpose*)val;
59 purpose->size = htonl(sizeof (struct GNUNET_CRYPTO_EccSignaturePurpose) + strlen (data));
60 purpose->purpose = htonl(GNUNET_SIGNATURE_PURPOSE_GNUID_TOKEN);
61 GNUNET_memcpy (&purpose[1], data, strlen(data));
63 GNUNET_free (header_b64);
64 GNUNET_free (header_b64);
67 printf ("Token:\nHeader:\t\t%s\nPayload:\t%s\n", header, payload);
69 GNUNET_free (payload);
71 payload_json = json_loads (payload, 0, &error);
72 if ((NULL == payload_json) || !json_is_object (payload_json))
77 keystring_json = json_object_get (payload_json, "iss");
78 if (!json_is_string (keystring_json))
83 keystring = json_string_value (keystring_json);
84 if (GNUNET_OK != GNUNET_CRYPTO_ecdsa_public_key_from_string (keystring,
91 GNUNET_STRINGS_string_to_data (signature_b32,
92 strlen (signature_b32),
94 sizeof (struct GNUNET_CRYPTO_EcdsaSignature));
97 printf ("Signature:\t%s\n", keystring);
99 if (GNUNET_OK != GNUNET_CRYPTO_ecdsa_verify(GNUNET_SIGNATURE_PURPOSE_GNUID_TOKEN,
103 printf("Signature not OK!\n");
105 printf("Signature OK!\n");
110 main(int argc, char *const argv[])
112 static const struct GNUNET_GETOPT_CommandLineOption options[] = {
114 gettext_noop ("GNUid token"), 1,
115 &GNUNET_GETOPT_set_string, &token},
117 gettext_noop ("Print token contents"), 0,
118 &GNUNET_GETOPT_set_one, &print_token},
120 GNUNET_GETOPT_OPTION_END
122 return GNUNET_PROGRAM_run (argc, argv, "ct",