GNUnet  0.11.x
Functions
json_reclaim.c File Reference
#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_json_lib.h"
#include "gnunet_reclaim_lib.h"
#include "gnunet_reclaim_service.h"
Include dependency graph for json_reclaim.c:

Go to the source code of this file.

Functions

static int parse_attr (void *cls, json_t *root, struct GNUNET_JSON_Specification *spec)
 Parse given JSON object to a claim. More...
 
static void clean_attr (void *cls, struct GNUNET_JSON_Specification *spec)
 Cleanup data left from parsing RSA public key. More...
 
struct GNUNET_JSON_Specification GNUNET_RECLAIM_JSON_spec_attribute (struct GNUNET_RECLAIM_Attribute **attr)
 JSON Specification for Reclaim claims. More...
 
static int parse_ticket (void *cls, json_t *root, struct GNUNET_JSON_Specification *spec)
 Parse given JSON object to a ticket. More...
 
static void clean_ticket (void *cls, struct GNUNET_JSON_Specification *spec)
 Cleanup data left from parsing RSA public key. More...
 
struct GNUNET_JSON_Specification GNUNET_RECLAIM_JSON_spec_ticket (struct GNUNET_RECLAIM_Ticket **ticket)
 JSON Specification for Reclaim tickets. More...
 
static int parse_credential (void *cls, json_t *root, struct GNUNET_JSON_Specification *spec)
 Parse given JSON object to a credential claim. More...
 
static void clean_credential (void *cls, struct GNUNET_JSON_Specification *spec)
 Cleanup data left from parsing RSA public key. More...
 
struct GNUNET_JSON_Specification GNUNET_RECLAIM_JSON_spec_credential (struct GNUNET_RECLAIM_Credential **cred)
 JSON Specification for credential claims. More...
 

Function Documentation

◆ parse_attr()

static int parse_attr ( void *  cls,
json_t *  root,
struct GNUNET_JSON_Specification spec 
)
static

Parse given JSON object to a claim.

Parameters
clsclosure, NULL
rootthe json object representing data
specwhere to write the data
Returns
GNUNET_OK upon successful parsing; GNUNET_SYSERR upon error

Definition at line 42 of file json_reclaim.c.

References GNUNET_RECLAIM_Attribute::credential, data, data_size, GNUNET_assert, GNUNET_ERROR_TYPE_DEBUG, GNUNET_ERROR_TYPE_ERROR, GNUNET_free, GNUNET_log, GNUNET_OK, GNUNET_RECLAIM_attribute_new(), GNUNET_RECLAIM_attribute_string_to_value(), GNUNET_RECLAIM_attribute_typename_to_number(), GNUNET_STRINGS_string_to_data(), GNUNET_SYSERR, GNUNET_RECLAIM_Attribute::id, GNUNET_JSON_Specification::ptr, type, and type_str.

Referenced by GNUNET_RECLAIM_JSON_spec_attribute().

