blob: 6a11b20e8811f31965ba1ddc1a7e89b9db0c0869 [file] [log] [blame]
// See file LICENSE for more information.
library test.modes.gcm_test;
import 'dart:typed_data';
import 'package:pointycastle/block/aes_fast.dart';
import 'package:pointycastle/block/modes/ccm.dart';
import 'package:pointycastle/pointycastle.dart';
import 'package:test/test.dart';
import '../test/src/helpers.dart';
void main() {
var paramList = [
{
'name': 'Test Case 1',
'key': createUint8ListFromHexString('404142434445464748494a4b4c4d4e4f'),
'iv': createUint8ListFromHexString('10111213141516'),
'aad': createUint8ListFromHexString('0001020304050607'),
'input': '20212223',
'output': '7162015b4dac255d',
'mac': createUint8ListFromHexString('6084341b'),
'tl': 32,
},
{
'name': 'Test Case 2',
'key': createUint8ListFromHexString('404142434445464748494a4b4c4d4e4f'),
'iv': createUint8ListFromHexString('1011121314151617'),
'aad': createUint8ListFromHexString('000102030405060708090a0b0c0d0e0f'),
'input': '202122232425262728292a2b2c2d2e2f',
'output': 'd2a1f0e051ea5f62081a7792073d593d1fc64fbfaccd',
'mac': createUint8ListFromHexString('7f479ffca464'),
'tl': 48
},
{
'name': 'Test Case 3',
'key': createUint8ListFromHexString('404142434445464748494a4b4c4d4e4f'),
'iv': createUint8ListFromHexString('101112131415161718191a1b'),
'aad': createUint8ListFromHexString(
'000102030405060708090a0b0c0d0e0f10111213'),
'input': '202122232425262728292a2b2c2d2e2f3031323334353637',
'output':
'e3b201a9f5b71a7a9b1ceaeccd97e70b6176aad9a4428aa5484392fbc1b09951',
'mac': createUint8ListFromHexString('67c99240c7d51048'),
'tl': 64
},
];
group('AES-CCM', () {
for (var map in paramList) {
test(map['name'], () {
var encrypter = CCMBlockCipher(AESFastEngine());
var params = AEADParameters(
KeyParameter((map['key'] as Uint8List)),
map['tl'] as int,
(map['iv'] as Uint8List),
(map['aad'] as Uint8List));
encrypter.init(true, params);
var result = encrypter
.process(createUint8ListFromHexString(map['input'] as String));
expect(
result,
orderedEquals(
createUint8ListFromHexString(map['output'] as String)));
expect(encrypter.mac, orderedEquals(map['mac'] as Uint8List));
var decrypter = CCMBlockCipher(AESFastEngine())..init(false, params);
var decrypted = formatBytesAsHexString(decrypter.process(result));
expect(decrypted, map['input']);
});
}
});
}