xref: /freebsd/usr.sbin/certctl/tests/certctl.subr (revision c340ef28fd384b567e35882d04ce17fa31b7384f)
1*c340ef28SDag-Erling Smørgrav#
2*c340ef28SDag-Erling Smørgrav# Copyright (c) 2025 Dag-Erling Smørgrav <des@FreeBSD.org>
3*c340ef28SDag-Erling Smørgrav#
4*c340ef28SDag-Erling Smørgrav# SPDX-License-Identifier: BSD-2-Clause
5*c340ef28SDag-Erling Smørgrav#
6*c340ef28SDag-Erling Smørgrav
7*c340ef28SDag-Erling Smørgrav# Generate a random name
8*c340ef28SDag-Erling Smørgravrand_name() {
9*c340ef28SDag-Erling Smørgrav	local length=${1:-32}
10*c340ef28SDag-Erling Smørgrav
11*c340ef28SDag-Erling Smørgrav	jot -r -c -s '' ${length} A Z
12*c340ef28SDag-Erling Smørgrav}
13*c340ef28SDag-Erling Smørgrav
14*c340ef28SDag-Erling Smørgrav# Generate a subject for a given name
15*c340ef28SDag-Erling Smørgravsubject() {
16*c340ef28SDag-Erling Smørgrav	local crtname=$1
17*c340ef28SDag-Erling Smørgrav
18*c340ef28SDag-Erling Smørgrav	echo "/CN=${crtname}/O=FreeBSD/OU=Test/"
19*c340ef28SDag-Erling Smørgrav}
20*c340ef28SDag-Erling Smørgrav
21*c340ef28SDag-Erling Smørgrav# Generate a key
22*c340ef28SDag-Erling Smørgravgen_key() {
23*c340ef28SDag-Erling Smørgrav	local keyname=$1
24*c340ef28SDag-Erling Smørgrav
25*c340ef28SDag-Erling Smørgrav	env -i PATH="${PATH}" OPENSSL_CONF=/dev/null \
26*c340ef28SDag-Erling Smørgrav	openssl genrsa -out ${keyname}.key
27*c340ef28SDag-Erling Smørgrav}
28*c340ef28SDag-Erling Smørgrav
29*c340ef28SDag-Erling Smørgrav# Generate a certificate for a given name, key, and serial number
30*c340ef28SDag-Erling Smørgravgen_crt() {
31*c340ef28SDag-Erling Smørgrav	local crtname=$1
32*c340ef28SDag-Erling Smørgrav	local keyname=${2:-${crtname}}
33*c340ef28SDag-Erling Smørgrav	local serial=${3:-1}
34*c340ef28SDag-Erling Smørgrav
35*c340ef28SDag-Erling Smørgrav	if ! [ -f "${keyname}".key ]; then
36*c340ef28SDag-Erling Smørgrav		gen_key "${keyname}"
37*c340ef28SDag-Erling Smørgrav	fi
38*c340ef28SDag-Erling Smørgrav	env -i PATH="${PATH}" OPENSSL_CONF=/dev/null \
39*c340ef28SDag-Erling Smørgrav	openssl req -x509 -new \
40*c340ef28SDag-Erling Smørgrav	    -subj="$(subject ${crtname})" \
41*c340ef28SDag-Erling Smørgrav	    -set_serial ${serial} \
42*c340ef28SDag-Erling Smørgrav	    -key ${keyname}.key \
43*c340ef28SDag-Erling Smørgrav	    -out ${crtname}.crt
44*c340ef28SDag-Erling Smørgrav}
45