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

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

DID document formatting iteration

Changed files
+24 -33
.github
packages
+1 -4
.github/workflows/build-and-push-aws.yaml
···
name: build-and-push-aws
-
on:
-
push:
-
branches:
-
- main
+
on: [push]
env:
REGISTRY: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_REGISTRY }}
USERNAME: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_USERNAME }}
+1 -4
.github/workflows/build-and-push-ghcr.yaml
···
name: build-and-push-ghcr
-
on:
-
push:
-
branches:
-
- main
+
on: [push]
env:
REGISTRY: ghcr.io
USERNAME: ${{ github.actor }}
+3 -2
README.md
···
{
'@context': [
'https://www.w3.org/ns/did/v1',
+
'https://w3id.org/security/multikey/v1',
'https://w3id.org/security/suites/ecdsa-2019/v1'
],
id: 'did:plc:7iza6de2dwap2sbkpav7c6c6',
···
verificationMethod: [
{
id: '#atproto',
-
type: 'EcdsaSecp256r1VerificationKey2019',
+
type: 'Multikey',
controller: 'did:plc:7iza6de2dwap2sbkpav7c6c6',
-
publicKeyMultibase: 'zSSa7w8s5aApu6td45gWTAAFkqCnaWY6ZsJ8DpyzDdYmVy4fARKqbn5F1UYBUMeVvYTBsoSoLvZnPdjd3pVHbmAHP'
+
publicKeyMultibase: 'zDnaeh9v2RmcMo13Du2d6pjUf5bZwtauYxj3n9dYjw4EZUAR7'
}
],
service: [
+10 -8
packages/lib/src/document.ts
···
-
import * as uint8arrays from 'uint8arrays'
import * as crypto from '@atproto/crypto'
import * as t from './types'
import { UnsupportedKeyError } from './error'
import { ParsedMultikey } from '@atproto/crypto'
export const formatDidDoc = (data: t.DocumentData): t.DidDocument => {
-
const context = ['https://www.w3.org/ns/did/v1']
+
const context = [
+
'https://www.w3.org/ns/did/v1',
+
'https://w3id.org/security/multikey/v1',
+
]
const verificationMethods: VerificationMethod[] = []
for (const [keyid, key] of Object.entries(data.verificationMethods)) {
···
context.push(info.context)
}
verificationMethods.push({
-
id: `#${keyid}`,
+
id: `${data.did}#${keyid}`,
type: info.type,
controller: data.did,
publicKeyMultibase: info.publicKeyMultibase,
···
} catch (err) {
throw new UnsupportedKeyError(key, err)
}
-
const { jwtAlg, keyBytes } = keyInfo
+
const { jwtAlg } = keyInfo
if (jwtAlg === crypto.P256_JWT_ALG) {
return {
context: 'https://w3id.org/security/suites/ecdsa-2019/v1',
-
type: 'EcdsaSecp256r1VerificationKey2019',
-
publicKeyMultibase: `z${uint8arrays.toString(keyBytes, 'base58btc')}`,
+
type: 'Multikey',
+
publicKeyMultibase: key.replace(/^(did:key:)/, ''),
}
} else if (jwtAlg === crypto.SECP256K1_JWT_ALG) {
return {
context: 'https://w3id.org/security/suites/secp256k1-2019/v1',
-
type: 'EcdsaSecp256k1VerificationKey2019',
-
publicKeyMultibase: `z${uint8arrays.toString(keyBytes, 'base58btc')}`,
+
type: 'Multikey',
+
publicKeyMultibase: key.replace(/^(did:key:)/, ''),
}
}
throw new UnsupportedKeyError(key, `Unsupported key type: ${jwtAlg}`)
+9 -15
packages/lib/tests/document.test.ts
···
-
import * as uint8arrays from 'uint8arrays'
import { P256Keypair, parseDidKey, Secp256k1Keypair } from '@atproto/crypto'
import * as document from '../src/document'
import * as t from '../src/types'
···
)
expect(doc['@context']).toEqual([
'https://www.w3.org/ns/did/v1',
+
'https://w3id.org/security/multikey/v1',
'https://w3id.org/security/suites/secp256k1-2019/v1',
'https://w3id.org/security/suites/ecdsa-2019/v1',
])
···
expect(doc.verificationMethod.length).toBe(2)
-
expect(doc.verificationMethod[0].id).toEqual('#atproto')
-
expect(doc.verificationMethod[0].type).toEqual(
-
'EcdsaSecp256k1VerificationKey2019',
-
)
+
expect(doc.verificationMethod[0].id).toEqual(data.did + '#atproto')
+
expect(doc.verificationMethod[0].type).toEqual('Multikey')
expect(doc.verificationMethod[0].controller).toEqual(data.did)
-
const parsedAtprotoKey = parseDidKey(atprotoKey.did())
-
const atprotoKeyMultibase =
-
'z' + uint8arrays.toString(parsedAtprotoKey.keyBytes, 'base58btc')
+
parseDidKey(atprotoKey.did())
+
const atprotoKeyMultibase = atprotoKey.did().replace(/^(did:key:)/, '')
expect(doc.verificationMethod[0].publicKeyMultibase).toEqual(
atprotoKeyMultibase,
)
-
expect(doc.verificationMethod[1].id).toEqual('#other')
-
expect(doc.verificationMethod[1].type).toEqual(
-
'EcdsaSecp256r1VerificationKey2019',
-
)
+
expect(doc.verificationMethod[1].id).toEqual(data.did + '#other')
+
expect(doc.verificationMethod[1].type).toEqual('Multikey')
expect(doc.verificationMethod[1].controller).toEqual(data.did)
-
const parsedOtherKey = parseDidKey(otherKey.did())
-
const otherKeyMultibase =
-
'z' + uint8arrays.toString(parsedOtherKey.keyBytes, 'base58btc')
+
parseDidKey(otherKey.did())
+
const otherKeyMultibase = otherKey.did().replace(/^(did:key:)/, '')
expect(doc.verificationMethod[1].publicKeyMultibase).toEqual(
otherKeyMultibase,
)