2020-04-20 12:44:47 +08:00
|
|
|
|
# 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
|
2020-04-22 07:14:58 +08:00
|
|
|
|
if ! egrep "^([0-9]+) SHA256:(.){43} ${comment} \(.*\)\$" \
|
2020-04-20 12:44:47 +08:00
|
|
|
|
$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
|