summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile58
-rwxr-xr-xtests/do-sign.sh22
-rwxr-xr-xtests/do-verify.sh23
-rw-r--r--tests/openssl.direct.cnf11
-rw-r--r--tests/openssl.p11p.cnf11
5 files changed, 125 insertions, 0 deletions
diff --git a/tests/Makefile b/tests/Makefile
new file mode 100644
index 0000000..9d83a7e
--- /dev/null
+++ b/tests/Makefile
@@ -0,0 +1,58 @@
+# Required packages (Debian 9/stretch):
+# libengine-pkcs11-openssl: /usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so
+# softhsm2: /usr/bin/softhsm2-util
+# gnutls-bin: /usr/bin/p11tool
+# openssl: /usr/bin/openssl
+
+TEXT = "A foo is a bar"
+SOFTHSM = /usr/bin/softhsm2-util
+
+SOFTHSM_PROVIDER = /usr/lib/softhsm/libsofthsm2.so
+P11P_PROVIDER = /home/linus/usr/lib/pkcs11/p11-kit-client.so
+
+p11p-softhsm: testsig.hsm.p11p.pem
+ echo "$(TEXT)" |./do-verify.sh $< $(P11P_PROVIDER) ./openssl.p11p.cnf $(SOFTHSM_PROVIDER)
+
+direct-softhsm: testsig.hsm.pem
+ echo "$(TEXT)" | ./do-verify.sh $< $(SOFTHSM_PROVIDER) ./openssl.direct.cnf
+
+softhsm-token-setup: softhsm-token-setup.stamp
+softhsm-token-setup.stamp: softhsm/tokens testkey.pkcs8
+ test -x $(SOFTHSM)
+ ( \
+ BASEDIR=$$(pwd); \
+ export SOFTHSM2_CONF=$$BASEDIR/softhsm/softhsm2.conf; \
+ echo "directories.tokendir = $$BASEDIR/softhsm/tokens/" > $$SOFTHSM2_CONF; \
+ ${SOFTHSM} --init-token --free --label mytoken --so-pin ffffff --pin ffff; \
+ ${SOFTHSM} --import testkey.pkcs8 --token mytoken --label mykey --id 00 --pin ffff; \
+ )
+ touch $@
+
+softhsm/tokens:
+ mkdir -p $@
+
+testkey.pkcs8: testkey.pem
+ openssl pkey -in $< -outform pem -out $@
+
+testkey.pem:
+ openssl genrsa -out $@ 2048
+
+testsig.local.pem: testkey.pem
+ echo "$(TEXT)" | openssl dgst -sha256 -sign testkey.pem -out $@
+
+testsig.hsm.pem: softhsm-token-setup
+ echo "$(TEXT)" | ./do-sign.sh $@ $(SOFTHSM_PROVIDER) ./openssl.direct.cnf
+
+testsig.hsm.p11p.pem: softhsm-token-setup
+ echo "$(TEXT)" | ./do-sign.sh $@ $(P11P_PROVIDER) ./openssl.p11p.cnf $(SOFTHSM_PROVIDER)
+
+server-running:
+# FIXME: use env printed to do 'p11-kit server --kill', at some point
+
+clean:
+ -rm -r softhsm
+ -rm softhsm-token-setup.stamp
+ -rm testkey.pem testkey.pkcs8
+ -rm testsig.*.pem
+
+.PHONY: clean
diff --git a/tests/do-sign.sh b/tests/do-sign.sh
new file mode 100755
index 0000000..9552a5a
--- /dev/null
+++ b/tests/do-sign.sh
@@ -0,0 +1,22 @@
+#! /bin/sh
+
+set -eu
+
+SIGFILE="$1"; shift
+P11_PROVIDER="$1"; shift
+OPENSSL_CONF="$1"; shift
+SERVER_PROVIDER=
+[ $# -ge 1 ] && { SERVER_PROVIDER="$1"; shift; }
+
+if [ -n "$SERVER_PROVIDER" ]; then
+ P11_KIT_ENV=$(p11-kit server $SERVER_PROVIDER)
+ eval "$P11_KIT_ENV"
+fi
+
+openssl dgst -sha256 -engine pkcs11 -keyform ENGINE \
+ -sign "$(p11tool --login --provider=$P11_PROVIDER --list-token-urls)" \
+ -out $SIGFILE
+
+if [ -n "$SERVER_PROVIDER" ]; then
+ p11-kit server --kill > /dev/null
+fi
diff --git a/tests/do-verify.sh b/tests/do-verify.sh
new file mode 100755
index 0000000..a18a762
--- /dev/null
+++ b/tests/do-verify.sh
@@ -0,0 +1,23 @@
+#! /bin/sh
+
+set -eu
+
+SIGFILE="$1"; shift
+P11_PROVIDER="$1"; shift
+OPENSSL_CONF="$1"; shift
+SERVER_PROVIDER=
+[ $# -ge 1 ] && { SERVER_PROVIDER="$1"; shift; }
+
+
+if [ -n "$SERVER_PROVIDER" ]; then
+ P11_KIT_ENV=$(p11-kit server $SERVER_PROVIDER)
+ eval "$P11_KIT_ENV"
+fi
+
+openssl dgst -sha256 -engine pkcs11 -keyform ENGINE \
+ -prverify "$(p11tool --login --provider=$P11_PROVIDER --list-token-urls)" \
+ -signature $SIGFILE | egrep "^Verified OK$"
+
+if [ -n "$SERVER_PROVIDER" ]; then
+ p11-kit server --kill > /dev/null
+fi
diff --git a/tests/openssl.direct.cnf b/tests/openssl.direct.cnf
new file mode 100644
index 0000000..a1add57
--- /dev/null
+++ b/tests/openssl.direct.cnf
@@ -0,0 +1,11 @@
+openssl_conf = openssl_init
+
+[openssl_init]
+engines=engine_section
+
+[engine_section]
+pkcs11 = pkcs11_section
+
+[pkcs11_section]
+dynamic_path = /usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so
+MODULE_PATH = /usr/lib/softhsm/libsofthsm2.so
diff --git a/tests/openssl.p11p.cnf b/tests/openssl.p11p.cnf
new file mode 100644
index 0000000..30272c7
--- /dev/null
+++ b/tests/openssl.p11p.cnf
@@ -0,0 +1,11 @@
+openssl_conf = openssl_init
+
+[openssl_init]
+engines=engine_section
+
+[engine_section]
+pkcs11 = pkcs11_section
+
+[pkcs11_section]
+dynamic_path = /usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so
+MODULE_PATH = /home/linus/usr/lib/pkcs11/p11-kit-client.so