[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnunet] 22/70: -did mulitbase key and assert method for VCs
From: |
gnunet |
Subject: |
[gnunet] 22/70: -did mulitbase key and assert method for VCs |
Date: |
Wed, 31 Aug 2022 18:00:16 +0200 |
This is an automated email from the git hooks/post-receive script.
martin-schanzenbach pushed a commit to branch master
in repository gnunet.
commit 11a37cc31611aff3e0d2275a5f3ed80615b8d88c
Author: Tristan Schwieren <tristan.schwieren@tum.de>
AuthorDate: Mon Dec 20 22:09:13 2021 +0100
-did mulitbase key and assert method for VCs
---
src/did/gnunet-did.c | 101 ++++++++++++++++++++++++++++++++++++---------------
1 file changed, 71 insertions(+), 30 deletions(-)
diff --git a/src/did/gnunet-did.c b/src/did/gnunet-did.c
index bf5901a79..e2b32c272 100644
--- a/src/did/gnunet-did.c
+++ b/src/did/gnunet-did.c
@@ -18,7 +18,8 @@
SPDX-License-Identifier: AGPL3.0-or-later
*/
-// TODO: Public Key in DID Docuement - pkey_multibase_json
+// TODO: Own GNS type
+// TODO: Save delete and move DIDD to root - look for other with same sub
// TODO: uncrustify
// TODO: Unit Tests
@@ -96,12 +97,6 @@ static struct GNUNET_NAMESTORE_Handle * namestore_handle;
static struct GNUNET_IDENTITY_Handle * identity_handle;
const static struct GNUNET_CONFIGURATION_Handle * my_cfg;
-// TODO
-// eddsa only
-// safe delete the didd record - look for other with same sub
-// Add a data DID Document type
-// Set Record flag when storing did
-
/**
* @brief Disconnect and shutdown
* @param cls closure
@@ -349,48 +344,85 @@ char *
create_did_generate(struct GNUNET_IDENTITY_PublicKey pkey)
{
char * pkey_str; // Convert public key to string
- char did_str[71]; // 58 + 12 + 1= 71
+ char did_str[71]; // 58 + 12 + 1 = 71
char * didd_str;
- char pkey_multibase_str[60]; // 58 + 1 + 1 = 60
+ char verify_id_str[77]; // did_str len + "#key-1" = 71 + 6 = 77
+ char * pkey_multibase_str;
+
+ char * b64;
+ char pkx[34];
+ pkx[0] = 0xed;
+ pkx[1] = 0x01;
+ memcpy(pkx+2, &(pkey.eddsa_key), sizeof(pkey.eddsa_key));
+ GNUNET_STRINGS_base64_encode(pkx, sizeof(pkx), &b64);
+ GNUNET_asprintf(&pkey_multibase_str, "u%s", b64);
+
+ json_t * didd;
json_t * did_json;
json_t * pkey_multibase_json;
+ json_t * context_json;
json_t * context_1_json;
json_t * context_2_json;
- json_t * auth_type_json;
- json_t * context_json;
- json_t * auth_json;
- json_t * auth_1_json;
- json_t * didd;
+ json_t * verify_json;
+ json_t * verify_1_json;
+ json_t * verify_1_type_json;
+ json_t * verify_1_id_json;
+ json_t * verify_relative_ref_json;
+ json_t * auth_json;
+ json_t * assert_json;
pkey_str = GNUNET_IDENTITY_public_key_to_string(&pkey); // Convert public
key to string
sprintf(did_str, "did:reclaim:%s", pkey_str); // Convert the public key to a
DID str
- sprintf(pkey_multibase_str, "V%s", pkey_str); // Convert the public key to
MultiBase data format
+ sprintf(verify_id_str, "did:reclaim:%s#key-1", pkey_str); // Convert the
public key to a DID str
- // Create DID Document
+ // sprintf(pkey_multibase_str, "V%s", pkey_str); // Convert the public key
to MultiBase data format
+
+ // Create Json Strings
did_json = json_string(did_str);
pkey_multibase_json = json_string(pkey_multibase_str);
+
context_1_json = json_string("https://www.w3.org/ns/did/v1");
context_2_json =
json_string("https://w3id.org/security/suites/ed25519-2020/v1");
- auth_type_json = json_string("Ed25519VerificationKey2020");
+ verify_1_id_json = json_string(verify_id_str);
+ verify_1_type_json = json_string("Ed25519VerificationKey2020");
+
+ // Add a relative DID URL to reference a verifiation method
+ // https://www.w3.org/TR/did-core/#relative-did-urls`
+ verify_relative_ref_json = json_string("#key-1");
+ // Create DID Document
+ didd = json_object();
+
+ // Add context
context_json = json_array();
json_array_append(context_json, context_1_json);
json_array_append(context_json, context_2_json);
-
- auth_json = json_array();
- auth_1_json = json_object();
- json_object_set(auth_1_json, "id", did_json);
- json_object_set(auth_1_json, "type", auth_type_json);
- json_object_set(auth_1_json, "controller", did_json);
- json_object_set(auth_1_json, "publicKeyMultiBase", pkey_multibase_json);
- json_array_append(auth_json, auth_1_json);
-
- didd = json_object();
json_object_set(didd, "@context", context_json);
+
+ // Add id
json_object_set(didd, "id", did_json);
+
+ // Add verification method
+ verify_json = json_array();
+ verify_1_json = json_object();
+ json_object_set(verify_1_json, "id", verify_1_id_json);
+ json_object_set(verify_1_json, "type", verify_1_type_json);
+ json_object_set(verify_1_json, "controller", did_json);
+ json_object_set(verify_1_json, "publicKeyMultiBase", pkey_multibase_json);
+ json_array_append(verify_json, verify_1_json);
+ json_object_set(didd, "verificationMethod", verify_json);
+
+ // Add authentication method
+ auth_json = json_array();
+ json_array_append(auth_json, verify_relative_ref_json);
json_object_set(didd, "authentication", auth_json);
+ // Add assertion method to issue a Verifiable Credential
+ assert_json = json_array();
+ json_array_append(assert_json, verify_relative_ref_json);
+ json_object_set(didd, "assertionMethod", assert_json);
+
// Encode DID Document as JSON string
didd_str = json_dumps(didd, JSON_INDENT(2));
if(didd_str == NULL)
@@ -400,15 +432,24 @@ create_did_generate(struct GNUNET_IDENTITY_PublicKey pkey)
ret = 1;
return NULL;
}
+
+ // TODO: MORE FREEEEEEEE
+ free(pkey_multibase_str);
+ free(b64);
+ free(didd);
free(did_json);
free(pkey_multibase_json);
+ free(context_json);
free(context_1_json);
free(context_2_json);
- free(auth_type_json);
+ free(verify_json);
+ free(verify_1_json);
+ free(verify_1_type_json);
+ free(verify_1_id_json);
free(auth_json);
- free(auth_1_json);
- free(didd);
+ free(assert_json);
+ free(verify_relative_ref_json);
return didd_str;
}
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [gnunet] 46/70: -code review, (continued)
- [gnunet] 46/70: -code review, gnunet, 2022/08/31
- [gnunet] 53/70: - more tests, gnunet, 2022/08/31
- [gnunet] 61/70: - non working DID lib create func, gnunet, 2022/08/31
- [gnunet] 57/70: - changed did_core header, gnunet, 2022/08/31
- [gnunet] 59/70: - DID resolve using DID lib, gnunet, 2022/08/31
- [gnunet] 67/70: - DID lib; formatting, gnunet, 2022/08/31
- [gnunet] 51/70: - trying to make did_helper a lib, gnunet, 2022/08/31
- [gnunet] 64/70: - didlib; use expire value, gnunet, 2022/08/31
- [gnunet] 69/70: - added gitignores, gnunet, 2022/08/31
- [gnunet] 65/70: -m DID lib; added check for existing DID document, gnunet, 2022/08/31
- [gnunet] 22/70: -did mulitbase key and assert method for VCs,
gnunet <=
- [gnunet] 25/70: -forgot the .c..., gnunet, 2022/08/31