#!/bin/sh

echo ""
echo "These tests check whether encryption and decryption works in your system, they"
echo "do not check the algorithms' reliability."
echo ""

LD_LIBRARY_PATH=../libmcrypt/lib/.libs
export LD_LIBRARY_PATH

../src/mcrypt -q -k 1234567890 -a blowfish-448 <TEST | ../src/mcrypt -q -d -k 1234567890 >TEST.blowfish448
if (diff TEST TEST.blowfish448 >/dev/null 2>&1) then (echo "BLOWFISH-448 Ok.") else (echo "BLOWFISH-448 Failed.") fi

../src/mcrypt -q -k 1234567890 -a idea <TEST | ../src/mcrypt -q -d -k 1234567890 >TEST.idea
if (diff TEST TEST.idea >/dev/null 2>&1) then (echo "IDEA Ok.") else (echo "IDEA Failed.") fi

../src/mcrypt -q -k 1234567890 -a rc2 <TEST | ../src/mcrypt -q -d -k 1234567890 >TEST.rc2
if (diff TEST TEST.rc2 >/dev/null 2>&1) then (echo "RC2 Ok.") else (echo "RC2 Failed.") fi

../src/mcrypt -q -k 1234567890 -a rc6 <TEST | ../src/mcrypt -q -d -k 1234567890 >TEST.rc6
if (diff TEST TEST.rc6 >/dev/null 2>&1) then (echo "RC6 Ok.") else (echo "RC6 Failed.") fi

../src/mcrypt -q -k 12345678 -a des <TEST | ../src/mcrypt -q -d -k 12345678 >TEST.des
if (diff TEST TEST.des >/dev/null 2>&1) then (echo "DES Ok.") else (echo "DES Failed.") fi

../src/mcrypt -q -k 1234567890 -a 3-way <TEST | ../src/mcrypt -q -d -k 1234567890 >TEST.3way
if (diff TEST TEST.3way >/dev/null 2>&1) then (echo "3-WAY Ok.") else (echo "3-WAY Failed.") fi

../src/mcrypt -q -k 1234567890abcdef -a 3des <TEST | ../src/mcrypt -q -d -k 1234567890abcdef >TEST.3des
if (diff TEST TEST.3des >/dev/null 2>&1) then (echo "3DES Ok.") else (echo "3DES Failed.")  fi

../src/mcrypt -q -k 1234567890 -a gost <TEST | ../src/mcrypt -q -d -k 1234567890 >TEST.gost
if (diff TEST TEST.gost >/dev/null 2>&1) then (echo "GOST Ok.") else (echo "GOST Failed.") fi

../src/mcrypt -q -k 12345678 -a safer-sk64 <TEST | ../src/mcrypt -q -d -k 12345678 >TEST.safer64
if (diff TEST TEST.safer64 >/dev/null 2>&1) then (echo "SAFER-SK64 Ok.") else (echo "SAFER-SK64 Failed.") fi

../src/mcrypt -q -k 1234567812345678 -a safer-sk128 <TEST | ../src/mcrypt -q -d -k 1234567812345678 >TEST.safer128
if (diff TEST TEST.safer128 >/dev/null 2>&1) then (echo "SAFER-SK128 Ok.") else (echo "SAFER-SK128 Failed.") fi

../src/mcrypt -q -k 1234567812345678 -a cast-128 <TEST | ../src/mcrypt -q -d -k 1234567812345678 >TEST.cast128
if (diff TEST TEST.cast128 >/dev/null 2>&1) then (echo "CAST-128 Ok.") else (echo "CAST-128 Failed.") fi

../src/mcrypt -q -k 1234567812345678 -a cast-256 <TEST | ../src/mcrypt -q -d -k 1234567812345678 >TEST.cast256
if (diff TEST TEST.cast256 >/dev/null 2>&1) then (echo "CAST-256 Ok.") else (echo "CAST-256 Failed.") fi

