[openssh-commits] [openssh] 04/05: upstream: regress test for PKCS#11 directly in ssh (not via ssh-agent)

git+noreply at mindrot.org git+noreply at mindrot.org
Thu Oct 16 11:17:49 AEDT 2025


This is an automated email from the git hooks/post-receive script.

djm pushed a commit to branch master
in repository openssh.

commit 946574b97ceae126e0f0af2db43abb454937defe
Author: djm at openbsd.org <djm at openbsd.org>
AuthorDate: Thu Oct 16 00:01:54 2025 +0000

    upstream: regress test for PKCS#11 directly in ssh (not via ssh-agent)
    
    would have caught bz3879
    
    OpenBSD-Regress-ID: ceafb1e9a6c07185cc0cb0589f3170489a516123
---
 regress/Makefile      |  8 +++++---
 regress/ssh-pkcs11.sh | 40 ++++++++++++++++++++++++++++++++++++++++
 regress/test-exec.sh  | 10 ++++++++--
 3 files changed, 53 insertions(+), 5 deletions(-)

diff --git a/regress/Makefile b/regress/Makefile
index ece093a2b..0bb90bcb4 100644
--- a/regress/Makefile
+++ b/regress/Makefile
@@ -1,4 +1,4 @@
-#	$OpenBSD: Makefile,v 1.140 2025/07/04 07:52:17 djm Exp $
+#	$OpenBSD: Makefile,v 1.141 2025/10/16 00:01:54 djm Exp $
 
 tests:		prep file-tests t-exec unit
 
@@ -114,7 +114,8 @@ LTESTS= 	connect \
 		agent-pkcs11-cert \
 		penalty \
 		penalty-expire \
-		connect-bigconf
+		connect-bigconf \
+		ssh-pkcs11
 
 INTEROP_TESTS=	putty-transfer putty-ciphers putty-kex conch-ciphers
 INTEROP_TESTS+=	dropbear-ciphers dropbear-kex dropbear-server
@@ -151,7 +152,8 @@ CLEANFILES=	*.core actual agent-key.* authorized_keys_${USERNAME} \
 		sshd_proxy_orig t10.out t10.out.pub t12.out t12.out.pub \
 		t2.out t3.out t6.out1 t6.out2 t7.out t7.out.pub \
 		t8.out t8.out.pub t9.out t9.out.pub \
-		timestamp testdata user_*key* user_ca* user_key*
+		timestamp testdata user_*key* user_ca* user_key* \
+		pin.sh nopin.sh wrongpin.sh key.pub
 
 # Enable all malloc(3) randomisations and checks
 TEST_ENV=      "MALLOC_OPTIONS=CFGJRSUX"
diff --git a/regress/ssh-pkcs11.sh b/regress/ssh-pkcs11.sh
new file mode 100644
index 000000000..96680fca9
--- /dev/null
+++ b/regress/ssh-pkcs11.sh
@@ -0,0 +1,40 @@
+#	$OpenBSD: ssh-pkcs11.sh,v 1.1 2025/10/16 00:01:54 djm Exp $
+#	Placed in the Public Domain.
+
+tid="pkcs11 ssh test"
+
+p11_setup || skip "No PKCS#11 library found"
+
+grep -iv IdentityFile $OBJ/ssh_proxy |
+	grep -vi BatchMode > $OBJ/ssh_proxy.orig
+#echo "IdentitiesOnly=yes" >> $OBJ/ssh_proxy.orig
+echo "PKCS11Provider=${TEST_SSH_PKCS11}" >> $OBJ/ssh_proxy.orig
+
+check_all() {
+	tag="$1"
+	expect_success=$2
+	pinsh="$3"
+	for k in $ED25519 $RSA $EC; do
+		kshort=`basename "$k"`
+		verbose "$tag: $kshort"
+		pub="$k.pub"
+		cp $pub $OBJ/key.pub
+		chmod 0600 $OBJ/key.pub
+		cat $OBJ/key.pub > $OBJ/authorized_keys_$USER
+		cp $OBJ/ssh_proxy.orig $OBJ/ssh_proxy
+		env SSH_ASKPASS="$pinsh" SSH_ASKPASS_REQUIRE=force \
+			${SSH} -F $OBJ/ssh_proxy somehost exit 5 >/dev/null 2>&1
+		r=$?
+		if [ "x$expect_success" = "xy" ]; then
+			if [ $r -ne 5 ]; then
+				fail "ssh connect failed (exit code $r)"
+			fi
+		elif [ $r -eq 5 ]; then
+			fail "ssh connect succeeded unexpectedly (exit code $r)"
+		fi
+	done
+}
+
+check_all "correct pin" y $PIN_SH
+check_all "wrong pin" n $WRONGPIN_SH
+check_all "nopin" n `which true`
diff --git a/regress/test-exec.sh b/regress/test-exec.sh
index 34fb58fda..f13750eae 100644
--- a/regress/test-exec.sh
+++ b/regress/test-exec.sh
@@ -1,4 +1,4 @@
-#	$OpenBSD: test-exec.sh,v 1.131 2025/07/26 01:53:31 djm Exp $
+#	$OpenBSD: test-exec.sh,v 1.132 2025/10/16 00:01:54 djm Exp $
 #	Placed in the Public Domain.
 
 #SUDO=sudo
@@ -991,13 +991,19 @@ EOF
 		fatal "softhsm import ed25519 fail"
 	chmod 600 $ED25519
 	${SSHKEYGEN} -y -f $ED25519 > ${ED25519}.pub
-	# Prepare askpass script to load PIN.
+	# Prepare some askpass scripts to load PINs.
 	PIN_SH=$SSH_SOFTHSM_DIR/pin.sh
 	cat > $PIN_SH << EOF
 #!/bin/sh
 echo "${TEST_SSH_PIN}"
 EOF
 	chmod 0700 "$PIN_SH"
+	WRONGPIN_SH=$SSH_SOFTHSM_DIR/wrongpin.sh
+	cat > $WRONGPIN_SH << EOF
+#!/bin/sh
+echo "0000"
+EOF
+	chmod 0700 "$WRONGPIN_SH"
 	PKCS11_OK=yes
 	if env SSH_ASKPASS="$PIN_SH" SSH_ASKPASS_REQUIRE=force \
 	    ${SSHKEYGEN} -D ${TEST_SSH_PKCS11} >/dev/null 2>&1 ; then

-- 
To stop receiving notification emails like this one, please contact
djm at mindrot.org.


More information about the openssh-commits mailing list