109 lines
3.3 KiB
Dart
109 lines
3.3 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:hashlib/codecs.dart';
|
|
import 'package:hashlib/hashlib.dart';
|
|
import 'package:hashlib/random.dart';
|
|
import 'package:pointycastle/digests/blake2b.dart' as pc_blake2b;
|
|
import 'package:test/test.dart';
|
|
|
|
void main() {
|
|
group('blake2b512 comparison', () {
|
|
test('with pointycastle', () {
|
|
for (int i = 0; i < 100; ++i) {
|
|
final data = randomBytes(i);
|
|
final out1 = blake2b512.convert(data).hex();
|
|
final out2 = toHex(
|
|
pc_blake2b.Blake2bDigest(digestSize: 64).process(data),
|
|
);
|
|
expect(out1, equals(out2), reason: 'size: $i');
|
|
}
|
|
});
|
|
|
|
test('with pointycastle with key', () {
|
|
final key = randomBytes(16);
|
|
for (int i = 0; i < 100; ++i) {
|
|
final data = randomBytes(i);
|
|
final out1 = blake2b512.mac.by(key).convert(data).hex();
|
|
final out2 = toHex(
|
|
pc_blake2b.Blake2bDigest(digestSize: 64, key: key).process(data),
|
|
);
|
|
expect(out1, equals(out2), reason: 'size: $i');
|
|
}
|
|
});
|
|
|
|
test('with pointycastle with salt', () {
|
|
final salt = randomBytes(16);
|
|
for (int i = 0; i < 100; ++i) {
|
|
final data = randomBytes(i);
|
|
final out1 = Blake2b(64, salt: salt).convert(data).hex();
|
|
final out2 = toHex(
|
|
pc_blake2b.Blake2bDigest(digestSize: 64, salt: salt).process(data),
|
|
);
|
|
expect(out1, equals(out2), reason: 'size: $i');
|
|
}
|
|
});
|
|
|
|
test('with pointycastle with personalization', () {
|
|
final personalization = randomBytes(16);
|
|
for (int i = 0; i < 100; ++i) {
|
|
final data = randomBytes(i);
|
|
final out1 = Blake2b(
|
|
64,
|
|
aad: personalization,
|
|
).convert(data).hex();
|
|
final out2 = toHex(
|
|
pc_blake2b.Blake2bDigest(
|
|
digestSize: 64,
|
|
personalization: personalization,
|
|
).process(data),
|
|
);
|
|
expect(out1, equals(out2), reason: 'size: $i');
|
|
}
|
|
});
|
|
|
|
test('with pointycastle with salt and personalization', () {
|
|
final salt = randomBytes(16);
|
|
final personalization = randomBytes(16);
|
|
for (int i = 0; i < 100; ++i) {
|
|
final data = randomBytes(i);
|
|
final out1 = Blake2b(
|
|
64,
|
|
salt: salt,
|
|
aad: personalization,
|
|
).convert(data).hex();
|
|
final out2 = toHex(
|
|
pc_blake2b.Blake2bDigest(
|
|
digestSize: 64,
|
|
salt: salt,
|
|
personalization: personalization,
|
|
).process(data),
|
|
);
|
|
expect(out1, equals(out2), reason: 'size: $i');
|
|
}
|
|
});
|
|
|
|
test('with pointycastle with key, salt and personalization', () {
|
|
final key = randomBytes(16);
|
|
final salt = randomBytes(16);
|
|
final aad = randomBytes(16);
|
|
for (int i = 0; i < 100; ++i) {
|
|
final data = randomBytes(i);
|
|
final out1 = Blake2b(64).mac.by(key, salt: salt, aad: aad).hex(data);
|
|
final out2 = toHex(
|
|
pc_blake2b.Blake2bDigest(
|
|
digestSize: 64,
|
|
key: key,
|
|
salt: salt,
|
|
personalization: aad,
|
|
).process(data),
|
|
);
|
|
expect(out1, equals(out2), reason: 'size: $i');
|
|
}
|
|
});
|
|
});
|
|
}
|