../src/mcrypt -q -k 1234567812345678 -a xtea <TEST | ../src/mcrypt -q -d -k 1234567812345678 >TEST.tea
if (diff TEST TEST.tea >/dev/null 2>&1) then (echo "xTEA Ok.") else (echo "xTEA Failed.") fi

../src/mcrypt -q -k 1234567812345678 -a twofish-128 <TEST | ../src/mcrypt -q -d -k 1234567812345678 >TEST.twofish
if (diff TEST TEST.twofish >/dev/null 2>&1) then (echo "TWOFISH-128 Ok.") else (echo "TWOFISH-128 Failed.") fi

../src/mcrypt -q -k 1234567812345678 -a twofish-192 <TEST | ../src/mcrypt -q -d -k 1234567812345678 >TEST.twofish192
if (diff TEST TEST.twofish192 >/dev/null 2>&1) then (echo "TWOFISH-192 Ok.") else (echo "TWOFISH-192 Failed.") fi

../src/mcrypt -q -k 1234567812345678 -a twofish-256 <TEST | ../src/mcrypt -q -d -k 1234567812345678 >TEST.twofish256
if (diff TEST TEST.twofish256 >/dev/null 2>&1) then (echo "TWOFISH-256 Ok.") else (echo "TWOFISH-256 Failed.") fi

../src/mcrypt -q -k 1234567812345678 -a safer+ <TEST | ../src/mcrypt -q -d -k 1234567812345678 >TEST.saferplus
if (diff TEST TEST.saferplus >/dev/null 2>&1) then (echo "SAFER+ Ok.") else (echo "SAFER+ Failed.") fi

../src/mcrypt -q -k 1234567812345678 -a loki97 <TEST | ../src/mcrypt -q -d -k 1234567812345678 >TEST.loki97
if (diff TEST TEST.loki97 >/dev/null 2>&1) then (echo "LOKI97 Ok.") else (echo "LOKI97 Failed.") fi

../src/mcrypt -q -k 12345678 -a crypt <TEST | ../src/mcrypt -q -b -d -k 12345678 -a crypt >TEST.crypt
if (diff TEST TEST.crypt >/dev/null 2>&1) then (echo "UNIX crypt Ok.") else (echo "UNIX crypt Failed.") fi


echo ""
echo "These tests check the algorithms' (ciphertext) compatibility with other"
echo "systems (actually with a little-endian 32bit system)"
echo ""
../src/mcrypt -dq -k 1234567890 -m ecb -a blowfish-448 <test.blowfish448 >test.blowfish448.local
if (diff TEST test.blowfish448.local >/dev/null 2>&1) then (echo "BLOWFISH-448 Ok.") else (echo "BLOWFISH-448 Failed.") fi

../src/mcrypt -dq -k 1234567890 -m ecb -a idea <test.idea >test.idea.local
if (diff TEST test.idea.local >/dev/null 2>&1) then (echo "IDEA Ok.") else (echo "IDEA Failed.") fi

../src/mcrypt -dq -k 1234567890 -m ecb -a rc2 <test.rc2 >test.rc2.local
if (diff TEST test.rc2.local >/dev/null 2>&1) then (echo "RC2 Ok.") else (echo "RC2 Failed.") fi

../src/mcrypt -dq -k 1234567890 -m ecb -a rc6 <test.rc6 >test.rc6.local
if (diff TEST test.rc6.local >/dev/null 2>&1) then (echo "RC6 Ok.") else (echo "RC6 Failed.") fi

../src/mcrypt -dq -k 12345678 -m ecb -a des <test.des >test.des.local
if (diff TEST test.des.local >/dev/null 2>&1) then (echo "DES Ok.") else (echo "DES Failed.") fi

../src/mcrypt -dq -k 1234567890 -m ecb -a 3-way <test.3way >test.3way.local
if (diff TEST test.3way.local >/dev/null 2>&1) then (echo "3-WAY Ok.") else (echo "3-WAY Failed.") fi

