1
0
mirror of https://github.com/libssh2/libssh2.git synced 2026-10-24 03:48:58 +03:00
Files
libssh2/tests/keys-generate.sh
Viktor Szakats 967a24b3bb tidy-up: miscellaneous
- wincng: add version comments.
  Follow-up to 7a26697ede #397
- wincng: fix two version support comments.
- tests/keys-generate.sh: add comment, newlines.
- mbedtls: casing in comment.
- wording: use `null-terminator` more.
- typos: `ssh-dss`.
- knownhost: drop obsolete comment.
- include/libssh2.h: clarify comments.
- include/libssh2.h: drop empty lines.
- libssh2_knownhost_writeline.md: fix grammar.
- GHA: reorder Cygwin settings, improve package search URL.
- fixup newlines.

Closes #2617
2026-09-13 16:12:32 +02:00

137 lines
7.8 KiB
Bash
Executable File

#!/bin/sh
#
# Copyright (C) Viktor Szakats
# SPDX-License-Identifier: BSD-3-Clause
set -eu
# Generate test keys
# tests/openssh_server
[ -d openssh_server ] || mkdir openssh_server
rm -f openssh_server/*_key
rm -f openssh_server/*_key-cert.pub
ssh-keygen -t rsa -b 2048 -N '' -m PEM -C '' -f 'openssh_server/ssh_host_rsa_key'
ssh-keygen -t ecdsa -b 256 -N '' -m PEM -C '' -f 'openssh_server/ssh_host_ecdsa_key'
ssh-keygen -t ed25519 -N '' -m RFC4716 -C '' -f 'openssh_server/ssh_host_ed25519_key'
ssh-keygen -t mldsa44-ed25519 -N '' -m RFC4716 -C '' -f 'openssh_server/ssh_host_mldsa44-ed25519_key'
# tests/keys
[ -d keys ] || mkdir keys
rm -f keys/ca_*
rm -f keys/id_*
# host CAs
ssh-keygen -t rsa -b 2048 -N '' -m RFC4716 -C 'ca_host_rsa' -f 'keys/ca_host_rsa'
ssh-keygen -t ecdsa -b 256 -N '' -m RFC4716 -C 'ca_host_ecdsa' -f 'keys/ca_host_ecdsa'
ssh-keygen -t ed25519 -N '' -m RFC4716 -C 'ca_host_ed25519' -f 'keys/ca_host_ed25519'
ssh-keygen -t mldsa44-ed25519 -N '' -m RFC4716 -C 'ca_host_mldsa44-ed25519' -f 'keys/ca_host_mldsa44-ed25519'
# user CAs
ssh-keygen -t rsa -b 3072 -N '' -m RFC4716 -C 'ca_user_rsa' -f 'keys/ca_user_rsa'
ssh-keygen -t ecdsa -b 521 -N '' -m RFC4716 -C 'ca_user_ecdsa' -f 'keys/ca_user_ecdsa'
ssh-keygen -t ed25519 -N '' -m RFC4716 -C 'ca_user_ed25519' -f 'keys/ca_user_ed25519'
ssh-keygen -t mldsa44-ed25519 -N '' -m RFC4716 -C 'ca_user_mldsa44-ed25519' -f 'keys/ca_user_mldsa44-ed25519'
pw='libssh2'
id='identity'
pr="${1:-libssh2}"
# host certificates
ssh-keygen -h -I 'host_rsa' -n "${pr}" -s 'keys/ca_host_rsa' 'openssh_server/ssh_host_rsa_key.pub'
ssh-keygen -h -I 'host_ecdsa' -n "${pr}" -s 'keys/ca_host_ecdsa' 'openssh_server/ssh_host_ecdsa_key.pub'
ssh-keygen -h -I 'host_ed25519' -n "${pr}" -s 'keys/ca_host_ed25519' 'openssh_server/ssh_host_ed25519_key.pub'
ssh-keygen -h -I 'host_mldsa44-ed25519' -n "${pr}" -s 'keys/ca_host_mldsa44-ed25519' 'openssh_server/ssh_host_mldsa44-ed25519_key.pub'
# inspect PKCS8 private keys with command:
# $ openssl asn1parse -dump -in <id-filename>
ssh-keygen -t dsa -N '' -m PEM -C 'id_dsa' -f 'keys/id_dsa' || touch 'keys/id_dsa.pub'
ssh-keygen -t rsa -b 2048 -N '' -m PEM -C 'id_rsa_pem_miss' -f 'keys/id_rsa_pem_miss' # not to add to 'authorized_keys'
ssh-keygen -t rsa -b 2048 -N '' -m PEM -C 'id_rsa_pem' -f 'keys/id_rsa_pem'
ssh-keygen -t rsa -b 2048 -N "${pw}" -m PEM -C 'id_rsa_pem_encrypted' -f 'keys/id_rsa_pem_encrypted' # aes128-cbc
ssh-keygen -t rsa -b 3072 -N '' -m PKCS8 -C 'id_rsa_pkcs8' -f 'keys/id_rsa_pkcs8'
ssh-keygen -t rsa -b 2048 -N "${pw}" -m PKCS8 -C 'id_rsa_pkcs8_encrypted' -f 'keys/id_rsa_pkcs8_encrypted' # aes128-cbc
ssh-keygen -t rsa -b 2048 -N '' -m RFC4716 -C '' -f 'keys/id_rsa_openssh' # empty comment
ssh-keygen -t rsa -b 2048 -N "${pw}" -m RFC4716 -C 'id_rsa_openssh_encrypted' -f 'keys/id_rsa_openssh_encrypted' -Z aes256-gcm@openssh.com
ssh-keygen -t ecdsa -b 521 -N '' -m PEM -C 'id_ecdsa_pem' -f 'keys/id_ecdsa_pem'
ssh-keygen -t ecdsa -b 256 -N "${pw}" -m PEM -C 'id_ecdsa_pem_encrypted' -f 'keys/id_ecdsa_pem_encrypted' # aes128-cbc
ssh-keygen -t ecdsa -b 384 -N '' -m PKCS8 -C 'id_ecdsa_pkcs8' -f 'keys/id_ecdsa_pkcs8'
ssh-keygen -t ecdsa -b 521 -N "${pw}" -m PKCS8 -C 'id_ecdsa_pkcs8_encrypted' -f 'keys/id_ecdsa_pkcs8_encrypted' # aes128-cbc
ssh-keygen -t ecdsa -b 384 -N '' -m RFC4716 -C '' -f 'keys/id_ecdsa_openssh' # empty comment
ssh-keygen -t ecdsa -b 256 -N "${pw}" -m RFC4716 -C 'id_ecdsa_openssh_encrypted' -f 'keys/id_ecdsa_openssh_encrypted' -Z chacha20-poly1305@openssh.com
ssh-keygen -t ed25519 -N '' -m PKCS8 -C 'id_ed25519_pkcs8' -f 'keys/id_ed25519_pkcs8'
ssh-keygen -t ed25519 -N "${pw}" -m PKCS8 -C 'id_ed25519_pkcs8_encrypted' -f 'keys/id_ed25519_pkcs8_encrypted' # aes128-cbc
ssh-keygen -t ed25519 -N '' -m RFC4716 -C 'id_ed25519_openssh' -f 'keys/id_ed25519_openssh'
ssh-keygen -t ed25519 -N "${pw}" -m RFC4716 -C 'id_ed25519_openssh_encrypted' -f 'keys/id_ed25519_openssh_encrypted' -Z aes256-ctr
ssh-keygen -t mldsa44-ed25519 -N '' -m RFC4716 -C 'id_mldsa44-ed25519' -f 'keys/id_mldsa44-ed25519'
ssh-keygen -t mldsa44-ed25519 -N "${pw}" -m RFC4716 -C 'id_mldsa44-ed25519_encrypted' -f 'keys/id_mldsa44-ed25519_encrypted' -Z chacha20-poly1305@openssh.com
# CA users
ssh-keygen -t rsa -b 4096 -N '' -m PEM -C 'id_rsa_pem_signed' -f 'keys/id_rsa_pem_signed'
ssh-keygen -t ssh-rsa -I "${id}" -n "${pr}" -s 'keys/ca_user_rsa' 'keys/id_rsa_pem_signed.pub'
ssh-keygen -t rsa -b 4096 -N '' -m PEM -C 'id_rsa_pem_sha2_512_signed' -f 'keys/id_rsa_pem_sha2_512_signed'
ssh-keygen -t rsa-sha2-512 -I "${id}" -n "${pr}" -s 'keys/ca_user_rsa' 'keys/id_rsa_pem_sha2_512_signed.pub'
ssh-keygen -t ecdsa -b 384 -N '' -m RFC4716 -C 'id_ecdsa_openssh_signed' -f 'keys/id_ecdsa_openssh_signed'
ssh-keygen -I "${id}" -n "${pr}" -s 'keys/ca_user_ecdsa' 'keys/id_ecdsa_openssh_signed.pub'
ssh-keygen -t ed25519 -N '' -m RFC4716 -C 'id_ed25519_openssh_signed' -f 'keys/id_ed25519_openssh_signed'
ssh-keygen -I "${id}" -n "${pr}" -s 'keys/ca_user_ed25519' 'keys/id_ed25519_openssh_signed.pub'
ssh-keygen -t mldsa44-ed25519 -N '' -m RFC4716 -C 'id_mldsa44-ed25519_signed' -f 'keys/id_mldsa44-ed25519_signed'
ssh-keygen -I "${id}" -n "${pr}" -s 'keys/ca_user_mldsa44-ed25519' 'keys/id_mldsa44-ed25519_signed.pub'
cat \
'keys/id_dsa.pub' \
'keys/id_rsa_pem.pub' \
'keys/id_rsa_pem_encrypted.pub' \
'keys/id_rsa_pkcs8.pub' \
'keys/id_rsa_pkcs8_encrypted.pub' \
'keys/id_rsa_openssh.pub' \
'keys/id_rsa_openssh_encrypted.pub' \
'keys/id_ecdsa_pem.pub' \
'keys/id_ecdsa_pem_encrypted.pub' \
'keys/id_ecdsa_pkcs8.pub' \
'keys/id_ecdsa_pkcs8_encrypted.pub' \
'keys/id_ecdsa_openssh.pub' \
'keys/id_ecdsa_openssh_encrypted.pub' \
'keys/id_ed25519_pkcs8.pub' \
'keys/id_ed25519_pkcs8_encrypted.pub' \
'keys/id_ed25519_openssh.pub' \
'keys/id_ed25519_openssh_encrypted.pub' \
'keys/id_mldsa44-ed25519.pub' \
'keys/id_mldsa44-ed25519_encrypted.pub' \
> 'openssh_server/authorized_keys'
cat \
'keys/ca_user_rsa.pub' \
'keys/ca_user_ecdsa.pub' \
'keys/ca_user_ed25519.pub' \
'keys/ca_user_mldsa44-ed25519.pub' \
> 'openssh_server/ca_user_keys.pub'
# tests/test_*.c
echo 'Add these public keys and hashes to:'
echo ' - test_hostkey.c'
echo ' - test_hostkey_hash.c'
for fn in openssh_server/*_key.pub; do
pub="$(grep -a -o -E ' [A-Za-z0-9+/=]+' < "${fn}" | head -1 | cut -c 2-)"
printf '====== %s\n' "${fn}"
printf 'BASE64 %s\n' "${pub}"
{
printf 'MD5 %s\n' "$(printf '%s' "${pub}" | base64 -d | md5sum | tr -d ' -')"
printf 'SHA1 %s\n' "$(printf '%s' "${pub}" | base64 -d | sha1sum | tr -d ' -')"
printf 'SHA256 %s\n' "$(printf '%s' "${pub}" | base64 -d | sha256sum | tr -d ' -')"
} | tr '[:lower:]' '[:upper:]'
done