#!/usr/bin/perl # Mangler Integrity in Perl # cynric # # Adapted from mangler_test.bat by # Israel Torres # # Thu Mar 30 00:03:26 CST 2006: # added keyfile constant, updated md5 for test 5b # modified md5 for windows to force lowercase with -l # # Thu Mar 30 00:02:20 CST 2006: # added functions, color, md5 comparisons # general code cleanup # added integrity checks for benchmark files # changed order of prints and mangler execution to help formatting # added a summary for test conclusion use strict; use Term::ANSIColor; eval "use Win32::Console::ANSI"; # eval to suppress errors in linux print "Mangler Functionality Test v4.4.03.30.06.a\n"; print "##########################################\n\n"; ################################################################# # Variables # Files my $input_file="mangler_test_file_1.png"; my $output_file="image1.out.0.png"; my $password="password123"; my $keyfile_c="mangler_test_file_2.png"; my $keyfile=$keyfile_c; # MD5sums # These could be summarized my $input_md5=lc("122A5BA9DCA7B44705669C1E97140145 mangler_test_file_1.png"); my $md5_2a=lc("F06848625E88A217A0267EBFCBBBEAEC image1.out.2a.png"); my $md5_2b=lc("122A5BA9DCA7B44705669C1E97140145 image1.out.2b.png"); my $md5_3a=lc("F06848625E88A217A0267EBFCBBBEAEC image1.out.3a.png"); my $md5_3b=lc("122A5BA9DCA7B44705669C1E97140145 image1.out.3b.png"); my $md5_4a=lc("1F8A59079D2701B6E89B1C869184A067 image1.out.4a.png"); my $md5_4b=lc("122A5BA9DCA7B44705669C1E97140145 image1.out.4b.png"); my $md5_5a=lc("1F8A59079D2701B6E89B1C869184A067 image1.out.5a.png"); my $md5_5b=lc("122A5BA9DCA7B44705669C1E97140145 image1.out.5b.png"); my $keyfile_md5=lc("D7B9A769CFD8C5CE388728C5705DF09B mangler_test_file_2.png"); # Other my $result=""; my $mngOutput=""; my $os = $^O; my $md5=""; my $count=0; # Set correct command depending on environment # md5sum from coreutils and md5 from ActivePerl if ("$os" eq "linux") { $md5="md5sum"; } else { $md5="md5 -l"; } ################################################################# # Functions # Check for existing output file sub checkOutputFile { my ($tmp) = @_; if ( -e $tmp ) { unlink $tmp; } } sub checkMD5 { my ($inFile, $outFile) = @_; # localize passed vars my ($in_md5) = `$md5 $inFile`; # Gen md5 for input_file my ($out_md5) = `$md5 $outFile`; # Gen md5 for output_file chomp ($in_md5); # Chomp [in|out]put_file chomp ($out_md5); $in_md5 = lc($in_md5); # Drop case $out_md5 = lc($out_md5); # Convert [in|out]file vars into strings representing # the md5 checksums listed above as benchmarks if ($inFile eq "mangler_test_file_1.png") { $inFile = "\$input_md5"; } else { $inFile =~ s/image1\.out\.(.*)\.png/\$md5_$1/; } $outFile =~ s/image1\.out\.(.*)\.png/\$md5_$1/; if ($in_md5 eq eval($inFile)) { if ($out_md5 eq eval($outFile)) { print "\e[01;34m[\e[01;32mOK\e[01;34m]\e[0m\n\n"; $count += 1; } else { print "\e[01;34m[\e[01;31m!!\e[01;34m]\e[0m\n"; print "Expected MD5: " . eval($outFile) . "\n"; print "Returned MD5: $out_md5\n\n"; } } else { print "\e[01;34m[\e[01;31m!!\e[01;34m]\e[0m\n"; print "Expected MD5: " . eval($inFile) . "\n"; print "Returned MD5: $in_md5\n\n"; } } ################################################################# # Test 0 $input_file=`$md5 mangler_test_file_1.png`; $output_file=`$md5 mangler_test_file_2.png`; chomp ($input_file); chomp ($output_file); print "Test 0 (Integrity of benchmarks) "; if ($input_file eq $input_md5) { if ($output_file eq $keyfile_md5) { print "\e[01;34m[\e[01;32mOK\e[01;34m]\e[0m\n\n"; $count += 1; } else { print "\e[01;34m[\e[01;31m!!\e[01;34m]\e[0m\n"; print "Expected MD5: $keyfile_md5\n"; print "Returned MD5: " . `$md5 mangler_test_file_2.png` . "\n"; } } else { print "\e[01;34m[\e[01;31m!!\e[01;34m]\e[0m\n"; print "Expected MD5: $input_md5\n"; print "Returned MD5: " . `$md5 mangler_test_file_1.png` . "\n"; } $input_file="mangler_test_file_1.png"; $output_file="image1.out.0.png"; # Test 1 $mngOutput=`./mangler -pn $input_file $output_file`; chomp ($mngOutput); if ($mngOutput eq "The password cannot be blank") { $result="\e[01;34m[\e[01;32mOK\e[01;34m]\e[0m\n\n"; $count += 1; } else { $result="\e[01;34m[\e[01;31m!!\e[01;34m]\e[0m\n\n"; } print "Test 1 (Blank password): " . $result; # Test 2A $input_file="mangler_test_file_1.png"; $output_file="image1.out.2a.png"; checkOutputFile($output_file); print "Test 2A (Non-Interactive Encrypt) "; system("./mangler -pn $input_file $output_file $password"); checkMD5($input_file, $output_file); # Test 2B $input_file="image1.out.2a.png"; $output_file="image1.out.2b.png"; checkOutputFile($output_file); print "Test 2B (Non-Interactive Decrypt) "; system("./mangler -pn $input_file $output_file $password"); checkMD5($input_file, $output_file); # Test 3A $input_file="mangler_test_file_1.png"; $output_file="image1.out.3a.png"; checkOutputFile($output_file); print "Password: " . $password . "\n"; system("./mangler -pi $input_file $output_file"); print "Test 3A (Interactive Encrypt) "; checkMD5($input_file, $output_file); #Test 3B $input_file="image1.out.3a.png"; $output_file="image1.out.3b.png"; checkOutputFile($output_file); print "Password: " . $password . "\n"; system("./mangler -pi $input_file $output_file"); print "Test 3B (Interactive Decrypt) "; checkMD5($input_file, $output_file); #Test 4A $input_file="mangler_test_file_1.png"; $output_file="image1.out.4a.png"; checkOutputFile($output_file); print "Keyfile: " . $keyfile . "\n"; system("./mangler -kn $input_file $output_file $keyfile"); print "Test 4A (Keyfile Encrypt) "; checkMD5($input_file, $output_file, $keyfile); #Test 4B $input_file="image1.out.4a.png"; $output_file="image1.out.4b.png"; checkOutputFile($output_file); print "Keyfile: " . $keyfile . "\n"; system("./mangler -kn $input_file $output_file $keyfile"); print "Test 4B (Keyfile Decrypt) "; checkMD5($input_file, $output_file, $keyfile); # Test 4C $input_file="image1.out.4a.png"; $output_file="image1.out.4b.png"; $keyfile=""; checkOutputFile($output_file); $mngOutput=`./mangler -kn $input_file $output_file $keyfile`; chomp ($mngOutput); if ($mngOutput eq "The keyfile cannot be blank") { $result="\e[01;34m[\e[01;32mOK\e[01;34m]\e[0m\n\n"; $count += 1; } else { $result="\e[01;34m[\e[01;31m!!\e[01;34m]\e[0m\n"; } print "Test 4C (Null keyfile check): " . $result; # refresh keyfile constant $keyfile=$keyfile_c; #Test 5A $input_file="mangler_test_file_1.png"; $output_file="image1.out.5a.png"; checkOutputFile($output_file); print "Keyfile: " . $keyfile . "\n"; system("./mangler -ki $input_file $output_file"); print "Test 5A (Keyfile Encrypt) "; checkMD5($input_file, $output_file, $keyfile); #Test 5B $input_file="image1.out.5a.png"; $output_file="image1.out.5b.png"; checkOutputFile($output_file); print "Keyfile: " . $keyfile . "\n"; system("./mangler -ki $input_file $output_file"); print "Test 5B (Keyfile Decrypt) "; checkMD5($input_file, $output_file, $keyfile); print "###########################################\n"; if ($count == 11) { print "Test completed successfully!\n"; } else { print "Test completed errors!\n"; }