GNUnet 0.21.1
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, 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 sucessfull 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, 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 Docuemnt has been resolved
did_documentresolved DID Document
clsprevisouly 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 sucessfull status = 1 if action failed.

Parameters
statusstatus of the perfermormed action.
clsprevisouly given closure

Definition at line 61 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
96 // did, gns_handle and cont must me set
97 if ((did == NULL) || (gns_handle == NULL) || (cont == NULL))
98 return GNUNET_NO;
99
101 return GNUNET_NO;
102
103 // Create closure for lookup callback
104 struct DID_resolve_return *cls_gns_lookup_cb
105 = 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:103
static char * did
DID Attribut String.
Definition: gnunet-did.c:83
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_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_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 controlls 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
235 // Ego, namestore_handle and cont must be set
236 if ((ego == NULL) || (namestore_handle == NULL) || (cont == NULL))
237 return GNUNET_NO;
238
239 // Check if ego has EdDSA key
241 &pkey);
242 if (ntohl (pkey.type) != GNUNET_GNSRECORD_TYPE_EDKEY)
243 {
244 printf ("The EGO has to have an EdDSA key pair\n");
245 return GNUNET_NO;
246 }
247
248 struct DID_action_return *ret
249 = malloc (sizeof(struct DID_action_return));
250 ret->cb = cont;
251 ret->cls = cls;
252
253 struct DID_create_namestore_lookup_closure *cls_name_store_lookup_cb
254 = malloc (sizeof(struct DID_create_namestore_lookup_closure));
255 cls_name_store_lookup_cb->did_document = did_document;
256 cls_name_store_lookup_cb->expire_time = (*expire_time);
257 cls_name_store_lookup_cb->namestore_handle = namestore_handle;
258 cls_name_store_lookup_cb->ret = ret;
259
260 // Check if ego already has a DID Document
264 NULL,
265 NULL,
267 (void *) cls_name_store_lookup_cb);
268
269 return GNUNET_OK;
270}
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 int ret
Final status code.
Definition: gnunet-arm.c:94
static struct GNUNET_NAMESTORE_Handle * namestore_handle
Definition: gnunet-did.c:108
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)
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::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_NAMESTORE_records_lookup(), GNUNET_NO, GNUNET_OK, namestore_handle, DID_create_namestore_lookup_closure::namestore_handle, pkey, ret, 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