blob: 7f59bbcb5eaa447d6813c408f2040cf75549799c [file] [log] [blame]
import 'dart:convert';
import 'dart:typed_data';
import 'package:pointycastle/export.dart';
import 'package:test/test.dart';
import '../test/src/helpers.dart';
void main() {
group('RC2 Engine', () {
blockCipherTest(
0,
RC2Engine(),
RC2Parameters(createUint8ListFromHexString('0000000000000000'),
bits: 63),
'0000000000000000',
'EBB773F993278EFF');
blockCipherTest(
1,
RC2Engine(),
RC2Parameters(createUint8ListFromHexString('ffffffffffffffff'),
bits: 64),
'ffffffffffffffff',
'278b27e42e2f0d49');
blockCipherTest(
2,
RC2Engine(),
RC2Parameters(createUint8ListFromHexString('3000000000000000'),
bits: 64),
'1000000000000001',
'30649edf9be7d2c2');
blockCipherTest(
3,
RC2Engine(),
RC2Parameters(createUint8ListFromHexString('88'), bits: 64),
'0000000000000000',
'61a8a244adacccf0');
blockCipherTest(
4,
RC2Engine(),
RC2Parameters(createUint8ListFromHexString('88bca90e90875a'), bits: 64),
'0000000000000000',
'6ccf4308974c267f');
blockCipherTest(
5,
RC2Engine(),
RC2Parameters(
createUint8ListFromHexString('88bca90e90875a7f0f79c384627bafb2'),
bits: 64),
'0000000000000000',
'1a807d272bbe5db1');
blockCipherTest(
6,
RC2Engine(),
RC2Parameters(
createUint8ListFromHexString('88bca90e90875a7f0f79c384627bafb2'),
bits: 128),
'0000000000000000',
'2269552ab0f85ca6');
blockCipherTest(
7,
RC2Engine(),
RC2Parameters(
createUint8ListFromHexString(
'88bca90e90875a7f0f79c384627bafb216f80a6f85920584c42fceb0be255daf1e'),
bits: 129),
'0000000000000000',
'5b78d3a43dfff1f1');
});
test('test openssl rc2-40-cbc', () {
// CMD = openssl enc -e -rc2-40-cbc -a -p -nosalt -iv c7d90059b29e97f7 -v
// Password = test
// Input = helloworld
var engine = CBCBlockCipher(RC2Engine());
engine.reset();
var params = ParametersWithIV(
RC2Parameters(
createUint8ListFromHexString('098F6BCD46'),
bits: 40,
),
createUint8ListFromHexString('C7D90059B29E97F7'),
);
var input = createUint8ListFromHexString('68656c6c6f776f726c64');
var output = '3MN/S1ipU7V7lOHQGmGW6g==';
engine.init(true, params);
var padded = addPKCS7Padding(input, 8);
final cipherText = Uint8List(padded.length);
var offset = 0;
while (offset < padded.length) {
offset += engine.processBlock(padded, offset, cipherText, offset);
}
var out = base64.decode(output);
expect(cipherText, out);
});
}