Skip to content

Commit

Permalink
Add support for did:jwk.
Browse files Browse the repository at this point in the history
  • Loading branch information
dlongley committed Oct 3, 2024
1 parent d70cf3e commit 5bec253
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 3 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
8 changes: 8 additions & 0 deletions lib/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -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: {},
Expand Down
22 changes: 22 additions & 0 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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],
Expand All @@ -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) {
Expand Down
8 changes: 5 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
},
Expand Down

0 comments on commit 5bec253

Please sign in to comment.