1*9171d7d9Sdjm# $OpenBSD: agent-pkcs11-cert.sh,v 1.1 2023/12/18 14:50:08 djm Exp $ 2*9171d7d9Sdjm# Placed in the Public Domain. 3*9171d7d9Sdjm 4*9171d7d9Sdjmtid="pkcs11 agent certificate test" 5*9171d7d9Sdjm 6*9171d7d9SdjmSSH_AUTH_SOCK="$OBJ/agent.sock" 7*9171d7d9Sdjmexport SSH_AUTH_SOCK 8*9171d7d9SdjmLC_ALL=C 9*9171d7d9Sdjmexport LC_ALL 10*9171d7d9Sdjmp11_setup || skip "No PKCS#11 library found" 11*9171d7d9Sdjm 12*9171d7d9Sdjmrm -f $SSH_AUTH_SOCK $OBJ/agent.log 13*9171d7d9Sdjmrm -f $OBJ/output_* $OBJ/expect_* 14*9171d7d9Sdjmrm -f $OBJ/ca* 15*9171d7d9Sdjm 16*9171d7d9Sdjmtrace "generate CA key and certify keys" 17*9171d7d9Sdjm$SSHKEYGEN -q -t ed25519 -C ca -N '' -f $OBJ/ca || fatal "ssh-keygen CA failed" 18*9171d7d9Sdjm$SSHKEYGEN -qs $OBJ/ca -I "ecdsa_key" -n $USER -z 1 ${SSH_SOFTHSM_DIR}/EC.pub || 19*9171d7d9Sdjm fatal "certify ECDSA key failed" 20*9171d7d9Sdjm$SSHKEYGEN -qs $OBJ/ca -I "rsa_key" -n $USER -z 2 ${SSH_SOFTHSM_DIR}/RSA.pub || 21*9171d7d9Sdjm fatal "certify RSA key failed" 22*9171d7d9Sdjm$SSHKEYGEN -qs $OBJ/ca -I "ca_ca" -n $USER -z 3 $OBJ/ca.pub || 23*9171d7d9Sdjm fatal "certify CA key failed" 24*9171d7d9Sdjm 25*9171d7d9Sdjmrm -f $SSH_AUTH_SOCK 26*9171d7d9Sdjmtrace "start agent" 27*9171d7d9Sdjm${SSHAGENT} ${EXTRA_AGENT_ARGS} -d -a $SSH_AUTH_SOCK > $OBJ/agent.log 2>&1 & 28*9171d7d9SdjmAGENT_PID=$! 29*9171d7d9Sdjmtrap "kill $AGENT_PID" EXIT 30*9171d7d9Sdjmfor x in 0 1 2 3 4 ; do 31*9171d7d9Sdjm # Give it a chance to start 32*9171d7d9Sdjm ${SSHADD} -l > /dev/null 2>&1 33*9171d7d9Sdjm r=$? 34*9171d7d9Sdjm test $r -eq 1 && break 35*9171d7d9Sdjm sleep 1 36*9171d7d9Sdjmdone 37*9171d7d9Sdjmif [ $r -ne 1 ]; then 38*9171d7d9Sdjm fatal "ssh-add -l did not fail with exit code 1 (got $r)" 39*9171d7d9Sdjmfi 40*9171d7d9Sdjm 41*9171d7d9Sdjmtrace "load pkcs11 keys and certs" 42*9171d7d9Sdjm# Note: deliberately contains non-cert keys and non-matching cert on commandline 43*9171d7d9Sdjmp11_ssh_add -qs ${TEST_SSH_PKCS11} \ 44*9171d7d9Sdjm $OBJ/ca.pub \ 45*9171d7d9Sdjm ${SSH_SOFTHSM_DIR}/EC.pub \ 46*9171d7d9Sdjm ${SSH_SOFTHSM_DIR}/EC-cert.pub \ 47*9171d7d9Sdjm ${SSH_SOFTHSM_DIR}/RSA.pub \ 48*9171d7d9Sdjm ${SSH_SOFTHSM_DIR}/RSA-cert.pub || 49*9171d7d9Sdjm fatal "failed to add keys" 50*9171d7d9Sdjm# Verify their presence 51*9171d7d9Sdjmcut -d' ' -f1-2 \ 52*9171d7d9Sdjm ${SSH_SOFTHSM_DIR}/EC.pub \ 53*9171d7d9Sdjm ${SSH_SOFTHSM_DIR}/RSA.pub \ 54*9171d7d9Sdjm ${SSH_SOFTHSM_DIR}/EC-cert.pub \ 55*9171d7d9Sdjm ${SSH_SOFTHSM_DIR}/RSA-cert.pub | sort > $OBJ/expect_list 56*9171d7d9Sdjm$SSHADD -L | cut -d' ' -f1-2 | sort > $OBJ/output_list 57*9171d7d9Sdjmdiff $OBJ/expect_list $OBJ/output_list 58*9171d7d9Sdjm 59*9171d7d9Sdjm# Verify that all can perform signatures. 60*9171d7d9Sdjmfor x in ${SSH_SOFTHSM_DIR}/EC.pub ${SSH_SOFTHSM_DIR}/RSA.pub \ 61*9171d7d9Sdjm ${SSH_SOFTHSM_DIR}/EC-cert.pub ${SSH_SOFTHSM_DIR}/RSA-cert.pub ; do 62*9171d7d9Sdjm $SSHADD -T $x || fail "Signing failed for $x" 63*9171d7d9Sdjmdone 64*9171d7d9Sdjm 65*9171d7d9Sdjm# Delete plain keys. 66*9171d7d9Sdjm$SSHADD -qd ${SSH_SOFTHSM_DIR}/EC.pub ${SSH_SOFTHSM_DIR}/RSA.pub 67*9171d7d9Sdjm# Verify that certs can still perform signatures. 68*9171d7d9Sdjmfor x in ${SSH_SOFTHSM_DIR}/EC-cert.pub ${SSH_SOFTHSM_DIR}/RSA-cert.pub ; do 69*9171d7d9Sdjm $SSHADD -T $x || fail "Signing failed for $x" 70*9171d7d9Sdjmdone 71*9171d7d9Sdjm 72*9171d7d9Sdjm$SSHADD -qD >/dev/null || fatal "clear agent failed" 73*9171d7d9Sdjm 74*9171d7d9Sdjmtrace "load pkcs11 certs only" 75*9171d7d9Sdjmp11_ssh_add -qCs ${TEST_SSH_PKCS11} \ 76*9171d7d9Sdjm $OBJ/ca.pub \ 77*9171d7d9Sdjm ${SSH_SOFTHSM_DIR}/EC.pub \ 78*9171d7d9Sdjm ${SSH_SOFTHSM_DIR}/EC-cert.pub \ 79*9171d7d9Sdjm ${SSH_SOFTHSM_DIR}/RSA.pub \ 80*9171d7d9Sdjm ${SSH_SOFTHSM_DIR}/RSA-cert.pub || 81*9171d7d9Sdjm fatal "failed to add keys" 82*9171d7d9Sdjm# Verify their presence 83*9171d7d9Sdjmcut -d' ' -f1-2 \ 84*9171d7d9Sdjm ${SSH_SOFTHSM_DIR}/EC-cert.pub \ 85*9171d7d9Sdjm ${SSH_SOFTHSM_DIR}/RSA-cert.pub | sort > $OBJ/expect_list 86*9171d7d9Sdjm$SSHADD -L | cut -d' ' -f1-2 | sort > $OBJ/output_list 87*9171d7d9Sdjmdiff $OBJ/expect_list $OBJ/output_list 88*9171d7d9Sdjm 89*9171d7d9Sdjm# Verify that certs can perform signatures. 90*9171d7d9Sdjmfor x in ${SSH_SOFTHSM_DIR}/EC-cert.pub ${SSH_SOFTHSM_DIR}/RSA-cert.pub ; do 91*9171d7d9Sdjm $SSHADD -T $x || fail "Signing failed for $x" 92*9171d7d9Sdjmdone 93