@docknetwork/wallet-sdk-wasm 1.5.9 → 1.5.11

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 (267) 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 +5 -9
  14. package/lib/services/blockchain/service.mjs +5 -9
  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 +59 -28
  24. package/lib/services/credential/utils.mjs +62 -32
  25. package/lib/services/dids/index.js +7 -25
  26. package/lib/services/dids/index.mjs +7 -25
  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-rpc.js +0 -3
  30. package/lib/services/dids/service-rpc.mjs +0 -3
  31. package/lib/services/dids/service.js +13 -55
  32. package/lib/services/dids/service.mjs +13 -54
  33. package/lib/services/edv/index.js +4 -25
  34. package/lib/services/edv/index.mjs +4 -25
  35. package/lib/services/edv/service.js +6 -33
  36. package/lib/services/edv/service.mjs +6 -33
  37. package/lib/services/index.js +13 -25
  38. package/lib/services/index.mjs +13 -25
  39. package/lib/services/relay-service/configs.js +0 -1
  40. package/lib/services/relay-service/configs.mjs +0 -1
  41. package/lib/services/relay-service/index.android.js +0 -1
  42. package/lib/services/relay-service/index.android.mjs +0 -1
  43. package/lib/services/relay-service/index.ios.js +0 -1
  44. package/lib/services/relay-service/index.ios.mjs +0 -1
  45. package/lib/services/relay-service/index.js +0 -1
  46. package/lib/services/relay-service/index.mjs +0 -1
  47. package/lib/services/relay-service/service-rpc.js +0 -1
  48. package/lib/services/relay-service/service-rpc.mjs +0 -1
  49. package/lib/services/relay-service/service.js +0 -1
  50. package/lib/services/relay-service/service.mjs +0 -1
  51. package/lib/services/test-utils.js +0 -44
  52. package/lib/services/test-utils.mjs +1 -44
  53. package/lib/services/util-crypto/configs.js +0 -12
  54. package/lib/services/util-crypto/configs.mjs +0 -12
  55. package/lib/services/util-crypto/index.android.js +0 -3
  56. package/lib/services/util-crypto/index.android.mjs +0 -3
  57. package/lib/services/util-crypto/index.ios.js +0 -3
  58. package/lib/services/util-crypto/index.ios.mjs +0 -3
  59. package/lib/services/util-crypto/index.js +4 -7
  60. package/lib/services/util-crypto/index.mjs +4 -7
  61. package/lib/services/util-crypto/service-rpc.js +2 -30
  62. package/lib/services/util-crypto/service-rpc.mjs +2 -30
  63. package/lib/services/util-crypto/service.js +68 -61
  64. package/lib/services/util-crypto/service.mjs +50 -59
  65. package/lib/services/wallet/configs.js +0 -63
  66. package/lib/services/wallet/configs.mjs +1 -64
  67. package/lib/services/wallet/index.android.js +0 -1
  68. package/lib/services/wallet/index.android.mjs +0 -1
  69. package/lib/services/wallet/index.ios.js +0 -1
  70. package/lib/services/wallet/index.ios.mjs +0 -1
  71. package/lib/services/wallet/index.js +2 -12
  72. package/lib/services/wallet/index.mjs +2 -12
  73. package/lib/services/wallet/service-rpc.js +0 -77
  74. package/lib/services/wallet/service-rpc.mjs +0 -77
  75. package/lib/services/wallet/service.js +1 -215
  76. package/lib/services/wallet/service.mjs +1 -211
  77. package/lib/setup-nodejs.js +13 -23
  78. package/lib/setup-nodejs.mjs +13 -23
  79. package/lib/setup-tests.js +13 -23
  80. package/lib/setup-tests.mjs +13 -23
  81. package/lib/src/core/format-utils.d.ts +0 -5
  82. package/lib/src/core/format-utils.d.ts.map +1 -1
  83. package/lib/src/core/validation.d.ts +0 -3
  84. package/lib/src/core/validation.d.ts.map +1 -1
  85. package/lib/src/rpc-util.d.ts.map +1 -1
  86. package/lib/src/services/blockchain/service.d.ts.map +1 -1
  87. package/lib/src/services/credential/bbs-revocation.d.ts.map +1 -1
  88. package/lib/src/services/credential/bound-check.d.ts +1 -1
  89. package/lib/src/services/credential/bound-check.d.ts.map +1 -1
  90. package/lib/src/services/credential/service.d.ts.map +1 -1
  91. package/lib/src/services/credential/utils.d.ts +2 -1
  92. package/lib/src/services/credential/utils.d.ts.map +1 -1
  93. package/lib/src/services/dids/keypair-utils.d.ts +15 -0
  94. package/lib/src/services/dids/keypair-utils.d.ts.map +1 -0
  95. package/lib/src/services/dids/service-rpc.d.ts +0 -1
  96. package/lib/src/services/dids/service-rpc.d.ts.map +1 -1
  97. package/lib/src/services/dids/service.d.ts +11 -8
  98. package/lib/src/services/dids/service.d.ts.map +1 -1
  99. package/lib/src/services/edv/service.d.ts.map +1 -1
  100. package/lib/src/services/util-crypto/configs.d.ts +0 -3
  101. package/lib/src/services/util-crypto/configs.d.ts.map +1 -1
  102. package/lib/src/services/util-crypto/service.d.ts +3 -8
  103. package/lib/src/services/util-crypto/service.d.ts.map +1 -1
  104. package/lib/src/services/wallet/configs.d.ts +13 -0
  105. package/lib/src/services/wallet/configs.d.ts.map +1 -0
  106. package/lib/src/services/wallet/service.d.ts +1 -44
  107. package/lib/src/services/wallet/service.d.ts.map +1 -1
  108. package/lib/test-utils.js +0 -4
  109. package/lib/test-utils.mjs +1 -4
  110. package/lib/tsconfig.tsbuildinfo +1 -1
  111. package/package.json +5 -25
  112. package/readme.md +0 -61
  113. package/src/core/format-utils.test.js +1 -28
  114. package/src/core/format-utils.ts +0 -33
  115. package/src/core/validation.test.js +1 -33
  116. package/src/core/validation.ts +1 -25
  117. package/src/rpc-server.test.js +2 -9
  118. package/src/rpc-util.js +14 -0
  119. package/src/services/blockchain/service.ts +2 -3
  120. package/src/services/credential/bbs-revocation.ts +2 -1
  121. package/src/services/credential/bound-check.test.ts +6 -6
  122. package/src/services/credential/bound-check.ts +4 -4
  123. package/src/services/credential/index.test.js +0 -2
  124. package/src/services/credential/service.ts +5 -2
  125. package/src/services/credential/utils.js +65 -23
  126. package/src/services/dids/index.test.js +45 -33
  127. package/src/services/dids/keypair-utils.js +111 -0
  128. package/src/services/dids/service-rpc.ts +0 -3
  129. package/src/services/dids/service.ts +7 -34
  130. package/src/services/edv/service.ts +2 -9
  131. package/src/services/index.js +0 -4
  132. package/src/services/test-utils.js +0 -29
  133. package/src/services/util-crypto/configs.ts +0 -12
  134. package/src/services/util-crypto/index.test.js +6 -83
  135. package/src/services/util-crypto/service-rpc.js +2 -27
  136. package/src/services/util-crypto/service.ts +62 -75
  137. package/src/services/wallet/configs.ts +1 -113
  138. package/src/services/wallet/index.test.js +0 -159
  139. package/src/services/wallet/service-rpc.js +1 -88
  140. package/src/services/wallet/service.ts +0 -258
  141. package/src/test-utils.js +0 -13
  142. package/lib/account-357ab05d.js +0 -742
  143. package/lib/account-399e6053.js +0 -752
  144. package/lib/core/polkadot-utils.js +0 -119
  145. package/lib/core/polkadot-utils.mjs +0 -94
  146. package/lib/core/realm-schemas.js +0 -50
  147. package/lib/core/realm-schemas.mjs +0 -44
  148. package/lib/core/subscan.js +0 -75
  149. package/lib/core/subscan.mjs +0 -64
  150. package/lib/fixtures.js +0 -56
  151. package/lib/fixtures.mjs +0 -52
  152. package/lib/modules/account.js +0 -48
  153. package/lib/modules/account.mjs +0 -40
  154. package/lib/modules/accounts.js +0 -49
  155. package/lib/modules/accounts.mjs +0 -40
  156. package/lib/modules/data-migration.js +0 -72
  157. package/lib/modules/data-migration.mjs +0 -68
  158. package/lib/modules/wallet-backup.js +0 -82
  159. package/lib/modules/wallet-backup.mjs +0 -71
  160. package/lib/modules/wallet.js +0 -49
  161. package/lib/modules/wallet.mjs +0 -40
  162. package/lib/services/example/configs.js +0 -21
  163. package/lib/services/example/configs.mjs +0 -13
  164. package/lib/services/example/index.js +0 -18
  165. package/lib/services/example/index.mjs +0 -14
  166. package/lib/services/example/service-rpc.js +0 -25
  167. package/lib/services/example/service-rpc.mjs +0 -21
  168. package/lib/services/example/service.js +0 -25
  169. package/lib/services/example/service.mjs +0 -20
  170. package/lib/services/keyring/configs.js +0 -70
  171. package/lib/services/keyring/configs.mjs +0 -61
  172. package/lib/services/keyring/index.android.js +0 -22
  173. package/lib/services/keyring/index.android.mjs +0 -18
  174. package/lib/services/keyring/index.ios.js +0 -22
  175. package/lib/services/keyring/index.ios.mjs +0 -18
  176. package/lib/services/keyring/index.js +0 -16
  177. package/lib/services/keyring/index.mjs +0 -8
  178. package/lib/services/keyring/service-rpc.js +0 -65
  179. package/lib/services/keyring/service-rpc.mjs +0 -61
  180. package/lib/services/keyring/service.js +0 -84
  181. package/lib/services/keyring/service.mjs +0 -74
  182. package/lib/services/polkadot/configs.js +0 -17
  183. package/lib/services/polkadot/configs.mjs +0 -13
  184. package/lib/services/polkadot/index.android.js +0 -22
  185. package/lib/services/polkadot/index.android.mjs +0 -18
  186. package/lib/services/polkadot/index.ios.js +0 -22
  187. package/lib/services/polkadot/index.ios.mjs +0 -18
  188. package/lib/services/polkadot/index.js +0 -15
  189. package/lib/services/polkadot/index.mjs +0 -7
  190. package/lib/services/polkadot/service-rpc.js +0 -30
  191. package/lib/services/polkadot/service-rpc.mjs +0 -26
  192. package/lib/services/polkadot/service.js +0 -28
  193. package/lib/services/polkadot/service.mjs +0 -23
  194. package/lib/src/core/polkadot-utils.d.ts +0 -11
  195. package/lib/src/core/polkadot-utils.d.ts.map +0 -1
  196. package/lib/src/modules/account.d.ts +0 -60
  197. package/lib/src/modules/account.d.ts.map +0 -1
  198. package/lib/src/modules/accounts.d.ts +0 -48
  199. package/lib/src/modules/accounts.d.ts.map +0 -1
  200. package/lib/src/modules/data-migration.d.ts +0 -7
  201. package/lib/src/modules/data-migration.d.ts.map +0 -1
  202. package/lib/src/modules/wallet-backup.d.ts +0 -12
  203. package/lib/src/modules/wallet-backup.d.ts.map +0 -1
  204. package/lib/src/modules/wallet.d.ts +0 -134
  205. package/lib/src/modules/wallet.d.ts.map +0 -1
  206. package/lib/src/services/blockchain/index.d.ts +0 -2
  207. package/lib/src/services/blockchain/index.d.ts.map +0 -1
  208. package/lib/src/services/example/configs.d.ts +0 -9
  209. package/lib/src/services/example/configs.d.ts.map +0 -1
  210. package/lib/src/services/example/service.d.ts +0 -8
  211. package/lib/src/services/example/service.d.ts.map +0 -1
  212. package/lib/src/services/keyring/configs.d.ts +0 -39
  213. package/lib/src/services/keyring/configs.d.ts.map +0 -1
  214. package/lib/src/services/keyring/index.d.ts +0 -2
  215. package/lib/src/services/keyring/index.d.ts.map +0 -1
  216. package/lib/src/services/polkadot/configs.d.ts +0 -8
  217. package/lib/src/services/polkadot/configs.d.ts.map +0 -1
  218. package/lib/src/services/polkadot/index.d.ts +0 -2
  219. package/lib/src/services/polkadot/index.d.ts.map +0 -1
  220. package/lib/src/services/polkadot/service.d.ts +0 -8
  221. package/lib/src/services/polkadot/service.d.ts.map +0 -1
  222. package/lib/src/services/wallet/index.d.ts +0 -2
  223. package/lib/src/services/wallet/index.d.ts.map +0 -1
  224. package/lib/test/axiosMocks.js +0 -431
  225. package/lib/test/axiosMocks.mjs +0 -420
  226. package/lib/test/setup-test-state.js +0 -81
  227. package/lib/test/setup-test-state.mjs +0 -73
  228. package/src/core/polkadot-utils.js +0 -99
  229. package/src/core/realm-schemas.js +0 -42
  230. package/src/core/subscan.js +0 -62
  231. package/src/core/subscan.test.js +0 -56
  232. package/src/fixtures.js +0 -43
  233. package/src/modules/account.test.js +0 -56
  234. package/src/modules/account.ts +0 -128
  235. package/src/modules/accounts.test.js +0 -63
  236. package/src/modules/accounts.ts +0 -231
  237. package/src/modules/data-migration.test.js +0 -61
  238. package/src/modules/data-migration.ts +0 -86
  239. package/src/modules/wallet-backup.test.js +0 -24
  240. package/src/modules/wallet-backup.ts +0 -68
  241. package/src/modules/wallet.test.js +0 -216
  242. package/src/modules/wallet.ts +0 -424
  243. package/src/services/example/configs.js +0 -14
  244. package/src/services/example/index.js +0 -3
  245. package/src/services/example/index.test.js +0 -28
  246. package/src/services/example/service-rpc.js +0 -11
  247. package/src/services/example/service.ts +0 -18
  248. package/src/services/keyring/configs.ts +0 -110
  249. package/src/services/keyring/index.android.js +0 -3
  250. package/src/services/keyring/index.ios.js +0 -3
  251. package/src/services/keyring/index.js +0 -1
  252. package/src/services/keyring/index.test.js +0 -48
  253. package/src/services/keyring/service-rpc.js +0 -56
  254. package/src/services/keyring/service.ts +0 -111
  255. package/src/services/polkadot/configs.ts +0 -13
  256. package/src/services/polkadot/index.android.js +0 -3
  257. package/src/services/polkadot/index.ios.js +0 -3
  258. package/src/services/polkadot/index.js +0 -1
  259. package/src/services/polkadot/index.test.js +0 -52
  260. package/src/services/polkadot/service-rpc.js +0 -13
  261. package/src/services/polkadot/service.ts +0 -21
  262. package/src/test/axiosMocks.js +0 -20
  263. package/src/test/fixtures/subscan-failure.json +0 -5
  264. package/src/test/fixtures/subscan-success.json +0 -370
  265. package/src/test/fixtures/subscan-too-many-requests.json +0 -9
  266. package/src/test/setup-test-state.js +0 -35
  267. 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
