#!/bin/sh
### BEGIN INIT INFO
# Provides:          urandom
# Required-Start:    $local_fs mountvirtfs
# Required-Stop:     $local_fs
# Default-Start:     S
# Default-Stop:      0 6
# Short-Description: Save and restore the random seed
# Description:       Save the random seed on shutdown and restore it on boot,
#                    to ensure that the seed isn't predicable on startup
#                    (because the boot process is predictable)
### END INIT INFO

test -c /dev/urandom || exit 0
. /etc/default/rcS

case "$1" in
        start|"")
                test "$VERBOSE" != no && echo "Initializing random number generator..."
                # Load and then save 512 bytes,
                # which is the size of the entropy pool
                if test -f /opt/userdata/urandom/random-seed
                then
                     cat /opt/userdata/urandom/random-seed >/dev/urandom
                fi
                rm -f /opt/userdata/urandom/random-seed
                umask 077
                dd if=/dev/urandom of=/opt/userdata/urandom/random-seed count=1 \
                     >/dev/null 2>&1 || echo "urandom start: failed."
                umask 022
                ;;
        stop)
                # Carry a random seed from shut-down to start-up;
                # see documentation in linux/drivers/char/random.c
                test "$VERBOSE" != no && echo "Saving random seed..."
                umask 077
                dd if=/dev/urandom of=/opt/userdata/urandom/random-seed count=1 \
                     >/dev/null 2>&1 || echo "urandom stop: failed."
                ;;
        *)
                echo "Usage: urandom {start|stop}" >&2
                exit 1
                ;;
esac

exit 0
