From 60744cc44549209ed819cfd86d804da47c635ca4 Mon Sep 17 00:00:00 2001 From: Ole Tange Date: Tue, 17 Mar 2020 20:18:59 +0100 Subject: [PATCH] rand: --seed implemented. --- rand/rand | 60 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 45 insertions(+), 15 deletions(-) diff --git a/rand/rand b/rand/rand index 8705e07..869e8cc 100755 --- a/rand/rand +++ b/rand/rand @@ -10,7 +10,7 @@ rand - generate (pseudo-)random data =head1 SYNOPSIS -B [-f FORMAT|--format FORMAT] [[I] I] +B [-f FORMAT|--format FORMAT] [-s SEED|--seed SEED] [[I] I] =head1 DESCRIPTION @@ -37,6 +37,13 @@ If I is also given, numbers will be integers from I to I. Format number using I. I follows Bs specification. + +=item B<--seed> I + +=item B<-s> I + +Use SEED for random number generator for reproducible numbers. + =back @@ -98,10 +105,16 @@ B =cut randdata() { - # Generate random 8-bit data by AES encrypting /dev/zero with a - # random key - key=$(openssl rand -hex 16) - iv=$(openssl rand -hex 16) + # Generate random 8-bit data by AES encrypting /dev/zero + if [ "$seed" == "" ] ; then + # use a random key + key=$(openssl rand -hex 16) + iv=$(openssl rand -hex 16) + else + # use seed from --seed + key=$(echo "$seed" | openssl sha256 -hex | cut -d' ' -f2) + iv=$(echo "$seed" | openssl sha512 -hex | cut -d' ' -f2) + fi < /dev/zero openssl enc -aes-128-ctr -K $key -iv $iv 2>/dev/null } export -f randdata @@ -131,6 +144,7 @@ fmt='%s\n' while true; do case "$1" in -f | --fmt ) fmt="$2"; shift 2 ;; + -s | --seed ) seed="$2"; shift 2 ;; -D | --debug ) debug=true; shift ;; -h | --help ) help=1; shift 2 ;; -- ) shift; break ;; @@ -139,16 +153,32 @@ while true; do done qfmt="$(parallel --shellquote --shellquote ::: "$fmt")" -if [ "$1" == "" ] ; then - # Boost performance by running 1 per CPU core - eval parallel -u randdata ::: {1..$(parallel --number-of-threads)} -else - # $1 set => numerical - if [ "$2" == "" ] ; then - # 0 .. $1 - eval parallel -N0 --lb randints 0 $1 "$qfmt" ::: {1..$(parallel --number-of-threads)} +if [ "$seed" == "" ] ; then + if [ "$1" == "" ] ; then + # Boost performance by running 1 per CPU core + eval parallel -u randdata ::: {1..$(parallel --number-of-threads)} else - # $1 .. $2 - eval parallel -N0 --lb randints $1 $2 "$qfmt" ::: {1..$(parallel --number-of-threads)} + # $1 set => numerical + if [ "$2" == "" ] ; then + # 0 .. $1 + eval parallel -N0 --lb randints 0 $1 "$qfmt" ::: {1..$(parallel --number-of-threads)} + else + # $1 .. $2 + eval parallel -N0 --lb randints $1 $2 "$qfmt" ::: {1..$(parallel --number-of-threads)} + fi + fi +else + if [ "$1" == "" ] ; then + # Run a single instance + randdata + else + # $1 set => numerical + if [ "$2" == "" ] ; then + # 0 .. $1 + randints 0 $1 "$fmt" + else + # $1 .. $2 + randints $1 $2 "$fmt" + fi fi fi