@docknetwork/wallet-sdk-wasm 1.5.9 → 1.5.10

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 (262) hide show
  1. package/lib/core/format-utils.js +0 -28
  2. package/lib/core/format-utils.mjs +1 -24
  3. package/lib/core/validation.js +1 -24
  4. package/lib/core/validation.mjs +2 -21
  5. package/lib/index.js +13 -23
  6. package/lib/index.mjs +13 -23
  7. package/lib/rpc-server.js +13 -23
  8. package/lib/rpc-server.mjs +13 -23
  9. package/lib/rpc-util.js +14 -0
  10. package/lib/rpc-util.mjs +14 -0
  11. package/lib/services/blockchain/index.js +3 -6
  12. package/lib/services/blockchain/index.mjs +3 -6
  13. package/lib/services/blockchain/service.js +4 -6
  14. package/lib/services/blockchain/service.mjs +4 -6
  15. package/lib/services/credential/bbs-revocation.js +4 -7
  16. package/lib/services/credential/bbs-revocation.mjs +3 -6
  17. package/lib/services/credential/bound-check.js +9 -4
  18. package/lib/services/credential/bound-check.mjs +9 -4
  19. package/lib/services/credential/index.js +11 -13
  20. package/lib/services/credential/index.mjs +11 -13
  21. package/lib/services/credential/service.js +18 -18
  22. package/lib/services/credential/service.mjs +15 -15
  23. package/lib/services/credential/utils.js +65 -28
  24. package/lib/services/credential/utils.mjs +62 -32
  25. package/lib/services/dids/index.js +11 -14
  26. package/lib/services/dids/index.mjs +11 -14
  27. package/lib/services/dids/keypair-utils.js +142 -0
  28. package/lib/services/dids/keypair-utils.mjs +113 -0
  29. package/lib/services/dids/service.js +15 -34
  30. package/lib/services/dids/service.mjs +15 -34
  31. package/lib/services/edv/index.js +8 -14
  32. package/lib/services/edv/index.mjs +8 -14
  33. package/lib/services/edv/service.js +10 -22
  34. package/lib/services/edv/service.mjs +10 -22
  35. package/lib/services/index.js +13 -25
  36. package/lib/services/index.mjs +13 -25
  37. package/lib/services/relay-service/configs.js +0 -1
  38. package/lib/services/relay-service/configs.mjs +0 -1
  39. package/lib/services/relay-service/index.android.js +0 -1
  40. package/lib/services/relay-service/index.android.mjs +0 -1
  41. package/lib/services/relay-service/index.ios.js +0 -1
  42. package/lib/services/relay-service/index.ios.mjs +0 -1
  43. package/lib/services/relay-service/index.js +0 -1
  44. package/lib/services/relay-service/index.mjs +0 -1
  45. package/lib/services/relay-service/service-rpc.js +0 -1
  46. package/lib/services/relay-service/service-rpc.mjs +0 -1
  47. package/lib/services/relay-service/service.js +0 -1
  48. package/lib/services/relay-service/service.mjs +0 -1
  49. package/lib/services/test-utils.js +0 -44
  50. package/lib/services/test-utils.mjs +1 -44
  51. package/lib/services/util-crypto/configs.js +0 -12
  52. package/lib/services/util-crypto/configs.mjs +0 -12
  53. package/lib/services/util-crypto/index.android.js +0 -3
  54. package/lib/services/util-crypto/index.android.mjs +0 -3
  55. package/lib/services/util-crypto/index.ios.js +0 -3
  56. package/lib/services/util-crypto/index.ios.mjs +0 -3
  57. package/lib/services/util-crypto/index.js +4 -7
  58. package/lib/services/util-crypto/index.mjs +4 -7
  59. package/lib/services/util-crypto/service-rpc.js +0 -23
  60. package/lib/services/util-crypto/service-rpc.mjs +0 -23
  61. package/lib/services/util-crypto/service.js +68 -61
  62. package/lib/services/util-crypto/service.mjs +50 -59
  63. package/lib/services/wallet/configs.js +0 -63
  64. package/lib/services/wallet/configs.mjs +1 -64
  65. package/lib/services/wallet/index.android.js +0 -1
  66. package/lib/services/wallet/index.android.mjs +0 -1
  67. package/lib/services/wallet/index.ios.js +0 -1
  68. package/lib/services/wallet/index.ios.mjs +0 -1
  69. package/lib/services/wallet/index.js +2 -12
  70. package/lib/services/wallet/index.mjs +2 -12
  71. package/lib/services/wallet/service-rpc.js +0 -77
  72. package/lib/services/wallet/service-rpc.mjs +0 -77
  73. package/lib/services/wallet/service.js +1 -215
  74. package/lib/services/wallet/service.mjs +1 -211
  75. package/lib/setup-nodejs.js +13 -23
  76. package/lib/setup-nodejs.mjs +13 -23
  77. package/lib/setup-tests.js +13 -23
  78. package/lib/setup-tests.mjs +13 -23
  79. package/lib/src/core/format-utils.d.ts +0 -5
  80. package/lib/src/core/format-utils.d.ts.map +1 -1
  81. package/lib/src/core/validation.d.ts +0 -3
  82. package/lib/src/core/validation.d.ts.map +1 -1
  83. package/lib/src/rpc-util.d.ts.map +1 -1
  84. package/lib/src/services/blockchain/service.d.ts.map +1 -1
  85. package/lib/src/services/credential/bbs-revocation.d.ts.map +1 -1
  86. package/lib/src/services/credential/bound-check.d.ts +1 -1
  87. package/lib/src/services/credential/bound-check.d.ts.map +1 -1
  88. package/lib/src/services/credential/service.d.ts.map +1 -1
  89. package/lib/src/services/credential/utils.d.ts +2 -1
  90. package/lib/src/services/credential/utils.d.ts.map +1 -1
  91. package/lib/src/services/dids/keypair-utils.d.ts +15 -0
  92. package/lib/src/services/dids/keypair-utils.d.ts.map +1 -0
  93. package/lib/src/services/dids/service.d.ts +6 -6
  94. package/lib/src/services/dids/service.d.ts.map +1 -1
  95. package/lib/src/services/edv/service.d.ts.map +1 -1
  96. package/lib/src/services/util-crypto/configs.d.ts +0 -3
  97. package/lib/src/services/util-crypto/configs.d.ts.map +1 -1
  98. package/lib/src/services/util-crypto/service.d.ts +3 -8
  99. package/lib/src/services/util-crypto/service.d.ts.map +1 -1
  100. package/lib/src/services/wallet/configs.d.ts +13 -0
  101. package/lib/src/services/wallet/configs.d.ts.map +1 -0
  102. package/lib/src/services/wallet/service.d.ts +1 -44
  103. package/lib/src/services/wallet/service.d.ts.map +1 -1
  104. package/lib/test-utils.js +0 -4
  105. package/lib/test-utils.mjs +1 -4
  106. package/lib/tsconfig.tsbuildinfo +1 -1
  107. package/package.json +5 -25
  108. package/readme.md +0 -61
  109. package/src/core/format-utils.test.js +1 -28
  110. package/src/core/format-utils.ts +0 -33
  111. package/src/core/validation.test.js +1 -33
  112. package/src/core/validation.ts +1 -25
  113. package/src/rpc-server.test.js +2 -9
  114. package/src/rpc-util.js +14 -0
  115. package/src/services/blockchain/service.ts +1 -0
  116. package/src/services/credential/bbs-revocation.ts +2 -1
  117. package/src/services/credential/bound-check.test.ts +6 -6
  118. package/src/services/credential/bound-check.ts +4 -4
  119. package/src/services/credential/index.test.js +0 -2
  120. package/src/services/credential/service.ts +5 -2
  121. package/src/services/credential/utils.js +65 -23
  122. package/src/services/dids/index.test.js +8 -19
  123. package/src/services/dids/keypair-utils.js +111 -0
  124. package/src/services/dids/service.ts +6 -25
  125. package/src/services/edv/service.ts +2 -9
  126. package/src/services/index.js +0 -4
  127. package/src/services/test-utils.js +0 -29
  128. package/src/services/util-crypto/configs.ts +0 -12
  129. package/src/services/util-crypto/index.test.js +6 -83
  130. package/src/services/util-crypto/service-rpc.js +0 -20
  131. package/src/services/util-crypto/service.ts +62 -75
  132. package/src/services/wallet/configs.ts +1 -113
  133. package/src/services/wallet/index.test.js +0 -159
  134. package/src/services/wallet/service-rpc.js +1 -88
  135. package/src/services/wallet/service.ts +0 -258
  136. package/src/test-utils.js +0 -13
  137. package/lib/account-357ab05d.js +0 -742
  138. package/lib/account-399e6053.js +0 -752
  139. package/lib/core/polkadot-utils.js +0 -119
  140. package/lib/core/polkadot-utils.mjs +0 -94
  141. package/lib/core/realm-schemas.js +0 -50
  142. package/lib/core/realm-schemas.mjs +0 -44
  143. package/lib/core/subscan.js +0 -75
  144. package/lib/core/subscan.mjs +0 -64
  145. package/lib/fixtures.js +0 -56
  146. package/lib/fixtures.mjs +0 -52
  147. package/lib/modules/account.js +0 -48
  148. package/lib/modules/account.mjs +0 -40
  149. package/lib/modules/accounts.js +0 -49
  150. package/lib/modules/accounts.mjs +0 -40
  151. package/lib/modules/data-migration.js +0 -72
  152. package/lib/modules/data-migration.mjs +0 -68
  153. package/lib/modules/wallet-backup.js +0 -82
  154. package/lib/modules/wallet-backup.mjs +0 -71
  155. package/lib/modules/wallet.js +0 -49
  156. package/lib/modules/wallet.mjs +0 -40
  157. package/lib/services/example/configs.js +0 -21
  158. package/lib/services/example/configs.mjs +0 -13
  159. package/lib/services/example/index.js +0 -18
  160. package/lib/services/example/index.mjs +0 -14
  161. package/lib/services/example/service-rpc.js +0 -25
  162. package/lib/services/example/service-rpc.mjs +0 -21
  163. package/lib/services/example/service.js +0 -25
  164. package/lib/services/example/service.mjs +0 -20
  165. package/lib/services/keyring/configs.js +0 -70
  166. package/lib/services/keyring/configs.mjs +0 -61
  167. package/lib/services/keyring/index.android.js +0 -22
  168. package/lib/services/keyring/index.android.mjs +0 -18
  169. package/lib/services/keyring/index.ios.js +0 -22
  170. package/lib/services/keyring/index.ios.mjs +0 -18
  171. package/lib/services/keyring/index.js +0 -16
  172. package/lib/services/keyring/index.mjs +0 -8
  173. package/lib/services/keyring/service-rpc.js +0 -65
  174. package/lib/services/keyring/service-rpc.mjs +0 -61
  175. package/lib/services/keyring/service.js +0 -84
  176. package/lib/services/keyring/service.mjs +0 -74
  177. package/lib/services/polkadot/configs.js +0 -17
  178. package/lib/services/polkadot/configs.mjs +0 -13
  179. package/lib/services/polkadot/index.android.js +0 -22
  180. package/lib/services/polkadot/index.android.mjs +0 -18
  181. package/lib/services/polkadot/index.ios.js +0 -22
  182. package/lib/services/polkadot/index.ios.mjs +0 -18
  183. package/lib/services/polkadot/index.js +0 -15
  184. package/lib/services/polkadot/index.mjs +0 -7
  185. package/lib/services/polkadot/service-rpc.js +0 -30
  186. package/lib/services/polkadot/service-rpc.mjs +0 -26
  187. package/lib/services/polkadot/service.js +0 -28
  188. package/lib/services/polkadot/service.mjs +0 -23
  189. package/lib/src/core/polkadot-utils.d.ts +0 -11
  190. package/lib/src/core/polkadot-utils.d.ts.map +0 -1
  191. package/lib/src/modules/account.d.ts +0 -60
  192. package/lib/src/modules/account.d.ts.map +0 -1
  193. package/lib/src/modules/accounts.d.ts +0 -48
  194. package/lib/src/modules/accounts.d.ts.map +0 -1
  195. package/lib/src/modules/data-migration.d.ts +0 -7
  196. package/lib/src/modules/data-migration.d.ts.map +0 -1
  197. package/lib/src/modules/wallet-backup.d.ts +0 -12
  198. package/lib/src/modules/wallet-backup.d.ts.map +0 -1
  199. package/lib/src/modules/wallet.d.ts +0 -134
  200. package/lib/src/modules/wallet.d.ts.map +0 -1
  201. package/lib/src/services/blockchain/index.d.ts +0 -2
  202. package/lib/src/services/blockchain/index.d.ts.map +0 -1
  203. package/lib/src/services/example/configs.d.ts +0 -9
  204. package/lib/src/services/example/configs.d.ts.map +0 -1
  205. package/lib/src/services/example/service.d.ts +0 -8
  206. package/lib/src/services/example/service.d.ts.map +0 -1
  207. package/lib/src/services/keyring/configs.d.ts +0 -39
  208. package/lib/src/services/keyring/configs.d.ts.map +0 -1
  209. package/lib/src/services/keyring/index.d.ts +0 -2
  210. package/lib/src/services/keyring/index.d.ts.map +0 -1
  211. package/lib/src/services/polkadot/configs.d.ts +0 -8
  212. package/lib/src/services/polkadot/configs.d.ts.map +0 -1
  213. package/lib/src/services/polkadot/index.d.ts +0 -2
  214. package/lib/src/services/polkadot/index.d.ts.map +0 -1
  215. package/lib/src/services/polkadot/service.d.ts +0 -8
  216. package/lib/src/services/polkadot/service.d.ts.map +0 -1
  217. package/lib/src/services/wallet/index.d.ts +0 -2
  218. package/lib/src/services/wallet/index.d.ts.map +0 -1
  219. package/lib/test/axiosMocks.js +0 -431
  220. package/lib/test/axiosMocks.mjs +0 -420
  221. package/lib/test/setup-test-state.js +0 -81
  222. package/lib/test/setup-test-state.mjs +0 -73
  223. package/src/core/polkadot-utils.js +0 -99
  224. package/src/core/realm-schemas.js +0 -42
  225. package/src/core/subscan.js +0 -62
  226. package/src/core/subscan.test.js +0 -56
  227. package/src/fixtures.js +0 -43
  228. package/src/modules/account.test.js +0 -56
  229. package/src/modules/account.ts +0 -128
  230. package/src/modules/accounts.test.js +0 -63
  231. package/src/modules/accounts.ts +0 -231
  232. package/src/modules/data-migration.test.js +0 -61
  233. package/src/modules/data-migration.ts +0 -86
  234. package/src/modules/wallet-backup.test.js +0 -24
  235. package/src/modules/wallet-backup.ts +0 -68
  236. package/src/modules/wallet.test.js +0 -216
  237. package/src/modules/wallet.ts +0 -424
  238. package/src/services/example/configs.js +0 -14
  239. package/src/services/example/index.js +0 -3
  240. package/src/services/example/index.test.js +0 -28
  241. package/src/services/example/service-rpc.js +0 -11
  242. package/src/services/example/service.ts +0 -18
  243. package/src/services/keyring/configs.ts +0 -110
  244. package/src/services/keyring/index.android.js +0 -3
  245. package/src/services/keyring/index.ios.js +0 -3
  246. package/src/services/keyring/index.js +0 -1
  247. package/src/services/keyring/index.test.js +0 -48
  248. package/src/services/keyring/service-rpc.js +0 -56
  249. package/src/services/keyring/service.ts +0 -111
  250. package/src/services/polkadot/configs.ts +0 -13
  251. package/src/services/polkadot/index.android.js +0 -3
  252. package/src/services/polkadot/index.ios.js +0 -3
  253. package/src/services/polkadot/index.js +0 -1
  254. package/src/services/polkadot/index.test.js +0 -52
  255. package/src/services/polkadot/service-rpc.js +0 -13
  256. package/src/services/polkadot/service.ts +0 -21
  257. package/src/test/axiosMocks.js +0 -20
  258. package/src/test/fixtures/subscan-failure.json +0 -5
  259. package/src/test/fixtures/subscan-success.json +0 -370
  260. package/src/test/fixtures/subscan-too-many-requests.json +0 -9
  261. package/src/test/setup-test-state.js +0 -35
  262. package/src/test/test-wallet.test.js +0 -15
