Diffstat (limited to 'frontend/gamma/js/Clipperz/Crypto') (more/less context) (show whitespace changes)
-rw-r--r-- | frontend/gamma/js/Clipperz/Crypto/AES.js | 29 | ||||
-rw-r--r-- | frontend/gamma/js/Clipperz/Crypto/Base.js | 22 | ||||
-rw-r--r-- | frontend/gamma/js/Clipperz/Crypto/BigInt.js | 23 | ||||
-rw-r--r-- | frontend/gamma/js/Clipperz/Crypto/BigInt_scoped.js | 22 | ||||
-rw-r--r-- | frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/Curve.js | 83 | ||||
-rw-r--r-- | frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/FiniteField.js | 24 | ||||
-rw-r--r-- | frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/Point.js | 22 | ||||
-rw-r--r-- | frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/Value.js | 24 | ||||
-rw-r--r-- | frontend/gamma/js/Clipperz/Crypto/ECC/StandardCurves.js | 31 | ||||
-rw-r--r-- | frontend/gamma/js/Clipperz/Crypto/PRNG.js | 33 | ||||
-rw-r--r-- | frontend/gamma/js/Clipperz/Crypto/RSA.js | 22 | ||||
-rw-r--r-- | frontend/gamma/js/Clipperz/Crypto/SHA.js | 22 | ||||
-rw-r--r-- | frontend/gamma/js/Clipperz/Crypto/SRP.js | 36 |
13 files changed, 144 insertions, 249 deletions
diff --git a/frontend/gamma/js/Clipperz/Crypto/AES.js b/frontend/gamma/js/Clipperz/Crypto/AES.js index c811f1c..cb56f11 100644 --- a/frontend/gamma/js/Clipperz/Crypto/AES.js +++ b/frontend/gamma/js/Clipperz/Crypto/AES.js @@ -1,38 +1,36 @@ /* -Copyright 2008-2011 Clipperz Srl +Copyright 2008-2013 Clipperz Srl -This file is part of Clipperz Community Edition. -Clipperz Community Edition is an online password manager. +This file is part of Clipperz, the online password manager. For further information about its features and functionalities please refer to http://www.clipperz.com. -* Clipperz Community Edition is free software: you can redistribute - it and/or modify it under the terms of the GNU Affero General Public - License as published by the Free Software Foundation, either version - 3 of the License, or (at your option) any later version. +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -* Clipperz Community Edition is distributed in the hope that it will - be useful, but WITHOUT ANY WARRANTY; without even the implied - warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public - License along with Clipperz Community Edition. If not, see - <http://www.gnu.org/licenses/>. + License along with Clipperz. If not, see http://www.gnu.org/licenses/. */ try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) { throw "Clipperz.Crypto.AES depends on Clipperz.ByteArray!"; } // Dependency commented to avoid a circular reference //try { if (typeof(Clipperz.Crypto.PRNG) == 'undefined') { throw ""; }} catch (e) { // throw "Clipperz.Crypto.AES depends on Clipperz.Crypto.PRNG!"; //} if (typeof(Clipperz.Crypto.AES) == 'undefined') { Clipperz.Crypto.AES = {}; } //############################################################################# @@ -107,57 +105,56 @@ Clipperz.Crypto.AES.DeferredExecutionContext.prototype = MochiKit.Base.update(nu }, 'tuneExecutionParameters': function (anElapsedTime) { //var originalChunks = this._elaborationChunks; if (anElapsedTime > 0) { this._elaborationChunks = Math.round(this._elaborationChunks * ((anElapsedTime + 1000)/(anElapsedTime * 2))); } //Clipperz.log("tuneExecutionParameters - elapsedTime: " + anElapsedTime + /*originalChunks,*/ " chunks # " + this._elaborationChunks + " [" + this._executionStep + " / " + this._messageLength + "]"); }, 'pause': function(aValue) { // return MochiKit.Async.wait(Clipperz.Crypto.AES.DeferredExecution.pauseTime, aValue); return MochiKit.Async.wait(this._pauseTime, aValue); }, 'isDone': function () { -//console.log("isDone", this.executionStep(), this.messageLength()); return (this._executionStep >= this._messageLength); }, //----------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); //############################################################################# Clipperz.Crypto.AES.Key = function(args) { args = args || {}; this._key = args.key; this._keySize = args.keySize || this.key().length(); if (this.keySize() == 128/8) { this._b = 176; this._numberOfRounds = 10; } else if (this.keySize() == 256/8) { this._b = 240; this._numberOfRounds = 14; } else { - MochiKit.Logging.logError("AES unsupported key size: " + (this.keySize() * 8) + " bits"); + Clipperz.logError("AES unsupported key size: " + (this.keySize() * 8) + " bits"); throw Clipperz.Crypto.AES.exception.UnsupportedKeySize; } this._stretchedKey = null; return this; } Clipperz.Crypto.AES.Key.prototype = MochiKit.Base.update(null, { 'asString': function() { return "Clipperz.Crypto.AES.Key (" + this.key().toHexString() + ")"; }, //----------------------------------------------------------------------------- @@ -795,68 +792,64 @@ MochiKit.Base.update(Clipperz.Crypto.AES, { //----------------------------------------------------------------------------- 'deferredEncrypt': function(aKey, someData, aNonce) { var deferredResult; var executionContext; var result; var nonce; var key; key = new Clipperz.Crypto.AES.Key({key:aKey}); nonce = aNonce ? aNonce.clone() : Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(128/8); executionContext = new Clipperz.Crypto.AES.DeferredExecutionContext({key:key, message:someData, nonce:nonce}); deferredResult = new Clipperz.Async.Deferred("AES.deferredEncrypt"); -//deferredResult.addCallback(function (aValue) { console.log(">>> deferredEncrypt"); return aValue; }); deferredResult.addCallback(Clipperz.Crypto.AES.deferredEncryptBlocks); deferredResult.addCallback(function(anExecutionContext) { var result; result = anExecutionContext.nonce().clone(); result.appendBytes(anExecutionContext.resultArray()); return result; }); -//deferredResult.addCallback(function (aValue) { console.log("<<< deferredEncrypt"); return aValue; }); deferredResult.callback(executionContext) return deferredResult; }, //----------------------------------------------------------------------------- 'deferredDecrypt': function(aKey, someData) { var deferredResult var nonce; var message; var key; key = new Clipperz.Crypto.AES.Key({key:aKey}); nonce = someData.split(0, (128/8)); message = someData.split(128/8); executionContext = new Clipperz.Crypto.AES.DeferredExecutionContext({key:key, message:message, nonce:nonce}); deferredResult = new Clipperz.Async.Deferred("AES.deferredDecrypt"); -//deferredResult.addCallback(function (aValue) { console.log(">>> deferredDecrypt"); return aValue; }); deferredResult.addCallback(Clipperz.Crypto.AES.deferredEncryptBlocks); deferredResult.addCallback(function(anExecutionContext) { return anExecutionContext.result(); }); -//deferredResult.addCallback(function (aValue) { console.log("<<< deferredDecrypt"); return aValue; }); deferredResult.callback(executionContext); return deferredResult; }, //----------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); //############################################################################# //Clipperz.Crypto.AES.DeferredExecution = { // 'chunkSize': 16384, // 4096, // 1024 4096 8192 16384 32768; // 'pauseTime': 0.02 // 0.2 //} diff --git a/frontend/gamma/js/Clipperz/Crypto/Base.js b/frontend/gamma/js/Clipperz/Crypto/Base.js index d3a8e36..9acfc49 100644 --- a/frontend/gamma/js/Clipperz/Crypto/Base.js +++ b/frontend/gamma/js/Clipperz/Crypto/Base.js @@ -1,38 +1,36 @@ /* -Copyright 2008-2011 Clipperz Srl +Copyright 2008-2013 Clipperz Srl -This file is part of Clipperz Community Edition. -Clipperz Community Edition is an online password manager. +This file is part of Clipperz, the online password manager. For further information about its features and functionalities please refer to http://www.clipperz.com. -* Clipperz Community Edition is free software: you can redistribute - it and/or modify it under the terms of the GNU Affero General Public - License as published by the Free Software Foundation, either version - 3 of the License, or (at your option) any later version. +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -* Clipperz Community Edition is distributed in the hope that it will - be useful, but WITHOUT ANY WARRANTY; without even the implied - warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public - License along with Clipperz Community Edition. If not, see - <http://www.gnu.org/licenses/>. + License along with Clipperz. If not, see http://www.gnu.org/licenses/. */ try { if (typeof(Clipperz.Base) == 'undefined') { throw ""; }} catch (e) { throw "Clipperz.Crypto.Base depends on Clipperz.Base!"; } if (typeof(Clipperz.Crypto) == 'undefined') { Clipperz.Crypto = {}; } if (typeof(Clipperz.Crypto.Base) == 'undefined') { Clipperz.Crypto.Base = {}; } Clipperz.Crypto.Base.VERSION = "0.1"; Clipperz.Crypto.Base.NAME = "Clipperz.Crypto.Base"; //############################################################################# // Downloaded on March 30, 2006 from http://anmar.eu.org/projects/jssha2/files/jssha2-0.3.zip (jsSha2/sha256.js) //############################################################################# diff --git a/frontend/gamma/js/Clipperz/Crypto/BigInt.js b/frontend/gamma/js/Clipperz/Crypto/BigInt.js index 41483a3..031ed30 100644 --- a/frontend/gamma/js/Clipperz/Crypto/BigInt.js +++ b/frontend/gamma/js/Clipperz/Crypto/BigInt.js @@ -1,38 +1,36 @@ /* -Copyright 2008-2011 Clipperz Srl +Copyright 2008-2013 Clipperz Srl -This file is part of Clipperz Community Edition. -Clipperz Community Edition is an online password manager. +This file is part of Clipperz, the online password manager. For further information about its features and functionalities please refer to http://www.clipperz.com. -* Clipperz Community Edition is free software: you can redistribute - it and/or modify it under the terms of the GNU Affero General Public - License as published by the Free Software Foundation, either version - 3 of the License, or (at your option) any later version. +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -* Clipperz Community Edition is distributed in the hope that it will - be useful, but WITHOUT ANY WARRANTY; without even the implied - warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public - License along with Clipperz Community Edition. If not, see - <http://www.gnu.org/licenses/>. + License along with Clipperz. If not, see http://www.gnu.org/licenses/. */ if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } if (typeof(Clipperz.Crypto) == 'undefined') { Clipperz.Crypto = {}; } //############################################################################# // Downloaded on March 05, 2007 from http://www.leemon.com/crypto/BigInt.js //############################################################################# //////////////////////////////////////////////////////////////////////////////////////// // Big Integer Library v. 5.0 // Created 2000, last modified 2006 // Leemon Baird // www.leemon.com @@ -1464,33 +1462,32 @@ MochiKit.Base.update(Clipperz.Crypto.BigInt.prototype, { //------------------------------------------------------------------------- 'asString': function (aBase, minimumLength) { var result; var base; if (typeof(aBase) == 'undefined') { base = 10; } else { base = aBase; } result = bigInt2str(this.internalValue(), base).toLowerCase(); if ((typeof(minimumLength) != 'undefined') && (result.length < minimumLength)) { var i, c; -//MochiKit.Logging.logDebug(">>> FIXING BigInt.asString length issue") c = (minimumLength - result.length); for (i=0; i<c; i++) { result = '0' + result; } } return result; }, //------------------------------------------------------------------------- 'asByteArray': function() { return new Clipperz.ByteArray("0x" + this.asString(16), 16); }, //------------------------------------------------------------------------- diff --git a/frontend/gamma/js/Clipperz/Crypto/BigInt_scoped.js b/frontend/gamma/js/Clipperz/Crypto/BigInt_scoped.js index f91c7e9..bc60330 100644 --- a/frontend/gamma/js/Clipperz/Crypto/BigInt_scoped.js +++ b/frontend/gamma/js/Clipperz/Crypto/BigInt_scoped.js @@ -1,38 +1,36 @@ /* -Copyright 2008-2011 Clipperz Srl +Copyright 2008-2013 Clipperz Srl -This file is part of Clipperz Community Edition. -Clipperz Community Edition is an online password manager. +This file is part of Clipperz, the online password manager. For further information about its features and functionalities please refer to http://www.clipperz.com. -* Clipperz Community Edition is free software: you can redistribute - it and/or modify it under the terms of the GNU Affero General Public - License as published by the Free Software Foundation, either version - 3 of the License, or (at your option) any later version. +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -* Clipperz Community Edition is distributed in the hope that it will - be useful, but WITHOUT ANY WARRANTY; without even the implied - warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public - License along with Clipperz Community Edition. If not, see - <http://www.gnu.org/licenses/>. + License along with Clipperz. If not, see http://www.gnu.org/licenses/. */ if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } if (typeof(Clipperz.Crypto) == 'undefined') { Clipperz.Crypto = {}; } if (typeof(Leemon) == 'undefined') { Leemon = {}; } if (typeof(Baird.Crypto) == 'undefined') { Baird.Crypto = {}; } if (typeof(Baird.Crypto.BigInt) == 'undefined') { Baird.Crypto.BigInt = {}; } //############################################################################# // Downloaded on March 05, 2007 from http://www.leemon.com/crypto/BigInt.js //############################################################################# //////////////////////////////////////////////////////////////////////////////////////// diff --git a/frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/Curve.js b/frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/Curve.js index 19f19c2..0d76b9c 100644 --- a/frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/Curve.js +++ b/frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/Curve.js @@ -1,38 +1,36 @@ /* -Copyright 2008-2011 Clipperz Srl +Copyright 2008-2013 Clipperz Srl -This file is part of Clipperz Community Edition. -Clipperz Community Edition is an online password manager. +This file is part of Clipperz, the online password manager. For further information about its features and functionalities please refer to http://www.clipperz.com. -* Clipperz Community Edition is free software: you can redistribute - it and/or modify it under the terms of the GNU Affero General Public - License as published by the Free Software Foundation, either version - 3 of the License, or (at your option) any later version. +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -* Clipperz Community Edition is distributed in the hope that it will - be useful, but WITHOUT ANY WARRANTY; without even the implied - warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public - License along with Clipperz Community Edition. If not, see - <http://www.gnu.org/licenses/>. + License along with Clipperz. If not, see http://www.gnu.org/licenses/. */ //try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) { // throw "Clipperz.Crypto.ECC depends on Clipperz.ByteArray!"; //} if (typeof(Clipperz.Crypto.ECC) == 'undefined') { Clipperz.Crypto.ECC = {}; } if (typeof(Clipperz.Crypto.ECC.BinaryField) == 'undefined') { Clipperz.Crypto.ECC.BinaryField = {}; } Clipperz.Crypto.ECC.BinaryField.Curve = function(args) { args = args || {}; this._modulus = args.modulus; this._a = args.a; this._b = args.b; @@ -89,90 +87,72 @@ Clipperz.Crypto.ECC.BinaryField.Curve.prototype = MochiKit.Base.update(null, { //----------------------------------------------------------------------------- 'negate': function(aPointA) { var result; result = new Clipperz.Crypto.ECC.Point({x:aPointA.x(), y:this.finiteField().add(aPointA.y(), aPointA.x())}) return result; }, //----------------------------------------------------------------------------- 'add': function(aPointA, aPointB) { var result; -//console.log(">>> ECC.BinaryField.Curve.add"); if (aPointA.isZero()) { -//console.log("--- pointA == zero"); result = aPointB; } else if (aPointB.isZero()) { -//console.log("--- pointB == zero"); result = aPointA; } else if ( (aPointA.x().compare(aPointB.x()) == 0) && ((aPointA.y().compare(aPointB.y()) != 0) || aPointB.x().isZero())) { -//console.log("compare A.x - B.x: ", aPointA.x().compare(aPointB.x())); -//console.log("compare A.y - B.y: ", (aPointA.y().compare(aPointB.y()) != 0)); -//console.log("compare B.x.isZero(): ", aPointB.x().isZero()); - -//console.log("--- result = zero"); result = new Clipperz.Crypto.ECC.BinaryField.Point({x:Clipperz.Crypto.ECC.BinaryField.Value.O, y:Clipperz.Crypto.ECC.BinaryField.Value.O}); } else { -//console.log("--- result = ELSE"); var f2m; var x, y; var lambda; var aX, aY, bX, bY; aX = aPointA.x()._value; aY = aPointA.y()._value; bX = aPointB.x()._value; bY = aPointB.y()._value; f2m = this.finiteField(); if (aPointA.x().compare(aPointB.x()) != 0) { -//console.log(" a.x != b.x"); lambda = f2m._fastMultiply( f2m._add(aY, bY), f2m._inverse(f2m._add(aX, bX)) ); x = f2m._add(this.a()._value, f2m._square(lambda)); f2m._overwriteAdd(x, lambda); f2m._overwriteAdd(x, aX); f2m._overwriteAdd(x, bX); } else { -//console.log(" a.x == b.x"); lambda = f2m._add(bX, f2m._fastMultiply(bY, f2m._inverse(bX))); -//console.log(" lambda: " + lambda.asString(16)); x = f2m._add(this.a()._value, f2m._square(lambda)); -//console.log(" x (step 1): " + x.asString(16)); f2m._overwriteAdd(x, lambda); -//console.log(" x (step 2): " + x.asString(16)); } y = f2m._fastMultiply(f2m._add(bX, x), lambda); -//console.log(" y (step 1): " + y.asString(16)); f2m._overwriteAdd(y, x); -//console.log(" y (step 2): " + y.asString(16)); f2m._overwriteAdd(y, bY); -//console.log(" y (step 3): " + y.asString(16)); result = new Clipperz.Crypto.ECC.BinaryField.Point({x:new Clipperz.Crypto.ECC.BinaryField.Value(x), y:new Clipperz.Crypto.ECC.BinaryField.Value(y)}) } -//console.log("<<< ECC.BinaryField.Curve.add"); return result; }, //----------------------------------------------------------------------------- 'addTwice': function(aPointA) { return this.add(aPointA, aPointA); }, //----------------------------------------------------------------------------- 'overwriteAdd': function(aPointA, aPointB) { if (aPointA.isZero()) { // result = aPointB; aPointA._x._value = aPointB._x._value; @@ -184,163 +164,141 @@ Clipperz.Crypto.ECC.BinaryField.Curve.prototype = MochiKit.Base.update(null, { aPointA._x = Clipperz.Crypto.ECC.BinaryField.Value.O; aPointA._y = Clipperz.Crypto.ECC.BinaryField.Value.O; } else { var f2m; var x, y; var lambda; var aX, aY, bX, bY; aX = aPointA.x()._value; aY = aPointA.y()._value; bX = aPointB.x()._value; bY = aPointB.y()._value; f2m = this.finiteField(); if (aPointA.x().compare(aPointB.x()) != 0) { -//console.log(" a.x != b.x"); lambda = f2m._fastMultiply( f2m._add(aY, bY), f2m._inverse(f2m._add(aX, bX)) ); x = f2m._add(this.a()._value, f2m._square(lambda)); f2m._overwriteAdd(x, lambda); f2m._overwriteAdd(x, aX); f2m._overwriteAdd(x, bX); } else { -//console.log(" a.x == b.x"); lambda = f2m._add(bX, f2m._fastMultiply(bY, f2m._inverse(bX))); -//console.log(" lambda: " + lambda.asString(16)); x = f2m._add(this.a()._value, f2m._square(lambda)); -//console.log(" x (step 1): " + x.asString(16)); f2m._overwriteAdd(x, lambda); -//console.log(" x (step 2): " + x.asString(16)); } y = f2m._fastMultiply(f2m._add(bX, x), lambda); -//console.log(" y (step 1): " + y.asString(16)); f2m._overwriteAdd(y, x); -//console.log(" y (step 2): " + y.asString(16)); f2m._overwriteAdd(y, bY); -//console.log(" y (step 3): " + y.asString(16)); // result = new Clipperz.Crypto.ECC.BinaryField.Point({x:new Clipperz.Crypto.ECC.BinaryField.Value(x), y:new Clipperz.Crypto.ECC.BinaryField.Value(y)}) aPointA._x._value = x; aPointA._y._value = y; } -//console.log("<<< ECC.BinaryField.Curve.add"); return result; }, //----------------------------------------------------------------------------- 'multiply': function(aValue, aPoint) { var result; //console.profile(); result = new Clipperz.Crypto.ECC.BinaryField.Point({x:Clipperz.Crypto.ECC.BinaryField.Value.O, y:Clipperz.Crypto.ECC.BinaryField.Value.O}); if (aValue.isZero() == false) { var k, Q; var i; var countIndex; countIndex = 0; if (aValue.compare(Clipperz.Crypto.ECC.BinaryField.Value.O) > 0) { k = aValue; Q = aPoint; } else { -MochiKit.Logging.logError("The Clipperz.Crypto.ECC.BinaryFields.Value does not work with negative values!!!!"); + Clipperz.logError("The Clipperz.Crypto.ECC.BinaryFields.Value does not work with negative values!!!!"); k = aValue.negate(); Q = this.negate(aPoint); } -//console.log("k: " + k.toString(16)); -//console.log("k.bitSize: " + k.bitSize()); for (i=k.bitSize()-1; i>=0; i--) { result = this.add(result, result); // this.overwriteAdd(result, result); if (k.isBitSet(i)) { result = this.add(result, Q); // this.overwriteAdd(result, Q); } -// if (countIndex==100) {console.log("multiply.break"); break;} else countIndex++; +// if (countIndex==100) {Clipperz.log("multiply.break"); break;} else countIndex++; } } //console.profileEnd(); return result; }, //----------------------------------------------------------------------------- 'deferredMultiply': function(aValue, aPoint) { var deferredResult; var result; -MochiKit.Logging.logDebug(">>> deferredMultiply - value: " + aValue + ", point: " + aPoint); +Clipperz.log(">>> deferredMultiply - value: " + aValue + ", point: " + aPoint); //console.profile("ECC.Curve.multiply"); deferredResult = new MochiKit.Async.Deferred(); //deferredResult.addCallback(function(res) {console.profile("ECC.Curve.deferredMultiply"); return res;} ); -//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("# 1: " + res); return res;}); +//deferredResult.addBoth(function(res) {Clipperz.logDebug("# 1: " + res); return res;}); result = new Clipperz.Crypto.ECC.BinaryField.Point({x:Clipperz.Crypto.ECC.BinaryField.Value.O, y:Clipperz.Crypto.ECC.BinaryField.Value.O}); -//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("# 2: " + res); return res;}); +//deferredResult.addBoth(function(res) {Clipperz.logDebug("# 2: " + res); return res;}); if (aValue.isZero() == false) { var k, Q; var i; var countIndex; countIndex = 0; if (aValue.compare(Clipperz.Crypto.ECC.BinaryField.Value.O) > 0) { k = aValue; Q = aPoint; } else { -MochiKit.Logging.logError("The Clipperz.Crypto.ECC.BinaryFields.Value does not work with negative values!!!!"); + Clipperz.logError("The Clipperz.Crypto.ECC.BinaryFields.Value does not work with negative values!!!!"); k = aValue.negate(); Q = this.negate(aPoint); } -//console.log("k: " + k.toString(16)); -//console.log("k.bitSize: " + k.bitSize()); -//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("# 3: " + res); return res;}); for (i=k.bitSize()-1; i>=0; i--) { -//MochiKit.Logging.logDebug("====> " + i); -//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("# 4 > i = " + i + ": " + res); return res;}); deferredResult.addMethod(this, "addTwice"); //# result = this.add(result, result); // this.overwriteAdd(result, result); if (k.isBitSet(i)) { deferredResult.addMethod(this, "add", Q); //# result = this.add(result, Q); // this.overwriteAdd(result, Q); } if (i%20 == 0) {deferredResult.addCallback(MochiKit.Async.wait, 0.1);} - -// if (countIndex==100) {console.log("multiply.break"); break;} else countIndex++; -//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("# 4 < i = " + i + ": " + res); return res;}); } -//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("# 4: " + res); return res;}); } //#console.profileEnd(); -//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("# 5: " + res); return res;}); //deferredResult.addBoth(function(res) {console.profileEnd(); return res;}); -//deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("# 6: " + res); return res;}); deferredResult.callback(result); //# return result; return deferredResult; }, //----------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); //############################################################################# Clipperz.Crypto.ECC.StandardCurves = {}; MochiKit.Base.update(Clipperz.Crypto.ECC.StandardCurves, { @@ -428,56 +386,53 @@ MochiKit.Base.update(Clipperz.Crypto.ECC.StandardCurves, { // P[i] := P[i] ^ (X<<5) ^ (X<<7) ^ (X<<10) ^ (X<<15) // P[i+1] := P[i+1] ^ (X>>17) ^ (X>>22) ^ (X>>25) ^ (X>>27) // // SET X := P[T-1] >> 27 // P[0] := P[0] ^ X ^ (X<<2) ^ (X<<5) ^ (X<<10) // P[T-1] := P[T-1] & 0x07ffffff // // RETURN P[T-1],...,P[0] // // ------------------------------------------------------------------------- // Clipperz.Crypto.ECC.StandardCurves._B571.finiteField().slowModule = Clipperz.Crypto.ECC.StandardCurves._B571.finiteField().module; Clipperz.Crypto.ECC.StandardCurves._B571.finiteField().module = function(aValue) { var result; if (aValue.bitSize() > 1140) { - MochiKit.Logging.logWarning("ECC.StandarCurves.B571.finiteField().module: falling back to default implementation"); + Clipperz.logWarning("ECC.StandarCurves.B571.finiteField().module: falling back to default implementation"); result = Clipperz.Crypto.ECC.StandardCurves._B571.finiteField().slowModule(aValue); } else { var C, T; var i; -//console.log(">>> binaryField.finiteField.(improved)module"); -// C = aValue.value().slice(0); C = aValue._value.slice(0); for (i=35; i>=18; i--) { T = C[i]; C[i-18] = (((C[i-18] ^ (T<<5) ^ (T<<7) ^ (T<<10) ^ (T<<15)) & 0xffffffff) >>> 0); C[i-17] = ((C[i-17] ^ (T>>>27) ^ (T>>>25) ^ (T>>>22) ^ (T>>>17)) >>> 0); } T = (C[17] >>> 27); C[0] = ((C[0] ^ T ^ ((T<<2) ^ (T<<5) ^ (T<<10)) & 0xffffffff) >>> 0); C[17] = (C[17] & 0x07ffffff); for(i=18; i<=35; i++) { C[i] = 0; } result = new Clipperz.Crypto.ECC.BinaryField.Value(C); -//console.log("<<< binaryField.finiteField.(improved)module"); } return result; }; } return Clipperz.Crypto.ECC.StandardCurves._B571; }, //----------------------------------------------------------------------------- '_B283': null, 'B283': function() { // f(z) = z^283 + z^12 + z^7 + z^5 + 1 if (Clipperz.Crypto.ECC.StandardCurves._B283 == null) { Clipperz.Crypto.ECC.StandardCurves._B283 = new Clipperz.Crypto.ECC.BinaryField.Curve({ // modulus: new Clipperz.Crypto.ECC.BinaryField.Value('10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 000010a1', 16), @@ -494,54 +449,52 @@ MochiKit.Base.update(Clipperz.Crypto.ECC.StandardCurves, { // S: new Clipperz.Crypto.ECC.BinaryField.Value('2aa058f73a0e33ab486b0f610410c53a7f132310', 10), // n: new Clipperz.Crypto.ECC.BinaryField.Value('03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe661ce18ff55987308059b186823851ec7dd9ca1161de93d5174d66e8382e9bb2fe84e47', 16) }); //----------------------------------------------------------------------------- // // Guide to Elliptic Curve Cryptography // Darrel Hankerson, Alfred Menezes, Scott Vanstone // - Pag: 56, Alorithm 2.43 // //----------------------------------------------------------------------------- Clipperz.Crypto.ECC.StandardCurves._B283.finiteField().slowModule = Clipperz.Crypto.ECC.StandardCurves._B283.finiteField().module; Clipperz.Crypto.ECC.StandardCurves._B283.finiteField().module = function(aValue) { var result; if (aValue.bitSize() > 564) { - MochiKit.Logging.logWarning("ECC.StandarCurves.B283.finiteField().module: falling back to default implementation"); + Clipperz.logWarning("ECC.StandarCurves.B283.finiteField().module: falling back to default implementation"); result = Clipperz.Crypto.ECC.StandardCurves._B283.finiteField().slowModule(aValue); } else { var C, T; var i; -//console.log(">>> binaryField.finiteField.(improved)module"); C = aValue._value.slice(0); for (i=17; i>=9; i--) { T = C[i]; C[i-9] = (((C[i-9] ^ (T<<5) ^ (T<<10) ^ (T<<12) ^ (T<<17)) & 0xffffffff) >>> 0); C[i-8] = ((C[i-8] ^ (T>>>27) ^ (T>>>22) ^ (T>>>20) ^ (T>>>15)) >>> 0); } T = (C[8] >>> 27); C[0] = ((C[0] ^ T ^ ((T<<5) ^ (T<<7) ^ (T<<12)) & 0xffffffff) >>> 0); C[8] = (C[8] & 0x07ffffff); for(i=9; i<=17; i++) { C[i] = 0; } result = new Clipperz.Crypto.ECC.BinaryField.Value(C); -//console.log("<<< binaryField.finiteField.(improved)module"); } return result; }; } return Clipperz.Crypto.ECC.StandardCurves._B283; }, //----------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); //############################################################################# diff --git a/frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/FiniteField.js b/frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/FiniteField.js index 56f257a..7b7c2c6 100644 --- a/frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/FiniteField.js +++ b/frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/FiniteField.js @@ -1,38 +1,36 @@ /* -Copyright 2008-2011 Clipperz Srl +Copyright 2008-2013 Clipperz Srl -This file is part of Clipperz Community Edition. -Clipperz Community Edition is an online password manager. +This file is part of Clipperz, the online password manager. For further information about its features and functionalities please refer to http://www.clipperz.com. -* Clipperz Community Edition is free software: you can redistribute - it and/or modify it under the terms of the GNU Affero General Public - License as published by the Free Software Foundation, either version - 3 of the License, or (at your option) any later version. +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -* Clipperz Community Edition is distributed in the hope that it will - be useful, but WITHOUT ANY WARRANTY; without even the implied - warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public - License along with Clipperz Community Edition. If not, see - <http://www.gnu.org/licenses/>. + License along with Clipperz. If not, see http://www.gnu.org/licenses/. */ //try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) { // throw "Clipperz.Crypto.ECC depends on Clipperz.ByteArray!"; //} if (typeof(Clipperz.Crypto.ECC) == 'undefined') { Clipperz.Crypto.ECC = {}; } if (typeof(Clipperz.Crypto.ECC.BinaryField) == 'undefined') { Clipperz.Crypto.ECC.BinaryField = {}; } Clipperz.Crypto.ECC.BinaryField.FiniteField = function(args) { args = args || {}; this._modulus = args.modulus; return this; } @@ -40,54 +38,52 @@ Clipperz.Crypto.ECC.BinaryField.FiniteField.prototype = MochiKit.Base.update(nul 'asString': function() { return "Clipperz.Crypto.ECC.BinaryField.FiniteField (" + this.modulus().asString() + ")"; }, //----------------------------------------------------------------------------- 'modulus': function() { return this._modulus; }, //----------------------------------------------------------------------------- '_module': function(aValue) { var result; var modulusComparison; -//console.log(">>> binaryField.finiteField.(standard)module"); modulusComparison = Clipperz.Crypto.ECC.BinaryField.Value._compare(aValue, this.modulus()._value); if (modulusComparison < 0) { result = aValue; } else if (modulusComparison == 0) { result = [0]; } else { var modulusBitSize; var resultBitSize; result = aValue; modulusBitSize = this.modulus().bitSize(); resultBitSize = Clipperz.Crypto.ECC.BinaryField.Value._bitSize(result); while (resultBitSize >= modulusBitSize) { Clipperz.Crypto.ECC.BinaryField.Value._overwriteXor(result, Clipperz.Crypto.ECC.BinaryField.Value._shiftLeft(this.modulus()._value, resultBitSize - modulusBitSize)); resultBitSize = Clipperz.Crypto.ECC.BinaryField.Value._bitSize(result); } } -//console.log("<<< binaryField.finiteField.(standard)module"); return result; }, 'module': function(aValue) { return new Clipperz.Crypto.ECC.BinaryField.Value(this._module(aValue._value.slice(0))); }, //----------------------------------------------------------------------------- '_add': function(a, b) { return Clipperz.Crypto.ECC.BinaryField.Value._xor(a, b); }, '_overwriteAdd': function(a, b) { Clipperz.Crypto.ECC.BinaryField.Value._overwriteXor(a, b); diff --git a/frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/Point.js b/frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/Point.js index ffe287b..fef3220 100644 --- a/frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/Point.js +++ b/frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/Point.js @@ -1,38 +1,36 @@ /* -Copyright 2008-2011 Clipperz Srl +Copyright 2008-2013 Clipperz Srl -This file is part of Clipperz Community Edition. -Clipperz Community Edition is an online password manager. +This file is part of Clipperz, the online password manager. For further information about its features and functionalities please refer to http://www.clipperz.com. -* Clipperz Community Edition is free software: you can redistribute - it and/or modify it under the terms of the GNU Affero General Public - License as published by the Free Software Foundation, either version - 3 of the License, or (at your option) any later version. +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -* Clipperz Community Edition is distributed in the hope that it will - be useful, but WITHOUT ANY WARRANTY; without even the implied - warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public - License along with Clipperz Community Edition. If not, see - <http://www.gnu.org/licenses/>. + License along with Clipperz. If not, see http://www.gnu.org/licenses/. */ //try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) { // throw "Clipperz.Crypto.ECC depends on Clipperz.ByteArray!"; //} if (typeof(Clipperz.Crypto.ECC) == 'undefined') { Clipperz.Crypto.ECC = {}; } if (typeof(Clipperz.Crypto.ECC.BinaryField) == 'undefined') { Clipperz.Crypto.ECC.BinaryField = {}; } Clipperz.Crypto.ECC.BinaryField.Point = function(args) { args = args || {}; this._x = args.x; this._y = args.y; return this; } diff --git a/frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/Value.js b/frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/Value.js index b705a20..634772a 100644 --- a/frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/Value.js +++ b/frontend/gamma/js/Clipperz/Crypto/ECC/BinaryField/Value.js @@ -1,38 +1,36 @@ /* -Copyright 2008-2011 Clipperz Srl +Copyright 2008-2013 Clipperz Srl -This file is part of Clipperz Community Edition. -Clipperz Community Edition is an online password manager. +This file is part of Clipperz, the online password manager. For further information about its features and functionalities please refer to http://www.clipperz.com. -* Clipperz Community Edition is free software: you can redistribute - it and/or modify it under the terms of the GNU Affero General Public - License as published by the Free Software Foundation, either version - 3 of the License, or (at your option) any later version. +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -* Clipperz Community Edition is distributed in the hope that it will - be useful, but WITHOUT ANY WARRANTY; without even the implied - warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public - License along with Clipperz Community Edition. If not, see - <http://www.gnu.org/licenses/>. + License along with Clipperz. If not, see http://www.gnu.org/licenses/. */ //try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) { // throw "Clipperz.Crypto.ECC depends on Clipperz.ByteArray!"; //} if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } if (typeof(Clipperz.Crypto) == 'undefined') { Clipperz.Crypto = {}; } if (typeof(Clipperz.Crypto.ECC) == 'undefined') { Clipperz.Crypto.ECC = {}; } if (typeof(Clipperz.Crypto.ECC.BinaryField) == 'undefined') { Clipperz.Crypto.ECC.BinaryField = {}; } Clipperz.Crypto.ECC.BinaryField.Value = function(aValue, aBase, aBitSize) { if (aValue.constructor == String) { var value; var stringLength; var numberOfWords; @@ -355,29 +353,27 @@ Clipperz.Crypto.ECC.BinaryField.Value._isBitSet = function(aWordArray, aBitPosit result = ((aWordArray[byteIndex] & (1 << bitIndexInSelectedByte)) != 0); } else { result = false; } return result; }; Clipperz.Crypto.ECC.BinaryField.Value._compare = function(a,b) { var result; var i,c; result = MochiKit.Base.compare(a.length, b.length); c = a.length; for (i=0; (i<c) && (result==0); i++) { -//console.log("compare[" + c + " - " + i + " - 1] " + this.value()[c-i-1] + ", " + aValue.value()[c-i-1]); -// result = MochiKit.Base.compare(this.value()[c-i-1], aValue.value()[c-i-1]); result = MochiKit.Base.compare(a[c-i-1], b[c-i-1]); } return result; }; Clipperz.Crypto.ECC.BinaryField.Value['exception']= { 'UnsupportedBase': new MochiKit.Base.NamedError("Clipperz.Crypto.ECC.BinaryField.Value.exception.UnsupportedBase"), 'UnsupportedConstructorValueType': new MochiKit.Base.NamedError("Clipperz.Crypto.ECC.BinaryField.Value.exception.UnsupportedConstructorValueType") }; diff --git a/frontend/gamma/js/Clipperz/Crypto/ECC/StandardCurves.js b/frontend/gamma/js/Clipperz/Crypto/ECC/StandardCurves.js index be197e3..239e264 100644 --- a/frontend/gamma/js/Clipperz/Crypto/ECC/StandardCurves.js +++ b/frontend/gamma/js/Clipperz/Crypto/ECC/StandardCurves.js @@ -1,38 +1,36 @@ /* -Copyright 2008-2011 Clipperz Srl +Copyright 2008-2013 Clipperz Srl -This file is part of Clipperz Community Edition. -Clipperz Community Edition is an online password manager. +This file is part of Clipperz, the online password manager. For further information about its features and functionalities please refer to http://www.clipperz.com. -* Clipperz Community Edition is free software: you can redistribute - it and/or modify it under the terms of the GNU Affero General Public - License as published by the Free Software Foundation, either version - 3 of the License, or (at your option) any later version. +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -* Clipperz Community Edition is distributed in the hope that it will - be useful, but WITHOUT ANY WARRANTY; without even the implied - warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public - License along with Clipperz Community Edition. If not, see - <http://www.gnu.org/licenses/>. + License along with Clipperz. If not, see http://www.gnu.org/licenses/. */ //try { if (typeof(Clipperz.Crypto.ECC.BinaryField.Curve) == 'undefined') { throw ""; }} catch (e) { // throw "Clipperz.Crypto.ECC depends on Clipperz.Crypto.ECC.BinaryField.Curve!"; //} //try { if (typeof(Clipperz.Crypto.ECC.Koblitz.Curve) == 'undefined') { throw ""; }} catch (e) { // throw "Clipperz.Crypto.ECC depends on Clipperz.Crypto.ECC.Koblitz.Curve!"; //} Clipperz.Crypto.ECC.StandardCurves = {}; MochiKit.Base.update(Clipperz.Crypto.ECC.StandardCurves, { //============================================================================== @@ -121,56 +119,53 @@ MochiKit.Base.update(Clipperz.Crypto.ECC.StandardCurves, { // P[i] := P[i] ^ (X<<5) ^ (X<<7) ^ (X<<10) ^ (X<<15) // P[i+1] := P[i+1] ^ (X>>17) ^ (X>>22) ^ (X>>25) ^ (X>>27) // // SET X := P[T-1] >> 27 // P[0] := P[0] ^ X ^ (X<<2) ^ (X<<5) ^ (X<<10) // P[T-1] := P[T-1] & 0x07ffffff // // RETURN P[T-1],...,P[0] // // ------------------------------------------------------------------------- // Clipperz.Crypto.ECC.StandardCurves._B571.finiteField().slowModule = Clipperz.Crypto.ECC.StandardCurves._B571.finiteField().module; Clipperz.Crypto.ECC.StandardCurves._B571.finiteField().module = function(aValue) { var result; if (aValue.bitSize() > 1140) { - MochiKit.Logging.logWarning("ECC.StandarCurves.B571.finiteField().module: falling back to default implementation"); + Clipperz.logWarning("ECC.StandarCurves.B571.finiteField().module: falling back to default implementation"); result = Clipperz.Crypto.ECC.StandardCurves._B571.finiteField().slowModule(aValue); } else { var C, T; var i; -//console.log(">>> binaryField.finiteField.(improved)module"); -// C = aValue.value().slice(0); C = aValue._value.slice(0); for (i=35; i>=18; i--) { T = C[i]; C[i-18] = (((C[i-18] ^ (T<<5) ^ (T<<7) ^ (T<<10) ^ (T<<15)) & 0xffffffff) >>> 0); C[i-17] = ((C[i-17] ^ (T>>>27) ^ (T>>>25) ^ (T>>>22) ^ (T>>>17)) >>> 0); } T = (C[17] >>> 27); C[0] = ((C[0] ^ T ^ ((T<<2) ^ (T<<5) ^ (T<<10)) & 0xffffffff) >>> 0); C[17] = (C[17] & 0x07ffffff); for(i=18; i<=35; i++) { C[i] = 0; } result = new Clipperz.Crypto.ECC.BinaryField.Value(C); -//console.log("<<< binaryField.finiteField.(improved)module"); } return result; }; } return Clipperz.Crypto.ECC.StandardCurves._B571; }, //----------------------------------------------------------------------------- '_B283': null, 'B283': function() { // f(z) = z^283 + z^12 + z^7 + z^5 + 1 if ((Clipperz.Crypto.ECC.StandardCurves._B283 == null) && (typeof(Clipperz.Crypto.ECC.BinaryField.Curve) != 'undefined')) { Clipperz.Crypto.ECC.StandardCurves._B283 = new Clipperz.Crypto.ECC.BinaryField.Curve({ modulus: new Clipperz.Crypto.ECC.BinaryField.Value('08000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 000010a1', 16), @@ -183,54 +178,52 @@ MochiKit.Base.update(Clipperz.Crypto.ECC.StandardCurves, { r: new Clipperz.Crypto.ECC.BinaryField.Value('03ffffff ffffffff ffffffff ffffffff ffffef90 399660fc 938a9016 5b042a7c efadb307', 16), h: new Clipperz.Crypto.ECC.BinaryField.Value('2', 16) }); //----------------------------------------------------------------------------- // // Guide to Elliptic Curve Cryptography // Darrel Hankerson, Alfred Menezes, Scott Vanstone // - Pag: 56, Alorithm 2.43 // //----------------------------------------------------------------------------- Clipperz.Crypto.ECC.StandardCurves._B283.finiteField().slowModule = Clipperz.Crypto.ECC.StandardCurves._B283.finiteField().module; Clipperz.Crypto.ECC.StandardCurves._B283.finiteField().module = function(aValue) { var result; if (aValue.bitSize() > 564) { - MochiKit.Logging.logWarning("ECC.StandarCurves.B283.finiteField().module: falling back to default implementation"); + Clipperz.logWarning("ECC.StandarCurves.B283.finiteField().module: falling back to default implementation"); result = Clipperz.Crypto.ECC.StandardCurves._B283.finiteField().slowModule(aValue); } else { var C, T; var i; -//console.log(">>> binaryField.finiteField.(improved)module"); C = aValue._value.slice(0); for (i=17; i>=9; i--) { T = C[i]; C[i-9] = (((C[i-9] ^ (T<<5) ^ (T<<10) ^ (T<<12) ^ (T<<17)) & 0xffffffff) >>> 0); C[i-8] = ((C[i-8] ^ (T>>>27) ^ (T>>>22) ^ (T>>>20) ^ (T>>>15)) >>> 0); } T = (C[8] >>> 27); C[0] = ((C[0] ^ T ^ ((T<<5) ^ (T<<7) ^ (T<<12)) & 0xffffffff) >>> 0); C[8] = (C[8] & 0x07ffffff); for(i=9; i<=17; i++) { C[i] = 0; } result = new Clipperz.Crypto.ECC.BinaryField.Value(C); -//console.log("<<< binaryField.finiteField.(improved)module"); } return result; }; } return Clipperz.Crypto.ECC.StandardCurves._B283; }, //============================================================================== __syntaxFix__: "syntax fix" }); diff --git a/frontend/gamma/js/Clipperz/Crypto/PRNG.js b/frontend/gamma/js/Clipperz/Crypto/PRNG.js index adfdb16..c539f06 100644 --- a/frontend/gamma/js/Clipperz/Crypto/PRNG.js +++ b/frontend/gamma/js/Clipperz/Crypto/PRNG.js @@ -1,38 +1,36 @@ /* -Copyright 2008-2011 Clipperz Srl +Copyright 2008-2013 Clipperz Srl -This file is part of Clipperz Community Edition. -Clipperz Community Edition is an online password manager. +This file is part of Clipperz, the online password manager. For further information about its features and functionalities please refer to http://www.clipperz.com. -* Clipperz Community Edition is free software: you can redistribute - it and/or modify it under the terms of the GNU Affero General Public - License as published by the Free Software Foundation, either version - 3 of the License, or (at your option) any later version. +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -* Clipperz Community Edition is distributed in the hope that it will - be useful, but WITHOUT ANY WARRANTY; without even the implied - warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public - License along with Clipperz Community Edition. If not, see - <http://www.gnu.org/licenses/>. + License along with Clipperz. If not, see http://www.gnu.org/licenses/. */ try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) { throw "Clipperz.Crypto.PRNG depends on Clipperz.ByteArray!"; } try { if (typeof(Clipperz.Crypto.SHA) == 'undefined') { throw ""; }} catch (e) { throw "Clipperz.Crypto.PRNG depends on Clipperz.Crypto.SHA!"; } try { if (typeof(Clipperz.Crypto.AES) == 'undefined') { throw ""; }} catch (e) { throw "Clipperz.Crypto.PRNG depends on Clipperz.Crypto.AES!"; } if (typeof(Clipperz.Crypto.PRNG) == 'undefined') { Clipperz.Crypto.PRNG = {}; } @@ -476,33 +474,32 @@ Clipperz.Crypto.PRNG.Fortuna.prototype = MochiKit.Base.update(null, { for (i=0; i<c; i++) { if ((i == 0) || ((reseedCounter & (reseedCounterMask >>> (c - i))) == 0)) { newKeySeed.appendBlock(this.accumulators()[i].stack()); this.accumulators()[i].resetStack(); } } if (reseedCounter == 1) { c = this.randomnessSources().length; for (i=0; i<c; i++) { this.randomnessSources()[i].setBoostMode(false); } } this.setKey(Clipperz.Crypto.SHA.sha_d256(newKeySeed)); if (reseedCounter == 1) { -//MochiKit.Logging.logDebug("### PRNG.readyToGenerateRandomBytes"); Clipperz.log("### PRNG.readyToGenerateRandomBytes"); MochiKit.Signal.signal(this, 'readyToGenerateRandomBytes'); } MochiKit.Signal.signal(this, 'reseeded'); }, //------------------------------------------------------------------------- 'isReadyToGenerateRandomValues': function() { return this.reseedCounter() != 0; }, //------------------------------------------------------------------------- 'entropyLevel': function() { return this.accumulators()[0].stack().length() + (this.reseedCounter() * this.firstPoolReseedLevel()); @@ -547,33 +544,33 @@ Clipperz.log("### PRNG.readyToGenerateRandomBytes"); var newKey; result = new Clipperz.ByteArray(); c = Math.ceil(aSize / (128 / 8)); for (i=0; i<c; i++) { result.appendBlock(this.getRandomBlock()); } if (result.length() != aSize) { result = result.split(0, aSize); } newKey = this.getRandomBlock().appendBlock(this.getRandomBlock()); this.setKey(newKey); } else { -MochiKit.Logging.logWarning("Fortuna generator has not enough entropy, yet!"); +Clipperz.logWarning("Fortuna generator has not enough entropy, yet!"); throw Clipperz.Crypto.PRNG.exception.NotEnoughEntropy; } return result; }, //------------------------------------------------------------------------- 'addRandomByte': function(aSourceId, aPoolId, aRandomValue) { var selectedAccumulator; selectedAccumulator = this.accumulators()[aPoolId]; selectedAccumulator.addRandomByte(aRandomValue); if (aPoolId == 0) { MochiKit.Signal.signal(this, 'addedRandomByte') @@ -597,55 +594,47 @@ MochiKit.Logging.logWarning("Fortuna generator has not enough entropy, yet!"); 'addRandomnessSource': function(aRandomnessSource) { aRandomnessSource.setGenerator(this); aRandomnessSource.setSourceId(this.randomnessSources().length); this.randomnessSources().push(aRandomnessSource); if (this.isReadyToGenerateRandomValues() == false) { aRandomnessSource.setBoostMode(true); } }, //------------------------------------------------------------------------- 'deferredEntropyCollection': function(aValue) { var result; -//MochiKit.Logging.logDebug(">>> PRNG.deferredEntropyCollection"); if (this.isReadyToGenerateRandomValues()) { -//MochiKit.Logging.logDebug("--- PRNG.deferredEntropyCollection - 1"); result = aValue; } else { -//MochiKit.Logging.logDebug("--- PRNG.deferredEntropyCollection - 2"); var deferredResult; -// Clipperz.NotificationCenter.notify(this, 'updatedProgressState', 'collectingEntropy', true); - deferredResult = new Clipperz.Async.Deferred("PRNG.deferredEntropyCollection"); -// deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.1 - PRNG.deferredEntropyCollection - 1: " + res); return res;}); deferredResult.addCallback(MochiKit.Base.partial(MochiKit.Async.succeed, aValue)); -// deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1.2.2 - PRNG.deferredEntropyCollection - 2: " + res); return res;}); MochiKit.Signal.connect(this, 'readyToGenerateRandomBytes', deferredResult, 'callback'); result = deferredResult; } -//MochiKit.Logging.logDebug("<<< PRNG.deferredEntropyCollection - result: " + result); return result; }, //------------------------------------------------------------------------- 'fastEntropyAccumulationForTestingPurpose': function() { while (! this.isReadyToGenerateRandomValues()) { this.addRandomByte(Math.floor(Math.random() * 32), Math.floor(Math.random() * 32), Math.floor(Math.random() * 256)); } }, //------------------------------------------------------------------------- 'dump': function(appendToDoc) { var tbl; diff --git a/frontend/gamma/js/Clipperz/Crypto/RSA.js b/frontend/gamma/js/Clipperz/Crypto/RSA.js index 6844dba..5a480f1 100644 --- a/frontend/gamma/js/Clipperz/Crypto/RSA.js +++ b/frontend/gamma/js/Clipperz/Crypto/RSA.js @@ -1,38 +1,36 @@ /* -Copyright 2008-2011 Clipperz Srl +Copyright 2008-2013 Clipperz Srl -This file is part of Clipperz Community Edition. -Clipperz Community Edition is an online password manager. +This file is part of Clipperz, the online password manager. For further information about its features and functionalities please refer to http://www.clipperz.com. -* Clipperz Community Edition is free software: you can redistribute - it and/or modify it under the terms of the GNU Affero General Public - License as published by the Free Software Foundation, either version - 3 of the License, or (at your option) any later version. +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -* Clipperz Community Edition is distributed in the hope that it will - be useful, but WITHOUT ANY WARRANTY; without even the implied - warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public - License along with Clipperz Community Edition. If not, see - <http://www.gnu.org/licenses/>. + License along with Clipperz. If not, see http://www.gnu.org/licenses/. */ try { if (typeof(Clipperz.Crypto.BigInt) == 'undefined') { throw ""; }} catch (e) { throw "Clipperz.Crypto.RSA depends on Clipperz.Crypto.BigInt!"; } if (typeof(Clipperz.Crypto.RSA) == 'undefined') { Clipperz.Crypto.RSA = {}; } Clipperz.Crypto.RSA.VERSION = "0.1"; Clipperz.Crypto.RSA.NAME = "Clipperz.RSA"; //############################################################################# MochiKit.Base.update(Clipperz.Crypto.RSA, { diff --git a/frontend/gamma/js/Clipperz/Crypto/SHA.js b/frontend/gamma/js/Clipperz/Crypto/SHA.js index b07fa85..f8bfe6e 100644 --- a/frontend/gamma/js/Clipperz/Crypto/SHA.js +++ b/frontend/gamma/js/Clipperz/Crypto/SHA.js @@ -1,38 +1,36 @@ /* -Copyright 2008-2011 Clipperz Srl +Copyright 2008-2013 Clipperz Srl -This file is part of Clipperz Community Edition. -Clipperz Community Edition is an online password manager. +This file is part of Clipperz, the online password manager. For further information about its features and functionalities please refer to http://www.clipperz.com. -* Clipperz Community Edition is free software: you can redistribute - it and/or modify it under the terms of the GNU Affero General Public - License as published by the Free Software Foundation, either version - 3 of the License, or (at your option) any later version. +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -* Clipperz Community Edition is distributed in the hope that it will - be useful, but WITHOUT ANY WARRANTY; without even the implied - warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public - License along with Clipperz Community Edition. If not, see - <http://www.gnu.org/licenses/>. + License along with Clipperz. If not, see http://www.gnu.org/licenses/. */ try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) { throw "Clipperz.Crypto.PRNG depends on Clipperz.ByteArray!"; } if (typeof(Clipperz.Crypto) == 'undefined') { Clipperz.Crypto = {}; } if (typeof(Clipperz.Crypto.SHA) == 'undefined') { Clipperz.Crypto.SHA = {}; } Clipperz.Crypto.SHA.VERSION = "0.3"; Clipperz.Crypto.SHA.NAME = "Clipperz.Crypto.SHA"; MochiKit.Base.update(Clipperz.Crypto.SHA, { '__repr__': function () { diff --git a/frontend/gamma/js/Clipperz/Crypto/SRP.js b/frontend/gamma/js/Clipperz/Crypto/SRP.js index 3b25275..597e72d 100644 --- a/frontend/gamma/js/Clipperz/Crypto/SRP.js +++ b/frontend/gamma/js/Clipperz/Crypto/SRP.js @@ -1,38 +1,36 @@ /* -Copyright 2008-2011 Clipperz Srl +Copyright 2008-2013 Clipperz Srl -This file is part of Clipperz Community Edition. -Clipperz Community Edition is an online password manager. +This file is part of Clipperz, the online password manager. For further information about its features and functionalities please refer to http://www.clipperz.com. -* Clipperz Community Edition is free software: you can redistribute - it and/or modify it under the terms of the GNU Affero General Public - License as published by the Free Software Foundation, either version - 3 of the License, or (at your option) any later version. +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -* Clipperz Community Edition is distributed in the hope that it will - be useful, but WITHOUT ANY WARRANTY; without even the implied - warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public - License along with Clipperz Community Edition. If not, see - <http://www.gnu.org/licenses/>. + License along with Clipperz. If not, see http://www.gnu.org/licenses/. */ try { if (typeof(Clipperz.ByteArray) == 'undefined') { throw ""; }} catch (e) { throw "Clipperz.Crypto.PRNG depends on Clipperz.ByteArray!"; } try { if (typeof(Clipperz.Crypto.BigInt) == 'undefined') { throw ""; }} catch (e) { throw "Clipperz.Crypto.SRP depends on Clipperz.Crypto.BigInt!"; } try { if (typeof(Clipperz.Crypto.PRNG) == 'undefined') { throw ""; }} catch (e) { throw "Clipperz.Crypto.SRP depends on Clipperz.Crypto.PRNG!"; } if (typeof(Clipperz.Crypto.SRP) == 'undefined') { Clipperz.Crypto.SRP = {}; } @@ -118,154 +116,144 @@ Clipperz.Crypto.SRP.Connection.prototype = MochiKit.Base.update(null, { 'C': function () { return this._C; }, //------------------------------------------------------------------------- 'P': function () { return this._P; }, //------------------------------------------------------------------------- 'a': function () { if (this._a == null) { this._a = new Clipperz.Crypto.BigInt(Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32).toHexString().substring(2), 16); // this._a = new Clipperz.Crypto.BigInt("37532428169486597638072888476611365392249575518156687476805936694442691012367", 10); -//MochiKit.Logging.logDebug("SRP a: " + this._a); } return this._a; }, //------------------------------------------------------------------------- 'A': function () { if (this._A == null) { // Warning: this value should be strictly greater than zero: how should we perform this check? this._A = Clipperz.Crypto.SRP.g().powerModule(this.a(), Clipperz.Crypto.SRP.n()); if (this._A.equals(0)) { -MochiKit.Logging.logError("Clipperz.Crypto.SRP.Connection: trying to set 'A' to 0."); + Clipperz.logError("Clipperz.Crypto.SRP.Connection: trying to set 'A' to 0."); throw Clipperz.Crypto.SRP.exception.InvalidValue; } -//MochiKit.Logging.logDebug("SRP A: " + this._A); } return this._A; }, //------------------------------------------------------------------------- 's': function () { return this._s; -//MochiKit.Logging.logDebug("SRP s: " + this._S); }, 'set_s': function(aValue) { this._s = aValue; }, //------------------------------------------------------------------------- 'B': function () { return this._B; }, 'set_B': function(aValue) { // Warning: this value should be strictly greater than zero: how should we perform this check? if (! aValue.equals(0)) { this._B = aValue; -//MochiKit.Logging.logDebug("SRP B: " + this._B); } else { -MochiKit.Logging.logError("Clipperz.Crypto.SRP.Connection: trying to set 'B' to 0."); + Clipperz.logError("Clipperz.Crypto.SRP.Connection: trying to set 'B' to 0."); throw Clipperz.Crypto.SRP.exception.InvalidValue; } }, //------------------------------------------------------------------------- 'x': function () { if (this._x == null) { this._x = new Clipperz.Crypto.BigInt(this.stringHash(this.s().asString(16, 64) + this.P()), 16); -//MochiKit.Logging.logDebug("SRP x: " + this._x); } return this._x; }, //------------------------------------------------------------------------- 'u': function () { if (this._u == null) { this._u = new Clipperz.Crypto.BigInt(this.stringHash(this.B().asString()), 16); -//MochiKit.Logging.logDebug("SRP u: " + this._u); } return this._u; }, //------------------------------------------------------------------------- 'S': function () { if (this._S == null) { var bigint; var srp; bigint = Clipperz.Crypto.BigInt; srp = Clipperz.Crypto.SRP; this._S = bigint.powerModule( bigint.subtract(this.B(), bigint.powerModule(srp.g(), this.x(), srp.n())), bigint.add(this.a(), bigint.multiply(this.u(), this.x())), srp.n() ) -//MochiKit.Logging.logDebug("SRP S: " + this._S); } return this._S; }, //------------------------------------------------------------------------- 'K': function () { if (this._K == null) { this._K = this.stringHash(this.S().asString()); -//MochiKit.Logging.logDebug("SRP K: " + this._K); } return this._K; }, //------------------------------------------------------------------------- 'M1': function () { if (this._M1 == null) { this._M1 = this.stringHash(this.A().asString(10) + this.B().asString(10) + this.K()); -//MochiKit.Logging.logDebug("SRP M1: " + this._M1); } return this._M1; }, //------------------------------------------------------------------------- 'M2': function () { if (this._M2 == null) { this._M2 = this.stringHash(this.A().asString(10) + this.M1() + this.K()); -//MochiKit.Logging.logDebug("SRP M2: " + this._M2); } return this._M2; }, //========================================================================= 'serverSideCredentialsWithSalt': function(aSalt) { var result; var s, x, v; s = aSalt; x = this.stringHash(s + this.P()); v = Clipperz.Crypto.SRP.g().powerModule(new Clipperz.Crypto.BigInt(x, 16), Clipperz.Crypto.SRP.n()); result = {}; |