GNUnet debian-0.26.1
 
Loading...
Searching...
No Matches
did_helper.c File Reference

helper library for DID related functions 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 "did_helper.h"
#include "jansson.h"
Include dependency graph for did_helper.c:

Go to the source code of this file.

Macros

#define STR_INDIR(x)   #x
 
#define STR(x)   STR_INDIR (x)
 

Functions

char * DID_pkey_to_did (struct GNUNET_CRYPTO_BlindablePublicKey *pkey)
 Generate a DID for a given GNUNET public key.
 
char * DID_identity_to_did (struct GNUNET_IDENTITY_Ego *ego)
 Generate a DID for a given gnunet EGO.
 
enum GNUNET_GenericReturnValue DID_did_to_pkey (const char *did, struct GNUNET_CRYPTO_BlindablePublicKey *pkey)
 Return the public key of a DID.
 
char * DID_key_convert_gnunet_to_multibase_base64 (struct GNUNET_CRYPTO_BlindablePublicKey *pkey)
 Convert GNUNET key to a base 64 encoded public key.
 
char * DID_pkey_to_did_document (struct GNUNET_CRYPTO_BlindablePublicKey *pkey)
 Create a did generate did object.
 
char * DID_identity_to_did_document (struct GNUNET_IDENTITY_Ego *ego)
 Generate the default DID document for a GNUNET ego Wrapper around GNUNET_DID_pkey_to_did_document.
 

Detailed Description

helper library for DID related functions

Author
Tristan Schwieren

Definition in file did_helper.c.

Macro Definition Documentation

◆ STR_INDIR

#define STR_INDIR (   x)    #x

Definition at line 34 of file did_helper.c.

◆ STR

#define STR (   x)    STR_INDIR (x)

Definition at line 35 of file did_helper.c.

Function Documentation

◆ DID_pkey_to_did()

char * DID_pkey_to_did ( struct GNUNET_CRYPTO_BlindablePublicKey pkey)

Generate a DID for a given GNUNET public key.

Return a DID for a given GNUNET public key.

Parameters
pkey
Returns
char* Returns the DID. Caller must free TODO: Check if EdDSA

Definition at line 45 of file did_helper.c.

46{
47 char *pkey_str;
48 char *did_str;
49
51 GNUNET_asprintf (&did_str, "%s%s",
53 pkey_str);
54
55 GNUNET_free (pkey_str);
56 return did_str;
57}
#define GNUNET_DID_METHOD_PREFIX
Definition did_helper.h:27
static char * pkey
Public key of the zone to look in, in ASCII.
char * GNUNET_CRYPTO_blindable_public_key_to_string(const struct GNUNET_CRYPTO_BlindablePublicKey *key)
Creates a (Base32) string representation of the public key.
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
#define GNUNET_free(ptr)
Wrapper around free.

References GNUNET_asprintf(), GNUNET_CRYPTO_blindable_public_key_to_string(), GNUNET_DID_METHOD_PREFIX, GNUNET_free, and pkey.

Referenced by DID_identity_to_did(), DID_identity_to_did_document(), and DID_pkey_to_did_document().

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

◆ DID_identity_to_did()

char * DID_identity_to_did ( struct GNUNET_IDENTITY_Ego ego)

Generate a DID for a given gnunet EGO.

Wrapper around GNUNET_DID_pkey_to_did

Parameters
ego
Returns
char* Returns the DID. Caller must free

Definition at line 68 of file did_helper.c.

69{
71
73 return DID_pkey_to_did (&pkey);
74}
char * DID_pkey_to_did(struct GNUNET_CRYPTO_BlindablePublicKey *pkey)
Generate a DID for a given GNUNET public key.
Definition did_helper.c:45
void GNUNET_IDENTITY_ego_get_public_key(struct GNUNET_IDENTITY_Ego *ego, struct GNUNET_CRYPTO_BlindablePublicKey *pk)
Get the identifier (public key) of an ego.
An identity key as per LSD0001.

References DID_pkey_to_did(), GNUNET_IDENTITY_ego_get_public_key(), and pkey.

Referenced by create_did_ego_lockup_cb(), and process_dids().

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

◆ DID_did_to_pkey()

enum GNUNET_GenericReturnValue DID_did_to_pkey ( const char *  did,
struct GNUNET_CRYPTO_BlindablePublicKey pkey 
)

Return the public key of a DID.

Definition at line 81 of file did_helper.c.

82{
83 char pkey_str[MAX_DID_SPECIFIC_IDENTIFIER_LENGTH + 1]; /* 0-term */
84
85 if ((1 != (sscanf (did,
88 "s", pkey_str))) ||
90 pkey)))
91 {
92 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Could not decode given DID: %s\n",
93 did);
94 return GNUNET_NO;
95 }
96
97 return GNUNET_OK;
98}
#define STR(x)
Definition did_helper.c:35
#define MAX_DID_SPECIFIC_IDENTIFIER_LENGTH
Definition did_helper.h:28
static char * did
DID Attribute String.
Definition gnunet-did.c:83
#define GNUNET_log(kind,...)
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_blindable_public_key_from_string(const char *str, struct GNUNET_CRYPTO_BlindablePublicKey *key)
Parses a (Base32) string representation of the public key.
@ GNUNET_OK
@ GNUNET_NO
@ GNUNET_ERROR_TYPE_WARNING

