twonly-app-dependencies/hashlib/test/core/mac_base_test.dart
2025-12-07 16:10:41 +01:00

82 lines
2.6 KiB
Dart

// Copyright (c) 2023, Sudipto Chandra
// All rights reserved. Check LICENSE file for details.
import 'package:hashlib/hashlib.dart';
import 'package:test/test.dart';
void main() {
group('MACSinkBase', () {
test('derivedKeyLength should be defined', () {
final algo = md5.hmac.by([]);
final sink = algo.createSink();
expect(sink.derivedKeyLength, sink.hashLength);
});
test('should initialize with the provided key', () {
final key = [1, 2, 3, 4, 5];
final sink1 = md5.hmac.by(key).createSink();
final sink2 = md5.hmac.by([1]).createSink();
expect(sink1.innerKey, isNot(equals(sink2.innerKey)));
expect(sink1.outerKey, isNot(equals(sink2.outerKey)));
final sink3 = md5.hmac.by([1]).createSink();
expect(sink2.innerKey, (equals(sink3.innerKey)));
expect(sink2.outerKey, (equals(sink3.outerKey)));
});
});
group('MACHash', () {
test('createSink should create a MACSinkBase', () {
expect(sha256.hmac.by([2]).createSink(), isA<MACSinkBase>());
});
test('sign should return a HashDigest', () {
final key = [10];
final message = [1, 2, 3, 4, 5];
final result = md5.hmac.by(key).sign(message);
expect(result, isA<HashDigest>());
expect(result.bytes.length, equals(16));
});
test('verify should return true if the tag matches the message', () {
final key = [10];
final message = [1, 2, 3, 4, 5];
final tag = md5.hmac.by(key).sign(message).bytes;
expect(md5.hmac.by(key).verify(tag, message), isTrue);
});
test('verify should return false if the tag does not match', () {
final key = [10];
final message = [1, 2, 3, 4, 5];
final tag = [1, 2, 3];
expect(md5.hmac.by(key).verify(tag, message), isFalse);
});
});
group('MACHashBase', () {
test('by create a MACHash', () {
expect(sha1.hmac.by([2]), isA<MACHashBase>());
});
test('sign should return a HashDigest', () {
final key = [10];
final message = [1, 2, 3, 4, 5];
final result = md5.hmac.sign(key, message);
expect(result, isA<HashDigest>());
expect(result.bytes.length, equals(16));
});
test('verify should return true if the tag matches the message', () {
final key = [10];
final message = [1, 2, 3, 4, 5];
final tag = md5.hmac.sign(key, message).bytes;
expect(md5.hmac.verify(key, tag, message), isTrue);
});
test('verify should return false if the tag does not match', () {
final key = [10];
final message = [1, 2, 3, 4, 5];
final tag = [1, 2, 3];
expect(md5.hmac.verify(key, tag, message), isFalse);
});
});
}