55 lines
1.8 KiB
Dart
55 lines
1.8 KiB
Dart
// Copyright (c) 2023, Sudipto Chandra
|
|
// All rights reserved. Check LICENSE file for details.
|
|
|
|
// ignore_for_file: library_annotations
|
|
|
|
@Tags(['vm-only'])
|
|
|
|
import 'package:crypto/crypto.dart' as crypto;
|
|
import 'package:hashlib/codecs.dart';
|
|
import 'package:hashlib/hashlib.dart';
|
|
import 'package:hashlib/random.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
void main() {
|
|
group('HMAC comparison', () {
|
|
test('with crypto for MD5', () {
|
|
var key = "key";
|
|
var msg = "The quick brown fox jumps over the lazy dog";
|
|
var expected = "80070713463e7749b90c2dc24911e275";
|
|
var actual = toHex(
|
|
md5.hmac.byString(key).convert(msg.codeUnits).bytes,
|
|
);
|
|
var actual2 = toHex(
|
|
crypto.Hmac(crypto.md5, key.codeUnits).convert(msg.codeUnits).bytes,
|
|
);
|
|
expect(actual2, expected, reason: "Key: $key | Message: $msg");
|
|
expect(actual, expected, reason: "Key: $key | Message: $msg");
|
|
});
|
|
|
|
test('with crypto', () {
|
|
for (int i = 0; i < 100; ++i) {
|
|
final data = randomBytes(i);
|
|
final key = randomBytes(i & 0x7F);
|
|
expect(
|
|
toHex(sha1.hmac.by(key).convert(data).bytes),
|
|
toHex(crypto.Hmac(crypto.sha1, key).convert(data).bytes),
|
|
reason: 'Key: "${String.fromCharCodes(key)}" [${key.length}]\n'
|
|
'Message: "${String.fromCharCodes(data)}" [${data.length}]',
|
|
);
|
|
}
|
|
});
|
|
|
|
test('run in parallel', () async {
|
|
await Future.wait(List.generate(10, (i) => i).map((i) async {
|
|
final data = randomBytes(i);
|
|
final key = randomBytes(i & 0x7F);
|
|
expect(
|
|
toHex(sha384.hmac.by(key).convert(data).bytes),
|
|
toHex(crypto.Hmac(crypto.sha384, key).convert(data).bytes),
|
|
reason: 'Message: "${String.fromCharCodes(data)}" [${data.length}]',
|
|
);
|
|
}));
|
|
});
|
|
});
|
|
}
|