1#!/bin/sh
2#
3# Copyright (c) 2006 - 2007 Kungliga Tekniska Högskolan
4# (Royal Institute of Technology, Stockholm, Sweden). 
5# All rights reserved. 
6#
7# Redistribution and use in source and binary forms, with or without 
8# modification, are permitted provided that the following conditions 
9# are met: 
10#
11# 1. Redistributions of source code must retain the above copyright 
12#    notice, this list of conditions and the following disclaimer. 
13#
14# 2. Redistributions in binary form must reproduce the above copyright 
15#    notice, this list of conditions and the following disclaimer in the 
16#    documentation and/or other materials provided with the distribution. 
17#
18# 3. Neither the name of the Institute nor the names of its contributors 
19#    may be used to endorse or promote products derived from this software 
20#    without specific prior written permission. 
21#
22# THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 
23# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
24# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
25# ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 
26# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
27# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
28# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
29# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
30# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
31# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
32# SUCH DAMAGE. 
33#
34# $Id$
35#
36
37srcdir="@srcdir@"
38
39rsa="${TESTS_ENVIRONMENT} ./test_rsa@exeext@"
40engine="${TESTS_ENVIRONMENT} ./test_engine_dso@exeext@"
41rand="${TESTS_ENVIRONMENT} ./test_rand@exeext@"
42
43${engine} --test-random > /dev/null || { echo "missing random"; exit 77; }
44
45${rsa} --key=${srcdir}/rsakey.der || \
46	{ echo "rsa test failed" ; exit 1; }
47
48${rsa} --time-key=${srcdir}/rsakey.der || \
49	{ echo "rsa test failed" ; exit 1; }
50
51${rsa} --time-key=${srcdir}/rsakey2048.der || \
52	{ echo "rsa test failed" ; exit 1; }
53
54${rsa} --time-key=generate || \
55	{ echo "rsa test failed" ; exit 1; }
56
57${engine} --rsa=${srcdir}/rsakey.der || \
58	{ echo "engine test failed" ; exit 1; }
59
60${rsa} --loops=4 || { echo "rsa test for 4 loops failed" ; exit 1; }
61
62for a in unix fortuna egd w32crypto ;do
63	${rand} --method=${a} --file=crypto-test 2>error
64	res=$?
65	if test "X$res" != X0 ; then
66            grep "unknown method" error && \
67                { echo "random $a is not available" ; continue; }
68	    grep "random not ready yet" error || \
69		{ echo "random $a ready failing" ; cat error; exit 1; }
70	    echo "random method $a out for lunch"
71	    continue
72	fi
73	${rand} --method=${a} --file=crypto-test2 2>error
74	res=$?
75	if test "X$res" != X0 ; then
76	    grep "random not ready yet" error || \
77		{ echo "random $a ready failing" ; cat error; exit 1; }
78	    echo "random metod $a out for dinner"
79	    continue
80	fi
81	cmp crypto-test crypto-test2 >/dev/null 2>/dev/null && \
82	    { echo "rand output same!" ; exit 1; }
83done
84
85./example_evp_cipher 1 ${srcdir}/test_crypto.in test-out-1 || \
86    { echo "1 failed" ; exit 1; }
87
88for a in 7 15 16 17 31 32 33 ; do
89    ./example_evp_cipher $a ${srcdir}/test_crypto.in test-out-$a
90    cmp test-out-1 test-out-$a || { echo "cmp $a failed" ; exit 1; }
91done
92
93#
94# Last time we run is w/o HOME and RANDFILE to make sure we can do
95# RAND_file_name() when the enviroment is lacking those.
96#
97
98if [ -r /dev/random -o -r /dev/urandom -o -r /dev/srandom -o -r /dev/arandom ] ; then
99
100    # try hard to unset HOME and RANDFILE
101    HOME=
102    RANDFILE=
103
104    unset HOME
105    unset RANDFILE
106
107    ${rand} --method=unix --file=unix 2>error
108    res=$?
109    if test "X$res" != X0 ; then
110        grep "unknown method" error && \
111        { echo "random unix is not available"; exit 0; }
112        grep "random not ready yet" error || \
113    	{ echo "random unix ready failing" ; cat error; exit 1; }
114        echo "random method unix out for lunch"
115        continue
116    fi
117
118fi
119
120exit 0
121