References did, GNUNET_CRYPTO_blindable_public_key_from_string(), GNUNET_DID_METHOD_PREFIX, GNUNET_ERROR_TYPE_WARNING, GNUNET_log, GNUNET_NO, GNUNET_OK, MAX_DID_SPECIFIC_IDENTIFIER_LENGTH, pkey, and STR.

Referenced by DID_resolve().

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

◆ DID_key_convert_gnunet_to_multibase_base64()

char * DID_key_convert_gnunet_to_multibase_base64 ( struct GNUNET_CRYPTO_BlindablePublicKey pkey)

Convert GNUNET key to a base 64 encoded public key.

Definition at line 105 of file did_helper.c.

108{
110
111 // This is how to convert out pubkeys to W3c Ed25519-2020 multibase (base64url no padding)
112 char *pkey_base_64;
113 char *pkey_multibase;
114 char pkx[34];
115
116 pkx[0] = 0xed;
117 pkx[1] = 0x01;
118 memcpy (pkx + 2, &pubkey, sizeof (pubkey));
119 GNUNET_STRINGS_base64url_encode (pkx, sizeof (pkx), &pkey_base_64);
120 GNUNET_asprintf (&pkey_multibase, "u%s", pkey_base_64);
121
122 GNUNET_free (pkey_base_64);
123 return pkey_multibase;
124}
static struct GNUNET_CRYPTO_BlindablePublicKey pubkey
Public key of the zone to look in.
size_t GNUNET_STRINGS_base64url_encode(const void *in, size_t len, char **output)
Encode into Base64url.
Definition strings.c:1667
struct GNUNET_CRYPTO_EddsaPublicKey eddsa_key
AN EdDSA identtiy key.
Public ECC key (always for curve Ed25519) encoded in a format suitable for network transmission and E...

References GNUNET_CRYPTO_BlindablePublicKey::eddsa_key, GNUNET_asprintf(), GNUNET_free, GNUNET_STRINGS_base64url_encode(), pkey, and pubkey.

Referenced by DID_pkey_to_did_document().

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

◆ DID_pkey_to_did_document()

char * DID_pkey_to_did_document ( struct GNUNET_CRYPTO_BlindablePublicKey pkey)

Create a did generate did object.

Generate the default DID document for a GNUNET public key.

Parameters
pkey
Returns
void* Return pointer to the DID Document

Definition at line 134 of file did_helper.c.

135{
136
137 /* FIXME-MSC: This is effectively creating a DID Document default template for
138 * the initial document.
139 * Maybe this can be refactored to generate such a template for an identity?
140 * Even if higher layers add/modify it, there should probably still be a
141 * GNUNET_DID_document_template_from_identity()
142 */
143
144 char *did_str;
145 char *verify_id_str;
146 char *pkey_multibase_str;
147 char *didd_str;
148 json_t *didd_json;
149
150 did_str = DID_pkey_to_did (pkey);
151 GNUNET_asprintf (&verify_id_str, "%s#key-1", did_str);
152
154
155 didd_json = json_pack (
156 "{s:[ss], s:s, s:[{s:s, s:s, s:s, s:s}], s:[s], s:[s]}",
157 "@context",
158 "https://www.w3.org/ns/did/v1",
159 "https://w3id.org/security/suites/ed25519-2020/v1",
160 "id",
161 did_str,
162 "verificationMethod",
163 "id",
164 verify_id_str,
165 "type",
166 "Ed25519VerificationKey2020",
167 "controller",
168 did_str,
169 "publicKeyMultibase",
170 pkey_multibase_str,
171 "authentication",
172 "#key-1",
173 "assertionMethod",
174 "#key-1");
175
176 // Encode DID Document as JSON string
177 didd_str = json_dumps (didd_json, JSON_INDENT (2));
178
179 // Free
180 GNUNET_free (did_str);
181 GNUNET_free (verify_id_str);
182 GNUNET_free (pkey_multibase_str);
183 json_decref (didd_json);
184
185 return didd_str;
186}
char * DID_key_convert_gnunet_to_multibase_base64(struct GNUNET_CRYPTO_BlindablePublicKey *pkey)
Convert GNUNET key to a base 64 encoded public key.
Definition did_helper.c:105

References DID_key_convert_gnunet_to_multibase_base64(), DID_pkey_to_did(), GNUNET_asprintf(), GNUNET_free, and pkey.

Referenced by DID_create_namestore_lookup_cb().

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

◆ DID_identity_to_did_document()

char * DID_identity_to_did_document ( struct GNUNET_IDENTITY_Ego ego)

Generate the default DID document for a GNUNET ego Wrapper around GNUNET_DID_pkey_to_did_document.

Generate the default DID document for a GNUNET ego.

Definition at line 194 of file did_helper.c.

References DID_pkey_to_did(), GNUNET_IDENTITY_ego_get_public_key(), and pkey.

Here is the call graph for this function: