GNUnet 0.22.2
did_core.h File Reference

Core functionality for GNUNET Decentralized Identifier. More...

#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_namestore_service.h"
#include "gnunet_gns_service.h"
#include "gnunet_gnsrecord_lib.h"
#include "gnunet_identity_service.h"
#include "did_helper.h"
#include "jansson.h"
Include dependency graph for did_core.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define DID_DOCUMENT_LABEL   "didd"
 
#define DID_DOCUMENT_DEFAULT_EXPIRATION_TIME   "365d"
 

Typedefs

typedef void DID_resolve_callback(enum GNUNET_GenericReturnValue status, const char *did_document, void *cls)
 Signature of a callback function that is called after a did has been resolved. More...
 
typedef void DID_action_callback(enum GNUNET_GenericReturnValue status, void *cls)
 Signature of a callback function that is called after a did has been removed status = 0 if action was successful status = 1 if action failed. More...
 

Functions

enum GNUNET_GenericReturnValue DID_resolve (const char *did, struct GNUNET_GNS_Handle *gns_handle, DID_resolve_callback *cont, void *cls)
 Resolve a DID. More...
 
enum GNUNET_GenericReturnValue DID_remove (const struct GNUNET_IDENTITY_Ego *ego, struct GNUNET_CONFIGURATION_Handle *cfg_handle, struct GNUNET_NAMESTORE_Handle *namestore_handle, DID_action_callback *cont, void *cls)
 Removes the DID Document from namestore. More...
 
enum GNUNET_GenericReturnValue DID_create (const struct GNUNET_IDENTITY_Ego *ego, const char *did_document, const struct GNUNET_TIME_Relative *expire_time, struct GNUNET_NAMESTORE_Handle *namestore_handle, DID_action_callback *cont, void *cls)
 Creates a DID and saves DID Document in Namestore. More...
 
enum GNUNET_GenericReturnValue DID_replace (struct GNUNET_IDENTITY_Ego *ego, char *did_document, const struct GNUNET_CONFIGURATION_Handle *cfg_handle, struct GNUNET_IDENTITY_Handle *identity_handle, struct GNUNET_NAMESTORE_Handle *namestore_handle, DID_action_callback *cont, void *cls)
 Replace the DID Document of a DID. More...
 

Detailed Description

Core functionality for GNUNET Decentralized Identifier.

Author
Tristan Schwieren

Definition in file did_core.h.

Macro Definition Documentation

◆ DID_DOCUMENT_LABEL

#define DID_DOCUMENT_LABEL   "didd"

Definition at line 37 of file did_core.h.

◆ DID_DOCUMENT_DEFAULT_EXPIRATION_TIME

#define DID_DOCUMENT_DEFAULT_EXPIRATION_TIME   "365d"

Definition at line 38 of file did_core.h.

Typedef Documentation

◆ DID_resolve_callback

typedef void DID_resolve_callback(enum GNUNET_GenericReturnValue status, const char *did_document, void *cls)

Signature of a callback function that is called after a did has been resolved.

did_document contains an Error message if DID can not be resolved. Calls the given callback function with the resolved DID Document and the given closure. If the did can not be resolved did_document is NULL.

Parameters
statusEquals GNUNET_OK if DID Document has been resolved
did_documentresolved DID Document
clspreviously given closure

Definition at line 50 of file did_core.h.

◆ DID_action_callback

typedef void DID_action_callback(enum GNUNET_GenericReturnValue status, void *cls)

Signature of a callback function that is called after a did has been removed status = 0 if action was successful status = 1 if action failed.

Parameters
statusstatus of the perfermormed action.
clspreviously given closure

Definition at line 62 of file did_core.h.

Function Documentation

◆ DID_resolve()

enum GNUNET_GenericReturnValue DID_resolve ( const char *  did,
struct GNUNET_GNS_Handle gns_handle,
DID_resolve_callback cont,
void *  cls 
)

Resolve a DID.

Calls the given callback function with the resolved DID Document and the given closure. If the did can not be resolved did_document is NULL.

Parameters
didDID that is resolved
gns_handlepointer to gns handle.
contcallback function
clsclosure

