GNUnet 0.25.2-11-g84e94e98c
 
Loading...
Searching...
No Matches
did_helper.c
Go to the documentation of this file.
1/*
2 This file is part of GNUnet
3 Copyright (C) 2010-2015 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
26#include "platform.h"
27#include "gnunet_util_lib.h"
29#include "gnunet_gns_service.h"
31#include "did_helper.h"
32#include "jansson.h"
33
34#define STR_INDIR(x) #x
35#define STR(x) STR_INDIR (x)
36
44char*
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}
58
59
67char*
75
76
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}
99
100
104char *
107 pkey)
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}
125
126
133char *
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}
187
188
193char *
#define STR(x)
Definition did_helper.c:35
enum GNUNET_GenericReturnValue DID_did_to_pkey(const char *did, struct GNUNET_CRYPTO_BlindablePublicKey *pkey)
Return the public key of a DID.
Definition did_helper.c:81
char * DID_pkey_to_did(struct GNUNET_CRYPTO_BlindablePublicKey *pkey)
Generate a DID for a given GNUNET public key.
Definition did_helper.c:45
char * DID_pkey_to_did_document(struct GNUNET_CRYPTO_BlindablePublicKey *pkey)
Create a did generate did object.
Definition did_helper.c:134
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
char * DID_identity_to_did(struct GNUNET_IDENTITY_Ego *ego)
Generate a DID for a given gnunet EGO.
Definition did_helper.c:68
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.
Definition did_helper.c:194
helper library for DID related functions
#define MAX_DID_SPECIFIC_IDENTIFIER_LENGTH
Definition did_helper.h:28
#define GNUNET_DID_METHOD_PREFIX
Definition did_helper.h:27
static char * did
DID Attribute String.
Definition gnunet-did.c:83
static struct GNUNET_CRYPTO_BlindablePublicKey pubkey
Public key of the zone to look in.
static char * pkey
Public key of the zone to look in, in ASCII.
API to the GNS service.
API that can be used to manipulate GNS record data.
API that can be used to store naming information on a GNUnet node;.
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.
#define GNUNET_log(kind,...)
char * GNUNET_CRYPTO_blindable_public_key_to_string(const struct GNUNET_CRYPTO_BlindablePublicKey *key)
Creates a (Base32) string representation of the public key.
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_GenericReturnValue
Named constants for return values.
@ GNUNET_OK
@ GNUNET_NO
@ GNUNET_ERROR_TYPE_WARNING
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
#define GNUNET_free(ptr)
Wrapper around free.
size_t GNUNET_STRINGS_base64url_encode(const void *in, size_t len, char **output)
Encode into Base64url.
Definition strings.c:1667
An identity key as per LSD0001.
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...
Handle for an ego.
Definition identity.h:37