173 lines
5.2 KiB
Dart
173 lines
5.2 KiB
Dart
import 'dart:convert' as cvt;
|
|
|
|
import 'package:hashlib_codecs/hashlib_codecs.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
import './utils.dart';
|
|
|
|
void main() {
|
|
group('Test base64', () {
|
|
test('parameter overrides', () {
|
|
var inp = [0x3, 0xF1];
|
|
var out = "A/E=";
|
|
var npo = "A/E";
|
|
var act = toBase64(inp);
|
|
expect(act, equals(out));
|
|
act = toBase64(
|
|
inp,
|
|
codec: Base64Codec.standard,
|
|
);
|
|
expect(act, equals(out));
|
|
act = toBase64(
|
|
inp,
|
|
codec: Base64Codec.standard,
|
|
padding: false,
|
|
);
|
|
expect(act, equals(npo));
|
|
act = toBase64(
|
|
inp,
|
|
codec: Base64Codec.standard,
|
|
url: true,
|
|
);
|
|
expect(act, equals(out));
|
|
act = toBase64(
|
|
inp,
|
|
codec: Base64Codec.standard,
|
|
padding: false,
|
|
url: true,
|
|
);
|
|
expect(act, equals(npo));
|
|
});
|
|
test('encoding [0, 0, 0, 0] => AAAAAA==', () {
|
|
var inp = [0, 0, 0, 0];
|
|
var out = "AAAAAA==";
|
|
expect(toBase64(inp), equals(out));
|
|
});
|
|
test('decoding AAAAAA== => [0, 0, 0, 0]', () {
|
|
var inp = [0, 0, 0, 0];
|
|
var out = "AAAAAA==";
|
|
expect(fromBase64(out), equals(inp));
|
|
});
|
|
test('encoding no padding [0, 0, 0, 0] => AAAAAA', () {
|
|
var inp = [0, 0, 0, 0];
|
|
var out = "AAAAAA";
|
|
var act = toBase64(inp, padding: false);
|
|
expect(act, equals(out));
|
|
});
|
|
test('decoding no padding AAAAAA => [0, 0, 0, 0]', () {
|
|
var inp = [0, 0, 0, 0];
|
|
var out = "AAAAAA";
|
|
expect(fromBase64(out), equals(inp));
|
|
});
|
|
test('encoding no padding', () {
|
|
for (int i = 0; i < 100; ++i) {
|
|
var b = randomBytes(i);
|
|
var r = cvt.base64Encode(b).replaceAll('=', '');
|
|
var a = toBase64(b, padding: false);
|
|
expect(a, r, reason: 'length $i');
|
|
}
|
|
});
|
|
test('decoding no padding', () {
|
|
for (int i = 0; i < 100; ++i) {
|
|
var b = randomBytes(i);
|
|
var r = cvt.base64Encode(b).replaceAll('=', '');
|
|
expect(fromBase64(r), equals(b), reason: 'length $i');
|
|
}
|
|
});
|
|
test('encoding with padding', () {
|
|
for (int i = 0; i < 100; ++i) {
|
|
var b = randomBytes(i);
|
|
var r = cvt.base64Encode(b);
|
|
expect(toBase64(b), r, reason: 'length $i');
|
|
}
|
|
});
|
|
test('decoding with padding', () {
|
|
for (int i = 0; i < 100; ++i) {
|
|
var b = randomBytes(i);
|
|
var r = cvt.base64Encode(b);
|
|
expect(fromBase64(r), equals(b), reason: 'length $i');
|
|
}
|
|
});
|
|
test('encoding <-> decoding no padding', () {
|
|
for (int i = 0; i < 100; ++i) {
|
|
var b = randomBytes(i);
|
|
var r = toBase64(b, padding: false);
|
|
expect(fromBase64(r), equals(b), reason: 'length $i');
|
|
}
|
|
});
|
|
test('encoding <-> decoding with padding', () {
|
|
for (int i = 0; i < 100; ++i) {
|
|
var b = randomBytes(i);
|
|
var r = toBase64(b);
|
|
expect(fromBase64(r), equals(b), reason: 'length $i');
|
|
}
|
|
});
|
|
test('[bcrypt] encoding <-> decoding', () {
|
|
for (int i = 0; i < 100; ++i) {
|
|
var b = randomBytes(i);
|
|
var r = toBase64(b, codec: Base64Codec.bcrypt);
|
|
var a = fromBase64(r, codec: Base64Codec.bcrypt);
|
|
expect(a, equals(b), reason: 'length $i');
|
|
}
|
|
});
|
|
group('decoding with invalid chars', () {
|
|
test('Hashlib!', () {
|
|
try {
|
|
fromBase64("Hashlib!");
|
|
throw Exception('No error thrown');
|
|
} on FormatException catch (err) {
|
|
expect(err.message, equals("Invalid character 33"));
|
|
}
|
|
});
|
|
test('a.10', () {
|
|
try {
|
|
fromBase64("a.10");
|
|
throw Exception('No error thrown');
|
|
} on FormatException catch (err) {
|
|
expect(err.message, equals("Invalid character 46"));
|
|
}
|
|
});
|
|
test('s*methings', () {
|
|
try {
|
|
fromBase64("s*methings");
|
|
throw Exception('No error thrown');
|
|
} on FormatException catch (err) {
|
|
expect(err.message, equals("Invalid character 42"));
|
|
}
|
|
});
|
|
});
|
|
test("decoding with PHC string format B64 (16 bytes)", () {
|
|
var inp = "gZiV/M1gPc22ElAH/Jh1Hw";
|
|
var out = fromBase64(inp, padding: false);
|
|
var res = toBase64(out, padding: false);
|
|
expect(res, inp);
|
|
// String "CWOrkoo7oJBQ/iyh7uJ0LO2aLEfrHwTWllSAxT0zRno"
|
|
});
|
|
test("decoding with PHC string format B64 (32 bytes)", () {
|
|
var inp = "CWOrkoo7oJBQ/iyh7uJ0LO2aLEfrHwTWllSAxT0zRno";
|
|
var out = fromBase64(inp, padding: false);
|
|
var res = toBase64(out, padding: false);
|
|
expect(res, inp);
|
|
});
|
|
group('decoding with invalid length', () {
|
|
test('H', () {
|
|
expect(() => fromBase64("H"), throwsFormatException);
|
|
});
|
|
test('Ha', () {
|
|
expect(() => fromBase64("Ha"), throwsFormatException);
|
|
});
|
|
test('HaB', () {
|
|
expect(() => fromBase64("HaB"), throwsFormatException);
|
|
});
|
|
test('Hashl', () {
|
|
expect(() => fromBase64("Hashl"), throwsFormatException);
|
|
});
|
|
test('Hashli', () {
|
|
expect(() => fromBase64("Hashli"), throwsFormatException);
|
|
});
|
|
test('Hashlib', () {
|
|
expect(() => fromBase64("Hashlib"), throwsFormatException);
|
|
});
|
|
});
|
|
});
|
|
}
|