GNUnet  0.11.x
Functions | Variables
gnunet-abd.c File Reference

command line tool to access command line Credential service More...

#include "platform.h"
#include <gnunet_util_lib.h>
#include <gnunet_abd_service.h>
#include <gnunet_gnsrecord_lib.h>
#include <gnunet_namestore_service.h>
#include "delegate_misc.h"
#include "abd_serialization.h"
Include dependency graph for gnunet-abd.c:

Go to the source code of this file.

Functions

static void do_shutdown (void *cls)
 Task run on shutdown. More...
 
static void do_timeout (void *cls)
 Task run on timeout. More...
 
static void handle_intermediate_result (void *cls, struct GNUNET_ABD_Delegation *dd, bool is_bw)
 
static void handle_collect_result (void *cls, unsigned int d_count, struct GNUNET_ABD_Delegation *dc, unsigned int c_count, struct GNUNET_ABD_Delegate *dele)
 
static void handle_verify_result (void *cls, unsigned int d_count, struct GNUNET_ABD_Delegation *dc, unsigned int c_count, struct GNUNET_ABD_Delegate *dele)
 
static void identity_cb (void *cls, struct GNUNET_IDENTITY_Ego *ego)
 Callback invoked from identity service with ego information. More...
 
static int parse_expiration (const char *expirationstring, int *etime_is_rel, uint64_t *etime)
 Parse expiration time. More...
 
static void error_cb (void *cls)
 Function called if lookup fails. More...
 
static void add_continuation (void *cls, int32_t success, const char *emsg)
 
static void get_existing_record (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone_key, const char *rec_name, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
 
static void store_cb (void *cls, struct GNUNET_IDENTITY_Ego *ego)
 
static void sign_cb (void *cls, struct GNUNET_IDENTITY_Ego *ego)
 
static void run (void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *c)
 Main function that will be run. More...
 
int main (int argc, char *const *argv)
 The main function for gnunet-gns. More...
 

Variables

static const struct GNUNET_CONFIGURATION_Handlecfg
 Configuration we are using. More...
 
static struct GNUNET_NAMESTORE_Handlens
 Handle to the namestore. More...
 
static struct GNUNET_CRYPTO_EcdsaPrivateKey zone_pkey
 Private key for the our zone. More...
 
static struct GNUNET_IDENTITY_EgoLookupel
 EgoLookup. More...
 
static struct GNUNET_ABD_Handleabd
 Handle to Credential service. More...
 
static struct GNUNET_TIME_Relative timeout
 Desired timeout for the lookup (default is no timeout). More...
 
static struct GNUNET_ABD_Requestverify_request
 Handle to verify request. More...
 
static struct GNUNET_ABD_Requestcollect_request
 Handle to collect request. More...
 
static struct GNUNET_SCHEDULER_Tasktt
 Task scheduled to handle timeout. More...
 
static int ret = 0
 Return value of the commandline. More...
 
static char * subject
 Subject pubkey string. More...
 
static char * subject_delegate
 Subject delegate string. More...
 
static char * expiration
 Credential TTL. More...
 
struct GNUNET_CRYPTO_EcdsaPublicKey subject_pkey
 Subject key. More...
 
struct GNUNET_CRYPTO_EcdsaPublicKey issuer_pkey
 Issuer key. More...
 
static char * issuer_key
 Issuer pubkey string. More...
 
static char * ego_name
 ego More...
 
static char * issuer_attr
 Issuer attribute. More...
 
static int verify
 Verify mode. More...
 
static int collect
 Collect mode. More...
 
static int create_is
 Create mode. More...
 
static int create_ss
 Create mode. More...
 
static int sign_ss
 Create mode. More...
 
static char * import
 Signed issue credentials. More...
 
static int is_private
 Is record private. More...
 
static int forward
 Search direction: forward. More...
 
static int backward
 Search direction: backward. More...
 
enum GNUNET_ABD_AlgoDirectionFlags direction = 0
 API enum, filled and passed for collect/verify. More...
 
static struct GNUNET_NAMESTORE_QueueEntryadd_qe
 Queue entry for the 'add' operation. More...
 
static void * data
 Value in binary format. More...
 
static size_t data_size
 Number of bytes in data. More...
 
static uint32_t type
 Type string converted to DNS type value. More...
 
static char * typestring
 Type of the record to add/remove, NULL to remove all. More...
 
static uint64_t etime
 Expiration string converted to numeric value. More...
 
static int etime_is_rel = GNUNET_SYSERR
 Is expiration time relative or absolute time? More...
 
static const int key_length = 52
 Fixed size of the public/private keys. More...
 
static char * record_label
 Record label for storing delegations. More...
 

Detailed Description

command line tool to access command line Credential service

Author
Martin Schanzenbach

Definition in file gnunet-abd.c.

Function Documentation

◆ do_shutdown()

static void do_shutdown ( void *  cls)
static

Task run on shutdown.

Cleans up everything.

Parameters
clsunused

Definition at line 224 of file gnunet-abd.c.

References GNUNET_ABD_disconnect(), GNUNET_ABD_request_cancel(), GNUNET_IDENTITY_ego_lookup_cancel(), GNUNET_NAMESTORE_cancel(), GNUNET_NAMESTORE_disconnect(), and GNUNET_SCHEDULER_cancel().

Referenced by run().

225 {
226  if (NULL != verify_request)
227  {
229  verify_request = NULL;
230  }
231  if (NULL != abd)
232  {
234  abd = NULL;
235  }
236  if (NULL != tt)
237  {
239  tt = NULL;
240  }
241  if (NULL != el)
242  {
244  el = NULL;
245  }
246  if (NULL != add_qe)
247  {
249  add_qe = NULL;
250  }
251  if (NULL != ns)
252  {
254  ns = NULL;
255  }
256 }
void GNUNET_IDENTITY_ego_lookup_cancel(struct GNUNET_IDENTITY_EgoLookup *el)
Abort ego lookup attempt.
static struct GNUNET_SCHEDULER_Task * tt
Task scheduled to handle timeout.
Definition: gnunet-abd.c:76
void GNUNET_NAMESTORE_cancel(struct GNUNET_NAMESTORE_QueueEntry *qe)
Cancel a namestore operation.
void GNUNET_NAMESTORE_disconnect(struct GNUNET_NAMESTORE_Handle *h)
Disconnect from the namestore service (and free associated resources).
static struct GNUNET_NAMESTORE_Handle * ns
Handle to the namestore.
Definition: gnunet-abd.c:41
static struct GNUNET_ABD_Handle * abd
Handle to Credential service.
Definition: gnunet-abd.c:56
void GNUNET_ABD_request_cancel(struct GNUNET_ABD_Request *lr)
Cancel pending verify request.
Definition: abd_api.c:400
static struct GNUNET_NAMESTORE_QueueEntry * add_qe
Queue entry for the &#39;add&#39; operation.
Definition: gnunet-abd.c:177
static struct GNUNET_ABD_Request * verify_request
Handle to verify request.
Definition: gnunet-abd.c:66
void GNUNET_ABD_disconnect(struct GNUNET_ABD_Handle *handle)
Shutdown connection with the ABD service.
Definition: abd_api.c:377
static struct GNUNET_IDENTITY_EgoLookup * el
EgoLookup.
Definition: gnunet-abd.c:51
void * GNUNET_SCHEDULER_cancel(struct GNUNET_SCHEDULER_Task *task)
Cancel the task with the specified identifier.
Definition: scheduler.c:972
Here is the call graph for this function:
Here is the caller graph for this function:

◆ do_timeout()

static void do_timeout ( void *  cls)
static

Task run on timeout.

Triggers shutdown.

Parameters
clsunused

Definition at line 265 of file gnunet-abd.c.

References GNUNET_SCHEDULER_shutdown().

Referenced by run().

266 {
267  tt = NULL;
269 }
static struct GNUNET_SCHEDULER_Task * tt
Task scheduled to handle timeout.
Definition: gnunet-abd.c:76
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:531
Here is the call graph for this function:
Here is the caller graph for this function:

◆ handle_intermediate_result()

static void handle_intermediate_result ( void *  cls,
struct GNUNET_ABD_Delegation dd,
bool  is_bw 
)
static

Definition at line 273 of file gnunet-abd.c.

References GNUNET_CRYPTO_ecdsa_public_key_to_string(), GNUNET_ABD_Delegation::issuer_attribute, GNUNET_ABD_Delegation::issuer_key, GNUNET_ABD_Delegation::subject_attribute, and GNUNET_ABD_Delegation::subject_key.

Referenced by identity_cb(), and run().

276 {
277  char *prefix = "";
278  if (is_bw)
279  prefix = "Backward -";
280  else
281  prefix = "Forward -";
282 
283  printf ("%s Intermediate result: %s.%s <- %s.%s\n",
284  prefix,
286  dd->issuer_attribute,
288  dd->subject_attribute);
289 }
struct GNUNET_CRYPTO_EcdsaPublicKey issuer_key
The issuer of the delegation.
char * GNUNET_CRYPTO_ecdsa_public_key_to_string(const struct GNUNET_CRYPTO_EcdsaPublicKey *pub)
Convert a public key to a string.
Definition: crypto_ecc.c:232
const char * subject_attribute
The attribute.
struct GNUNET_CRYPTO_EcdsaPublicKey subject_key
Public key of the subject this attribute was delegated to.
const char * issuer_attribute
The attribute.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ handle_collect_result()

static void handle_collect_result ( void *  cls,
unsigned int  d_count,
struct GNUNET_ABD_Delegation dc,
unsigned int  c_count,
struct GNUNET_ABD_Delegate dele 
)
static

Definition at line 293 of file gnunet-abd.c.

References GNUNET_ABD_delegate_to_string(), GNUNET_free, GNUNET_SCHEDULER_shutdown(), and line.

Referenced by identity_cb().

298 {
299  int i;
300  char *line;
301 
302  verify_request = NULL;
303  if (NULL != dele)
304  {
305  for (i = 0; i < c_count; i++)
306  {
307  line = GNUNET_ABD_delegate_to_string (&dele[i]);
308  printf ("%s\n", line);
309  GNUNET_free (line);
310  }
311  }
312  else
313  {
314  printf ("Received NULL\n");
315  }
316 
318 }
char * GNUNET_ABD_delegate_to_string(const struct GNUNET_ABD_Delegate *cred)
Definition: delegate_misc.c:37
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:531
static char * line
Desired phone line (string to be converted to a hash).
static struct GNUNET_ABD_Request * verify_request
Handle to verify request.
Definition: gnunet-abd.c:66
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ handle_verify_result()

static void handle_verify_result ( void *  cls,
unsigned int  d_count,
struct GNUNET_ABD_Delegation dc,
unsigned int  c_count,
struct GNUNET_ABD_Delegate dele 
)
static

Definition at line 322 of file gnunet-abd.c.

References GNUNET_CRYPTO_ecdsa_public_key_to_string(), GNUNET_free, GNUNET_SCHEDULER_shutdown(), issuer_key, and ret.

Referenced by run().

327 {
328  int i;
329  char *iss_key;
330  char *sub_key;
331 
332  verify_request = NULL;
333  if (NULL == dele)
334  ret = 1;
335  else
336  {
337  printf ("Delegation Chain:\n");
338  for (i = 0; i < d_count; i++)
339  {
341  sub_key = GNUNET_CRYPTO_ecdsa_public_key_to_string (&dc[i].subject_key);
342 
343  if (0 != dc[i].subject_attribute_len)
344  {
345  printf ("(%d) %s.%s <- %s.%s\n",
346  i,
347  iss_key,
348  dc[i].issuer_attribute,
349  sub_key,
350  dc[i].subject_attribute);
351  }
352  else
353  {
354  printf ("(%d) %s.%s <- %s\n",
355  i,
356  iss_key,
357  dc[i].issuer_attribute,
358  sub_key);
359  }
360  GNUNET_free (iss_key);
361  GNUNET_free (sub_key);
362  }
363  printf ("\nDelegate(s):\n");
364  for (i = 0; i < c_count; i++)
365  {
367  sub_key = GNUNET_CRYPTO_ecdsa_public_key_to_string (&dele[i].subject_key);
368  printf ("%s.%s <- %s\n", iss_key, dele[i].issuer_attribute, sub_key);
369  GNUNET_free (iss_key);
370  GNUNET_free (sub_key);
371  }
372  printf ("Successful.\n");
373  }
374 
376 }
static int ret
Return value of the commandline.
Definition: gnunet-abd.c:81
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:531
char * GNUNET_CRYPTO_ecdsa_public_key_to_string(const struct GNUNET_CRYPTO_EcdsaPublicKey *pub)
Convert a public key to a string.
Definition: crypto_ecc.c:232
static char * issuer_key
Issuer pubkey string.
Definition: gnunet-abd.c:112
static struct GNUNET_ABD_Request * verify_request
Handle to verify request.
Definition: gnunet-abd.c:66
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ identity_cb()

static void identity_cb ( void *  cls,
struct GNUNET_IDENTITY_Ego ego 
)
static

Callback invoked from identity service with ego information.

An ego of NULL means the ego was not found.

Parameters
clsclosure with the configuration
egoan ego known to identity service, or NULL

Definition at line 387 of file gnunet-abd.c.

References _, collect, direction, ego_name, GNUNET_ABD_collect(), GNUNET_CRYPTO_ecdsa_public_key_from_string(), GNUNET_IDENTITY_ego_get_private_key(), GNUNET_OK, GNUNET_SCHEDULER_shutdown(), GNUNET_YES, handle_collect_result(), handle_intermediate_result(), issuer_attr, issuer_key, and issuer_pkey.

Referenced by run().

388 {
389  const struct GNUNET_CRYPTO_EcdsaPrivateKey *privkey;
390 
391  el = NULL;
392  if (NULL == ego)
393  {
394  if (NULL != ego_name)
395  {
396  fprintf (stderr,
397  _ ("Ego `%s' not known to identity service\n"),
398  ego_name);
399  }
401  return;
402  }
403 
404  if (GNUNET_YES == collect)
405  {
406 
407  if (GNUNET_OK !=
409  strlen (issuer_key),
410  &issuer_pkey))
411  {
412  fprintf (stderr,
413  _ ("Issuer public key `%s' is not well-formed\n"),
414  issuer_key);
416  }
417  privkey = GNUNET_IDENTITY_ego_get_private_key (ego);
418 
420  &issuer_pkey,
421  issuer_attr,
422  privkey,
423  direction,
425  NULL,
427  NULL);
428  return;
429  }
431 }
static void handle_collect_result(void *cls, unsigned int d_count, struct GNUNET_ABD_Delegation *dc, unsigned int c_count, struct GNUNET_ABD_Delegate *dele)
Definition: gnunet-abd.c:293
static void handle_intermediate_result(void *cls, struct GNUNET_ABD_Delegation *dd, bool is_bw)
Definition: gnunet-abd.c:273
const struct GNUNET_CRYPTO_EcdsaPrivateKey * GNUNET_IDENTITY_ego_get_private_key(const struct GNUNET_IDENTITY_Ego *ego)
Obtain the ECC key associated with a ego.
Definition: identity_api.c:595
struct GNUNET_ABD_Request * GNUNET_ABD_collect(struct GNUNET_ABD_Handle *handle, const struct GNUNET_CRYPTO_EcdsaPublicKey *issuer_key, const char *issuer_attribute, const struct GNUNET_CRYPTO_EcdsaPrivateKey *subject_key, enum GNUNET_ABD_AlgoDirectionFlags direction, GNUNET_ABD_CredentialResultProcessor proc, void *proc_cls, GNUNET_ABD_IntermediateResultProcessor proc2, void *proc2_cls)
Performs attribute collection.
Definition: abd_api.c:424
struct GNUNET_CRYPTO_EcdsaPublicKey issuer_pkey
Issuer key.
Definition: gnunet-abd.c:106
Private ECC key encoded for transmission.
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:531
enum GNUNET_ABD_AlgoDirectionFlags direction
API enum, filled and passed for collect/verify.
Definition: gnunet-abd.c:172
#define _(String)
GNU gettext support macro.
Definition: platform.h:184
static char * issuer_key
Issuer pubkey string.
Definition: gnunet-abd.c:112
static int collect
Collect mode.
Definition: gnunet-abd.c:132
static struct GNUNET_ABD_Request * collect_request
Handle to collect request.
Definition: gnunet-abd.c:71
static struct GNUNET_ABD_Handle * abd
Handle to Credential service.
Definition: gnunet-abd.c:56
int GNUNET_CRYPTO_ecdsa_public_key_from_string(const char *enc, size_t enclen, struct GNUNET_CRYPTO_EcdsaPublicKey *pub)
Convert a string representing a public key to a public key.
Definition: crypto_ecc.c:366
static struct GNUNET_IDENTITY_EgoLookup * el
EgoLookup.
Definition: gnunet-abd.c:51
static char * ego_name
ego
Definition: gnunet-abd.c:117
static char * issuer_attr
Issuer attribute.
Definition: gnunet-abd.c:122
Here is the call graph for this function:
Here is the caller graph for this function:

