79 lines
2.8 KiB
Dart
79 lines
2.8 KiB
Dart
// Copyright (c) 2023, Sudipto Chandra
|
|
// All rights reserved. Check LICENSE file for details.
|
|
|
|
import 'dart:math';
|
|
|
|
import 'package:hashlib/hashlib.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
final tests = {
|
|
"": "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c"
|
|
"0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b",
|
|
"a": "54a59b9f22b0b80880d8427e548b7c23abd873486e1f035dce"
|
|
"9cd697e85175033caa88e6d57bc35efae0b5afd3145f31",
|
|
"abc": "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a"
|
|
"8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7",
|
|
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq":
|
|
"3391fdddfc8dc7393707a65b1b4709397cf8b1d162af05abfe"
|
|
"8f450de5f36bc6b0455a8520bc4e6f5fe95b1fe3c8452b",
|
|
"The quick brown fox jumps over the lazy dog":
|
|
"ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c4940"
|
|
"11e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1",
|
|
"The quick brown fox jumps over the lazy cog":
|
|
"098cea620b0978caa5f0befba6ddcf22764bea977e1c70b348"
|
|
"3edfdf1de25f4b40d6cea3cadf00f809d422feb1f0161b",
|
|
List.filled(512, "a").join():
|
|
"e685ba7acf4eedd1742f2a97c845e7825982d840623525e491"
|
|
"40680fdde0f2631e5fce9dfcfb42ba7b27c9eb35a62b87",
|
|
List.filled(128, "a").join():
|
|
"edb12730a366098b3b2beac75a3bef1b0969b15c48e2163c23"
|
|
"d96994f8d1bef760c7e27f3c464d3829f56c0d53808b0b",
|
|
List.filled(513, "a").join():
|
|
"c3f1d47c5dad5c3b8cc1242da14220af7f9036acf98369be3c"
|
|
"c102b069476a9b3e50b9a131756396c8c267dce06a35f0",
|
|
List.filled(511, "a").join():
|
|
"db100a1eed3842c61d73064b62543cd4531dafa8bfecf6f27d"
|
|
"cfdebbaf60ea14563ea1b486e4f6b9a14fcb0dac05c5f2",
|
|
List.filled(1000000, "a").join():
|
|
"9d0e1809716474cb086e834e310a4a1ced149e9c00f2485279"
|
|
"72cec5704c2a5b07b8b3dc38ecc4ebae97ddd87f3d8985",
|
|
};
|
|
|
|
void main() {
|
|
group('SHA384 test', () {
|
|
test('with empty string', () {
|
|
expect(sha384sum(""), tests[""]);
|
|
});
|
|
|
|
test('with single letter', () {
|
|
expect(sha384sum("a"), tests["a"]);
|
|
});
|
|
|
|
test('with few letters', () {
|
|
expect(sha384sum("abc"), tests["abc"]);
|
|
});
|
|
|
|
test('with string of length 511', () {
|
|
var key = tests.keys.firstWhere((x) => x.length == 511);
|
|
var value = tests[key]!;
|
|
expect(sha384sum(key), value);
|
|
});
|
|
|
|
test('with known cases', () {
|
|
tests.forEach((key, value) {
|
|
expect(sha384sum(key), value);
|
|
});
|
|
});
|
|
|
|
test('with stream', () async {
|
|
for (final entry in tests.entries) {
|
|
final stream = Stream.fromIterable(
|
|
List.generate(1 + (entry.key.length >>> 3), (i) => i << 3))
|
|
.map((e) => entry.key.substring(e, min(entry.key.length, e + 8)))
|
|
.map((s) => s.codeUnits);
|
|
final result = await sha384.bind(stream).first;
|
|
expect(result.hex(), entry.value);
|
|
}
|
|
});
|
|
});
|
|
}
|