+ }
@@ -21,9 +21,6 @@ export class DIDServiceRPC extends RpcService {
21
21
  deriveKeyDoc(params) {
22
22
  return this.call('deriveKeyDoc', params);
23
23
  }
24
- getDidDockDocument(did) {
25
- return this.call('getDidDockDocument', did);
26
- }
27
24
  createSignedJWT(params) {
28
25
  return this.call('createSignedJWT', params);
29
26
  }
@@ -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,17 +19,17 @@ 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 =
33
- privateKeyDoc.keypair || keyDocToKeypair(privateKeyDoc, blockchainService.dock);
32
+ privateKeyDoc.keypair || await keyDocToKeypair(privateKeyDoc);
34
33
 
35
34
  if (!privateKey.signer && privateKey.sign) {
36
35
  privateKey.signer = () => ({sign: ({data}) => privateKey.sign(data)});
@@ -67,7 +66,6 @@ class DIDService {
67
66
  DIDService.prototype.getDIDResolution,
68
67
  DIDService.prototype.generateKeyDoc,
69
68
  DIDService.prototype.deriveKeyDoc,
70
- DIDService.prototype.getDidDockDocument,
71
69
  DIDService.prototype.createSignedJWT,
72
70
  ];
73
71
  keypairToDIDKeyDocument(params: KeypairToDIDKeyDocumentParams) {
@@ -84,34 +82,16 @@ class DIDService {
84
82
 
85
83
  async generateKeyDoc(params) {
86
84
  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);
85
+ const {derivePath = '', type = 'ed25519'} = params;
86
+ const keyPair = Ed25519Keypair.random()
87
+ return keypairToKeydoc(keyPair, params.controller);
103
88
  }
104
89
 
105
90
  async deriveKeyDoc(params) {
106
91
  validation.deriveKeyDoc(params);
107
92
  const { pair, type = 'ed25519' } = params;
108
-
109
- const keyring = keyringService.createFromPair({
110
- pair,
111
- type,
112
- });
113
-
114
- return polkadotToKeydoc(keyring, params.controller);
93
+ const keyPair = new Ed25519Keypair(pair.secretKey, 'private')
94
+ return keypairToKeydoc(keyPair, params.controller);
115
95
  }
116
96
 
117
97
  async createSignedJWT({payload, privateKeyDoc, headerInput}) {
@@ -133,13 +113,6 @@ class DIDService {
133
113
  const signature = await sign({data: signPayload});
134
114
  return `${headerAndPayloadBase64URL}.${base64url.encode(signature)}`;
135
115
  }
136
-
137
- async getDidDockDocument(did) {
138
- assert(!!did, 'DID is required');
139
- const dock = blockchainService.dock;
140
- const result = await blockchainService.modules.did.getDocument(did);
141
- return result;
142
- }
143
116
  }
144
117
 
145
118
  export const didService = new DIDService();
@@ -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,36 +18,11 @@ 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
- deriveValidate(uri: string): Promise<any> {
42
- validation.deriveValidate(uri);
43
- return this.call('deriveValidate', uri);
44
- }
45
-
46
21
  isBase64(value: string): Promise<boolean> {
47
22
  return this.call('isBase64', value);
48
23
  }
49
24
 
50
- getAddressPrefix(params: any): Promise<number | null> {
51
- return this.call('getAddressPrefix', params);
25
+ hexToString(hex: string): Promise<string> {
26
+ return this.call('hexToString', hex);
52
27
  }
53
28
  }
@@ -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