Skip to content

Commit

Permalink
Migrated to scrypt-js v3.
Browse files Browse the repository at this point in the history
  • Loading branch information
ricmoo committed Nov 13, 2019
1 parent 51e4ef2 commit 75895fa
Show file tree
Hide file tree
Showing 9 changed files with 151 additions and 226 deletions.
2 changes: 1 addition & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"@ethersproject/basex": ">=5.0.0-beta.127",
"ethers": ">=5.0.0-beta.156",
"mime-types": "2.1.11",
"scrypt-js": "2.0.4",
"scrypt-js": "3.0.0",
"solc": "0.5.10",
"solidity-parser-antlr": "^0.3.2"
},
Expand Down
21 changes: 6 additions & 15 deletions packages/cli/src.ts/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import fs from "fs";
import { basename } from "path";

import { ethers } from "ethers";
import scrypt from "scrypt-js";
import { scrypt } from "scrypt-js";

import { getChoice, getPassword, getProgressBar } from "./prompt";

Expand Down Expand Up @@ -421,20 +421,11 @@ async function loadAccount(arg: string, plugin: Plugin, preventFile?: boolean):
let saltBytes = ethers.utils.arrayify(ethers.utils.HDNode.fromMnemonic(mnemonic).privateKey);

let progressBar = getProgressBar("Decrypting");
return (<Promise<ethers.Wallet>>(new Promise((resolve, reject) => {
scrypt(passwordBytes, saltBytes, (1 << 20), 8, 1, 32, (error, progress, key) => {
if (error) {
reject(error);
} else {
progressBar(progress);
if (key) {
let derivedPassword = ethers.utils.hexlify(key).substring(2);
let node = ethers.utils.HDNode.fromMnemonic(mnemonic, derivedPassword).derivePath(ethers.utils.defaultPath);
resolve(new ethers.Wallet(node.privateKey, plugin.provider));
}
}
});
})));
return scrypt(passwordBytes, saltBytes, (1 << 20), 8, 1, 32, progressBar).then((key) => {
const derivedPassword = ethers.utils.hexlify(key).substring(2);
const node = ethers.utils.HDNode.fromMnemonic(mnemonic, derivedPassword).derivePath(ethers.utils.defaultPath);
return new ethers.Wallet(node.privateKey, plugin.provider);
});
});

} else {
Expand Down
8 changes: 3 additions & 5 deletions packages/cli/thirdparty.d.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
declare module "scrypt-js" {
export class ScryptError extends Error {
progress: number;
}
export type ScryptCallback = (error: ScryptError, progress: number, key: Uint8Array) => void;
export default function(password: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, callback: ScryptCallback): void;
export type ProgressCallback = (progress: number) => boolean | void;
export function scrypt(password: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, callback?: ProgressCallback): Promise<Uint8Array>;
export function scryptSync(password: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number): Uint8Array;
}
3 changes: 2 additions & 1 deletion packages/experimental/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@
},
"dependencies": {
"@ethersproject/web": ">=5.0.0-beta.129",
"@ensdomains/address-encoder": "^0.1.2",
"ethers": ">=5.0.0-beta.156",
"scrypt-js": "2.0.4"
"scrypt-js": "3.0.0"
},
"keywords": [
"Ethereum",
Expand Down
25 changes: 7 additions & 18 deletions packages/experimental/src.ts/brain-wallet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import { ethers } from "ethers";

import scrypt from "scrypt-js";
import { scrypt } from "scrypt-js";

import { version } from "./_version";

Expand Down Expand Up @@ -34,24 +34,13 @@ export class BrainWallet extends ethers.Wallet {
passwordBytes = ethers.utils.arrayify(password);
}

return new Promise((resolve, reject) => {
scrypt(passwordBytes, usernameBytes, (1 << 18), 8, 1, 32, (error: Error, progress: number, key: Uint8Array) => {
if (error) {
reject(error);
return scrypt(passwordBytes, usernameBytes, (1 << 18), 8, 1, 32, progressCallback).then((key: Uint8Array) => {
if (legacy) {
return new BrainWallet(key);

} else if (key) {
if (legacy) {
resolve(new BrainWallet(key));

} else {
let mnemonic = ethers.utils.entropyToMnemonic(ethers.utils.arrayify(key).slice(0, 16));
resolve(new BrainWallet(ethers.Wallet.fromMnemonic(mnemonic)));
}

} else if (progressCallback) {
return progressCallback(progress);
}
});
}
const mnemonic = ethers.utils.entropyToMnemonic(ethers.utils.arrayify(key).slice(0, 16));
return new BrainWallet(ethers.Wallet.fromMnemonic(mnemonic));
});
}

Expand Down
8 changes: 3 additions & 5 deletions packages/experimental/thirdparty.d.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
declare module "scrypt-js" {
export class ScryptError extends Error {
progress: number;
}
export type ScryptCallback = (error: ScryptError, progress: number, key: Uint8Array) => void;
export default function(password: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, callback: ScryptCallback): void;
export type ProgressCallback = (progress: number) => boolean | void;
export function scrypt(password: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, callback?: ProgressCallback): Promise<Uint8Array>;
export function scryptSync(password: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number): Uint8Array;
}
2 changes: 1 addition & 1 deletion packages/json-wallets/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"@ethersproject/strings": ">=5.0.0-beta.130",
"@ethersproject/transactions": ">=5.0.0-beta.128",
"aes-js": "3.0.0",
"scrypt-js": "2.0.4",
"scrypt-js": "3.0.0",
"uuid": "2.0.1"
},
"keywords": [
Expand Down
Loading

0 comments on commit 75895fa

Please sign in to comment.