URI: 
       tnew backup command to save keys on paper - tomb - the crypto undertaker
  HTML git clone git://parazyd.org/tomb.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 8d46ff46e15614caa7eedb180ad6ea246ce7e45b
   DIR parent 8f4b0c65675135519391bc6eea127d039359639c
  HTML Author: Jaromil <jaromil@dyne.org>
       Date:   Wed, 19 Jun 2013 20:52:21 +0200
       
       new backup command to save keys on paper
       
       Backup simply encodes a QRCode that can be print on paper and
       hidden in books or so, to keep phisical backups of keys.
       The QR can be simply scanned with any smartphone, saved into a file
       and reused as a key.
       
       Diffstat:
         M tomb                                |      50 ++++++++++++++++++++++++++++----
       
       1 file changed, 45 insertions(+), 5 deletions(-)
       ---
   DIR diff --git a/tomb b/tomb
       t@@ -53,6 +53,7 @@ STEGHIDE=1
        MKTEMP=1
        RESIZER=1
        SWISH=1
       +QRENCODE=1
        MOUNTOPTS="rw,noatime,nodev"
        
        typeset -A global_opts
       t@@ -272,7 +273,15 @@ Commands:
         slam    slam a TOMB killing all programs using it
        
         passwd  change the password of a KEY
       + change  change the KEY locking a TOMB (needs old one)
        EOF
       +
       +    { test "$QRENCODE" = "1" } && {
       +        cat <<EOF
       + backup  makes a QR code of a KEY to be saved on paper
       +EOF
       +    }
       +
            if [ "$RESIZER" = 1 ]; then
                cat <<EOF
         resize  resize a TOMB to a new --size (can only grow)
       t@@ -456,6 +465,8 @@ check_bin() {
            command -v tomb-kdb-pbkdf2 > /dev/null || KDF=0
            # check for Swish-E file content indexer
            command -v swish-e > /dev/null || SWISH=0
       +    # check for QREncode for paper backups of keys
       +    command -v qrencode > /dev/null || QRENCODE=0
        }
        
        # }}} - Commandline interaction
       t@@ -777,7 +788,7 @@ gen_key() {
            print "${tombpass}" \
                | gpg --openpgp --force-mdc --cipher-algo ${algo} \
                --batch --no-options --no-tty --passphrase-fd 0 --status-fd 2 \
       -             -o - -c -a ${lukskey}
       +        -o - -c -a ${lukskey}
        
            unset tombpass
        }
       t@@ -884,6 +895,28 @@ exhume_key() {
            return 1
        }
        
       +# Produces a printable image of the key contents so that it can be
       +# backuped on paper and hidden in books etc.
       +backup_key() {
       +    # load key from options
       +    tombkey="`load_key $1`"
       +    { test $? = 0 } || { die "No key specified." }
       +    keyname=`basename $tombkey`
       +    pngname="$keyname.qr.png"
       +
       +    yes "Rendering a printable QRCode for key: $tombkey"
       +    # we omit armor strings to save space
       +    awk '
       +/^-----/ {next}
       +/^Version/ {next}
       +{print $0}' ${tombkey} | qrencode --size 4 -t PNG --level H \
       +    --casesensitive -o "$pngname"
       +    { test $? = 0 } || { die "QREncode reported an error." }
       +    yes "Operation successful:"
       +    _message "`ls -lh $pngname`"
       +    _message "`file $pngname`"
       +}
       +
        # }}} - Key handling
        
        # {{{ Create
       t@@ -1178,7 +1211,7 @@ change_tomb_key() {
            losetup -f "$2"
            cryptsetup isLuks ${nstloop}
            # is it a LUKS encrypted nest? we check one more timesee cryptsetup(1)
       -    { test $? = 0 } || { 
       +    { test $? = 0 } || {
                losetup -d "$nstloop"
                die "Not a valid LUKS encrypted volume: $2" }
        
       t@@ -1192,12 +1225,12 @@ change_tomb_key() {
            # save date of mount in minutes since 1970
            mapper="tomb.${tombname}.${mapdate}.`basename $nstloop`"
        
       -    
       +
            # load the new key from the -k option
            tombkey=`load_key`
            { test $? = 0 } || {
                die "Aborting operations: error loading new key $tombkey"    }
       -    
       +
            newkeypass=`ask_key_password $tombkey`
            { test $? = 0 } || {
                die "No valid password supplied for the new key" }
       t@@ -1232,7 +1265,7 @@ change_tomb_key() {
            unset tombpass
            ${=WIPE} "$newkeyfile"
            losetup -d ${nstloop}
       -    
       +
            yes "Succesfully changed key for tomb: $2"
            _message "The new key is: $newkey"
        
       t@@ -2065,6 +2098,7 @@ main() {
            subcommands_opts[dig]="f -force -ignore-swap s: -size=s "
            subcommands_opts[lock]="f -force -ignore-swap k: -key=k o: -sudo-pwd: -tomb-pwd: "
            subcommands_opts[change]="f -force -ignore-swap k: -key=k -sudo-pwd: -tomb-pwd: "
       +    subcommands_opts[backup]="k: -key=k "
        
            subcommands_opts[passwd]="f -ignore-swap -kdf: -tomb-old-pwd: -tomb-pwd: "
            subcommands_opts[close]="-sudo-pwd: "
       t@@ -2196,6 +2230,12 @@ main() {
                    change_tomb_key ${=PARAM}
                    ;;
        
       +        backup)
       +            { test "$QRENCODE" = 0 } && {
       +                die "QREncode not installed: cannot backup keys on paper." }
       +            backup_key ${=PARAM}
       +            ;;
       +
                # backward compat
                create)
                    _warning "The create command is deprecated, please use dig, forge and lock instead."