#! /bin/sh
#
# Copyright 2013-2014 Double Precision, Inc.  See COPYING for
# distribution information.
#
# Run this script monthly to generate DH parameters.

# Override from the environment

if test "openssl" = "openssl"
then
	LIBRESSL=0

	/usr/bin/openssl version | grep LibreSSL 1>/dev/null
	if test $? = 0
	then
		LIBRESSL=1
	fi
fi

if test "$TLS_DHPARAMS" = ""
then
	TLS_DHPARAMS="/usr/pkg/share/courier/dhparams.pem"
fi

if test -f $TLS_DHPARAMS
then
    if test "`find $TLS_DHPARAMS -mtime +25 -print `" = ""
    then
	# Less than 25 days old
	exit 0
    fi
fi

set -e

umask 077
cp /dev/null $TLS_DHPARAMS.tmp
umask 022
chown root $TLS_DHPARAMS.tmp

BITS="$DH_BITS"
if test "openssl" = "openssl"
then
    if test "$BITS" = ""
    then
	BITS=2048
    fi

    if test "$LIBRESSL" = 0
    then
        dd if=/dev/urandom of=$TLS_DHPARAMS.rand.tmp count=1 2>/dev/null
        /usr/bin/openssl dhparam -rand $TLS_DHPARAMS.rand.tmp -outform PEM $BITS >$TLS_DHPARAMS.tmp
        rm -f $TLS_DHPARAMS.rand.tmp
    else
        /usr/bin/openssl dhparam -outform PEM $BITS >$TLS_DHPARAMS.tmp
    fi
    mv -f $TLS_DHPARAMS.tmp $TLS_DHPARAMS
else
    if test "$BITS" = ""
    then
	BITS=high
    fi

    /usr/pkg/bin/certtool --generate-dh-params --sec-param $BITS >$TLS_DHPARAMS.tmp
    mv -f $TLS_DHPARAMS.tmp $TLS_DHPARAMS
fi
