commit 2df2facb7ac1d124f5543b875fc3199cd25e3283 from: boredpasta date: Sat Mar 15 20:17:28 2025 UTC badphrase: add diceware support via -d commit - 9346f86cf71d70878426fcce33e52c43d7e5a4f7 commit + 2df2facb7ac1d124f5543b875fc3199cd25e3283 blob - a3d72cd633f1f796919e90c2bf36a8df12599ef4 blob + 4cd737798e4411c8f7fd4940194fa6d2f57bd45d --- badphrase +++ badphrase @@ -4,6 +4,7 @@ set -e charmin=0 charmax=0 copy=0 +diceware=0 entropymin=128 includenames=0 verbose=0 @@ -11,13 +12,14 @@ wordlist=/usr/share/dict/words wordnum=8 usage() { - echo "usage: ${0##*/} [-chiv] [-e entropymin] [-l wordlist] [-m charmax] \ + echo "usage: ${0##*/} [-cdhiv] [-e entropymin] [-l wordlist] [-m charmax] \ [-n charmin] [-w wordnum]" 1>&2 } -while getopts ce:hil:m:n:vw: arg; do +while getopts cde:hil:m:n:vw: arg; do case $arg in c) copy=1;; + d) diceware=1;; e) entropymin=${OPTARG};; h) usage; exit;; i) includenames=1;; @@ -42,12 +44,19 @@ fi # password generation pipeline +# extract 2nd column if we're on a diceware list +awk -v diceware="$diceware" 'BEGIN { + if (diceware) + rec = 2 + else + rec = 1 +} +{ print $rec }' "$wordlist" | \ # filter and shuffle the wordlist -grep -x "${re_class}\{${charmin},${charmax}\}" "$wordlist" | sort -R | \ +grep -x "${re_class}\{${charmin},${charmax}\}" | sort -R | \ # test entropy against $entropymin and if that worked print first $wordnum lines { awk -v prog="${0##*/}" -v entropymin="$entropymin" -v wordnum="$wordnum" -v \ -verbose="$verbose" ' -NR <= wordnum { line[NR] = $0 } +verbose="$verbose" 'NR <= wordnum { line[NR] = $0 } END { perms = NR # show entropy