blob: 8cca2e46583b78a07a954fa112f5d5820d0b7361 [file] [log] [blame]
// See file LICENSE for more information.
library src.utils_test;
import 'package:pointycastle/src/utils.dart';
import 'package:test/test.dart';
void main() {
group('BigInt utility functions ', () {
testUnsignedEncoding();
testArbitrarySignDecoding();
testTwosComplimentBigIntEncoding();
testTwosComplimentBigIntOverRange();
});
}
void testTwosComplimentBigIntEncoding() {
test('twos compliment encoding', () {
var bi1 = BigInt.zero - BigInt.from(128);
var out = encodeBigInt(bi1);
expect([128], equals(out));
out = encodeBigIntAsUnsigned(bi1);
expect([128], equals(out));
var bi2 = BigInt.from(128);
out = encodeBigInt(bi2); // [0,128]
expect([0, 128], equals(out));
out = encodeBigIntAsUnsigned(bi2);
expect([128], equals(out));
expect(decodeBigInt(encodeBigInt(BigInt.from(-1001))),
equals(BigInt.from(-1001)));
expect(decodeBigInt(encodeBigInt(BigInt.from(0))), equals(BigInt.from(0)));
expect(decodeBigInt([0]), equals(BigInt.from(0)));
expect(decodeBigInt([]), equals(BigInt.from(0)));
});
}
void testTwosComplimentBigIntOverRange() {
test('decode encode twos compliment roundtrip', () {
for (var t = -0xFFFFFFFF; t < 0xFFFFFFFF; t += 0x1024) {
var n = BigInt.from(t);
var encoded = encodeBigInt(n);
if (n == BigInt.zero) {
expect(encoded.length, equals(1),
reason: 'Zero value is one element array with zero byte value');
expect(encoded[0], equals(0),
reason: 'Zero value is one element array with zero byte value');
} else if (n.isNegative) {
expect(encoded[0] & 0x80, equals(0x80), reason: 'sign bit must be set');
} else {
expect(encoded[0] & 0x80, equals(0), reason: 'sign bit must not set');
}
expect(n, equals(decodeBigInt(encoded)));
}
});
}
void testUnsignedEncoding() {
test('unsigned encoding', () {
expect(encodeBigIntAsUnsigned(BigInt.from(33025)), [0x81, 0x01]);
expect(encodeBigIntAsUnsigned(BigInt.from(-33025)), [0xFF, 0x7E, 0xFF]);
var theEncoded = encodeBigIntAsUnsigned(BigInt.from(0));
expect(theEncoded.length, 1);
expect(theEncoded[0], 0);
});
}
void testArbitrarySignDecoding() {
test('arbitrary sign decoding', () {
expect(decodeBigIntWithSign(1, [0x81, 0x01]), BigInt.from(33025));
expect(decodeBigIntWithSign(-1, [0xFF, 0x7E, 0xFF]), BigInt.from(-33025));
expect(decodeBigIntWithSign(1, [0xFF, 0x7E, 0xFF]), BigInt.from(16744191));
expect(decodeBigIntWithSign(0, []), BigInt.from(0));
expect(decodeBigIntWithSign(-1, [0]), BigInt.from(0));
expect(decodeBigIntWithSign(1, [0]), BigInt.from(0));
});
}