diff options
author | Frankie <frankie.diamond@gmail.com> | 2016-09-13 01:22:06 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-09-13 01:22:06 +0800 |
commit | fcc9ca812e557fd5ecc547f5eb597069788d6c00 (patch) | |
tree | 8cf24728e862b048c49e0e94bb1d614b42ddf3bc /app | |
parent | 3e836abc4797445fa97f8d325c2b4801d2106930 (diff) | |
parent | 56b9b1766d5d71ac427e27503e5fc8b51fd85b99 (diff) | |
download | tangerine-wallet-browser-fcc9ca812e557fd5ecc547f5eb597069788d6c00.tar tangerine-wallet-browser-fcc9ca812e557fd5ecc547f5eb597069788d6c00.tar.gz tangerine-wallet-browser-fcc9ca812e557fd5ecc547f5eb597069788d6c00.tar.bz2 tangerine-wallet-browser-fcc9ca812e557fd5ecc547f5eb597069788d6c00.tar.lz tangerine-wallet-browser-fcc9ca812e557fd5ecc547f5eb597069788d6c00.tar.xz tangerine-wallet-browser-fcc9ca812e557fd5ecc547f5eb597069788d6c00.tar.zst tangerine-wallet-browser-fcc9ca812e557fd5ecc547f5eb597069788d6c00.zip |
Merge pull request #638 from MetaMask/i555-SaltVault
Add new eth-lightwallet salting to vault.
Diffstat (limited to 'app')
-rw-r--r-- | app/scripts/lib/idStore.js | 125 |
1 files changed, 64 insertions, 61 deletions
diff --git a/app/scripts/lib/idStore.js b/app/scripts/lib/idStore.js index 26aa02ef7..8b7e3ad3b 100644 --- a/app/scripts/lib/idStore.js +++ b/app/scripts/lib/idStore.js @@ -3,7 +3,7 @@ const inherits = require('util').inherits const async = require('async') const ethUtil = require('ethereumjs-util') const EthQuery = require('eth-query') -const LightwalletKeyStore = require('eth-lightwallet').keystore +const KeyStore = require('eth-lightwallet').keystore const clone = require('clone') const extend = require('xtend') const createId = require('web3-provider-engine/util/random-id') @@ -50,15 +50,16 @@ IdentityStore.prototype.createNewVault = function (password, entropy, cb) { if (serializedKeystore) { this.configManager.setData({}) } + this._createIdmgmt(password, null, entropy, (err) => { if (err) return cb(err) - this._loadIdentities() - this._didUpdate() this._autoFaucet() this.configManager.setShowSeedWords(true) var seedWords = this._idmgmt.getSeed() + + cb(null, seedWords) }) } @@ -75,7 +76,6 @@ IdentityStore.prototype.recoverFromSeed = function (password, seed, cb) { if (err) return cb(err) this._loadIdentities() - this._didUpdate() cb(null, this.getState()) }) } @@ -125,7 +125,7 @@ IdentityStore.prototype.getSelectedAddress = function () { return configManager.getSelectedAccount() } -IdentityStore.prototype.setSelectedAddress = function (address, cb) { +IdentityStore.prototype.setSelectedAddressSync = function (address) { const configManager = this.configManager if (!address) { var addresses = this._getAddresses() @@ -133,7 +133,12 @@ IdentityStore.prototype.setSelectedAddress = function (address, cb) { } configManager.setSelectedAccount(address) - if (cb) return cb(null, address) + return address +} + +IdentityStore.prototype.setSelectedAddress = function (address, cb) { + const resultAddress = this.setSelectedAddressSync(address) + if (cb) return cb(null, resultAddress) } IdentityStore.prototype.revealAccount = function (cb) { @@ -143,6 +148,7 @@ IdentityStore.prototype.revealAccount = function (cb) { keyStore.setDefaultHdDerivationPath(this.hdPathString) keyStore.generateNewAddress(derivedKey, 1) + configManager.setWallet(keyStore.serialize()) this._loadIdentities() @@ -393,7 +399,6 @@ IdentityStore.prototype._loadIdentities = function () { var addresses = this._getAddresses() addresses.forEach((address, i) => { // // add to ethStore - this._ethStore.addAccount(address) // add to identities const defaultLabel = 'Wallet ' + (i + 1) const nickname = configManager.nicknameForWallet(address) @@ -412,7 +417,6 @@ IdentityStore.prototype.saveAccountLabel = function (account, label, cb) { configManager.setNicknameForWallet(account, label) this._loadIdentities() cb(null, label) - this._didUpdate() } // mayBeFauceting @@ -436,77 +440,76 @@ IdentityStore.prototype._mayBeFauceting = function (i) { // IdentityStore.prototype.tryPassword = function (password, cb) { - this._createIdmgmt(password, null, null, cb) -} - -IdentityStore.prototype._createIdmgmt = function (password, seed, entropy, cb) { - const configManager = this.configManager + var serializedKeystore = this.configManager.getWallet() + var keyStore = KeyStore.deserialize(serializedKeystore) - var keyStore = null - LightwalletKeyStore.deriveKeyFromPassword(password, (err, derivedKey) => { + keyStore.keyFromPassword(password, (err, pwDerivedKey) => { if (err) return cb(err) - var serializedKeystore = configManager.getWallet() - - if (seed) { - try { - keyStore = this._restoreFromSeed(password, seed, derivedKey) - } catch (e) { - return cb(e) - } - - // returning user, recovering from storage - } else if (serializedKeystore) { - keyStore = LightwalletKeyStore.deserialize(serializedKeystore) - var isCorrect = keyStore.isDerivedKeyCorrect(derivedKey) - if (!isCorrect) return cb(new Error('Lightwallet - password incorrect')) - - // first time here - } else { - keyStore = this._createFirstWallet(entropy, derivedKey) - } - this._keyStore = keyStore - this._idmgmt = new IdManagement({ - keyStore: keyStore, - derivedKey: derivedKey, - hdPathSTring: this.hdPathString, - configManager: this.configManager, - }) + const isCorrect = keyStore.isDerivedKeyCorrect(pwDerivedKey) + if (!isCorrect) return cb(new Error('Lightwallet - password incorrect')) cb() }) } -IdentityStore.prototype._restoreFromSeed = function (password, seed, derivedKey) { - const configManager = this.configManager - var keyStore = new LightwalletKeyStore(seed, derivedKey, this.hdPathString) - keyStore.addHdDerivationPath(this.hdPathString, derivedKey, {curve: 'secp256k1', purpose: 'sign'}) - keyStore.setDefaultHdDerivationPath(this.hdPathString) +IdentityStore.prototype._createIdmgmt = function (password, seedPhrase, entropy, cb) { + const opts = { + password, + hdPathString: this.hdPathString, + } - keyStore.generateNewAddress(derivedKey, 1) - configManager.setWallet(keyStore.serialize()) - if (global.METAMASK_DEBUG) { - console.log('restored from seed. saved to keystore') + if (seedPhrase) { + opts.seedPhrase = seedPhrase } - return keyStore + + KeyStore.createVault(opts, (err, keyStore) => { + if (err) return cb(err) + + this._keyStore = keyStore + + keyStore.keyFromPassword(password, (err, derivedKey) => { + if (err) return cb(err) + + this.purgeCache() + + keyStore.addHdDerivationPath(this.hdPathString, derivedKey, {curve: 'secp256k1', purpose: 'sign'}) + + this._createFirstWallet(derivedKey) + + this._idmgmt = new IdManagement({ + keyStore: keyStore, + derivedKey: derivedKey, + configManager: this.configManager, + }) + + this.setSelectedAddressSync() + + cb() + }) + }) } -IdentityStore.prototype._createFirstWallet = function (entropy, derivedKey) { - const configManager = this.configManager - var secretSeed = LightwalletKeyStore.generateRandomSeed(entropy) - var keyStore = new LightwalletKeyStore(secretSeed, derivedKey, this.hdPathString) - keyStore.addHdDerivationPath(this.hdPathString, derivedKey, {curve: 'secp256k1', purpose: 'sign'}) - keyStore.setDefaultHdDerivationPath(this.hdPathString) +IdentityStore.prototype.purgeCache = function () { + this._getAddresses().forEach((address) => { + this._ethStore.del(address) + }) +} +IdentityStore.prototype._createFirstWallet = function (derivedKey) { + const keyStore = this._keyStore + keyStore.setDefaultHdDerivationPath(this.hdPathString) keyStore.generateNewAddress(derivedKey, 1) - configManager.setWallet(keyStore.serialize()) - console.log('saved to keystore') - return keyStore + this.configManager.setWallet(keyStore.serialize()) + var addresses = keyStore.getAddresses() + this._ethStore.addAccount(ethUtil.addHexPrefix(addresses[0])) } // get addresses and normalize address hexString IdentityStore.prototype._getAddresses = function () { - return this._keyStore.getAddresses(this.hdPathString).map((address) => { return '0x' + address }) + return this._keyStore.getAddresses(this.hdPathString).map((address) => { + return ethUtil.addHexPrefix(address) + }) } IdentityStore.prototype._autoFaucet = function () { |