@@ -0,0 +1,111 @@
1
+ /**
2
+ * This code is based on the implementation from truvera api
3
+ * https://github.com/docknetwork/web/blob/3c706c5dc5de4ae63f548c76ec6edeb17533a0c9/apps/api/src/utils/key-manager.js
4
+ */
5
+ import {Ed25519Keypair} from '@docknetwork/credential-sdk/keypairs';
6
+ import {hexToU8a, u8aToHex, u8aToU8a} from '@docknetwork/credential-sdk/utils';
7
+ // import {encodeBase58} from './dock-shared';
8
+ import * as bs58 from 'base58-universal';
9
+
10
+ export function getKeyPairType(key) {
11
+ const keyType = key.type || key.constructor.VerKeyType;
12
+ if (keyType) {
13
+ return keyType;
14
+ }
15
+
16
+ if (key instanceof Ed25519Keypair) {
17
+ return 'Ed25519VerificationKey2018';
18
+ }
19
+
20
+ throw new Error(`Unknown key type for ${key.constructor.name}`);
21
+ }
22
+
23
+ export const MULTIBASE_BASE58BTC_HEADER = 'z';
24
+ export const MULTICODEC_ED25519_PUB_HEADER = new Uint8Array([0xed, 0x01]);
25
+ export const MULTICODEC_ED25519_PRIV_HEADER = new Uint8Array([0x80, 0x26]);
26
+
27
+ export function encodeMbKey(header, key) {
28
+ const mbKey = new Uint8Array(header.length + key.length);
29
+ mbKey.set(header);
30
+ mbKey.set(key, header.length);
31
+ return MULTIBASE_BASE58BTC_HEADER + bs58.encode(mbKey);
32
+ }
33
+
34
+ function getKeyFingerprint(keyType, publicKey) {
35
+ if (keyType.startsWith('Ed25519')) {
36
+ return encodeMbKey(MULTICODEC_ED25519_PUB_HEADER, publicKey);
37
+ } else {
38
+ throw new Error(`Cannot detect key type for fingerprint: ${keyType}`);
39
+ }
40
+ }
41
+
42
+ const keyTypeToDocType = {
43
+ bjj: 'BJJVerificationKey2021',
44
+ secp256k1: 'EcdsaSecp256k1VerificationKey2019',
45
+ };
46
+
47
+ export function keypairToKeydoc(key, controller, id = undefined) {
48
+ const keyType = getKeyPairType(key);
49
+ let keyDoc;
50
+ if (
51
+ keyType === 'Ed25519VerificationKey2020' ||
52
+ keyType === 'Ed25519VerificationKey2018'
53
+ ) {
54
+ const publicKey = u8aToU8a(
55
+ (key.keyPair &&
56
+ key.keyPair.publicKey &&
57
+ u8aToU8a(key.keyPair.publicKey)) ||
58
+ key.publicKeyBuffer ||
59
+ (key.pk && key.pk.value),
60
+ );
61
+
62
+ if (!publicKey) {
63
+ throw new Error('Cannot find public key');
64
+ }
65
+
66
+ const pk = u8aToU8a(
67
+ (key.keyPair && key.keyPair.secretKey) ||
68
+ key.privateKeyBuffer ||
69
+ (key.sk &&
70
+ (typeof key.sk === 'string'
71
+ ? hexToU8a(key.sk)
72
+ : key.sk.value || key.sk)) ||
73
+ hexToU8a(key.pk),
74
+ );
75
+
76
+ const publicKeyBase58 = bs58.encode(publicKey);
77
+ const privateKeyBase58 = bs58.encode(pk);
78
+
79
+ const fingerprint =
80
+ (key.fingerprint && key.fingerprint()) ||
81
+ getKeyFingerprint(keyType, publicKey);
82
+
83
+ // auto create controller
84
+ if (!controller) {
85
+ controller = `did:key:${fingerprint}`;
86
+ id = id || key.id || `${controller}#${fingerprint}`;
87
+ }
88
+
89
+ const keyId = id || key.id || `${controller}#${fingerprint}`;
90
+ const type = keyTypeToDocType[keyType] || keyType;
91
+ keyDoc = {
92
+ controller,
93
+ type,
94
+ id: keyId,
95
+ publicKeyMultibase: encodeMbKey(MULTICODEC_ED25519_PUB_HEADER, publicKey),
96
+ privateKeyMultibase: encodeMbKey(MULTICODEC_ED25519_PRIV_HEADER, pk),
97
+ privateKeyBase58,
98
+ publicKeyBase58,
99
+ };
100
+
101
+ if (key.seed) {
102
+ keyDoc.seed = u8aToHex(key.seed);
103
+ }
104
+ } else {
105
+ throw new Error(`Unknown keypairToKeydoc type: ${keyType}`);
106
+ }
107
+
108
+ keyDoc['@context'] = ['https://w3id.org/wallet/v1'];
109
+
110
+ return keyDoc;
111
+ }
@@ -6,7 +6,6 @@ import {
6
6
  KeypairToDIDKeyDocumentParams,
7
7
  GetDIDResolutionParams,
8
8
  } from './config';
