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