#!/usr/bin/sh
#
# generate new key for this host
#
# Copyright (C) 2001, 2002  Henry Spencer.
# Copyright (C) 2014-2020 Paul Wouters <pwouters@redhat.com>
# Copyright (C) 2014, 2016 Tuomo Soini <tis@foobar.fi>
# Copyright (C) 2016, Andrew Cagney <cagney@gnu.org>
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.  See <https://www.gnu.org/licenses/gpl2.txt>.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for more details.
#

me="ipsec newhostkey"
usage="Usage: $me [--seeddev device] [--bits n] \\
    [--quiet] [--hostname host] [--nssdir /var/lib/ipsec/nss] [--password password] "

bits=
verbose=
host=
seeddev="--seeddev /dev/random"
nssdir="/var/lib/ipsec/nss"
password=
while [ $# != 0 ] ; do
    case "$1" in
	--bits)
	    bits="${2}"
	    shift
	    ;;
	--quiet)
	    verbose=
	    ;;
	--verbose)
	    verbose="--verbose"
	    ;;
	--version)
	    echo "${me} $IPSEC_VERSION"
	    exit 0
	    ;;
	--seeddev)
	    seeddev="--seeddev ${2}"
	    shift
	    ;;
	--nssdir)
	    nssdir="${2}"
	    shift
	    ;;
	--password)
	    password="--password ${2}"
	    shift
	    ;;
	--help)
	    echo "$usage"
	    exit 0
	    ;;
	--)
	    shift
	    break
	    ;;
	-*)
	    echo "${me}: unknown option \`$1'" >&2
	    exit 2
	    ;;
	*)
	    break
	    ;;
    esac
    shift
done

if [ ! -d ${nssdir} ]; then
    echo "No such directory: ${nssdir}"
    exit 255
fi

certutil -L -d "sql:${nssdir}" >/dev/null 2>/dev/null
RETVAL=$?
if [ ${RETVAL} -eq 255 ]; then
    echo "NSS database in ${nssdir} not initialized."
    echo "    Please run 'ipsec initnss --nssdir ${nssdir}'"
    exit 255
fi

key=$(ipsec rsasigkey ${verbose} ${seeddev} --nssdir ${nssdir} ${password} ${host} ${bits})
RETVAL=$?
if [ ${RETVAL} -ne 0 ]; then
    exit ${RETVAL}
fi
