@pezkuwi/keyring 14.0.2 → 14.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +3 -3
- package/bundle-polkadot-keyring.js +553 -0
- package/bundle.d.ts +7 -0
- package/{src/bundle.ts → bundle.js} +0 -9
- package/cjs/bundle.d.ts +7 -0
- package/cjs/bundle.js +19 -0
- package/cjs/defaults.d.ts +2 -0
- package/cjs/defaults.js +5 -0
- package/{src/index.ts → cjs/index.d.ts} +0 -6
- package/cjs/index.js +7 -0
- package/cjs/keyring.d.ts +145 -0
- package/cjs/keyring.js +261 -0
- package/cjs/package.json +3 -0
- package/cjs/packageDetect.d.ts +1 -0
- package/cjs/packageDetect.js +7 -0
- package/cjs/packageInfo.d.ts +6 -0
- package/cjs/packageInfo.js +4 -0
- package/cjs/pair/decode.d.ts +12 -0
- package/cjs/pair/decode.js +45 -0
- package/cjs/pair/defaults.d.ts +12 -0
- package/cjs/pair/defaults.js +15 -0
- package/cjs/pair/encode.d.ts +5 -0
- package/cjs/pair/encode.js +22 -0
- package/cjs/pair/index.d.ts +40 -0
- package/cjs/pair/index.js +183 -0
- package/cjs/pair/nobody.d.ts +2 -0
- package/cjs/pair/nobody.js +43 -0
- package/cjs/pair/toJson.d.ts +8 -0
- package/cjs/pair/toJson.js +11 -0
- package/cjs/pair/types.d.ts +5 -0
- package/cjs/pair/types.js +2 -0
- package/cjs/pairs.d.ts +8 -0
- package/cjs/pairs.js +28 -0
- package/cjs/testing.d.ts +20 -0
- package/cjs/testing.js +126 -0
- package/cjs/testingPairs.d.ts +25 -0
- package/cjs/testingPairs.js +16 -0
- package/cjs/types.d.ts +111 -0
- package/cjs/types.js +2 -0
- package/defaults.d.ts +2 -0
- package/{src/defaults.ts → defaults.js} +0 -6
- package/index.d.ts +4 -0
- package/index.js +4 -0
- package/keyring.d.ts +145 -0
- package/keyring.js +257 -0
- package/package.json +270 -8
- package/packageDetect.d.ts +1 -0
- package/{src/packageDetect.ts → packageDetect.js} +0 -8
- package/packageInfo.d.ts +6 -0
- package/packageInfo.js +1 -0
- package/pair/decode.d.ts +12 -0
- package/pair/decode.js +42 -0
- package/pair/defaults.d.ts +12 -0
- package/{src/pair/defaults.ts → pair/defaults.js} +0 -8
- package/pair/encode.d.ts +5 -0
- package/pair/encode.js +19 -0
- package/pair/index.d.ts +40 -0
- package/pair/index.js +180 -0
- package/pair/nobody.d.ts +2 -0
- package/pair/nobody.js +40 -0
- package/pair/toJson.d.ts +8 -0
- package/pair/toJson.js +8 -0
- package/pair/types.d.ts +5 -0
- package/pair/types.js +1 -0
- package/pairs.d.ts +8 -0
- package/pairs.js +24 -0
- package/testing.d.ts +20 -0
- package/testing.js +122 -0
- package/testingPairs.d.ts +25 -0
- package/testingPairs.js +13 -0
- package/types.d.ts +111 -0
- package/types.js +1 -0
- package/src/index.spec.ts +0 -609
- package/src/keyring.ts +0 -307
- package/src/mod.ts +0 -4
- package/src/packageInfo.ts +0 -6
- package/src/pair/decode.spec.ts +0 -26
- package/src/pair/decode.ts +0 -56
- package/src/pair/encode.spec.ts +0 -28
- package/src/pair/encode.ts +0 -30
- package/src/pair/index.spec.ts +0 -189
- package/src/pair/index.ts +0 -220
- package/src/pair/nobody.ts +0 -62
- package/src/pair/toJson.spec.ts +0 -42
- package/src/pair/toJson.ts +0 -20
- package/src/pair/types.ts +0 -8
- package/src/pair/vrf.spec.ts +0 -47
- package/src/pairs.ts +0 -41
- package/src/suri.spec.ts +0 -109
- package/src/testing.ts +0 -156
- package/src/testingPairs.spec.ts +0 -79
- package/src/testingPairs.ts +0 -56
- package/src/types.ts +0 -131
- package/tsconfig.build.json +0 -16
- package/tsconfig.spec.json +0 -18
package/src/index.spec.ts
DELETED
|
@@ -1,609 +0,0 @@
|
|
|
1
|
-
// Copyright 2017-2025 @polkadot/keyring authors & contributors
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
|
|
4
|
-
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
|
5
|
-
|
|
6
|
-
import type { KeyringPair$Json } from './types.js';
|
|
7
|
-
|
|
8
|
-
import { hexToU8a, stringToU8a } from '@pezkuwi/util';
|
|
9
|
-
import { base64Decode, cryptoWaitReady, encodeAddress, mnemonicGenerate, randomAsU8a, setSS58Format } from '@pezkuwi/util-crypto';
|
|
10
|
-
import * as languages from '@pezkuwi/util-crypto/mnemonic/wordlists/index';
|
|
11
|
-
|
|
12
|
-
import { decodePair } from './pair/decode.js';
|
|
13
|
-
import Keyring from './index.js';
|
|
14
|
-
|
|
15
|
-
await cryptoWaitReady();
|
|
16
|
-
|
|
17
|
-
describe('keypair', (): void => {
|
|
18
|
-
describe('ed25519', (): void => {
|
|
19
|
-
const publicKeyOne = new Uint8Array([47, 140, 97, 41, 216, 22, 207, 81, 195, 116, 188, 127, 8, 195, 230, 62, 209, 86, 207, 120, 174, 251, 74, 101, 80, 217, 123, 135, 153, 121, 119, 238]);
|
|
20
|
-
const publicKeyTwo = new Uint8Array([215, 90, 152, 1, 130, 177, 10, 183, 213, 75, 254, 211, 201, 100, 7, 58, 14, 225, 114, 243, 218, 166, 35, 37, 175, 2, 26, 104, 247, 7, 81, 26]);
|
|
21
|
-
const seedOne = stringToU8a('12345678901234567890123456789012');
|
|
22
|
-
const seedTwo = hexToU8a('0x9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60');
|
|
23
|
-
let keyring: Keyring;
|
|
24
|
-
|
|
25
|
-
beforeEach((): void => {
|
|
26
|
-
keyring = new Keyring({ ss58Format: 42, type: 'ed25519' });
|
|
27
|
-
|
|
28
|
-
keyring.addFromSeed(seedOne, {});
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it('adds the pair', (): void => {
|
|
32
|
-
expect(
|
|
33
|
-
keyring.addFromSeed(seedTwo, {}).publicKey
|
|
34
|
-
).toEqual(publicKeyTwo);
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
it('creates via a dev seed', (): void => {
|
|
38
|
-
expect(
|
|
39
|
-
keyring.addFromUri('//Alice').address
|
|
40
|
-
).toEqual('5FA9nQDVg267DEd8m1ZypXLBnvN7SFxYwV7ndqSYGiN9TTpu');
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('creates a ed25519 pair via mnemonicToSeed', (): void => {
|
|
44
|
-
expect(
|
|
45
|
-
keyring.addFromUri(
|
|
46
|
-
'seed sock milk update focus rotate barely fade car face mechanic mercy'
|
|
47
|
-
).address
|
|
48
|
-
).toEqual('5DkQP32jP4DVJLWWBRBoZF2tpWjqFrcrTBo6H5NcSk7MxKCC');
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
it('adds from a mnemonic, with correct ss58', (): void => {
|
|
52
|
-
// eslint-disable-next-line deprecation/deprecation
|
|
53
|
-
setSS58Format(20); // this would not be used
|
|
54
|
-
keyring.setSS58Format(2); // this would be used
|
|
55
|
-
|
|
56
|
-
const pair = keyring.addFromMnemonic('moral movie very draw assault whisper awful rebuild speed purity repeat card', {});
|
|
57
|
-
|
|
58
|
-
expect(pair.address).toEqual('HSLu2eci2GCfWkRimjjdTXKoFSDL3rBv5Ey2JWCBj68cVZj');
|
|
59
|
-
expect(encodeAddress(pair.publicKey)).toEqual('35cDYtPsdG1HUa2n2MaARgJyRz1WKMBZK1DL6c5cX7nugQh1');
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
it('allows publicKeys retrieval', (): void => {
|
|
63
|
-
keyring.addFromSeed(seedTwo, {});
|
|
64
|
-
|
|
65
|
-
expect(
|
|
66
|
-
keyring.getPublicKeys()
|
|
67
|
-
).toEqual([publicKeyOne, publicKeyTwo]);
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
it('allows retrieval of a specific item', (): void => {
|
|
71
|
-
expect(
|
|
72
|
-
keyring.getPair(publicKeyOne).publicKey
|
|
73
|
-
).toEqual(publicKeyOne);
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
it('allows adding from JSON', (): void => {
|
|
77
|
-
expect(
|
|
78
|
-
keyring.addFromJson(
|
|
79
|
-
JSON.parse('{"address":"5GoKvZWG5ZPYL1WUovuHW3zJBWBP5eT8CbqjdRY4Q6iMaQua","encoded":"0xb4a14995d25ab609f3686e9fa45f1fb237cd833f33f00d4b12c51858ca070d96972e47d73aae5eeb0fc06f923826cf0943fdb02c2c2ee30ef52a7912663053940d1da4da66b3a3f520ae07422c1c94b2d95690fca9d1f4a997623bb2923a8833280e19e7f72c3c5cfa343974e60e2b3dc53b404fdaf330756daad5e4e3","encoding":{"content":"pkcs8","type":"xsalsa20-poly1305","version":"0"},"meta":{"isTesting":true,"name":"alice"}}') as KeyringPair$Json
|
|
80
|
-
).publicKey
|
|
81
|
-
).toEqual(
|
|
82
|
-
new Uint8Array([209, 114, 167, 76, 218, 76, 134, 89, 18, 195, 43, 160, 168, 10, 87, 174, 105, 171, 174, 65, 14, 92, 203, 89, 222, 232, 78, 47, 68, 50, 219, 79])
|
|
83
|
-
);
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
it('signs and verifies', (): void => {
|
|
87
|
-
const MESSAGE = stringToU8a('this is a message');
|
|
88
|
-
const pair = keyring.getPair(publicKeyOne);
|
|
89
|
-
const signature = pair.sign(MESSAGE);
|
|
90
|
-
|
|
91
|
-
expect(pair.verify(MESSAGE, signature, pair.publicKey)).toBe(true);
|
|
92
|
-
expect(pair.verify(MESSAGE, signature, randomAsU8a())).toBe(false);
|
|
93
|
-
expect(pair.verify(new Uint8Array(), signature, pair.publicKey)).toBe(false);
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
it('signs and verifies (withType)', (): void => {
|
|
97
|
-
const MESSAGE = stringToU8a('this is a message');
|
|
98
|
-
const pair = keyring.getPair(publicKeyOne);
|
|
99
|
-
const signature = pair.sign(MESSAGE, { withType: true });
|
|
100
|
-
|
|
101
|
-
expect(pair.verify(MESSAGE, signature, pair.publicKey)).toBe(true);
|
|
102
|
-
expect(pair.verify(MESSAGE, signature, randomAsU8a())).toBe(false);
|
|
103
|
-
expect(pair.verify(new Uint8Array(), signature, pair.publicKey)).toBe(false);
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
describe('sr25519', (): void => {
|
|
108
|
-
const publicKeyOne = new Uint8Array([116, 28, 8, 160, 111, 65, 197, 150, 96, 143, 103, 116, 37, 155, 217, 4, 51, 4, 173, 250, 93, 62, 234, 98, 118, 11, 217, 190, 151, 99, 77, 99]);
|
|
109
|
-
const publicKeyTwo = hexToU8a('0x44a996beb1eef7bdcab976ab6d2ca26104834164ecf28fb375600576fcc6eb0f');
|
|
110
|
-
const seedOne = stringToU8a('12345678901234567890123456789012');
|
|
111
|
-
const seedTwo = hexToU8a('0x9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60');
|
|
112
|
-
let keyring: Keyring;
|
|
113
|
-
|
|
114
|
-
beforeEach((): void => {
|
|
115
|
-
keyring = new Keyring({ ss58Format: 42, type: 'sr25519' });
|
|
116
|
-
|
|
117
|
-
keyring.addFromSeed(seedOne, {});
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
it('creates with dev phrase when only path specified', (): void => {
|
|
121
|
-
expect(
|
|
122
|
-
keyring.createFromUri('//Alice').address
|
|
123
|
-
).toEqual('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY');
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
it('creates with integer derivations', (): void => {
|
|
127
|
-
// MAX_SAFE_INTEGER
|
|
128
|
-
expect(
|
|
129
|
-
keyring.createFromUri('//9007199254740991').address
|
|
130
|
-
).toEqual('5CDsyNZyqxLpHnTvknr68anUcYoBFjZbFKiEJJf4prB75Uog');
|
|
131
|
-
|
|
132
|
-
// MAX_SAFE_INTEGER + extra digits
|
|
133
|
-
expect(
|
|
134
|
-
keyring.createFromUri('//900719925474099999').address
|
|
135
|
-
).toEqual('5GHj2D7RG2m2DXYwGSDpXwuuxn53G987i7p2EQVDqP4NYu4q');
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
it('creates via dev seed (2-byte encoding)', (): void => {
|
|
139
|
-
keyring.setSS58Format(252);
|
|
140
|
-
|
|
141
|
-
expect(
|
|
142
|
-
keyring.addFromUri('//Alice').address
|
|
143
|
-
).toEqual('xw8P6urbSAronL3zZFB7dg8p7LLSgKCUFDUgjohnf1iP434ic');
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
it('adds the pair', (): void => {
|
|
147
|
-
expect(
|
|
148
|
-
keyring.addFromSeed(seedTwo, {}).publicKey
|
|
149
|
-
).toEqual(publicKeyTwo);
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
it('adds from a mnemonic', (): void => {
|
|
153
|
-
keyring.setSS58Format(2);
|
|
154
|
-
|
|
155
|
-
expect(
|
|
156
|
-
keyring.addFromMnemonic('moral movie very draw assault whisper awful rebuild speed purity repeat card', {}).address
|
|
157
|
-
).toEqual('FSjXNRT2K1R5caeHLPD6WMrqYUpfGZB7ua8W89JFctZ1YqV');
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
it('allows publicKeys retrieval', (): void => {
|
|
161
|
-
keyring.addFromSeed(seedTwo, {});
|
|
162
|
-
|
|
163
|
-
expect(
|
|
164
|
-
keyring.getPublicKeys()
|
|
165
|
-
).toEqual([publicKeyOne, publicKeyTwo]);
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
it('allows retrieval of a specific item', (): void => {
|
|
169
|
-
expect(
|
|
170
|
-
keyring.getPair(publicKeyOne).publicKey
|
|
171
|
-
).toEqual(publicKeyOne);
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
it('allows adding from JSON', (): void => {
|
|
175
|
-
expect(
|
|
176
|
-
keyring.addFromJson(
|
|
177
|
-
JSON.parse('{"address":"5GoKvZWG5ZPYL1WUovuHW3zJBWBP5eT8CbqjdRY4Q6iMaQua","encoded":"0xb4a14995d25ab609f3686e9fa45f1fb237cd833f33f00d4b12c51858ca070d96972e47d73aae5eeb0fc06f923826cf0943fdb02c2c2ee30ef52a7912663053940d1da4da66b3a3f520ae07422c1c94b2d95690fca9d1f4a997623bb2923a8833280e19e7f72c3c5cfa343974e60e2b3dc53b404fdaf330756daad5e4e3","encoding":{"content":"pkcs8","type":"xsalsa20-poly1305","version":"0"},"meta":{"isTesting":true,"name":"alice"}}') as KeyringPair$Json
|
|
178
|
-
).publicKey
|
|
179
|
-
).toEqual(
|
|
180
|
-
new Uint8Array([209, 114, 167, 76, 218, 76, 134, 89, 18, 195, 43, 160, 168, 10, 87, 174, 105, 171, 174, 65, 14, 92, 203, 89, 222, 232, 78, 47, 68, 50, 219, 79])
|
|
181
|
-
);
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
it('signs and verifies', (): void => {
|
|
185
|
-
const MESSAGE = stringToU8a('this is a message');
|
|
186
|
-
const pair = keyring.getPair(publicKeyOne);
|
|
187
|
-
const signature = pair.sign(MESSAGE);
|
|
188
|
-
|
|
189
|
-
expect(pair.verify(MESSAGE, signature, pair.publicKey)).toBe(true);
|
|
190
|
-
expect(pair.verify(MESSAGE, signature, randomAsU8a())).toBe(false);
|
|
191
|
-
expect(pair.verify(new Uint8Array(), signature, pair.publicKey)).toBe(false);
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
it('signs and verifies (withType)', (): void => {
|
|
195
|
-
const MESSAGE = stringToU8a('this is a message');
|
|
196
|
-
const pair = keyring.getPair(publicKeyOne);
|
|
197
|
-
const signature = pair.sign(MESSAGE, { withType: true });
|
|
198
|
-
|
|
199
|
-
expect(pair.verify(MESSAGE, signature, pair.publicKey)).toBe(true);
|
|
200
|
-
expect(pair.verify(MESSAGE, signature, randomAsU8a())).toBe(false);
|
|
201
|
-
expect(pair.verify(new Uint8Array(), signature, pair.publicKey)).toBe(false);
|
|
202
|
-
});
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
describe('ecdsa', (): void => {
|
|
206
|
-
const seedOne = 'potato act energy ahead stone taxi receive fame gossip equip chest round';
|
|
207
|
-
const seedTwo = hexToU8a('0x3c74be003bd9a876be439949ccf2b292bd966c94959a689173b295b326cd6da7');
|
|
208
|
-
const publicKeyOne = hexToU8a('0x02c6b6c664db5ef505477bba1cf2f1789c98796b9bb5fa21abd0ac4589bed980e7');
|
|
209
|
-
const publicKeyTwo = hexToU8a('0x021da683b913fb28c979ba3e5f1881415cef4b1f58a5d05ed3610a2995e7b4943c');
|
|
210
|
-
const addressKeyOne = hexToU8a('0x0cfd0dd2c59a9987b9848919163931b6a42283ffd3d91e92c98b522525a7038f');
|
|
211
|
-
let keyring: Keyring;
|
|
212
|
-
|
|
213
|
-
beforeEach((): void => {
|
|
214
|
-
keyring = new Keyring({ ss58Format: 42, type: 'ecdsa' });
|
|
215
|
-
|
|
216
|
-
keyring.addFromMnemonic(seedOne, {});
|
|
217
|
-
});
|
|
218
|
-
|
|
219
|
-
it('creates with dev phrase when only path specified', (): void => {
|
|
220
|
-
expect(
|
|
221
|
-
keyring.createFromUri('//Alice').address
|
|
222
|
-
).toEqual('5C7C2Z5sWbytvHpuLTvzKunnnRwQxft1jiqrLD5rhucQ5S9X');
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
it('adds the pair', (): void => {
|
|
226
|
-
expect(
|
|
227
|
-
keyring.addFromSeed(seedTwo, {}).publicKey
|
|
228
|
-
).toEqual(publicKeyTwo);
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
it('adds from a mnemonic', (): void => {
|
|
232
|
-
keyring.setSS58Format(2);
|
|
233
|
-
|
|
234
|
-
expect(
|
|
235
|
-
keyring.addFromMnemonic('moral movie very draw assault whisper awful rebuild speed purity repeat card').address
|
|
236
|
-
).toEqual('DrRE1KAcs4pCicX8yJPh7YxkLPQ2vXnCFSVRPQfx38KjEFe');
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
it('allows publicKeys retrieval', (): void => {
|
|
240
|
-
keyring.addFromSeed(seedTwo, {});
|
|
241
|
-
|
|
242
|
-
expect(
|
|
243
|
-
keyring.getPublicKeys()
|
|
244
|
-
).toEqual([publicKeyOne, publicKeyTwo]);
|
|
245
|
-
});
|
|
246
|
-
|
|
247
|
-
it('allows retrieval of a specific item', (): void => {
|
|
248
|
-
expect(
|
|
249
|
-
keyring.getPair(addressKeyOne).publicKey
|
|
250
|
-
).toEqual(publicKeyOne);
|
|
251
|
-
});
|
|
252
|
-
|
|
253
|
-
it('allows adding from JSON', (): void => {
|
|
254
|
-
expect(
|
|
255
|
-
keyring.addFromJson(
|
|
256
|
-
JSON.parse('{"address":"5DzMsaYFhmpRdErWrP6K6PD7UXzYoeETToSBUrZSvxasqWRz","encoded":"0xa192d39b42bc1601bf61df31039a554228593fadf870bc837b658a5114627aca199fff596260c95fe8994c66a47636cf0270aa08f402ba5541038753960d00e6c3af5e239ec58fb1eef3db7d6bc266f4853bdfe4ed17122d9092d879014d53980d2ee57f6f55a88c38836447d8645008e8815379626addc8f81f80cd49a2","encoding":{"content":"pkcs8","type":"xsalsa20-poly1305","version":"2"},"meta":{}}') as KeyringPair$Json
|
|
257
|
-
).address
|
|
258
|
-
).toEqual('5DzMsaYFhmpRdErWrP6K6PD7UXzYoeETToSBUrZSvxasqWRz');
|
|
259
|
-
});
|
|
260
|
-
|
|
261
|
-
it('allows creation from JSON', (): void => {
|
|
262
|
-
keyring.setSS58Format(2);
|
|
263
|
-
const pair = keyring.createFromJson(
|
|
264
|
-
JSON.parse('{"address":"0x02fde629668eb2bcc7d748f40a7e597f7c7b363498ff3db31f03ce4854937883ad","encoded":"qIhAhKqtf2iyEoWEr8nmBdksSI8EHHCpgJHToqd6Pl8AgAAAAQAAAAgAAADDZ//fj/BRRj+0+bl1KAlYgoPJp6nEUwiw0fVqO2BW4mjEgQ+iWwJEgDf1JUtecbzOlfhTXBzqX/dIYzLgUADrF4EFEPpboCWiU1iN7W/3DM1cOTRVvTGcbdIqW//z3axhz961qzeJVUIFgllwGe/euLUPIlKbIkiN/CsRYdQ=","encoding":{"content":["pkcs8","ecdsa"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{"genesisHash":"0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe","name":"ecdsa","tags":[],"whenCreated":1600925898271}}') as KeyringPair$Json
|
|
265
|
-
);
|
|
266
|
-
|
|
267
|
-
expect(pair.address).toEqual('DHL8HKFuTTR55JzzLmkJRCAfPBbuevKaT9cXikxbEV97Ko8');
|
|
268
|
-
expect(pair.publicKey).toEqual(hexToU8a('0x02fde629668eb2bcc7d748f40a7e597f7c7b363498ff3db31f03ce4854937883ad'));
|
|
269
|
-
});
|
|
270
|
-
|
|
271
|
-
it('fails toJson() when password is incorrect', (): void => {
|
|
272
|
-
const pair = keyring.createFromJson(
|
|
273
|
-
JSON.parse('{"address":"0x02fde629668eb2bcc7d748f40a7e597f7c7b363498ff3db31f03ce4854937883ad","encoded":"qIhAhKqtf2iyEoWEr8nmBdksSI8EHHCpgJHToqd6Pl8AgAAAAQAAAAgAAADDZ//fj/BRRj+0+bl1KAlYgoPJp6nEUwiw0fVqO2BW4mjEgQ+iWwJEgDf1JUtecbzOlfhTXBzqX/dIYzLgUADrF4EFEPpboCWiU1iN7W/3DM1cOTRVvTGcbdIqW//z3axhz961qzeJVUIFgllwGe/euLUPIlKbIkiN/CsRYdQ=","encoding":{"content":["pkcs8","ecdsa"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{"genesisHash":"0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe","name":"ecdsa","tags":[],"whenCreated":1600925898271}}') as KeyringPair$Json
|
|
274
|
-
);
|
|
275
|
-
|
|
276
|
-
expect(
|
|
277
|
-
() => pair.toJson('invalid')
|
|
278
|
-
).toThrow(/Unable to decode using the supplied passphrase/);
|
|
279
|
-
});
|
|
280
|
-
|
|
281
|
-
it('pass toJson() when password is correct', (): void => {
|
|
282
|
-
const pair = keyring.createFromJson(
|
|
283
|
-
JSON.parse('{"address":"0x02fde629668eb2bcc7d748f40a7e597f7c7b363498ff3db31f03ce4854937883ad","encoded":"qIhAhKqtf2iyEoWEr8nmBdksSI8EHHCpgJHToqd6Pl8AgAAAAQAAAAgAAADDZ//fj/BRRj+0+bl1KAlYgoPJp6nEUwiw0fVqO2BW4mjEgQ+iWwJEgDf1JUtecbzOlfhTXBzqX/dIYzLgUADrF4EFEPpboCWiU1iN7W/3DM1cOTRVvTGcbdIqW//z3axhz961qzeJVUIFgllwGe/euLUPIlKbIkiN/CsRYdQ=","encoding":{"content":["pkcs8","ecdsa"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{"genesisHash":"0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe","name":"ecdsa","tags":[],"whenCreated":1600925898271}}') as KeyringPair$Json
|
|
284
|
-
);
|
|
285
|
-
|
|
286
|
-
expect(
|
|
287
|
-
() => pair.toJson('testing')
|
|
288
|
-
).not.toThrow();
|
|
289
|
-
});
|
|
290
|
-
|
|
291
|
-
it('encodes a pair toJSON (and decodes)', (): void => {
|
|
292
|
-
const pair = keyring.createFromUri('moral movie very draw assault whisper awful rebuild speed purity repeat card');
|
|
293
|
-
const json = pair.toJson('password');
|
|
294
|
-
|
|
295
|
-
expect(json.address).toEqual('0x03ddca309bd5fedd01f914d6fb76f23aa848a2a520802159215dba5085d7863619');
|
|
296
|
-
expect(json.encoding).toEqual({
|
|
297
|
-
content: ['pkcs8', 'ecdsa'],
|
|
298
|
-
type: ['scrypt', 'xsalsa20-poly1305'],
|
|
299
|
-
version: '3'
|
|
300
|
-
});
|
|
301
|
-
|
|
302
|
-
const newPair = keyring.createFromJson(json);
|
|
303
|
-
|
|
304
|
-
expect(newPair.publicKey).toEqual(pair.publicKey);
|
|
305
|
-
expect(
|
|
306
|
-
() => newPair.unlock('password')
|
|
307
|
-
).not.toThrow();
|
|
308
|
-
});
|
|
309
|
-
|
|
310
|
-
it('signs and verifies', (): void => {
|
|
311
|
-
const MESSAGE = stringToU8a('this is a message');
|
|
312
|
-
const pair = keyring.getPair(addressKeyOne);
|
|
313
|
-
const signature = pair.sign(MESSAGE);
|
|
314
|
-
|
|
315
|
-
expect(pair.verify(MESSAGE, signature, pair.publicKey)).toBe(true);
|
|
316
|
-
expect(pair.verify(MESSAGE, signature, randomAsU8a())).toBe(false);
|
|
317
|
-
expect(pair.verify(new Uint8Array(), signature, pair.publicKey)).toBe(false);
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
it('signs and verifies (withType)', (): void => {
|
|
321
|
-
const MESSAGE = stringToU8a('this is a message');
|
|
322
|
-
const pair = keyring.getPair(addressKeyOne);
|
|
323
|
-
const signature = pair.sign(MESSAGE, { withType: true });
|
|
324
|
-
|
|
325
|
-
expect(pair.verify(MESSAGE, signature, pair.publicKey)).toBe(true);
|
|
326
|
-
expect(pair.verify(MESSAGE, signature, randomAsU8a())).toBe(false);
|
|
327
|
-
expect(pair.verify(new Uint8Array(), signature, pair.publicKey)).toBe(false);
|
|
328
|
-
});
|
|
329
|
-
});
|
|
330
|
-
|
|
331
|
-
describe('ethereum', (): void => {
|
|
332
|
-
// combine mnemonic with derivation path
|
|
333
|
-
const PHRASE = 'seed sock milk update focus rotate barely fade car face mechanic mercy' + '/m/44\'/60\'/0\'/0/0';
|
|
334
|
-
const PRIV_KEY_ONE = '0x070dc3117300011918e26b02176945cc15c3d548cf49fd8418d97f93af699e46';
|
|
335
|
-
const ETH_ADDRESS_ONE = '0x31ea8795EE32D782C8ff41a5C68Dcbf0F5B27f6d';
|
|
336
|
-
const ETH_ADDRESS_TWO = '0x4119b2e6c3Cb618F4f0B93ac77f9BeeC7FF02887';
|
|
337
|
-
|
|
338
|
-
let keyring: Keyring;
|
|
339
|
-
|
|
340
|
-
beforeEach((): void => {
|
|
341
|
-
keyring = new Keyring({ type: 'ethereum' });
|
|
342
|
-
});
|
|
343
|
-
|
|
344
|
-
it('creates with dev phrase from the private key', (): void => {
|
|
345
|
-
const pair = keyring.addFromSeed(hexToU8a(PRIV_KEY_ONE));
|
|
346
|
-
|
|
347
|
-
expect(
|
|
348
|
-
pair.address
|
|
349
|
-
).toEqual(ETH_ADDRESS_ONE);
|
|
350
|
-
});
|
|
351
|
-
|
|
352
|
-
it('creates with dev phrase from the private key in createFromUri', (): void => {
|
|
353
|
-
const pair = keyring.createFromUri(PRIV_KEY_ONE);
|
|
354
|
-
|
|
355
|
-
expect(
|
|
356
|
-
pair.address
|
|
357
|
-
).toEqual(ETH_ADDRESS_ONE);
|
|
358
|
-
});
|
|
359
|
-
|
|
360
|
-
it('creates with dev phrase with derivation path specified', (): void => {
|
|
361
|
-
const pair = keyring.createFromUri(PHRASE);
|
|
362
|
-
|
|
363
|
-
expect(
|
|
364
|
-
pair.address
|
|
365
|
-
).toEqual(ETH_ADDRESS_ONE);
|
|
366
|
-
});
|
|
367
|
-
|
|
368
|
-
it('creates with dev phrase with derivation path specified - addFromUri', (): void => {
|
|
369
|
-
expect(
|
|
370
|
-
keyring.addFromUri(PHRASE).address
|
|
371
|
-
).toEqual(ETH_ADDRESS_ONE);
|
|
372
|
-
});
|
|
373
|
-
|
|
374
|
-
it('creates with dev phrase with derivation path specified - addFromUri with type', (): void => {
|
|
375
|
-
const keyringUntyped = new Keyring();
|
|
376
|
-
|
|
377
|
-
expect(
|
|
378
|
-
keyringUntyped.addFromUri(PHRASE, {}, 'ethereum').address
|
|
379
|
-
).toEqual(ETH_ADDRESS_ONE);
|
|
380
|
-
});
|
|
381
|
-
|
|
382
|
-
it('encodes a pair toJSON (and decodes)', (): void => {
|
|
383
|
-
const pair = keyring.createFromUri(PHRASE);
|
|
384
|
-
const json = pair.toJson('password');
|
|
385
|
-
|
|
386
|
-
expect(json.address).toEqual('0x0381351b1b46d2602b0992bb5d5531f9c1696b0812feb2534b6884adc47e2e1d8b'); // this is the public key (different from address for ethereum)
|
|
387
|
-
expect(json.encoding).toEqual({
|
|
388
|
-
content: ['pkcs8', 'ethereum'],
|
|
389
|
-
type: ['scrypt', 'xsalsa20-poly1305'],
|
|
390
|
-
version: '3'
|
|
391
|
-
});
|
|
392
|
-
|
|
393
|
-
const newPair = keyring.createFromJson(json);
|
|
394
|
-
|
|
395
|
-
expect(newPair.publicKey).toEqual(pair.publicKey);
|
|
396
|
-
expect(
|
|
397
|
-
() => newPair.unlock('password')
|
|
398
|
-
).not.toThrow();
|
|
399
|
-
});
|
|
400
|
-
|
|
401
|
-
it('encodes a pair toJSON and back', (): void => {
|
|
402
|
-
const pairOriginal = keyring.createFromUri(PHRASE);
|
|
403
|
-
const json = pairOriginal.toJson('password');
|
|
404
|
-
const pair = keyring.addFromJson(
|
|
405
|
-
json
|
|
406
|
-
);
|
|
407
|
-
|
|
408
|
-
expect(pair.address).toEqual(ETH_ADDRESS_ONE);
|
|
409
|
-
|
|
410
|
-
pair.decodePkcs8('password');
|
|
411
|
-
|
|
412
|
-
expect(pair.isLocked).toBe(false);
|
|
413
|
-
expect(pair.address).toBe(ETH_ADDRESS_ONE);
|
|
414
|
-
});
|
|
415
|
-
|
|
416
|
-
it('allows adding from JSON', (): void => {
|
|
417
|
-
const pair = keyring.addFromJson(
|
|
418
|
-
JSON.parse('{"address":"KWCv1L3QX9LDPwY4VzvLmarEmXjVJidUzZcinvVnmxAJJCBou","encoded":"U8qFEaghhmNV2PgFhjqzmhyUy37Ok7abfFU2MNsBd0sAgAAAAQAAAAgAAAA3+NniKogzNphiMNueB1X0sGA07B6CaXWfpXPx45iSXoTTprwzU5mOoSqUWO0GKHROI72LN+uJ8Yfv6Ll6JOOV3VPKfoVoFmYm+zDrrMPa0gk5E5kUuSijxADcE6zUrliPVr0Ix/qaghu5SJ7RtWDQLBf4Hp86SJ8Gg6gTSSk=","encoding":{"content":["pkcs8","ethereum"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{}}') as KeyringPair$Json
|
|
419
|
-
);
|
|
420
|
-
|
|
421
|
-
expect(pair.publicKey).toEqual(hexToU8a('0x03b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb13077'));
|
|
422
|
-
expect(pair.address).toEqual(ETH_ADDRESS_TWO);
|
|
423
|
-
|
|
424
|
-
pair.decodePkcs8('password');
|
|
425
|
-
|
|
426
|
-
expect(pair.isLocked).toBe(false);
|
|
427
|
-
expect(pair.publicKey).toEqual(hexToU8a('0x03b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb13077'));
|
|
428
|
-
expect(pair.address).toBe(ETH_ADDRESS_TWO);
|
|
429
|
-
});
|
|
430
|
-
|
|
431
|
-
it('allows for signing/verification', (): void => {
|
|
432
|
-
const MESSAGE = stringToU8a('just some test message');
|
|
433
|
-
const signer = keyring.createFromUri(PHRASE);
|
|
434
|
-
const verifier = keyring.addFromJson(
|
|
435
|
-
JSON.parse('{"address":"KWCv1L3QX9LDPwY4VzvLmarEmXjVJidUzZcinvVnmxAJJCBou","encoded":"U8qFEaghhmNV2PgFhjqzmhyUy37Ok7abfFU2MNsBd0sAgAAAAQAAAAgAAAA3+NniKogzNphiMNueB1X0sGA07B6CaXWfpXPx45iSXoTTprwzU5mOoSqUWO0GKHROI72LN+uJ8Yfv6Ll6JOOV3VPKfoVoFmYm+zDrrMPa0gk5E5kUuSijxADcE6zUrliPVr0Ix/qaghu5SJ7RtWDQLBf4Hp86SJ8Gg6gTSSk=","encoding":{"content":["pkcs8","ethereum"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{}}') as KeyringPair$Json
|
|
436
|
-
);
|
|
437
|
-
|
|
438
|
-
const signature = signer.sign(MESSAGE);
|
|
439
|
-
const dummyPublic = verifier.publicKey.slice();
|
|
440
|
-
|
|
441
|
-
dummyPublic[dummyPublic.length - 1] = 0;
|
|
442
|
-
|
|
443
|
-
expect(verifier.verify(MESSAGE, signature, signer.publicKey)).toBe(true);
|
|
444
|
-
expect(verifier.verify(MESSAGE, signature, dummyPublic)).toBe(false);
|
|
445
|
-
expect(verifier.verify(new Uint8Array(), signature, signer.publicKey)).toBe(false);
|
|
446
|
-
});
|
|
447
|
-
|
|
448
|
-
it('allows for signing/verification (withType)', (): void => {
|
|
449
|
-
const MESSAGE = stringToU8a('just some test message');
|
|
450
|
-
const signer = keyring.createFromUri(PHRASE);
|
|
451
|
-
const verifier = keyring.addFromJson(
|
|
452
|
-
JSON.parse('{"address":"KWCv1L3QX9LDPwY4VzvLmarEmXjVJidUzZcinvVnmxAJJCBou","encoded":"U8qFEaghhmNV2PgFhjqzmhyUy37Ok7abfFU2MNsBd0sAgAAAAQAAAAgAAAA3+NniKogzNphiMNueB1X0sGA07B6CaXWfpXPx45iSXoTTprwzU5mOoSqUWO0GKHROI72LN+uJ8Yfv6Ll6JOOV3VPKfoVoFmYm+zDrrMPa0gk5E5kUuSijxADcE6zUrliPVr0Ix/qaghu5SJ7RtWDQLBf4Hp86SJ8Gg6gTSSk=","encoding":{"content":["pkcs8","ethereum"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{}}') as KeyringPair$Json
|
|
453
|
-
);
|
|
454
|
-
|
|
455
|
-
const signature = signer.sign(MESSAGE, { withType: true });
|
|
456
|
-
const dummyPublic = verifier.publicKey.slice();
|
|
457
|
-
|
|
458
|
-
dummyPublic[dummyPublic.length - 1] = 0;
|
|
459
|
-
|
|
460
|
-
expect(verifier.verify(MESSAGE, signature, signer.publicKey)).toBe(true);
|
|
461
|
-
expect(verifier.verify(MESSAGE, signature, dummyPublic)).toBe(false);
|
|
462
|
-
expect(verifier.verify(new Uint8Array(), signature, signer.publicKey)).toBe(false);
|
|
463
|
-
});
|
|
464
|
-
});
|
|
465
|
-
|
|
466
|
-
describe('raw pair add/create', (): void => {
|
|
467
|
-
const json = JSON.parse('{"address":"5PjeoaQzCoYbSi42aQRKB3Sx18StCaEAzCbGEEbWbZyfKS3H","encoded":"JQUl8ZpoXv2OMkL9TPylLmcIye2cYhaS9INICbFgZTsAgAAAAQAAAAgAAAAr/0hJOOzokIdBG71TstigLABX9D5xGD7L37ySxtjDrVRg26LL90jLQ47quT9o3bq6ppXMVL6USk7Q4p3WU66bojTFuCDyhpYRhNbUqU6s0rD3S4bhv9lG+pG9vQ4eD5PVQUvxdANmJpYuDg45nrTmsMC5AHGdFGkHW/LHnkmbFid1cvPYkdiBoef5CIEdoly512pxMupVxnJWF1NT","encoding":{"content":["pkcs8","sr25519"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{"name":"hello"}}') as KeyringPair$Json;
|
|
468
|
-
const decoded = decodePair('1', base64Decode(json.encoded), json.encoding.type);
|
|
469
|
-
const keyring = new Keyring({ ss58Format: 44 });
|
|
470
|
-
|
|
471
|
-
it('creates a pair from a private/public combo', (): void => {
|
|
472
|
-
const pair = keyring.createFromPair(decoded, json.meta, 'sr25519');
|
|
473
|
-
|
|
474
|
-
expect(pair.address).toEqual('5PjeoaQzCoYbSi42aQRKB3Sx18StCaEAzCbGEEbWbZyfKS3H');
|
|
475
|
-
expect(pair.isLocked).toEqual(false);
|
|
476
|
-
expect(pair.meta.name).toEqual('hello');
|
|
477
|
-
});
|
|
478
|
-
|
|
479
|
-
it('adds a pair from a private/public combo', (): void => {
|
|
480
|
-
keyring.addFromPair(decoded, json.meta, 'sr25519');
|
|
481
|
-
|
|
482
|
-
const pair = keyring.getPairs()[0];
|
|
483
|
-
|
|
484
|
-
expect(pair.address).toEqual('5PjeoaQzCoYbSi42aQRKB3Sx18StCaEAzCbGEEbWbZyfKS3H');
|
|
485
|
-
expect(pair.isLocked).toEqual(false);
|
|
486
|
-
expect(pair.meta.name).toEqual('hello');
|
|
487
|
-
});
|
|
488
|
-
});
|
|
489
|
-
|
|
490
|
-
describe('util', (): void => {
|
|
491
|
-
let keyring: Keyring;
|
|
492
|
-
|
|
493
|
-
beforeEach((): void => {
|
|
494
|
-
keyring = new Keyring({ ss58Format: 42 });
|
|
495
|
-
});
|
|
496
|
-
|
|
497
|
-
it('can re-encode an address to Polkadot live', (): void => {
|
|
498
|
-
expect(
|
|
499
|
-
keyring.encodeAddress('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY', 0)
|
|
500
|
-
).toEqual('15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5');
|
|
501
|
-
});
|
|
502
|
-
|
|
503
|
-
it('can re-encode an address to keyring default', (): void => {
|
|
504
|
-
expect(
|
|
505
|
-
keyring.encodeAddress('15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5')
|
|
506
|
-
).toEqual('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY');
|
|
507
|
-
});
|
|
508
|
-
});
|
|
509
|
-
|
|
510
|
-
describe('version 2 JSON', (): void => {
|
|
511
|
-
const PAIR = '{"address":"5CczAE5AmGrZ93MeVhha3Ywam7j9dKB7cArnH7gtrXcMFJvu","encoded":"0xee8f236e2ac3217ce689692a4afc612220dc77fddaed0482f8f95136a7c3e034cccfbc495410a6e9b2439904974ed1d207abeca536ff6985ceb78edeeb3dc343e561c184c488101af8811d1331430b4ccf0e96ef507132e5132964e8564232e7100d973c5bee7b231dd0c8ad5273f3501515a422c8d7ed9d20a73c0ed17c98ee4588e54844bb73052dcad81f7a1094613d63c162fec7446c88b1fae70e","encoding":{"content":["pkcs8","sr25519"],"type":"xsalsa20-poly1305","version":"2"},"meta":{"genesisHash":"0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e","name":"json v2","tags":[],"whenCreated":1595243159596}}';
|
|
512
|
-
const PASS2 = 'versionTwo';
|
|
513
|
-
const PASS3 = 'versionThree';
|
|
514
|
-
let keyring: Keyring;
|
|
515
|
-
|
|
516
|
-
beforeEach((): void => {
|
|
517
|
-
keyring = new Keyring({ ss58Format: 42 });
|
|
518
|
-
});
|
|
519
|
-
|
|
520
|
-
it('can decode from a version 2 JSON file', (): void => {
|
|
521
|
-
const pair = keyring.addFromJson(JSON.parse(PAIR) as KeyringPair$Json);
|
|
522
|
-
|
|
523
|
-
pair.decodePkcs8(PASS2);
|
|
524
|
-
|
|
525
|
-
const json = pair.toJson(PASS3);
|
|
526
|
-
|
|
527
|
-
expect(pair.isLocked).toBe(false);
|
|
528
|
-
expect(pair.address).toBe('5CczAE5AmGrZ93MeVhha3Ywam7j9dKB7cArnH7gtrXcMFJvu');
|
|
529
|
-
expect(json.encoding).toEqual({
|
|
530
|
-
content: ['pkcs8', 'sr25519'],
|
|
531
|
-
type: ['scrypt', 'xsalsa20-poly1305'],
|
|
532
|
-
version: '3'
|
|
533
|
-
});
|
|
534
|
-
|
|
535
|
-
pair.decodePkcs8(PASS3);
|
|
536
|
-
|
|
537
|
-
expect(pair.address).toEqual('5CczAE5AmGrZ93MeVhha3Ywam7j9dKB7cArnH7gtrXcMFJvu');
|
|
538
|
-
});
|
|
539
|
-
});
|
|
540
|
-
|
|
541
|
-
describe('version 3 JSON (hex)', (): void => {
|
|
542
|
-
const PAIR = '{"address":"FLiSDPCcJ6auZUGXALLj6jpahcP6adVFDBUQznPXUQ7yoqH","encoded":"0xcd238963070cc4d6806053ee1ac500c7add9c28732bb5d434a332f84a91d9be0008000000100000008000000cf630a1113941b350ddd06697e50399183162e5e9a0e893eafc7f5f4893a223dca5055706b9925b56fdb4304192143843da718e11717daf89cf4f4781f94fb443f61432f782d54280af9eec90bd3069c3cc2d957a42b7c18dc2e9497f623735518e0e49b58f8e4db2c09da3a45dbb935659d015fc94b946cba75b606a6ff7f4e823f6b049e2e6892026b49de02d6dbbd64646fe0933f537d9ea53a70be","encoding":{"content":["pkcs8","sr25519"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{"genesisHash":"0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe","name":"version3","tags":[],"whenCreated":1595277797639}}';
|
|
543
|
-
const PASS3 = 'version3';
|
|
544
|
-
let keyring: Keyring;
|
|
545
|
-
|
|
546
|
-
beforeEach((): void => {
|
|
547
|
-
keyring = new Keyring({ ss58Format: 2 });
|
|
548
|
-
});
|
|
549
|
-
|
|
550
|
-
it('can decode from a version 3 JSON file', (): void => {
|
|
551
|
-
const pair = keyring.addFromJson(JSON.parse(PAIR) as KeyringPair$Json);
|
|
552
|
-
|
|
553
|
-
pair.decodePkcs8(PASS3);
|
|
554
|
-
|
|
555
|
-
expect(pair.isLocked).toBe(false);
|
|
556
|
-
expect(pair.address).toBe('FLiSDPCcJ6auZUGXALLj6jpahcP6adVFDBUQznPXUQ7yoqH');
|
|
557
|
-
});
|
|
558
|
-
});
|
|
559
|
-
|
|
560
|
-
describe('version 3 JSON (base64)', (): void => {
|
|
561
|
-
const PAIR = '{"address":"FLiSDPCcJ6auZUGXALLj6jpahcP6adVFDBUQznPXUQ7yoqH","encoded":"ILjSgYaGvq1zaCz/kx+aqfLaHBjLXz0Qsmr6RnkOVU4AgAAAAQAAAAgAAAB5R2hm5kgXyc0NQYFxvMU4zCdjB+ugs/ibEooqCvuudbaeKn3Ee47NkCqU1ecOJV+eeaVn4W4dRvIpj5kGmQOGsewR+MiQ/B0G9NFh7JXV0qcPlk2QMNW1/mbJrTO4miqL448BSkP7ZOhUV6HFUpMt3B9HwjiRLN8RORcFp0ID/Azs4Jl/xOpXNzbgQGIffWgCIKTxN9N1ku6tdlG4","encoding":{"content":["pkcs8","sr25519"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{"genesisHash":"0xb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe","name":"version3","tags":[],"whenCreated":1595277797639,"whenEdited":1595278378596}}';
|
|
562
|
-
const PASS3 = 'version3';
|
|
563
|
-
let keyring: Keyring;
|
|
564
|
-
|
|
565
|
-
beforeEach((): void => {
|
|
566
|
-
keyring = new Keyring({ ss58Format: 2 });
|
|
567
|
-
});
|
|
568
|
-
|
|
569
|
-
it('can decode from a version 3 JSON file', (): void => {
|
|
570
|
-
const pair = keyring.addFromJson(JSON.parse(PAIR) as KeyringPair$Json);
|
|
571
|
-
|
|
572
|
-
pair.decodePkcs8(PASS3);
|
|
573
|
-
|
|
574
|
-
expect(pair.isLocked).toBe(false);
|
|
575
|
-
expect(pair.address).toBe('FLiSDPCcJ6auZUGXALLj6jpahcP6adVFDBUQznPXUQ7yoqH');
|
|
576
|
-
});
|
|
577
|
-
});
|
|
578
|
-
|
|
579
|
-
describe('wordlist', (): void => {
|
|
580
|
-
it('creates keypair from different wordlists mnemonics', (): void => {
|
|
581
|
-
Object.keys(languages).forEach((language) => {
|
|
582
|
-
const mnemonic = mnemonicGenerate(12, languages[language as keyof typeof languages]);
|
|
583
|
-
const keyring = new Keyring({
|
|
584
|
-
type: 'ed25519'
|
|
585
|
-
});
|
|
586
|
-
|
|
587
|
-
expect(keyring.addFromMnemonic(
|
|
588
|
-
mnemonic,
|
|
589
|
-
{},
|
|
590
|
-
'ed25519',
|
|
591
|
-
languages[language as keyof typeof languages]
|
|
592
|
-
)).toBeDefined();
|
|
593
|
-
});
|
|
594
|
-
});
|
|
595
|
-
it('cannot create from invalid wordlist', (): void => {
|
|
596
|
-
const mnemonic = mnemonicGenerate(12, languages.japanese);
|
|
597
|
-
const keyring = new Keyring({
|
|
598
|
-
type: 'ed25519'
|
|
599
|
-
});
|
|
600
|
-
|
|
601
|
-
expect(() => keyring.addFromMnemonic(
|
|
602
|
-
mnemonic,
|
|
603
|
-
{},
|
|
604
|
-
'ed25519',
|
|
605
|
-
languages.english
|
|
606
|
-
)).toThrow('Invalid bip39 mnemonic specified');
|
|
607
|
-
});
|
|
608
|
-
});
|
|
609
|
-
});
|