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