#!/bin/sh
#
#	$Id: check,v 1.5 2002-11-10 01:44:11 solyga Exp $
#

PRG="$0"
MD4SUM=./md4sum
TEST_FILE="$1"
MD4_EMPTY=31d6cfe0d16ae931b73c59d7e0c089c0
MD4_ZEROS1=d7def262a127cd79096a108e7a9fc138
ED2K_ZEROS1="ed2k://|file|"`basename "$TEST_FILE"`"|9728000|d7def262a127cd79096a108e7a9fc138|"
MD4_ZEROS2=9b3cc5684719c80e89fb966dedc18732
ED2K_ZEROS2="ed2k://|file|"`basename "$TEST_FILE"`"|9728001|06329e9dba1373512c06386fe29e3c65|"

if test ! -x $MD4SUM; then
  echo "$PRG: File '$MD4SUM' isn't executable or doesn't even exist." >&2
  echo "$PRG: Run './configure; make test' (again)." >&2
  exit 1;
fi

if test -z $TEST_FILE; then
  echo "$PRG: Usage: $PRG testfile." >&2
  echo "$PRG: Better run './configure; make test' instead." >&2
  exit 1;
fi
rm -f $TEST_FILE

echo "$PRG: Checking $MD4SUM for working properly."

#
# Check 1: MD4 of empty file
#
echo -n "$PRG: Check 1: MD4 of empty file... " >&2
touch $TEST_FILE > /dev/null 2>&1
if test $? != 0; then
  echo "failed." >&2
  echo "$PRG: Cannot create '$TEST_FILE' in current directory." >&2
  exit 1
fi
TEST_MD4=`$MD4SUM $TEST_FILE` 2> /dev/null
if test $? != 0; then
  echo "failed. Reason:" >&2
  $MD4SUM $TEST_FILE
  exit 1
fi
if test $TEST_MD4 != $MD4_EMPTY; then
  echo "failed." >&2
  echo "$PRG: Something's wrong with the algorithm, please report." >&2
  exit 1
fi
echo "passed." >&2

#
# Check 2: MD4 of zeros 1
#
echo -n "$PRG: Check 2: MD4 of 9500*1024 zeros... " >&2
dd if=/dev/zero bs=1024 count=9500 > $TEST_FILE 2> /dev/null
if test $? != 0; then
  echo "failed. Reason:" >&2
  dd if=/dev/zero bs=1024 count=9500 > $TEST_FILE
  exit 1
fi
TEST_MD4=`$MD4SUM $TEST_FILE` 2> /dev/null
if test $? != 0; then
  echo "failed. Reason:" >&2
  $MD4SUM $TEST_FILE
  exit 1
fi
if test $TEST_MD4 != $MD4_ZEROS1; then
  echo "failed." >&2
  echo "$PRG: Something's wrong with the algorithm, please report." >&2
  exit 1
fi
echo "passed." >&2

#
# Check 3: MD4 of zeros 2
#
echo -n "$PRG: Check 3: MD4 of 9500*1024+1 zeros... " >&2
dd if=/dev/zero bs=1 count=1 >> $TEST_FILE 2> /dev/null
if test $? != 0; then
  echo "failed. Reason:" >&2
  dd if=/dev/zero bs=1 count=1 >> $TEST_FILE
  exit 1
fi
TEST_MD4=`$MD4SUM $TEST_FILE` 2> /dev/null
if test $? != 0; then
  echo "failed. Reason:" >&2
  $MD4SUM $TEST_FILE
  exit 1
fi
if test $TEST_MD4 != $MD4_ZEROS2; then
  echo "failed." >&2
  echo "$PRG: Something's wrong with the algorithm, please report." >&2
  exit 1
fi
echo "passed." >&2

#
# Check 4: ED2K of zeros 1
#
echo -n "$PRG: Check 4: ED2K of 9500*1024 zeros... " >&2
dd if=/dev/zero bs=1024 count=9500 > $TEST_FILE 2> /dev/null
if test $? != 0; then
  echo "failed. Reason:" >&2
  dd if=/dev/zero bs=1024 count=9500 > $TEST_FILE
  exit 1
fi
TEST_MD4=`$MD4SUM -e $TEST_FILE` 2> /dev/null
if test $? != 0; then
  echo "failed. Reason:" >&2
  $MD4SUM -e $TEST_FILE
  exit 1
fi
if test $TEST_MD4 != $ED2K_ZEROS1; then
  echo "failed." >&2
  echo "$PRG: Something's wrong with the algorithm, please report." >&2
  exit 1
fi
echo "passed." >&2

#
# Check 5: ED2K of zeros 2
#
echo -n "$PRG: Check 5: ED2K of 9500*1024+1 zeros... " >&2
dd if=/dev/zero bs=1 count=1 >> $TEST_FILE 2> /dev/null
if test $? != 0; then
  echo "failed. Reason:" >&2
  dd if=/dev/zero bs=1 count=1 >> $TEST_FILE
  exit 1
fi
TEST_MD4=`$MD4SUM -e $TEST_FILE` 2> /dev/null
if test $? != 0; then
  echo "failed. Reason:" >&2
  $MD4SUM -e $TEST_FILE
  exit 1
fi
if test $TEST_MD4 != $ED2K_ZEROS2; then
  echo "failed." >&2
  echo "$PRG: Something's wrong with the algorithm, please report." >&2
  exit 1
fi
echo "passed." >&2

exit 0
