Skip to content

Commit e5c63c5

Browse files
committed
Use @digitalbazaar/did-method-key@5.
1 parent faf822b commit e5c63c5

5 files changed

Lines changed: 75 additions & 39 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# bedrock-app-identity ChangeLog
22

3+
## 3.1.0 - 2025-09-dd
4+
5+
### Changed
6+
- Update dependencies:
7+
- `@digitalbazaar/did-method-key@5`.
8+
39
## 3.0.1 - 2022-05-21
410

511
### Fixed

lib/index.js

Lines changed: 42 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,28 @@
11
/*!
2-
* Copyright (c) 2020-2022 Digital Bazaar, Inc. All rights reserved.
2+
* Copyright (c) 2020-2025 Digital Bazaar, Inc. All rights reserved.
33
*/
44
import * as bedrock from '@bedrock/core';
5-
import {createRequire} from 'node:module';
5+
import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey';
66
import {decodeSecretKeySeed} from 'bnid';
7+
import {driver} from '@digitalbazaar/did-method-key';
78
import {logger} from './logger.js';
8-
const require = createRequire(import.meta.url);
9-
const {driver} = require('@digitalbazaar/did-method-key');
9+
import {
10+
X25519KeyAgreementKey2020
11+
} from '@digitalbazaar/x25519-key-agreement-key-2020';
1012

1113
import './config.js';
1214

1315
const {config, util: {BedrockError}} = bedrock;
16+
1417
const didKeyDriver = driver();
18+
didKeyDriver.use({
19+
multibaseMultikeyHeader: 'z6Mk',
20+
fromMultibase: Ed25519Multikey.from
21+
});
22+
didKeyDriver.use({
23+
multibaseMultikeyHeader: 'z6LS',
24+
fromMultibase: X25519KeyAgreementKey2020.from
25+
});
1526