../src/mcrypt -dq -k 1234567890abcdef -m ecb -a 3des <test.3des >test.3des.local
if (diff TEST test.3des.local >/dev/null 2>&1) then (echo "3DES Ok.") else (echo "3DES Failed.") fi

../src/mcrypt -dq -k 1234567890 -m ecb -a gost <test.gost >test.gost.local
if (diff TEST test.gost.local >/dev/null 2>&1) then (echo "GOST Ok.") else (echo "GOST Failed.") fi

../src/mcrypt -dq -k 12345678 -m ecb -a safer-sk64 <test.safer64 >test.safer64.local
if (diff TEST test.safer64.local >/dev/null 2>&1) then (echo "SAFER-SK64 Ok.") else (echo "SAFER-SK64 Failed.") fi

../src/mcrypt -dq -k 1234567812345678 -m ecb -a safer-sk128 <test.safer128 >test.safer128.local
if (diff TEST test.safer128.local >/dev/null 2>&1) then (echo "SAFER-SK128 Ok.") else (echo "SAFER-SK128 Failed.") fi

../src/mcrypt -dq -k 1234567812345678 -m ecb -a cast-128 <test.cast128 >test.cast128.local
if (diff TEST test.cast128.local >/dev/null 2>&1) then (echo "CAST-128 Ok.") else (echo "CAST-128 Failed.") fi

../src/mcrypt -dq -k 1234567812345678 -m ecb -a cast-256 <test.cast256 >test.cast256.local
if (diff TEST test.cast256.local >/dev/null 2>&1) then (echo "CAST-256 Ok.") else (echo "CAST-256 Failed.") fi

../src/mcrypt -dq -k 1234567812345678 -m ecb -a xtea <test.tea >test.tea.local
if (diff TEST test.tea.local >/dev/null 2>&1) then (echo "xTEA Ok.") else (echo "xTEA Failed.") fi

../src/mcrypt -dq -k 1234567812345678 -m ecb -a twofish-128 <test.twofish128 >test.twofish128.local
if (diff TEST test.twofish128.local >/dev/null 2>&1) then (echo "TWOFISH-128 Ok.") else (echo "TWOFISH-128 Failed.") fi

../src/mcrypt -dq -k 1234567812345678 -m ecb -a twofish-192 <test.twofish192 >test.twofish192.local
if (diff TEST test.twofish192.local >/dev/null 2>&1) then (echo "TWOFISH-192 Ok.") else (echo "TWOFISH-192 Failed.") fi

../src/mcrypt -dq -k 1234567812345678 -m ecb -a twofish-256 <test.twofish256 >test.twofish256.local
if (diff TEST test.twofish256.local >/dev/null 2>&1) then (echo "TWOFISH-256 Ok.") else (echo "TWOFISH-256 Failed.") fi

../src/mcrypt -dq -k 1234567812345678 -m ecb -a safer+ <test.saferplus >test.saferplus.local
if (diff TEST test.saferplus.local >/dev/null 2>&1) then (echo "SAFER+ Ok.") else (echo "SAFER+ Failed.") fi

../src/mcrypt -dq -k 1234567812345678 -m ecb -a loki97 <test.loki97 >test.loki97.local
if (diff TEST test.loki97.local >/dev/null 2>&1) then (echo "LOKI97 Ok.") else (echo "LOKI97 Failed.") fi

../src/mcrypt -qd -b -k 12345678 -a crypt <test.crypt >test.crypt.local
if (diff TEST test.crypt.local >/dev/null 2>&1) then (echo "UNIX crypt Ok.") else (echo "UNIX crypt Failed.") fi

echo ""
echo "If you have compiled with non-free algorithms disabled, ignore the"
echo "errors in rc6 and idea."

echo ""
rm -f TEST.*
rm -f test*.local
