summaryrefslogtreecommitdiff
path: root/frontend/gamma/tests/tests/Clipperz/Crypto/JSCrypto_vs_Clipperz.test.js
Side-by-side diff
Diffstat (limited to 'frontend/gamma/tests/tests/Clipperz/Crypto/JSCrypto_vs_Clipperz.test.js') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/gamma/tests/tests/Clipperz/Crypto/JSCrypto_vs_Clipperz.test.js418
1 files changed, 418 insertions, 0 deletions
diff --git a/frontend/gamma/tests/tests/Clipperz/Crypto/JSCrypto_vs_Clipperz.test.js b/frontend/gamma/tests/tests/Clipperz/Crypto/JSCrypto_vs_Clipperz.test.js
new file mode 100644
index 0000000..7dc688c
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/Crypto/JSCrypto_vs_Clipperz.test.js
@@ -0,0 +1,418 @@
+/*
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library 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.
+
+* Javascript Crypto Library 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 Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+*/
+
+//function logElapsedTime(aDescription, aStartTime, anEndTime) {
+// MochiKit.Logging.logDebug(aDescription + " - took " + (anEndTime - aStartTime) + "ms");
+// SimpleTest.ok(true, aDescription + " - took " + (anEndTime - aStartTime) + "ms");
+//}
+
+var asciiTestString = longAsciiText;
+//asciiTestString = asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString;
+//asciiTestString = asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString;
+//asciiTestString = asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString;
+//asciiTestString = asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString + asciiTestString;
+//asciiTestString = asciiTestString + asciiTestString;
+//asciiTestString = asciiTestString + asciiTestString;
+
+var isoLatin1TestString = longIsoLatin1Text;
+//isoLatin1TestString = isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString;
+//isoLatin1TestString = isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString;
+//isoLatin1TestString = isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString + isoLatin1TestString;
+//isoLatin1TestString = isoLatin1TestString + isoLatin1TestString;
+//isoLatin1TestString = isoLatin1TestString + isoLatin1TestString;
+
+var utf8TestString = longUtf8Text;
+//utf8TestString = utf8TestString + utf8TestString + utf8TestString + utf8TestString + utf8TestString + utf8TestString + utf8TestString + utf8TestString + utf8TestString + utf8TestString;
+//utf8TestString = utf8TestString + utf8TestString + utf8TestString + utf8TestString + utf8TestString + utf8TestString + utf8TestString + utf8TestString + utf8TestString + utf8TestString;
+//utf8TestString = utf8TestString + utf8TestString;
+//utf8TestString = utf8TestString + utf8TestString;
+
+var times = {
+ 'Clipperz': {},
+ 'JSCrypto': {}
+};
+
+function appendResults (aDescription, aTimer) {
+ MochiKit.DOM.appendChildNodes(MochiKit.DOM.getElement('timerTBODY'),
+ MochiKit.DOM.TR(null,
+ MochiKit.DOM.TH({align:'left'}, aDescription),
+ MochiKit.DOM.TH(null, aTimer['ascii']['encrypt'] + ' - ' + aTimer['ascii']['decrypt'])//,
+// MochiKit.DOM.TH(null, aTimer['isoLatin1']['encrypt'] + ' - ' + aTimer['isoLatin1']['decrypt']),
+// MochiKit.DOM.TH(null, aTimer['utf8']['encrypt'] + ' - ' + aTimer['utf8']['decrypt'])
+ )
+ );
+
+}
+
+//=============================================================================
+
+function timeRegularFunction (aDescription, aString, anEncryptFunction, aDecryptFunction, aTimer, aKey) {
+ var start;
+ var end;
+ var encryptTime;
+ var decryptTime;
+ var ciphertext;
+ var plaintext;
+
+
+ start = new Date();
+ ciphertext = anEncryptFunction('trustno1', aString);
+ end = new Date();
+ encryptTime = end - start;
+
+ start = new Date();
+ plaintext = aDecryptFunction('trustno1', ciphertext);
+ end = new Date();
+ decryptTime = end - start;
+ aTimer[aKey] = { 'encrypt': encryptTime, 'decrypt': decryptTime };
+ SimpleTest.is(aString, plaintext, aDescription);
+}
+/*
+function timeRegularFunction (anEncryptFunction, aDecryptFunction, aTimer) {
+ var start;
+ var end;
+ var encryptTime;
+ var decryptTime;
+ var ciphertext;
+ var plaintext;
+
+
+ start = new Date();
+ ciphertext = anEncryptFunction('trustno1', asciiTestString);
+ end = new Date();
+ encryptTime = end - start;
+
+ start = new Date();
+ plaintext = aDecryptFunction('trustno1', ciphertext);
+ end = new Date();
+ decryptTime = end - start;
+ aTimer['ascii'] = { 'encrypt': encryptTime, 'decrypt': decryptTime };
+ SimpleTest.is(asciiTestString, plaintext, "Encrypt/decrypt the ASCII text");
+
+
+ start = new Date();
+ ciphertext = anEncryptFunction('trustno1', isoLatin1TestString);
+ end = new Date();
+ encryptTime = end - start;
+
+ start = new Date();
+ plaintext = aDecryptFunction('trustno1', ciphertext);
+ end = new Date();
+ decryptTime = end - start;
+ aTimer['isoLatin1'] = { 'encrypt': encryptTime, 'decrypt': decryptTime };
+ SimpleTest.is(isoLatin1TestString, plaintext, "Encrypt/decrypt the ISO-Latin 1 text");
+
+
+ start = new Date();
+ ciphertext = anEncryptFunction('trustno1', utf8TestString);
+ end = new Date();
+ encryptTime = end - start;
+
+ start = new Date();
+ plaintext = aDecryptFunction('trustno1', ciphertext);
+ end = new Date();
+ decryptTime = end - start;
+ aTimer['utf8'] = { 'encrypt': encryptTime, 'decrypt': decryptTime };
+ SimpleTest.is(utf8TestString, plaintext, "Encrypt/decrypt the UTF-8 text");
+}
+*/
+function timeDeferredFunction (aDescription, aString, anEncryptFunction, aDecryptFunction, aTimer, aKey, someTestArgs) {
+ var start;
+ var end;
+
+ var deferredResult;
+
+ aTimer[aKey] = {};
+
+ deferredResult = new Clipperz.Async.Deferred("timeDeferredFunction", someTestArgs);
+ deferredResult.addCallback(function (aValue) { start = new Date(); return aValue});
+ deferredResult.addCallback(anEncryptFunction, 'trustno1', aString);
+ deferredResult.addCallback(function (aValue) {
+ end = new Date();
+ aTimer[aKey]['encrypt'] = end-start;
+ return aValue;
+ });
+ deferredResult.addCallback(function (aValue) { start = new Date(); return aValue});
+ deferredResult.addCallback(aDecryptFunction, 'trustno1');
+ deferredResult.addCallback(function (aValue) {
+ end = new Date();
+ aTimer[aKey]['decrypt'] = end-start;
+ return aValue;
+ });
+ deferredResult.addCallback(function (aValue) {
+ SimpleTest.is(aString, aValue, aDescription);
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+}
+
+//=============================================================================
+
+function encryptUsingJSCrypto (aKey, aValue) {
+ var salt;
+ var key;
+ var cipher;
+ var iv;
+ var plaintext;
+ var ciphertext;
+ var tag;
+ var adata;
+
+ salt = [1,2,3,4,5,6,7,8];
+ key = generateKey(aKey, salt);
+
+ cipher = new aes(key, CCM);
+ iv = Random.random_words(4);
+
+ plaintext = aValue;
+ ciphertext = [];
+ tag = [];
+ adata = "";
+
+ cipher.encrypt(iv, plaintext, ciphertext, adata, tag);
+
+ return ciphertext;
+}
+
+//-----------------------------------------------------------------------------
+
+function decryptUsingJSCrypto (aKey, aValue) {
+ var salt;
+ var key;
+ var cipher;
+ var ciphertext;
+ var plaintext;
+ var tag;
+ var adata;
+
+ salt = [1,2,3,4,5,6,7,8];
+ key = generateKey(aKey, salt);
+ tag = [];
+ adata = "";
+
+ cipher = new aes(key, CCM);
+ ciphertext = aValue;
+ plaintext = cipher.decrypt(ciphertext, adata, tag);
+
+ return plaintext;
+}
+
+//=============================================================================
+
+function encryptUsingClipperz (aKey, aValue) {
+ var key;
+ var value;
+ var data;
+ var encryptedData;
+
+ key = Clipperz.Crypto.SHA.sha_d256(new Clipperz.ByteArray(aKey));
+ value = aValue;
+ data = new Clipperz.ByteArray(value);
+ encryptedData = Clipperz.Crypto.AES.encrypt(key, data);
+ return encryptedData.toBase64String();
+}
+
+//-----------------------------------------------------------------------------
+
+function decryptUsingClipperz (aKey, aValue) {
+ var key;
+ var value;
+ var decryptedData;
+
+ key = Clipperz.Crypto.SHA.sha_d256(new Clipperz.ByteArray(aKey));
+ value = new Clipperz.ByteArray().appendBase64String(aValue);
+
+ decryptedData = Clipperz.Crypto.AES.decrypt(key, value).asString();
+
+ return decryptedData;
+}
+
+//=============================================================================
+
+function encryptUsingClipperzAndJSON (aKey, aValue) {
+ var key;
+ var value;
+ var data;
+ var encryptedData;
+
+ key = Clipperz.Crypto.SHA.sha_d256(new Clipperz.ByteArray(aKey));
+ value = Clipperz.Base.serializeJSON(aValue);
+ data = new Clipperz.ByteArray(value);
+ encryptedData = Clipperz.Crypto.AES.encrypt(key, data);
+ return encryptedData.toBase64String();
+}
+
+//-----------------------------------------------------------------------------
+
+function decryptUsingClipperzAndJSON (aKey, aValue) {
+ var key;
+ var value;
+ var decryptedData;
+
+ key = Clipperz.Crypto.SHA.sha_d256(new Clipperz.ByteArray(aKey));
+ value = new Clipperz.ByteArray().appendBase64String(aValue);
+
+ decryptedData = Clipperz.Crypto.AES.decrypt(key, value).asString();
+
+ return Clipperz.Base.evalJSON(decryptedData);
+}
+
+//=============================================================================
+
+function deferredEncryptUsingClipperz (aKey, aValue) {
+ var deferredResult;
+ var key;
+ var data;
+
+ key = Clipperz.Crypto.SHA.sha_d256(new Clipperz.ByteArray(aKey));
+ data = new Clipperz.ByteArray(aValue);
+
+ deferredResult = new Clipperz.Async.Deferred("Clipperz.deferredEncrypt", {trace:false});
+ deferredResult.addCallback(Clipperz.Crypto.AES.deferredEncrypt, key, data);
+ deferredResult.addCallback(function(aResult) {
+ return aResult.toBase64String();
+ })
+ deferredResult.callback();
+
+ return deferredResult;
+}
+
+//-----------------------------------------------------------------------------
+
+function deferredDecryptUsingClipperz (aKey, aValue) {
+ var key, value;
+
+ key = Clipperz.Crypto.SHA.sha_d256(new Clipperz.ByteArray(aKey));
+ value = new Clipperz.ByteArray().appendBase64String(aValue);
+
+ deferredResult = new Clipperz.Async.Deferred("Clipperz.deferredDecrypt", {trace:false});
+ deferredResult.addCallback(Clipperz.Crypto.AES.deferredDecrypt, key, value);
+ deferredResult.addCallback(function(aResult) {
+ return aResult.asString();
+ });
+ deferredResult.callback();
+
+ return deferredResult;
+}
+
+//=============================================================================
+
+var tests = {
+
+ //-------------------------------------------------------------------------
+
+ 'encryptMultipleStringsUsingClipperzFunctions': function (someTestArgs) {
+// timeRegularFunction(encryptUsingClipperz, decryptUsingClipperz, times['Clipperz']['Regular']);
+ times['Clipperz']['NO JSON'] = {};
+
+ timeRegularFunction("Clipperz - NO JSON - Ascii", asciiTestString, encryptUsingClipperz, decryptUsingClipperz, times['Clipperz']['NO JSON'], 'ascii');
+ timeRegularFunction("Clipperz - NO JSON - ISO Latin 1", isoLatin1TestString, encryptUsingClipperz, decryptUsingClipperz, times['Clipperz']['NO JSON'], 'isoLatin1');
+ timeRegularFunction("Clipperz - NO JSON - UTF-8", utf8TestString, encryptUsingClipperz, decryptUsingClipperz, times['Clipperz']['NO JSON'], 'utf8');
+
+ appendResults("Clipperz - NO JSON", times['Clipperz']['NO JSON']);
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'encryptMultipleStringsUsingClipperzAndJSONFunctions': function (someTestArgs) {
+// timeRegularFunction(encryptUsingClipperzAndJSON, decryptUsingClipperzAndJSON, times['Clipperz']['JSON']);
+ times['Clipperz']['JSON'] = {};
+
+ timeRegularFunction("Clipperz - JSON - Ascii", asciiTestString, encryptUsingClipperzAndJSON, decryptUsingClipperzAndJSON, times['Clipperz']['JSON'], 'ascii');
+ timeRegularFunction("Clipperz - JSON - ISO Latin 1", isoLatin1TestString, encryptUsingClipperzAndJSON, decryptUsingClipperzAndJSON, times['Clipperz']['JSON'], 'isoLatin1');
+ timeRegularFunction("Clipperz - JSON - UTF-8", utf8TestString, encryptUsingClipperzAndJSON, decryptUsingClipperzAndJSON, times['Clipperz']['JSON'], 'utf8');
+
+ appendResults("Clipperz - JSON", times['Clipperz']['JSON']);
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'encryptMultipleStringsUsingClipperzDeferredFunctions': function (someTestArgs) {
+ times['Clipperz']['Deferred'] = {};
+ times['Clipperz']['Deferred [NO JSON]'] = {};
+
+ return Clipperz.Async.callbacks("encryptMultipleStringsUsingClipperzDeferredFunctions", [
+ MochiKit.Base.partial(timeDeferredFunction, "Deferred Ascii", asciiTestString, deferredEncryptUsingClipperz, deferredDecryptUsingClipperz, times['Clipperz']['Deferred [NO JSON]'], 'ascii', someTestArgs),
+// MochiKit.Base.partial(timeDeferredFunction, "Deferred IsoLatin1", isoLatin1TestString, deferredEncryptUsingClipperz, deferredDecryptUsingClipperz, times['Clipperz']['Deferred [NO JSON]'], 'isoLatin1', someTestArgs),
+// MochiKit.Base.partial(timeDeferredFunction, "Deferred UTF-8", utf8TestString, deferredEncryptUsingClipperz, deferredDecryptUsingClipperz, times['Clipperz']['Deferred [NO JSON]'], 'utf8', someTestArgs),
+
+ MochiKit.Base.partial(appendResults, "Clipperz - deferred [NO JSON]", times['Clipperz']['Deferred [NO JSON]']),
+
+ MochiKit.Base.partial(timeDeferredFunction, "Deferred Ascii", asciiTestString, Clipperz.PM.Crypto.encryptingFunctions.versions['0.3'].deferredEncrypt, Clipperz.PM.Crypto.encryptingFunctions.versions['0.3'].deferredDecrypt, times['Clipperz']['Deferred'], 'ascii', someTestArgs),
+// MochiKit.Base.partial(timeDeferredFunction, "Deferred IsoLatin1", isoLatin1TestString, Clipperz.PM.Crypto.encryptingFunctions.versions['0.3'].deferredEncrypt, Clipperz.PM.Crypto.encryptingFunctions.versions['0.3'].deferredDecrypt, times['Clipperz']['Deferred'], 'isoLatin1', someTestArgs),
+// MochiKit.Base.partial(timeDeferredFunction, "Deferred UTF-8", utf8TestString, Clipperz.PM.Crypto.encryptingFunctions.versions['0.3'].deferredEncrypt, Clipperz.PM.Crypto.encryptingFunctions.versions['0.3'].deferredDecrypt, times['Clipperz']['Deferred'], 'utf8', someTestArgs),
+
+ MochiKit.Base.partial(appendResults, "Clipperz - PM", times['Clipperz']['Deferred'])
+ ], someTestArgs);
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'encryptMultipleStringsUsingJSCryptoFunctions': function (someTestArgs) {
+ timeRegularFunction("JSCrypto - Ascii", asciiTestString, encryptUsingJSCrypto, decryptUsingJSCrypto, times['JSCrypto'], 'ascii');
+ timeRegularFunction("JSCrypto - ISO Latin 1", isoLatin1TestString, encryptUsingJSCrypto, decryptUsingJSCrypto, times['JSCrypto'], 'isoLatin1');
+ timeRegularFunction("JSCrypto - UTF-8", utf8TestString, encryptUsingJSCrypto, decryptUsingJSCrypto, times['JSCrypto'], 'utf8');
+
+ appendResults("JSCrypto", times['JSCrypto']);
+ },
+
+ //-------------------------------------------------------------------------
+ 'syntaxFix': MochiKit.Base.noop
+};
+
+//#############################################################################
+
+SimpleTest.waitForExplicitFinish();
+Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose();
+Random.set_default_paranoia(0);
+
+//Random.addEventListener("seeded", MochiKit.Base.partial(SimpleTest.runDeferredTests, "Clipperz.Crypto.JSCrypto_vs_Clipperz", tests, {trace:false}));
+//Random.addEventListener("seeded", function () { console.log("SEEDED!")});
+
+
+MochiKit.DOM.appendChildNodes(MochiKit.DOM.currentDocument().body,
+ MochiKit.DOM.TABLE({border:'1', cellpadding:'4', cellspacing:'0'},
+ MochiKit.DOM.THEAD(),
+ MochiKit.DOM.TBODY({id:'timerTBODY'},
+ MochiKit.DOM.TR(null,
+ MochiKit.DOM.TH(null, "algorithm"),
+ MochiKit.DOM.TH(null, "ascii [" + asciiTestString.length + "]"),
+ MochiKit.DOM.TH(null, "ISO Latin 1 [" + isoLatin1TestString.length * 2 + "]"),
+ MochiKit.DOM.TH(null, "UTF 8 [" + utf8TestString.length * 3 + "]")
+ )
+ ),
+ MochiKit.DOM.TFOOT()
+ )//,
+// MochiKit.DOM.H4(null, "AES chunkSize: " + Clipperz.Crypto.AES.DeferredExecution.chunkSize),
+// MochiKit.DOM.H4(null, "AES pauseTime: " + Clipperz.Crypto.AES.DeferredExecution.pauseTime)
+);
+
+
+SimpleTest.runDeferredTests("Clipperz.Crypto.JSCrypto_vs_Clipperz", tests, {trace:false}); \ No newline at end of file