From c3ab89f6a9ba6a3d818d77646d16dd8ca03224ca Mon Sep 17 00:00:00 2001 From: Alex Harley Date: Fri, 14 May 2021 23:12:25 +0200 Subject: [PATCH 1/5] chore: use built in bip39 --- packages/crypto/src/bip39.ts | 31 ++----------------------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/packages/crypto/src/bip39.ts b/packages/crypto/src/bip39.ts index cb131861..433c819f 100644 --- a/packages/crypto/src/bip39.ts +++ b/packages/crypto/src/bip39.ts @@ -1,8 +1,5 @@ -import { fromHex, toHex, toUtf8 } from "@cosmjs/encoding"; +import { fromHex, toHex } from "@cosmjs/encoding"; import * as bip39 from "bip39"; -import { pbkdf2 } from "pbkdf2"; -import * as unorm from "unorm"; - import { EnglishMnemonic } from "./englishmnemonic"; export class Bip39 { @@ -36,30 +33,6 @@ export class Bip39 { } public static async mnemonicToSeed(mnemonic: EnglishMnemonic, password?: string): Promise { - // reimplementation of bip39.mnemonicToSeed using the asynchronous - // interface of https://www.npmjs.com/package/pbkdf2 - const mnemonicBytes = toUtf8(unorm.nfkd(mnemonic.toString())); - const salt = "mnemonic" + (password ? unorm.nfkd(password) : ""); - const saltBytes = toUtf8(salt); - return this.pbkdf2(mnemonicBytes, saltBytes, 2048, 64, "sha512"); - } - - // convert pbkdf2's callback interface to Promise interface - private static async pbkdf2( - secret: Uint8Array, - salt: Uint8Array, - iterations: number, - keylen: number, - digest: string, - ): Promise { - return new Promise((resolve, reject) => { - pbkdf2(secret, salt, iterations, keylen, digest, (err, derivedKey) => { - if (err) { - reject(err); - } else { - resolve(new Uint8Array(derivedKey)); - } - }); - }); + return new Uint8Array(await bip39.mnemonicToSeed(mnemonic.toString(), password)); } } From 25589bc9b2d03adf004d3f81b970ce3eba6990eb Mon Sep 17 00:00:00 2001 From: Alex Harley Date: Fri, 14 May 2021 23:22:37 +0200 Subject: [PATCH 2/5] chore: make directsecp256k1hdwallet constructor not protected --- packages/proto-signing/src/directsecp256k1hdwallet.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/proto-signing/src/directsecp256k1hdwallet.ts b/packages/proto-signing/src/directsecp256k1hdwallet.ts index d2dac3cf..4ebe2ffd 100644 --- a/packages/proto-signing/src/directsecp256k1hdwallet.ts +++ b/packages/proto-signing/src/directsecp256k1hdwallet.ts @@ -243,7 +243,7 @@ export class DirectSecp256k1HdWallet implements OfflineDirectSigner { /** Derivation instructions */ private readonly accounts: readonly Secp256k1Derivation[]; - protected constructor(mnemonic: EnglishMnemonic, options: DirectSecp256k1HdWalletConstructorOptions) { + constructor(mnemonic: EnglishMnemonic, options: DirectSecp256k1HdWalletConstructorOptions) { const prefix = options.prefix ?? defaultOptions.prefix; const hdPaths = options.hdPaths ?? defaultOptions.hdPaths; this.secret = mnemonic; From 64280da33961fedf889198d06e423db6266a5a21 Mon Sep 17 00:00:00 2001 From: Alex Harley Date: Sat, 15 May 2021 00:28:23 +0200 Subject: [PATCH 3/5] chore: fixing imports --- packages/crypto/package.json | 8 ++------ packages/crypto/src/bip39.ts | 1 + yarn.lock | 19 +------------------ 3 files changed, 4 insertions(+), 24 deletions(-) diff --git a/packages/crypto/package.json b/packages/crypto/package.json index cf3e5621..70ef66d3 100644 --- a/packages/crypto/package.json +++ b/packages/crypto/package.json @@ -49,18 +49,14 @@ "elliptic": "^6.5.3", "js-sha3": "^0.8.0", "libsodium-wrappers": "^0.7.6", - "pbkdf2": "^3.1.2", "ripemd160": "^2.0.2", - "sha.js": "^2.4.11", - "unorm": "^1.5.0" + "sha.js": "^2.4.11" }, "devDependencies": { "@types/bn.js": "^4.11.6", "@types/elliptic": "^6.4.12", "@types/libsodium-wrappers": "^0.7.7", - "@types/pbkdf2": "^3.1.0", "@types/ripemd160": "^2.0.0", - "@types/sha.js": "^2.4.0", - "@types/unorm": "^1.3.27" + "@types/sha.js": "^2.4.0" } } diff --git a/packages/crypto/src/bip39.ts b/packages/crypto/src/bip39.ts index 433c819f..634605b0 100644 --- a/packages/crypto/src/bip39.ts +++ b/packages/crypto/src/bip39.ts @@ -1,5 +1,6 @@ import { fromHex, toHex } from "@cosmjs/encoding"; import * as bip39 from "bip39"; + import { EnglishMnemonic } from "./englishmnemonic"; export class Bip39 { diff --git a/yarn.lock b/yarn.lock index 2d121cac..c236b523 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1530,13 +1530,6 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/pbkdf2@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" - integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== - dependencies: - "@types/node" "*" - "@types/prettier@^1.19.0": version "1.19.1" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" @@ -1574,11 +1567,6 @@ dependencies: "@types/node" "*" -"@types/unorm@^1.3.27": - version "1.3.28" - resolved "https://registry.yarnpkg.com/@types/unorm/-/unorm-1.3.28.tgz#580141162f2fd221faae2b2d68da6c839402c375" - integrity sha512-l3uh18vcvkQ964HSK7Tx0YbhxN/Hj+k1w3nLT08n770lngqVKljmF7Ht4e7elFbx6L2WYse97whtpJOo8MHtxQ== - "@types/ws@^6.0.1": version "6.0.4" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-6.0.4.tgz#7797707c8acce8f76d8c34b370d4645b70421ff1" @@ -6308,7 +6296,7 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pbkdf2@^3.0.3, pbkdf2@^3.0.9, pbkdf2@^3.1.2: +pbkdf2@^3.0.3, pbkdf2@^3.0.9: version "3.1.2" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== @@ -7984,11 +7972,6 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unorm@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/unorm/-/unorm-1.6.0.tgz#029b289661fba714f1a9af439eb51d9b16c205af" - integrity sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA== - unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" From be022f6c4f808d6a2c05fb74e2e624480d80031d Mon Sep 17 00:00:00 2001 From: Alex Harley Date: Sat, 15 May 2021 16:38:36 +0200 Subject: [PATCH 4/5] chore: add modifier to constructor --- packages/proto-signing/src/directsecp256k1hdwallet.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/proto-signing/src/directsecp256k1hdwallet.ts b/packages/proto-signing/src/directsecp256k1hdwallet.ts index 4ebe2ffd..54595eda 100644 --- a/packages/proto-signing/src/directsecp256k1hdwallet.ts +++ b/packages/proto-signing/src/directsecp256k1hdwallet.ts @@ -243,7 +243,7 @@ export class DirectSecp256k1HdWallet implements OfflineDirectSigner { /** Derivation instructions */ private readonly accounts: readonly Secp256k1Derivation[]; - constructor(mnemonic: EnglishMnemonic, options: DirectSecp256k1HdWalletConstructorOptions) { + public constructor(mnemonic: EnglishMnemonic, options: DirectSecp256k1HdWalletConstructorOptions) { const prefix = options.prefix ?? defaultOptions.prefix; const hdPaths = options.hdPaths ?? defaultOptions.hdPaths; this.secret = mnemonic; From 892bde5d3f3fa8b607036cc7cd5e6e59737710f5 Mon Sep 17 00:00:00 2001 From: Alex Harley Date: Sun, 16 May 2021 22:23:07 +0200 Subject: [PATCH 5/5] chore: public => protected --- packages/proto-signing/src/directsecp256k1hdwallet.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/proto-signing/src/directsecp256k1hdwallet.ts b/packages/proto-signing/src/directsecp256k1hdwallet.ts index 54595eda..d2dac3cf 100644 --- a/packages/proto-signing/src/directsecp256k1hdwallet.ts +++ b/packages/proto-signing/src/directsecp256k1hdwallet.ts @@ -243,7 +243,7 @@ export class DirectSecp256k1HdWallet implements OfflineDirectSigner { /** Derivation instructions */ private readonly accounts: readonly Secp256k1Derivation[]; - public constructor(mnemonic: EnglishMnemonic, options: DirectSecp256k1HdWalletConstructorOptions) { + protected constructor(mnemonic: EnglishMnemonic, options: DirectSecp256k1HdWalletConstructorOptions) { const prefix = options.prefix ?? defaultOptions.prefix; const hdPaths = options.hdPaths ?? defaultOptions.hdPaths; this.secret = mnemonic;