Calls the given callback function with the resolved DID Document and the given closure. If the did can not be resolved did_document is NULL.

Parameters
didDID that is resolve

Definition at line 89 of file did_core.c.

93{
95 struct DID_resolve_return *cls_gns_lookup_cb;
96
97 // did, gns_handle and cont must me set
98 if ((did == NULL) || (gns_handle == NULL) || (cont == NULL))
99 return GNUNET_NO;
100
102 return GNUNET_NO;
103
104 // Create closure for lookup callback
105 cls_gns_lookup_cb = GNUNET_malloc (sizeof(struct DID_resolve_return));
106 cls_gns_lookup_cb->cb = cont;
107 cls_gns_lookup_cb->cls = cls;
108
111 &pkey,
115 cls_gns_lookup_cb);
116
117 return GNUNET_OK;
118}
static void DID_resolve_gns_lookup_cb(void *cls, uint32_t rd_count, const struct GNUNET_GNSRECORD_Data *rd)
GNS lookup callback.
Definition: did_core.c:58
#define DID_DOCUMENT_LABEL
Definition: did_core.h:37
enum GNUNET_GenericReturnValue DID_did_to_pkey(const char *did, struct GNUNET_CRYPTO_PublicKey *pkey)
Return the public key of a DID.
Definition: did_helper.c:79
static struct GNUNET_GNS_Handle * gns_handle
Definition: gnunet-did.c:102
static char * did
DID Attribute String.
Definition: gnunet-did.c:82
static char * pkey
Public key of the zone to look in, in ASCII.
struct GNUNET_GNS_LookupRequest * GNUNET_GNS_lookup(struct GNUNET_GNS_Handle *handle, const char *name, const struct GNUNET_CRYPTO_PublicKey *zone, uint32_t type, enum GNUNET_GNS_LocalOptions options, GNUNET_GNS_LookupResultProcessor proc, void *proc_cls)
Perform an asynchronous lookup operation on the GNS.
Definition: gns_api.c:421
@ GNUNET_GNS_LO_DEFAULT
Defaults, look in cache, then in DHT.
@ GNUNET_OK
@ GNUNET_NO
#define GNUNET_malloc(size)
Wrapper around malloc.
#define GNUNET_GNSRECORD_TYPE_DID_DOCUMENT
Record type to store DID Documents.
DID_resolve_callback * cb
Definition: did_core.c:34
An identity key as per LSD0001.

References DID_resolve_return::cb, DID_resolve_return::cls, did, DID_did_to_pkey(), DID_DOCUMENT_LABEL, DID_resolve_gns_lookup_cb(), gns_handle, GNUNET_GNS_LO_DEFAULT, GNUNET_GNS_lookup(), GNUNET_GNSRECORD_TYPE_DID_DOCUMENT, GNUNET_malloc, GNUNET_NO, GNUNET_OK, and pkey.

Referenced by resolve_did().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DID_remove()

enum GNUNET_GenericReturnValue DID_remove ( const struct GNUNET_IDENTITY_Ego ego,
struct GNUNET_CONFIGURATION_Handle cfg_handle,
struct GNUNET_NAMESTORE_Handle namestore_handle,
DID_action_callback cont,
void *  cls 
)

Removes the DID Document from namestore.

Ego is not removed. Calls the callback function with status and the given closure.

Parameters
egoego which controls the DID
cfg_handlepointer to configuration handle
namestore_handlepointer to namestore handle
contcallback function
clsclosure

◆ DID_create()

enum GNUNET_GenericReturnValue DID_create ( const struct GNUNET_IDENTITY_Ego ego,
const char *  did_document,
const struct GNUNET_TIME_Relative expire_time,
struct GNUNET_NAMESTORE_Handle namestore_handle,
DID_action_callback cont,
void *  cls 
)

Creates a DID and saves DID Document in Namestore.

Parameters
egoego for which the DID should be created.
did_documentdid_document that should be saved in namestore. If did_document==NULL -> Default DID document is created.
expire_time
namestore_handle
contcallback function
clsclosure
egoego for which the DID should be created.
did_documentdid_document that should be saved in namestore. If did_document==NULL -> Default DID document is created.
namestore_handle
contcallback function
clsclosure

