diff options
Diffstat (limited to 'checks/checkit')
-rwxr-xr-x | checks/checkit | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/checks/checkit b/checks/checkit new file mode 100755 index 000000000..3ffce35c4 --- /dev/null +++ b/checks/checkit @@ -0,0 +1,184 @@ +#!/bin/bash +# Script for G10 testing +#--------------------------------------------------------- + +#-------------------------------- +#------ constants --------------- +#-------------------------------- + +usrname1="one" +usrpass1="def" +usrname2="two" +usrpass2="abc" +plain_files="plain-1 plain-2 plain-3" +data_files="" +exp_files="" +last_command="" + + +#-------------------------------- +#------ utility functions ------- +#-------------------------------- + +fatal () { + echo "$pgmname: fatal:" $* >&2 + exit 1; +} + +error () { + echo "$pgmname:" $* >&2 + echo "($last_command) failed" >&2 + exit 1 +} + +info () { + echo "$pgmname:" $* >&2 +} + +chdir () { + cd $1 || fatal "cannot cd to $1" +} + +run_g10 () { + last_command="HOME=. ../g10/g10 $*" + eval HOME=. ../g10/g10 $* +} + +#-------------------------------- +#-------- main program ---------- +#-------------------------------- + +set -e +pgmname=$(basename $0) + +# some checks +[ -d "./.g10" ] || fatal "subdirectory .g10 missing" +for i in $plain_files; do + [ -f $i ] || fatal "$i: missing" +done +for i in $exp_files; do + [ -f $i ] || fatal "$i: script missing" +done + +cat <<EOF >./.g10/options +no-greeting +no-secmem-warning +batch +EOF + +# print the G10 version +run_g10 --version + +info Checking cleartext signatures +# There is a minor glitch, which appends a lf to the cleartext. +# I do not consider that a bug, but I have to use the head .. mimic. +# It is not clear what should happen to leading LFs, we must +# change the defintion of cleartext, so that only 1 empty line +# must follow the headers, but some specs say: any number of empty lines .. +# clean-sat removes leading LFs +# I know that this does not work for random data files (due to large lines +# or what ever) - I hope we can live with it. +for i in $plain_files; do + echo "$usrpass1" | run_g10 --passphrase-fd 0 -sat -o x --yes $i || error "g10 failed: $?" + run_g10 -o y --yes x || error "g10 failed: $?" + ../tools/clean-sat < $i > z + head -c $[ $(cat y | wc -c) - 1 ] y | diff - z || error "$i: mismatch" +done + +info Creating some random data files +for i in 500 9000 32000 80000; do + head -c $i /dev/urandom >data-$i + data_files="$data_files data-$i" +done + +info Checking armored signatures +for i in $plain_files $data_files ; do + echo "$usrpass1" | run_g10 --passphrase-fd 0 -sa -o x --yes $i || error "g10 failed: $?" + run_g10 -o y --yes x || error "g10 failed: $?" + cmp $i y || error "$i: mismatch" +done + +info Checking signatures +for i in $plain_files $data_files; do + echo "$usrpass1" | run_g10 --passphrase-fd 0 -s -o x --yes $i || error "g10 failed: $?" + run_g10 -o y --yes x || error "g10 failed: $?" + cmp $i y || error "$i: mismatch" +done + + +info Checking armored encryption +for i in $plain_files $data_files ; do + run_g10 -ea -o x --yes -r "$usrname2" $i || error "g10 failed: $?" + run_g10 -o y --yes x || error "g10 failed: $?" + cmp $i y || error "$i: mismatch" +done + +info Checking armored encryption with a pipe +for i in $plain_files $data_files ; do + run_g10 -ea --yes -r "$usrname2" < $i | tee x \ + | run_g10 -o y --yes || error "g10 failed: $?" + cmp $i y || error "$i: mismatch" + run_g10 --yes < x > y || error "g10 failed: $?" + cmp $i y || error "$i: mismatch" +done + +info Checking encryption +for i in $plain_files $data_files ; do + run_g10 -e -o x --yes -r "$usrname2" $i || error "g10 failed: $?" + run_g10 -o y --yes x || error "g10 failed: $?" + cmp $i y || error "$i: mismatch" +done + +info Checking encryption with a pipe +for i in $plain_files $data_files ; do + run_g10 -e --yes -r "$usrname2" < $i \ + | run_g10 --yes > y || error "g10 failed: $?" + cmp $i y || error "$i: mismatch" +done + + +info Checking signing and encryption +for i in $plain_files $data_files ; do + echo "$usrpass1" \ + | run_g10 --passphrase-fd 0 -se -o x --yes -r "$usrname2" $i + run_g10 -o y --yes x || error "g10 failed: $?" + cmp $i y || error "$i: mismatch" +done + +info Checking armored signing and encryption +for i in $plain_files $data_files ; do + echo "$usrpass1" \ + | run_g10 --passphrase-fd 0 -sae -o x --yes -r "$usrname2" $i || error "g10 failed: $?" + run_g10 -o y --yes x || error "g10 failed: $?" + cmp $i y || error "$i: mismatch" +done + + +info Checking armored detached signatures +for i in $plain_files $data_files ; do + echo "$usrpass1" | run_g10 --passphrase-fd 0 -sab -o x --yes $i || error "g10 failed: $?" + run_g10 -o /dev/null --yes x <$i || error "$i: bad signature" +done + +info Checking detached signatures +for i in $plain_files $data_files ; do + echo "$usrpass1" | run_g10 --passphrase-fd 0 -sb -o x --yes $i || error "g10 failed: $?" + run_g10 -o /dev/null --yes x <$i || error "$i: bad signature" +done + + +info Checking detached signatures of multiple files +i="$plain_files $data_files" +echo "$usrpass1" | run_g10 --passphrase-fd 0 -sb -o x --yes $i || error "g10 failed: $?" +cat $i | run_g10 -o /dev/null --yes x || error "$i: bad signature" + +info Checking armored detached signatures of multiple files +i="$plain_files $data_files" +echo "$usrpass1" | run_g10 --passphrase-fd 0 -sab -o x --yes $i || error "g10 failed: $?" +cat $i | run_g10 -o /dev/null --yes x || error "$i: bad signature" + +rm $data_files x y z + +info "All tests passed." +exit 0 + |