#	$OpenBSD: keygen-comment.sh,v 1.3 2025/10/01 00:30:19 dtucker Exp $
#	Placed in the Public Domain.

tid="Comment extraction from private key"

S1="secret1"

check_fingerprint () {
	file="$1"
	comment="$2"
	trace "fingerprinting $file"
	if ! ${SSHKEYGEN} -l -E sha256 -f $file > $OBJ/$t-fgp ; then
		fail "ssh-keygen -l failed for $t-key"
	fi
	if ! egrep "^([0-9]+) SHA256:(.){43} ${comment} \(.*\)\$" \
	    $OBJ/$t-fgp >/dev/null 2>&1 ; then
		fail "comment is not correctly recovered for $t-key"
	fi
	rm -f $OBJ/$t-fgp
}

for fmt in '' RFC4716 PKCS8 PEM; do
	for t in $SSH_KEYTYPES; do
		trace "generating $t key in '$fmt' format"
		rm -f $OBJ/$t-key*
		oldfmt=""
		case "$fmt" in
		PKCS8|PEM) oldfmt=1 ;;
		esac
		# Some key types like ssh-ed25519 and *@openssh.com are never
		# stored in old formats.
		case "$t" in
		ssh-ed25519|*openssh.com) test -z "$oldfmt" || continue ;;
		esac
		comment="foo bar"
		fmtarg=""
		test -z "$fmt" || fmtarg="-m $fmt"
		${SSHKEYGEN} $fmtarg -N '' -C "${comment}" \
		    -t $t -f $OBJ/$t-key >/dev/null 2>&1 || \
			fatal "keygen of $t in format $fmt failed"
		check_fingerprint $OBJ/$t-key "${comment}"
		check_fingerprint $OBJ/$t-key.pub "${comment}"
		# Output fingerprint using only private file
		trace "fingerprinting $t key using private key file"
		rm -f $OBJ/$t-key.pub
		if [ ! -z "$oldfmt" ] ; then
			# Comment cannot be recovered from old format keys.
			comment="no comment"
		fi
		check_fingerprint $OBJ/$t-key "${comment}"
		rm -f $OBJ/$t-key*
	done
done
