From 5bec25324a477fc69b1c803e1466a4bac1bc04cd Mon Sep 17 00:00:00 2001 From: Dave Longley Date: Wed, 2 Oct 2024 21:23:44 -0400 Subject: [PATCH] Add support for `did:jwk`. --- CHANGELOG.md | 5 +++++ lib/config.js | 8 ++++++++ lib/index.js | 22 ++++++++++++++++++++++ package.json | 8 +++++--- 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 555f688..7306f51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # bedrock-did-io ChangeLog +## 10.4.0 - 2024-10-dd + +### Added +- Add support for `did:jwk`. + ## 10.3.3 - 2024-09-19 ### Fixed diff --git a/lib/config.js b/lib/config.js index d6527f1..5bdd15e 100644 --- a/lib/config.js +++ b/lib/config.js @@ -7,6 +7,14 @@ const namespace = 'did-io'; const cfg = config[namespace] = {}; cfg.methods = { + jwk: { + keyTypes: { + Bls12381G2: {}, + Ed25519: {}, + 'P-256': {}, + 'P-384': {} + } + }, key: { keyTypes: { Bls12381G2: {}, diff --git a/lib/index.js b/lib/index.js index f6b7483..18528a1 100644 --- a/lib/index.js +++ b/lib/index.js @@ -3,10 +3,12 @@ */ import * as bedrock from '@bedrock/core'; import * as Bls12381Multikey from '@digitalbazaar/bls12-381-multikey'; +import * as didMethodJwk from '@digitalbazaar/did-method-jwk'; import * as didMethodKey from '@digitalbazaar/did-method-key'; import * as didMethodWeb from '@digitalbazaar/did-method-web'; import * as didVeresOne from 'did-veres-one'; import * as EcdsaMultikey from '@digitalbazaar/ecdsa-multikey'; +import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey'; import {CachedResolver} from '@digitalbazaar/did-io'; import { Ed25519VerificationKey2020 @@ -22,6 +24,8 @@ export const didIo = new CachedResolver(); const SUPPORTED_KEY_TYPES = new Map([ ['Bls12381G2', Bls12381Multikey], + // note: once this is upgraded to `Ed25519Multikey` the special case code + // for `did:jwk` should be removed below ['Ed25519', Ed25519VerificationKey2020], ['P-256', EcdsaMultikey], ['P-384', EcdsaMultikey], @@ -47,6 +51,24 @@ bedrock.events.on('bedrock.init', () => { bedrock.events.on('bedrock.start', () => { const {config: {'did-io': cfg}} = bedrock; + // support did:jwk + const didJwkDriver = didMethodJwk.driver(); + for(const keyType in cfg.methods.key.keyTypes) { + let handler; + // special case: use modern `Ed25519Multikey` here -- remove this once + // it used for all DID methods + if(keyType === 'Ed25519') { + handler = Ed25519Multikey; + } else { + handler = SUPPORTED_KEY_TYPES.get(keyType); + } + if(!handler) { + throw new Error(`Unsupported did:jwk "keyType", "${keyType}".`); + } + didJwkDriver.use({algorithm: keyType, handler: handler.from}); + } + didIo.use(didJwkDriver); + // support did:key const didKeyDriver = didMethodKey.driver(); for(const keyType in cfg.methods.key.keyTypes) { diff --git a/package.json b/package.json index 6c820b5..8a403c9 100644 --- a/package.json +++ b/package.json @@ -27,12 +27,14 @@ }, "homepage": "https://github.com/digitalbazaar/bedrock-did-io", "dependencies": { - "@digitalbazaar/bls12-381-multikey": "^2.0.0", + "@digitalbazaar/bls12-381-multikey": "^2.1.0", "@digitalbazaar/did-io": "^2.0.0", + "@digitalbazaar/did-method-jwk": "^2.0.0", "@digitalbazaar/did-method-key": "^5.2.0", "@digitalbazaar/did-method-web": "^1.0.1", - "@digitalbazaar/ecdsa-multikey": "^1.7.0", - "@digitalbazaar/ed25519-verification-key-2020": "^4.1.0", + "@digitalbazaar/ecdsa-multikey": "^1.8.0", + "@digitalbazaar/ed25519-multikey": "^1.3.0", + "@digitalbazaar/ed25519-verification-key-2020": "^4.2.0", "@digitalbazaar/lru-memoize": "^3.0.2", "did-veres-one": "^16.0.1" },