1#!/bin/sh
2#
3# Copyright (c) 2006 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@"
38objdir="@objdir@"
39
40stat="--statistic-file=${objdir}/statfile"
41
42hxtool="${TESTS_ENVIRONMENT} ./hxtool ${stat}"
43
44if ${hxtool} info | grep 'rsa: hcrypto null RSA' > /dev/null ; then
45    exit 77
46fi
47if ${hxtool} info | grep 'rand: not available' > /dev/null ; then
48    exit 77
49fi
50
51
52echo "Bleichenbacher good cert (from eay)"
53${hxtool} verify --missing-revoke \
54    --time=2006-09-25 \
55    cert:FILE:$srcdir/data/bleichenbacher-good.pem \
56    anchor:FILE:$srcdir/data/bleichenbacher-good.pem > /dev/null || exit 1
57
58echo "Bleichenbacher bad cert (from eay)"
59${hxtool} verify --missing-revoke \
60    --time=2006-09-25 \
61    cert:FILE:$srcdir/data/bleichenbacher-bad.pem \
62    anchor:FILE:$srcdir/data/bleichenbacher-bad.pem > /dev/null && exit 1
63
64echo "Bleichenbacher good cert (from yutaka)"
65${hxtool} verify --missing-revoke \
66    --time=2006-09-25 \
67    cert:FILE:$srcdir/data/yutaka-pad-ok-cert.pem \
68    anchor:FILE:$srcdir/data/yutaka-pad-ok-ca.pem > /dev/null || exit 1
69
70echo "Bleichenbacher bad cert (from yutaka)"
71${hxtool} verify --missing-revoke \
72    --time=2006-09-25 \
73    cert:FILE:$srcdir/data/yutaka-pad-broken-cert.pem \
74    anchor:FILE:$srcdir/data/yutaka-pad-broken-ca.pem > /dev/null && exit 1
75
76# Ralf-Philipp Weinmann <weinmann@cdc.informatik.tu-darmstadt.de>
77# Andrew Pyshkin <pychkine@cdc.informatik.tu-darmstadt.de>
78echo "Bleichenbacher bad cert (sf pad correct)"
79${hxtool} verify --missing-revoke \
80    --time=2006-09-25 \
81    cert:FILE:$srcdir/data/bleichenbacher-sf-pad-correct.pem \
82    anchor:FILE:$srcdir/data/sf-class2-root.pem > /dev/null && exit 1
83
84echo Read 50 kilobyte random data
85${hxtool} random-data 50kilobyte > random-data || exit 1
86
87echo "crypto select1"
88${hxtool} crypto-select > test || { echo "select1"; exit 1; }
89cmp test ${srcdir}/tst-crypto-select1 > /dev/null || \
90	{ echo "select1 failure"; exit 1; }
91
92echo "crypto select1"
93${hxtool} crypto-select --type=digest > test || { echo "select1"; exit 1; }
94cmp test ${srcdir}/tst-crypto-select1 > /dev/null || \
95	{ echo "select1 failure"; exit 1; }
96
97echo "crypto select2"
98${hxtool} crypto-select --type=public-sig > test || { echo "select2"; exit 1; }
99cmp test ${srcdir}/tst-crypto-select2 > /dev/null || \
100	{ echo "select2 failure"; exit 1; }
101
102echo "crypto select3"
103${hxtool} crypto-select \
104	--type=public-sig \
105	--peer-cmstype=1.2.840.113549.1.1.4 \
106	 > test || { echo "select3"; exit 1; }
107cmp test ${srcdir}/tst-crypto-select3 > /dev/null || \
108	{ echo "select3 failure"; exit 1; }
109
110echo "crypto select4"
111${hxtool} crypto-select \
112	--type=public-sig \
113	--peer-cmstype=1.2.840.113549.1.1.5 \
114	--peer-cmstype=1.2.840.113549.1.1.4 \
115	 > test || { echo "select4"; exit 1; }
116cmp test ${srcdir}/tst-crypto-select4 > /dev/null || \
117	{ echo "select4 failure"; exit 1; }
118
119echo "crypto select5"
120${hxtool} crypto-select \
121	--type=public-sig \
122	--peer-cmstype=1.2.840.113549.1.1.11 \
123	--peer-cmstype=1.2.840.113549.1.1.5 \
124	 > test || { echo "select5"; exit 1; }
125cmp test ${srcdir}/tst-crypto-select5 > /dev/null || \
126	{ echo "select5 failure"; exit 1; }
127
128echo "crypto select6"
129${hxtool} crypto-select \
130	--type=public-sig \
131	--peer-cmstype=1.2.840.113549.2.5 \
132	--peer-cmstype=1.2.840.113549.1.1.5 \
133	 > test || { echo "select6"; exit 1; }
134cmp test ${srcdir}/tst-crypto-select6 > /dev/null || \
135	{ echo "select6 failure"; exit 1; }
136
137echo "crypto select7"
138${hxtool} crypto-select \
139	--type=secret \
140	--peer-cmstype=2.16.840.1.101.3.4.1.42 \
141	--peer-cmstype=1.2.840.113549.3.7 \
142	--peer-cmstype=1.2.840.113549.1.1.5 \
143	 > test || { echo "select7"; exit 1; }
144cmp test ${srcdir}/tst-crypto-select7 > /dev/null || \
145	{ echo "select7 failure"; exit 1; }
146
147#echo "crypto available1"
148#${hxtool} crypto-available \
149#	--type=all \
150#	> test || { echo "available1"; exit 1; }
151#cmp test ${srcdir}/tst-crypto-available1 > /dev/null || \
152#	{ echo "available1 failure"; exit 1; }
153
154echo "crypto available2"
155${hxtool} crypto-available \
156	--type=digest \
157	> test || { echo "available2"; exit 1; }
158cmp test ${srcdir}/tst-crypto-available2 > /dev/null || \
159	{ echo "available2 failure"; exit 1; }
160
161#echo "crypto available3"
162#${hxtool} crypto-available \
163#	--type=public-sig \
164#	> test || { echo "available3"; exit 1; }
165#cmp test ${srcdir}/tst-crypto-available3 > /dev/null || \
166#	{ echo "available3 failure"; exit 1; }
167
168echo "copy keystore FILE existing -> FILE"
169${hxtool} certificate-copy \
170    FILE:${srcdir}/data/test.crt,${srcdir}/data/test.key \
171    FILE:out.pem || exit 1
172
173echo "copy keystore FILE -> FILE"
174${hxtool} certificate-copy \
175    FILE:out.pem \
176    FILE:out2.pem || exit 1
177
178echo "copy keystore FILE -> PKCS12"
179${hxtool} certificate-copy \
180    FILE:out.pem \
181    PKCS12:out2.pem || exit 1
182
183echo "print certificate with utf8"
184${hxtool} print \
185	FILE:$srcdir/data/j.pem >/dev/null 2>/dev/null || exit 1
186
187echo "Make sure that we can parse EC private keys"
188${hxtool} print --content \
189    FILE:$srcdir/data/pkinit-ec.crt,$srcdir/data/pkinit-ec.key \
190    > /dev/null || exit 1
191
192exit 0
193