Subject: | Exercise for reader complete |
Updated test suite checks all listed IDEA cases. Additional dependency on Test::More.
BEGIN { push @INC, qw(. .. ../lib ../../lib ../../../lib) }
use Crypt::IDEA;
use Test::More tests => 55;
# Crypt::IDEA Test Suite
my @TEST_SUITE = (
[qw( 00010002000300040005000600070008 0000000100020003 11FBED2B01986DE5 )],
[qw( 00010002000300040005000600070008 0102030405060708 540E5FEA18C2F8B1 )],
[qw( 00010002000300040005000600070008 0019324B647D96AF 9F0A0AB6E10CED78 )],
[qw( 00010002000300040005000600070008 F5202D5B9C671B08 CF18FD7355E2C5C5 )],
[qw( 00010002000300040005000600070008 FAE6D2BEAA96826E 85DF52005608193D )],
[qw( 00010002000300040005000600070008 0A141E28323C4650 2F7DE750212FB734 )],
[qw( 00010002000300040005000600070008 050A0F14191E2328 7B7314925DE59C09 )],
[qw( 0005000A000F00140019001E00230028 0102030405060708 3EC04780BEFF6E20 )],
[qw( 3A984E2000195DB32EE501C8C47CEA60 0102030405060708 97BCD8200780DA86 )],
[qw( 006400C8012C019001F4025802BC0320 05320A6414C819FA 65BE87E7A2538AED )],
[qw( 9D4075C103BC322AFB03E7BE6AB30006 0808080808080808 F5DB1AC45E5EF9F9 )],
);
# Run a cipher test case
sub test {
my ($case, $key, $in, $out) = @_;
# Pack structures
my ($p_key, $p_in, $p_out) = map { pack("H*", $_) } ($key, $in, $out);
# Create a new cipher
my $cipher = new IDEA $p_key;
isa_ok( $cipher, "IDEA", "(c$case) Test object construction" );
# Key tests
is( $cipher->blocksize(), 8, "(c$case) Test cipher block size" );
is( $cipher->keysize(), 16, "(c$case) Test cipher key size" );
# Encrypt
my $e_test = uc unpack("H*", $cipher->encrypt($p_in));
is( $e_test, $out, "(c$case) Test Encryption" );
# Decrypt
my $d_test = uc unpack("H*", $cipher->decrypt($p_out));
is( $d_test, $in, "(c$case) Test Decription" );
}
# Run all test cases
for (my $i = 0; $i <= $#TEST_SUITE; $i++) { test($i, @{ $TEST_SUITE[$i] }) }