43 {
44  struct GNUNET_RECLAIM_Attribute *attr;
45  const char *name_str = NULL;
46  const char *val_str = NULL;
47  const char *type_str = NULL;
48  const char *id_str = NULL;
49  const char *cred_str = NULL;
50  const char *flag_str = NULL;
51  char *data;
52  int unpack_state;
53  uint32_t type;
54  size_t data_size;
55 
56  GNUNET_assert (NULL != root);
57 
58  if (! json_is_object (root))
59  {
61  "Error json is not array nor object!\n");
62  return GNUNET_SYSERR;
63  }
64  // interpret single attribute
65  unpack_state = json_unpack (root,
66  "{s:s, s?s, s?s, s:s, s:s, s?s!}",
67  "name",
68  &name_str,
69  "id",
70  &id_str,
71  "credential",
72  &cred_str,
73  "type",
74  &type_str,
75  "value",
76  &val_str,
77  "flag",
78  &flag_str);
79  if ((0 != unpack_state) || (NULL == name_str) || (NULL == val_str) ||
80  (NULL == type_str))
81  {
83  "Error json object has a wrong format!\n");
84  return GNUNET_SYSERR;
85  }
87  if (GNUNET_SYSERR ==
89  val_str,
90  (void **) &data,
91  &data_size)))
92  {
93  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Attribute value invalid!\n");
94  return GNUNET_SYSERR;
95  }
96  attr = GNUNET_RECLAIM_attribute_new (name_str, NULL,
97  type, data, data_size);
98  GNUNET_free (data);
99  if ((NULL != cred_str) && (0 != strlen (cred_str)))
100  {
102  strlen (cred_str),
103  &attr->credential,
104  sizeof(attr->credential));
105  }
106  if ((NULL == id_str) || (0 == strlen (id_str)))
107  memset (&attr->id, 0, sizeof (attr->id));
108  else
110  strlen (id_str),
111  &attr->id,
112  sizeof(attr->id));
113 
114  *(struct GNUNET_RECLAIM_Attribute **) spec->ptr = attr;
115  return GNUNET_OK;
116 }
struct GNUNET_RECLAIM_Attribute * GNUNET_RECLAIM_attribute_new(const char *attr_name, const struct GNUNET_RECLAIM_Identifier *credential, uint32_t type, const void *data, size_t data_size)
Create a new attribute claim.
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.
struct GNUNET_RECLAIM_Identifier credential
Referenced ID of credential (may be GNUNET_RECLAIM_ID_ZERO if self-creded)
uint32_t GNUNET_RECLAIM_attribute_typename_to_number(const char *typename)
Convert a type name to the corresponding number.
struct GNUNET_RECLAIM_Identifier id
ID.
int GNUNET_RECLAIM_attribute_string_to_value(uint32_t type, const char *s, void **data, size_t *data_size)
Convert human-readable version of a 'claim' of an attribute to the binary representation.
static char * type_str
Attribute type.
void * ptr
Pointer, details specific to the parser.
#define GNUNET_log(kind,...)
enum GNUNET_TESTBED_UnderlayLinkModelType type
the type of this model
uint32_t data
The data value.
int GNUNET_STRINGS_string_to_data(const char *enc, size_t enclen, void *out, size_t out_size)
Convert CrockfordBase32 encoding back to data.
Definition: strings.c:972
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ clean_attr()

static void clean_attr ( void *  cls,
struct GNUNET_JSON_Specification spec 
)
static

Cleanup data left from parsing RSA public key.

Parameters
clsclosure, NULL
[out]specwhere to free the data

Definition at line 126 of file json_reclaim.c.

References GNUNET_free, and GNUNET_JSON_Specification::ptr.

Referenced by GNUNET_RECLAIM_JSON_spec_attribute().

127 {
128  struct GNUNET_RECLAIM_Attribute **attr;
129 
130  attr = (struct GNUNET_RECLAIM_Attribute **) spec->ptr;
131  if (NULL != *attr)
132  {
133  GNUNET_free (*attr);
134  *attr = NULL;
135  }
136 }
void * ptr
Pointer, details specific to the parser.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the caller graph for this function:

◆ GNUNET_RECLAIM_JSON_spec_attribute()

struct GNUNET_JSON_Specification GNUNET_RECLAIM_JSON_spec_attribute ( struct GNUNET_RECLAIM_Attribute **  attr)

JSON Specification for Reclaim claims.

Parameters
ticketstruct of GNUNET_RECLAIM_Attribute to fill
Returns
JSON Specification

Definition at line 146 of file json_reclaim.c.

References clean_attr(), parse_attr(), GNUNET_JSON_Specification::parser, and ret.

Referenced by add_attribute_cont().

147 {
148  struct GNUNET_JSON_Specification ret = { .parser = &parse_attr,
149  .cleaner = &clean_attr,
150  .cls = NULL,
151  .field = NULL,
152  .ptr = attr,
153  .ptr_size = 0,
154  .size_ptr = NULL };
155 
156  *attr = NULL;
157  return ret;
158 }
static int ret
Return value of the commandline.
Definition: gnunet-abd.c:81
Entry in parser specification for GNUNET_JSON_parse().
static void clean_attr(void *cls, struct GNUNET_JSON_Specification *spec)
Cleanup data left from parsing RSA public key.
Definition: json_reclaim.c:126
static int parse_attr(void *cls, json_t *root, struct GNUNET_JSON_Specification *spec)
Parse given JSON object to a claim.
Definition: json_reclaim.c:42
Here is the call graph for this function:
Here is the caller graph for this function:

