summaryrefslogtreecommitdiff
path: root/frontend/delta/js/Clipperz/PM/Proxy/Proxy.Offline.LocalStorageDataStore.js
Unidiff
Diffstat (limited to 'frontend/delta/js/Clipperz/PM/Proxy/Proxy.Offline.LocalStorageDataStore.js') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/delta/js/Clipperz/PM/Proxy/Proxy.Offline.LocalStorageDataStore.js4
1 files changed, 3 insertions, 1 deletions
diff --git a/frontend/delta/js/Clipperz/PM/Proxy/Proxy.Offline.LocalStorageDataStore.js b/frontend/delta/js/Clipperz/PM/Proxy/Proxy.Offline.LocalStorageDataStore.js
index a3c238c..3f16f70 100644
--- a/frontend/delta/js/Clipperz/PM/Proxy/Proxy.Offline.LocalStorageDataStore.js
+++ b/frontend/delta/js/Clipperz/PM/Proxy/Proxy.Offline.LocalStorageDataStore.js
@@ -1,129 +1,131 @@
1/* 1/*
2 2
3Copyright 2008-2013 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz, the online password manager. 5This file is part of Clipperz, the online password manager.
6For further information about its features and functionalities please 6For further information about its features and functionalities please
7refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
8 8
9* Clipperz is free software: you can redistribute it and/or modify it 9* Clipperz is free software: you can redistribute it and/or modify it
10 under the terms of the GNU Affero General Public License as published 10 under the terms of the GNU Affero General Public License as published
11 by the Free Software Foundation, either version 3 of the License, or 11 by the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version. 12 (at your option) any later version.
13 13
14* Clipperz is distributed in the hope that it will be useful, but 14* Clipperz is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of 15 WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
18 18
19* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
20 License along with Clipperz. If not, see http://www.gnu.org/licenses/. 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
21 21
22*/ 22*/
23 23
24try { if (typeof(Clipperz.PM.Proxy.Offline.DataStore) == 'undefined') { throw ""; }} catch (e) { 24try { if (typeof(Clipperz.PM.Proxy.Offline.DataStore) == 'undefined') { throw ""; }} catch (e) {
25 throw "Clipperz.PM.Proxy.Offline.LocalStorageDataStore depends on Clipperz.PM.Proxy.Offline.DataStore!"; 25 throw "Clipperz.PM.Proxy.Offline.LocalStorageDataStore depends on Clipperz.PM.Proxy.Offline.DataStore!";
26} 26}
27 27
28//============================================================================= 28//=============================================================================
29 29
30Clipperz.PM.Proxy.Offline.LocalStorageDataStore = function(args) { 30Clipperz.PM.Proxy.Offline.LocalStorageDataStore = function(args) {
31 args = args || {}; 31 args = args || {};
32 32
33 this._data = args.data || (typeof(_clipperz_dump_data_) != 'undefined' ? _clipperz_dump_data_ : null); 33 //this._data = args.data || (typeof(_clipperz_dump_data_) != 'undefined' ? _clipperz_dump_data_ : null);
34 this._data = JSON.parse(localStorage.getItem('clipperz_dump_data'));
35
34 this._isReadOnly = (typeof(args.readOnly) == 'undefined' ? true : args.readOnly); 36 this._isReadOnly = (typeof(args.readOnly) == 'undefined' ? true : args.readOnly);
35 this._shouldPayTolls = args.shouldPayTolls || false; 37 this._shouldPayTolls = args.shouldPayTolls || false;
36 38
37 this._tolls = {}; 39 this._tolls = {};
38 this._currentStaticConnection = null; 40 this._currentStaticConnection = null;
39 41
40 //Clipperz.PM.Proxy.Offline.LocalStorageDataStore.superclass.constructor.apply(this, arguments); 42 //Clipperz.PM.Proxy.Offline.LocalStorageDataStore.superclass.constructor.apply(this, arguments);
41 43
42 return this; 44 return this;
43} 45}
44 46
45Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.LocalStorageDataStore, Clipperz.PM.Proxy.Offline.DataStore, { 47Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.LocalStorageDataStore, Clipperz.PM.Proxy.Offline.DataStore, {
46 48
47 //========================================================================= 49 //=========================================================================
48 50
49 '_knock': function(aConnection, someParameters) { 51 '_knock': function(aConnection, someParameters) {
50 var result; 52 var result;
51 53
52 result = { 54 result = {
53 toll: this.getTollForRequestType(someParameters['requestType']) 55 toll: this.getTollForRequestType(someParameters['requestType'])
54 } 56 }
55 57
56 return result; 58 return result;
57 }, 59 },
58 60
59 //------------------------------------------------------------------------- 61 //-------------------------------------------------------------------------
60 62
61 '_registration': function(aConnection, someParameters) { 63 '_registration': function(aConnection, someParameters) {
62 throw Clipperz.PM.Proxy.Offline.DataStore.exception.ReadOnly; 64 throw Clipperz.PM.Proxy.Offline.DataStore.exception.ReadOnly;
63 }, 65 },
64 66
65 //------------------------------------------------------------------------- 67 //-------------------------------------------------------------------------
66 68
67 '_handshake': function(aConnection, someParameters) { 69 '_handshake': function(aConnection, someParameters) {
68 var result; 70 var result;
69 varnextTollRequestType; 71 varnextTollRequestType;
70 72
71 result = {}; 73 result = {};
72 if (someParameters.message == "connect") { 74 if (someParameters.message == "connect") {
73 var userData; 75 var userData;
74 var randomBytes; 76 var randomBytes;
75 var v; 77 var v;
76 78
77 userData = this.data()['users'][someParameters.parameters.C]; 79 userData = this.data()['users'][someParameters.parameters.C];
78 80
79 if ((typeof(userData) != 'undefined') && (userData['version'] == someParameters.version)) { 81 if ((typeof(userData) != 'undefined') && (userData['version'] == someParameters.version)) {
80 aConnection['userData'] = userData; 82 aConnection['userData'] = userData;
81 aConnection['C'] = someParameters.parameters.C; 83 aConnection['C'] = someParameters.parameters.C;
82 } else { 84 } else {
83 aConnection['userData'] = this.data()['users']['catchAllUser']; 85 aConnection['userData'] = this.data()['users']['catchAllUser'];
84 } 86 }
85 87
86 randomBytes = Clipperz.Crypto.Base.generateRandomSeed(); 88 randomBytes = Clipperz.Crypto.Base.generateRandomSeed();
87 aConnection['b'] = new Clipperz.Crypto.BigInt(randomBytes, 16); 89 aConnection['b'] = new Clipperz.Crypto.BigInt(randomBytes, 16);
88 v = new Clipperz.Crypto.BigInt(aConnection['userData']['v'], 16); 90 v = new Clipperz.Crypto.BigInt(aConnection['userData']['v'], 16);
89 aConnection['B'] = v.add(Clipperz.Crypto.SRP.g().powerModule(aConnection['b'], Clipperz.Crypto.SRP.n())); 91 aConnection['B'] = v.add(Clipperz.Crypto.SRP.g().powerModule(aConnection['b'], Clipperz.Crypto.SRP.n()));
90 92
91 aConnection['A'] = someParameters.parameters.A; 93 aConnection['A'] = someParameters.parameters.A;
92 94
93 result['s'] = aConnection['userData']['s']; 95 result['s'] = aConnection['userData']['s'];
94 result['B'] = aConnection['B'].asString(16); 96 result['B'] = aConnection['B'].asString(16);
95 97
96 nextTollRequestType = 'CONNECT'; 98 nextTollRequestType = 'CONNECT';
97 } else if (someParameters.message == "credentialCheck") { 99 } else if (someParameters.message == "credentialCheck") {
98 var v, u, S, A, K, M1; 100 var v, u, S, A, K, M1;
99 101
100 v = new Clipperz.Crypto.BigInt(aConnection['userData']['v'], 16); 102 v = new Clipperz.Crypto.BigInt(aConnection['userData']['v'], 16);
101 u = new Clipperz.Crypto.BigInt(Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(aConnection['B'].asString(10))).toHexString(), 16); 103 u = new Clipperz.Crypto.BigInt(Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(aConnection['B'].asString(10))).toHexString(), 16);
102 A = new Clipperz.Crypto.BigInt(aConnection['A'], 16); 104 A = new Clipperz.Crypto.BigInt(aConnection['A'], 16);
103 S = (A.multiply(v.powerModule(u, Clipperz.Crypto.SRP.n()))).powerModule(aConnection['b'], Clipperz.Crypto.SRP.n()); 105 S = (A.multiply(v.powerModule(u, Clipperz.Crypto.SRP.n()))).powerModule(aConnection['b'], Clipperz.Crypto.SRP.n());
104 106
105 K = Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(S.asString(10))).toHexString().slice(2); 107 K = Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(S.asString(10))).toHexString().slice(2);
106 108
107 M1 = Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(A.asString(10) + aConnection['B'].asString(10) + K)).toHexString().slice(2); 109 M1 = Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(A.asString(10) + aConnection['B'].asString(10) + K)).toHexString().slice(2);
108 if (someParameters.parameters.M1 == M1) { 110 if (someParameters.parameters.M1 == M1) {
109 var M2; 111 var M2;
110 112
111 M2 = Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(A.asString(10) + someParameters.parameters.M1 + K)).toHexString().slice(2); 113 M2 = Clipperz.PM.Crypto.encryptingFunctions.versions[someParameters.version].hash(new Clipperz.ByteArray(A.asString(10) + someParameters.parameters.M1 + K)).toHexString().slice(2);
112 result['M2'] = M2; 114 result['M2'] = M2;
113 } else { 115 } else {
114 throw new Error("Client checksum verification failed! Expected <" + M1 + ">, received <" + someParameters.parameters.M1 + ">.", "Error"); 116 throw new Error("Client checksum verification failed! Expected <" + M1 + ">, received <" + someParameters.parameters.M1 + ">.", "Error");
115 } 117 }
116 118
117 nextTollRequestType = 'MESSAGE'; 119 nextTollRequestType = 'MESSAGE';
118 } else if (someParameters.message == "oneTimePassword") { 120 } else if (someParameters.message == "oneTimePassword") {
119 var otpData; 121 var otpData;
120 122
121 otpData = this.data()['onetimePasswords'][someParameters.parameters.oneTimePasswordKey]; 123 otpData = this.data()['onetimePasswords'][someParameters.parameters.oneTimePasswordKey];
122 124
123 try { 125 try {
124 if (typeof(otpData) != 'undefined') { 126 if (typeof(otpData) != 'undefined') {
125 if (otpData['status'] == 'ACTIVE') { 127 if (otpData['status'] == 'ACTIVE') {
126 if (otpData['key_checksum'] == someParameters.parameters.oneTimePasswordKeyChecksum) { 128 if (otpData['key_checksum'] == someParameters.parameters.oneTimePasswordKeyChecksum) {
127 result = { 129 result = {
128 'data': otpData['data'], 130 'data': otpData['data'],
129 'version':otpData['version'] 131 'version':otpData['version']