summaryrefslogtreecommitdiff
path: root/frontend/beta/js/Clipperz/Crypto/ECC.js
Unidiff
Diffstat (limited to 'frontend/beta/js/Clipperz/Crypto/ECC.js') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/beta/js/Clipperz/Crypto/ECC.js22
1 files changed, 10 insertions, 12 deletions
diff --git a/frontend/beta/js/Clipperz/Crypto/ECC.js b/frontend/beta/js/Clipperz/Crypto/ECC.js
index bdfd9be..74eb02f 100644
--- a/frontend/beta/js/Clipperz/Crypto/ECC.js
+++ b/frontend/beta/js/Clipperz/Crypto/ECC.js
@@ -1,214 +1,212 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* 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
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26/* 24/*
27try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) { 25try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) {
28 throw "Clipperz.Crypto.ECC depends on Clipperz.ByteArray!"; 26 throw "Clipperz.Crypto.ECC depends on Clipperz.ByteArray!";
29} 27}
30 28
31if (typeof(Clipperz.Crypto.ECC) == 'undefined') { Clipperz.Crypto.ECC = {}; } 29if (typeof(Clipperz.Crypto.ECC) == 'undefined') { Clipperz.Crypto.ECC = {}; }
32 30
33 31
34//############################################################################# 32//#############################################################################
35 33
36Clipperz.Crypto.ECC.BinaryField = {}; 34Clipperz.Crypto.ECC.BinaryField = {};
37 35
38//############################################################################# 36//#############################################################################
39 37
40Clipperz.Crypto.ECC.BinaryField.AbstractValue = function(aValue, aBase) { 38Clipperz.Crypto.ECC.BinaryField.AbstractValue = function(aValue, aBase) {
41 return this; 39 return this;
42} 40}
43 41
44Clipperz.Crypto.ECC.BinaryField.AbstractValue.prototype = MochiKit.Base.update(null, { 42Clipperz.Crypto.ECC.BinaryField.AbstractValue.prototype = MochiKit.Base.update(null, {
45 43
46 'asString': function(aBase) { 44 'asString': function(aBase) {
47 throw Clipperz.Base.exception.AbstractMethod; 45 throw Clipperz.Base.exception.AbstractMethod;
48 }, 46 },
49 47
50 'isZero': function() { 48 'isZero': function() {
51 throw Clipperz.Base.exception.AbstractMethod; 49 throw Clipperz.Base.exception.AbstractMethod;
52 }, 50 },
53 51
54 'shiftLeft': function(aNumberOfBitsToShift) { 52 'shiftLeft': function(aNumberOfBitsToShift) {
55 throw Clipperz.Base.exception.AbstractMethod; 53 throw Clipperz.Base.exception.AbstractMethod;
56 }, 54 },
57 55
58 'bitSize': function() { 56 'bitSize': function() {
59 throw Clipperz.Base.exception.AbstractMethod; 57 throw Clipperz.Base.exception.AbstractMethod;
60 }, 58 },
61 59
62 'isBitSet': function(aBitPosition) { 60 'isBitSet': function(aBitPosition) {
63 throw Clipperz.Base.exception.AbstractMethod; 61 throw Clipperz.Base.exception.AbstractMethod;
64 }, 62 },
65 63
66 'xor': function(aValue) { 64 'xor': function(aValue) {
67 throw Clipperz.Base.exception.AbstractMethod; 65 throw Clipperz.Base.exception.AbstractMethod;
68 }, 66 },
69 67
70 'compare': function(aValue) { 68 'compare': function(aValue) {
71 throw Clipperz.Base.exception.AbstractMethod; 69 throw Clipperz.Base.exception.AbstractMethod;
72 }, 70 },
73 71
74 //----------------------------------------------------------------------------- 72 //-----------------------------------------------------------------------------
75 __syntaxFix__: "syntax fix" 73 __syntaxFix__: "syntax fix"
76}); 74});
77 75
78//***************************************************************************** 76//*****************************************************************************
79/ * 77/ *
80Clipperz.Crypto.ECC.BinaryField.BigIntValue = function(aValue, aBase) { 78Clipperz.Crypto.ECC.BinaryField.BigIntValue = function(aValue, aBase) {
81 this._value = new Clipperz.Crypto.BigInt(aValue, aBase); 79 this._value = new Clipperz.Crypto.BigInt(aValue, aBase);
82 return this; 80 return this;
83} 81}
84 82
85Clipperz.Crypto.ECC.BinaryField.BigIntValue.prototype = MochiKit.Base.update(new Clipperz.Crypto.ECC.BinaryField.AbstractValue(), { 83Clipperz.Crypto.ECC.BinaryField.BigIntValue.prototype = MochiKit.Base.update(new Clipperz.Crypto.ECC.BinaryField.AbstractValue(), {
86 84
87 'value': function() { 85 'value': function() {
88 return this._value; 86 return this._value;
89 }, 87 },
90 88
91 //----------------------------------------------------------------------------- 89 //-----------------------------------------------------------------------------
92 90
93 'isZero': function() { 91 'isZero': function() {
94 return (this.value().compare(Clipperz.Crypto.ECC.BinaryField.BigIntValue.O) == 0); 92 return (this.value().compare(Clipperz.Crypto.ECC.BinaryField.BigIntValue.O) == 0);
95 }, 93 },
96 94
97 //----------------------------------------------------------------------------- 95 //-----------------------------------------------------------------------------
98 96
99 'asString': function(aBase) { 97 'asString': function(aBase) {
100 return this.value().asString(aBase); 98 return this.value().asString(aBase);
101 }, 99 },
102 100
103 //----------------------------------------------------------------------------- 101 //-----------------------------------------------------------------------------
104 102
105 'shiftLeft': function(aNumberOfBitsToShift) { 103 'shiftLeft': function(aNumberOfBitsToShift) {
106 return new Clipperz.Crypto.ECC.BinaryField.BigIntValue(this.value().shiftLeft(aNumberOfBitsToShift)); 104 return new Clipperz.Crypto.ECC.BinaryField.BigIntValue(this.value().shiftLeft(aNumberOfBitsToShift));
107 }, 105 },
108 106
109 //----------------------------------------------------------------------------- 107 //-----------------------------------------------------------------------------
110 108
111 'bitSize': function() { 109 'bitSize': function() {
112 return this.value().bitSize(); 110 return this.value().bitSize();
113 }, 111 },
114 112
115 //----------------------------------------------------------------------------- 113 //-----------------------------------------------------------------------------
116 114
117 'isBitSet': function(aBitPosition) { 115 'isBitSet': function(aBitPosition) {
118 return this.value().isBitSet(aBitPosition); 116 return this.value().isBitSet(aBitPosition);
119 }, 117 },
120 118
121 //----------------------------------------------------------------------------- 119 //-----------------------------------------------------------------------------
122 120
123 'xor': function(aValue) { 121 'xor': function(aValue) {
124 return new Clipperz.Crypto.ECC.BinaryField.BigIntValue(this.value().xor(aValue.value())); 122 return new Clipperz.Crypto.ECC.BinaryField.BigIntValue(this.value().xor(aValue.value()));
125 }, 123 },
126 124
127 //----------------------------------------------------------------------------- 125 //-----------------------------------------------------------------------------
128 126
129 'compare': function(aValue) { 127 'compare': function(aValue) {
130 return this.value().compare(aValue.value()); 128 return this.value().compare(aValue.value());
131 }, 129 },
132 130
133 //----------------------------------------------------------------------------- 131 //-----------------------------------------------------------------------------
134 __syntaxFix__: "syntax fix" 132 __syntaxFix__: "syntax fix"
135}); 133});
136 134
137Clipperz.Crypto.ECC.BinaryField.BigIntValue.O = new Clipperz.Crypto.BigInt(0); 135Clipperz.Crypto.ECC.BinaryField.BigIntValue.O = new Clipperz.Crypto.BigInt(0);
138Clipperz.Crypto.ECC.BinaryField.BigIntValue.I = new Clipperz.Crypto.BigInt(1); 136Clipperz.Crypto.ECC.BinaryField.BigIntValue.I = new Clipperz.Crypto.BigInt(1);
139* / 137* /
140//***************************************************************************** 138//*****************************************************************************
141 139
142Clipperz.Crypto.ECC.BinaryField.WordArrayValue = function(aValue, aBase) { 140Clipperz.Crypto.ECC.BinaryField.WordArrayValue = function(aValue, aBase) {
143 if (aValue.constructor == String) { 141 if (aValue.constructor == String) {
144 varvalue; 142 varvalue;
145 varstringLength; 143 varstringLength;
146 var numberOfWords; 144 var numberOfWords;
147 vari,c; 145 vari,c;
148 146
149 if (aBase != 16) { 147 if (aBase != 16) {
150 throw Clipperz.Crypto.ECC.BinaryField.WordArrayValue.exception.UnsupportedBase; 148 throw Clipperz.Crypto.ECC.BinaryField.WordArrayValue.exception.UnsupportedBase;
151 } 149 }
152 150
153 value = aValue.replace(/ /g, ''); 151 value = aValue.replace(/ /g, '');
154 stringLength = value.length; 152 stringLength = value.length;
155 numberOfWords = Math.ceil(stringLength / 8); 153 numberOfWords = Math.ceil(stringLength / 8);
156 this._value = new Array(numberOfWords); 154 this._value = new Array(numberOfWords);
157 155
158 c = numberOfWords; 156 c = numberOfWords;
159 for (i=0; i<c; i++) { 157 for (i=0; i<c; i++) {
160 varword; 158 varword;
161 159
162 if (i < (c-1)) { 160 if (i < (c-1)) {
163 word = parseInt(value.substr(stringLength-((i+1)*8), 8), 16); 161 word = parseInt(value.substr(stringLength-((i+1)*8), 8), 16);
164 } else { 162 } else {
165 word = parseInt(value.substr(0, stringLength-(i*8)), 16); 163 word = parseInt(value.substr(0, stringLength-(i*8)), 16);
166 } 164 }
167 165
168 this._value[i] = word; 166 this._value[i] = word;
169 } 167 }
170 } else if (aValue.constructor == Array) { 168 } else if (aValue.constructor == Array) {
171 var itemsToCopy; 169 var itemsToCopy;
172 170
173 itemsToCopy = aValue.length; 171 itemsToCopy = aValue.length;
174 while (aValue[itemsToCopy - 1] == 0) { 172 while (aValue[itemsToCopy - 1] == 0) {
175 itemsToCopy --; 173 itemsToCopy --;
176 } 174 }
177 175
178 this._value = aValue.slice(0, itemsToCopy); 176 this._value = aValue.slice(0, itemsToCopy);
179 } else if (aValue.constructor == Number) { 177 } else if (aValue.constructor == Number) {
180 this._value = [aValue]; 178 this._value = [aValue];
181 } else { 179 } else {
182 // throw Clipperz.Crypto.ECC.BinaryField.WordArrayValue.exception.UnsupportedConstructorValueType; 180 // throw Clipperz.Crypto.ECC.BinaryField.WordArrayValue.exception.UnsupportedConstructorValueType;
183 } 181 }
184 182
185 return this; 183 return this;
186} 184}
187 185
188Clipperz.Crypto.ECC.BinaryField.WordArrayValue.prototype = MochiKit.Base.update(new Clipperz.Crypto.ECC.BinaryField.AbstractValue(), { 186Clipperz.Crypto.ECC.BinaryField.WordArrayValue.prototype = MochiKit.Base.update(new Clipperz.Crypto.ECC.BinaryField.AbstractValue(), {
189 187
190 'value': function() { 188 'value': function() {
191 return this._value; 189 return this._value;
192 }, 190 },
193 191
194 //----------------------------------------------------------------------------- 192 //-----------------------------------------------------------------------------
195 193
196 'wordSize': function() { 194 'wordSize': function() {
197 return this._value.length 195 return this._value.length
198 }, 196 },
199 197
200 //----------------------------------------------------------------------------- 198 //-----------------------------------------------------------------------------
201 199
202 'clone': function() { 200 'clone': function() {
203 return new Clipperz.Crypto.ECC.BinaryField.WordArrayValue(this._value.slice(0)); 201 return new Clipperz.Crypto.ECC.BinaryField.WordArrayValue(this._value.slice(0));
204 }, 202 },
205 203
206 //----------------------------------------------------------------------------- 204 //-----------------------------------------------------------------------------
207 205
208 'isZero': function() { 206 'isZero': function() {
209 return (this.compare(Clipperz.Crypto.ECC.BinaryField.WordArrayValue.O) == 0); 207 return (this.compare(Clipperz.Crypto.ECC.BinaryField.WordArrayValue.O) == 0);
210 }, 208 },
211 209
212 //----------------------------------------------------------------------------- 210 //-----------------------------------------------------------------------------
213 211
214 'asString': function(aBase) { 212 'asString': function(aBase) {