1627
let APPLICATION_IDENTITY;
1728
const SERVICE_IDENTITIES = new Map();
@@ -122,27 +133,37 @@ async function _generateKeys({seedMultibase}) {
122133
// convert multibase seed to Uint8Array
123134
const seed = decodeSecretKeySeed({secretKeySeed: seedMultibase});
124135

125-
// initialize key after bedrock configuration stage is complete
126-
const didKey = await didKeyDriver.generate({seed});
127-
128-
const {didDocument: {
129-
authentication, assertionMethod, capabilityDelegation, capabilityInvocation,
130-
keyAgreement, id
131-
}} = didKey;
132-
133-
const authenticationKey = didKey.keyPairs.get(authentication[0]);
134-
const assertionMethodKey = didKey.keyPairs.get(assertionMethod[0]);
135-
const capabilityDelegationKey = didKey.keyPairs.get(capabilityDelegation[0]);
136-
const capabilityInvocationKey = didKey.keyPairs.get(capabilityInvocation[0]);
137-
const keyAgreementKey = didKey.keyPairs.get(keyAgreement[0].id);
136+
// initialize `did:key` DID after bedrock configuration stage is complete
137+
const verificationKeyPair = await Ed25519Multikey.generate({seed});
138+
const {
139+
didDocument: {id}, methodFor
140+
} = await didKeyDriver.fromKeyPair({verificationKeyPair});
141+
142+
// update verification key pair with `id` and `controller`
143+
verificationKeyPair.id = methodFor({purpose: 'authentication'}).id;
144+
verificationKeyPair.controller = id;
145+
// for backwards compatibility, use legacy type `Ed25519VerificationKey2020`;
146+
// to be replaced with `Multikey` in next major release
147+
verificationKeyPair.type = 'Ed25519VerificationKey2020';
148+
149+
// for backwards compatibility, import key agreement key; to be removed
150+
// in next major release
151+
const keyAgreementKey = X25519KeyAgreementKey2020
152+
.fromEd25519VerificationKey2020({
153+
keyPair: {
154+
...verificationKeyPair,
155+
privateKeyMultibase: verificationKeyPair.secretKeyMultibase
156+
}
157+
});
158+
keyAgreementKey.id = `${id}#${keyAgreementKey.publicKeyMultibase}`;
138159

139160
return {
140161
id,
141162
keys: {
142-
authenticationKey,
143-
assertionMethodKey,
144-
capabilityDelegationKey,
145-
capabilityInvocationKey,
163+
authenticationKey: verificationKeyPair,
164+
assertionMethodKey: verificationKeyPair,
165+
capabilityDelegationKey: verificationKeyPair,
166+
capabilityInvocationKey: verificationKeyPair,
146167
keyAgreementKey
147168
}
148169
};

package.json

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,12 @@
2525
},
2626
"homepage": "https://github.com/digitalbazaar/bedrock-app-identity",
2727
"dependencies": {
28-
"@digitalbazaar/did-method-key": "^2.0.0",
29-
"bnid": "^3.0.0"
28+
"@digitalbazaar/did-method-key": "^5.2.0",
29+
"@digitalbazaar/ed25519-multikey": "^1.3.1",
30+
"@digitalbazaar/ed25519-signature-2020": "^5.4.0",
31+
"@digitalbazaar/x25519-key-agreement-key-2020": "^3.0.1",
32+
"bnid": "^3.0.0",
33+
"eslint-plugin-unicorn": "^56.0.1"
3034
},
3135
"peerDependencies": {
3236
"@bedrock/core": "^6.0.0"
@@ -35,10 +39,9 @@
3539
"lib": "./lib"
3640
},
3741
"devDependencies": {
38-
"eslint": "^8.12.0",
39-
"eslint-config-digitalbazaar": "^2.8.0",
40-
"eslint-plugin-jsdoc": "^37.9.7",
41-
"jsdoc-to-markdown": "^7.1.1"
42+
"eslint": "^8.57.1",
43+
"eslint-config-digitalbazaar": "^5.2.0",
44+
"eslint-plugin-jsdoc": "^50.8.0"
4245
},
4346
"engines": {
4447
"node": ">=14"

test/mocha/10-api.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
/*!
2-
* Copyright (c) 2020-2022 Digital Bazaar, Inc. All rights reserved.
2+
* Copyright (c) 2020-2025 Digital Bazaar, Inc. All rights reserved.
33
*/
44
import * as bedrock from '@bedrock/core';
55
import {
6-
getAppIdentity,
7-
getServiceIdentities,
8-
_resetApplicationIdentity,
96
_generateApplicationIdentity,
10-
_generateServiceIdentity
7+
_generateServiceIdentity,
8+
_resetApplicationIdentity,
9+
getAppIdentity,
10+
getServiceIdentities
1111
} from '@bedrock/app-identity';
1212

1313
describe('bedrock-app-identity API', () => {

util/generate-seed.js

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
/*!
2-
* Copyright (c) 2020-2022 Digital Bazaar, Inc. All rights reserved.
2+
* Copyright (c) 2020-2025 Digital Bazaar, Inc. All rights reserved.
33
*/
4-
import {createRequire} from 'module';
5-
import {generateSecretKeySeed, decodeSecretKeySeed} from 'bnid';
6-
const require = createRequire(import.meta.url);
7-
const {driver} = require('@digitalbazaar/did-method-key');
4+
import * as Ed25519Multikey from '@digitalbazaar/ed25519-multikey';
5+
import {decodeSecretKeySeed, generateSecretKeySeed} from 'bnid';
6+
import {driver} from '@digitalbazaar/did-method-key';
87

98
const didKeyDriver = driver();
9+
didKeyDriver.use({
10+
multibaseMultikeyHeader: 'z6Mk',
11+
fromMultibase: Ed25519Multikey.from
12+
});
1013

1114
// generate a random seed
1215
const secretKeySeed = await generateSecretKeySeed();
1316
const seedBytes = await decodeSecretKeySeed({secretKeySeed});
14-
const didKey = await didKeyDriver.generate({seed: seedBytes});
1517

16-
console.log('PUBLIC DID', didKey.didDocument.id);
18+
// generate `did:key` DID
19+
const verificationKeyPair = await Ed25519Multikey.generate({seed: seedBytes});
20+
const {didDocument} = await didKeyDriver.fromKeyPair({verificationKeyPair});
21+
22+
console.log('PUBLIC DID', didDocument.id);
1723
console.log(`SECRET seedMultibase: ${secretKeySeed}`);

0 commit comments

Comments
 (0)