From f97b972fb6510d993b2517ed610e590c7845bd29 Mon Sep 17 00:00:00 2001 From: Sam Curren Date: Thu, 14 Jan 2021 14:59:55 -0700 Subject: [PATCH 1/6] Method 3 Initial lacks complete update of the new method in the rest of the document. Signed-off-by: Sam Curren --- core.html | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/core.html b/core.html index 1cca823..1ea98e9 100644 --- a/core.html +++ b/core.html @@ -84,7 +84,7 @@

Method Specific Identifier

Generation Method

-

The unique numeric basis underlying a Peer DID MUST be generated in one of the following two ways:

+

The unique numeric basis underlying a Peer DID MUST be generated in one of the following ways:

Method 0: inception key without doc

If numalgo == 0, a single keypair is chosen, having all possible privileges with respect @@ -137,6 +137,25 @@

Method 1: genesis doc

is susceptible to attacks early in the DID's lifecycle. See this github issue for more discussion.

+ +

Method 3: multiple inception key without doc

+

If numalgo == 3, the generation mode is similar to Method 0 (and therefore also did:key) + with the ability to specify additional keys in the generated DID Document. This method is necessary when both an encryption + key and a signing key are required.

+
    +
  • Construct a peer:did as described in Method 0 with the desired encryption public key.
  • +
  • Construct a multibase encoded, multicodec-encoded form of the desired singing public key. +
  • Append the encoded signing key to the original DID using a pipe character `|` as a delimiter.
  • +
+ +

Example: + Encoded Encryption Key: z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH + Encoded Signing Key: zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY + Method 3 peer DID: did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH|zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY + +

+ +
From 593cb53e89d317506290eaa03d22b0769c4ccb37 Mon Sep 17 00:00:00 2001 From: Sam Curren Date: Fri, 15 Jan 2021 17:36:38 -0700 Subject: [PATCH 2/6] Full Multi-key Example Signed-off-by: Sam Curren --- core.html | 52 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/core.html b/core.html index 1ea98e9..e8e3b15 100644 --- a/core.html +++ b/core.html @@ -144,17 +144,55 @@

Method 3: multiple inception key without doc

key and a signing key are required.

  • Construct a peer:did as described in Method 0 with the desired encryption public key.
  • -
  • Construct a multibase encoded, multicodec-encoded form of the desired singing public key. -
  • Append the encoded signing key to the original DID using a pipe character `|` as a delimiter.
  • +
  • Construct a multibase encoded, multicodec-encoded form of the desired signing public key. +
  • Append the encoded signing key to the original DID using a period character `.` as a delimiter.
- -

Example: + +

 		Encoded Encryption Key: z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH
 		Encoded Signing Key: zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY
-		Method 3 peer DID: did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH|zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY
-	
-    

+ Method 3 peer DID: did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY +
+

When Resolving the peer DID into a DID Document, the process is similar to Method 0.

+
    +
  • Resolve the document as described in Method 0, using the portion of the DID prior to the delimiter.
  • +
  • Decode the key after the delimiter, and insert it into the PublicKey array, using this key as the id fragment.
  • +
  • Set the authentication key to the new id fragment created in the last step.
  • +
+ +
+{
+  "@context": "https://w3id.org/did/v1",
+  "id": "did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY",
+  "publicKey": [{
+	"id": "did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH",
+	"type": "Ed25519VerificationKey2018",
+	"controller": "did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY",
+	"publicKeyBase58": "B12NYF8RrR3h41TDCTJojY59usg3mbtbjnFs7Eud1Y6u"
+  },{
+	"id": "did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH#zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH",
+	"type": "JsonWebKey2020",
+	"controller": "did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY",
+	"publicKeyJwk": {
+		"kty": "EC",
+		"crv": "P-256",
+		"x": "38M1FDts7Oea7urmseiugGW7tWc3mLpJh6rKe7xINZ8",
+		"y": "nDQW6XZ7b_u2Sy9slofYLlG03sOEoug3I0aAPQ0exs4"
+    }
+  }],
+  "authentication": [ "did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH#zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH" ],
+  "assertionMethod": [ "did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH" ],
+  "capabilityDelegation": [ "did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH" ],
+  "capabilityInvocation": [ "did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH" ],
+  "keyAgreement": [{
+	"id": "did:key:z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH#zBzoR5sqFgi6q3iFia8JPNfENCpi7RNSTKF7XNXX96SBY4",
+	"type": "X25519KeyAgreementKey2019",
+	"controller": "did:key:z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH",
+	"publicKeyBase58": "JhNWeSVLMYccCk7iopQW4guaSJTojqpMEELgSLhKwRr"
+  }]
+}
+	
From 0b417319cc79f87044a0435829e139463b020844 Mon Sep 17 00:00:00 2001 From: Sam Curren Date: Wed, 10 Feb 2021 12:10:51 -0700 Subject: [PATCH 3/6] Added purpose indicators Signed-off-by: Sam Curren --- core.html | 54 ++++++++++++++++++++++++++---------------------------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/core.html b/core.html index e8e3b15..73a23eb 100644 --- a/core.html +++ b/core.html @@ -35,7 +35,7 @@

