twonly-app-dependencies/pointycastle/test/block/aes_test.dart
2025-12-07 16:10:41 +01:00

229 lines
6.7 KiB
Dart

import 'dart:typed_data';
import 'package:pointycastle/block/aes.dart';
import 'package:pointycastle/pointycastle.dart';
import 'package:test/test.dart';
import '../test/src/helpers.dart';
void main() {
group('AES Engine', () {
blockCipherTest(0, AESEngine(), kp('80000000000000000000000000000000'),
'00000000000000000000000000000000', '0EDD33D3C621E546455BD8BA1418BEC8');
blockCipherTest(1, AESEngine(), kp('00000000000000000000000000000080'),
'00000000000000000000000000000000', '172AEAB3D507678ECAF455C12587ADB7');
blockCipherMCTTest(
2,
10000,
AESEngine(),
kp('00000000000000000000000000000000'),
'00000000000000000000000000000000',
'C34C052CC0DA8D73451AFE5F03BE297F');
blockCipherMCTTest(
3,
10000,
AESEngine(),
kp('5F060D3716B345C253F6749ABAC10917'),
'355F697E8B868B65B25A04E18D782AFA',
'ACC863637868E3E068D2FD6E3508454A');
blockCipherTest(
4,
AESEngine(),
kp('000000000000000000000000000000000000000000000000'),
'80000000000000000000000000000000',
'6CD02513E8D4DC986B4AFE087A60BD0C');
blockCipherMCTTest(
5,
10000,
AESEngine(),
kp('AAFE47EE82411A2BF3F6752AE8D7831138F041560631B114'),
'F3F6752AE8D7831138F041560631B114',
'77BA00ED5412DFF27C8ED91F3C376172');
blockCipherTest(
6,
AESEngine(),
kp('0000000000000000000000000000000000000000000000000000000000000000'),
'80000000000000000000000000000000',
'DDC6BF790C15760D8D9AEB6F9A75FD4E');
blockCipherMCTTest(
7,
10000,
AESEngine(),
kp('28E79E2AFC5F7745FCCABE2F6257C2EF4C4EDFB37324814ED4137C288711A386'),
'C737317FE0846F132B23C8C2A672CE22',
'E58B82BFBA53C0040DC610C642121168');
blockCipherTest(8, AESEngine(), kp('80000000000000000000000000000000'),
'00000000000000000000000000000000', '0EDD33D3C621E546455BD8BA1418BEC8');
blockCipherTest(9, AESEngine(), kp('00000000000000000000000000000080'),
'00000000000000000000000000000000', '172AEAB3D507678ECAF455C12587ADB7');
blockCipherMCTTest(
10,
10000,
AESEngine(),
kp('00000000000000000000000000000000'),
'00000000000000000000000000000000',
'C34C052CC0DA8D73451AFE5F03BE297F');
blockCipherMCTTest(
11,
10000,
AESEngine(),
kp('5F060D3716B345C253F6749ABAC10917'),
'355F697E8B868B65B25A04E18D782AFA',
'ACC863637868E3E068D2FD6E3508454A');
blockCipherTest(
12,
AESEngine(),
kp('000000000000000000000000000000000000000000000000'),
'80000000000000000000000000000000',
'6CD02513E8D4DC986B4AFE087A60BD0C');
blockCipherMCTTest(
13,
10000,
AESEngine(),
kp('AAFE47EE82411A2BF3F6752AE8D7831138F041560631B114'),
'F3F6752AE8D7831138F041560631B114',
'77BA00ED5412DFF27C8ED91F3C376172');
blockCipherTest(
14,
AESEngine(),
kp('0000000000000000000000000000000000000000000000000000000000000000'),
'80000000000000000000000000000000',
'DDC6BF790C15760D8D9AEB6F9A75FD4E');
blockCipherMCTTest(
15,
10000,
AESEngine(),
kp('28E79E2AFC5F7745FCCABE2F6257C2EF4C4EDFB37324814ED4137C288711A386'),
'C737317FE0846F132B23C8C2A672CE22',
'E58B82BFBA53C0040DC610C642121168');
blockCipherTest(16, AESEngine(), kp('80000000000000000000000000000000'),
'00000000000000000000000000000000', '0EDD33D3C621E546455BD8BA1418BEC8');
blockCipherTest(17, AESEngine(), kp('00000000000000000000000000000080'),
'00000000000000000000000000000000', '172AEAB3D507678ECAF455C12587ADB7');
blockCipherMCTTest(
18,
10000,
AESEngine(),
kp('00000000000000000000000000000000'),
'00000000000000000000000000000000',
'C34C052CC0DA8D73451AFE5F03BE297F');
blockCipherMCTTest(
19,
10000,
AESEngine(),
kp('5F060D3716B345C253F6749ABAC10917'),
'355F697E8B868B65B25A04E18D782AFA',
'ACC863637868E3E068D2FD6E3508454A');
blockCipherTest(
20,
AESEngine(),
kp('000000000000000000000000000000000000000000000000'),
'80000000000000000000000000000000',
'6CD02513E8D4DC986B4AFE087A60BD0C');
blockCipherMCTTest(
21,
10000,
AESEngine(),
kp('AAFE47EE82411A2BF3F6752AE8D7831138F041560631B114'),
'F3F6752AE8D7831138F041560631B114',
'77BA00ED5412DFF27C8ED91F3C376172');
blockCipherTest(
22,
AESEngine(),
kp('0000000000000000000000000000000000000000000000000000000000000000'),
'80000000000000000000000000000000',
'DDC6BF790C15760D8D9AEB6F9A75FD4E');
blockCipherMCTTest(
23,
10000,
AESEngine(),
kp('28E79E2AFC5F7745FCCABE2F6257C2EF4C4EDFB37324814ED4137C288711A386'),
'C737317FE0846F132B23C8C2A672CE22',
'E58B82BFBA53C0040DC610C642121168');
});
}
KeyParameter kp(String src) {
return KeyParameter(createUint8ListFromHexString(src));
}
void blockCipherTest(int id, BlockCipher cipher, CipherParameters parameters,
String input, String output) {
test('AES BlockCipher Test: $id ', () {
var input0 = createUint8ListFromHexString(input);
var output0 = createUint8ListFromHexString(output);
cipher.init(true, parameters);
var out = Uint8List(input0.length);
var p = 0;
while (p < input0.length) {
p += cipher.processBlock(input0, p, out, p);
}
expect(output0, equals(out), reason: '$id did not match output');
cipher.init(false, parameters);
out = Uint8List(output0.length);
p = 0;
while (p < output0.length) {
p += cipher.processBlock(output0, p, out, p);
}
expect(input0, equals(out), reason: '$id did not match input');
});
}
void blockCipherMCTTest(int id, int iterations, BlockCipher cipher,
CipherParameters parameters, String input, String output) {
test('AES BlockCipher MCT Test: $id ', () {
var input0 = createUint8ListFromHexString(input);
var output0 = createUint8ListFromHexString(output);
cipher.init(true, parameters);
var out = Uint8List(input0.length);
out.setRange(0, out.length, input0);
for (var i = 0; i != iterations; i++) {
var p = 0;
while (p < out.length) {
p += cipher.processBlock(out, p, out, p);
}
}
expect(output0, equals(out), reason: '$id did not match output');
cipher.init(false, parameters);
for (var i = 0; i != iterations; i++) {
var p = 0;
while (p < out.length) {
p += cipher.processBlock(out, p, out, p);
}
}
expect(input0, equals(out), reason: '$id did not match input');
});
}