@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.
Files changed (193) hide show
  1. package/lib/{account-614e6414.js → account-bf00e5c0.js} +5 -5
  2. package/lib/{account-ee524484.js → account-e48dc9b6.js} +5 -5
  3. package/lib/core/polkadot-utils.js +18 -4
  4. package/lib/core/polkadot-utils.mjs +15 -2
  5. package/lib/index.js +16 -19
  6. package/lib/index.mjs +20 -23
  7. package/lib/modules/account.js +10 -5
  8. package/lib/modules/account.mjs +10 -5
  9. package/lib/modules/accounts.js +10 -5
  10. package/lib/modules/accounts.mjs +10 -5
  11. package/lib/modules/network-manager.js +4 -2
  12. package/lib/modules/network-manager.mjs +4 -2
  13. package/lib/modules/wallet.js +13 -8
  14. package/lib/modules/wallet.mjs +13 -8
  15. package/lib/rpc-server.js +16 -19
  16. package/lib/rpc-server.mjs +20 -23
  17. package/lib/services/blockchain/configs.js +7 -0
  18. package/lib/services/blockchain/configs.mjs +3 -0
  19. package/lib/services/{dock → blockchain}/index.android.js +3 -4
  20. package/lib/services/{dock → blockchain}/index.android.mjs +3 -4
  21. package/lib/services/{dock → blockchain}/index.ios.js +3 -4
  22. package/lib/services/{dock → blockchain}/index.ios.mjs +3 -4
  23. package/lib/services/blockchain/index.js +30 -0
  24. package/lib/services/blockchain/index.mjs +22 -0
  25. package/lib/services/{dock → blockchain}/service-rpc.js +5 -7
  26. package/lib/services/{dock → blockchain}/service-rpc.mjs +5 -7
  27. package/lib/services/blockchain/service.js +212 -0
  28. package/lib/services/blockchain/service.mjs +206 -0
  29. package/lib/services/credential/bbs-revocation.js +41 -60
  30. package/lib/services/credential/bbs-revocation.mjs +42 -57
  31. package/lib/services/credential/bound-check.js +0 -8
  32. package/lib/services/credential/bound-check.mjs +1 -5
  33. package/lib/services/credential/index.js +21 -24
  34. package/lib/services/credential/index.mjs +22 -25
  35. package/lib/services/credential/pex-helpers.js +134 -34
  36. package/lib/services/credential/pex-helpers.mjs +133 -35
  37. package/lib/services/credential/service.js +55 -56
  38. package/lib/services/credential/service.mjs +45 -43
  39. package/lib/services/credential/utils.js +12 -18
  40. package/lib/services/credential/utils.mjs +11 -14
  41. package/lib/services/dids/config.js +8 -0
  42. package/lib/services/dids/config.mjs +8 -0
  43. package/lib/services/dids/index.js +11 -10
  44. package/lib/services/dids/index.mjs +12 -11
  45. package/lib/services/dids/service-rpc.js +2 -2
  46. package/lib/services/dids/service-rpc.mjs +2 -2
  47. package/lib/services/dids/service.js +28 -36
  48. package/lib/services/dids/service.mjs +27 -33
  49. package/lib/services/edv/hmac.js +5 -0
  50. package/lib/services/edv/hmac.mjs +5 -0
  51. package/lib/services/edv/index.js +13 -11
  52. package/lib/services/edv/index.mjs +16 -14
  53. package/lib/services/edv/service-rpc.js +4 -0
  54. package/lib/services/edv/service-rpc.mjs +4 -0
  55. package/lib/services/edv/service.js +29 -13
  56. package/lib/services/edv/service.mjs +31 -16
  57. package/lib/services/example/service.js +3 -1
  58. package/lib/services/example/service.mjs +3 -1
  59. package/lib/services/index.js +14 -17
  60. package/lib/services/index.mjs +18 -21
  61. package/lib/services/keyring/configs.js +12 -0
  62. package/lib/services/keyring/configs.mjs +12 -0
  63. package/lib/services/keyring/service.js +5 -0
  64. package/lib/services/keyring/service.mjs +5 -0
  65. package/lib/services/pex/service.js +17 -15
  66. package/lib/services/pex/service.mjs +17 -15
  67. package/lib/services/relay-service/index.mjs +1 -1
  68. package/lib/services/relay-service/service.mjs +2 -2
  69. package/lib/services/substrate/api-utils.js +19 -6
  70. package/lib/services/substrate/api-utils.mjs +19 -6
  71. package/lib/services/substrate/index.js +14 -6
  72. package/lib/services/substrate/index.mjs +14 -6
  73. package/lib/services/substrate/service.js +17 -9
  74. package/lib/services/substrate/service.mjs +17 -9
  75. package/lib/services/test-utils.js +27 -17
  76. package/lib/services/test-utils.mjs +27 -17
  77. package/lib/services/trust-registry/index.js +17 -5
  78. package/lib/services/trust-registry/index.mjs +17 -5
  79. package/lib/services/trust-registry/service.js +27 -10
  80. package/lib/services/trust-registry/service.mjs +27 -10
  81. package/lib/services/util-crypto/configs.js +3 -0
  82. package/lib/services/util-crypto/configs.mjs +3 -0
  83. package/lib/services/util-crypto/service-rpc.js +6 -0
  84. package/lib/services/util-crypto/service-rpc.mjs +6 -0
  85. package/lib/services/util-crypto/service.js +5 -0
  86. package/lib/services/util-crypto/service.mjs +6 -1
  87. package/lib/setup-nodejs.js +16 -19
  88. package/lib/setup-nodejs.mjs +20 -23
  89. package/lib/setup-tests.js +16 -19
  90. package/lib/setup-tests.mjs +20 -23
  91. package/lib/src/core/polkadot-utils.d.ts +1 -0
  92. package/lib/src/core/polkadot-utils.d.ts.map +1 -1
  93. package/lib/src/modules/network-manager.d.ts +1 -0
  94. package/lib/src/modules/network-manager.d.ts.map +1 -1
  95. package/lib/src/services/blockchain/configs.d.ts +8 -0
  96. package/lib/src/services/blockchain/configs.d.ts.map +1 -0
  97. package/lib/src/services/blockchain/index.d.ts +2 -0
  98. package/lib/src/services/blockchain/index.d.ts.map +1 -0
  99. package/lib/src/services/blockchain/service.d.ts +52 -0
  100. package/lib/src/services/blockchain/service.d.ts.map +1 -0
  101. package/lib/src/services/credential/bbs-revocation.d.ts.map +1 -1
  102. package/lib/src/services/credential/bound-check.d.ts +0 -4
  103. package/lib/src/services/credential/bound-check.d.ts.map +1 -1
  104. package/lib/src/services/credential/index.d.ts +2 -7
  105. package/lib/src/services/credential/index.d.ts.map +1 -1
  106. package/lib/src/services/credential/pex-helpers.d.ts +5 -3
  107. package/lib/src/services/credential/pex-helpers.d.ts.map +1 -1
  108. package/lib/src/services/credential/service.d.ts +2 -7
  109. package/lib/src/services/credential/service.d.ts.map +1 -1
  110. package/lib/src/services/credential/utils.d.ts.map +1 -1
  111. package/lib/src/services/dids/config.d.ts +5 -0
  112. package/lib/src/services/dids/config.d.ts.map +1 -1
  113. package/lib/src/services/dids/service-rpc.d.ts +1 -1
  114. package/lib/src/services/dids/service-rpc.d.ts.map +1 -1
  115. package/lib/src/services/dids/service.d.ts +9 -4
  116. package/lib/src/services/dids/service.d.ts.map +1 -1
  117. package/lib/src/services/edv/hmac.d.ts +1 -0
  118. package/lib/src/services/edv/hmac.d.ts.map +1 -1
  119. package/lib/src/services/edv/service.d.ts +5 -0
  120. package/lib/src/services/edv/service.d.ts.map +1 -1
  121. package/lib/src/services/example/service.d.ts.map +1 -1
  122. package/lib/src/services/keyring/configs.d.ts +6 -0
  123. package/lib/src/services/keyring/configs.d.ts.map +1 -1
  124. package/lib/src/services/pex/service.d.ts.map +1 -1
  125. package/lib/src/services/trust-registry/service.d.ts.map +1 -1
  126. package/lib/src/services/util-crypto/configs.d.ts +1 -0
  127. package/lib/src/services/util-crypto/configs.d.ts.map +1 -1
  128. package/lib/src/services/util-crypto/service.d.ts +1 -0
  129. package/lib/src/services/util-crypto/service.d.ts.map +1 -1
  130. package/lib/test/setup-test-state.js +11 -6
  131. package/lib/test/setup-test-state.mjs +11 -6
  132. package/lib/tsconfig.tsbuildinfo +1 -1
  133. package/package.json +7 -4
  134. package/src/core/polkadot-utils.js +14 -3
  135. package/src/modules/network-manager.ts +5 -2
  136. package/src/modules/wallet.ts +5 -5
  137. package/src/services/blockchain/configs.ts +11 -0
  138. package/src/services/blockchain/index.android.js +3 -0
  139. package/src/services/blockchain/index.ios.js +3 -0
  140. package/src/services/blockchain/index.js +1 -0
  141. package/src/services/blockchain/index.test.js +34 -0
  142. package/src/services/{dock → blockchain}/service-rpc.js +5 -6
  143. package/src/services/blockchain/service.ts +261 -0
  144. package/src/services/credential/bbs-revocation.ts +41 -85
  145. package/src/services/credential/bound-check.test.ts +2 -5
  146. package/src/services/credential/bound-check.ts +0 -5
  147. package/src/services/credential/index.test.js +148 -7
  148. package/src/services/credential/pex-helpers.js +132 -34
  149. package/src/services/credential/pex-helpers.test.js +284 -27
  150. package/src/services/credential/service.ts +44 -27
  151. package/src/services/credential/utils.js +5 -14
  152. package/src/services/dids/config.ts +15 -0
  153. package/src/services/dids/index.test.js +5 -23
  154. package/src/services/dids/service-rpc.ts +2 -2
  155. package/src/services/dids/service.ts +34 -44
  156. package/src/services/edv/hmac.ts +13 -0
  157. package/src/services/edv/index.test.js +22 -0
  158. package/src/services/edv/service-rpc.js +4 -0
  159. package/src/services/edv/service.ts +22 -0
  160. package/src/services/example/service.ts +3 -1
  161. package/src/services/index.js +2 -2
  162. package/src/services/keyring/configs.ts +21 -0
  163. package/src/services/keyring/service.ts +13 -0
  164. package/src/services/pex/service.ts +29 -18
  165. package/src/services/pex/tests/pex-service.test.js +163 -6
  166. package/src/services/substrate/api-utils.test.js +7 -7
  167. package/src/services/substrate/api-utils.ts +3 -3
  168. package/src/services/substrate/service.ts +6 -6
  169. package/src/services/test-utils.js +13 -11
  170. package/src/services/trust-registry/index.test.js +6 -4
  171. package/src/services/trust-registry/service.ts +13 -7
  172. package/src/services/util-crypto/configs.ts +4 -0
  173. package/src/services/util-crypto/service-rpc.js +6 -0
  174. package/src/services/util-crypto/service.ts +8 -0
  175. package/src/test/setup-test-state.js +2 -2
  176. package/lib/services/dock/configs.js +0 -18
  177. package/lib/services/dock/configs.mjs +0 -10
  178. package/lib/services/dock/index.js +0 -17
  179. package/lib/services/dock/index.mjs +0 -9
  180. package/lib/services/dock/service.js +0 -138
  181. package/lib/services/dock/service.mjs +0 -126
  182. package/lib/src/services/dock/configs.d.ts +0 -7
  183. package/lib/src/services/dock/configs.d.ts.map +0 -1
  184. package/lib/src/services/dock/index.d.ts +0 -2
  185. package/lib/src/services/dock/index.d.ts.map +0 -1
  186. package/lib/src/services/dock/service.d.ts +0 -44
  187. package/lib/src/services/dock/service.d.ts.map +0 -1
  188. package/src/services/dock/configs.ts +0 -12
  189. package/src/services/dock/index.android.js +0 -3
  190. package/src/services/dock/index.ios.js +0 -3
  191. package/src/services/dock/index.js +0 -1
  192. package/src/services/dock/index.test.js +0 -48
  193. package/src/services/dock/service.ts +0 -154
