206 lines
12 KiB
HTML
206 lines
12 KiB
HTML
<!--
|
|
|
|
Copyright 2008-2011 Clipperz Srl
|
|
|
|
This file is part of Clipperz Community Edition.
|
|
Clipperz Community Edition is an 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 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.
|
|
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/>.
|
|
|
|
-->
|
|
|
|
<html>
|
|
<head>
|
|
<script type="text/javascript" src="../../../../js/MochiKit/MochiKit.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/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/ECC.js'></script>-->
|
|
<script type='text/javascript' src='../../../../js/Clipperz/Crypto/ECC/BinaryField/Value.js'></script>
|
|
<script type='text/javascript' src='../../../../js/Clipperz/Crypto/ECC/BinaryField/Point.js'></script>
|
|
<script type='text/javascript' src='../../../../js/Clipperz/Crypto/ECC/BinaryField/FiniteField.js'></script>
|
|
<script type='text/javascript' src='../../../../js/Clipperz/Crypto/ECC/BinaryField/Curve.js'></script>
|
|
<script type='text/javascript' src='../../../../js/Clipperz/Crypto/Functions.js'></script>
|
|
</head>
|
|
<body>
|
|
<pre id="test">
|
|
<script type="text/javascript">
|
|
try {
|
|
//
|
|
// ECC.BinaryFiniteField
|
|
//
|
|
var f2m;
|
|
var f2m_improved;
|
|
var a, a1, b;
|
|
var result;
|
|
var result_improved;
|
|
var expectedResul;
|
|
|
|
f2m = new Clipperz.Crypto.ECC.BinaryField.FiniteField({modulus:new Clipperz.Crypto.ECC.BinaryField.Value('08000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 000010a1', 16)})
|
|
f2m_improved = Clipperz.Crypto.ECC.StandardCurves.B283().finiteField();
|
|
a = new Clipperz.Crypto.ECC.BinaryField.Value("05c91e41 d9ca17ef 9d8a33c1 a44eba6d 368fde02 1c492077 1a46eb01 a481e5f7 f430749d", 16);
|
|
b = new Clipperz.Crypto.ECC.BinaryField.Value("07377071 2de7d57b a803f65f 45786c06 876b8066 db75ec47 81c053b0 a0f78e2c a6ab5187", 16);
|
|
|
|
//
|
|
// addition
|
|
//
|
|
result = f2m.add(a, b);
|
|
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value("2fe6e30f42dc2943589c59ee136d66bb1e45e64c73ccc309b86b8b104766bdb529b251a", 16);
|
|
is(result.asString(16), expectedResult.asString(16), "ECC.BinaryFinetField.add");
|
|
|
|
|
|
//
|
|
// negation
|
|
//
|
|
result = f2m.negate(a);
|
|
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value("5c91e41d9ca17ef9d8a33c1a44eba6d368fde021c4920771a46eb01a481e5f7f430749d", 16);
|
|
is(result.asString(16), expectedResult.asString(16), "ECC.BinaryFinetField.negate");
|
|
|
|
|
|
//
|
|
// multiplication
|
|
//
|
|
result = f2m.multiply(a, b);
|
|
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value("2bacb89668741f6d1f7fd7d3df2f045814086adba11d8bb5f12f3f9851e3b66fbe283cb", 16);
|
|
is(result.asString(16), expectedResult.asString(16), "ECC.BinaryFinetField.multiply");
|
|
|
|
|
|
//
|
|
// fast multiplication
|
|
//
|
|
result = f2m.fastMultiply(a, b);
|
|
expectedResult = f2m.multiply(a, b);
|
|
is(result.asString(16), expectedResult.asString(16), "ECC.BinaryFinetField.fastMultiply");
|
|
|
|
a = new Clipperz.Crypto.ECC.BinaryField.Value("2fe6e30f42dc2943589c59ee136d66bb1e45e64c73ccc309b86b8b104766bdb529b251a", 16);
|
|
b = new Clipperz.Crypto.ECC.BinaryField.Value("5c91e41d9ca17ef9d8a33c1a44eba6d368fde021c4920771a46eb01a481e5f7f430749d", 16);
|
|
result = f2m.fastMultiply(a, b);
|
|
expectedResult = f2m.multiply(a, b);
|
|
is(result.asString(16), expectedResult.asString(16), "ECC.BinaryFinetField.B283.fastMultiply");
|
|
|
|
//
|
|
// square
|
|
//
|
|
a = new Clipperz.Crypto.ECC.BinaryField.Value("1111", 16);
|
|
result = f2m.square(a);
|
|
expectedResult = f2m.multiply(a, a);
|
|
is(result.asString(16), expectedResult.asString(16), "ECC.BinaryFinetField.square");
|
|
|
|
a = new Clipperz.Crypto.ECC.BinaryField.Value("11111111", 16);
|
|
result = f2m.square(a);
|
|
expectedResult = f2m.multiply(a, a);
|
|
is(result.asString(16), expectedResult.asString(16), "ECC.BinaryFinetField.square");
|
|
|
|
a = new Clipperz.Crypto.ECC.BinaryField.Value("5c91e41d9ca17ef9d8a33c1a44eba6d368fde021c4920771a46eb01a481e5f7f430749d", 16);
|
|
result = f2m.square(a);
|
|
expectedResult = f2m.multiply(a, a);
|
|
is(result.asString(16), expectedResult.asString(16), "ECC.BinaryFinetField.square");
|
|
|
|
|
|
//
|
|
// inverse
|
|
//
|
|
a = new Clipperz.Crypto.ECC.BinaryField.Value("2fe6e30f42dc2943589c59ee136d66bb1e45e64c73ccc309b86b8b104766bdb529b251a", 16);
|
|
result = f2m.inverse(a);
|
|
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value("3812fc574f3728c60384e141c0e2a808e21adec22dcd407b9e25dd13c6d1bf22defd84a", 16);
|
|
is(result.asString(16), expectedResult.asString(16), "ECC.BinaryFinetField.inverse");
|
|
|
|
|
|
//
|
|
// module
|
|
//
|
|
|
|
a = new Clipperz.Crypto.ECC.BinaryField.Value("015655ebcb09fac51945162a0775f42df6151169826efdc55dea5d17c22adb92e6b1a6ae8311545ad7e0f46f09a5b960855e673db1e803a5b94562161213204ca1f24792e81f060a0aa6c29a492f106cc6d0b0ff4617b736dab590590a8cff9f807a15282544404e6b35841703c9fb00a9cad1d6878d601efc25368bdc51d5ff14a81610f4fe62cb2f452aee520a16", 16);
|
|
a1 = new Clipperz.Crypto.ECC.BinaryField.Value("015655ebcb09fac51945162a0775f42df6151169826efdc55dea5d17c22adb92e6b1a6ae8311545ad7e0f46f09a5b960855e673db1e803a5b94562161213204ca1f24792e81f060a0aa6c29a492f106cc6d0b0ff4617b736dab590590a8cff9f807a15282544404e6b35841703c9fb00a9cad1d6878d601efc25368bdc51d5ff14a81610f4fe62cb2f452aee520a16", 16);
|
|
result = f2m.module(a);
|
|
result_improved = f2m_improved.module(a1);
|
|
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value("2bacb89668741f6d1f7fd7d3df2f045814086adba11d8bb5f12f3f9851e3b66fbe283cb", 16);
|
|
is(result.asString(16), expectedResult.asString(16), "ECC.BinaryFiniteField.module");
|
|
is(result_improved.asString(16), expectedResult.asString(16), "ECC.BinaryFiniteField.module (improved)");
|
|
is(result.asString(16), result_improved.asString(16), "standard vs improved 'module' methods");
|
|
|
|
|
|
a = new Clipperz.Crypto.ECC.BinaryField.Value("1401ca87b8f144684a2c58ae9308c237789e4bf1f36dd117c150b7d6076dd1da6197fe4c5225a064db0e4222589d5ca50eb6bb6b7147a03f61528438a8767c6a6c4a6883fd6f067112f5c97e74737b38925fafe22cea3e12b868d4ddea5b3341db8fc2e788cab74f0a7a3cc27087a89365945369938650a99217d566e13f80dc87f08273f7411b6b01ef1d399c772a", 16);
|
|
a1 = new Clipperz.Crypto.ECC.BinaryField.Value("1401ca87b8f144684a2c58ae9308c237789e4bf1f36dd117c150b7d6076dd1da6197fe4c5225a064db0e4222589d5ca50eb6bb6b7147a03f61528438a8767c6a6c4a6883fd6f067112f5c97e74737b38925fafe22cea3e12b868d4ddea5b3341db8fc2e788cab74f0a7a3cc27087a89365945369938650a99217d566e13f80dc87f08273f7411b6b01ef1d399c772a", 16);
|
|
result = f2m.module(a);
|
|
result_improved = f2m_improved.module(a1);
|
|
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value("15e2097d116e745ac47480807cb5eb99dad902728aaf5692241063bc70a5b372dbce798", 16);
|
|
is(result.asString(16), expectedResult.asString(16), "ECC.BinaryFiniteField.module (2)");
|
|
is(result_improved.asString(16), expectedResult.asString(16), "ECC.BinaryFiniteField.module (improved) (2)");
|
|
is(result.asString(16), result_improved.asString(16), "standard vs improved 'module' methods (2)");
|
|
|
|
|
|
a = new Clipperz.Crypto.ECC.BinaryField.Value("112f5c97e74737b38925fafe22cea3e12b868d4ddea5b3341db8fc2e788cab74f0a7a3cc27087a89365945369938650a99217d566e13f80dc87f08273f7411b6b01ef1d399c772a1401ca87b8f144684a2c58ae9308c237789e4bf1f36dd117c150b7d6076dd1da6197fe4c5225a064db0e4222589d5ca50eb6bb6b7147a03f61528438a8767c6a6c4a6883fd6f067", 16);
|
|
a1 = new Clipperz.Crypto.ECC.BinaryField.Value("112f5c97e74737b38925fafe22cea3e12b868d4ddea5b3341db8fc2e788cab74f0a7a3cc27087a89365945369938650a99217d566e13f80dc87f08273f7411b6b01ef1d399c772a1401ca87b8f144684a2c58ae9308c237789e4bf1f36dd117c150b7d6076dd1da6197fe4c5225a064db0e4222589d5ca50eb6bb6b7147a03f61528438a8767c6a6c4a6883fd6f067", 16);
|
|
result = f2m.module(a);
|
|
result_improved = f2m_improved.module(a1);
|
|
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value("40f04cec8fe9caedf82adeff7e1aa06dcb9d08e097db8be2ad54b2ddc2e752152395623", 16);
|
|
is(result.asString(16), expectedResult.asString(16), "ECC.BinaryFiniteField.module (3)");
|
|
is(result_improved.asString(16), expectedResult.asString(16), "ECC.BinaryFiniteField.module (improved) (3)");
|
|
is(result.asString(16), result_improved.asString(16), "standard vs improved 'module' methods (3)");
|
|
|
|
|
|
a = new Clipperz.Crypto.ECC.BinaryField.Value("02f4bf57710a7e0826a80a339e59e34476c343e75452e4bf4355847e6b41e655ecb08f4c418b172d7963c525c26fdc84ac294a348d3907652f0fcbff3e4c8e2238a478e4277489ce", 16);
|
|
is(a.asString(16), "02f4bf57710a7e0826a80a339e59e34476c343e75452e4bf4355847e6b41e655ecb08f4c418b172d7963c525c26fdc84ac294a348d3907652f0fcbff3e4c8e2238a478e4277489ce", "ECC.BinaryFiniteField - original value as expected (4)")
|
|
a1 = new Clipperz.Crypto.ECC.BinaryField.Value("02f4bf57710a7e0826a80a339e59e34476c343e75452e4bf4355847e6b41e655ecb08f4c418b172d7963c525c26fdc84ac294a348d3907652f0fcbff3e4c8e2238a478e4277489ce", 16);
|
|
result = f2m.module(a);
|
|
result_improved = f2m_improved.module(a1);
|
|
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value("ba35032a24eb81238251d85824998bebae3b3e09f4d3845256c87585cf62416ee43191", 16);
|
|
is(result.asString(16), expectedResult.asString(16), "ECC.BinaryFiniteField.module (4)");
|
|
is(result_improved.asString(16), expectedResult.asString(16), "ECC.BinaryFiniteField.module (improved) (4)");
|
|
is(result_improved.asString(16), "ba35032a24eb81238251d85824998bebae3b3e09f4d3845256c87585cf62416ee43191", "ECC.BinaryFinetField.module (static check) (4)");
|
|
is(result.asString(16), result_improved.asString(16), "standard vs improved 'module' methods (4)");
|
|
|
|
is(a.asString(16), "02f4bf57710a7e0826a80a339e59e34476c343e75452e4bf4355847e6b41e655ecb08f4c418b172d7963c525c26fdc84ac294a348d3907652f0fcbff3e4c8e2238a478e4277489ce", "ECC.BinaryFiniteField - original value preserved by standard method (4)")
|
|
is(a1.asString(16), "02f4bf57710a7e0826a80a339e59e34476c343e75452e4bf4355847e6b41e655ecb08f4c418b172d7963c525c26fdc84ac294a348d3907652f0fcbff3e4c8e2238a478e4277489ce", "ECC.BinaryFiniteField - original value preserved by improved method (4)")
|
|
|
|
|
|
a = new Clipperz.Crypto.ECC.BinaryField.Value("2f4bf57710a7e0826a80a339e59e34476c343e75452e4bf4355847e6b41e655ecb08f4c418b172d7963c525c26fdc84ac294a348d3907652f0fcbff3e4c8e2238a478e4277489ce", 16);
|
|
result_improved = f2m_improved.module(a);
|
|
result = f2m.module(a);
|
|
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value("ba35032a24eb81238251d85824998bebae3b3e09f4d3845256c87585cf62416ee43191", 16);
|
|
is(result.asString(16), expectedResult.asString(16), "ECC.BinaryFiniteField.module (5)");
|
|
is(result_improved.asString(16), expectedResult.asString(16), "ECC.BinaryFiniteField.module (improved) (5)");
|
|
is(result_improved.asString(16), "ba35032a24eb81238251d85824998bebae3b3e09f4d3845256c87585cf62416ee43191", "ECC.BinaryFinetField.module (static check) (5)");
|
|
is(result.asString(16), result_improved.asString(16), "standard vs improved 'module' methods (5)");
|
|
|
|
//-------------------------------------------------------------------------
|
|
} 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>
|