◆ parse_ticket()

static int parse_ticket ( void *  cls,
json_t *  root,
struct GNUNET_JSON_Specification spec 
)
static

Parse given JSON object to a ticket.

Parameters
clsclosure, NULL
rootthe json object representing data
specwhere to write the data
Returns
GNUNET_OK upon successful parsing; GNUNET_SYSERR upon error

Definition at line 170 of file json_reclaim.c.

References GNUNET_RECLAIM_Ticket::audience, GNUNET_assert, GNUNET_ERROR_TYPE_DEBUG, GNUNET_ERROR_TYPE_ERROR, GNUNET_free, GNUNET_log, GNUNET_new, GNUNET_OK, GNUNET_STRINGS_string_to_data(), GNUNET_SYSERR, GNUNET_RECLAIM_Ticket::identity, GNUNET_JSON_Specification::ptr, GNUNET_RECLAIM_Ticket::rnd, and ticket.

Referenced by GNUNET_RECLAIM_JSON_spec_ticket().

171 {
173  const char *rnd_str;
174  const char *aud_str;
175  const char *id_str;
176  int unpack_state;
177 
178  GNUNET_assert (NULL != root);
179 
180  if (! json_is_object (root))
181  {
183  "Error json is not array nor object!\n");
184  return GNUNET_SYSERR;
185  }
186  // interpret single ticket
187  unpack_state = json_unpack (root,
188  "{s:s, s:s, s:s!}",
189  "rnd",
190  &rnd_str,
191  "audience",
192  &aud_str,
193  "issuer",
194  &id_str);
195  if (0 != unpack_state)
196  {
198  "Error json object has a wrong format!\n");
199  return GNUNET_SYSERR;
200  }
201  ticket = GNUNET_new (struct GNUNET_RECLAIM_Ticket);
203  strlen (rnd_str),
204  &ticket->rnd,
205  sizeof(ticket->rnd)))
206  {
207  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Rnd invalid\n");
208  GNUNET_free (ticket);
209  return GNUNET_SYSERR;
210  }
211  if (GNUNET_OK !=
213  strlen (id_str),
214  &ticket->identity,
215  sizeof(ticket->identity)))
216  {
217  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Identity invalid\n");
218  GNUNET_free (ticket);
219  return GNUNET_SYSERR;
220  }
221 
222  if (GNUNET_OK !=
224  strlen (aud_str),
225  &ticket->audience,
226  sizeof(ticket->audience)))
227  {
228  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Audience invalid\n");
229  GNUNET_free (ticket);
230  return GNUNET_SYSERR;
231  }
232 
233  *(struct GNUNET_RECLAIM_Ticket **) spec->ptr = ticket;
234  return GNUNET_OK;
235 }
The authorization ticket.
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
#define GNUNET_new(type)
Allocate a struct or union of the given type.
static struct GNUNET_RECLAIM_Ticket ticket
Ticket to consume.
struct GNUNET_IDENTITY_PublicKey identity
The ticket issuer (= the user)
void * ptr
Pointer, details specific to the parser.
struct GNUNET_RECLAIM_Identifier rnd
The ticket random identifier.
struct GNUNET_IDENTITY_PublicKey audience
The ticket audience (= relying party)
#define GNUNET_log(kind,...)
int GNUNET_STRINGS_string_to_data(const char *enc, size_t enclen, void *out, size_t out_size)
Convert CrockfordBase32 encoding back to data.
Definition: strings.c:972
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ clean_ticket()

static void clean_ticket ( void *  cls,
struct GNUNET_JSON_Specification spec 
)
static

Cleanup data left from parsing RSA public key.

Parameters
clsclosure, NULL
[out]specwhere to free the data

Definition at line 245 of file json_reclaim.c.