◆ parse_expiration()

static int parse_expiration ( const char *  expirationstring,
int *  etime_is_rel,
uint64_t *  etime 
)
static

Parse expiration time.

Parameters
expirationstringtext to parse
etime_is_rel[out]set to GNUNET_YES if time is relative
etime[out]set to expiration time (abs or rel)
Returns
GNUNET_OK on success

Definition at line 443 of file gnunet-abd.c.

References GNUNET_TIME_Absolute::abs_value_us, GNUNET_ERROR_TYPE_DEBUG, GNUNET_log, GNUNET_NO, GNUNET_OK, GNUNET_STRINGS_absolute_time_to_string(), GNUNET_STRINGS_fancy_time_to_absolute(), GNUNET_STRINGS_fancy_time_to_relative(), GNUNET_STRINGS_relative_time_to_string(), GNUNET_SYSERR, GNUNET_TIME_UNIT_FOREVER_ABS, GNUNET_YES, and GNUNET_TIME_Relative::rel_value_us.

Referenced by store_cb().

446 {
447  // copied from namestore/gnunet-namestore.c
448  struct GNUNET_TIME_Relative etime_rel;
449  struct GNUNET_TIME_Absolute etime_abs;
450 
451  if (0 == strcmp (expirationstring, "never"))
452  {
453  *etime = GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us;
455  return GNUNET_OK;
456  }
457  if (GNUNET_OK ==
459  {
461  *etime = etime_rel.rel_value_us;
463  "Storing record with relative expiration time of %s\n",
465  return GNUNET_OK;
466  }
467  if (GNUNET_OK ==
469  {
471  *etime = etime_abs.abs_value_us;
473  "Storing record with absolute expiration time of %s\n",
475  return GNUNET_OK;
476  }
477  return GNUNET_SYSERR;
478 }
int GNUNET_STRINGS_fancy_time_to_relative(const char *fancy_time, struct GNUNET_TIME_Relative *rtime)
Convert a given fancy human-readable time to our internal representation.
Definition: strings.c:355
int GNUNET_STRINGS_fancy_time_to_absolute(const char *fancy_time, struct GNUNET_TIME_Absolute *atime)
Convert a given fancy human-readable time to our internal representation.
Definition: strings.c:406
#define GNUNET_TIME_UNIT_FOREVER_ABS
Constant used to specify "forever".
const char * GNUNET_STRINGS_relative_time_to_string(struct GNUNET_TIME_Relative delta, int do_round)
Give relative time in human-readable fancy format.
Definition: strings.c:701
static char * expirationstring
Desired expiration time.
#define GNUNET_log(kind,...)
Time for absolute times used by GNUnet, in microseconds.
static int etime_is_rel
Is expiration time relative or absolute time?
Definition: gnunet-abd.c:206
static uint64_t etime
Expiration string converted to numeric value.
Definition: gnunet-abd.c:201
const char * GNUNET_STRINGS_absolute_time_to_string(struct GNUNET_TIME_Absolute t)
Like asctime, except for GNUnet time.
Definition: strings.c:756
Time for relative time used by GNUnet, in microseconds.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ error_cb()

static void error_cb ( void *  cls)
static

Function called if lookup fails.

Definition at line 485 of file gnunet-abd.c.

References GNUNET_SCHEDULER_shutdown().

Referenced by GNUNET_RECLAIM_get_attestations_start(), GNUNET_RECLAIM_get_attributes_start(), GNUNET_RECLAIM_ticket_iteration_start(), and store_cb().

486 {
487  fprintf (stderr, "Error occured during lookup, shutting down.\n");
489  return;
490 }
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:531
Here is the call graph for this function:
Here is the caller graph for this function:

◆ add_continuation()

static void add_continuation ( void *  cls,
int32_t  success,
const char *  emsg 
)
static

Definition at line 494 of file gnunet-abd.c.

References GNUNET_OK, GNUNET_SCHEDULER_shutdown(), and qe.

Referenced by get_existing_record().

495 {
496  struct GNUNET_NAMESTORE_QueueEntry **qe = cls;
497  *qe = NULL;
498 
499  if (GNUNET_OK == success)
500  printf ("Adding successful.\n");
501  else
502  fprintf (stderr, "Error occured during adding, shutting down.\n");
503 
505 }
static struct GNUNET_DATASTORE_QueueEntry * qe
Current operation.
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:531
An QueueEntry used to store information for a pending NAMESTORE record operation. ...
Definition: namestore_api.c:53
Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_existing_record()

static void get_existing_record ( void *  cls,
const struct GNUNET_CRYPTO_EcdsaPrivateKey zone_key,
const char *  rec_name,
unsigned int  rd_count,
const struct GNUNET_GNSRECORD_Data rd 
)
static

Definition at line 509 of file gnunet-abd.c.

References add_continuation(), data, GNUNET_GNSRECORD_Data::data, data_size, GNUNET_GNSRECORD_Data::data_size, etime, etime_is_rel, GNUNET_GNSRECORD_Data::expiration_time, GNUNET_GNSRECORD_Data::flags, GNUNET_assert, GNUNET_free, GNUNET_GNSRECORD_RF_PRIVATE, GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION, GNUNET_malloc, GNUNET_memcpy, GNUNET_NAMESTORE_records_store(), GNUNET_NO, GNUNET_TIME_UNIT_FOREVER_ABS, GNUNET_YES, is_private, GNUNET_GNSRECORD_Data::record_type, type, and zone_pkey.

Referenced by store_cb().

514 {
515  struct GNUNET_GNSRECORD_Data *rde;
516  struct GNUNET_GNSRECORD_Data* rdn =
517  GNUNET_malloc(sizeof(*rdn)*(rd_count + 1));
518 
519  memset (rdn, 0, sizeof (struct GNUNET_GNSRECORD_Data));
520  GNUNET_memcpy (&rdn[1], rd,
521  rd_count * sizeof (struct GNUNET_GNSRECORD_Data));
522  rde = &rdn[0];
523  rde->data = data;
524  rde->data_size = data_size;
525  rde->record_type = type;
526 
527  // Set flags
528  if (GNUNET_YES == is_private)
530  rde->expiration_time = etime;
531  if (GNUNET_YES == etime_is_rel)
533  else if (GNUNET_NO != etime_is_rel)
534  rde->expiration_time = GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us;
535 
536  GNUNET_assert (NULL != rec_name);
538  &zone_pkey,
539  rec_name,
540  rd_count + 1,
541  rde,
543  &add_qe);
544  GNUNET_free(rdn);
545  return;
546 }
static size_t data_size
Number of bytes in data.
Definition: gnunet-abd.c:187
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
size_t data_size
Number of bytes in data.
#define GNUNET_TIME_UNIT_FOREVER_ABS
Constant used to specify "forever".
struct GNUNET_NAMESTORE_QueueEntry * GNUNET_NAMESTORE_records_store(struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd, GNUNET_NAMESTORE_ContinuationWithStatus cont, void *cont_cls)
Store an item in the namestore.
const void * data
Binary value stored in the DNS record.
uint64_t expiration_time
Expiration time for the DNS record.
static struct GNUNET_NAMESTORE_Handle * ns
Handle to the namestore.
Definition: gnunet-abd.c:41
static int is_private
Is record private.
Definition: gnunet-abd.c:157
This is a private record of this peer and it should thus not be handed out to other peers...
static void * data
Value in binary format.
Definition: gnunet-abd.c:182
static struct GNUNET_CRYPTO_EcdsaPrivateKey zone_pkey
Private key for the our zone.
Definition: gnunet-abd.c:46
uint32_t record_type
Type of the GNS/DNS record.
static struct GNUNET_NAMESTORE_QueueEntry * add_qe
Queue entry for the &#39;add&#39; operation.
Definition: gnunet-abd.c:177
static uint32_t type
Type string converted to DNS type value.
Definition: gnunet-abd.c:192
static int etime_is_rel
Is expiration time relative or absolute time?
Definition: gnunet-abd.c:206
enum GNUNET_GNSRECORD_Flags flags
Flags for the record.
This expiration time of the record is a relative time (not an absolute time).
static uint64_t etime
Expiration string converted to numeric value.
Definition: gnunet-abd.c:201
static void add_continuation(void *cls, int32_t success, const char *emsg)
Definition: gnunet-abd.c:494
#define GNUNET_malloc(size)
Wrapper around malloc.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ store_cb()

static void store_cb ( void *  cls,
struct GNUNET_IDENTITY_Ego ego 
)
static

Definition at line 550 of file gnunet-abd.c.

References _, GNUNET_TIME_Absolute::abs_value_us, data, data_size, error_cb(), etime, etime_is_rel, expiration, GNUNET_ABD_Delegate::expiration, get_existing_record(), GNUNET_ABD_delegate_from_string(), GNUNET_ABD_delegate_serialize(), GNUNET_CRYPTO_ecdsa_public_key_to_string(), GNUNET_ERROR_TYPE_ERROR, GNUNET_free, GNUNET_GNSRECORD_string_to_value(), GNUNET_GNSRECORD_TYPE_DELEGATE, GNUNET_IDENTITY_ego_get_private_key(), GNUNET_IDENTITY_ego_get_public_key(), GNUNET_log, GNUNET_NAMESTORE_connect(), GNUNET_NAMESTORE_records_lookup(), GNUNET_NO, GNUNET_OK, GNUNET_SCHEDULER_shutdown(), parse_expiration(), record_label, subject, GNUNET_ABD_Delegate::subject_key, type, typestring, and zone_pkey.

Referenced by run().

551 {
552  const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
553 
554  el = NULL;
555 
557  if (NULL == ns)
558  {
560  _ ("Failed to connect to namestore\n"));
562  return;
563  }
564 
565  // Key handling
567 
569  {
570  // Parse import
571  struct GNUNET_ABD_Delegate *cred;
572  cred = GNUNET_ABD_delegate_from_string (import);
573 
574  // Get import subject public key string
575  char *subject_pubkey_str =
577 
578  // Get zone public key string
579  struct GNUNET_CRYPTO_EcdsaPublicKey zone_pubkey;
580  GNUNET_IDENTITY_ego_get_public_key (ego, &zone_pubkey);
581  char *zone_pubkey_str =
583 
584  // Check if the subject key in the signed import matches the zone's key it is issued to
585  if (strcmp (zone_pubkey_str, subject_pubkey_str) != 0)
586  {
587  fprintf (stderr,
588  "Import signed delegate does not match this ego's public key.\n");
590  return;
591  }
592 
593  // Expiration
594  etime = cred->expiration.abs_value_us;
596 
597  // Prepare the data to be store in the record
598  data_size = GNUNET_ABD_delegate_serialize (cred, (char **) &data);
599  GNUNET_free (cred);
600  }
601  else
602  {
603  // For all other types e.g. GNUNET_GNSRECORD_TYPE_ATTRIBUTE
604  if (GNUNET_OK !=
606  {
607  if(typestring == NULL) {
608  fputs("No value for unknown record type\n", stderr);
609  } else if(subject == NULL) {
610  fprintf(stderr,
611  "No value for record type`%s'\n",
612  typestring);
613  } else {
614  fprintf (stderr,
615  "Value `%s' invalid for record type `%s'\n",
616  subject,
617  typestring);
618  }
620  return;
621  }
622 
623  // Take care of expiration
624  if (NULL == expiration)
625  {
626  fprintf (stderr, "Missing option -e for operation 'create'\n");
628  return;
629  }
631  {
632  fprintf (stderr, "Invalid time format `%s'\n", expiration);
634  return;
635  }
636  }
637 
638  // Start lookup
640  &zone_pkey,
641  record_label,
642  &error_cb,
643  NULL,
645  NULL);
646  return;
647 }
static char * typestring
Type of the record to add/remove, NULL to remove all.
Definition: gnunet-abd.c:197
struct GNUNET_CRYPTO_EcdsaPublicKey subject_key
Public key of the subject this credential was issued to.
static const struct GNUNET_CONFIGURATION_Handle * cfg
Configuration we are using.
Definition: gnunet-abd.c:36
struct GNUNET_NAMESTORE_QueueEntry * GNUNET_NAMESTORE_records_lookup(struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey, const char *label, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_NAMESTORE_RecordMonitor rm, void *rm_cls)
Lookup an item in the namestore.
static void error_cb(void *cls)
Function called if lookup fails.
Definition: gnunet-abd.c:485
static size_t data_size
Number of bytes in data.
Definition: gnunet-abd.c:187
const struct GNUNET_CRYPTO_EcdsaPrivateKey * GNUNET_IDENTITY_ego_get_private_key(const struct GNUNET_IDENTITY_Ego *ego)
Obtain the ECC key associated with a ego.
Definition: identity_api.c:595
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:531
uint64_t abs_value_us
The actual value.
#define _(String)
GNU gettext support macro.
Definition: platform.h:184
static int parse_expiration(const char *expirationstring, int *etime_is_rel, uint64_t *etime)
Parse expiration time.
Definition: gnunet-abd.c:443
int GNUNET_ABD_delegate_serialize(struct GNUNET_ABD_Delegate *dele, char **data)
#define GNUNET_GNSRECORD_TYPE_DELEGATE
65546 reserved
static char * record_label
Record label for storing delegations.
Definition: gnunet-abd.c:216
struct GNUNET_ABD_Delegate * GNUNET_ABD_delegate_from_string(const char *s)
Definition: delegate_misc.c:80
static struct GNUNET_NAMESTORE_Handle * ns
Handle to the namestore.
Definition: gnunet-abd.c:41
int GNUNET_GNSRECORD_string_to_value(uint32_t type, const char *s, void **data, size_t *data_size)
Convert human-readable version of a &#39;value&#39; of a record to the binary representation.
Definition: gnsrecord.c:175
static char * expiration
Credential TTL.
Definition: gnunet-abd.c:96
char * GNUNET_CRYPTO_ecdsa_public_key_to_string(const struct GNUNET_CRYPTO_EcdsaPublicKey *pub)
Convert a public key to a string.
Definition: crypto_ecc.c:232
struct GNUNET_NAMESTORE_Handle * GNUNET_NAMESTORE_connect(const struct GNUNET_CONFIGURATION_Handle *cfg)
Connect to the namestore service.
static void * data
Value in binary format.
Definition: gnunet-abd.c:182
static struct GNUNET_CRYPTO_EcdsaPrivateKey zone_pkey
Private key for the our zone.
Definition: gnunet-abd.c:46
static char * subject
Subject pubkey string.
Definition: gnunet-abd.c:86
configuration data
Definition: configuration.c:84
static struct GNUNET_NAMESTORE_QueueEntry * add_qe
Queue entry for the &#39;add&#39; operation.
Definition: gnunet-abd.c:177
Public ECC key (always for Curve25519) encoded in a format suitable for network transmission and ECDS...
static uint32_t type
Type string converted to DNS type value.
Definition: gnunet-abd.c:192
#define GNUNET_log(kind,...)
struct GNUNET_TIME_Absolute expiration
Expiration of this credential.
static int etime_is_rel
Is expiration time relative or absolute time?
Definition: gnunet-abd.c:206
static uint64_t etime
Expiration string converted to numeric value.
Definition: gnunet-abd.c:201
static struct GNUNET_IDENTITY_EgoLookup * el
EgoLookup.
Definition: gnunet-abd.c:51
void GNUNET_IDENTITY_ego_get_public_key(struct GNUNET_IDENTITY_Ego *ego, struct GNUNET_CRYPTO_EcdsaPublicKey *pk)
Get the identifier (public key) of an ego.
Definition: identity_api.c:608
static void get_existing_record(void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone_key, const char *rec_name, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
Definition: gnunet-abd.c:509
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ sign_cb()

static void sign_cb ( void *  cls,
struct GNUNET_IDENTITY_Ego ego 
)
static

Definition at line 651 of file gnunet-abd.c.

References ego_name, expiration, GNUNET_ABD_delegate_issue(), GNUNET_ABD_delegate_to_string(), GNUNET_CRYPTO_ecdsa_public_key_from_string(), GNUNET_free, GNUNET_IDENTITY_ego_get_private_key(), GNUNET_OK, GNUNET_SCHEDULER_shutdown(), GNUNET_STRINGS_fancy_time_to_absolute(), issuer_attr, key_length, res, subject, and subject_pkey.

Referenced by run().

652 {
653  const struct GNUNET_CRYPTO_EcdsaPrivateKey *privkey;
654  struct GNUNET_ABD_Delegate *dele;
655  struct GNUNET_TIME_Absolute etime_abs;
656  char *res;
657 
658  el = NULL;
659 
660  // work on expiration time
661  if (NULL == expiration)
662  {
663  fprintf (stderr, "Please specify a TTL\n");
665  return;
666  }
667  else if (GNUNET_OK !=
669  {
670  fprintf (stderr,
671  "%s is not a valid ttl! Only absolute times are accepted!\n",
672  expiration);
674  return;
675  }
676 
677  // If contains a space - split it by the first space only - assume first entry is subject followed by attribute(s)
678  char *subject_pubkey_str;
679  char *subject_attr = NULL;
680  char *token;
681 
682  // Subject Public Key
683  token = strtok (subject, " ");
684  if (key_length == strlen (token))
685  {
686  subject_pubkey_str = token;
687  }
688  else
689  {
690  fprintf (stderr, "Key error, wrong length: %ld!\n", strlen (token));
692  return;
693  }
694  // Subject Attribute(s)
695  token = strtok (NULL, " ");
696  if (NULL != token)
697  {
698  subject_attr = token;
699  }
700 
701  // work on keys
702  privkey = GNUNET_IDENTITY_ego_get_private_key (ego);
703 
704  if (GNUNET_OK !=
705  GNUNET_CRYPTO_ecdsa_public_key_from_string (subject_pubkey_str,
706  strlen (subject_pubkey_str),
707  &subject_pkey))
708  {
709  fprintf (stderr,
710  "Subject public key `%s' is not well-formed\n",
711  subject_pubkey_str);
713  return;
714  }
715 
716  // Sign delegate
717  dele = GNUNET_ABD_delegate_issue (privkey,
718  &subject_pkey,
719  issuer_attr,
720  subject_attr,
721  &etime_abs);
722  res = GNUNET_ABD_delegate_to_string (dele);
723  GNUNET_free (dele);
724  printf ("%s\n", res);
725 
727  ego_name = NULL;
728 
730 }
char * GNUNET_ABD_delegate_to_string(const struct GNUNET_ABD_Delegate *cred)
Definition: delegate_misc.c:37
const struct GNUNET_CRYPTO_EcdsaPrivateKey * GNUNET_IDENTITY_ego_get_private_key(const struct GNUNET_IDENTITY_Ego *ego)
Obtain the ECC key associated with a ego.
Definition: identity_api.c:595
struct GNUNET_ABD_Delegate * GNUNET_ABD_delegate_issue(const struct GNUNET_CRYPTO_EcdsaPrivateKey *issuer, struct GNUNET_CRYPTO_EcdsaPublicKey *subject, const char *iss_attr, const char *sub_attr, struct GNUNET_TIME_Absolute *expiration)
Issue an attribute to a subject.
int GNUNET_STRINGS_fancy_time_to_absolute(const char *fancy_time, struct GNUNET_TIME_Absolute *atime)
Convert a given fancy human-readable time to our internal representation.
Definition: strings.c:406
Private ECC key encoded for transmission.
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:531
static const int key_length
Fixed size of the public/private keys.
Definition: gnunet-abd.c:211
struct GNUNET_CRYPTO_EcdsaPublicKey subject_pkey
Subject key.
Definition: gnunet-abd.c:101
static char * expiration
Credential TTL.
Definition: gnunet-abd.c:96
static int res
static char * subject
Subject pubkey string.
Definition: gnunet-abd.c:86
int GNUNET_CRYPTO_ecdsa_public_key_from_string(const char *enc, size_t enclen, struct GNUNET_CRYPTO_EcdsaPublicKey *pub)
Convert a string representing a public key to a public key.
Definition: crypto_ecc.c:366
Time for absolute times used by GNUnet, in microseconds.
static struct GNUNET_IDENTITY_EgoLookup * el
EgoLookup.
Definition: gnunet-abd.c:51
static char * ego_name
ego
Definition: gnunet-abd.c:117
static char * issuer_attr
Issuer attribute.
Definition: gnunet-abd.c:122
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ run()

static void run ( void *  cls,
char *const *  args,
const char *  cfgfile,
const struct GNUNET_CONFIGURATION_Handle c 
)
static

Main function that will be run.

Parameters
clsclosure
argsremaining command-line arguments
cfgfilename of the configuration file used (for saving, can be NULL!)
cconfiguration

Definition at line 742 of file gnunet-abd.c.

References _, backward, collect, create_is, create_ss, direction, do_shutdown(), do_timeout(), ego_name, forward, GNUNET_ABD_connect(), GNUNET_ABD_delegate_from_string(), GNUNET_ABD_FLAG_BACKWARD, GNUNET_ABD_FLAG_FORWARD, GNUNET_ABD_verify(), GNUNET_CRYPTO_ecdsa_public_key_from_string(), GNUNET_free, GNUNET_free_nz, GNUNET_GNS_EMPTY_LABEL_AT, GNUNET_GNSRECORD_TYPE_ATTRIBUTE, GNUNET_GNSRECORD_TYPE_DELEGATE, GNUNET_IDENTITY_ego_lookup(), GNUNET_malloc, GNUNET_memcpy, GNUNET_NO, GNUNET_OK, GNUNET_SCHEDULER_add_delayed(), GNUNET_SCHEDULER_add_shutdown(), GNUNET_SCHEDULER_shutdown(), GNUNET_strdup, GNUNET_YES, handle_intermediate_result(), handle_verify_result(), identity_cb(), issuer_attr, GNUNET_ABD_Delegate::issuer_attribute, issuer_key, issuer_pkey, record_label, sign_cb(), sign_ss, store_cb(), subject, subject_delegate, subject_pkey, timeout, type, and verify.

Referenced by adjust_running_peers(), and main().

746 {
747  cfg = c;
748 
751 
752  // Check relevant cmdline parameters
753  if (GNUNET_YES == create_is)
754  {
755  if (NULL == ego_name)
756  {
757  fprintf (stderr, "Missing option '-ego'\n");
759  return;
760  }
761  if (NULL == issuer_attr)
762  {
763  fprintf (stderr, "Missing option '-attribute' for issuer attribute\n");
765  return;
766  }
767  if (NULL == subject)
768  {
769  fprintf (stderr, "Missing option -subject for operation 'create'.'\n");
771  return;
772  }
773 
774  // Lookup ego, on success call store_cb and store as ATTRIBUTE type
778  return;
779  }
780 
781  if (GNUNET_YES == create_ss)
782  {
783 
784  // check if signed parameter has been passed in cmd line call
785  if (NULL == import)
786  {
787  fprintf (stderr, "'import' required\n");
789  return;
790  }
791 
794  // Store subject side
796 
797  return;
798  }
799 
800  if (GNUNET_YES == sign_ss)
801  {
802  if (NULL == ego_name)
803  {
804  fprintf (stderr, "ego required\n");
806  return;
807  }
808  if (NULL == subject)
809  {
810  fprintf (stderr, "Subject public key needed\n");
812  return;
813  }
814 
815  // lookup ego and call function sign_cb on success
817  return;
818  }
819 
820  if ((GNUNET_NO == forward) && (GNUNET_NO == backward))
821  {
822  // set default: bidirectional
825  }
826  if (GNUNET_YES == forward)
828  if (GNUNET_YES == backward)
830 
831  if (GNUNET_YES == collect)
832  {
833  if (NULL == issuer_key)
834  {
835  fprintf (stderr, _ ("Issuer public key not well-formed\n"));
837  return;
838  }
839 
841 
842  if (NULL == abd)
843  {
844  fprintf (stderr, _ ("Failed to connect to ABD\n"));
846  return;
847  }
848  if (NULL == issuer_attr)
849  {
850  fprintf (stderr, _ ("You must provide issuer the attribute\n"));
852  return;
853  }
854 
855  if (NULL == ego_name)
856  {
857  fprintf (stderr, _ ("ego required\n"));
859  return;
860  }
862  return;
863  }
864 
865  if (NULL == subject)
866  {
867  fprintf (stderr, _ ("Subject public key needed\n"));
869  return;
870  }
872  strlen (subject),
873  &subject_pkey))
874  {
875  fprintf (stderr,
876  _ ("Subject public key `%s' is not well-formed\n"),
877  subject);
879  return;
880  }
881 
882  if (GNUNET_YES == verify)
883  {
884  if (NULL == issuer_key)
885  {
886  fprintf (stderr, _ ("Issuer public key not well-formed\n"));
888  return;
889  }
890  if (GNUNET_OK !=
892  strlen (issuer_key),
893  &issuer_pkey))
894  {
895  fprintf (stderr,
896  _ ("Issuer public key `%s' is not well-formed\n"),
897  issuer_key);
899  return;
900  }
902 
903  if (NULL == abd)
904  {
905  fprintf (stderr, _ ("Failed to connect to ABD\n"));
907  return;
908  }
909  if ((NULL == issuer_attr) || (NULL == subject_delegate))
910  {
911  fprintf (stderr, _ ("You must provide issuer and subject attributes\n"));
913  return;
914  }
915 
916  // Subject credentials are comma separated
917  char *tmp = GNUNET_strdup (subject_delegate);
918  char *tok = strtok (tmp, ",");
919  if (NULL == tok)
920  {
921  fprintf (stderr, "Invalid subject credentials\n");
922  GNUNET_free (tmp);
924  return;
925  }
926  int count = 1;
927  int i;
928  while (NULL != (tok = strtok (NULL, ",")))
929  count++;
930  struct GNUNET_ABD_Delegate* delegates =
931  GNUNET_malloc(sizeof(*delegates)*count);
932  struct GNUNET_ABD_Delegate *dele;
933  GNUNET_free (tmp);
935  tok = strtok (tmp, ",");
936  for (i = 0; i < count; i++)
937  {
938  dele = GNUNET_ABD_delegate_from_string (tok);
939  GNUNET_memcpy (&delegates[i],
940  dele,
941  sizeof (struct GNUNET_ABD_Delegate));
942  delegates[i].issuer_attribute = GNUNET_strdup (dele->issuer_attribute);
943  tok = strtok (NULL, ",");
944  GNUNET_free (dele);
945  }
946 
948  &issuer_pkey,
949  issuer_attr,
950  &subject_pkey,
951  count,
952  delegates,
953  direction,
955  NULL,
957  NULL);
958  for (i = 0; i < count; i++)
959  {
960  GNUNET_free_nz ((char *) delegates[i].issuer_attribute);
961  delegates[i].issuer_attribute = NULL;
962  }
963  GNUNET_free (tmp);
964  GNUNET_free(delegates);
965  }
966  else
967  {
968  fprintf (stderr,
969  _ (
970  "Please specify name to lookup, subject key and issuer key!\n"));
972  }
973  return;
974 }
static void handle_verify_result(void *cls, unsigned int d_count, struct GNUNET_ABD_Delegation *dc, unsigned int c_count, struct GNUNET_ABD_Delegate *dele)
Definition: gnunet-abd.c:322
static void store_cb(void *cls, struct GNUNET_IDENTITY_Ego *ego)
Definition: gnunet-abd.c:550
static int create_is
Create mode.
Definition: gnunet-abd.c:137
struct GNUNET_ABD_Handle * GNUNET_ABD_connect(const struct GNUNET_CONFIGURATION_Handle *cfg)
Initialize the connection with the ABD service.
Definition: abd_api.c:355
static const struct GNUNET_CONFIGURATION_Handle * cfg
Configuration we are using.
Definition: gnunet-abd.c:36
#define GNUNET_GNS_EMPTY_LABEL_AT
String we use to indicate an empty label (top-level entry in the zone).
static struct GNUNET_SCHEDULER_Task * tt
Task scheduled to handle timeout.
Definition: gnunet-abd.c:76
static void sign_cb(void *cls, struct GNUNET_IDENTITY_Ego *ego)
Definition: gnunet-abd.c:651
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_shutdown(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run on shutdown, that is when a CTRL-C signal is received, or when GNUNET_SCHEDULER_shutdown() is being invoked.
Definition: scheduler.c:1331
static void handle_intermediate_result(void *cls, struct GNUNET_ABD_Delegation *dd, bool is_bw)
Definition: gnunet-abd.c:273
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
struct GNUNET_CRYPTO_EcdsaPublicKey issuer_pkey
Issuer key.
Definition: gnunet-abd.c:106
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:531
#define GNUNET_strdup(a)
Wrapper around GNUNET_xstrdup_.
static void identity_cb(void *cls, struct GNUNET_IDENTITY_Ego *ego)
Callback invoked from identity service with ego information.
Definition: gnunet-abd.c:387
enum GNUNET_ABD_AlgoDirectionFlags direction
API enum, filled and passed for collect/verify.
Definition: gnunet-abd.c:172
#define _(String)
GNU gettext support macro.
Definition: platform.h:184
static void do_timeout(void *cls)
Task run on timeout.
Definition: gnunet-abd.c:265
#define GNUNET_GNSRECORD_TYPE_DELEGATE
65546 reserved
static char * record_label
Record label for storing delegations.
Definition: gnunet-abd.c:216
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_delayed(struct GNUNET_TIME_Relative delay, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay.
Definition: scheduler.c:1269
static struct GNUNET_TIME_Relative timeout
Desired timeout for the lookup (default is no timeout).
Definition: gnunet-abd.c:61
struct GNUNET_ABD_Delegate * GNUNET_ABD_delegate_from_string(const char *s)
Definition: delegate_misc.c:80
static char * subject_delegate
Subject delegate string.
Definition: gnunet-abd.c:91
struct GNUNET_CRYPTO_EcdsaPublicKey subject_pkey
Subject key.
Definition: gnunet-abd.c:101
static int forward
Search direction: forward.
Definition: gnunet-abd.c:162
static void do_shutdown(void *cls)
Task run on shutdown.
Definition: gnunet-abd.c:224
static char * issuer_key
Issuer pubkey string.
Definition: gnunet-abd.c:112
#define GNUNET_free_nz(ptr)
Wrapper around free.
static int collect
Collect mode.
Definition: gnunet-abd.c:132
static int create_ss
Create mode.
Definition: gnunet-abd.c:142
static struct GNUNET_ABD_Handle * abd
Handle to Credential service.
Definition: gnunet-abd.c:56
static int backward
Search direction: backward.
Definition: gnunet-abd.c:167
struct GNUNET_IDENTITY_EgoLookup * GNUNET_IDENTITY_ego_lookup(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *name, GNUNET_IDENTITY_EgoCallback cb, void *cb_cls)
Lookup an ego by name.
static char * subject
Subject pubkey string.
Definition: gnunet-abd.c:86
int GNUNET_CRYPTO_ecdsa_public_key_from_string(const char *enc, size_t enclen, struct GNUNET_CRYPTO_EcdsaPublicKey *pub)
Convert a string representing a public key to a public key.
Definition: crypto_ecc.c:366
static struct GNUNET_ABD_Request * verify_request
Handle to verify request.
Definition: gnunet-abd.c:66
static uint32_t type
Type string converted to DNS type value.
Definition: gnunet-abd.c:192
#define GNUNET_GNSRECORD_TYPE_ATTRIBUTE
Record type for reverse lookups.
const char * issuer_attribute
The issuer attribute.
static int sign_ss
Create mode.
Definition: gnunet-abd.c:147
struct GNUNET_ABD_Request * GNUNET_ABD_verify(struct GNUNET_ABD_Handle *handle, const struct GNUNET_CRYPTO_EcdsaPublicKey *issuer_key, const char *issuer_attribute, const struct GNUNET_CRYPTO_EcdsaPublicKey *subject_key, uint32_t delegate_count, const struct GNUNET_ABD_Delegate *delegates, enum GNUNET_ABD_AlgoDirectionFlags direction, GNUNET_ABD_CredentialResultProcessor proc, void *proc_cls, GNUNET_ABD_IntermediateResultProcessor proc2, void *proc2_cls)
Performs attribute verification.
Definition: abd_api.c:498
static int verify
Verify mode.
Definition: gnunet-abd.c:127
static struct GNUNET_IDENTITY_EgoLookup * el
EgoLookup.
Definition: gnunet-abd.c:51
static char * ego_name
ego
Definition: gnunet-abd.c:117
static char * issuer_attr
Issuer attribute.
Definition: gnunet-abd.c:122
#define GNUNET_malloc(size)
Wrapper around malloc.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ main()

int main ( int  argc,
char *const *  argv 
)

The main function for gnunet-gns.

Parameters
argcnumber of arguments from the command line
argvcommand line arguments
Returns
0 ok, 1 on error

Definition at line 985 of file gnunet-abd.c.

References _, backward, collect, create_is, create_ss, ego_name, expiration, forward, gettext_noop, GNUNET_free_nz, GNUNET_GETOPT_OPTION_END, GNUNET_GETOPT_option_flag(), GNUNET_GETOPT_option_string(), GNUNET_log_setup(), GNUNET_OK, GNUNET_PROGRAM_run(), GNUNET_STRINGS_get_utf8_args(), GNUNET_TIME_UNIT_FOREVER_REL, is_private, issuer_attr, issuer_key, ret, run(), sign_ss, subject, subject_delegate, timeout, and verify.

986 {
989  "verify",
990  gettext_noop (
991  "verify credential against attribute"),
992  &verify),
994  's',
995  "subject",
996  "PKEY",
997  gettext_noop (
998  "The public key of the subject to lookup the"
999  "credential for, or for issuer side storage: subject and its attributes"),
1000  &subject),
1002  'd',
1003  "delegate",
1004  "DELE",
1005  gettext_noop ("The private, signed delegate presented by the subject"),
1006  &subject_delegate),
1008  'i',
1009  "issuer",
1010  "PKEY",
1011  gettext_noop (
1012  "The public key of the authority to verify the credential against"),
1013  &issuer_key),
1015  "ego",
1016  "EGO",
1017  gettext_noop ("The ego/zone name to use"),
1018  &ego_name),
1020  'a',
1021  "attribute",
1022  "ATTR",
1023  gettext_noop ("The issuer attribute to verify against or to issue"),
1024  &issuer_attr),
1026  "ttl",
1027  "EXP",
1028  gettext_noop (
1029  "The time to live for the credential."
1030  "e.g. 5m, 6h, \"1990-12-30 12:00:00\""),
1031  &expiration),
1033  "collect",
1034  gettext_noop ("collect credentials"),
1035  &collect),
1037  "createIssuerSide",
1038  gettext_noop (
1039  "Create and issue a credential issuer side."),
1040  &create_is),
1042  "createSubjectSide",
1043  gettext_noop (
1044  "Issue a credential subject side."),
1045  &create_ss),
1047  'S',
1048  "signSubjectSide",
1049  gettext_noop ("Create, sign and return a credential subject side."),
1050  &sign_ss),
1052  'x',
1053  "import",
1054  "IMP",
1055  gettext_noop (
1056  "Import signed credentials that should be issued to a zone/ego"),
1057  &import),
1059  "private",
1060  gettext_noop ("Create private record entry."),
1061  &is_private),
1063  'F',
1064  "forward",
1065  gettext_noop (
1066  "Indicates that the collect/verify process is done via forward search."),
1067  &forward),
1069  'B',
1070  "backward",
1071  gettext_noop (
1072  "Indicates that the collect/verify process is done via forward search."),
1073  &backward),
1075 
1076 
1078  if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
1079  return 2;
1080 
1081  GNUNET_log_setup ("gnunet-abd", "WARNING", NULL);
1082  if (GNUNET_OK != GNUNET_PROGRAM_run (argc,
1083  argv,
1084  "gnunet-abd",
1085  _ ("GNUnet abd resolver tool"),
1086  options,
1087  &run,
1088  NULL))
1089  ret = 1;
1090  GNUNET_free_nz ((void *) argv);
1091  return ret;
1092 }
static int create_is
Create mode.
Definition: gnunet-abd.c:137
struct GNUNET_GETOPT_CommandLineOption options[]
Definition: 002.c:5
int GNUNET_STRINGS_get_utf8_args(int argc, char *const *argv, int *u8argc, char *const **u8argv)
Returns utf-8 encoded arguments.
Definition: strings.c:1457
static int ret
Return value of the commandline.
Definition: gnunet-abd.c:81
Definition of a command line option.
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_OPTION_END
Definition: 002.c:13
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_string(char shortName, const char *name, const char *argumentHelp, const char *description, char **str)
Allow user to specify a string.
#define _(String)
GNU gettext support macro.
Definition: platform.h:184
static struct GNUNET_TIME_Relative timeout
Desired timeout for the lookup (default is no timeout).
Definition: gnunet-abd.c:61
static char * subject_delegate
Subject delegate string.
Definition: gnunet-abd.c:91
static int is_private
Is record private.
Definition: gnunet-abd.c:157
#define GNUNET_TIME_UNIT_FOREVER_REL
Constant used to specify "forever".
static int forward
Search direction: forward.
Definition: gnunet-abd.c:162
static char * expiration
Credential TTL.
Definition: gnunet-abd.c:96
static char * issuer_key
Issuer pubkey string.
Definition: gnunet-abd.c:112
#define GNUNET_free_nz(ptr)
Wrapper around free.
static int collect
Collect mode.
Definition: gnunet-abd.c:132
static int create_ss
Create mode.
Definition: gnunet-abd.c:142
static int backward
Search direction: backward.
Definition: gnunet-abd.c:167
static char * subject
Subject pubkey string.
Definition: gnunet-abd.c:86
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_flag(char shortName, const char *name, const char *description, int *val)
Allow user to specify a flag (which internally means setting an integer to 1/GNUNET_YES/GNUNET_OK.
static void run(void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *c)
Main function that will be run.
Definition: gnunet-abd.c:742
int GNUNET_PROGRAM_run(int argc, char *const *argv, const char *binaryName, const char *binaryHelp, const struct GNUNET_GETOPT_CommandLineOption *options, GNUNET_PROGRAM_Main task, void *task_cls)
Run a standard GNUnet command startup sequence (initialize loggers and configuration, parse options).
Definition: program.c:367
int GNUNET_log_setup(const char *comp, const char *loglevel, const char *logfile)
Setup logging.
static int sign_ss
Create mode.
Definition: gnunet-abd.c:147
static int verify
Verify mode.
Definition: gnunet-abd.c:127
static char * ego_name
ego
Definition: gnunet-abd.c:117
static char * issuer_attr
Issuer attribute.
Definition: gnunet-abd.c:122
#define gettext_noop(String)
Definition: gettext.h:69
Here is the call graph for this function:

Variable Documentation

◆ cfg

const struct GNUNET_CONFIGURATION_Handle* cfg
static

Configuration we are using.

Definition at line 36 of file gnunet-abd.c.

Referenced by connect_check_run(), create_internal(), default_ego_cb(), GAS_plugin_init(), GCP_set_hello(), GNUNET_ABD_connect(), GNUNET_ARM_connect(), GNUNET_ATS_connectivity_init(), GNUNET_ATS_performance_init(), GNUNET_ATS_scheduling_init(), GNUNET_ATS_solvers_experimentation_load(), GNUNET_ATS_TEST_experimentation_load(), GNUNET_CLIENT_connect(), GNUNET_CONFIGURATION_create(), GNUNET_CONFIGURATION_parse_and_run(), GNUNET_CONNECTION_create_from_connect(), GNUNET_CONNECTION_create_from_connect_to_unixpath(), GNUNET_CONVERSATION_phone_create(), GNUNET_CORE_connect(), GNUNET_CRYPTO_eddsa_setup_key(), GNUNET_DATASTORE_connect(), GNUNET_DHT_connect(), GNUNET_DNS_connect(), GNUNET_FS_start(), GNUNET_GNS_connect(), GNUNET_IDENTITY_connect(), GNUNET_NAMECACHE_connect(), GNUNET_NAMESTORE_connect(), GNUNET_NAT_AUTO_test_start(), GNUNET_NAT_register(), GNUNET_NAT_test_start(), GNUNET_PEERINFO_connect(), GNUNET_RECLAIM_connect(), GNUNET_RESOLVER_connect(), GNUNET_RPS_connect(), GNUNET_SERVICE_run_(), GNUNET_SERVICE_start(), GNUNET_SET_listen(), GNUNET_STATISTICS_create(), GNUNET_TESTBED_controller_connect(), GNUNET_TESTBED_controller_start(), GNUNET_TESTBED_extract_config_(), GNUNET_TESTBED_peer_create(), GNUNET_TESTING_configuration_create_(), GNUNET_TESTING_service_run(), GNUNET_TIME_absolute_get_monotonic(), GNUNET_TRANSPORT_application_init(), GNUNET_TRANSPORT_communicator_connect(), GNUNET_TRANSPORT_core_connect(), GNUNET_TRANSPORT_core_get_mq(), GPI_plugins_load(), handle_link_controllers_result(), handle_peer_create(), handle_peer_reconfigure(), handle_slave_get_config(), id_connect_cb(), identity_cb(), libgnunet_plugin_block_revocation_init(), main_task(), parse_configuration_file(), parse_shared_services(), print_option(), run(), send_create(), tokenizer_cb(), and update_peer_config().

◆ ns

struct GNUNET_NAMESTORE_Handle* ns
static

◆ zone_pkey

struct GNUNET_CRYPTO_EcdsaPrivateKey zone_pkey
static

Private key for the our zone.

Definition at line 46 of file gnunet-abd.c.

Referenced by get_existing_record(), and store_cb().

◆ el

struct GNUNET_IDENTITY_EgoLookup* el
static

◆ abd

struct GNUNET_ABD_Handle* abd
static

Handle to Credential service.

Definition at line 56 of file gnunet-abd.c.

◆ timeout

struct GNUNET_TIME_Relative timeout
static

◆ verify_request

struct GNUNET_ABD_Request* verify_request
static

Handle to verify request.

Definition at line 66 of file gnunet-abd.c.

◆ collect_request

struct GNUNET_ABD_Request* collect_request
static

Handle to collect request.

Definition at line 71 of file gnunet-abd.c.

◆ tt

struct GNUNET_SCHEDULER_Task* tt
static

Task scheduled to handle timeout.

Definition at line 76 of file gnunet-abd.c.

Referenced by GNUNET_STRINGS_absolute_time_to_string().

◆ ret

int ret = 0
static

Return value of the commandline.

Definition at line 81 of file gnunet-abd.c.

Referenced by __attribute__(), access_handler_callback(), add_address_to_hello(), add_address_to_uri(), add_record(), add_services(), add_valid_peer(), address_generator(), address_to_regex(), append_port(), attr_in_claims_request(), bound_priority(), build_dns_query(), child_death_task(), cleanup_expired_records(), client_message_tokenizer_callback(), client_run(), close_all_files(), cmd_read(), compute_chk_offset(), compute_policy(), compute_rand_delay(), compute_scalar_product(), conversation_value_to_string(), convert_with_table(), copy_from_reader(), create_meter(), create_peer_ctx(), create_response(), db_read_whitelist(), decide_capacity(), delta_match(), demultiplex_with_cmc(), deserialize_fi_node(), deserialize_file_information(), do_delete_entry(), do_send(), do_transmit(), download_hostlist(), estimate_latency(), execute_get(), execute_select(), extract_fixed_blob(), extract_rsa_pub(), extract_rsa_sig(), extract_var_blob(), fh_reader(), fill_s_reply(), fork_and_exec(), GCP_2s(), GCP_iterate_indirect_paths(), GCP_iterate_paths(), GCP_iterate_paths_at(), GCT_handle_kx(), GCT_handle_kx_auth(), get_bootstrap_server(), get_cb(), get_delay_randomization(), get_latest(), get_next_free_ctn(), get_peer_ctx(), get_random_peer_from_peermap(), get_randomized_delay(), get_read_handle(), get_records_and_call_iterator(), get_serialization_file_name(), get_serialization_file_name_in_dir(), get_server_addresses(), get_target_peers(), get_transmit_delay(), get_update_information_directory(), get_valid_peers(), get_write_handle(), get_write_handle_in_dir(), getPRK(), gns_resolve_name(), GNUNET_ABD_delegates_get_size(), GNUNET_ABD_delegation_chain_get_size(), GNUNET_ABD_delegation_set_get_size(), GNUNET_ARM_request_service_start(), GNUNET_asprintf(), GNUNET_BANDWIDTH_tracker_get_delay(), GNUNET_BANDWIDTH_value_get_delay_for(), GNUNET_BANDWIDTH_value_init(), GNUNET_BIO_flush(), GNUNET_BIO_get_buffer_contents(), GNUNET_BIO_read_spec_commit(), GNUNET_BIO_write_spec_commit(), GNUNET_BLOCK_group_merge(), GNUNET_CADET_get_channel_cancel(), GNUNET_CADET_get_path_cancel(), GNUNET_CADET_list_peers_cancel(), GNUNET_CADET_list_tunnels_cancel(), GNUNET_CLIENT_test(), GNUNET_CONFIGURATION_deserialize(), GNUNET_CONFIGURATION_dup(), GNUNET_CONFIGURATION_get_value_time(), GNUNET_CONFIGURATION_get_value_yesno(), GNUNET_CONFIGURATION_iterate_value_filenames(), GNUNET_CONFIGURATION_parse(), GNUNET_CONFIGURATION_parse_and_run(), GNUNET_CONFIGURATION_write_diffs(), GNUNET_CONTAINER_heap_remove_node(), GNUNET_CONTAINER_heap_remove_root(), GNUNET_CONTAINER_meta_data_duplicate(), GNUNET_CONTAINER_meta_data_get_first_by_types(), GNUNET_CONTAINER_meta_data_get_serialized_size(), GNUNET_CONTAINER_multihashmap32_create(), GNUNET_CONTAINER_multihashmap32_remove_all(), GNUNET_CONTAINER_multihashmap_clear(), GNUNET_CONTAINER_multihashmap_remove_all(), GNUNET_CONTAINER_multipeermap_remove_all(), GNUNET_CONTAINER_multishortmap_remove_all(), GNUNET_CONTAINER_multiuuidmap_remove_all(), GNUNET_copy_message(), GNUNET_CRYPTO_ecdsa_private_key_derive(), GNUNET_CRYPTO_eddsa_key_from_file(), GNUNET_CRYPTO_hkdf(), GNUNET_CRYPTO_hkdf_v(), GNUNET_CRYPTO_kdf(), GNUNET_CRYPTO_random_permute(), GNUNET_CRYPTO_random_u32(), GNUNET_CRYPTO_random_u64(), GNUNET_CRYPTO_rsa_blind(), GNUNET_CRYPTO_rsa_private_key_cmp(), GNUNET_CRYPTO_rsa_private_key_create(), GNUNET_CRYPTO_rsa_public_key_cmp(), GNUNET_CRYPTO_rsa_public_key_encode(), GNUNET_CRYPTO_rsa_signature_cmp(), GNUNET_CRYPTO_rsa_signature_dup(), GNUNET_CRYPTO_rsa_signature_encode(), GNUNET_CRYPTO_rsa_unblind(), GNUNET_DATACACHE_create(), GNUNET_DISK_directory_create(), GNUNET_DISK_directory_create_for_file(), GNUNET_DISK_directory_scan(), GNUNET_DISK_directory_test(), GNUNET_DISK_file_close(), GNUNET_DISK_file_open(), GNUNET_DISK_file_read_non_blocking(), GNUNET_DISK_file_size(), GNUNET_DISK_file_test(), GNUNET_DISK_file_unmap(), GNUNET_DISK_file_write_blocking(), GNUNET_DISK_fn_read(), GNUNET_DISK_fn_write(), GNUNET_DISK_pipe(), GNUNET_DISK_pipe_close(), GNUNET_DISK_pipe_close_end(), GNUNET_DISK_pipe_detach_end(), GNUNET_DISK_pipe_from_fd(), GNUNET_DNSPARSER_bin_to_hex(), GNUNET_DNSPARSER_builder_add_query(), GNUNET_DNSPARSER_builder_add_soa(), GNUNET_DNSPARSER_builder_add_srv(), GNUNET_DNSPARSER_pack(), GNUNET_FRIENDS_write(), GNUNET_FRIENDS_write_stop(), GNUNET_FS_data_reader_file_(), GNUNET_FS_directory_builder_add(), GNUNET_FS_directory_builder_create(), GNUNET_FS_directory_builder_finish(), GNUNET_FS_file_information_create_empty_directory(), GNUNET_FS_file_information_create_from_file(), GNUNET_FS_file_information_create_from_reader(), GNUNET_FS_make_top(), GNUNET_FS_meta_data_suggest_filename(), GNUNET_FS_meta_data_test_for_directory(), GNUNET_FS_publish_start(), GNUNET_FS_search_make_status_(), GNUNET_FS_search_start(), GNUNET_FS_start(), GNUNET_FS_tree_calculate_block_size(), GNUNET_FS_tree_compute_iblock_size(), GNUNET_FS_uri_dup(), GNUNET_FS_uri_ksk_create_from_meta_data(), GNUNET_FS_uri_ksk_merge(), GNUNET_FS_uri_ksk_to_string_fancy(), GNUNET_FS_uri_loc_get_uri(), GNUNET_FS_uri_parse(), GNUNET_FS_uri_test_equal(), GNUNET_GNS_lookup_cancel(), GNUNET_GNS_lookup_with_tld_cancel(), GNUNET_GNSRECORD_number_to_typename(), GNUNET_GNSRECORD_pkey_to_zkey(), GNUNET_GNSRECORD_records_get_size(), GNUNET_GNSRECORD_typename_to_number(), GNUNET_GNSRECORD_value_to_string(), GNUNET_h2s_full(), GNUNET_HELLO_address_cmp(), GNUNET_HELLO_create(), GNUNET_HELLO_get_header(), GNUNET_HELLO_get_id(), GNUNET_HELLO_get_last_expiration(), GNUNET_HELLO_iterate_addresses(), GNUNET_HELLO_size(), GNUNET_HELPER_kill(), GNUNET_HELPER_wait(), GNUNET_i2s(), GNUNET_i2s2(), GNUNET_i2s_full(), GNUNET_JSON_from_rsa_public_key(), GNUNET_JSON_from_rsa_signature(), GNUNET_JSON_post_parser(), GNUNET_JSON_spec_absolute_time(), GNUNET_JSON_spec_absolute_time_nbo(), GNUNET_JSON_spec_bool(), GNUNET_JSON_spec_boolean(), GNUNET_JSON_spec_end(), GNUNET_JSON_spec_fixed(), GNUNET_JSON_spec_gnsrecord(), GNUNET_JSON_spec_int64(), GNUNET_JSON_spec_json(), GNUNET_JSON_spec_mark_optional(), GNUNET_JSON_spec_relative_time(), GNUNET_JSON_spec_rsa_public_key(), GNUNET_JSON_spec_rsa_signature(), GNUNET_JSON_spec_string(), GNUNET_JSON_spec_uint16(), GNUNET_JSON_spec_uint32(), GNUNET_JSON_spec_uint64(), GNUNET_JSON_spec_uint8(), GNUNET_JSON_spec_varsize(), GNUNET_LOAD_value_init(), GNUNET_MQ_env_combine_options(), GNUNET_MQ_inject_message(), GNUNET_MST_create(), GNUNET_MST_from_buffer(), GNUNET_MST_read(), GNUNET_MY_extract_result(), GNUNET_NAT_stun_handle_packet_(), GNUNET_NETWORK_socket_accept(), GNUNET_NETWORK_socket_bind(), GNUNET_NETWORK_socket_box_native(), GNUNET_NETWORK_socket_close(), GNUNET_NETWORK_socket_connect(), GNUNET_NETWORK_socket_create(), GNUNET_NETWORK_socket_disable_corking(), GNUNET_NETWORK_socket_getsockopt(), GNUNET_NETWORK_socket_listen(), GNUNET_NETWORK_socket_recv(), GNUNET_NETWORK_socket_recvfrom(), GNUNET_NETWORK_socket_send(), GNUNET_NETWORK_socket_sendto(), GNUNET_NETWORK_socket_setsockopt(), GNUNET_NETWORK_socket_shutdown(), GNUNET_NETWORK_test_pf(), GNUNET_NETWORK_test_port_free(), GNUNET_NETWORK_unix_precheck(), GNUNET_OS_process_kill(), GNUNET_OS_process_wait(), GNUNET_OS_start_process(), GNUNET_OS_start_process_va(), GNUNET_PEER_intern(), GNUNET_PLUGIN_load(), GNUNET_PLUGIN_unload(), GNUNET_PQ_eval_prepared_multi_select(), GNUNET_PQ_exec_prepared(), GNUNET_PQ_extract_result(), GNUNET_PQ_prepare_statements(), GNUNET_PQ_reconnect(), GNUNET_PQ_run_sql(), GNUNET_PROGRAM_run2(), gnunet_read(), GNUNET_RECLAIM_attestation_get_attributes(), GNUNET_RECLAIM_attestation_get_issuer(), GNUNET_RECLAIM_attestation_number_to_typename(), GNUNET_RECLAIM_attestation_typename_to_number(), GNUNET_RECLAIM_attestation_value_to_string(), GNUNET_RECLAIM_attribute_number_to_typename(), GNUNET_RECLAIM_attribute_typename_to_number(), GNUNET_RECLAIM_attribute_value_to_string(), GNUNET_RECLAIM_JSON_spec_claim(), GNUNET_RECLAIM_JSON_spec_claim_attest(), GNUNET_RECLAIM_JSON_spec_ticket(), GNUNET_RESOLVER_local_fqdn_get(), GNUNET_REVOCATION_pow_round(), GNUNET_SCHEDULER_add_now_with_lifeness(), GNUNET_SCHEDULER_cancel(), GNUNET_SCHEDULER_get_load(), GNUNET_SERVER_mst_create(), GNUNET_SERVER_mst_receive(), GNUNET_SERVICE_run_(), GNUNET_SIGNAL_handler_install(), GNUNET_snprintf(), GNUNET_SQ_prepare(), GNUNET_STRINGS_base64_decode(), GNUNET_STRINGS_base64_encode(), GNUNET_STRINGS_base64url_decode(), GNUNET_STRINGS_byte_size_fancy(), GNUNET_STRINGS_conv(), GNUNET_STRINGS_fancy_time_to_relative(), GNUNET_STRINGS_parse_ipv6_policy(), GNUNET_STRINGS_string_to_data(), GNUNET_STRINGS_to_address_ipv6(), GNUNET_TESTBED_extract_config_(), GNUNET_TESTBED_test_run(), GNUNET_TESTBED_underlay_construct_(), GNUNET_TESTING_get_testname_from_underscore(), GNUNET_TESTING_peer_wait(), GNUNET_TESTING_reserve_port(), GNUNET_TIME_absolute_add(), GNUNET_TIME_absolute_get(), GNUNET_TIME_absolute_get_difference(), GNUNET_TIME_absolute_get_duration(), GNUNET_TIME_absolute_get_remaining(), GNUNET_TIME_absolute_hton(), GNUNET_TIME_absolute_ntoh(), GNUNET_TIME_absolute_subtract(), GNUNET_TIME_calculate_eta(), GNUNET_TIME_relative_add(), GNUNET_TIME_relative_divide(), GNUNET_TIME_relative_hton(), GNUNET_TIME_relative_multiply(), GNUNET_TIME_relative_ntoh(), GNUNET_TIME_relative_saturating_multiply(), GNUNET_TIME_relative_subtract(), GNUNET_TIME_relative_to_absolute(), GNUNET_TIME_year_to_time(), GNUNET_TRANSPORT_TESTING_get_config_name(), GNUNET_TRANSPORT_TESTING_get_test_name(), GNUNET_TRANSPORT_TESTING_get_test_plugin_name(), GNUNET_TRANSPORT_TESTING_main_(), GNUNET_xmalloc_(), GNUNET_xmemdup_(), GNUNET_xnew_array_2d_(), GNUNET_xnew_array_3d_(), GSC_TYPEMAP_extend(), GSC_TYPEMAP_get_from_message(), GST_neighbours_calculate_receive_delay(), GST_receive_callback(), GST_validation_handle_ping(), habitability_check(), handle_lookup_block(), handle_request_connection_reversal(), handle_revoke_message(), handle_verify_result(), http_common_plugin_address_pretty_printer(), inflate_data(), insert_in_view(), ipv4_to_regex(), ipv6_to_regex(), iterator_cb(), kwait(), libgnunet_plugin_transport_tcp_init(), load_cert_from_file(), load_key_from_file(), load_plugin(), load_quota(), mac_set(), main(), maint_child_death(), make_peer(), make_serialization_file_name(), make_serialization_file_name_in_dir(), make_udp_socket(), monitor_iteration_next(), mst_create(), mst_receive(), mysql_plugin_estimate_size(), mysql_plugin_get_keys(), namecache_sqlite_lookup_block(), namestore_postgres_store_records(), namestore_sqlite_store_records(), nibble_to_regex(), notify_connect(), notify_send_probe(), num_to_regex(), ogg_demux_and_decode(), op_get_element(), open_socket(), os_get_exec_path(), os_get_gnunet_path(), parent_control_handler(), parse_configuration_file(), parse_hello_uri(), parse_name(), parse_quota(), pass_plaintext_to_core(), peerstore_sqlite_delete_records(), percent_decode_keyword(), perform_dht_put(), port_to_regex(), postgres_plugin_estimate_size(), postgres_plugin_put(), postgres_plugin_remove_key(), prepare_daemon(), process_data(), process_incoming(), process_payload(), process_status(), queue(), read_from_file(), receive_ready(), recursive_dns_resolution(), repl_proc(), reply_to_dns(), reservations_reserve(), resolver_lookup_get_next_label(), resume_client_receive(), rfn_noncontested(), run(), run_zbar(), s2i_full(), secret_ready_cb(), select_del(), select_read_cb(), send_client_element(), serve_main_page(), server_get_addresses(), server_schedule(), service_client_recv(), service_manage_result_cb(), set_result_cb(), setup_db(), setup_service(), sigchld_handler(), sockaddr_to_udpaddr_string(), sqlite_plugin_get_keys(), sqlite_plugin_put(), start_process(), store_and_free_entries(), store_peer_presistently_iterator(), store_valid_peers(), stun_read_task(), test_service_configuration(), test_wlan_interface(), tokenizer_cb(), translate_dot_plus(), transmit_content(), transmit_ping_if_allowed(), transmit_ready(), unix_plugin_address_pretty_printer(), unix_plugin_do_read(), updateUsage(), uri_chk_parse(), uri_chk_to_string(), uri_ksk_parse(), uri_ksk_to_string(), uri_loc_to_string(), uri_sks_parse(), uri_sks_to_string(), wlan_plugin_address_pretty_printer(), write_data(), and write_wav_header().

◆ subject

char* subject
static

Subject pubkey string.

Definition at line 86 of file gnunet-abd.c.

Referenced by GNUNET_ABD_delegate_issue(), main(), OIDC_id_token_new(), run(), sign_cb(), and store_cb().

◆ subject_delegate

char* subject_delegate
static

Subject delegate string.

Definition at line 91 of file gnunet-abd.c.

Referenced by main(), and run().

◆ expiration

char* expiration
static

◆ subject_pkey

struct GNUNET_CRYPTO_EcdsaPublicKey subject_pkey

◆ issuer_pkey

struct GNUNET_CRYPTO_EcdsaPublicKey issuer_pkey

Issuer key.

Definition at line 106 of file gnunet-abd.c.

Referenced by GNUNET_ABD_delegate_from_string(), GNUNET_ABD_delegate_to_string(), identity_cb(), and run().

◆ issuer_key

char* issuer_key
static

Issuer pubkey string.

Definition at line 112 of file gnunet-abd.c.

Referenced by GNUNET_ABD_collect(), GNUNET_ABD_verify(), handle_verify_result(), identity_cb(), main(), and run().

◆ ego_name

char* ego_name
static

ego

Definition at line 117 of file gnunet-abd.c.

Referenced by identity_cb(), main(), run(), and sign_cb().

◆ issuer_attr

char* issuer_attr
static

Issuer attribute.

Definition at line 122 of file gnunet-abd.c.

Referenced by identity_cb(), main(), run(), and sign_cb().

◆ verify

int verify
static

Verify mode.

Definition at line 127 of file gnunet-abd.c.

Referenced by check_ssl_certificate(), main(), and run().

◆ collect

int collect
static

Collect mode.

Definition at line 132 of file gnunet-abd.c.

Referenced by identity_cb(), main(), and run().

◆ create_is

int create_is
static

Create mode.

Definition at line 137 of file gnunet-abd.c.

Referenced by main(), and run().

◆ create_ss

int create_ss
static

Create mode.

Definition at line 142 of file gnunet-abd.c.

Referenced by main(), and run().

◆ sign_ss

int sign_ss
static

Create mode.

Definition at line 147 of file gnunet-abd.c.

Referenced by main(), and run().

◆ import

char* import
static

Signed issue credentials.

Definition at line 152 of file gnunet-abd.c.

◆ is_private

int is_private
static

Is record private.

Definition at line 157 of file gnunet-abd.c.

Referenced by get_existing_record(), and main().

◆ forward

int forward
static

Search direction: forward.

Definition at line 162 of file gnunet-abd.c.

Referenced by forward_overlay_connect(), main(), and run().

◆ backward

int backward
static

Search direction: backward.

Definition at line 167 of file gnunet-abd.c.

Referenced by main(), and run().

◆ direction

enum GNUNET_ABD_AlgoDirectionFlags direction = 0

API enum, filled and passed for collect/verify.

Definition at line 172 of file gnunet-abd.c.

Referenced by check_get(), handle_get(), identity_cb(), and run().

◆ add_qe

struct GNUNET_NAMESTORE_QueueEntry* add_qe
static

Queue entry for the 'add' operation.

Definition at line 177 of file gnunet-abd.c.

◆ data

void* data
static

Value in binary format.

Definition at line 182 of file gnunet-abd.c.

Referenced by get_existing_record(), and store_cb().

◆ data_size

size_t data_size
static

◆ type

uint32_t type
static

Type string converted to DNS type value.

Definition at line 192 of file gnunet-abd.c.

Referenced by get_existing_record(), run(), and store_cb().

◆ typestring

char* typestring
static

Type of the record to add/remove, NULL to remove all.

Definition at line 197 of file gnunet-abd.c.

Referenced by display_records_from_block(), and store_cb().

◆ etime

uint64_t etime
static

Expiration string converted to numeric value.

Definition at line 201 of file gnunet-abd.c.

Referenced by generate_gns_certificate(), get_existing_record(), and store_cb().

◆ etime_is_rel

int etime_is_rel = GNUNET_SYSERR
static

Is expiration time relative or absolute time?

Definition at line 206 of file gnunet-abd.c.

Referenced by get_existing_record(), and store_cb().

◆ key_length

const int key_length = 52
static

Fixed size of the public/private keys.

Definition at line 211 of file gnunet-abd.c.

Referenced by sign_cb().

◆ record_label

char* record_label
static

Record label for storing delegations.

Definition at line 216 of file gnunet-abd.c.

Referenced by run(), and store_cb().