2012-03-17 21:08:23 +00:00

493 lines
28 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 {
var value_1;
var value_2;
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("a", 16);
is(value_1.asString(16), "0a");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("ffff", 16);
is(value_1.asString(16), "ffff");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("7fff", 16);
is(value_1.asString(16), "7fff");
is(parseInt("ffff", 16), 65535);
is(parseInt("ffffff", 16), 16777215);
is(parseInt("ffffffff", 16), 4294967295);
is(parseInt("ffffffffff", 16), 1099511627775);
is(parseInt("ffffffffffff", 16), 281474976710655);
is(parseInt("ffffffffffffff", 16), 72057594037927940);
is(parseInt("ffffffffffffffff", 16), 18446744073709552000);
is(parseInt("10000000000000000", 16), 18446744073709552001);
is(parseInt("10000000000000001", 16), 18446744073709552002);
is(parseInt("10000000000000009", 16), 18446744073709552010);
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("000108cbbacda1f03ea9360301045434ec7d82ba150936df08a229cbb4832ce1", 16);
is(value_1.wordSize(), 8, "check the number of words of a 64 char hex string using the 'wordSize' method");
// 000108cb bacda1f0 3ea93603 01045434 ec7d82ba 150936df 08a229cb b4832ce1
is(value_1.value()[0], parseInt("b4832ce1", 16), "word[0]");
is(value_1.value()[1], parseInt("08a229cb", 16), "word[1]");
is(value_1.value()[2], parseInt("150936df", 16), "word[2]");
is(value_1.value()[3], parseInt("ec7d82ba", 16), "word[3]");
is(value_1.value()[4], parseInt("01045434", 16), "word[4]");
is(value_1.value()[5], parseInt("3ea93603", 16), "word[5]");
is(value_1.value()[6], parseInt("bacda1f0", 16), "word[6]");
is(value_1.value()[7], parseInt("000108cb", 16), "word[7]");
is(value_1.asString(16), "0108cbbacda1f03ea9360301045434ec7d82ba150936df08a229cbb4832ce1", "asString(16)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value('10 00000000 00000000', 16);
is(value_1.wordSize(), 3, "check the number of words of a value with only a bit set on the first slot of byte at position 17");
is(value_1.value()[0], parseInt("00000000", 16), "word[0]");
is(value_1.value()[1], parseInt("00000000", 16), "word[1]");
is(value_1.value()[2], parseInt("10", 16), "word[2]");
is(value_1.asString(16), "100000000000000000", "2^17 asString(16)");
//
// XOR
//
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 16);
result = value_1.xor(value_2);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('0', 16);
is(result.asString(16), expectedResult.asString(16), "a xor a = 0");
//
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value('e3b0c442 98fc1c14 9afbf4c8 996fb924 27ae41e4 649b934c a495991b 7852b855', 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value('e3b0c442 98fc1c14 9afbf4c8 996fb924 27ae41e4 649b935c a495991b 7852b855', 16);
result = value_1.xor(value_2);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('10 00000000 00000000', 16);
is(result.asString(16), expectedResult.asString(16), "single bit difference");
//
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("01", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b935ca495991b7852b855', 16);
result = value_1.xor(value_2);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b935ca495991b7852b854', 16);
is(result.asString(16), expectedResult.asString(16), "01 xor value");
//
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value('f3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 16);
result = value_1.xor(value_2);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('1000000000000000000000000000000000000000000000000000000000000000', 16);
is(result.asString(16), expectedResult.asString(16), "first bit difference xor");
//
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value('84a2c58a', 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value('38925faf', 16);
result = value_1.xor(value_2);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('bc309a25', 16);
is(result.asString(16), expectedResult.asString(16), "84a2c58a XOR 38925faf = bc309a25");
//
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("01401ca87b8f144684a2c58ae9308c237789e4bf1f36dd117c150b7d6076dd1da6197fe4c5225a064db0e4222589d5ca50eb6bb6b7147a03f61528438a8767c6a6c4a6883fd6f067", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("0112f5c97e74737b38925fafe22cea3e12b868d4ddea5b3341db8fc2e788cab74f0a7a3cc27087a89365945369938650a99217d566e13f80dc87f08273f7411b6b01ef1d399c772a", 16);
result = value_1.xor(value_2);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('0052e96105fb673dbc309a250b1c661d65318c6bc2dc86223dce84bf87fe17aae91305d80752ddaeded570714c1a539af9797c63d1f545832a92d8c1f97026ddcdc54995064a874d', 16);
is(result.asString(16), expectedResult.asString(16), "xor");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000425", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("01ebcb09fac51945162a0775f42df6151169826efdc55dea5d17c22adb92e6b1a6ae8311545ad7e0f46f09a5b960855e673db1e803a5b94562161213204ca1f24792e81f06a4f816429a492f106cc6d0b0ff4617b736dab590590a8cff9f807a15282544404e6b35841703c9fb00a9cad1d6878d601efc25368bdc51d5ff14a81610f4fe62cb2f452aee520a16", 16);
result = value_2.xor(value_1.shiftLeft(value_2.bitSize() - value_1.bitSize()));
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value("ebcb09fac51945162a0775f42df6151169826efdc55dea5d17c22adb92e6b1a6ae8311545ad7e0f46f09a5b960855e673db1e803a5b94562161213204ca1f24792e81f06a4f892e29a492f106cc6d0b0ff4617b736dab590590a8cff9f807a15282544404e6b35841703c9fb00a9cad1d6878d601efc25368bdc51d5ff14a81610f4fe62cb2f452aee520a16", 16);
is(result.asString(16), expectedResult.asString(16), "xor");
is(result.bitSize(), 1120, "xor.bitSize");
is(result.wordSize(), 35, "result wordSize");
is(expectedResult.bitSize(), 1120, "xor.bitSize");
is(expectedResult.wordSize(), 35, "expectedResult wordSize");
is(result.compare(expectedResult), 0, "compare");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000425", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("ebcb09fac51945162a0775f42df6151169826efdc55dea5d17c22adb92e6b1a6ae8311545ad7e0f46f09a5b960855e673db1e803a5b94562161213204ca1f24792e81f06a4f892e29a492f106cc6d0b0ff4617b736dab590590a8cff9f807a15282544404e6b35841703c9fb00a9cad1d6878d601efc25368bdc51d5ff14a81610f4fe62cb2f452aee520a16", 16);
result = value_2.xor(value_1.shiftLeft(value_2.bitSize() - value_1.bitSize()));
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value("6bcb09fac51945162a0775f42df6151169826efdc55dea5d17c22adb92e6b1a6ae8311545ad7e0f46f09a5b960855e673db1e803a5b94562161213204ca1f24792e81f06a4f8d0b29a492f106cc6d0b0ff4617b736dab590590a8cff9f807a15282544404e6b35841703c9fb00a9cad1d6878d601efc25368bdc51d5ff14a81610f4fe62cb2f452aee520a16", 16);
is(result.asString(16), expectedResult.asString(16), "xor");
is(result.bitSize(), 1119, "xor.bitSize");
is(expectedResult.bitSize(), 1119, "xor.bitSize");
is(result.compare(expectedResult), 0, "compare");
// value_1 =
// value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 16);
value_1 = (new Clipperz.Crypto.ECC.BinaryField.Value("10101010 01010101 00000000", 16)).value();
value_2 = (new Clipperz.Crypto.ECC.BinaryField.Value("10101010", 16)).value();
result = new Clipperz.Crypto.ECC.BinaryField.Value(Clipperz.Crypto.ECC.BinaryField.Value._xor(value_1, value_2, 2));
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value("01010101 00000000", 16);
is(result.asString(16), expectedResult.asString(16), "xor with offset 2");
value_1 = (new Clipperz.Crypto.ECC.BinaryField.Value(" 10101010 01010101 00000000", 16)).value();
value_2 = (new Clipperz.Crypto.ECC.BinaryField.Value("10101010 10101010", 16)).value();
result = new Clipperz.Crypto.ECC.BinaryField.Value(Clipperz.Crypto.ECC.BinaryField.Value._xor(value_1, value_2, 2));
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value("10101010 00000000 01010101 00000000", 16);
is(result.asString(16), expectedResult.asString(16), "xor with offset 2 (2)");
//
// isZero
//
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value('0', 16);
is(value_1.isZero(), true, "0.isZero() == true");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value('1', 16);
is(value_1.isZero(), false, "1.isZero() == false");
//
// Comparison
//
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("0", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("0", 16);
is (value_1.compare(value_2), 0, "BinaryField.value(0) = BinaryField.value(0)");
// is (value_1.compare(0), 0, "BinaryField.value(0) = 0");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("000108cbbacda1f03ea9360301045434ec7d82ba150936df08a229cbb4832ce1", 16);
is (value_1.compare(value_2), 1, "BinaryField.value(xxxxxx) != BinaryField.value(0)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("000108cbbacda1f03ea9360301045434ec7d82ba150936df08a229cbb4832ce1", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("0", 16);
is(value_1.compare(value_2), 1, "BinaryField.value(xxxxxx) > BinaryField.value(0)");
is(value_2.compare(value_1), -1, "BinaryField.value(0) < BinaryField.value(xxxx)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("000108cbbacda1f03ea9360301045434ec7d82ba150936df08a229cbb4832ce1", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("05", 16);
is(value_1.compare(value_2), 1, "BinaryField.value(xxxxxx) > BinaryField.value(05)");
is(value_2.compare(value_1), -1, "BinaryField.value(05) < BinaryField.value(xxxx)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("-10", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("10", 16);
is(value_1.compare(value_2), -1, "BinaryField.value(-10) - BinaryField.value(10). No negative number are managed");
//
// more comparison
//
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", 16);
result = value_1.compare(value_2);
is(result, 0, "equal compare");
//
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("e3b0c442", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("f3b0c442", 16);
result = value_1.compare(value_2);
is(result, -1, "second term with one more bit at the leftmost - compare (1)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("e3b0c442 98fc1c14", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("f3b0c442 98fc1c14", 16);
result = value_1.compare(value_2);
is(result, -1, "second term with one more bit at the leftmost - compare (2)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("e3b0c442 98fc1c14 9afbf4c8", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("f3b0c442 98fc1c14 9afbf4c8", 16);
result = value_1.compare(value_2);
is(result, -1, "second term with one more bit at the leftmost - compare (3)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("e3b0c442 98fc1c14 9afbf4c8 996fb924 27ae41e4 649b934c a495991b 7852b855", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("f3b0c442 98fc1c14 9afbf4c8 996fb924 27ae41e4 649b934c a495991b 7852b855", 16);
result = value_1.compare(value_2);
is(result, -1, "second term with one more bit at the leftmost - compare (n)");
//
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("f3b0c442", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("e3b0c442", 16);
result = value_1.compare(value_2);
is(result, 1, "first term with one more bit at the leftmost - compare (1)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("f3b0c442 98fc1c14", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("e3b0c442 98fc1c14", 16);
result = value_1.compare(value_2);
is(result, 1, "first term with one more bit at the leftmost - compare (2)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("f3b0c442 98fc1c14 9afbf4c8 996fb924 27ae41e4 649b934c a495991b 7852b855", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("e3b0c442 98fc1c14 9afbf4c8 996fb924 27ae41e4 649b934c a495991b 7852b855", 16);
result = value_1.compare(value_2);
is(result, 1, "first term with one more bit at the leftmost - compare (n)");
//
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("e3b0c44298fc1c149afbf4c8996fb92427af41e4649b934ca495991b7852b855", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", 16);
result = value_1.compare(value_2);
is(result, 1, "first term with one more bit in the middle - compare");
//
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("e3b0c44298fc1c149afbf4c8996fb92427af41e4649b934ca495991b7852b855", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("e3b0c44298fc1c149afbf4c8996fb92427aeffffffffffffffffffffffffffff", 16);
result = value_1.compare(value_2);
is(result, 1, "first term with one more bit in the middle - compare");
//
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", 16);
value_2 = new Clipperz.Crypto.ECC.BinaryField.Value("05", 16);
result = value_1.compare(value_2);
is(result, 1, "equal compare");
//
// isBitSet
//
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("ff", 16);
result = value_1.isBitSet(1);
expectedResult = true;
is(result, expectedResult, "'ff'.isBitSet(1)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("f0", 16);
result =value_1.isBitSet(1);
expectedResult = false;
is(result, expectedResult, "'f0'.isBitSet(1)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("f0", 16);
result = value_1.isBitSet(3);
expectedResult = false;
is(result, expectedResult, "'f0'.isBitSet(3)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("f0", 16);
result = value_1.isBitSet(4);
expectedResult = true;
is(result, expectedResult, "'f0'.isBitSet(4)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("ff00", 16);
result = value_1.isBitSet(7);
expectedResult = false;
is(result, expectedResult, "'ff00'.isBitSet(7)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("ff00", 16);
result = value_1.isBitSet(8);
expectedResult = true;
is(result, expectedResult, "'ff00'.isBitSet(8)");
//
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("05000000000000", 16);
result = value_1.isBitSet(47);
expectedResult = false;
is(result, expectedResult, "'05000000000000'.isBitSet(47)");
result = value_1.isBitSet(48);
expectedResult = true;
is(result, expectedResult, "'05000000000000'.isBitSet(48)");
result = value_1.isBitSet(49);
expectedResult = false;
is(result, expectedResult, "'05000000000000'.isBitSet(49)");
result = value_1.isBitSet(50);
expectedResult = true;
is(result, expectedResult, "'05000000000000'.isBitSet(50)");
result = value_1.isBitSet(51);
expectedResult = false;
is(result, expectedResult, "'05000000000000'.isBitSet(51)");
//
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", 16);
result = value_1.isBitSet(52);
is(result, true, "'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'.isBitSet(52)");
result = value_1.isBitSet(53);
is(result, false, "'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'.isBitSet(53)");
result = value_1.isBitSet(54);
is(result, false, "'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'.isBitSet(54)");
result = value_1.isBitSet(55);
is(result, true, "'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'.isBitSet(55)");
result = value_1.isBitSet(56);
is(result, false, "'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'.isBitSet(56)");
result = value_1.isBitSet(57);
is(result, false, "'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'.isBitSet(57)");
result = value_1.isBitSet(58);
is(result, true, "'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'.isBitSet(58)");
result = value_1.isBitSet(59);
is(result, false, "'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'.isBitSet(59)");
result = value_1.isBitSet(60);
is(result, false, "'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'.isBitSet(60)");
//
// shiftLeft
//
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("7f", 16);
result = value_1.shiftLeft(1);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('fe', 16);
is(result.asString(16), expectedResult.asString(16), "'7f'.shiftLeft(1)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("ff", 16);
result = value_1.shiftLeft(1);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('01fe', 16);
is(result.asString(16), expectedResult.asString(16), "'ff'.shiftLeft(1)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value( 'ffff', 16);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('ffff00', 16);
result = value_1.shiftLeft(8);
is(result.asString(16), expectedResult.asString(16), "ffff.shiftLeft(8)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value( '80000000', 16);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('1 00000000', 16);
result = value_1.shiftLeft(1);
is(result.compare(expectedResult) == 0, true, '8000000.shiftLeft(1).compare');
is(result.asString(16), expectedResult.asString(16), "80000000.shiftLeft(1)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value('20000000', 16);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('40000000', 16);
result = value_1.shiftLeft(1);
is(result.compare(expectedResult) == 0, true, '2000000.shiftLeft(1).compare');
is(result.asString(16), expectedResult.asString(16), "20000000.shiftLeft(1)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value('40000000', 16);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('80000000', 16);
result = value_1.shiftLeft(1);
is(result.compare(expectedResult) == 0, true, '4000000.shiftLeft(1).compare');
is(result.asString(16), expectedResult.asString(16), "40000000.shiftLeft(1)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value( 'ff7fffff', 16);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('ff 7fffff00', 16);
result = value_1.shiftLeft(8);
is(result.asString(16), expectedResult.asString(16), "ff7fffff.shiftLeft(8)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value( 'ffffffff', 16);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('ff ffffff00', 16);
result = value_1.shiftLeft(8);
is(result.asString(16), expectedResult.asString(16), "ffffffff.shiftLeft(8)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value( "e3b0c442 98fc1c14 9afbf4c8 996fb924 27ae41e4 649b934c a495991b 7852b855", 16);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('3 8ec3110a 63f07052 6befd322 65bee490 9eb90791 926e4d32 9256646d e14ae154', 16);
result = value_1.shiftLeft(2);
is(result.asString(16), expectedResult.asString(16), "Value.shiftLeft(10)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", 16);
result = value_1.shiftLeft(8);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b85500', 16);
is(result.asString(16), expectedResult.asString(16), "Value.shiftLeft(8)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", 16);
result = value_1.shiftLeft(10);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('38e c3110a63 f070526b efd32265 bee4909e b9079192 6e4d3292 56646de1 4ae15400', 16);
is(result.asString(16), expectedResult.asString(16), "Value.shiftLeft(10)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("ff", 16);
result = value_1.shiftLeft(32);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('ff00000000', 16);
is(result.asString(16), expectedResult.asString(16), "ff.shiftLeft(32)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("ff", 16);
result = value_1.shiftLeft(4096);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 16);
is(result.asString(16), expectedResult.asString(16), "bigInt.shiftLeft(4096)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("ff", 16);
result = value_1.shiftLeft(5000);
expectedResult = new Clipperz.Crypto.ECC.BinaryField.Value('ff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 16);
is(result.asString(16), expectedResult.asString(16), "bigInt.shiftLeft(4096)");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("0", 16);
is(value_1.bitSize(), 0, "0.bitSize()");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("10", 16);
is(value_1.bitSize(), 5, "10.bitSize()");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("80", 16);
is(value_1.bitSize(), 8, "80.bitSize()");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("ff", 16);
is(value_1.bitSize(), 8, "ff.bitSize()");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("100", 16);
is(value_1.bitSize(), 9, "100.bitSize()");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("80000000", 16);
is(value_1.bitSize(), 32, "80000000.bitSize()");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("ffffffff", 16);
is(value_1.bitSize(), 32, "ffffffff.bitSize()");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("1 00000000", 16);
is(value_1.bitSize(), 33, "100000000.bitSize()");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("8000 00000000", 16);
is(value_1.bitSize(), 48, "8000 00000000.bitSize()");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("ffff ffffffff", 16);
is(value_1.bitSize(), 48, "ffff ffffffff.bitSize()");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("10000 00000000", 16);
is(value_1.bitSize(), 49, "10000 00000000.bitSize()");
value_1 = new Clipperz.Crypto.ECC.BinaryField.Value("6bcb09fac51945162a0775f42df6151169826efdc55dea5d17c22adb92e6b1a6ae8311545ad7e0f46f09a5b960855e673db1e803a5b94562161213204ca1f24792e81f06a4f8d0b29a492f106cc6d0b0ff4617b736dab590590a8cff9f807a15282544404e6b35841703c9fb00a9cad1d6878d601efc25368bdc51d5ff14a81610f4fe62cb2f452aee520a16", 16);
is(value_1.bitSize(), 1119, "6bcb09fac51945162a0775f42df6151169826efdc55dea5d17c22adb92e6b1a6ae8311545ad7e0f46f09a5b960855e673db1e803a5b94562161213204ca1f24792e81f06a4f8d0b29a492f106cc6d0b0ff4617b736dab590590a8cff9f807a15282544404e6b35841703c9fb00a9cad1d6878d601efc25368bdc51d5ff14a81610f4fe62cb2f452aee520a16.bitSize()");
//-------------------------------------------------------------------------
} 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>