Fork of github.com/did-method-plc/did-method-plc
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #43 from did-method-plc/bnewbold/doc-iteration

DID document formatting iteration

authored by

bnewbold and committed by
GitHub
f8d26845 14b0bc30

+24 -33
+1 -4
.github/workflows/build-and-push-aws.yaml
··· 1 1 name: build-and-push-aws 2 - on: 3 - push: 4 - branches: 5 - - main 2 + on: [push] 6 3 env: 7 4 REGISTRY: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_REGISTRY }} 8 5 USERNAME: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_USERNAME }}
+1 -4
.github/workflows/build-and-push-ghcr.yaml
··· 1 1 name: build-and-push-ghcr 2 - on: 3 - push: 4 - branches: 5 - - main 2 + on: [push] 6 3 env: 7 4 REGISTRY: ghcr.io 8 5 USERNAME: ${{ github.actor }}
+3 -2
README.md
··· 354 354 { 355 355 '@context': [ 356 356 'https://www.w3.org/ns/did/v1', 357 + 'https://w3id.org/security/multikey/v1', 357 358 'https://w3id.org/security/suites/ecdsa-2019/v1' 358 359 ], 359 360 id: 'did:plc:7iza6de2dwap2sbkpav7c6c6', ··· 361 362 verificationMethod: [ 362 363 { 363 364 id: '#atproto', 364 - type: 'EcdsaSecp256r1VerificationKey2019', 365 + type: 'Multikey', 365 366 controller: 'did:plc:7iza6de2dwap2sbkpav7c6c6', 366 - publicKeyMultibase: 'zSSa7w8s5aApu6td45gWTAAFkqCnaWY6ZsJ8DpyzDdYmVy4fARKqbn5F1UYBUMeVvYTBsoSoLvZnPdjd3pVHbmAHP' 367 + publicKeyMultibase: 'zDnaeh9v2RmcMo13Du2d6pjUf5bZwtauYxj3n9dYjw4EZUAR7' 367 368 } 368 369 ], 369 370 service: [
+10 -8
packages/lib/src/document.ts
··· 1 - import * as uint8arrays from 'uint8arrays' 2 1 import * as crypto from '@atproto/crypto' 3 2 import * as t from './types' 4 3 import { UnsupportedKeyError } from './error' 5 4 import { ParsedMultikey } from '@atproto/crypto' 6 5 7 6 export const formatDidDoc = (data: t.DocumentData): t.DidDocument => { 8 - const context = ['https://www.w3.org/ns/did/v1'] 7 + const context = [ 8 + 'https://www.w3.org/ns/did/v1', 9 + 'https://w3id.org/security/multikey/v1', 10 + ] 9 11 10 12 const verificationMethods: VerificationMethod[] = [] 11 13 for (const [keyid, key] of Object.entries(data.verificationMethods)) { ··· 14 16 context.push(info.context) 15 17 } 16 18 verificationMethods.push({ 17 - id: `#${keyid}`, 19 + id: `${data.did}#${keyid}`, 18 20 type: info.type, 19 21 controller: data.did, 20 22 publicKeyMultibase: info.publicKeyMultibase, ··· 65 67 } catch (err) { 66 68 throw new UnsupportedKeyError(key, err) 67 69 } 68 - const { jwtAlg, keyBytes } = keyInfo 70 + const { jwtAlg } = keyInfo 69 71 70 72 if (jwtAlg === crypto.P256_JWT_ALG) { 71 73 return { 72 74 context: 'https://w3id.org/security/suites/ecdsa-2019/v1', 73 - type: 'EcdsaSecp256r1VerificationKey2019', 74 - publicKeyMultibase: `z${uint8arrays.toString(keyBytes, 'base58btc')}`, 75 + type: 'Multikey', 76 + publicKeyMultibase: key.replace(/^(did:key:)/, ''), 75 77 } 76 78 } else if (jwtAlg === crypto.SECP256K1_JWT_ALG) { 77 79 return { 78 80 context: 'https://w3id.org/security/suites/secp256k1-2019/v1', 79 - type: 'EcdsaSecp256k1VerificationKey2019', 80 - publicKeyMultibase: `z${uint8arrays.toString(keyBytes, 'base58btc')}`, 81 + type: 'Multikey', 82 + publicKeyMultibase: key.replace(/^(did:key:)/, ''), 81 83 } 82 84 } 83 85 throw new UnsupportedKeyError(key, `Unsupported key type: ${jwtAlg}`)
+9 -15
packages/lib/tests/document.test.ts
··· 1 - import * as uint8arrays from 'uint8arrays' 2 1 import { P256Keypair, parseDidKey, Secp256k1Keypair } from '@atproto/crypto' 3 2 import * as document from '../src/document' 4 3 import * as t from '../src/types' ··· 38 37 ) 39 38 expect(doc['@context']).toEqual([ 40 39 'https://www.w3.org/ns/did/v1', 40 + 'https://w3id.org/security/multikey/v1', 41 41 'https://w3id.org/security/suites/secp256k1-2019/v1', 42 42 'https://w3id.org/security/suites/ecdsa-2019/v1', 43 43 ]) ··· 46 46 47 47 expect(doc.verificationMethod.length).toBe(2) 48 48 49 - expect(doc.verificationMethod[0].id).toEqual('#atproto') 50 - expect(doc.verificationMethod[0].type).toEqual( 51 - 'EcdsaSecp256k1VerificationKey2019', 52 - ) 49 + expect(doc.verificationMethod[0].id).toEqual(data.did + '#atproto') 50 + expect(doc.verificationMethod[0].type).toEqual('Multikey') 53 51 expect(doc.verificationMethod[0].controller).toEqual(data.did) 54 - const parsedAtprotoKey = parseDidKey(atprotoKey.did()) 55 - const atprotoKeyMultibase = 56 - 'z' + uint8arrays.toString(parsedAtprotoKey.keyBytes, 'base58btc') 52 + parseDidKey(atprotoKey.did()) 53 + const atprotoKeyMultibase = atprotoKey.did().replace(/^(did:key:)/, '') 57 54 expect(doc.verificationMethod[0].publicKeyMultibase).toEqual( 58 55 atprotoKeyMultibase, 59 56 ) 60 57 61 - expect(doc.verificationMethod[1].id).toEqual('#other') 62 - expect(doc.verificationMethod[1].type).toEqual( 63 - 'EcdsaSecp256r1VerificationKey2019', 64 - ) 58 + expect(doc.verificationMethod[1].id).toEqual(data.did + '#other') 59 + expect(doc.verificationMethod[1].type).toEqual('Multikey') 65 60 expect(doc.verificationMethod[1].controller).toEqual(data.did) 66 - const parsedOtherKey = parseDidKey(otherKey.did()) 67 - const otherKeyMultibase = 68 - 'z' + uint8arrays.toString(parsedOtherKey.keyBytes, 'base58btc') 61 + parseDidKey(otherKey.did()) 62 + const otherKeyMultibase = otherKey.did().replace(/^(did:key:)/, '') 69 63 expect(doc.verificationMethod[1].publicKeyMultibase).toEqual( 70 64 otherKeyMultibase, 71 65 )