From 241fb3aeb749d6edfa91ea7fdbf8c90e00246394 Mon Sep 17 00:00:00 2001 From: Manuel Araoz Date: Tue, 15 Apr 2014 18:13:25 -0300 Subject: [PATCH] add encrypted Storage component --- copay.js | 1 + index.html | 2 +- js/models/storage/Encrypted.js | 71 ++++++++++++---------------------- js/models/storage/Plain.js | 7 +++- test/index.html | 5 ++- test/test.storage-encrypted.js | 49 +++++++++++++++++++++++ 6 files changed, 84 insertions(+), 51 deletions(-) create mode 100644 test/test.storage-encrypted.js diff --git a/copay.js b/copay.js index 9f4d3110d..c8504ac36 100644 --- a/copay.js +++ b/copay.js @@ -8,6 +8,7 @@ module.exports.PrivateKey = require('./js/models/core/PrivateKey'); var WebRTC = module.exports.WebRTC = require('./js/models/network/WebRTC'); var Insight = module.exports.Insight = require('./js/models/blockchain/Insight'); var StoragePlain = module.exports.StoragePlain = require('./js/models/storage/Plain'); +var StorageEncrypted = module.exports.StorageEncrypted = require('./js/models/storage/Encrypted'); module.exports.Wallet = require('soop').load('./js/models/core/Wallet',{ Network: WebRTC, diff --git a/index.html b/index.html index 4ff602054..fb9330988 100644 --- a/index.html +++ b/index.html @@ -271,7 +271,7 @@ - + diff --git a/js/models/storage/Encrypted.js b/js/models/storage/Encrypted.js index f1a682159..d28b1bcd0 100644 --- a/js/models/storage/Encrypted.js +++ b/js/models/storage/Encrypted.js @@ -1,70 +1,49 @@ 'use strict'; var imports = require('soop').imports(); +//var buffertools = imports.buffertools || require('buffertools'); +var parent = imports.parent || require('./Plain'); function Storage() { } +Storage.parent = parent; -Storage.prototype._getPwd = function() { - var pwd = prompt('Please enter your password'); - return pwd; + +var passphrase = null; +Storage.prototype._getPassphrase = function() { + return passphrase; +} + +Storage.prototype._setPassphrase = function(password) { + passphrase = password; } Storage.prototype._encrypt = function(data) { - return CryptoJS.AES.encrypt("Message", "Secret Passphrase"); + return CryptoJS.AES.encrypt(data, this._getPassphrase()); }; Storage.prototype._decrypt = function(encrypted) { - return CryptoJS.AES.decrypt(encrypted, "Secret Passphrase"); + return CryptoJS.AES.decrypt(encrypted, this._getPassphrase()); }; Storage.prototype._read = function(k) { var ret; try { - ret = JSON.parse(localStorage.getItem(k)); - } catch (e) {}; + ret = localStorage.getItem(k); + ret = this._decrypt(ret); + ret = ret.toString(CryptoJS.enc.Utf8); + ret = JSON.parse(ret); + } catch (e) { + console.log('Error while decrypting: '+e); + throw e; + }; return ret; }; - -// get value by key -Storage.prototype.getGlobal = function(k) { - return this._read(k); +Storage.prototype._write = function(k,v) { + v = JSON.stringify(v); + v = this._encrypt(v); + localStorage.setItem(k, v); }; -// set value for key -Storage.prototype.setGlobal = function(k,v) { - localStorage.setItem(k, JSON.stringify(v)); -}; - -// remove value for key -Storage.prototype.removeGlobal = function(k) { - localStorage.removeItem(k); -}; - - - -Storage.prototype._key = function(walletId, k) { - return walletId + '::' + k; -}; -// get value by key -Storage.prototype.get = function(walletId, k) { - return this._read(localStorage.getItem(this._key(walletId,k))); -}; - -// set value for key -Storage.prototype.set = function(walletId, k,v) { - this.setGlobal(this._key(walletId,k), v); -}; - -// remove value for key -Storage.prototype.remove = function(walletId, k) { - localStorage.removeItem(this._key(walletId,k)); -}; - -// remove all values -Storage.prototype.clearAll = function() { - localStorage.clear(); -}; - module.exports = require('soop')(Storage); diff --git a/js/models/storage/Plain.js b/js/models/storage/Plain.js index 3101c82ec..1bda410f2 100644 --- a/js/models/storage/Plain.js +++ b/js/models/storage/Plain.js @@ -13,6 +13,9 @@ Storage.prototype._read = function(k) { return ret; }; +Storage.prototype._write = function(k,v) { + localStorage.setItem(k, JSON.stringify(v)); +}; // get value by key Storage.prototype.getGlobal = function(k) { @@ -21,7 +24,7 @@ Storage.prototype.getGlobal = function(k) { // set value for key Storage.prototype.setGlobal = function(k,v) { - localStorage.setItem(k, JSON.stringify(v)); + this._write(k,v); }; // remove value for key @@ -36,7 +39,7 @@ Storage.prototype._key = function(walletId, k) { }; // get value by key Storage.prototype.get = function(walletId, k) { - return this._read(this._key(walletId,k)); + return this.getGlobal(this._key(walletId,k)); }; // set value for key diff --git a/test/index.html b/test/index.html index 3c69fd6df..0b4d4c0e1 100644 --- a/test/index.html +++ b/test/index.html @@ -10,14 +10,15 @@
+ +