#! /bin/csh -f
#
# run CSP/X regression tests.
#
set BUILD_DIR=$LOCAL_BUILD_DIR
#
set QUICK_TEST = 1
set QUIET= 
set VERB= 
# 
# CSPDL null for bare CSP, 'D' for CSPDL combo
#
set CSPDL=
set RAWCSP=YES
#
# note the 's' option is here for backwards compatibility; the short
# option is now the default.
#
while ( $#argv > 0 )
    switch ( "$argv[1]" )
        case s:
            set QUICK_TEST = 1
            shift
            breaksw
        case l:
            set QUICK_TEST = 0
            shift
            breaksw
        case v:
            set VERB = v
            shift
            breaksw
        case q:
            set QUIET = q
            shift
            breaksw
        case D:
            set CSPDL = D
			set RAWCSP = NO
            shift
            breaksw
        default:
            cat cspdvt_usage
            exit(1)
    endsw
end
#
# Select 'quick' or 'normal' test params
#
if($QUICK_TEST == 1) then
    set SIGTEST_ARGS=
    set BADSIG_ARGS="l=4 i=10"
	set MACTEST_ARGS=
	set BADMAC_ARGS=
	set DSAPARTIAL_ARGS=
	set HASHTEST_ARGS="l=100"
	set HASHCLONE_ARGS=
	set SYMTEST_ARGS=
	set ASYMTEST_ARGS="u"
	set MINIWRAP_ARGS="l=4"
	set WRAPTEST_ARGS="l=2 k"
	set PBETEST_ARGS="l=4"
	set KEYHASH_ARGS=
	set KEYHASH_ASYM_ARGS=
	set KEYSTORE_ARGS=
	set SYMDELTA_ARGS=
	set SYMCOMPAT_ARGS=
	set HASHCOMPAT_ARGS=
	set ASYMCOMPAT_ARGS="l=2 k=512"
	set MACCOMPAT_ARGS=
	set BADATTR_ARGS=
	set RAWSIG_ARGS="l=2 i=2 s"
	set DHTEST_ARGS="i=dhParams_512.der"
	set ECDHTEST_ARGS=
else
    set SIGTEST_ARGS=
    set BADSIG_ARGS="l=20 k=r"
	set DSAPARTIAL_ARGS="l=100"
	set MACTEST_ARGS=
	set BADMAC_ARGS="l=100"
	set HASHTEST_ARGS="l=1000"
	set HASHCLONE_ARGS="l=200"
	set SYMTEST_ARGS="l=500"
	set ASYMTEST_ARGS=
	set MINIWRAP_ARGS=
	set WRAPTEST_ARGS=
	set PBETEST_ARGS=
	set KEYHASH_ARGS=
	set KEYHASH_ASYM_ARGS=
	set KEYSTORE_ARGS=
	set SYMDELTA_ARGS="l=50"
	set SYMCOMPAT_ARGS=
	set HASHCOMPAT_ARGS="l=1000"
	set ASYMCOMPAT_ARGS="l=10"
	set MACCOMPAT_ARGS="l=1000"
	set BADATTR_ARGS=
	set RAWSIG_ARGS=
	set DHTEST_ARGS="k=1024"
	set ECDHTEST_ARGS="l=100"
endif
#
# First, test the basic Digest, MAC, and symmetrict algorithms in libSystem. 
#
set CSPXUTILS=`pwd`
if($RAWCSP == YES) then
	./ccdvt $QUIET || exit(1)
endif
#
# Basic digest and MAC tests
#
$BUILD_DIR/hashTest $HASHTEST_ARGS $QUIET $VERB $CSPDL || exit(1)
if($RAWCSP == YES) then
	$BUILD_DIR/hashClone $HASHCLONE_ARGS $QUIET $VERB $CSPDL || exit(1)
endif
#TODO $BUILD_DIR/hashCompat $HASHCOMPAT_ARGS $QUIET $VERB $CSPDL || exit(1)
$BUILD_DIR/sha2VectorsCdsa $QUIET $CSPDL || exit(1)
#TODO $BUILD_DIR/macCompat $MACCOMPAT_ARGS $QUIET $VERB $CSPDL || exit(1)
$BUILD_DIR/macTest $MACTEST_ARGS $QUIET $VERB $CSPDL || exit(1)
$BUILD_DIR/badmac $BADMAC_ARGS $QUIET $VERB $CSPDL || exit(1)
#
# Basic symmetric encryption tests
#
# symTest - once with padding, once without
$BUILD_DIR/symTest $SYMTEST_ARGS $QUIET $VERB $CSPDL || exit(1)
$BUILD_DIR/symTest $SYMTEST_ARGS $QUIET $VERB $CSPDL o || exit(1)
#
# symCompat - once with the full set of algorithms
#
#TODO $BUILD_DIR/symCompat $SYMCOMPAT_ARGS $QUIET $VERB $CSPDL || exit(1)
# 
# And one specifically to test AES padding mode (which uses ssleay instead of 
# the NIST reference implementation)
#
$BUILD_DIR/symCompat $SYMCOMPAT_ARGS a=a y $QUIET $VERB $CSPDL || exit(1)
$BUILD_DIR/contextReuse $QUIET $VERB $CSPDL || exit(1)
#
# Signature tests
#
# One for RSA
$BUILD_DIR/sigtest $SIGTEST_ARGS $QUIET $VERB $CSPDL || exit(1)
# Several for for ECDSA, with some keys in blob form for raw CSP only
$BUILD_DIR/sigtest a=E $SIGTEST_ARGS $QUIET $VERB $CSPDL || exit(1)
if($RAWCSP == YES) then
	$BUILD_DIR/sigtest a=7 b r $SIGTEST_ARGS $QUIET $VERB $CSPDL || exit(1)
	$BUILD_DIR/sigtest a=8 k=256 b $SIGTEST_ARGS $QUIET $VERB $CSPDL || exit(1)
	$BUILD_DIR/sigtest a=9 k=521 b r $SIGTEST_ARGS $QUIET $VERB $CSPDL || exit(1)
else
	$BUILD_DIR/sigtest a=7 $SIGTEST_ARGS $QUIET $VERB $CSPDL || exit(1)
	$BUILD_DIR/sigtest a=8 k=256 $SIGTEST_ARGS $QUIET $VERB $CSPDL || exit(1)
	$BUILD_DIR/sigtest a=9 k=521 $SIGTEST_ARGS $QUIET $VERB $CSPDL || exit(1)
endif
# this one tests all algorithms with random key sizes
$BUILD_DIR/badsig $BADSIG_ARGS $QUIET $VERB $CSPDL || exit(1)
#
# Misc. CSP tests
#
$BUILD_DIR/keyDate $QUIET $VERB $CSPDL || exit(1)
$BUILD_DIR/keyHash $KEYHASH_ARGS $QUIET $VERB $CSPDL || exit(1)
cd $CSPXUTILS/keyHashAsym
$BUILD_DIR/keyHashAsym $KEYHASH_ASYM_ARGS $QUIET $VERB $CSPDL || exit(1)
if($RAWCSP == NO) then
	$BUILD_DIR/keyStore $KEYSTORE_ARGS $QUIET $VERB || exit(1)
endif
if($RAWCSP == YES) then
	$BUILD_DIR/dhTest $DHTEST_ARGS $QUIET $VERB $CSPDL || exit(1)
endif
#
# One run for ECDH, one for ECDH_X963_KDF
#
$BUILD_DIR/ecdhTest $ECDHTEST_ARGS $QUIET $VERB $CSPDL || exit(1)
$BUILD_DIR/ecdhTest X $ECDHTEST_ARGS $QUIET $VERB $CSPDL || exit(1)
# this requires param files in cwd
cd $CSPXUTILS/dsaPartial
$BUILD_DIR/dsaPartial $DSAPARTIAL_ARGS $QUIET $VERB $CSPDL || exit(1)
$BUILD_DIR/symDelta $SYMDELTA_ARGS $QUIET $VERB $CSPDL || exit(1)
$BUILD_DIR/asymTest $ASYMTEST_ARGS $QUIET $VERB $CSPDL || exit(1)
$BUILD_DIR/miniWrap $MINIWRAP_ARGS $QUIET $VERB $CSPDL || exit(1)
$BUILD_DIR/wrapTest $WRAPTEST_ARGS $QUIET $VERB $CSPDL || exit(1)
$BUILD_DIR/pbeTest $PBETEST_ARGS $QUIET $VERB $CSPDL || exit(1)
#TODO $BUILD_DIR/asymCompat $ASYMCOMPAT_ARGS $QUIET $VERB $CSPDL || exit(1)
#TODO $BUILD_DIR/badattr $BADATTR_ARGS $QUIET $VERB $CSPDL || exit(1)
$BUILD_DIR/rawSig $RAWSIG_ARGS $QUIET $VERB $CSPDL || exit(1)
$BUILD_DIR/ssl2Padding $QUIET $VERB $CSPDL || exit(1)

echo ===== cspdvt success =====