Method Specific Identifier

The peer DID scheme is defined by the following ABNF (see [[RFC5234]] for syntax):

 peer-did = "did:peer:" numalgo transform encnumbasis
-numalgo = "0" / "1"
+numalgo = "0" / "1" / "2"
 transform = "z"
 encnumbasis = 46*BASE58BTC
     
@@ -138,42 +138,44 @@

Method 1: genesis doc

href="https://github.com/openssi/peer-did-method-spec/issues/112">this github issue for more discussion.

-

Method 3: multiple inception key without doc

-

If numalgo == 3, the generation mode is similar to Method 0 (and therefore also did:key) +

Method 2: multiple inception key without doc

+

If numalgo == 2, the generation mode is similar to Method 0 (and therefore also did:key) with the ability to specify additional keys in the generated DID Document. This method is necessary when both an encryption key and a signing key are required.

    -
  • Construct a peer:did as described in Method 0 with the desired encryption public key.
  • -
  • Construct a multibase encoded, multicodec-encoded form of the desired signing public key. -
  • Append the encoded signing key to the original DID using a period character `.` as a delimiter.
  • +
  • Start with the did prefix
    did:peer:2
  • +
  • Construct a multibase encoded, multicodec-encoded form of each public key to be included.
  • +
  • Prefix each encoded key with a single character from the purpose codes table below.
  • +
  • Append the encoded key to the DID using a period character `.` as a delimiter between keys if more than one.
  • +
+ +

Purpose Code List

+
    +
  • A - Key Agreement
  • +
  • V - Verification
-		Encoded Encryption Key: z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH
-		Encoded Signing Key: zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY
-		Method 3 peer DID: did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY
+		Encoded Encryption Key: Az6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH
+		Encoded Signing Key: VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY
+		Method 3 peer DID: did:peer:2Az6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY
     
-

When Resolving the peer DID into a DID Document, the process is similar to Method 0.

+

