added zlib and reorgnaized some stuff
[gnupg.git] / checks / checkit
1 #!/bin/bash
2 #  Script for G10 testing
3 #---------------------------------------------------------
4
5 #--------------------------------
6 #------ constants ---------------
7 #--------------------------------
8
9 usrname1="one"
10 usrpass1="def"
11 usrname2="two"
12 usrpass2="abc"
13 plain_files="plain-1 plain-2 plain-3"
14 data_files=""
15 exp_files=""
16
17
18 #--------------------------------
19 #------ utility functions -------
20 #--------------------------------
21
22 fatal () {
23     echo "$pgmname: fatal:" $* >&2
24     exit 1;
25 }
26
27 error () {
28     echo "$pgmname:" $* >&2
29     exit 1
30 }
31
32 info () {
33     echo "$pgmname:" $* >&2
34 }
35
36 chdir () {
37     cd $1 || fatal "cannot cd to $1"
38 }
39
40 cleanup () {
41     rm $data_files x y z 2>/dev/null
42     echo "#empty" >./.g10/options
43 }
44
45
46 run_g10 () {
47     eval HOME=. ../g10/g10 $*
48     if [ $? != 0 ] ; then
49         g10_err=$?
50         echo "(HOME=. ../g10/g10 $*) failed" >&2
51         error "g10 failed: $g10_err" >&2
52     fi
53 }
54
55 #--------------------------------
56 #-------- main program ----------
57 #--------------------------------
58
59 set -e
60 pgmname=$(basename $0)
61 #trap cleanup EXIT SIGHUP SIGINT SIGQUIT
62
63
64 # some checks
65 [ -d "./.g10" ] || fatal "subdirectory .g10 missing"
66 for i in $plain_files; do
67     [ -f $i ] || fatal "$i: missing"
68 done
69 for i in $exp_files; do
70     [ -f $i ] || fatal "$i: script missing"
71 done
72 # create the keyrings
73
74 cat <<EOF  >./.g10/options
75 no-greeting
76 no-secmem-warning
77 batch
78 EOF
79
80 # print the G10 version
81 run_g10 --version
82 # intialize the trustdb
83
84 info Checking decryption
85 for i in $plain_files ; do
86     echo "$usrpass1" | run_g10 --passphrase-fd 0 -o y --yes $i.asc
87     cmp $i y || error "$i: mismatch"
88 done
89
90 #info Checking cleartext signatures
91 ## There is a minor glitch, which appends a lf to the cleartext.
92 ## I do not consider that a bug, but I have to use the head .. mimic.
93 ## It is not clear what should happen to leading LFs, we must
94 ## change the defintion of cleartext, so that only 1 empty line
95 ## must follow the headers, but some specs say: any number of empty lines ..
96 ## clean-sat removes leading LFs
97 ## I know that this does not work for random data files (due to large lines
98 ## or what ever) - I hope we can live with it.
99 #for i in $plain_files; do
100 #    echo "$usrpass1" | run_g10 --passphrase-fd 0 -sat -o x --yes $i
101 #    run_g10 -o y --yes x
102 #    ../tools/clean-sat < $i > z
103 #    head -c $[ $(cat y | wc -c) - 1 ] y | diff - z || error "$i: mismatch"
104 #done
105
106 info Creating some random data files
107 for i in 500 9000 32000 80000; do
108     head -c $i /dev/urandom >data-$i
109     data_files="$data_files data-$i"
110 done
111
112 #info Checking armored signatures
113 #for i in $plain_files $data_files ; do
114 #    echo "$usrpass1" | run_g10 --passphrase-fd 0 -sa -o x --yes $i
115 #    run_g10 -o y --yes x
116 #    cmp $i y || error "$i: mismatch"
117 #done
118 #
119 #info Checking signatures
120 #for i in $plain_files $data_files; do
121 #    echo "$usrpass1" | run_g10 --passphrase-fd 0 -s -o x --yes $i
122 #    run_g10 -o y --yes x
123 #    cmp $i y || error "$i: mismatch"
124 #done
125
126
127 info Checking armored encryption
128 for i in $plain_files $data_files ; do
129     info "file $i"
130     run_g10 -v -ea -o x --yes -r "$usrname2" $i
131     run_g10 -v -o y --yes x
132     cmp $i y || error "$i: mismatch"
133 done
134
135 info Checking armored encryption with a pipe
136 for i in $plain_files $data_files ; do
137     info "file $i"
138     run_g10 -ea --yes -r "$usrname2" < $i | tee x \
139     | run_g10 -o y --yes
140     cmp $i y || error "$i: mismatch"
141     run_g10 --yes < x > y
142     cmp $i y || error "$i: mismatch"
143 done
144
145 info Checking encryption
146 for i in $plain_files $data_files ; do
147     run_g10 -e -o x --yes -r "$usrname2" $i
148     run_g10 -o y --yes x
149     cmp $i y || error "$i: mismatch"
150 done
151
152 info Checking encryption with a pipe
153 for i in $plain_files $data_files ; do
154     run_g10 -e --yes -r "$usrname2" < $i \
155     | run_g10 --yes > y
156     cmp $i y || error "$i: mismatch"
157 done
158
159
160 info Checking signing and encryption
161 for i in $plain_files $data_files ; do
162     echo "$usrpass1" \
163     | run_g10 --passphrase-fd 0 -se -o x --yes -r "$usrname2" $i
164     run_g10 -o y --yes x
165     cmp $i y || error "$i: mismatch"
166 done
167
168 info Checking armored signing and encryption
169 for i in $plain_files $data_files ; do
170     echo "$usrpass1" \
171     | run_g10 --passphrase-fd 0 -sae -o x --yes -r "$usrname2" $i
172     run_g10 -o y --yes x
173     cmp $i y || error "$i: mismatch"
174 done
175
176
177 info Checking armored detached signatures
178 for i in $plain_files $data_files ; do
179     echo "$usrpass1" | run_g10 --passphrase-fd 0 -sab -o x --yes $i
180     run_g10 -o /dev/null --yes x  <$i || error "$i: bad signature"
181 done
182
183 info Checking detached signatures
184 for i in $plain_files $data_files ; do
185     echo "$usrpass1" | run_g10 --passphrase-fd 0 -sb -o x --yes $i
186     run_g10 -o /dev/null --yes x  <$i || error "$i: bad signature"
187 done
188
189
190 info Checking detached signatures of multiple files
191 i="$plain_files $data_files"
192 echo "$usrpass1" | run_g10 --passphrase-fd 0 -sb -o x --yes $i
193 cat $i | run_g10 -o /dev/null --yes x || error "$i: bad signature"
194
195 info Checking armored detached signatures of multiple files
196 i="$plain_files $data_files"
197 echo "$usrpass1" | run_g10 --passphrase-fd 0 -sab -o x --yes $i
198 cat $i | run_g10 -o /dev/null --yes x || error "$i: bad signature"
199
200
201 info "All tests passed."
202 exit 0
203