9
- import {keyringService} from '../keyring/service';
10
9
  import {utilCryptoService} from '../util-crypto/service';
11
10
  import assert from 'assert';
12
11
  import {blockchainService, getDock} from '../blockchain/service';
@@ -20,13 +19,13 @@ import {
20
19
  import {Ed25519Keypair} from '@docknetwork/credential-sdk/keypairs';
21
20
 
22
21
  import {Logger} from '../../core/logger';
23
- import {polkadotToKeydoc} from '../../core/polkadot-utils';
24
22
  import base64url from 'base64url';
25
23
  import {keyDocToKeypair} from '../credential/utils';
26
24
  import {
27
25
  Ed25519Signature2020,
28
26
  EcdsaSecp256k1Signature2019,
29
27
  } from '@docknetwork/credential-sdk/vc/crypto';
28
+ import { keypairToKeydoc } from './keypair-utils';
30
29
 
31
30
  async function getSignerKeypair(privateKeyDoc) {
32
31
  const privateKey =
@@ -84,34 +83,16 @@ class DIDService {
84
83
 
85
84
  async generateKeyDoc(params) {
86
85
  validation.generateKeyDoc(params);
87
- const {derivePath = '', type = 'ed25519', keyPairJSON} = params;
88
- let keyring;
89
-
90
- if (keyPairJSON) {
91
- keyring = keyringService.keyring.addFromJson(keyPairJSON);
92
- keyring.unlock('');
93
- } else {
94
- const mnemonic = await utilCryptoService.mnemonicGenerate(12);
95
- keyring = keyringService.getKeyringPair({
96
- mnemonic,
97
- derivePath,
98
- type,
99
- });
100
- }
101
-
102
- return polkadotToKeydoc(keyring, params.controller);
86
+ const {derivePath = '', type = 'ed25519'} = params;
87
+ const keyPair = Ed25519Keypair.random()
88
+ return keypairToKeydoc(keyPair, params.controller);
103
89
  }
104
90
 
105
91
  async deriveKeyDoc(params) {
106
92
  validation.deriveKeyDoc(params);
107
93
  const { pair, type = 'ed25519' } = params;
108
-
109
- const keyring = keyringService.createFromPair({
110
- pair,
111
- type,
112
- });
113
-
114
- return polkadotToKeydoc(keyring, params.controller);
94
+ const keyPair = new Ed25519Keypair(pair.secretKey, 'private')
95
+ return keypairToKeydoc(keyPair, params.controller);
115
96
  }
116
97
 
117
98
  async createSignedJWT({payload, privateKeyDoc, headerInput}) {
@@ -8,8 +8,7 @@ import {X25519KeyAgreementKey2020} from '@digitalbazaar/x25519-key-agreement-key
8
8
  import {getKeypairFromDoc} from '@docknetwork/universal-wallet/methods/keypairs';
9
9
  import {logger} from '@docknetwork/wallet-sdk-data-store/src/logger';
10
10
  import {didService} from '@docknetwork/wallet-sdk-wasm/src/services/dids/service';
11
- import {keyringService} from '@docknetwork/wallet-sdk-wasm/src/services/keyring';
12
- import {ed25519PairFromSeed} from '@polkadot/util-crypto';
11
+ import {Ed25519Keypair} from '@docknetwork/credential-sdk/keypairs';
13
12
 
14
13
  /**
15
14
  * EDVService
@@ -97,9 +96,6 @@ export class EDVService {
97
96
  }
98
97
 
99
98
  async generateKeys() {
100
- await keyringService.initialize({
101
- ss58Format: 22,
102
- });
103
99
  const keyPair = await didService.generateKeyDoc({});
104
100
 
105
101
  const verificationKey = await Ed25519VerificationKey2018.generate({
@@ -116,10 +112,7 @@ export class EDVService {
116
112
  }
117
113
 
118
114
  async deriveKeys(masterKey: Uint8Array) {
119
- await keyringService.initialize({
120
- ss58Format: 22,
121
- });
122
- const pair = ed25519PairFromSeed(masterKey);
115
+ const {keyPair: pair} = new Ed25519Keypair(masterKey, 'seed');
123
116
 
124
117
  const keyPair = await didService.deriveKeyDoc({ pair });
125
118
 
@@ -1,7 +1,5 @@
1
- import {keyringService} from './keyring/service';
2
1
  import {blockchainService} from './blockchain/service';
3
2
  import {walletService} from './wallet/service';
4
- import {polkadotService} from './polkadot/service';
5
3
  import {utilCryptoService} from './util-crypto/service';
6
4
  import {storageService} from './storage/service';
7
5
  import {didService} from './dids/service';
@@ -11,10 +9,8 @@ import {pexService} from './pex/service';
11
9
  import {edvService} from './edv/service';
12
10
 
13
11
  export default [
14
- keyringService,
15
12
  blockchainService,
16
13
  walletService,
17
- polkadotService,
18
14
  utilCryptoService,
19
15
  storageService,
20
16
  didService,
@@ -1,18 +1,6 @@
1
- import {cryptoWaitReady} from '@polkadot/util-crypto';
2
1
  import assert from 'assert';
3
- import {TestFixtures} from '../fixtures';
4
2
  import {NetworkManager} from '../modules/network-manager';
5
- import {keyringService} from './keyring';
6
3
  import {RpcService} from './rpc-service-client';
7
- import {walletService} from './wallet';
8
-
9
- export async function initializeWalletService() {
10
- await cryptoWaitReady();
11
- await keyringService.initialize({
12
- ss58Format: 21,
13
- });
14
- await walletService.create('test-wallet', 'memory');
15
- }
16
4
 
17
5
  export const TEST_FEE_AMOUNT = 2.48;
18
6
  export const API_MOCK_DISABLED = process.env.API_MOCK_DISABLED === 'true';
@@ -39,23 +27,6 @@ export async function setupTestWallet() {
39
27
 
40
28
  NetworkManager.getInstance().setNetworkId('testnet');
41
29
 
42
- await cryptoWaitReady();
43
- await keyringService.initialize({
44
- ss58Format: NetworkManager.getInstance().getNetworkInfo().addressPrefix,
45
- });
46
- await walletService.create({
47
- walletId: 'test-wallet',
48
- type: 'memory',
49
- });
50
- await walletService.createAccountDocuments({
51
- mnemonic: TestFixtures.account1.mnemonic,
52
- name: TestFixtures.account1.name,
53
- });
54
- await walletService.createAccountDocuments({
55
- mnemonic: TestFixtures.account2.mnemonic,
56
- name: TestFixtures.account2.name,
57
- });
58
-
59
30
  walletCreated = true;
60
31
  }
61
32
 
@@ -3,14 +3,6 @@ import assert from 'assert';
3
3
  import {assertAddress} from '../../core/validation';
4
4
 
5
5
  export const validation = {
6
- deriveValidate(uri: string) {
7
- assert(!!uri, 'uri is required');
8
- },
9
-
10
- isAddressValid(address: string) {
11
- assertAddress(address);
12
- },
13
-
14
6
  mnemonicGenerate(numWords: number) {
15
7
  if (numWords) {
16
8
  assert(typeof numWords === 'number', 'invalid number of words');
@@ -20,8 +12,4 @@ export const validation = {
20
12
  mnemonicToMiniSecret(phrase: string) {
21
13
  assert(typeof phrase === 'string', 'invalid mnemonic phrase');
22
14
  },
23
-
24
- mnemonicValidate(phrase: string) {
25
- assert(typeof phrase === 'string', 'invalid mnemonic phrase');
26
- },
27
15
  };
@@ -1,5 +1,4 @@
1
- import {cryptoWaitReady} from '@polkadot/util-crypto';
2
- import {assertRpcService, getPromiseError} from '../test-utils';
1
+ import {assertRpcService} from '../test-utils';
3
2
  import {validation} from './configs';
4
3
  import {utilCryptoService as service} from './service';
5
4
  import {UtilCryptoServiceRpc} from './service-rpc';
@@ -10,71 +9,19 @@ describe('UtilCryptoService', () => {
10
9
  });
11
10
 
12
11
  describe('service', () => {
13
- beforeAll(async () => {
14
- await cryptoWaitReady();
15
- });
16
-
17
12
  it('mnemonicGenerate', () => {
18
13
  const result = service.mnemonicGenerate(12);
19
14
  expect(typeof result).toBe('string');
20
15
  });
21
16
 
22
- it('isAddressValid', async () => {
23
- expect(
24
- await service.isAddressValid(
25
- '3HM9DYxHe5tAwh2cuErNHiLxSMDJhetxaVGCDTYXiwyuuHN6',
26
- ),
27
- ).toBe(true);
28
-
29
- expect(await service.isAddressValid('wrong value')).toBe(false);
30
- });
31
-
32
- describe('mnemonicValidate', () => {
33
- it('expect mnemonic to be valid', async () => {
34
- const phrase = await service.mnemonicGenerate(12);
35
- const isValid = await service.mnemonicValidate(phrase);
36
-
37
- expect(isValid).toBe(true);
38
- });
39
-
40
- it('expect mnemonic to be invalid', async () => {
41
- const isValid = await service.mnemonicValidate('invalid mnemonic');
42
-
43
- expect(isValid).toBe(false);
44
- });
45
- });
46
-
47
- describe('deriveValidate', () => {
48
- let phrase;
49
-
50
- beforeAll(async () => {
51
- phrase = await service.mnemonicGenerate(12);
52
- });
53
-
54
- it('expect derive path to be valid', async () => {
55
- const result = await service.deriveValidate(`${phrase}/stuff/stuff`);
56
- expect(result).toStrictEqual({});
57
- });
58
-
59
- it('expect derive path to not be valid', async () => {
60
- const error = await getPromiseError(() =>
61
- service.deriveValidate('wrong phrase'),
62
- );
63
- expect(error.message).toBe('invalid derive path');
64
- });
65
-
66
- it('expect derive path to have warning', async () => {
67
- const result = await service.deriveValidate(
68
- `${phrase}/stuff///pass/tst`,
69
- );
70
-
71
- expect(result.warning).toBe('slash password detected');
72
- });
73
- });
74
-
75
17
  describe('isBase64', () => {
76
18
  it('expect to be base64', async () => {
77
19
  expect(await service.isBase64('dGVzdA==')).toBe(true);
20
+ expect(
21
+ await service.isBase64(
22
+ 'eyJ0eXAiOiJhcHBsaWNhdGlvbi9kaWRjb21tLWVuY3J5cHRlZCtqc29uIiwicHJvdGVjdGVkIjoiZXlKbGJtTWlPaUpZUXpJd1VDSjkiLCJyZWNpcGllbnRzIjpbeyJoZWFkZXIiOnsia2lkIjoiZGlkOmtleTp6Nk1raE43UEJqV2dTTVEyNEJlYmRwdnZ3OGZWUnY3bTZNSERxaXdUS296ekJnckojejZMU29qOXpqWmhBcDdNUFFjUndDMnludUJYdXk5YkVnVks1aDNzVFo5c01nMUdtIiwiYWxnIjoiRUNESC0xUFUrQTI1NktXIiwiZXBrIjp7Imt0eSI6Ik9LUCIsImNydiI6IlgyNTUxOSIsIngiOiJoLXE4elVXVkt2VE9GQWNYUVRRbllvckhBQlk0Y044ZVNkRy1yT0JjWlFvIn0sImFwdSI6IlpHbGtPbXRsZVRwNk5rMXJhRTQzVUVKcVYyZFRUVkV5TkVKbFltUndkblozT0daV1VuWTNiVFpOU0VSeGFYZFVTMjk2ZWtKbmNrb2plalpNVTI5cU9YcHFXbWhCY0RkTlVGRmpVbmRETW5sdWRVSllkWGs1WWtWblZrczFhRE56VkZvNWMwMW5NVWR0IiwiYXB2IjoiWkdsa09tdGxlVHA2TmsxcmFFNDNVRUpxVjJkVFRWRXlORUpsWW1Sd2RuWjNPR1pXVW5ZM2JUWk5TRVJ4YVhkVVMyOTZla0puY2tvamVqWk1VMjlxT1hwcVdtaEJjRGROVUZGalVuZERNbmx1ZFVKWWRYazVZa1ZuVmtzMWFETnpWRm81YzAxbk1VZHQiLCJza2lkIjoiZGlkOmtleTp6Nk1raE43UEJqV2dTTVEyNEJlYmRwdnZ3OGZWUnY3bTZNSERxaXdUS296ekJnckojejZMU29qOXpqWmhBcDdNUFFjUndDMnludUJYdXk5YkVnVks1aDNzVFo5c01nMUdtIn0sImVuY3J5cHRlZF9rZXkiOiJNSUxvRFFBWEFFV0xTamdSVnZ3WlduLXE4RUlBUGtCUURpNWEtZDJvX084NW12OERnUncyZHcifV0sIml2IjoiT2FLY21DbW9GTDZiLVRxcVluQ1NUMGFLSkhoUTUwSW4iLCJjaXBoZXJ0ZXh0IjoiTkx4UkkxZjhaNVpQNTVjZVVubHk3SVBKOWpvbXItYUk5RkhlNW9xZHQ5cmNTb3h3RC1CdHItSHdvWmZRZFlPbVRzVndEaVpoQmdmT0ZMeVgtMExlbDl1U3piYjk3SzljQ3h2djBDVnF5a1lNQmpaTno2QWtVek9uS1p0ZWRrWnE3UXFRb2ZNMXoyOEt4SXc5emdSaDNDcWJ0MmpPbTZiMUxfbnkwOWF0TXdob2hZdUpPVko0R2FBdTBBZXJDaURjaDZsNFVGbzU3U2FEdWFvZ3VoTGZ4eUMzZjRFbGVpYUFOcTdmWmhYOEV5ZkxELWpqaEY0RlZocUhXbk5aRTRRbm5JdHhlblRtWi02b0hETDNnaUJCTXFlaXJpcTFFcWpFM1JfVUVqVlJJclEzTmZwSmZqc3V4MnBpY0k5RXp5ZUhMQSIsInRhZyI6IkVDX2NnZzVWSVdfWUNYdno3MzgyUHcifQ',
23
+ ),
24
+ ).toBe(true);
78
25
  });
79
26
 
80
27
  it('expect to not be base64', async () => {
@@ -82,29 +29,5 @@ describe('UtilCryptoService', () => {
82
29
  expect(await service.isBase64('Test')).toBe(false);
83
30
  });
84
31
  });
85
-
86
- describe('getAddressPrefix', () => {
87
- const MAINNET_PREFIX = 22;
88
- const TESTNET_PREFIX = 21;
89
- it('expect to match mainnet prefix', () => {
90
- const result = service.getAddressPrefix({
91
- address: '3EGurYbWGtyVfouDTZjxz1t2jiV3voU9N6sSDAvhHyxaqf8L',
92
- startPrefix: TESTNET_PREFIX,
93
- endPrefix: MAINNET_PREFIX,
94
- });
95
-
96
- expect(result).toBe(MAINNET_PREFIX);
97
- });
98
-
99
- it('expect to match testnet prefix', () => {
100
- const result = service.getAddressPrefix({
101
- address: '37PsGbLmrTfV6VVknkrh6LKACXuC9LuSCwuxhk6ajGDjNCwc',
102
- startPrefix: TESTNET_PREFIX,
103
- endPrefix: MAINNET_PREFIX,
104
- });
105
-
106
- expect(result).toBe(TESTNET_PREFIX);
107
- });
108
- });
109
32
  });
110
33
  });
@@ -18,26 +18,6 @@ export class UtilCryptoServiceRpc extends RpcService {
18
18
  return this.call('mnemonicToMiniSecret', phrase);
19
19
  }
20
20
 
21
- mnemonicValidate(phrase: string): Promise<any> {
22
- validation.mnemonicValidate(phrase);
23
-
24
- return this.call('mnemonicValidate', phrase);
25
- }
26
-
27
- cryptoWaitReady(): Promise<any> {
28
- return this.call('cryptoWaitReady');
29
- }
30
-
31
- cryptoIsReady(): Promise<any> {
32
- return this.call('cryptoIsReady');
33
- }
34
-
35
- isAddressValid(address: string): Promise<any> {
36
- validation.deriveValidate(address);
37
-
38
- return this.call('isAddressValid', address);
39
- }
40
-
41
21
  deriveValidate(uri: string): Promise<any> {
42
22
  validation.deriveValidate(uri);
43
23
  return this.call('deriveValidate', uri);
@@ -1,44 +1,66 @@
1
1
  // @ts-nocheck
2
- import {decodeAddress, encodeAddress} from '@polkadot/keyring';
3
- import {hexToU8a, isHex} from '@polkadot/util';
4
- import {
5
- cryptoIsReady,
6
- cryptoWaitReady,
7
- keyExtractSuri,
8
- mnemonicGenerate,
9
- mnemonicToMiniSecret,
10
- mnemonicValidate,
11
- } from '@polkadot/util-crypto';
2
+ import {hexToU8a, u8aToString} from '@docknetwork/credential-sdk/utils';
3
+ import * as bip39 from '@scure/bip39';
4
+ import {wordlist} from '@scure/bip39/wordlists/english';
12
5
  import assert from 'assert';
13
6
  import {validation} from './configs';
14
7
 
8
+ function isHex(value: string) {
9
+ const isDefinitelyHexString = value.startsWith('0x');
10
+ const isHex =
11
+ isDefinitelyHexString || (/^[0-9a-fA-F]+$/.test(value) && value.length % 2 === 0);
12
+
13
+ return isHex;
14
+ }
15
+
15
16
  export class UtilCryptoService {
16
17
  rpcMethods = [
17
18
  UtilCryptoService.prototype.mnemonicGenerate,
18
19
  UtilCryptoService.prototype.mnemonicToMiniSecret,
19
- UtilCryptoService.prototype.mnemonicValidate,
20
- UtilCryptoService.prototype.cryptoWaitReady,
21
- UtilCryptoService.prototype.cryptoIsReady,
22
- UtilCryptoService.prototype.isAddressValid,
23
- UtilCryptoService.prototype.deriveValidate,
24
20
  UtilCryptoService.prototype.isBase64,
25
- UtilCryptoService.prototype.getAddressPrefix,
21
+ UtilCryptoService.prototype.hexToString,
26
22
  ];
27
23
 
28
24
  constructor() {
29
25
  this.name = 'utilCrypto';
30
26
  }
31
27
 
32
- mnemonicGenerate(numWords) {
28
+ mnemonicGenerate(numWords = 12) {
33
29
  validation.mnemonicGenerate(numWords);
34
30
 
35
- return mnemonicGenerate(numWords);
31
+ // @scure/bip39 uses strength in bits, not number of words
32
+ // 12 words = 128 bits, 15 words = 160 bits, 18 words = 192 bits, 21 words = 224 bits, 24 words = 256 bits
33
+ const strengthMap = {
34
+ 12: 128,
35
+ 15: 160,
36
+ 18: 192,
37
+ 21: 224,
38
+ 24: 256
39
+ };
40
+
41
+ const strength = strengthMap[numWords];
42
+ if (!strength) {
43
+ throw new Error(`Invalid number of words: ${numWords}. Supported values: 12, 15, 18, 21, 24`);
44
+ }
45
+
46
+ return bip39.generateMnemonic(wordlist, strength);
36
47
  }
37
48
 
38
49
  mnemonicToMiniSecret(phrase) {
39
50
  validation.mnemonicToMiniSecret(phrase);
40
51
 
41
- return mnemonicToMiniSecret(phrase);
52
+ // Convert mnemonic to entropy which gives us a 32-byte mini secret for 12-word mnemonics
53
+ // This matches the behavior of Polkadot's mnemonicToMiniSecret
54
+ const entropy = bip39.mnemonicToEntropy(phrase, wordlist);
55
+
56
+ // For 12-word mnemonics, entropy is already 16 bytes (128 bits)
57
+ // We need to pad it to 32 bytes to match Polkadot's mini secret size
58
+ // Polkadot uses PBKDF2 with specific parameters, but for compatibility
59
+ // we can use the seed derivation and take the first 32 bytes
60
+ const seed = bip39.mnemonicToSeedSync(phrase);
61
+
62
+ // Return first 32 bytes as Uint8Array to match the expected mini secret format
63
+ return new Uint8Array(seed.slice(0, 32));
42
64
  }
43
65
 
44
66
  isBase64(value) {
@@ -46,72 +68,37 @@ export class UtilCryptoService {
46
68
  return false;
47
69
  }
48
70
 
49
- const decoded1 = Buffer.from(value, 'base64').toString('utf8');
50
- const encoded2 = Buffer.from(decoded1, 'binary').toString('base64');
51
- return value === encoded2;
52
- }
53
-
54
- mnemonicValidate(phrase) {
55
- validation.mnemonicValidate(phrase);
56
-
57
- return mnemonicValidate(phrase);
58
- }
59
-
60
- cryptoWaitReady() {
61
- return cryptoWaitReady();
62
- }
63
-
64
- cryptoIsReady(...args) {
65
- return cryptoIsReady();
66
- }
67
-
68
- getAddressPrefix(params) {
69
- const {address, startPrefix, endPrefix} = params;
70
-
71
- for (let prefix = startPrefix; prefix <= endPrefix; prefix++) {
72
- try {
73
- const decoded = decodeAddress(address);
74
- const reencoded = encodeAddress(decoded, prefix);
75
-
76
- if (reencoded === address) {
77
- return prefix;
78
- }
79
- } catch (err) {
80
- // Ignore invalid prefixes
81
- }
71
+ if (value === '') {
72
+ return false;
82
73
  }
83
74
 
84
- return null;
85
- }
86
-
87
- isAddressValid(address) {
88
- validation.isAddressValid(address);
75
+ const regex = '(?:[A-Za-z0-9+\\/]{4})*(?:[A-Za-z0-9+\\/]{2}(==)?|[A-Za-z0-9+\\/]{3}=?)?';
76
+ if (!(new RegExp('^' + regex + '$', 'gi')).test(value)) {
77
+ return false;
78
+ }
89
79
 
90
80
  try {
91
- encodeAddress(
92
- isHex(address) ? hexToU8a(address) : decodeAddress(address),
93
- );
94
-
95
- return true;
96
- } catch (error) {
81
+ const decoded = Buffer.from(value, 'base64');
82
+ const asUtf8 = decoded.toString('utf8');
83
+ const reencoded = Buffer.from(asUtf8, 'utf8').toString('base64');
84
+
85
+ const normalize = (str) => str.replace(/=+$/, '');
86
+
87
+ return normalize(value) === normalize(reencoded);
88
+ } catch (e) {
97
89
  return false;
98
90
  }
99
91
  }
100
92
 
101
- deriveValidate(uri: string) {
102
- validation.deriveValidate(uri);
103
-
104
- const {password, path} = keyExtractSuri(uri);
105
- let result = {};
106
-
107
- assert(path.length, 'invalid derive path');
108
-
109
- // show a warning in case the password contains an unintended / character
110
- if (password && password.includes('/')) {
111
- result = {warning: 'slash password detected'};
93
+ hexToString(hex: string): string {
94
+ try {
95
+ const bytes = hexToU8a(hex);
96
+ return u8aToString(bytes);
97
+ } catch (e) {
98
+ console.log('error: ', e);
112
99
  }
113
100
 
114
- return result;
101
+ return '';
115
102
  }
116
103
  }
117
104