@keplr-wallet/crypto 0.10.1-rc.1 → 0.10.2
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/build/mnemonic.d.ts +2 -0
- package/build/mnemonic.js +17 -1
- package/build/mnemonic.js.map +1 -1
- package/build/mnemonic.spec.d.ts +1 -0
- package/build/mnemonic.spec.js +27 -0
- package/build/mnemonic.spec.js.map +1 -0
- package/package.json +3 -2
- package/src/mnemonic.spec.ts +48 -0
- package/src/mnemonic.ts +27 -1
package/build/mnemonic.d.ts
CHANGED
|
@@ -7,4 +7,6 @@ export declare class Mnemonic {
|
|
|
7
7
|
static validateMnemonic(mnemonic: string): void;
|
|
8
8
|
static generateSeed(rng: RNG, strength?: number): Promise<string>;
|
|
9
9
|
static generateWalletFromMnemonic(mnemonic: string, path?: string, password?: string): Uint8Array;
|
|
10
|
+
static generateMasterSeedFromMnemonic(mnemonic: string, password?: string): Uint8Array;
|
|
11
|
+
static generatePrivateKeyFromMasterSeed(seed: Uint8Array, path?: string): Uint8Array;
|
|
10
12
|
}
|
package/build/mnemonic.js
CHANGED
|
@@ -14,6 +14,8 @@ exports.Mnemonic = void 0;
|
|
|
14
14
|
const bip39 = require("bip39");
|
|
15
15
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
16
16
|
const bip32 = require("bip32");
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
18
|
+
const bs58check = require("bs58check");
|
|
17
19
|
const buffer_1 = require("buffer/");
|
|
18
20
|
class Mnemonic {
|
|
19
21
|
static generateWallet(rng, path = `m/44'/118'/0'/0/0`, password = "", strength = 256) {
|
|
@@ -40,9 +42,23 @@ class Mnemonic {
|
|
|
40
42
|
});
|
|
41
43
|
}
|
|
42
44
|
static generateWalletFromMnemonic(mnemonic, path = `m/44'/118'/0'/0/0`, password = "") {
|
|
45
|
+
const seed = bip39.mnemonicToSeedSync(mnemonic, password);
|
|
46
|
+
const masterSeed = bip32.fromSeed(seed);
|
|
47
|
+
const hd = masterSeed.derivePath(path);
|
|
48
|
+
const privateKey = hd.privateKey;
|
|
49
|
+
if (!privateKey) {
|
|
50
|
+
throw new Error("null hd key");
|
|
51
|
+
}
|
|
52
|
+
return privateKey;
|
|
53
|
+
}
|
|
54
|
+
static generateMasterSeedFromMnemonic(mnemonic, password = "") {
|
|
43
55
|
const seed = bip39.mnemonicToSeedSync(mnemonic, password);
|
|
44
56
|
const masterKey = bip32.fromSeed(seed);
|
|
45
|
-
|
|
57
|
+
return buffer_1.Buffer.from(bs58check.decode(masterKey.toBase58()));
|
|
58
|
+
}
|
|
59
|
+
static generatePrivateKeyFromMasterSeed(seed, path = `m/44'/118'/0'/0/0`) {
|
|
60
|
+
const masterSeed = bip32.fromBase58(bs58check.encode(seed));
|
|
61
|
+
const hd = masterSeed.derivePath(path);
|
|
46
62
|
const privateKey = hd.privateKey;
|
|
47
63
|
if (!privateKey) {
|
|
48
64
|
throw new Error("null hd key");
|
package/build/mnemonic.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mnemonic.js","sourceRoot":"","sources":["../src/mnemonic.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8DAA8D;AAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC/B,8DAA8D;AAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"mnemonic.js","sourceRoot":"","sources":["../src/mnemonic.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8DAA8D;AAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC/B,8DAA8D;AAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC/B,8DAA8D;AAC9D,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAEvC,oCAAiC;AAmBjC,MAAa,QAAQ;IACnB,MAAM,CAAO,cAAc,CACzB,GAAQ,EACR,OAAe,mBAAmB,EAClC,WAAmB,EAAE,EACrB,WAAmB,GAAG;;YAEtB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG,QAAQ,CAAC,0BAA0B,CACjD,QAAQ,EACR,IAAI,EACJ,QAAQ,CACT,CAAC;YAEF,OAAO;gBACL,OAAO;gBACP,QAAQ;aACT,CAAC;QACJ,CAAC;KAAA;IAED,MAAM,CAAC,gBAAgB,CAAC,QAAgB;QACtC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,CAAO,YAAY,CAAC,GAAQ,EAAE,WAAmB,GAAG;;YACxD,IAAI,QAAQ,GAAG,EAAE,KAAK,CAAC,EAAE;gBACvB,MAAM,IAAI,SAAS,CAAC,iBAAiB,CAAC,CAAC;aACxC;YACD,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YACzC,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO,KAAK,CAAC,iBAAiB,CAAC,eAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,CAAC;KAAA;IAED,MAAM,CAAC,0BAA0B,CAC/B,QAAgB,EAChB,OAAe,mBAAmB,EAClC,WAAmB,EAAE;QAErB,MAAM,IAAI,GAAG,KAAK,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEvC,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;QACjC,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;SAChC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,8BAA8B,CACnC,QAAgB,EAChB,WAAmB,EAAE;QAErB,MAAM,IAAI,GAAG,KAAK,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEvC,OAAO,eAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,CAAC,gCAAgC,CACrC,IAAgB,EAChB,OAAe,mBAAmB;QAElC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,MAAM,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEvC,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;QACjC,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;SAChC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;CACF;AAxED,4BAwEC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const mnemonic_1 = require("./mnemonic");
|
|
4
|
+
const key_1 = require("./key");
|
|
5
|
+
describe("Test gen key from mnemonic", () => {
|
|
6
|
+
it("mnemonic should generate proper priv key", () => {
|
|
7
|
+
const mnemonic = "celery husband drama unaware blue empower jelly twist program say prepare page";
|
|
8
|
+
let privKey = new key_1.PrivKeySecp256k1(mnemonic_1.Mnemonic.generateWalletFromMnemonic(mnemonic));
|
|
9
|
+
let pubKey = privKey.getPubKey();
|
|
10
|
+
expect(Buffer.from(pubKey.toBytes()).toString("hex")).toBe("02394bc53633366a2ab9b5d697a94c8c0121cc5e3f0d554a63167edb318ceae8bc");
|
|
11
|
+
const masterSeed = mnemonic_1.Mnemonic.generateMasterSeedFromMnemonic(mnemonic);
|
|
12
|
+
privKey = new key_1.PrivKeySecp256k1(mnemonic_1.Mnemonic.generatePrivateKeyFromMasterSeed(masterSeed));
|
|
13
|
+
pubKey = privKey.getPubKey();
|
|
14
|
+
expect(Buffer.from(pubKey.toBytes()).toString("hex")).toBe("02394bc53633366a2ab9b5d697a94c8c0121cc5e3f0d554a63167edb318ceae8bc");
|
|
15
|
+
});
|
|
16
|
+
it("mnemonic should generate proper priv key 2", () => {
|
|
17
|
+
const mnemonic = "celery husband drama unaware blue empower jelly twist program say prepare page";
|
|
18
|
+
let privKey = new key_1.PrivKeySecp256k1(mnemonic_1.Mnemonic.generateWalletFromMnemonic(mnemonic, "m/44'/118'/1'/0/0"));
|
|
19
|
+
let pubKey = privKey.getPubKey();
|
|
20
|
+
expect(Buffer.from(pubKey.toBytes()).toString("hex")).toBe("03270e75d7e43f57643cd661bc1a0a3b939b786bbcdec1b82b718fd628e947eec1");
|
|
21
|
+
const masterSeed = mnemonic_1.Mnemonic.generateMasterSeedFromMnemonic(mnemonic);
|
|
22
|
+
privKey = new key_1.PrivKeySecp256k1(mnemonic_1.Mnemonic.generatePrivateKeyFromMasterSeed(masterSeed, "m/44'/118'/1'/0/0"));
|
|
23
|
+
pubKey = privKey.getPubKey();
|
|
24
|
+
expect(Buffer.from(pubKey.toBytes()).toString("hex")).toBe("03270e75d7e43f57643cd661bc1a0a3b939b786bbcdec1b82b718fd628e947eec1");
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=mnemonic.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mnemonic.spec.js","sourceRoot":"","sources":["../src/mnemonic.spec.ts"],"names":[],"mappings":";;AAAA,yCAAsC;AACtC,+BAAyC;AAEzC,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,QAAQ,GACZ,gFAAgF,CAAC;QAEnF,IAAI,OAAO,GAAG,IAAI,sBAAgB,CAChC,mBAAQ,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAC9C,CAAC;QACF,IAAI,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CACxD,oEAAoE,CACrE,CAAC;QAEF,MAAM,UAAU,GAAG,mBAAQ,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;QACrE,OAAO,GAAG,IAAI,sBAAgB,CAC5B,mBAAQ,CAAC,gCAAgC,CAAC,UAAU,CAAC,CACtD,CAAC;QACF,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CACxD,oEAAoE,CACrE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,QAAQ,GACZ,gFAAgF,CAAC;QAEnF,IAAI,OAAO,GAAG,IAAI,sBAAgB,CAChC,mBAAQ,CAAC,0BAA0B,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CACnE,CAAC;QACF,IAAI,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CACxD,oEAAoE,CACrE,CAAC;QAEF,MAAM,UAAU,GAAG,mBAAQ,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;QACrE,OAAO,GAAG,IAAI,sBAAgB,CAC5B,mBAAQ,CAAC,gCAAgC,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAC3E,CAAC;QACF,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CACxD,oEAAoE,CACrE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keplr-wallet/crypto",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.2",
|
|
4
4
|
"main": "build/index.js",
|
|
5
5
|
"author": "chainapsis",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -24,10 +24,11 @@
|
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"bip32": "^2.0.6",
|
|
26
26
|
"bip39": "^3.0.3",
|
|
27
|
+
"bs58check": "^2.1.2",
|
|
27
28
|
"buffer": "^6.0.3",
|
|
28
29
|
"crypto-js": "^4.0.0",
|
|
29
30
|
"elliptic": "^6.5.3",
|
|
30
31
|
"sha.js": "^2.4.11"
|
|
31
32
|
},
|
|
32
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "c6ea69512ee7487fe3dcd9ce89f928a96dbf44a2"
|
|
33
34
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Mnemonic } from "./mnemonic";
|
|
2
|
+
import { PrivKeySecp256k1 } from "./key";
|
|
3
|
+
|
|
4
|
+
describe("Test gen key from mnemonic", () => {
|
|
5
|
+
it("mnemonic should generate proper priv key", () => {
|
|
6
|
+
const mnemonic =
|
|
7
|
+
"celery husband drama unaware blue empower jelly twist program say prepare page";
|
|
8
|
+
|
|
9
|
+
let privKey = new PrivKeySecp256k1(
|
|
10
|
+
Mnemonic.generateWalletFromMnemonic(mnemonic)
|
|
11
|
+
);
|
|
12
|
+
let pubKey = privKey.getPubKey();
|
|
13
|
+
expect(Buffer.from(pubKey.toBytes()).toString("hex")).toBe(
|
|
14
|
+
"02394bc53633366a2ab9b5d697a94c8c0121cc5e3f0d554a63167edb318ceae8bc"
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
const masterSeed = Mnemonic.generateMasterSeedFromMnemonic(mnemonic);
|
|
18
|
+
privKey = new PrivKeySecp256k1(
|
|
19
|
+
Mnemonic.generatePrivateKeyFromMasterSeed(masterSeed)
|
|
20
|
+
);
|
|
21
|
+
pubKey = privKey.getPubKey();
|
|
22
|
+
expect(Buffer.from(pubKey.toBytes()).toString("hex")).toBe(
|
|
23
|
+
"02394bc53633366a2ab9b5d697a94c8c0121cc5e3f0d554a63167edb318ceae8bc"
|
|
24
|
+
);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it("mnemonic should generate proper priv key 2", () => {
|
|
28
|
+
const mnemonic =
|
|
29
|
+
"celery husband drama unaware blue empower jelly twist program say prepare page";
|
|
30
|
+
|
|
31
|
+
let privKey = new PrivKeySecp256k1(
|
|
32
|
+
Mnemonic.generateWalletFromMnemonic(mnemonic, "m/44'/118'/1'/0/0")
|
|
33
|
+
);
|
|
34
|
+
let pubKey = privKey.getPubKey();
|
|
35
|
+
expect(Buffer.from(pubKey.toBytes()).toString("hex")).toBe(
|
|
36
|
+
"03270e75d7e43f57643cd661bc1a0a3b939b786bbcdec1b82b718fd628e947eec1"
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
const masterSeed = Mnemonic.generateMasterSeedFromMnemonic(mnemonic);
|
|
40
|
+
privKey = new PrivKeySecp256k1(
|
|
41
|
+
Mnemonic.generatePrivateKeyFromMasterSeed(masterSeed, "m/44'/118'/1'/0/0")
|
|
42
|
+
);
|
|
43
|
+
pubKey = privKey.getPubKey();
|
|
44
|
+
expect(Buffer.from(pubKey.toBytes()).toString("hex")).toBe(
|
|
45
|
+
"03270e75d7e43f57643cd661bc1a0a3b939b786bbcdec1b82b718fd628e947eec1"
|
|
46
|
+
);
|
|
47
|
+
});
|
|
48
|
+
});
|
package/src/mnemonic.ts
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
const bip39 = require("bip39");
|
|
3
3
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
4
4
|
const bip32 = require("bip32");
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
6
|
+
const bs58check = require("bs58check");
|
|
5
7
|
|
|
6
8
|
import { Buffer } from "buffer/";
|
|
7
9
|
|
|
@@ -59,10 +61,34 @@ export class Mnemonic {
|
|
|
59
61
|
mnemonic: string,
|
|
60
62
|
path: string = `m/44'/118'/0'/0/0`,
|
|
61
63
|
password: string = ""
|
|
64
|
+
): Uint8Array {
|
|
65
|
+
const seed = bip39.mnemonicToSeedSync(mnemonic, password);
|
|
66
|
+
const masterSeed = bip32.fromSeed(seed);
|
|
67
|
+
const hd = masterSeed.derivePath(path);
|
|
68
|
+
|
|
69
|
+
const privateKey = hd.privateKey;
|
|
70
|
+
if (!privateKey) {
|
|
71
|
+
throw new Error("null hd key");
|
|
72
|
+
}
|
|
73
|
+
return privateKey;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
static generateMasterSeedFromMnemonic(
|
|
77
|
+
mnemonic: string,
|
|
78
|
+
password: string = ""
|
|
62
79
|
): Uint8Array {
|
|
63
80
|
const seed = bip39.mnemonicToSeedSync(mnemonic, password);
|
|
64
81
|
const masterKey = bip32.fromSeed(seed);
|
|
65
|
-
|
|
82
|
+
|
|
83
|
+
return Buffer.from(bs58check.decode(masterKey.toBase58()));
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
static generatePrivateKeyFromMasterSeed(
|
|
87
|
+
seed: Uint8Array,
|
|
88
|
+
path: string = `m/44'/118'/0'/0/0`
|
|
89
|
+
): Uint8Array {
|
|
90
|
+
const masterSeed = bip32.fromBase58(bs58check.encode(seed));
|
|
91
|
+
const hd = masterSeed.derivePath(path);
|
|
66
92
|
|
|
67
93
|
const privateKey = hd.privateKey;
|
|
68
94
|
if (!privateKey) {
|