*/
#include "platform.h"
#include <gnunet_util_lib.h>
-#include <gnunet_identity_service.h>
#include <gnunet_credential_service.h>
/**
*/
static struct GNUNET_TIME_Relative timeout;
-/**
- * Credential to lookup. (-u option)
- */
-static char *lookup_credential;
-
/**
* Handle to verify request
*/
static struct GNUNET_CREDENTIAL_Request *verify_request;
-/**
- * Lookup an ego with the identity service.
- */
-static struct GNUNET_IDENTITY_EgoLookup *el;
-
-/**
- * Handle for identity service.
- */
-static struct GNUNET_IDENTITY_Handle *identity;
-
-/**
- * Active operation on identity service.
- */
-static struct GNUNET_IDENTITY_Operation *id_op;
-
/**
* Task scheduled to handle timeout.
*/
static char *subject_key;
/**
- * Subject pubkey string
+ * Subject credential string
*/
-static char *issuer_key;
-
+static char *subject_credential;
+/**
+ * Issuer pubkey string
+ */
+static char *issuer_key;
/**
- * Identity of the zone to use for the lookup (-z option)
+ * Issuer attribute
*/
-static char *zone_ego_name;
+static char *issuer_attr;
/**
static void
do_shutdown (void *cls)
{
- if (NULL != el)
- {
- GNUNET_IDENTITY_ego_lookup_cancel (el);
- el = NULL;
- }
- if (NULL != id_op)
- {
- GNUNET_IDENTITY_cancel (id_op);
- id_op = NULL;
- }
if (NULL != verify_request)
{
GNUNET_CREDENTIAL_verify_cancel (verify_request);
verify_request = NULL;
}
- if (NULL != identity)
- {
- GNUNET_IDENTITY_disconnect (identity);
- identity = NULL;
- }
if (NULL != credential)
{
GNUNET_CREDENTIAL_disconnect (credential);
/**
- * Perform the actual resolution, with the subject pkey and
- * the issuer public key
+ * Main function that will be run.
*
- * @param pkey public key to use for the zone, can be NULL
- * @param shorten_key private key used for shortening, can be NULL
+ * @param cls closure
+ * @param args remaining command-line arguments
+ * @param cfgfile name of the configuration file used (for saving, can be NULL!)
+ * @param c configuration
*/
static void
-lookup_credentials (struct GNUNET_IDENTITY_Ego *ego)
+run (void *cls,
+ char *const *args,
+ const char *cfgfile,
+ const struct GNUNET_CONFIGURATION_Handle *c)
{
+ cfg = c;
+ credential = GNUNET_CREDENTIAL_connect (cfg);
+
+ if (NULL == credential)
+ {
+ fprintf (stderr,
+ _("Failed to connect to CREDENTIAL\n"));
+ return;
+ }
+ tt = GNUNET_SCHEDULER_add_delayed (timeout,
+ &do_timeout, NULL);
+ GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
+
+
+
struct GNUNET_CRYPTO_EcdsaPublicKey subject_pkey;
struct GNUNET_CRYPTO_EcdsaPublicKey issuer_pkey;
- if (NULL != subject_key && NULL != issuer_key && NULL != lookup_credential)
+ if (NULL != subject_key && NULL != issuer_key)
{
if (GNUNET_OK !=
GNUNET_CRYPTO_ecdsa_public_key_from_string (subject_key,
verify_request = GNUNET_CREDENTIAL_verify(credential,
&issuer_pkey,
- "test", //TODO argument
+ issuer_attr, //TODO argument
&subject_pkey,
- lookup_credential,
+ subject_credential,
&handle_verify_result,
NULL);
return;
}
-/**
- * Method called to with the ego we are to use for the lookup,
- * when the ego is the one for the default master zone.
- *
- * @param cls closure (NULL, unused)
- * @param ego ego handle, NULL if not found
- * @param ctx context for application to store data for this ego
- * (during the lifetime of this process, initially NULL)
- * @param name name assigned by the user for this ego,
- * NULL if the user just deleted the ego and it
- * must thus no longer be used
- */
-static void
-identity_master_cb (void *cls,
- struct GNUNET_IDENTITY_Ego *ego,
- void **ctx,
- const char *name)
-{
-
- id_op = NULL;
- if (NULL == ego)
- {
- fprintf (stderr,
- _("Ego for `gns-master' not found, cannot perform lookup. Did you run gnunet-gns-import.sh?\n"));
- GNUNET_SCHEDULER_shutdown ();
- return;
- }
-
- lookup_credentials(ego);
-
-
-}
-
-
-/**
- * Main function that will be run.
- *
- * @param cls closure
- * @param args remaining command-line arguments
- * @param cfgfile name of the configuration file used (for saving, can be NULL!)
- * @param c configuration
- */
-static void
-run (void *cls,
- char *const *args,
- const char *cfgfile,
- const struct GNUNET_CONFIGURATION_Handle *c)
-{
-
- cfg = c;
- credential = GNUNET_CREDENTIAL_connect (cfg);
- identity = GNUNET_IDENTITY_connect (cfg, NULL, NULL);
-
-
-
-
- if (NULL == credential)
- {
- fprintf (stderr,
- _("Failed to connect to CREDENTIAL\n"));
- return;
- }
- if (NULL == identity)
- {
- fprintf (stderr,
- _("Failed to connect to IDENTITY\n"));
- return;
- }
- tt = GNUNET_SCHEDULER_add_delayed (timeout,
- &do_timeout, NULL);
- GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
-
-
-
- GNUNET_break (NULL == id_op);
- id_op = GNUNET_IDENTITY_get (identity,
- "gns-master",//# TODO: Create credential-master
- &identity_master_cb,
- cls);
- GNUNET_assert (NULL != id_op);
-
-
-
-
-}
-
-
/**
* The main function for gnunet-gns.
*
main (int argc, char *const *argv)
{
static const struct GNUNET_GETOPT_CommandLineOption options[] = {
- {'u', "lookup", "CREDENTIAL",
- gettext_noop ("Lookup a record for the given credential"), 1,
- &GNUNET_GETOPT_set_string, &lookup_credential},
- /** { 'T', "timeout", "DELAY",
- gettext_noop ("Specify timeout for the lookup"), 1,
- &GNUNET_GETOPT_set_relative_time, &timeout },
- {'t', "type", "TYPE",
- gettext_noop ("Specify the type of the record to lookup"), 1,
- &GNUNET_GETOPT_set_string, &lookup_type},**/
- {'z', "zone", "NAME",
- gettext_noop ("Specify the name of the ego of the zone to lookup the record in"), 1,
- &GNUNET_GETOPT_set_string, &zone_ego_name},
{'s', "subject", "PKEY",
- gettext_noop ("Specify the public key of the subject to lookup the credential for"), 1,
+ gettext_noop ("The public key of the subject to lookup the credential for"), 1,
&GNUNET_GETOPT_set_string, &subject_key},
+ {'c', "credential", "CRED",
+ gettext_noop ("The name of the credential presented by the subject"), 1,
+ &GNUNET_GETOPT_set_string, &subject_credential},
{'i', "issuer", "PKEY",
- gettext_noop ("Specify the public key of the authority to verify the credential against"), 1,
+ gettext_noop ("The public key of the authority to verify the credential against"), 1,
&GNUNET_GETOPT_set_string, &issuer_key},
+ {'a', "attribute", "ATTR",
+ gettext_noop ("The issuer attribute to verify against"), 1,
+ &GNUNET_GETOPT_set_string, &issuer_attr},
GNUNET_GETOPT_OPTION_END
};
int ret;