@@ -1,11 +1,10 @@
1
- import {assertRpcService, getPromiseError} from '../test-utils';
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 {getDock} from '../dock/service';
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.spyOn(getDock().did, 'getDocument').mockResolvedValue(document);
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
- registerDidDock(keyPair) {
22
- return this.call('registerDidDock', keyPair);
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 {createNewDockDID} from '@docknetwork/sdk/utils/did';
12
- import {dockService, getDock} from '../dock/service';
13
- import {PublicKeySr25519} from '@docknetwork/sdk';
14
- import {DidKey, VerificationRelationship} from '@docknetwork/sdk/public-keys';
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 { keyDocToKeypair } from '../credential/utils';
19
- import Ed25519Signature2020 from '@docknetwork/sdk/utils/vc/crypto/Ed25519Signature2020';
20
- import EcdsaSecp256k1Signature2019 from '@docknetwork/sdk/utils/vc/crypto/EcdsaSecp256k1Signature2019';
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, dockService.dock);
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.registerDidDock,
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 createSignedJWT({
98
- payload,
99
- privateKeyDoc,
100
- headerInput
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 = getDock();
124
- const result = await dock.did.getDocument(did);
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();
@@ -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
  });
@@ -15,6 +15,10 @@ export class EDVServiceRpc extends RpcService {
15
15
  return this.call('generateKeys');
16
16
  }
