@docknetwork/wallet-sdk-relay-service 0.4.23 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/did/dids.js +10 -8
- package/lib/did/dids.mjs +4 -2
- package/lib/didcomm.js +65 -30
- package/lib/didcomm.mjs +43 -31
- package/lib/index.js +3 -3
- package/lib/index.mjs +3 -3
- package/package.json +1 -1
- package/src/did/dids.js +2 -1
- package/src/didcomm.js +43 -17
- package/tests/relay-service.e2e.test.js +2 -2
- package/lib/did/did-resolver.js +0 -38
- package/lib/did/did-resolver.mjs +0 -26
- package/src/did/did-resolver.js +0 -35
package/lib/did/dids.js
CHANGED
|
@@ -3,14 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var _rollupPluginBabelHelpers = require('../_rollupPluginBabelHelpers-4923c894.js');
|
|
6
|
-
var
|
|
7
|
-
var service = require('@docknetwork/wallet-sdk-wasm/src/services/dock/service');
|
|
6
|
+
var service = require('@docknetwork/wallet-sdk-wasm/lib/services/dock/service');
|
|
8
7
|
|
|
8
|
+
var hexDIDToQualified = function hexDIDToQualified(did) {
|
|
9
|
+
return "did:dock:".concat(did);
|
|
10
|
+
};
|
|
9
11
|
function resolveDID(_x) {
|
|
10
12
|
return _resolveDID.apply(this, arguments);
|
|
11
13
|
}
|
|
12
14
|
function _resolveDID() {
|
|
13
|
-
_resolveDID = _rollupPluginBabelHelpers._asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers._regeneratorRuntime().mark(function _callee(did
|
|
15
|
+
_resolveDID = _rollupPluginBabelHelpers._asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers._regeneratorRuntime().mark(function _callee(did) {
|
|
14
16
|
var disableCache,
|
|
15
17
|
qualifiedDID,
|
|
16
18
|
_args = arguments;
|
|
@@ -19,14 +21,14 @@ function _resolveDID() {
|
|
|
19
21
|
case 0:
|
|
20
22
|
disableCache = _args.length > 1 && _args[1] !== undefined ? _args[1] : false;
|
|
21
23
|
// Check if string has no qualifier, if so assume its hex format
|
|
22
|
-
qualifiedDID = did
|
|
23
|
-
if (did
|
|
24
|
-
if (did
|
|
24
|
+
qualifiedDID = did;
|
|
25
|
+
if (did.substr(0, 4) !== 'did:') {
|
|
26
|
+
if (did.substr(0, 2) !== '0x') {
|
|
25
27
|
// Ensure to prepend 0x to hex string
|
|
26
|
-
qualifiedDID =
|
|
28
|
+
qualifiedDID = hexDIDToQualified("0x".concat(did));
|
|
27
29
|
} else {
|
|
28
30
|
// Resolve hex DIDs to qualified (did:dock:xyz)
|
|
29
|
-
qualifiedDID =
|
|
31
|
+
qualifiedDID = hexDIDToQualified(did);
|
|
30
32
|
}
|
|
31
33
|
}
|
|
32
34
|
_context.next = 5;
|
package/lib/did/dids.mjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { _ as _asyncToGenerator, a as _regeneratorRuntime } from '../_rollupPluginBabelHelpers-78739aa5.js';
|
|
2
|
-
import {
|
|
3
|
-
import { dockService } from '@docknetwork/wallet-sdk-wasm/src/services/dock/service';
|
|
2
|
+
import { dockService } from '@docknetwork/wallet-sdk-wasm/lib/services/dock/service';
|
|
4
3
|
|
|
4
|
+
var hexDIDToQualified = function hexDIDToQualified(did) {
|
|
5
|
+
return "did:dock:".concat(did);
|
|
6
|
+
};
|
|
5
7
|
function resolveDID(_x) {
|
|
6
8
|
return _resolveDID.apply(this, arguments);
|
|
7
9
|
}
|
package/lib/didcomm.js
CHANGED
|
@@ -8,13 +8,32 @@ var ed25519VerificationKey2020 = require('@digitalbazaar/ed25519-verification-ke
|
|
|
8
8
|
var minimalCipher = require('@docknetwork/minimal-cipher');
|
|
9
9
|
var uuid = require('uuid');
|
|
10
10
|
var base64url = require('base64url');
|
|
11
|
+
var bs58 = require('base58-universal');
|
|
11
12
|
var did_dids = require('./did/dids.js');
|
|
12
|
-
require('@docknetwork/sdk/
|
|
13
|
-
require('@docknetwork/wallet-sdk-wasm/src/services/dock/service');
|
|
13
|
+
require('@docknetwork/wallet-sdk-wasm/lib/services/dock/service');
|
|
14
14
|
|
|
15
15
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
16
16
|
|
|
17
|
+
function _interopNamespace(e) {
|
|
18
|
+
if (e && e.__esModule) return e;
|
|
19
|
+
var n = Object.create(null);
|
|
20
|
+
if (e) {
|
|
21
|
+
Object.keys(e).forEach(function (k) {
|
|
22
|
+
if (k !== 'default') {
|
|
23
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
24
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () { return e[k]; }
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
n["default"] = e;
|
|
32
|
+
return Object.freeze(n);
|
|
33
|
+
}
|
|
34
|
+
|
|
17
35
|
var base64url__default = /*#__PURE__*/_interopDefaultLegacy(base64url);
|
|
36
|
+
var bs58__namespace = /*#__PURE__*/_interopNamespace(bs58);
|
|
18
37
|
|
|
19
38
|
var DIDCOMM_TYPE_BASIC = 'https://didcomm.org/basicmessage/1.0/message';
|
|
20
39
|
var DIDCOMM_TYPE_ISSUE_DIRECT = 'https://didcomm.org/issue-credential/2.0/issue-credential';
|
|
@@ -330,6 +349,9 @@ function isValidKeyAgreementDoc(keyDoc) {
|
|
|
330
349
|
function isDerivableKey(keyDoc) {
|
|
331
350
|
return keyDoc.type === 'Ed25519VerificationKey2018' || keyDoc.type === 'Ed25519VerificationKey2019' || keyDoc.type === 'Ed25519VerificationKey2020';
|
|
332
351
|
}
|
|
352
|
+
function getDIDKeydocsFromDIDDocument(didDocument) {
|
|
353
|
+
return [].concat(_rollupPluginBabelHelpers._toConsumableArray(potentialToArray(didDocument.verificationMethod)), _rollupPluginBabelHelpers._toConsumableArray(potentialToArray(didDocument.keyAgreement)), _rollupPluginBabelHelpers._toConsumableArray(potentialToArray(didDocument.publicKey)));
|
|
354
|
+
}
|
|
333
355
|
function getAgreementKeydocFromDID(_x17) {
|
|
334
356
|
return _getAgreementKeydocFromDID.apply(this, arguments);
|
|
335
357
|
}
|
|
@@ -345,46 +367,52 @@ function _getAgreementKeydocFromDID() {
|
|
|
345
367
|
}
|
|
346
368
|
return _context9.abrupt("return", undefined);
|
|
347
369
|
case 2:
|
|
370
|
+
if (!did.startsWith('did:polygon')) {
|
|
371
|
+
_context9.next = 4;
|
|
372
|
+
break;
|
|
373
|
+
}
|
|
374
|
+
throw new Error('PolygonID DIDs cannot be used for DIDComm purposes');
|
|
375
|
+
case 4:
|
|
348
376
|
// Resolve actual DID document and get key agreement keys
|
|
349
377
|
isDIDUrl = did.indexOf('#') !== -1;
|
|
350
|
-
_context9.next =
|
|
378
|
+
_context9.next = 7;
|
|
351
379
|
return did_dids.resolveDID(did);
|
|
352
|
-
case
|
|
380
|
+
case 7:
|
|
353
381
|
didDocument = _context9.sent;
|
|
354
382
|
keyAgreements = didDocument.keyAgreement ? Array.isArray(didDocument.keyAgreement) ? didDocument.keyAgreement : [didDocument.keyAgreement] : []; // User supplied full URL, use that if possible
|
|
355
383
|
// if not it may still require derivation to be valid (such as dock DIDs)
|
|
356
384
|
if (!isDIDUrl) {
|
|
357
|
-
_context9.next =
|
|
385
|
+
_context9.next = 13;
|
|
358
386
|
break;
|
|
359
387
|
}
|
|
360
388
|
foundDoc = keyAgreements.filter(function (keyDoc) {
|
|
361
389
|
return keyDoc.id === did && isValidKeyAgreementDoc(keyDoc);
|
|
362
390
|
})[0];
|
|
363
391
|
if (!foundDoc) {
|
|
364
|
-
_context9.next =
|
|
392
|
+
_context9.next = 13;
|
|
365
393
|
break;
|
|
366
394
|
}
|
|
367
395
|
return _context9.abrupt("return", foundDoc);
|
|
368
|
-
case
|
|
396
|
+
case 13:
|
|
369
397
|
// User supplied DID, find first supported keyagreement document
|
|
370
398
|
firstKeyAgreement = keyAgreements.filter(isValidKeyAgreementDoc)[0];
|
|
371
399
|
if (!firstKeyAgreement) {
|
|
372
|
-
_context9.next =
|
|
400
|
+
_context9.next = 16;
|
|
373
401
|
break;
|
|
374
402
|
}
|
|
375
403
|
return _context9.abrupt("return", firstKeyAgreement);
|
|
376
|
-
case
|
|
404
|
+
case 16:
|
|
377
405
|
// No valid key agreement found on resolution, lets derive one from a ED25519 key if we can
|
|
378
|
-
publicKeys =
|
|
406
|
+
publicKeys = getDIDKeydocsFromDIDDocument(didDocument); // See if DID document has any derivable keys
|
|
379
407
|
derivableKey = publicKeys.filter(isDerivableKey)[0];
|
|
380
408
|
if (!derivableKey) {
|
|
381
|
-
_context9.next =
|
|
409
|
+
_context9.next = 20;
|
|
382
410
|
break;
|
|
383
411
|
}
|
|
384
412
|
return _context9.abrupt("return", getDerivedAgreementKey(derivableKey));
|
|
385
|
-
case
|
|
413
|
+
case 20:
|
|
386
414
|
throw new Error("Unable to find or derive X25519 key agreement for DID: ".concat(did));
|
|
387
|
-
case
|
|
415
|
+
case 21:
|
|
388
416
|
case "end":
|
|
389
417
|
return _context9.stop();
|
|
390
418
|
}
|
|
@@ -392,12 +420,21 @@ function _getAgreementKeydocFromDID() {
|
|
|
392
420
|
}));
|
|
393
421
|
return _getAgreementKeydocFromDID.apply(this, arguments);
|
|
394
422
|
}
|
|
423
|
+
var MULTIBASE_BASE58BTC_HEADER = 'z';
|
|
424
|
+
var MULTICODEC_ED25519_PRIV_HEADER = new Uint8Array([0x80, 0x26]);
|
|
425
|
+
var MULTICODEC_ED25519_PUB_HEADER = new Uint8Array([0xed, 0x01]);
|
|
426
|
+
function encodeMbKey(header, key) {
|
|
427
|
+
var mbKey = new Uint8Array(header.length + key.length);
|
|
428
|
+
mbKey.set(header);
|
|
429
|
+
mbKey.set(key, header.length);
|
|
430
|
+
return MULTIBASE_BASE58BTC_HEADER + bs58__namespace.encode(mbKey);
|
|
431
|
+
}
|
|
395
432
|
function getDerivedAgreementKey(_x18) {
|
|
396
433
|
return _getDerivedAgreementKey.apply(this, arguments);
|
|
397
434
|
}
|
|
398
435
|
function _getDerivedAgreementKey() {
|
|
399
436
|
_getDerivedAgreementKey = _rollupPluginBabelHelpers._asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers._regeneratorRuntime().mark(function _callee10(derivableKey) {
|
|
400
|
-
var
|
|
437
|
+
var publicKeyMultibase, privateKeyMultibase, derivedKeyAgreement;
|
|
401
438
|
return _rollupPluginBabelHelpers._regeneratorRuntime().wrap(function _callee10$(_context10) {
|
|
402
439
|
while (1) switch (_context10.prev = _context10.next) {
|
|
403
440
|
case 0:
|
|
@@ -407,23 +444,17 @@ function _getDerivedAgreementKey() {
|
|
|
407
444
|
}
|
|
408
445
|
throw new Error("Cannot derive X25519 KAK from type: ".concat(derivableKey.type));
|
|
409
446
|
case 2:
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
}
|
|
419
|
-
case 5:
|
|
420
|
-
ed2020VerificationKey = _context10.sent;
|
|
421
|
-
// Convert ed25519 2020 verification key into a key agreement key
|
|
422
|
-
derivedKeyAgreement = x25519KeyAgreementKey2020.X25519KeyAgreementKey2020.fromEd25519VerificationKey2020(_rollupPluginBabelHelpers._objectSpread2({
|
|
423
|
-
keyPair: ed2020VerificationKey
|
|
424
|
-
}, ed2020VerificationKey));
|
|
447
|
+
publicKeyMultibase = derivableKey.publicKeyBase58 ? encodeMbKey(MULTICODEC_ED25519_PUB_HEADER, bs58__namespace.decode(derivableKey.publicKeyBase58)) : derivableKey.publicKeyMultibase;
|
|
448
|
+
privateKeyMultibase = (derivableKey.privateKeyBase58 ? encodeMbKey(MULTICODEC_ED25519_PRIV_HEADER, bs58__namespace.decode(derivableKey.privateKeyBase58)) : undefined) || derivableKey.privateKeyMultibase; // Convert ed25519 2020 verification key into a key agreement key
|
|
449
|
+
derivedKeyAgreement = x25519KeyAgreementKey2020.X25519KeyAgreementKey2020.fromEd25519VerificationKey2020({
|
|
450
|
+
keyPair: {
|
|
451
|
+
publicKeyMultibase: publicKeyMultibase,
|
|
452
|
+
privateKeyMultibase: privateKeyMultibase,
|
|
453
|
+
controller: derivableKey.controller
|
|
454
|
+
}
|
|
455
|
+
});
|
|
425
456
|
return _context10.abrupt("return", derivedKeyAgreement);
|
|
426
|
-
case
|
|
457
|
+
case 6:
|
|
427
458
|
case "end":
|
|
428
459
|
return _context10.stop();
|
|
429
460
|
}
|
|
@@ -583,6 +614,9 @@ function _didcommCreateEncrypted() {
|
|
|
583
614
|
exports.DIDCOMM_TYPE_BASIC = DIDCOMM_TYPE_BASIC;
|
|
584
615
|
exports.DIDCOMM_TYPE_ISSUE_DIRECT = DIDCOMM_TYPE_ISSUE_DIRECT;
|
|
585
616
|
exports.DIDCOMM_TYPE_REQUEST_ISSUE_WITH_DATA = DIDCOMM_TYPE_REQUEST_ISSUE_WITH_DATA;
|
|
617
|
+
exports.MULTIBASE_BASE58BTC_HEADER = MULTIBASE_BASE58BTC_HEADER;
|
|
618
|
+
exports.MULTICODEC_ED25519_PRIV_HEADER = MULTICODEC_ED25519_PRIV_HEADER;
|
|
619
|
+
exports.MULTICODEC_ED25519_PUB_HEADER = MULTICODEC_ED25519_PUB_HEADER;
|
|
586
620
|
exports.defaultKaKResolver = defaultKaKResolver;
|
|
587
621
|
exports.defaultVerificationKeyResolver = defaultVerificationKeyResolver;
|
|
588
622
|
exports.didcommCreateEncrypted = didcommCreateEncrypted;
|
|
@@ -591,6 +625,7 @@ exports.didcommDecodeSignedJWT = didcommDecodeSignedJWT;
|
|
|
591
625
|
exports.didcommDecrypt = didcommDecrypt;
|
|
592
626
|
exports.didcommEncrypt = didcommEncrypt;
|
|
593
627
|
exports.didcommSendMessage = didcommSendMessage;
|
|
628
|
+
exports.encodeMbKey = encodeMbKey;
|
|
594
629
|
exports.formatPayloadToDIDComm = formatPayloadToDIDComm;
|
|
595
630
|
exports.getAgreementKeydocFromDID = getAgreementKeydocFromDID;
|
|
596
631
|
exports.getDerivedAgreementKey = getDerivedAgreementKey;
|
package/lib/didcomm.mjs
CHANGED
|
@@ -4,9 +4,9 @@ import { Ed25519VerificationKey2020 } from '@digitalbazaar/ed25519-verification-
|
|
|
4
4
|
import { Cipher } from '@docknetwork/minimal-cipher';
|
|
5
5
|
import { v1 } from 'uuid';
|
|
6
6
|
import base64url from 'base64url';
|
|
7
|
+
import * as bs58 from 'base58-universal';
|
|
7
8
|
import { resolveDID } from './did/dids.mjs';
|
|
8
|
-
import '@docknetwork/sdk/
|
|
9
|
-
import '@docknetwork/wallet-sdk-wasm/src/services/dock/service';
|
|
9
|
+
import '@docknetwork/wallet-sdk-wasm/lib/services/dock/service';
|
|
10
10
|
|
|
11
11
|
var DIDCOMM_TYPE_BASIC = 'https://didcomm.org/basicmessage/1.0/message';
|
|
12
12
|
var DIDCOMM_TYPE_ISSUE_DIRECT = 'https://didcomm.org/issue-credential/2.0/issue-credential';
|
|
@@ -322,6 +322,9 @@ function isValidKeyAgreementDoc(keyDoc) {
|
|
|
322
322
|
function isDerivableKey(keyDoc) {
|
|
323
323
|
return keyDoc.type === 'Ed25519VerificationKey2018' || keyDoc.type === 'Ed25519VerificationKey2019' || keyDoc.type === 'Ed25519VerificationKey2020';
|
|
324
324
|
}
|
|
325
|
+
function getDIDKeydocsFromDIDDocument(didDocument) {
|
|
326
|
+
return [].concat(_toConsumableArray(potentialToArray(didDocument.verificationMethod)), _toConsumableArray(potentialToArray(didDocument.keyAgreement)), _toConsumableArray(potentialToArray(didDocument.publicKey)));
|
|
327
|
+
}
|
|
325
328
|
function getAgreementKeydocFromDID(_x17) {
|
|
326
329
|
return _getAgreementKeydocFromDID.apply(this, arguments);
|
|
327
330
|
}
|
|
@@ -337,46 +340,52 @@ function _getAgreementKeydocFromDID() {
|
|
|
337
340
|
}
|
|
338
341
|
return _context9.abrupt("return", undefined);
|
|
339
342
|
case 2:
|
|
343
|
+
if (!did.startsWith('did:polygon')) {
|
|
344
|
+
_context9.next = 4;
|
|
345
|
+
break;
|
|
346
|
+
}
|
|
347
|
+
throw new Error('PolygonID DIDs cannot be used for DIDComm purposes');
|
|
348
|
+
case 4:
|
|
340
349
|
// Resolve actual DID document and get key agreement keys
|
|
341
350
|
isDIDUrl = did.indexOf('#') !== -1;
|
|
342
|
-
_context9.next =
|
|
351
|
+
_context9.next = 7;
|
|
343
352
|
return resolveDID(did);
|
|
344
|
-
case
|
|
353
|
+
case 7:
|
|
345
354
|
didDocument = _context9.sent;
|
|
346
355
|
keyAgreements = didDocument.keyAgreement ? Array.isArray(didDocument.keyAgreement) ? didDocument.keyAgreement : [didDocument.keyAgreement] : []; // User supplied full URL, use that if possible
|
|
347
356
|
// if not it may still require derivation to be valid (such as dock DIDs)
|
|
348
357
|
if (!isDIDUrl) {
|
|
349
|
-
_context9.next =
|
|
358
|
+
_context9.next = 13;
|
|
350
359
|
break;
|
|
351
360
|
}
|
|
352
361
|
foundDoc = keyAgreements.filter(function (keyDoc) {
|
|
353
362
|
return keyDoc.id === did && isValidKeyAgreementDoc(keyDoc);
|
|
354
363
|
})[0];
|
|
355
364
|
if (!foundDoc) {
|
|
356
|
-
_context9.next =
|
|
365
|
+
_context9.next = 13;
|
|
357
366
|
break;
|
|
358
367
|
}
|
|
359
368
|
return _context9.abrupt("return", foundDoc);
|
|
360
|
-
case
|
|
369
|
+
case 13:
|
|
361
370
|
// User supplied DID, find first supported keyagreement document
|
|
362
371
|
firstKeyAgreement = keyAgreements.filter(isValidKeyAgreementDoc)[0];
|
|
363
372
|
if (!firstKeyAgreement) {
|
|
364
|
-
_context9.next =
|
|
373
|
+
_context9.next = 16;
|
|
365
374
|
break;
|
|
366
375
|
}
|
|
367
376
|
return _context9.abrupt("return", firstKeyAgreement);
|
|
368
|
-
case
|
|
377
|
+
case 16:
|
|
369
378
|
// No valid key agreement found on resolution, lets derive one from a ED25519 key if we can
|
|
370
|
-
publicKeys =
|
|
379
|
+
publicKeys = getDIDKeydocsFromDIDDocument(didDocument); // See if DID document has any derivable keys
|
|
371
380
|
derivableKey = publicKeys.filter(isDerivableKey)[0];
|
|
372
381
|
if (!derivableKey) {
|
|
373
|
-
_context9.next =
|
|
382
|
+
_context9.next = 20;
|
|
374
383
|
break;
|
|
375
384
|
}
|
|
376
385
|
return _context9.abrupt("return", getDerivedAgreementKey(derivableKey));
|
|
377
|
-
case
|
|
386
|
+
case 20:
|
|
378
387
|
throw new Error("Unable to find or derive X25519 key agreement for DID: ".concat(did));
|
|
379
|
-
case
|
|
388
|
+
case 21:
|
|
380
389
|
case "end":
|
|
381
390
|
return _context9.stop();
|
|
382
391
|
}
|
|
@@ -384,12 +393,21 @@ function _getAgreementKeydocFromDID() {
|
|
|
384
393
|
}));
|
|
385
394
|
return _getAgreementKeydocFromDID.apply(this, arguments);
|
|
386
395
|
}
|
|
396
|
+
var MULTIBASE_BASE58BTC_HEADER = 'z';
|
|
397
|
+
var MULTICODEC_ED25519_PRIV_HEADER = new Uint8Array([0x80, 0x26]);
|
|
398
|
+
var MULTICODEC_ED25519_PUB_HEADER = new Uint8Array([0xed, 0x01]);
|
|
399
|
+
function encodeMbKey(header, key) {
|
|
400
|
+
var mbKey = new Uint8Array(header.length + key.length);
|
|
401
|
+
mbKey.set(header);
|
|
402
|
+
mbKey.set(key, header.length);
|
|
403
|
+
return MULTIBASE_BASE58BTC_HEADER + bs58.encode(mbKey);
|
|
404
|
+
}
|
|
387
405
|
function getDerivedAgreementKey(_x18) {
|
|
388
406
|
return _getDerivedAgreementKey.apply(this, arguments);
|
|
389
407
|
}
|
|
390
408
|
function _getDerivedAgreementKey() {
|
|
391
409
|
_getDerivedAgreementKey = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10(derivableKey) {
|
|
392
|
-
var
|
|
410
|
+
var publicKeyMultibase, privateKeyMultibase, derivedKeyAgreement;
|
|
393
411
|
return _regeneratorRuntime().wrap(function _callee10$(_context10) {
|
|
394
412
|
while (1) switch (_context10.prev = _context10.next) {
|
|
395
413
|
case 0:
|
|
@@ -399,23 +417,17 @@ function _getDerivedAgreementKey() {
|
|
|
399
417
|
}
|
|
400
418
|
throw new Error("Cannot derive X25519 KAK from type: ".concat(derivableKey.type));
|
|
401
419
|
case 2:
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
}
|
|
411
|
-
case 5:
|
|
412
|
-
ed2020VerificationKey = _context10.sent;
|
|
413
|
-
// Convert ed25519 2020 verification key into a key agreement key
|
|
414
|
-
derivedKeyAgreement = X25519KeyAgreementKey2020.fromEd25519VerificationKey2020(_objectSpread2({
|
|
415
|
-
keyPair: ed2020VerificationKey
|
|
416
|
-
}, ed2020VerificationKey));
|
|
420
|
+
publicKeyMultibase = derivableKey.publicKeyBase58 ? encodeMbKey(MULTICODEC_ED25519_PUB_HEADER, bs58.decode(derivableKey.publicKeyBase58)) : derivableKey.publicKeyMultibase;
|
|
421
|
+
privateKeyMultibase = (derivableKey.privateKeyBase58 ? encodeMbKey(MULTICODEC_ED25519_PRIV_HEADER, bs58.decode(derivableKey.privateKeyBase58)) : undefined) || derivableKey.privateKeyMultibase; // Convert ed25519 2020 verification key into a key agreement key
|
|
422
|
+
derivedKeyAgreement = X25519KeyAgreementKey2020.fromEd25519VerificationKey2020({
|
|
423
|
+
keyPair: {
|
|
424
|
+
publicKeyMultibase: publicKeyMultibase,
|
|
425
|
+
privateKeyMultibase: privateKeyMultibase,
|
|
426
|
+
controller: derivableKey.controller
|
|
427
|
+
}
|
|
428
|
+
});
|
|
417
429
|
return _context10.abrupt("return", derivedKeyAgreement);
|
|
418
|
-
case
|
|
430
|
+
case 6:
|
|
419
431
|
case "end":
|
|
420
432
|
return _context10.stop();
|
|
421
433
|
}
|
|
@@ -572,4 +584,4 @@ function _didcommCreateEncrypted() {
|
|
|
572
584
|
return _didcommCreateEncrypted.apply(this, arguments);
|
|
573
585
|
}
|
|
574
586
|
|
|
575
|
-
export { DIDCOMM_TYPE_BASIC, DIDCOMM_TYPE_ISSUE_DIRECT, DIDCOMM_TYPE_REQUEST_ISSUE_WITH_DATA, defaultKaKResolver, defaultVerificationKeyResolver, didcommCreateEncrypted, didcommCreateSignedJWT, didcommDecodeSignedJWT, didcommDecrypt, didcommEncrypt, didcommSendMessage, formatPayloadToDIDComm, getAgreementKeydocFromDID, getDerivedAgreementKey, getJWERecipientFromDocument, getKaKInstanceFromDocument, getKeydocFromDID, isDerivableKey, isValidDID, isValidKeyAgreementDoc, userFriendlyTypeMap };
|
|
587
|
+
export { DIDCOMM_TYPE_BASIC, DIDCOMM_TYPE_ISSUE_DIRECT, DIDCOMM_TYPE_REQUEST_ISSUE_WITH_DATA, MULTIBASE_BASE58BTC_HEADER, MULTICODEC_ED25519_PRIV_HEADER, MULTICODEC_ED25519_PUB_HEADER, defaultKaKResolver, defaultVerificationKeyResolver, didcommCreateEncrypted, didcommCreateSignedJWT, didcommDecodeSignedJWT, didcommDecrypt, didcommEncrypt, didcommSendMessage, encodeMbKey, formatPayloadToDIDComm, getAgreementKeydocFromDID, getDerivedAgreementKey, getJWERecipientFromDocument, getKaKInstanceFromDocument, getKeydocFromDID, isDerivableKey, isValidDID, isValidKeyAgreementDoc, userFriendlyTypeMap };
|
package/lib/index.js
CHANGED
|
@@ -6,18 +6,18 @@ var _rollupPluginBabelHelpers = require('./_rollupPluginBabelHelpers-4923c894.js
|
|
|
6
6
|
var utilCrypto = require('@polkadot/util-crypto');
|
|
7
7
|
var assert = require('assert');
|
|
8
8
|
var axios = require('axios');
|
|
9
|
-
var logger = require('@docknetwork/wallet-sdk-wasm/
|
|
9
|
+
var logger = require('@docknetwork/wallet-sdk-wasm/lib/core/logger');
|
|
10
10
|
var didcomm$1 = require('./didcomm.js');
|
|
11
11
|
var payloads = require('./payloads.js');
|
|
12
12
|
var jwtDecode = require('jwt-decode');
|
|
13
|
-
var service = require('@docknetwork/wallet-sdk-wasm/
|
|
13
|
+
var service = require('@docknetwork/wallet-sdk-wasm/lib/services/dock/service');
|
|
14
14
|
require('@digitalbazaar/x25519-key-agreement-key-2020');
|
|
15
15
|
require('@digitalbazaar/ed25519-verification-key-2020');
|
|
16
16
|
require('@docknetwork/minimal-cipher');
|
|
17
17
|
require('uuid');
|
|
18
18
|
require('base64url');
|
|
19
|
+
require('base58-universal');
|
|
19
20
|
require('./did/dids.js');
|
|
20
|
-
require('@docknetwork/sdk/utils/did');
|
|
21
21
|
require('@docknetwork/sdk/verifiable-credential');
|
|
22
22
|
require('@docknetwork/sdk/utils/vc/helpers');
|
|
23
23
|
require('@docknetwork/universal-wallet/methods/keypairs');
|
package/lib/index.mjs
CHANGED
|
@@ -2,18 +2,18 @@ import { _ as _asyncToGenerator, a as _regeneratorRuntime, d as _createForOfIter
|
|
|
2
2
|
import { isBase64 } from '@polkadot/util-crypto';
|
|
3
3
|
import assert from 'assert';
|
|
4
4
|
import axios from 'axios';
|
|
5
|
-
import { Logger } from '@docknetwork/wallet-sdk-wasm/
|
|
5
|
+
import { Logger } from '@docknetwork/wallet-sdk-wasm/lib/core/logger';
|
|
6
6
|
import { didcommCreateEncrypted, didcommDecrypt, getDerivedAgreementKey, didcommCreateSignedJWT, DIDCOMM_TYPE_ISSUE_DIRECT } from './didcomm.mjs';
|
|
7
7
|
import { toBase64, generateSignedPayload, generateSignedPayloadFromList, fromBase64 } from './payloads.mjs';
|
|
8
8
|
import jwtDecode from 'jwt-decode';
|
|
9
|
-
import { dockService } from '@docknetwork/wallet-sdk-wasm/
|
|
9
|
+
import { dockService } from '@docknetwork/wallet-sdk-wasm/lib/services/dock/service';
|
|
10
10
|
import '@digitalbazaar/x25519-key-agreement-key-2020';
|
|
11
11
|
import '@digitalbazaar/ed25519-verification-key-2020';
|
|
12
12
|
import '@docknetwork/minimal-cipher';
|
|
13
13
|
import 'uuid';
|
|
14
14
|
import 'base64url';
|
|
15
|
+
import 'base58-universal';
|
|
15
16
|
import './did/dids.mjs';
|
|
16
|
-
import '@docknetwork/sdk/utils/did';
|
|
17
17
|
import '@docknetwork/sdk/verifiable-credential';
|
|
18
18
|
import '@docknetwork/sdk/utils/vc/helpers';
|
|
19
19
|
import '@docknetwork/universal-wallet/methods/keypairs';
|
package/package.json
CHANGED
package/src/did/dids.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {hexDIDToQualified} from '@docknetwork/sdk/utils/did';
|
|
2
1
|
import {dockService} from '@docknetwork/wallet-sdk-wasm/src/services/dock/service';
|
|
3
2
|
|
|
3
|
+
const hexDIDToQualified = did => `did:dock:${did}`;
|
|
4
|
+
|
|
4
5
|
export async function resolveDID(did, disableCache = false) {
|
|
5
6
|
// Check if string has no qualifier, if so assume its hex format
|
|
6
7
|
let qualifiedDID = did;
|
package/src/didcomm.js
CHANGED
|
@@ -4,6 +4,7 @@ import {Ed25519VerificationKey2020} from '@digitalbazaar/ed25519-verification-ke
|
|
|
4
4
|
import {Cipher} from '@docknetwork/minimal-cipher';
|
|
5
5
|
import {v1 as uuidv1} from 'uuid';
|
|
6
6
|
import base64url from 'base64url';
|
|
7
|
+
import * as bs58 from 'base58-universal';
|
|
7
8
|
|
|
8
9
|
import {resolveDID} from './did/dids';
|
|
9
10
|
|
|
@@ -180,15 +181,27 @@ export function isDerivableKey(keyDoc) {
|
|
|
180
181
|
);
|
|
181
182
|
}
|
|
182
183
|
|
|
184
|
+
function getDIDKeydocsFromDIDDocument(didDocument) {
|
|
185
|
+
return [
|
|
186
|
+
...potentialToArray(didDocument.verificationMethod),
|
|
187
|
+
...potentialToArray(didDocument.keyAgreement),
|
|
188
|
+
...potentialToArray(didDocument.publicKey),
|
|
189
|
+
];
|
|
190
|
+
}
|
|
191
|
+
|
|
183
192
|
export async function getAgreementKeydocFromDID(did) {
|
|
184
193
|
if (!did) {
|
|
185
194
|
return undefined;
|
|
186
195
|
}
|
|
187
196
|
|
|
197
|
+
// Early out for polygon DIDs as they dont support this
|
|
198
|
+
if (did.startsWith('did:polygon')) {
|
|
199
|
+
throw new Error('PolygonID DIDs cannot be used for DIDComm purposes');
|
|
200
|
+
}
|
|
201
|
+
|
|
188
202
|
// Resolve actual DID document and get key agreement keys
|
|
189
203
|
const isDIDUrl = did.indexOf('#') !== -1;
|
|
190
204
|
const didDocument = await resolveDID(did);
|
|
191
|
-
|
|
192
205
|
const keyAgreements = didDocument.keyAgreement
|
|
193
206
|
? Array.isArray(didDocument.keyAgreement)
|
|
194
207
|
? didDocument.keyAgreement
|
|
@@ -214,11 +227,7 @@ export async function getAgreementKeydocFromDID(did) {
|
|
|
214
227
|
}
|
|
215
228
|
|
|
216
229
|
// No valid key agreement found on resolution, lets derive one from a ED25519 key if we can
|
|
217
|
-
const publicKeys = didDocument
|
|
218
|
-
? Array.isArray(didDocument.publicKey)
|
|
219
|
-
? didDocument.publicKey
|
|
220
|
-
: [didDocument.publicKey]
|
|
221
|
-
: [];
|
|
230
|
+
const publicKeys = getDIDKeydocsFromDIDDocument(didDocument);
|
|
222
231
|
|
|
223
232
|
// See if DID document has any derivable keys
|
|
224
233
|
const derivableKey = publicKeys.filter(isDerivableKey)[0];
|
|
@@ -231,26 +240,43 @@ export async function getAgreementKeydocFromDID(did) {
|
|
|
231
240
|
);
|
|
232
241
|
}
|
|
233
242
|
|
|
243
|
+
export const MULTIBASE_BASE58BTC_HEADER = 'z';
|
|
244
|
+
export const MULTICODEC_ED25519_PRIV_HEADER = new Uint8Array([0x80, 0x26]);
|
|
245
|
+
export const MULTICODEC_ED25519_PUB_HEADER = new Uint8Array([0xed, 0x01]);
|
|
246
|
+
export function encodeMbKey(header, key) {
|
|
247
|
+
const mbKey = new Uint8Array(header.length + key.length);
|
|
248
|
+
mbKey.set(header);
|
|
249
|
+
mbKey.set(key, header.length);
|
|
250
|
+
return MULTIBASE_BASE58BTC_HEADER + bs58.encode(mbKey);
|
|
251
|
+
}
|
|
252
|
+
|
|
234
253
|
export async function getDerivedAgreementKey(derivableKey) {
|
|
235
254
|
if (!isDerivableKey(derivableKey)) {
|
|
236
255
|
throw new Error(`Cannot derive X25519 KAK from type: ${derivableKey.type}`);
|
|
237
256
|
}
|
|
238
257
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
258
|
+
const publicKeyMultibase = derivableKey.publicKeyBase58
|
|
259
|
+
? encodeMbKey(
|
|
260
|
+
MULTICODEC_ED25519_PUB_HEADER,
|
|
261
|
+
bs58.decode(derivableKey.publicKeyBase58),
|
|
262
|
+
)
|
|
263
|
+
: derivableKey.publicKeyMultibase;
|
|
264
|
+
const privateKeyMultibase =
|
|
265
|
+
(derivableKey.privateKeyBase58
|
|
266
|
+
? encodeMbKey(
|
|
267
|
+
MULTICODEC_ED25519_PRIV_HEADER,
|
|
268
|
+
bs58.decode(derivableKey.privateKeyBase58),
|
|
269
|
+
)
|
|
270
|
+
: undefined) || derivableKey.privateKeyMultibase;
|
|
248
271
|
|
|
249
272
|
// Convert ed25519 2020 verification key into a key agreement key
|
|
250
273
|
const derivedKeyAgreement =
|
|
251
274
|
X25519KeyAgreementKey2020.fromEd25519VerificationKey2020({
|
|
252
|
-
keyPair:
|
|
253
|
-
|
|
275
|
+
keyPair: {
|
|
276
|
+
publicKeyMultibase,
|
|
277
|
+
privateKeyMultibase,
|
|
278
|
+
controller: derivableKey.controller,
|
|
279
|
+
},
|
|
254
280
|
});
|
|
255
281
|
return derivedKeyAgreement;
|
|
256
282
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
+
import {dockService} from '@docknetwork/wallet-sdk-wasm/src/services/dock';
|
|
1
2
|
import {RelayService} from '../lib';
|
|
2
|
-
import {dock} from '../lib/did/did-resolver';
|
|
3
3
|
import {ALICE_KEY_PAIR_DOC, BOB_KEY_PAIR_DOC} from './mock-data';
|
|
4
4
|
|
|
5
5
|
describe('Relay service', () => {
|
|
6
6
|
const messageContent = `Test message ${Date.now()}`;
|
|
7
7
|
|
|
8
8
|
beforeAll(async () => {
|
|
9
|
-
await
|
|
9
|
+
await dockService.init({
|
|
10
10
|
address: 'wss://knox-1.dock.io',
|
|
11
11
|
});
|
|
12
12
|
});
|
package/lib/did/did-resolver.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var resolver$1 = require('@docknetwork/sdk/resolver');
|
|
6
|
-
var dock = require('@docknetwork/sdk');
|
|
7
|
-
|
|
8
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
9
|
-
|
|
10
|
-
var dock__default = /*#__PURE__*/_interopDefaultLegacy(dock);
|
|
11
|
-
|
|
12
|
-
// Create a resolver in order to lookup DIDs for verifying
|
|
13
|
-
var universalResolverUrl = 'https://uniresolver.io';
|
|
14
|
-
|
|
15
|
-
// class WalletSDKResolver extends WildcardMultiResolver {
|
|
16
|
-
// static PREFIX = WILDCARD;
|
|
17
|
-
// static METHOD = WILDCARD;
|
|
18
|
-
|
|
19
|
-
// async resolve(did) {
|
|
20
|
-
// const trimmedDID = did.split('#')[0];
|
|
21
|
-
// const document = await super.resolve(trimmedDID);
|
|
22
|
-
// return document;
|
|
23
|
-
// }
|
|
24
|
-
// }
|
|
25
|
-
|
|
26
|
-
var resolver = new resolver$1.WildcardMultiResolver(
|
|
27
|
-
// {
|
|
28
|
-
// dock: new DockResolver(dock), // Prebuilt resolver
|
|
29
|
-
// key: new DIDKeyResolver(), // did:key resolution
|
|
30
|
-
// },
|
|
31
|
-
[new resolver$1.DockResolver(dock__default["default"]), new resolver$1.DIDKeyResolver(), new resolver$1.UniversalResolver(universalResolverUrl)]);
|
|
32
|
-
|
|
33
|
-
Object.defineProperty(exports, 'dock', {
|
|
34
|
-
enumerable: true,
|
|
35
|
-
get: function () { return dock__default["default"]; }
|
|
36
|
-
});
|
|
37
|
-
exports.resolver = resolver;
|
|
38
|
-
exports.universalResolverUrl = universalResolverUrl;
|
package/lib/did/did-resolver.mjs
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { WildcardMultiResolver, DockResolver, DIDKeyResolver, UniversalResolver } from '@docknetwork/sdk/resolver';
|
|
2
|
-
import dock from '@docknetwork/sdk';
|
|
3
|
-
export { default as dock } from '@docknetwork/sdk';
|
|
4
|
-
|
|
5
|
-
// Create a resolver in order to lookup DIDs for verifying
|
|
6
|
-
var universalResolverUrl = 'https://uniresolver.io';
|
|
7
|
-
|
|
8
|
-
// class WalletSDKResolver extends WildcardMultiResolver {
|
|
9
|
-
// static PREFIX = WILDCARD;
|
|
10
|
-
// static METHOD = WILDCARD;
|
|
11
|
-
|
|
12
|
-
// async resolve(did) {
|
|
13
|
-
// const trimmedDID = did.split('#')[0];
|
|
14
|
-
// const document = await super.resolve(trimmedDID);
|
|
15
|
-
// return document;
|
|
16
|
-
// }
|
|
17
|
-
// }
|
|
18
|
-
|
|
19
|
-
var resolver = new WildcardMultiResolver(
|
|
20
|
-
// {
|
|
21
|
-
// dock: new DockResolver(dock), // Prebuilt resolver
|
|
22
|
-
// key: new DIDKeyResolver(), // did:key resolution
|
|
23
|
-
// },
|
|
24
|
-
[new DockResolver(dock), new DIDKeyResolver(), new UniversalResolver(universalResolverUrl)]);
|
|
25
|
-
|
|
26
|
-
export { resolver, universalResolverUrl };
|
package/src/did/did-resolver.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DockResolver,
|
|
3
|
-
DIDKeyResolver,
|
|
4
|
-
WildcardMultiResolver,
|
|
5
|
-
UniversalResolver,
|
|
6
|
-
} from '@docknetwork/sdk/resolver';
|
|
7
|
-
import dock from '@docknetwork/sdk';
|
|
8
|
-
|
|
9
|
-
// Create a resolver in order to lookup DIDs for verifying
|
|
10
|
-
export const universalResolverUrl = 'https://uniresolver.io';
|
|
11
|
-
|
|
12
|
-
// class WalletSDKResolver extends WildcardMultiResolver {
|
|
13
|
-
// static PREFIX = WILDCARD;
|
|
14
|
-
// static METHOD = WILDCARD;
|
|
15
|
-
|
|
16
|
-
// async resolve(did) {
|
|
17
|
-
// const trimmedDID = did.split('#')[0];
|
|
18
|
-
// const document = await super.resolve(trimmedDID);
|
|
19
|
-
// return document;
|
|
20
|
-
// }
|
|
21
|
-
// }
|
|
22
|
-
|
|
23
|
-
export const resolver = new WildcardMultiResolver(
|
|
24
|
-
// {
|
|
25
|
-
// dock: new DockResolver(dock), // Prebuilt resolver
|
|
26
|
-
// key: new DIDKeyResolver(), // did:key resolution
|
|
27
|
-
// },
|
|
28
|
-
[
|
|
29
|
-
new DockResolver(dock),
|
|
30
|
-
new DIDKeyResolver(),
|
|
31
|
-
new UniversalResolver(universalResolverUrl),
|
|
32
|
-
],
|
|
33
|
-
);
|
|
34
|
-
|
|
35
|
-
export {dock};
|