1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-22 17:33:23 +01:00

Linted & added salting to vault

This commit is contained in:
Dan Finlay 2016-10-20 11:33:18 -07:00
parent e5c95d68f8
commit 383f8ea7dc
7 changed files with 31 additions and 44 deletions

View File

@ -129,7 +129,7 @@
"one-var": [2, { "initialized": "never" }], "one-var": [2, { "initialized": "never" }],
"operator-linebreak": [1, "after", { "overrides": { "?": "before", ":": "before" } }], "operator-linebreak": [1, "after", { "overrides": { "?": "before", ":": "before" } }],
"padded-blocks": [1, "never"], "padded-blocks": [1, "never"],
"quotes": [2, "single", "avoid-escape"], "quotes": [2, "single", {"avoidEscape": true, "allowTemplateLiterals": true}],
"semi": [2, "never"], "semi": [2, "never"],
"semi-spacing": [2, { "before": false, "after": true }], "semi-spacing": [2, { "before": false, "after": true }],
"space-before-blocks": [1, "always"], "space-before-blocks": [1, "always"],

View File

@ -12,37 +12,6 @@ module.exports = class KeyringController extends EventEmitter {
this.keyChains = [] this.keyChains = []
} }
keyFromPassword(password, callback) {
deriveKeyFromPassword(password, callback);
}
// Takes a pw and callback, returns a password-dervied key
getKeyForPassword(password, callback) {
let salt = this.configManager.getSalt()
if (!salt) {
salt = generateSalt(32)
this.configManager.setSalt(salt)
}
var logN = 14
var r = 8
var dkLen = 32
var interruptStep = 200
var cb = function(derKey) {
try {
var ui8arr = (new Uint8Array(derKey))
this.pwDerivedKey = ui8arr
callback(null, ui8arr)
} catch (err) {
callback(err)
}
}
scrypt(password, salt, logN, r, dkLen, interruptStep, cb, null)
}
getState() { getState() {
return { return {
isInitialized: !!this.configManager.getVault(), isInitialized: !!this.configManager.getVault(),
@ -66,11 +35,13 @@ module.exports = class KeyringController extends EventEmitter {
} }
createNewVault(password, entropy, cb) { createNewVault(password, entropy, cb) {
const salt = generateNewSalt()
this.configManager.setSalt(salt)
this.loadKey(password) this.loadKey(password)
.then((key) => { .then((key) => {
return encryptor.encryptWithKey(key, {}) return encryptor.encryptWithKey(key, {})
}) })
.then((encryptedString) => { .then((encryptedString) => {
this.configManager.setVault(encryptedString) this.configManager.setVault(encryptedString)
cb(null, this.getState()) cb(null, this.getState())
}) })
@ -90,7 +61,8 @@ module.exports = class KeyringController extends EventEmitter {
} }
loadKey(password) { loadKey(password) {
return encryptor.keyFromPassword(password) const salt = this.configManager.getSalt()
return encryptor.keyFromPassword(password + salt)
.then((key) => { .then((key) => {
this.key = key this.key = key
return key return key
@ -141,5 +113,8 @@ module.exports = class KeyringController extends EventEmitter {
} }
function generateSalt (byteCount) { function generateSalt (byteCount) {
return bitcore.crypto.Random.getRandomBuffer(byteCount || 32).toString('base64') var view = new Uint8Array(32)
global.crypto.getRandomValues(view)
var b64encoded = btoa(String.fromCharCode.apply(null, view))
return b64encoded
} }

View File

@ -118,7 +118,7 @@ ConfigManager.prototype.setVault = function (encryptedString) {
ConfigManager.prototype.getVault = function () { ConfigManager.prototype.getVault = function () {
var data = this.getData() var data = this.getData()
return ('vault' in data) && data.vault return ('vault' in data) && data.vault
} }
ConfigManager.prototype.getKeychains = function () { ConfigManager.prototype.getKeychains = function () {

View File

@ -18,6 +18,10 @@ module.exports = {
// Buffer <-> Hex string methods // Buffer <-> Hex string methods
serializeBufferForStorage, serializeBufferForStorage,
serializeBufferFromStorage, serializeBufferFromStorage,
// Buffer <-> base64 string methods
encodeBufferToBase64,
decodeBase64ToBuffer,
} }
// Takes a Pojo, returns encrypted text. // Takes a Pojo, returns encrypted text.
@ -117,3 +121,15 @@ function unprefixedHex (num) {
} }
return hex return hex
} }
function encodeBufferToBase64 (buf) {
var b64encoded = btoa(String.fromCharCode.apply(null, buf))
return b64encoded
}
function decodeBase64ToBuffer (base64) {
var u8_2 = new Uint8Array(atob(b64encoded).split("")
.map(function(c) {
return c.charCodeAt(0)
}))
}

View File

@ -340,7 +340,7 @@ function backToUnlockView () {
function showNewKeychain () { function showNewKeychain () {
return { return {
type: actions.SHOW_NEW_KEYCHAIN type: actions.SHOW_NEW_KEYCHAIN,
} }
} }

View File

@ -8,7 +8,7 @@ const ReactCSSTransitionGroup = require('react-addons-css-transition-group')
const DisclaimerScreen = require('./first-time/disclaimer') const DisclaimerScreen = require('./first-time/disclaimer')
const InitializeMenuScreen = require('./first-time/init-menu') const InitializeMenuScreen = require('./first-time/init-menu')
const CreateVaultScreen = require('./first-time/create-vault') const CreateVaultScreen = require('./first-time/create-vault')
const NewKeychainScreen = require('./new-keychain') const NewKeyChainScreen = require('./new-keychain')
// unlock // unlock
const UnlockScreen = require('./unlock') const UnlockScreen = require('./unlock')
// accounts // accounts

View File

@ -15,7 +15,7 @@ function NewKeychain () {
} }
NewKeychain.prototype.render = function () { NewKeychain.prototype.render = function () {
const props = this.props // const props = this.props
return ( return (
h('div', { h('div', {
@ -23,11 +23,7 @@ NewKeychain.prototype.render = function () {
background: 'blue', background: 'blue',
}, },
}, [ }, [
h('h1',`Here's a list!!!!`), h('h1', `Here's a list!!!!`),
h('button',
{
onClick: () => this.props.dispatch(actions.goHome())
})
]) ])
) )
} }