Definition at line 226 of file did_core.c.

232{
234 struct DID_create_namestore_lookup_closure *cls_name_store_lookup_cb;
235
236 // Ego, namestore_handle and cont must be set
237 if ((ego == NULL) || (namestore_handle == NULL) || (cont == NULL))
238 return GNUNET_NO;
239
240 // Check if ego has EdDSA key
242 &pkey);
243 if (ntohl (pkey.type) != GNUNET_GNSRECORD_TYPE_EDKEY)
244 {
245 printf ("The EGO has to have an EdDSA key pair\n");
246 return GNUNET_NO;
247 }
248
249 cls_name_store_lookup_cb = GNUNET_malloc (sizeof(struct DID_create_namestore_lookup_closure));
250 cls_name_store_lookup_cb->ret = GNUNET_malloc (sizeof(struct DID_action_return));
251 cls_name_store_lookup_cb->ret->cb = cont;
252 cls_name_store_lookup_cb->ret->cls = cls;
253 cls_name_store_lookup_cb->did_document = did_document;
254 cls_name_store_lookup_cb->expire_time = (*expire_time);
255 cls_name_store_lookup_cb->namestore_handle = namestore_handle;
256
257 // Check if ego already has a DID Document
261 NULL,
262 NULL,
264 (void *) cls_name_store_lookup_cb);
265
266 return GNUNET_OK;
267}
static void DID_create_namestore_lookup_cb(void *cls, const struct GNUNET_CRYPTO_PrivateKey *zone, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
Definition: did_core.c:155
static struct GNUNET_NAMESTORE_Handle * namestore_handle
Definition: gnunet-did.c:107
const struct GNUNET_CRYPTO_PrivateKey * GNUNET_IDENTITY_ego_get_private_key(const struct GNUNET_IDENTITY_Ego *ego)
Obtain the ECC key associated with a ego.
Definition: identity_api.c:517
void GNUNET_IDENTITY_ego_get_public_key(struct GNUNET_IDENTITY_Ego *ego, struct GNUNET_CRYPTO_PublicKey *pk)
Get the identifier (public key) of an ego.
Definition: identity_api.c:529
struct GNUNET_NAMESTORE_QueueEntry * GNUNET_NAMESTORE_records_lookup(struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_CRYPTO_PrivateKey *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.
#define GNUNET_GNSRECORD_TYPE_EDKEY
GNS zone delegation (EDKEY)
DID_action_callback * cb
Definition: did_core.c:40
struct GNUNET_NAMESTORE_Handle * namestore_handle
Definition: did_core.c:150
struct GNUNET_TIME_Relative expire_time
Definition: did_core.c:149
struct DID_action_return * ret
Definition: did_core.c:151
Handle for an ego.
Definition: identity.h:37

References DID_action_return::cb, DID_action_return::cls, DID_create_namestore_lookup_cb(), DID_create_namestore_lookup_closure::did_document, DID_DOCUMENT_LABEL, DID_create_namestore_lookup_closure::expire_time, GNUNET_GNSRECORD_TYPE_EDKEY, GNUNET_IDENTITY_ego_get_private_key(), GNUNET_IDENTITY_ego_get_public_key(), GNUNET_malloc, GNUNET_NAMESTORE_records_lookup(), GNUNET_NO, GNUNET_OK, namestore_handle, DID_create_namestore_lookup_closure::namestore_handle, pkey, and DID_create_namestore_lookup_closure::ret.

Referenced by create_did_ego_lockup_cb().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DID_replace()

enum GNUNET_GenericReturnValue DID_replace ( struct GNUNET_IDENTITY_Ego ego,
char *  did_document,
const struct GNUNET_CONFIGURATION_Handle cfg_handle,
struct GNUNET_IDENTITY_Handle identity_handle,
struct GNUNET_NAMESTORE_Handle namestore_handle,
DID_action_callback cont,
void *  cls 
)

Replace the DID Document of a DID.

Parameters
egoego for which the DID Document should be replaced
did_documentnew DID Document
cfg_handlepointer to configuration handle
identity_handlepointer to configuration handle
namestore_handlepointer to namestore handle
contcallback function
clsclosure