17
17
 
18
+ deriveKeys() {
19
+ return this.call('deriveKeys');
20
+ }
21
+
18
22
  find(params: any) {
19
23
  return this.call('find', params);
20
24
  }
@@ -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
  }
@@ -4,7 +4,9 @@ import {SumParams, validation} from './configs';
4
4
  export class ExampleService {
5
5
  rpcMethods = [ExampleService.prototype.sum];
6
6
 
7
- constructor() {}
7
+ constructor() {
8
+ this.name = 'example';
9
+ }
8
10
 
9
11
  sum(params: SumParams) {
10
12
  validation.sum(params);
@@ -1,5 +1,5 @@
1
1
  import {keyringService} from './keyring/service';
2
- import {dockService} from './dock/service';
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
- dockService,
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.input_descriptors.forEach(inputDescriptor => {
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
- // Removes the optinal attributes from the fields
34
- // It applies in case optional: false
35
- // The field is required, but pex doesn't support the attribute
36
- inputDescriptor.constraints.fields.forEach(field => {
37
- if (field.optional !== undefined) {
38
- delete field.optional;
39
- }
40
- });
41
-
42
- // There is a case where ALL fields are optional
43
- // If we remove all fields, it will cause an error with PEX
44
- // So, we add a placeholder field to avoid the error
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 (!presentationDefinition.id) {
53
- presentationDefinition.id = 'id';
63
+ if (!clonedPresentationDefinition.id) {
64
+ clonedPresentationDefinition.id = 'id';
54
65
  }
55
66
 
56
- return presentationDefinition;
67
+ return clonedPresentationDefinition;
57
68
  }
58
69
 
59
70
  class PEXService {