summaryrefslogtreecommitdiff
path: root/frontend/gamma/tests/tests/Clipperz/Crypto/SRP.html
Side-by-side diff
Diffstat (limited to 'frontend/gamma/tests/tests/Clipperz/Crypto/SRP.html') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/gamma/tests/tests/Clipperz/Crypto/SRP.html161
1 files changed, 161 insertions, 0 deletions
diff --git a/frontend/gamma/tests/tests/Clipperz/Crypto/SRP.html b/frontend/gamma/tests/tests/Clipperz/Crypto/SRP.html
new file mode 100644
index 0000000..63278c4
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/Crypto/SRP.html
@@ -0,0 +1,161 @@
+<!--
+
+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/>.
+
+-->
+
+<html>
+<head>
+ <script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script>
+ <script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">
+
+ <script type='text/javascript' src='../../../../js/Clipperz/YUI/Utils.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/YUI/DomHelper.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Base.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/ByteArray.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/BigInt.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/Base.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SHA.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/AES.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/PRNG.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SRP.js'></script>
+</head>
+<body>
+<pre id="test">
+<script type="text/javascript">
+hashString = function(aValue) {
+ return Clipperz.Crypto.SHA.sha256(new Clipperz.ByteArray(aValue)).toHexString().substring(2)
+}
+try {
+ var username;
+ var passphrase;
+
+ var C;
+ var P;
+ var encryptedText_1;
+ var encryptedText_2;
+ var salt;
+ var x;
+ var v;
+ var v1;
+
+ username = "giulio.cesare";
+ passphrase = "trustno1";
+
+ C = hashString(username);
+ is (C, "bde3c7b5fdcd9d6ce72782ca1ae912fc4397d668fcb3a73a04e5d47852670c4a", "C");
+
+ P = hashString(passphrase + username);
+ is (P, "d79f5c5a04e91e1c85fb64cb6ee9481cb52c181047f69da02cd6c3ce6d058a76", "P");
+
+ salt = "cf1fa93393ade60318b8276f1f39420098419445005a7dc9117975fe1f8d9988";
+
+ x = hashString(salt + P);
+ is(x, "21fe88a158e420aade86e00b5eb12a4c19bf15482fa34c542c90b1afdbd5b5fd", "x");
+
+ v = Clipperz.Crypto.SRP.g().powerModule(new Clipperz.Crypto.BigInt(x, 16), Clipperz.Crypto.SRP.n());
+ is(v.asString(10), "33816467430011076413789931449607305355248467973000153409872503376381719918118", "v");
+ is(v.asString(16), "4ac37139dbf32ebabd2c43f91dd085066d3c457d059efd5902d32ed247fcb626", "v (base 16)");
+
+// encryptedText_1 = Clipperz.Crypto.Base.encryptUsingSecretKey(passphrase, username);
+// encryptedText_2 = Clipperz.Crypto.Base.encryptUsingSecretKey(passphrase, username);
+// is (encryptedText_1 != encryptedText_2, true, "Two round of encryption (with random padding bits) should NOT produce the same result");
+
+ //-------------------------------------------------------------------------
+
+ username = "giulio.cesare.debug";
+ passphrase = "trustno1";
+
+ C = hashString(username);
+ is (C, "fa1af609123b97a10d676158ed538d4657a89ac33a102b22bd9a66712039e208", "C");
+
+ P = hashString(passphrase + username);
+ is (P, "e1bfba03dd626b12f29458a6ad63fb2c01b4765548504e1e2f6b1503c82e4253", "P");
+
+ salt = "cf1fa93393ade60318b8276f1f39420098419445005a7dc9117975fe1f8d9988";
+
+ x = hashString(salt + P);
+ is(x, "93d4af3cdcd2447a745d309826dff3161feed4b15f32db8e909ff032a2bc8fb8", "x");
+
+ v = Clipperz.Crypto.SRP.g().powerModule(new Clipperz.Crypto.BigInt(x, 16), Clipperz.Crypto.SRP.n());
+ is(v.asString(10), "115049747015252903452664067168789229427785288458366249918596663144588656606556", "v");
+
+// encryptedText_1 = Clipperz.Crypto.Base.encryptUsingSecretKey(passphrase, username);
+// encryptedText_2 = Clipperz.Crypto.Base.encryptUsingSecretKey(passphrase, username);
+// is (encryptedText_1 != encryptedText_2, true, "Two round of encryption (with random padding bits) should NOT produce the same result");
+
+ //-------------------------------------------------------------------------
+
+ var srpConnection;
+ var C, P, salt;
+
+ C = "da8602c2f847306f4eb9acdaad925277d1fad1408f173f128a078aea15e60b1e";
+ P = "77643559beca49dd21c1c31db10bb0a9009662cb504413dc3fa3b7303c7e02ba";
+ salt = "000108cbbacda1f03ea9360301045434ec7d82ba150936df08a229cbb4832ce1";
+
+ srpConnection = new Clipperz.Crypto.SRP.Connection({C:C, P:P, hash:Clipperz.Crypto.SHA.sha_d256});
+ srpConnection._a = new Clipperz.Crypto.BigInt("37532428169486597638072888476611365392249575518156687476805936694442691012367", 10);
+ srpConnection.set_s(new Clipperz.Crypto.BigInt(salt, 16));
+ is (srpConnection.s().asString(16, 64), salt, "salt read/write is coherent");
+ srpConnection.set_B(new Clipperz.Crypto.BigInt("123541032067854367017620977654446651448957899464139861291542193929199957895435", 10));
+
+ is( srpConnection.serverSideCredentialsWithSalt(salt).v,
+ "c73169c8236d37bf9ef11a2349e3064b7dc6e883a58d64443ea9235677520030",
+ "server side credentials - v"
+ )
+ is(srpConnection.S(), "84134227508133659832466942692590826994401065200828529664948840490489960952050", "Server side 'S'");
+//MochiKit.Logging.logDebug("=== serverSideCredentials: " + MochiKit.Base.serializeJSON(srpConnection.serverSideCredentialsWithSalt(salt)));
+
+ srpConnection = new Clipperz.Crypto.SRP.Connection({C:C, P:P, hash:Clipperz.Crypto.SHA.sha_d256});
+ try {
+ srpConnection.set_B(new Clipperz.Crypto.BigInt("0", 10));
+ ok(false, "Setting B to 0 should raise an exception");
+ } catch(e) {
+ ok(true, "Setting B to 0 should raise an exception");
+ }
+ //-------------------------------------------------------------------------
+
+} catch (err) {
+
+ var s = "test suite failure!\n";
+ var o = {};
+ var k = null;
+ for (k in err) {
+ // ensure unique keys?!
+ if (!o[k]) {
+ s += k + ": " + err[k] + "\n";
+ o[k] = err[k];
+ }
+ }
+ ok ( false, s );
+}
+
+</script>
+</pre>
+</body>
+</html>