References GNUNET_free, GNUNET_JSON_Specification::ptr, and ticket.

Referenced by GNUNET_RECLAIM_JSON_spec_ticket().

246 {
247  struct GNUNET_RECLAIM_Ticket **ticket;
248 
249  ticket = (struct GNUNET_RECLAIM_Ticket **) spec->ptr;
250  if (NULL != *ticket)
251  {
252  GNUNET_free (*ticket);
253  *ticket = NULL;
254  }
255 }
The authorization ticket.
static struct GNUNET_RECLAIM_Ticket ticket
Ticket to consume.
void * ptr
Pointer, details specific to the parser.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the caller graph for this function:

◆ GNUNET_RECLAIM_JSON_spec_ticket()

struct GNUNET_JSON_Specification GNUNET_RECLAIM_JSON_spec_ticket ( struct GNUNET_RECLAIM_Ticket **  ticket)

JSON Specification for Reclaim tickets.

Parameters
ticketstruct of GNUNET_RECLAIM_Ticket to fill
Returns
JSON Specification

Definition at line 265 of file json_reclaim.c.

References clean_ticket(), parse_ticket(), GNUNET_JSON_Specification::parser, ret, and ticket.

Referenced by consume_ticket_cont(), and revoke_ticket_cont().

266 {
267  struct GNUNET_JSON_Specification ret = { .parser = &parse_ticket,
268  .cleaner = &clean_ticket,
269  .cls = NULL,
270  .field = NULL,
271  .ptr = ticket,
272  .ptr_size = 0,
273  .size_ptr = NULL };
274 
275  *ticket = NULL;
276  return ret;
277 }
static int ret
Return value of the commandline.
Definition: gnunet-abd.c:81
Entry in parser specification for GNUNET_JSON_parse().
static struct GNUNET_RECLAIM_Ticket ticket
Ticket to consume.
static int parse_ticket(void *cls, json_t *root, struct GNUNET_JSON_Specification *spec)
Parse given JSON object to a ticket.
Definition: json_reclaim.c:170
static void clean_ticket(void *cls, struct GNUNET_JSON_Specification *spec)
Cleanup data left from parsing RSA public key.
Definition: json_reclaim.c:245
Here is the call graph for this function:
Here is the caller graph for this function:

◆ parse_credential()

static int parse_credential ( void *  cls,
json_t *  root,
struct GNUNET_JSON_Specification spec 
)
static

Parse given JSON object to a credential claim.

Parameters
clsclosure, NULL
rootthe json object representing data
specwhere to write the data
Returns
GNUNET_OK upon successful parsing; GNUNET_SYSERR upon error

Definition at line 289 of file json_reclaim.c.

References data, data_size, GNUNET_assert, GNUNET_ERROR_TYPE_ERROR, GNUNET_free, GNUNET_log, GNUNET_OK, GNUNET_RECLAIM_credential_new(), GNUNET_RECLAIM_credential_string_to_value(), GNUNET_RECLAIM_credential_typename_to_number(), GNUNET_STRINGS_string_to_data(), GNUNET_SYSERR, GNUNET_RECLAIM_Credential::id, GNUNET_JSON_Specification::ptr, type, and type_str.

Referenced by GNUNET_RECLAIM_JSON_spec_credential().

