#!/usr/bin/env bash # USAGE: passphrase.html.sh [ PIN_LENGTH [ PASSPHRASE_LENGTH ]] # PIN_LENGTH and PASSPHRASE_LENGTH can be omitted. A HTML file will be written to stdout set -e set -u set -o pipefail # Script arguments, or use defaults PIN_LENGTH="${1:-8}" PASSPHRASE_LENGTH="${2:-30}" cat < credentials EOF DATE_HEADER=$(cat <$(for((i=0;i<14;i++)); do printf ""; done) $(for((i=0;i<8;i++)); do printf ""; done)$(for((i=0;i<8;i++)); do printf ""; done)$(for((i=0;i<14;i++)); do printf ""; done) $(for((i=0;i<10;i++)); do printf ""; done) EOF ) KEYS=$(cat <$j"; done && printf "" for j in {1..10}; do printf ""; done && printf "\n" done) EOF ) #Make KEYS have as many lines as DATE_HEADER, and vice versa. Needed to close/open html tags properly # Note that the row is simply closed without filling it up... KEYS="$KEYS $(for ((i=PIN_LENGTH; i<8; i++)); do printf '\n' && for _ in {0..23}; do printf ''; done && printf ''; done)" DATE_HEADER="$DATE_HEADER $(for ((i=8; i' && for _ in {0..13}; do printf ''; done ; done)" paste -d " " <(echo "$DATE_HEADER") <(echo "$KEYS") cat < EOF for ((i=1; i<=PASSPHRASE_LENGTH; i++)); do if [ $((i%2)) -eq 0 ]; then printf ''; else printf ''; fi cat <- EOF done cat < EOF
date (yyyy-mm-dd) admin pin user pin
202_-__-__
key id
0x_
_
serial number
_$j
for each char in passphrase, mark corresponding column on sequential row, then fold inward and tamper seal
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9