aboutsummaryrefslogtreecommitdiffstats
path: root/checks/checkit
diff options
context:
space:
mode:
Diffstat (limited to 'checks/checkit')
-rwxr-xr-xchecks/checkit184
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
+