@docknetwork/wallet-sdk-wasm 0.4.22 → 1.5.0
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/{account-614e6414.js → account-bf00e5c0.js} +5 -5
- package/lib/{account-ee524484.js → account-e48dc9b6.js} +5 -5
- package/lib/core/polkadot-utils.js +18 -4
- package/lib/core/polkadot-utils.mjs +15 -2
- package/lib/index.js +16 -19
- package/lib/index.mjs +20 -23
- package/lib/modules/account.js +10 -5
- package/lib/modules/account.mjs +10 -5
- package/lib/modules/accounts.js +10 -5
- package/lib/modules/accounts.mjs +10 -5
- package/lib/modules/network-manager.js +4 -2
- package/lib/modules/network-manager.mjs +4 -2
- package/lib/modules/wallet.js +13 -8
- package/lib/modules/wallet.mjs +13 -8
- package/lib/rpc-server.js +16 -19
- package/lib/rpc-server.mjs +20 -23
- package/lib/services/blockchain/configs.js +7 -0
- package/lib/services/blockchain/configs.mjs +3 -0
- package/lib/services/{dock → blockchain}/index.android.js +3 -4
- package/lib/services/{dock → blockchain}/index.android.mjs +3 -4
- package/lib/services/{dock → blockchain}/index.ios.js +3 -4
- package/lib/services/{dock → blockchain}/index.ios.mjs +3 -4
- package/lib/services/blockchain/index.js +30 -0
- package/lib/services/blockchain/index.mjs +22 -0
- package/lib/services/{dock → blockchain}/service-rpc.js +5 -7
- package/lib/services/{dock → blockchain}/service-rpc.mjs +5 -7
- package/lib/services/blockchain/service.js +212 -0
- package/lib/services/blockchain/service.mjs +206 -0
- package/lib/services/credential/bbs-revocation.js +41 -60
- package/lib/services/credential/bbs-revocation.mjs +42 -57
- package/lib/services/credential/bound-check.js +0 -8
- package/lib/services/credential/bound-check.mjs +1 -5
- package/lib/services/credential/index.js +21 -24
- package/lib/services/credential/index.mjs +22 -25
- package/lib/services/credential/pex-helpers.js +134 -34
- package/lib/services/credential/pex-helpers.mjs +133 -35
- package/lib/services/credential/service.js +55 -56
- package/lib/services/credential/service.mjs +45 -43
- package/lib/services/credential/utils.js +12 -18
- package/lib/services/credential/utils.mjs +11 -14
- package/lib/services/dids/config.js +8 -0
- package/lib/services/dids/config.mjs +8 -0
- package/lib/services/dids/index.js +11 -10
- package/lib/services/dids/index.mjs +12 -11
- package/lib/services/dids/service-rpc.js +2 -2
- package/lib/services/dids/service-rpc.mjs +2 -2
- package/lib/services/dids/service.js +28 -36
- package/lib/services/dids/service.mjs +27 -33
- package/lib/services/edv/hmac.js +5 -0
- package/lib/services/edv/hmac.mjs +5 -0
- package/lib/services/edv/index.js +13 -11
- package/lib/services/edv/index.mjs +16 -14
- package/lib/services/edv/service-rpc.js +4 -0
- package/lib/services/edv/service-rpc.mjs +4 -0
- package/lib/services/edv/service.js +29 -13
- package/lib/services/edv/service.mjs +31 -16
- package/lib/services/example/service.js +3 -1
- package/lib/services/example/service.mjs +3 -1
- package/lib/services/index.js +14 -17
- package/lib/services/index.mjs +18 -21
- package/lib/services/keyring/configs.js +12 -0
- package/lib/services/keyring/configs.mjs +12 -0
- package/lib/services/keyring/service.js +5 -0
- package/lib/services/keyring/service.mjs +5 -0
- package/lib/services/pex/service.js +17 -15
- package/lib/services/pex/service.mjs +17 -15
- package/lib/services/relay-service/index.mjs +1 -1
- package/lib/services/relay-service/service.mjs +2 -2
- package/lib/services/substrate/api-utils.js +19 -6
- package/lib/services/substrate/api-utils.mjs +19 -6
- package/lib/services/substrate/index.js +14 -6
- package/lib/services/substrate/index.mjs +14 -6
- package/lib/services/substrate/service.js +17 -9
- package/lib/services/substrate/service.mjs +17 -9
- package/lib/services/test-utils.js +27 -17
- package/lib/services/test-utils.mjs +27 -17
- package/lib/services/trust-registry/index.js +17 -5
- package/lib/services/trust-registry/index.mjs +17 -5
- package/lib/services/trust-registry/service.js +27 -10
- package/lib/services/trust-registry/service.mjs +27 -10
- package/lib/services/util-crypto/configs.js +3 -0
- package/lib/services/util-crypto/configs.mjs +3 -0
- package/lib/services/util-crypto/service-rpc.js +6 -0
- package/lib/services/util-crypto/service-rpc.mjs +6 -0
- package/lib/services/util-crypto/service.js +5 -0
- package/lib/services/util-crypto/service.mjs +6 -1
- package/lib/setup-nodejs.js +16 -19
- package/lib/setup-nodejs.mjs +20 -23
- package/lib/setup-tests.js +16 -19
- package/lib/setup-tests.mjs +20 -23
- package/lib/src/core/polkadot-utils.d.ts +1 -0
- package/lib/src/core/polkadot-utils.d.ts.map +1 -1
- package/lib/src/modules/network-manager.d.ts +1 -0
- package/lib/src/modules/network-manager.d.ts.map +1 -1
- package/lib/src/services/blockchain/configs.d.ts +8 -0
- package/lib/src/services/blockchain/configs.d.ts.map +1 -0
- package/lib/src/services/blockchain/index.d.ts +2 -0
- package/lib/src/services/blockchain/index.d.ts.map +1 -0
- package/lib/src/services/blockchain/service.d.ts +52 -0
- package/lib/src/services/blockchain/service.d.ts.map +1 -0
- package/lib/src/services/credential/bbs-revocation.d.ts.map +1 -1
- package/lib/src/services/credential/bound-check.d.ts +0 -4
- package/lib/src/services/credential/bound-check.d.ts.map +1 -1
- package/lib/src/services/credential/index.d.ts +2 -7
- package/lib/src/services/credential/index.d.ts.map +1 -1
- package/lib/src/services/credential/pex-helpers.d.ts +5 -3
- package/lib/src/services/credential/pex-helpers.d.ts.map +1 -1
- package/lib/src/services/credential/service.d.ts +2 -7
- package/lib/src/services/credential/service.d.ts.map +1 -1
- package/lib/src/services/credential/utils.d.ts.map +1 -1
- package/lib/src/services/dids/config.d.ts +5 -0
- package/lib/src/services/dids/config.d.ts.map +1 -1
- package/lib/src/services/dids/service-rpc.d.ts +1 -1
- package/lib/src/services/dids/service-rpc.d.ts.map +1 -1
- package/lib/src/services/dids/service.d.ts +9 -4
- package/lib/src/services/dids/service.d.ts.map +1 -1
- package/lib/src/services/edv/hmac.d.ts +1 -0
- package/lib/src/services/edv/hmac.d.ts.map +1 -1
- package/lib/src/services/edv/service.d.ts +5 -0
- package/lib/src/services/edv/service.d.ts.map +1 -1
- package/lib/src/services/example/service.d.ts.map +1 -1
- package/lib/src/services/keyring/configs.d.ts +6 -0
- package/lib/src/services/keyring/configs.d.ts.map +1 -1
- package/lib/src/services/pex/service.d.ts.map +1 -1
- package/lib/src/services/trust-registry/service.d.ts.map +1 -1
- package/lib/src/services/util-crypto/configs.d.ts +1 -0
- package/lib/src/services/util-crypto/configs.d.ts.map +1 -1
- package/lib/src/services/util-crypto/service.d.ts +1 -0
- package/lib/src/services/util-crypto/service.d.ts.map +1 -1
- package/lib/test/setup-test-state.js +11 -6
- package/lib/test/setup-test-state.mjs +11 -6
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -4
- package/src/core/polkadot-utils.js +14 -3
- package/src/modules/network-manager.ts +5 -2
- package/src/modules/wallet.ts +5 -5
- package/src/services/blockchain/configs.ts +11 -0
- package/src/services/blockchain/index.android.js +3 -0
- package/src/services/blockchain/index.ios.js +3 -0
- package/src/services/blockchain/index.js +1 -0
- package/src/services/blockchain/index.test.js +34 -0
- package/src/services/{dock → blockchain}/service-rpc.js +5 -6
- package/src/services/blockchain/service.ts +261 -0
- package/src/services/credential/bbs-revocation.ts +41 -85
- package/src/services/credential/bound-check.test.ts +2 -5
- package/src/services/credential/bound-check.ts +0 -5
- package/src/services/credential/index.test.js +148 -7
- package/src/services/credential/pex-helpers.js +132 -34
- package/src/services/credential/pex-helpers.test.js +284 -27
- package/src/services/credential/service.ts +44 -27
- package/src/services/credential/utils.js +5 -14
- package/src/services/dids/config.ts +15 -0
- package/src/services/dids/index.test.js +5 -23
- package/src/services/dids/service-rpc.ts +2 -2
- package/src/services/dids/service.ts +34 -44
- package/src/services/edv/hmac.ts +13 -0
- package/src/services/edv/index.test.js +22 -0
- package/src/services/edv/service-rpc.js +4 -0
- package/src/services/edv/service.ts +22 -0
- package/src/services/example/service.ts +3 -1
- package/src/services/index.js +2 -2
- package/src/services/keyring/configs.ts +21 -0
- package/src/services/keyring/service.ts +13 -0
- package/src/services/pex/service.ts +29 -18
- package/src/services/pex/tests/pex-service.test.js +163 -6
- package/src/services/substrate/api-utils.test.js +7 -7
- package/src/services/substrate/api-utils.ts +3 -3
- package/src/services/substrate/service.ts +6 -6
- package/src/services/test-utils.js +13 -11
- package/src/services/trust-registry/index.test.js +6 -4
- package/src/services/trust-registry/service.ts +13 -7
- package/src/services/util-crypto/configs.ts +4 -0
- package/src/services/util-crypto/service-rpc.js +6 -0
- package/src/services/util-crypto/service.ts +8 -0
- package/src/test/setup-test-state.js +2 -2
- package/lib/services/dock/configs.js +0 -18
- package/lib/services/dock/configs.mjs +0 -10
- package/lib/services/dock/index.js +0 -17
- package/lib/services/dock/index.mjs +0 -9
- package/lib/services/dock/service.js +0 -138
- package/lib/services/dock/service.mjs +0 -126
- package/lib/src/services/dock/configs.d.ts +0 -7
- package/lib/src/services/dock/configs.d.ts.map +0 -1
- package/lib/src/services/dock/index.d.ts +0 -2
- package/lib/src/services/dock/index.d.ts.map +0 -1
- package/lib/src/services/dock/service.d.ts +0 -44
- package/lib/src/services/dock/service.d.ts.map +0 -1
- package/src/services/dock/configs.ts +0 -12
- package/src/services/dock/index.android.js +0 -3
- package/src/services/dock/index.ios.js +0 -3
- package/src/services/dock/index.js +0 -1
- package/src/services/dock/index.test.js +0 -48
- package/src/services/dock/service.ts +0 -154
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import {assertRpcService
|
|
1
|
+
import {assertRpcService} from '../test-utils';
|
|
2
2
|
import {DIDServiceRPC} from './service-rpc';
|
|
3
3
|
import {didService as service} from './service';
|
|
4
4
|
import {validation} from './config';
|
|
5
5
|
import {DIDKeyManager} from '@docknetwork/wallet-sdk-dids/src';
|
|
6
|
-
import {TestFixtures} from '../../fixtures';
|
|
7
6
|
import {getTestWallet} from '../../test/setup-test-state';
|
|
8
|
-
import {
|
|
7
|
+
import {blockchainService} from '../blockchain/service';
|
|
9
8
|
|
|
10
9
|
describe('DID Service', () => {
|
|
11
10
|
beforeAll(async () => {
|
|
@@ -98,28 +97,11 @@ describe('DID Service', () => {
|
|
|
98
97
|
spy.mockReset();
|
|
99
98
|
});
|
|
100
99
|
|
|
101
|
-
it('expect to register did dock', async () => {
|
|
102
|
-
const result = await service.registerDidDock(
|
|
103
|
-
TestFixtures.account1.getKeyring().toJson(''),
|
|
104
|
-
);
|
|
105
|
-
expect(result.dockDID).toBeDefined();
|
|
106
|
-
expect(result.keyPairWalletId).toBeDefined();
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
it('expect to fail to register did dock', async () => {
|
|
110
|
-
const error = await getPromiseError(() =>
|
|
111
|
-
service.registerDidDock(
|
|
112
|
-
TestFixtures.noBalanceAccount.getKeyring().toJson(''),
|
|
113
|
-
),
|
|
114
|
-
);
|
|
115
|
-
expect(error.message).toBe(
|
|
116
|
-
'1010: Invalid Transaction: Inability to pay some fees , e.g. account balance too low',
|
|
117
|
-
);
|
|
118
|
-
});
|
|
119
|
-
|
|
120
100
|
it('expect to get did document', async () => {
|
|
121
101
|
const document = 'document';
|
|
122
|
-
jest
|
|
102
|
+
jest
|
|
103
|
+
.spyOn(blockchainService.didModule, 'getDocument')
|
|
104
|
+
.mockResolvedValue(document);
|
|
123
105
|
|
|
124
106
|
const result = await service.getDidDockDocument(
|
|
125
107
|
'did:dock:5HL5XB7CHcHT2ZUKjY2SCJvDAK11qoa1exgfVnVTHRbmjJQi',
|
|
@@ -18,8 +18,8 @@ export class DIDServiceRPC extends RpcService {
|
|
|
18
18
|
generateKeyDoc(params) {
|
|
19
19
|
return this.call('generateKeyDoc', params);
|
|
20
20
|
}
|
|
21
|
-
|
|
22
|
-
return this.call('
|
|
21
|
+
deriveKeyDoc(params) {
|
|
22
|
+
return this.call('deriveKeyDoc', params);
|
|
23
23
|
}
|
|
24
24
|
getDidDockDocument(did) {
|
|
25
25
|
return this.call('getDidDockDocument', did);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
1
2
|
import {DIDKeyManager} from '@docknetwork/wallet-sdk-dids/src';
|
|
2
3
|
import {
|
|
3
4
|
serviceName,
|
|
@@ -8,20 +9,28 @@ import {
|
|
|
8
9
|
import {keyringService} from '../keyring/service';
|
|
9
10
|
import {utilCryptoService} from '../util-crypto/service';
|
|
10
11
|
import assert from 'assert';
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
import {
|
|
14
|
-
|
|
12
|
+
import {blockchainService, getDock} from '../blockchain/service';
|
|
13
|
+
|
|
14
|
+
import {
|
|
15
|
+
DidKey,
|
|
16
|
+
DockDid,
|
|
17
|
+
VerificationRelationship,
|
|
18
|
+
DidMethodKey,
|
|
19
|
+
} from '@docknetwork/credential-sdk/types';
|
|
20
|
+
import {Ed25519Keypair} from '@docknetwork/credential-sdk/keypairs';
|
|
21
|
+
|
|
15
22
|
import {Logger} from '../../core/logger';
|
|
16
23
|
import {polkadotToKeydoc} from '../../core/polkadot-utils';
|
|
17
24
|
import base64url from 'base64url';
|
|
18
|
-
import {
|
|
19
|
-
import
|
|
20
|
-
|
|
25
|
+
import {keyDocToKeypair} from '../credential/utils';
|
|
26
|
+
import {
|
|
27
|
+
Ed25519Signature2020,
|
|
28
|
+
EcdsaSecp256k1Signature2019,
|
|
29
|
+
} from '@docknetwork/credential-sdk/vc/crypto';
|
|
21
30
|
|
|
22
31
|
async function getSignerKeypair(privateKeyDoc) {
|
|
23
32
|
const privateKey =
|
|
24
|
-
privateKeyDoc.keypair || keyDocToKeypair(privateKeyDoc,
|
|
33
|
+
privateKeyDoc.keypair || keyDocToKeypair(privateKeyDoc, blockchainService.dock);
|
|
25
34
|
|
|
26
35
|
if (!privateKey.signer && privateKey.sign) {
|
|
27
36
|
privateKey.signer = () => ({sign: ({data}) => privateKey.sign(data)});
|
|
@@ -57,10 +66,9 @@ class DIDService {
|
|
|
57
66
|
DIDService.prototype.keypairToDIDKeyDocument,
|
|
58
67
|
DIDService.prototype.getDIDResolution,
|
|
59
68
|
DIDService.prototype.generateKeyDoc,
|
|
60
|
-
DIDService.prototype.
|
|
69
|
+
DIDService.prototype.deriveKeyDoc,
|
|
61
70
|
DIDService.prototype.getDidDockDocument,
|
|
62
71
|
DIDService.prototype.createSignedJWT,
|
|
63
|
-
|
|
64
72
|
];
|
|
65
73
|
keypairToDIDKeyDocument(params: KeypairToDIDKeyDocumentParams) {
|
|
66
74
|
validation.keypairToDIDKeyDocument(params);
|
|
@@ -94,11 +102,19 @@ class DIDService {
|
|
|
94
102
|
return polkadotToKeydoc(keyring, params.controller);
|
|
95
103
|
}
|
|
96
104
|
|
|
97
|
-
async
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
105
|
+
async deriveKeyDoc(params) {
|
|
106
|
+
validation.deriveKeyDoc(params);
|
|
107
|
+
const { pair, type = 'ed25519' } = params;
|
|
108
|
+
|
|
109
|
+
const keyring = keyringService.createFromPair({
|
|
110
|
+
pair,
|
|
111
|
+
type,
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
return polkadotToKeydoc(keyring, params.controller);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
async createSignedJWT({payload, privateKeyDoc, headerInput}) {
|
|
102
118
|
const privateKey = await getSignerKeypair(privateKeyDoc);
|
|
103
119
|
const {sign} =
|
|
104
120
|
typeof privateKey.signer === 'function'
|
|
@@ -113,43 +129,17 @@ class DIDService {
|
|
|
113
129
|
const payloadBase64URL = base64url(JSON.stringify(payload));
|
|
114
130
|
const headerAndPayloadBase64URL = `${headerBase64URL}.${payloadBase64URL}`;
|
|
115
131
|
const signPayload = Buffer.from(headerAndPayloadBase64URL);
|
|
116
|
-
|
|
132
|
+
|
|
117
133
|
const signature = await sign({data: signPayload});
|
|
118
134
|
return `${headerAndPayloadBase64URL}.${base64url.encode(signature)}`;
|
|
119
135
|
}
|
|
120
136
|
|
|
121
137
|
async getDidDockDocument(did) {
|
|
122
138
|
assert(!!did, 'DID is required');
|
|
123
|
-
const dock =
|
|
124
|
-
const result = await
|
|
139
|
+
const dock = blockchainService.dock;
|
|
140
|
+
const result = await blockchainService.didModule.getDocument(did);
|
|
125
141
|
return result;
|
|
126
142
|
}
|
|
127
|
-
|
|
128
|
-
async registerDidDock(keyPairJSON) {
|
|
129
|
-
assert(!!keyPairJSON, 'keyPair is required');
|
|
130
|
-
const dockDID = createNewDockDID();
|
|
131
|
-
const dock = getDock();
|
|
132
|
-
const keyPair = keyringService.keyring.addFromJson(keyPairJSON);
|
|
133
|
-
|
|
134
|
-
keyPair.unlock('');
|
|
135
|
-
|
|
136
|
-
dock.setAccount(keyPair);
|
|
137
|
-
|
|
138
|
-
const publicKey = PublicKeySr25519.fromKeyringPair(keyPair);
|
|
139
|
-
|
|
140
|
-
const didKey = new DidKey(publicKey, new VerificationRelationship());
|
|
141
|
-
|
|
142
|
-
Logger.info(`Submitting new DID: ${dockDID}`);
|
|
143
|
-
|
|
144
|
-
const result = await dock.did.new(dockDID, [didKey], [], false);
|
|
145
|
-
|
|
146
|
-
Logger.info(`DID created with tx hash ${result.txHash.toString()}`);
|
|
147
|
-
|
|
148
|
-
return {
|
|
149
|
-
dockDID,
|
|
150
|
-
keyPairWalletId: keyPairJSON.address,
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
143
|
}
|
|
154
144
|
|
|
155
145
|
export const didService = new DIDService();
|
package/src/services/edv/hmac.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as base64url from 'base64url-universal';
|
|
2
2
|
import crypto from '@docknetwork/universal-wallet/crypto';
|
|
3
|
+
import {hexToU8a} from '@polkadot/util';
|
|
3
4
|
|
|
4
5
|
export default class HMAC {
|
|
5
6
|
key: CryptoKey;
|
|
@@ -37,6 +38,18 @@ export default class HMAC {
|
|
|
37
38
|
return key;
|
|
38
39
|
}
|
|
39
40
|
|
|
41
|
+
static async deriveKey(baseKey: string) {
|
|
42
|
+
const key = await crypto.subtle.importKey(
|
|
43
|
+
'raw',
|
|
44
|
+
hexToU8a(baseKey),
|
|
45
|
+
{name: 'HMAC', hash: {name: 'SHA-256'}},
|
|
46
|
+
true,
|
|
47
|
+
['sign', 'verify'],
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
return key;
|
|
51
|
+
}
|
|
52
|
+
|
|
40
53
|
static async exportKey(key: CryptoKey) {
|
|
41
54
|
const rawKey = await crypto.subtle.exportKey('raw', key);
|
|
42
55
|
return base64url.encode(Buffer.from(rawKey));
|
|
@@ -20,5 +20,27 @@ describe('EDVService', () => {
|
|
|
20
20
|
expect(keys.verificationKey).toBeDefined();
|
|
21
21
|
});
|
|
22
22
|
});
|
|
23
|
+
|
|
24
|
+
describe('deriveKeys', () => {
|
|
25
|
+
it('should derive EDV keys', async () => {
|
|
26
|
+
const testMasterKey = '0O+9vxwb3Zo/9AVcQfVeQ59wvgcYUVH/mTye6islspM=';
|
|
27
|
+
const derivedTestAgreementKey =
|
|
28
|
+
'{"id":"did:key:z6Mkt1paLGw6VqRCTmqjpbiP9fxLVHJb8k97zERL6TcWr9Ru#z6LSojEubzYtAGCBE7Mwwks7J3Gttsrd1c9EXcDuNjthwVQj","controller":"did:key:z6Mkt1paLGw6VqRCTmqjpbiP9fxLVHJb8k97zERL6TcWr9Ru","type":"X25519KeyAgreementKey2020","publicKeyMultibase":"z6LSojEubzYtAGCBE7Mwwks7J3Gttsrd1c9EXcDuNjthwVQj","privateKeyMultibase":"z3weoV5H5DppQ7pjABoopaiDFN6zH3SokESte2Jte87YNXgg"}';
|
|
29
|
+
const derivedTestHmacKey = 'AAkACzAAmgwPDgWQAMAAAAAOYAAAAA';
|
|
30
|
+
const derivedTestVerificationKey =
|
|
31
|
+
'{"id":"did:key:z6Mkt1paLGw6VqRCTmqjpbiP9fxLVHJb8k97zERL6TcWr9Ru#z6Mkt1paLGw6VqRCTmqjpbiP9fxLVHJb8k97zERL6TcWr9Ru","controller":"did:key:z6Mkt1paLGw6VqRCTmqjpbiP9fxLVHJb8k97zERL6TcWr9Ru","type":"Ed25519VerificationKey2018","publicKeyBase58":"EZZXk2gfAHvjMH1392kYJaQLfi2jirtmJDWQGBeVvveX","privateKeyBase58":"5BHUEjDDbDzQKnveM9qXXXmRqwTtmBvumTY2xZXN61x8dvZHgzsDaTpkVqkE4LSoMLcV6yDRhxcv7mMTzdaJ21pX"}';
|
|
32
|
+
const {agreementKey, hmacKey, verificationKey} =
|
|
33
|
+
await service.deriveKeys(testMasterKey);
|
|
34
|
+
|
|
35
|
+
expect(hmacKey).toBeDefined();
|
|
36
|
+
expect(hmacKey).toBe(derivedTestHmacKey);
|
|
37
|
+
expect(verificationKey).toBeDefined();
|
|
38
|
+
expect(JSON.stringify(verificationKey)).toBe(
|
|
39
|
+
derivedTestVerificationKey,
|
|
40
|
+
);
|
|
41
|
+
expect(agreementKey).toBeDefined();
|
|
42
|
+
expect(JSON.stringify(agreementKey)).toBe(derivedTestAgreementKey);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
23
45
|
});
|
|
24
46
|
});
|
|
@@ -3,11 +3,14 @@ import {InitializeEDVParams, serviceName} from './configs';
|
|
|
3
3
|
import EDVHTTPStorageInterface from '@docknetwork/universal-wallet/storage/edv-http-storage';
|
|
4
4
|
import HMAC from './hmac';
|
|
5
5
|
import {Ed25519VerificationKey2018} from '@digitalbazaar/ed25519-verification-key-2018';
|
|
6
|
+
import {Ed25519VerificationKey2020} from '@digitalbazaar/ed25519-verification-key-2020';
|
|
6
7
|
import {X25519KeyAgreementKey2020} from '@digitalbazaar/x25519-key-agreement-key-2020';
|
|
7
8
|
import {getKeypairFromDoc} from '@docknetwork/universal-wallet/methods/keypairs';
|
|
8
9
|
import {logger} from '@docknetwork/wallet-sdk-data-store/src/logger';
|
|
9
10
|
import {didService} from '@docknetwork/wallet-sdk-wasm/src/services/dids/service';
|
|
10
11
|
import {keyringService} from '@docknetwork/wallet-sdk-wasm/src/services/keyring';
|
|
12
|
+
import {ed25519PairFromSeed} from '@polkadot/util-crypto';
|
|
13
|
+
import base64url from 'base64url-universal';
|
|
11
14
|
|
|
12
15
|
/**
|
|
13
16
|
* EDVService
|
|
@@ -19,6 +22,7 @@ export class EDVService {
|
|
|
19
22
|
|
|
20
23
|
rpcMethods = [
|
|
21
24
|
EDVService.prototype.generateKeys,
|
|
25
|
+
EDVService.prototype.deriveKeys,
|
|
22
26
|
EDVService.prototype.initialize,
|
|
23
27
|
EDVService.prototype.find,
|
|
24
28
|
EDVService.prototype.update,
|
|
@@ -109,6 +113,24 @@ export class EDVService {
|
|
|
109
113
|
return {verificationKey, agreementKey, hmacKey};
|
|
110
114
|
}
|
|
111
115
|
|
|
116
|
+
async deriveKeys(masterKey: any) {
|
|
117
|
+
await keyringService.initialize({
|
|
118
|
+
ss58Format: 22,
|
|
119
|
+
});
|
|
120
|
+
const pair = ed25519PairFromSeed(base64url.decode(masterKey));
|
|
121
|
+
|
|
122
|
+
const keyPair = await didService.deriveKeyDoc({ pair });
|
|
123
|
+
|
|
124
|
+
const verificationKey = await Ed25519VerificationKey2018.from(keyPair);
|
|
125
|
+
|
|
126
|
+
const verificationKey2020 = await Ed25519VerificationKey2020.fromEd25519VerificationKey2018({ keyPair });
|
|
127
|
+
const agreementKey = await X25519KeyAgreementKey2020.fromEd25519VerificationKey2020({ keyPair: verificationKey2020 });
|
|
128
|
+
|
|
129
|
+
const hmacKey = await HMAC.exportKey(await HMAC.deriveKey(masterKey));
|
|
130
|
+
|
|
131
|
+
return { verificationKey, agreementKey, hmacKey };
|
|
132
|
+
}
|
|
133
|
+
|
|
112
134
|
find(params: any) {
|
|
113
135
|
return this.storageInterface.find(params);
|
|
114
136
|
}
|
package/src/services/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {keyringService} from './keyring/service';
|
|
2
|
-
import {
|
|
2
|
+
import {blockchainService} from './blockchain/service';
|
|
3
3
|
import {substrateService} from './substrate/service';
|
|
4
4
|
import {walletService} from './wallet/service';
|
|
5
5
|
import {polkadotService} from './polkadot/service';
|
|
@@ -14,7 +14,7 @@ import {edvService} from './edv/service';
|
|
|
14
14
|
|
|
15
15
|
export default [
|
|
16
16
|
keyringService,
|
|
17
|
-
|
|
17
|
+
blockchainService,
|
|
18
18
|
substrateService,
|
|
19
19
|
walletService,
|
|
20
20
|
polkadotService,
|
|
@@ -47,6 +47,21 @@ export const validation = {
|
|
|
47
47
|
assert(typeof meta === 'object', 'invalid meta');
|
|
48
48
|
}
|
|
49
49
|
},
|
|
50
|
+
createFromPair(params: CreateFromPairParams) {
|
|
51
|
+
const {pair, meta, type} = params;
|
|
52
|
+
|
|
53
|
+
assert(typeof pair === 'object', 'invalid pair');
|
|
54
|
+
assert(pair.publicKey instanceof Uint8Array, 'invalid publicKey');
|
|
55
|
+
assert(pair.secretKey instanceof Uint8Array, 'invalid secretKey');
|
|
56
|
+
|
|
57
|
+
if (type) {
|
|
58
|
+
assertKeyType(type);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (meta) {
|
|
62
|
+
assert(typeof meta === 'object', 'invalid meta');
|
|
63
|
+
}
|
|
64
|
+
},
|
|
50
65
|
|
|
51
66
|
signData(params: SignDataParams) {
|
|
52
67
|
assert(!!params.keyPair, 'invalid keypair');
|
|
@@ -65,6 +80,12 @@ export type GetKeyringParams = {
|
|
|
65
80
|
derivePath?: string,
|
|
66
81
|
};
|
|
67
82
|
|
|
83
|
+
export type CreateFromPairParams = {
|
|
84
|
+
pair: any,
|
|
85
|
+
meta?: any,
|
|
86
|
+
type?: string,
|
|
87
|
+
}
|
|
88
|
+
|
|
68
89
|
export type AddressFromUriParams = GetKeyringParams;
|
|
69
90
|
|
|
70
91
|
export type AddFromJsonParams = {
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
AddFromJsonParams,
|
|
6
6
|
AddFromMnemonicParams,
|
|
7
7
|
CreateFromUriParams,
|
|
8
|
+
CreateFromPairParams,
|
|
8
9
|
InitializeParams,
|
|
9
10
|
serviceName,
|
|
10
11
|
validation,
|
|
@@ -86,6 +87,18 @@ export class KeyringService {
|
|
|
86
87
|
);
|
|
87
88
|
}
|
|
88
89
|
|
|
90
|
+
createFromPair(params: CreateFromPairParams): KeyringPair {
|
|
91
|
+
validation.createFromPair(params);
|
|
92
|
+
|
|
93
|
+
const {pair, meta, type} = params;
|
|
94
|
+
|
|
95
|
+
return this.keyring.createFromPair(
|
|
96
|
+
pair,
|
|
97
|
+
meta,
|
|
98
|
+
type,
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
89
102
|
getKeyringPairJSON(params: CreateFromUriParams): KeyringPair {
|
|
90
103
|
return this.getKeyringPair(params).toJson();
|
|
91
104
|
}
|
|
@@ -18,30 +18,41 @@ const pex: PEX = new PEX();
|
|
|
18
18
|
* This is a temporary workaround until the issue is fixed in the @sphereon/pex library
|
|
19
19
|
**/
|
|
20
20
|
export function removeOptionalAttribute(presentationDefinition) {
|
|
21
|
-
presentationDefinition
|
|
21
|
+
// Deep clone the presentationDefinition to avoid mutating the original
|
|
22
|
+
const clonedPresentationDefinition = JSON.parse(
|
|
23
|
+
JSON.stringify(presentationDefinition),
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
clonedPresentationDefinition.input_descriptors.forEach(inputDescriptor => {
|
|
22
27
|
if (!inputDescriptor.constraints?.fields?.length) {
|
|
23
28
|
return;
|
|
24
29
|
}
|
|
30
|
+
|
|
25
31
|
// Filter the optional fields
|
|
26
|
-
// If we include those fields, it might exclude few credentials from the resulsts
|
|
27
|
-
// e.g: Expiration date as optional, a credenntial without expiration date should be included
|
|
28
32
|
inputDescriptor.constraints.fields =
|
|
29
33
|
inputDescriptor.constraints.fields.filter(
|
|
30
34
|
field => field.optional !== true,
|
|
31
35
|
);
|
|
32
36
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
37
|
+
inputDescriptor.constraints.fields = inputDescriptor.constraints.fields.map(
|
|
38
|
+
field => {
|
|
39
|
+
const updatedField = {...field};
|
|
40
|
+
|
|
41
|
+
// Remove the optional attribute if it exists
|
|
42
|
+
if (updatedField.optional !== undefined) {
|
|
43
|
+
delete updatedField.optional;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Remove the did format attribute if it exists
|
|
47
|
+
if (updatedField.filter?.format === 'did') {
|
|
48
|
+
delete updatedField.filter.format;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return updatedField;
|
|
52
|
+
},
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
// Handle case where all fields are optional
|
|
45
56
|
if (inputDescriptor.constraints.fields.length === 0) {
|
|
46
57
|
inputDescriptor.constraints.fields.push({
|
|
47
58
|
path: ['$.id'],
|
|
@@ -49,11 +60,11 @@ export function removeOptionalAttribute(presentationDefinition) {
|
|
|
49
60
|
}
|
|
50
61
|
});
|
|
51
62
|
|
|
52
|
-
if (!
|
|
53
|
-
|
|
63
|
+
if (!clonedPresentationDefinition.id) {
|
|
64
|
+
clonedPresentationDefinition.id = 'id';
|
|
54
65
|
}
|
|
55
66
|
|
|
56
|
-
return
|
|
67
|
+
return clonedPresentationDefinition;
|
|
57
68
|
}
|
|
58
69
|
|
|
59
70
|
class PEXService {
|