290 {
291  struct GNUNET_RECLAIM_Credential *cred;
292  const char *name_str = NULL;
293  const char *val_str = NULL;
294  const char *type_str = NULL;
295  const char *id_str = NULL;
296  char *data;
297  int unpack_state;
298  uint32_t type;
299  size_t data_size;
300 
301  GNUNET_assert (NULL != root);
302 
303  if (! json_is_object (root))
304  {
306  "Error json is not array nor object!\n");
307  return GNUNET_SYSERR;
308  }
309  // interpret single attribute
310  unpack_state = json_unpack (root,
311  "{s:s, s?s, s:s, s:s!}",
312  "name",
313  &name_str,
314  "id",
315  &id_str,
316  "type",
317  &type_str,
318  "value",
319  &val_str);
320  if ((0 != unpack_state) || (NULL == name_str) || (NULL == val_str) ||
321  (NULL == type_str))
322  {
324  "Error json object has a wrong format!\n");
325  return GNUNET_SYSERR;
326  }
328  if (GNUNET_SYSERR ==
330  val_str,
331  (void **) &data,
332  &data_size)))
333  {
334  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Credential value invalid!\n");
335  return GNUNET_SYSERR;
336  }
337  cred = GNUNET_RECLAIM_credential_new (name_str, type, data, data_size);
338  GNUNET_free (data);
339  if ((NULL == id_str) || (0 == strlen (id_str)))
340  memset (&cred->id, 0, sizeof (cred->id));
341  else
343  strlen (id_str),
344  &cred->id,
345  sizeof(cred->id));
346 
347  *(struct GNUNET_RECLAIM_Credential **) spec->ptr = cred;
348  return GNUNET_OK;
349 }
uint32_t GNUNET_RECLAIM_credential_typename_to_number(const char *typename)
Convert an credential type name to the corresponding number.
struct GNUNET_RECLAIM_Identifier id
ID.
int GNUNET_RECLAIM_credential_string_to_value(uint32_t type, const char *s, void **data, size_t *data_size)
Convert human-readable version of a 'claim' of an credential to the binary representation.
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.
static char * type_str
Attribute type.
void * ptr
Pointer, details specific to the parser.
#define GNUNET_log(kind,...)
enum GNUNET_TESTBED_UnderlayLinkModelType type
the type of this model
struct GNUNET_RECLAIM_Credential * GNUNET_RECLAIM_credential_new(const char *name, uint32_t type, const void *data, size_t data_size)
Create a new credential.
uint32_t data
The data value.
int GNUNET_STRINGS_string_to_data(const char *enc, size_t enclen, void *out, size_t out_size)
Convert CrockfordBase32 encoding back to data.
Definition: strings.c:972
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ clean_credential()

static void clean_credential ( void *  cls,
struct GNUNET_JSON_Specification spec 
)
static

Cleanup data left from parsing RSA public key.

Parameters
clsclosure, NULL
[out]specwhere to free the data

Definition at line 359 of file json_reclaim.c.

References GNUNET_free, and GNUNET_JSON_Specification::ptr.

Referenced by GNUNET_RECLAIM_JSON_spec_credential().

360 {
361  struct GNUNET_RECLAIM_Credential **attr;
362 
363  attr = (struct GNUNET_RECLAIM_Credential **) spec->ptr;
364  if (NULL != *attr)
365  {
366  GNUNET_free (*attr);
367  *attr = NULL;
368  }
369 }
void * ptr
Pointer, details specific to the parser.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the caller graph for this function:

◆ GNUNET_RECLAIM_JSON_spec_credential()

struct GNUNET_JSON_Specification GNUNET_RECLAIM_JSON_spec_credential ( struct GNUNET_RECLAIM_Credential **  cred)

JSON Specification for credential claims.

JSON Specification for credentials.

Parameters
attrstruct of GNUNET_RECLAIM_Credential to fill
Returns
JSON Specification

Definition at line 379 of file json_reclaim.c.

References clean_credential(), parse_credential(), GNUNET_JSON_Specification::parser, and ret.

Referenced by add_credential_cont().

381 {
382  struct GNUNET_JSON_Specification ret = { .parser = &parse_credential,
383  .cleaner = &clean_credential,
384  .cls = NULL,
385  .field = NULL,
386  .ptr = cred,
387  .ptr_size = 0,
388  .size_ptr = NULL };
389 
390  *cred = NULL;
391  return ret;
392 }
static int ret
Return value of the commandline.
Definition: gnunet-abd.c:81
Entry in parser specification for GNUNET_JSON_parse().
static void clean_credential(void *cls, struct GNUNET_JSON_Specification *spec)
Cleanup data left from parsing RSA public key.
Definition: json_reclaim.c:359
static int parse_credential(void *cls, json_t *root, struct GNUNET_JSON_Specification *spec)
Parse given JSON object to a credential claim.
Definition: json_reclaim.c:289
Here is the call graph for this function:
Here is the caller graph for this function: