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); }); }