When Resolving the peer DID into a DID Document, the process is reversed.

    -
  • Resolve the document as described in Method 0, using the portion of the DID prior to the delimiter.
  • -
  • Decode the key after the delimiter, and insert it into the PublicKey array, using this key as the id fragment.
  • -
  • Set the authentication key to the new id fragment created in the last step.
  • +
  • Split the DID string into keys.
  • +
  • Extract key purpose and decode each key.
  • +
  • Insert each key into the document according to the designated purpose.
 {
   "@context": "https://w3id.org/did/v1",
-  "id": "did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY",
-  "publicKey": [{
-	"id": "did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH",
-	"type": "Ed25519VerificationKey2018",
-	"controller": "did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY",
-	"publicKeyBase58": "B12NYF8RrR3h41TDCTJojY59usg3mbtbjnFs7Eud1Y6u"
-  },{
-	"id": "did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH#zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH",
+  "id": "did:peer:3Az6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY",
+  "authentication": [{
+	"id": "did:peer:3Az6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#Az6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH",
 	"type": "JsonWebKey2020",
-	"controller": "did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY",
+	"controller": "did:peer:3Az6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY",
 	"publicKeyJwk": {
 		"kty": "EC",
 		"crv": "P-256",
@@ -181,14 +183,10 @@ 

Method 3: multiple inception key without doc

"y": "nDQW6XZ7b_u2Sy9slofYLlG03sOEoug3I0aAPQ0exs4" } }], - "authentication": [ "did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH#zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH" ], - "assertionMethod": [ "did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH" ], - "capabilityDelegation": [ "did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH" ], - "capabilityInvocation": [ "did:peer:3z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.zXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH#z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH" ], "keyAgreement": [{ - "id": "did:key:z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH#zBzoR5sqFgi6q3iFia8JPNfENCpi7RNSTKF7XNXX96SBY4", + "id": "did:peer:3Az6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY", "type": "X25519KeyAgreementKey2019", - "controller": "did:key:z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH", + "controller": "did:peer:3Az6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY", "publicKeyBase58": "JhNWeSVLMYccCk7iopQW4guaSJTojqpMEELgSLhKwRr" }] } From 712abc23e238ed50749ab93eabfa11bfea84dbbc Mon Sep 17 00:00:00 2001 From: Sam Curren Date: Fri, 19 Feb 2021 16:30:39 -0700 Subject: [PATCH 4/6] Addition of endpoints Not yet polished. Signed-off-by: Sam Curren --- core.html | 53 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 14 deletions(-) diff --git a/core.html b/core.html index 73a23eb..57427eb 100644 --- a/core.html +++ b/core.html @@ -142,40 +142,59 @@

Method 2: multiple inception key without doc

If numalgo == 2, the generation mode is similar to Method 0 (and therefore also did:key) with the ability to specify additional keys in the generated DID Document. This method is necessary when both an encryption key and a signing key are required.

+ +
+peer-did-method-2 = "did:peer:2" 1*elment 
+element = "." ( purposecode transform encnumbasis / service )
+purposecode = "A" / "V" / "S"
+keypurpose = 
+transform = "z"
+encnumbasis = 46*BASE58BTC
+service = "S" servicetype "|" uri "|" *keyvalue
+    
+
  • Start with the did prefix
    did:peer:2
  • Construct a multibase encoded, multicodec-encoded form of each public key to be included.
  • -
  • Prefix each encoded key with a single character from the purpose codes table below.
  • -
  • Append the encoded key to the DID using a period character `.` as a delimiter between keys if more than one.
  • +
  • Prefix each encoded key with a period character (.) and single character from the purpose codes table below.
  • +
  • Append the encoded key to the DID.
  • +
  • Encode and append a service type if desired.

Purpose Code List

    -
  • A - Key Agreement
  • +
  • A - Assertion
  • +
  • E - Encryption (Key Agreement)
  • V - Verification
  • +
  • I - Capability Invocation
  • +
  • D - Verification Delegation
  • +
  • S - Service
-		Encoded Encryption Key: Az6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH
-		Encoded Signing Key: VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY
-		Method 3 peer DID: did:peer:2Az6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY
+		Encoded Encryption Key: .Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH
+		Encoded Signing Key: .VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY
+		Service Endpoint: S.didcommmessaging|https://example.com/endpoint|routingKeys=["did:example:somemediator#somekey"]
+		Method 3 peer DID: did:peer:2.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY.S.didcommmessaging|https://example.com/endpoint|routingKeys=["did:example:somemediator#somekey"]
     
+ +

When Resolving the peer DID into a DID Document, the process is reversed.

    -
  • Split the DID string into keys.
  • -
  • Extract key purpose and decode each key.
  • -
  • Insert each key into the document according to the designated purpose.
  • +
  • Split the DID string into element.
  • +
  • Extract element purpose and decode each key or service.
  • +
  • Insert each key or service into the document according to the designated purpose.
 {
   "@context": "https://w3id.org/did/v1",
-  "id": "did:peer:3Az6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY",
+  "id": "did:peer:2.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY.S.didcommmessaging|https://example.com/endpoint|routingKeys=["did:example:somemediator#somekey"]",
   "authentication": [{
-	"id": "did:peer:3Az6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#Az6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH",
+	"id": "did:peer:2.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#Vz6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH",
 	"type": "JsonWebKey2020",
-	"controller": "did:peer:3Az6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY",
+	"controller": "did:peer:2.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY",
 	"publicKeyJwk": {
 		"kty": "EC",
 		"crv": "P-256",
@@ -184,10 +203,16 @@ 

Method 2: multiple inception key without doc

} }], "keyAgreement": [{ - "id": "did:peer:3Az6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY", + "id": "did:peer:3.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#EzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY", "type": "X25519KeyAgreementKey2019", - "controller": "did:peer:3Az6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY", + "controller": "did:peer:3.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY", "publicKeyBase58": "JhNWeSVLMYccCk7iopQW4guaSJTojqpMEELgSLhKwRr" + }], + "service": [{ + "id": "did:peer:2.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY.S.didcommmessaging|https://example.com/endpoint|routingKeys=["did:example:somemediator#somekey"]#didcommmessaging", + "type": "didcommmessaging", + "serviceEndpoint": "https://example.com/endpoint", + "routingKeys": ["did:example:somemediator#somekey"] }] }
From 07e6fd3e9909e4d1d53b5429d19f260861480c2a Mon Sep 17 00:00:00 2001 From: Sam Curren Date: Sat, 6 Mar 2021 09:53:53 -0700 Subject: [PATCH 5/6] fixed service encoding Signed-off-by: Sam Curren --- core.html | 58 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/core.html b/core.html index 57427eb..ce742d1 100644 --- a/core.html +++ b/core.html @@ -146,11 +146,11 @@

Method 2: multiple inception key without doc

 peer-did-method-2 = "did:peer:2" 1*elment 
 element = "." ( purposecode transform encnumbasis / service )
-purposecode = "A" / "V" / "S"
+purposecode = "A" / "E" / "V" / "I" / "D" / "S" 
 keypurpose = 
 transform = "z"
 encnumbasis = 46*BASE58BTC
-service = "S" servicetype "|" uri "|" *keyvalue
+service = "S" 1*B64URL
     
    @@ -158,8 +158,35 @@

    Method 2: multiple inception key without doc

  • Construct a multibase encoded, multicodec-encoded form of each public key to be included.
  • Prefix each encoded key with a period character (.) and single character from the purpose codes table below.
  • Append the encoded key to the DID.
  • -
  • Encode and append a service type if desired.
  • +
  • Encode and append a service type if desired as described below.
+

Service encoding

+
    +
  • Start with the JSON structure for your service.
  • +
  • Replace common strings in key names and type value with appreviations from the abbreviations table below.
  • +
  • Convert to string, and remove unnecessary whitespace, such as spaces and newlines.
  • +
  • Base64URL Encode String
  • +
  • Add the period (.) and S (for the service)
  • +
+ +

Service decoding

+
    +
  • Remove the period (.) and S prefix
  • +
  • Base64URL Decode String
  • +
  • Parse as JSON.
  • +
  • Replace abbreviations in key names and type value with common names from the abbreviations table below.
  • +
  • Add id attribute according to the form
    #service
  • +
+ +

Common String Abbreviations

+ + + + + + +
Common StringAbbreviation
typet
didcommmessagingdm
serviceEndpoints
routingKeysr
+

Purpose Code List

    @@ -174,12 +201,19 @@

    Method 2: multiple inception key without doc

     		Encoded Encryption Key: .Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH
     		Encoded Signing Key: .VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY
    -		Service Endpoint: S.didcommmessaging|https://example.com/endpoint|routingKeys=["did:example:somemediator#somekey"]
    -		Method 3 peer DID: did:peer:2.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY.S.didcommmessaging|https://example.com/endpoint|routingKeys=["did:example:somemediator#somekey"]
    +		Service Block:
    +		{
    +			"type": "didcommmessaging",
    +			"serviceEndpoint": "https://example.com/endpoint",
    +			"routingKeys": ["did:example:somemediator#somekey"]
    +		}
    +		Service Block, after whitespace removal and common word substitution:
    +		{"t":"dm","s":"https://example.com/endpoint","r":["did:example:somemediator#somekey"]}
    +		Encoded Service Endpoint: .SeyJ0IjoiZG0iLCJzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9lbmRwb2ludCIsInIiOlsiZGlkOmV4YW1wbGU6c29tZW1lZGlhdG9yI3NvbWVrZXkiXX0=
    +		Method 3 peer DID: did:peer:2.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY.SeyJ0IjoiZG0iLCJzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9lbmRwb2ludCIsInIiOlsiZGlkOmV4YW1wbGU6c29tZW1lZGlhdG9yI3NvbWVrZXkiXX0=
         
    -

    When Resolving the peer DID into a DID Document, the process is reversed.

    • Split the DID string into element.
    • @@ -190,11 +224,11 @@

      Method 2: multiple inception key without doc

       {
         "@context": "https://w3id.org/did/v1",
      -  "id": "did:peer:2.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY.S.didcommmessaging|https://example.com/endpoint|routingKeys=["did:example:somemediator#somekey"]",
      +  "id": "did:peer:2.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY.SeyJ0IjoiZG0iLCJzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9lbmRwb2ludCIsInIiOlsiZGlkOmV4YW1wbGU6c29tZW1lZGlhdG9yI3NvbWVrZXkiXX0=",
         "authentication": [{
      -	"id": "did:peer:2.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#Vz6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH",
      +	"id": "did:peer:2.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY.SeyJ0IjoiZG0iLCJzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9lbmRwb2ludCIsInIiOlsiZGlkOmV4YW1wbGU6c29tZW1lZGlhdG9yI3NvbWVrZXkiXX0=#Vz6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH",
       	"type": "JsonWebKey2020",
      -	"controller": "did:peer:2.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY",
      +	"controller": "did:peer:2.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY.SeyJ0IjoiZG0iLCJzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9lbmRwb2ludCIsInIiOlsiZGlkOmV4YW1wbGU6c29tZW1lZGlhdG9yI3NvbWVrZXkiXX0=",
       	"publicKeyJwk": {
       		"kty": "EC",
       		"crv": "P-256",
      @@ -203,13 +237,13 @@ 

      Method 2: multiple inception key without doc

      } }], "keyAgreement": [{ - "id": "did:peer:3.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY#EzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY", + "id": "did:peer:2.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY.SeyJ0IjoiZG0iLCJzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9lbmRwb2ludCIsInIiOlsiZGlkOmV4YW1wbGU6c29tZW1lZGlhdG9yI3NvbWVrZXkiXX0=#EzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY", "type": "X25519KeyAgreementKey2019", - "controller": "did:peer:3.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY", + "controller": "did:peer:2.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY.SeyJ0IjoiZG0iLCJzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9lbmRwb2ludCIsInIiOlsiZGlkOmV4YW1wbGU6c29tZW1lZGlhdG9yI3NvbWVrZXkiXX0=", "publicKeyBase58": "JhNWeSVLMYccCk7iopQW4guaSJTojqpMEELgSLhKwRr" }], "service": [{ - "id": "did:peer:2.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY.S.didcommmessaging|https://example.com/endpoint|routingKeys=["did:example:somemediator#somekey"]#didcommmessaging", + "id": "did:peer:2.Ez6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH.VzXwpBnMdCm1cLmKuzgESn29nqnonp1ioqrQMRHNsmjMyppzx8xB2pv7cw8q1PdDacSrdWE3dtB9f7Nxk886mdzNFoPtY.SeyJ0IjoiZG0iLCJzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9lbmRwb2ludCIsInIiOlsiZGlkOmV4YW1wbGU6c29tZW1lZGlhdG9yI3NvbWVrZXkiXX0=#didcommmessaging", "type": "didcommmessaging", "serviceEndpoint": "https://example.com/endpoint", "routingKeys": ["did:example:somemediator#somekey"] From 0b8a06bddecd6c6e05df967c5b861179519342eb Mon Sep 17 00:00:00 2001 From: Sam Curren Date: Fri, 19 Mar 2021 11:00:52 -0600 Subject: [PATCH 6/6] Update core.html From Kyle Co-authored-by: Kyle Den Hartog --- core.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core.html b/core.html index ce742d1..b6a1247 100644 --- a/core.html +++ b/core.html @@ -194,7 +194,7 @@

      Method 2: multiple inception key without doc

    • E - Encryption (Key Agreement)
    • V - Verification
    • I - Capability Invocation
    • -
    • D - Verification Delegation
    • +
    • D - Capability Delegation
    • S - Service