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)); } }