diff --git a/asc2qr.sh b/asc2qr.sh index c5d6ea8..a10e3ef 100755 --- a/asc2qr.sh +++ b/asc2qr.sh @@ -28,7 +28,7 @@ # Maximum chuck size to send to the QR encoder. QR version 40 supports # 2,953 bytes of storage. -file_split_size=2800 +max_qr_bytes=2800 # Prefix string for the PNG images that are produced image_prefix="QR" @@ -45,38 +45,26 @@ if [ ! -f ${asc_key} ]; then exit 1 fi -# Create a temp file to use as a pattern for splitting the input key file. -# This helps protect against file collisions in the current directory. -export TMPDIR="" -tmp_file=$(mktemp keyparts.XXXXXX) -if [ $? -ne 0 ]; then - echo "failed to create temporary file" - exit 1 -fi +## Split the key file into usable chunks that the QR encoder can consume +chunks=() +while true; do + IFS= read -r -d'\0' -n ${max_qr_bytes} s + if [ ${#s} -gt 0 ]; then + chunks+=("${s}") + else + break + fi +done < ${asc_key} -# Split the key file into usable chunks that the QR encoder can consume -split -b ${file_split_size} ${asc_key} "${tmp_file}." - -# For each chunk, encode it into a qc image +## For each chunk, encode it into a qr image index=1 -for file in ${tmp_file}.*; do - img="${image_prefix}${index}.png" - echo "generating ${img}" - cat ${file} | qrencode -o ${img} +for c in "${chunks[@]}"; do + img="${image_prefix}${index}.png" + echo "generating ${img}" + echo -n "${c}" | qrencode -o ${img} if [ $? -ne 0 ]; then echo "failed to encode image" exit 2 fi index=$((index+1)) done - -# Find the correct secure deletion utility (srm on Mac, shred on Linux) -sec_del="srm" -which ${sec_del} 2>&1 1>/dev/null -if [ $? -ne 0 ]; then - sec_del="shred --remove" -fi - -# Securely clean up temporary files -${sec_del} ${tmp_file} -${sec_del} ${tmp_file}.* diff --git a/qr2asc.sh b/qr2asc.sh index fdb4e8f..fe5ae0a 100755 --- a/qr2asc.sh +++ b/qr2asc.sh @@ -33,16 +33,8 @@ if [ $# -lt 1 ]; then exit 1 fi -# Create a temp file to use as a pattern for splitting the input key file. -# This helps protect against file collisions in the current directory. -export TMPDIR="" -tmp_file=$(mktemp keyparts.XXXXXX) -if [ $? -ne 0 ]; then - echo "failed to create temporary file" - exit 1 -fi - # For each image on the command line, decode it into text +chunks=() index=1 for img in "$@"; do if [ ! -f ${img} ]; then @@ -51,24 +43,23 @@ for img in "$@"; do fi asc_key="${tmp_file}.${index}" echo "decoding ${img}" - zbarimg --raw ${img} 2>/dev/null | perl -p -e 'chomp if eof' > ${asc_key} + chunk=$( zbarimg --raw ${img} 2>/dev/null | perl -p -e 'chomp if eof' ) + # Please use this next line instead of teh one above if zbarimg does + # not decode the qr code properly in tests + # (zbarimg needs to be told it is being given a qr code to decode) + #chunk=$( zbarimg --raw --set disable --set qrcode.enable ${img} 2>/dev/null ) if [ $? -ne 0 ]; then echo "failed to decode QR image" exit 2 fi + chunks+=("${chunk}") index=$((index+1)) done +asc_key="" +for c in "${chunks[@]}"; do + asc_key+="${c}" +done + echo "creating ${output_key_name}" -cat ${tmp_file}.* > ${output_key_name} - -# Find the correct secure deletion utility (srm on Mac, shred on Linux) -sec_del="srm" -which ${sec_del} 2>&1 1>/dev/null -if [ $? -ne 0 ]; then - sec_del="shred --remove" -fi - -# Securely clean up temporary files -${sec_del} ${tmp_file} -${sec_del} ${tmp_file}.* +echo "${asc_key}" > ${output_key_name} diff --git a/test.sh b/test.sh new file mode 100755 index 0000000..d85c9a1 --- /dev/null +++ b/test.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +if [ $# -eq 0 ]; then + echo "usage: $(basename ${0}) " + exit 1 +fi + +set -x + +asc_key="$1" + +./asc2qr.sh "${asc_key}" + +./qr2asc.sh QR*.png + +diff "${asc_key}" "./mykey.asc" +if [ $? -eq 0 ]; then + echo "Diff Test: PASS" +else + echo "Diff Test: FAIL" +fi + +rm ./QR*.png +rm ./mykey.asc