#!/bin/bash

# Create the host keys for the OpenSSH server.
KEYTYPE=$1
# hpnssh-keygen -t name; differs from the file-name form only for the
# ML-DSA hybrid (mldsa44-ed25519 vs ssh_host_mldsa44_ed25519_key)
KEYGENTYPE=$KEYTYPE
case $KEYTYPE in
	"mldsa44_ed25519")
		KEYGENTYPE=mldsa44-ed25519 ;&
	"ed25519") # disabled in FIPS
		FIPS=/proc/sys/crypto/fips_enabled
		if [[ -r "$FIPS" && $(cat $FIPS) == "1" ]]; then
			exit 0
		fi ;;
	"rsa") ;; # always ok
	"ecdsa") ;;
	*) # wrong argument
		exit 12 ;;
esac
KEY=/etc/hpnssh/ssh_host_${KEYTYPE}_key

KEYGEN=/usr/bin/hpnssh-keygen
if [[ ! -x $KEYGEN ]]; then
	exit 13
fi

# remove old keys
rm -f $KEY{,.pub}

# create new keys
if ! $KEYGEN -q -t $KEYGENTYPE -f $KEY -C '' -N '' >&/dev/null; then
	exit 1
fi

# sanitize permissions
/usr/bin/chmod 600 $KEY
/usr/bin/chmod 644 $KEY.pub
if [[ -x /usr/sbin/restorecon ]]; then
	/usr/sbin/restorecon $KEY{,.pub}
fi

exit 0
