commit 32cf477b580f97aecbc8dc87106a3bfcc08ed3eb
parent 342c121fa2e77e98cf937aa76d3a4ef331e9f8f1
Author: Jaromil <jaromil@dyne.org>
Date: Fri, 22 Mar 2013 22:31:29 +0100
cleaned up old create_tomb and updated terminal help
Diffstat:
M | src/tomb | | | 225 | +++++++------------------------------------------------------------------------ |
1 file changed, 18 insertions(+), 207 deletions(-)
diff --git a/src/tomb b/src/tomb
@@ -334,11 +334,9 @@ check_command() {
#before wasting user's time
if ! option_is_set --ignore-swap && ! option_is_set -f; then
- if [[ $1 == 'create' || $1 == 'open' ]]; then
- if ! check_swap; then
- error "Swap activated. Disable it with swapoff, or use --ignore-swap"
- exit 1
- fi
+ if ! check_swap; then
+ error "Swap activated. Disable it with swapoff, or use --ignore-swap"
+ exit 1
fi
fi
}
@@ -350,18 +348,24 @@ Syntax: tomb [options] command [file] [place]
Commands:
- create create a new tomb FILE and its keys (needs size)
- open open an existing tomb FILE on PLACE
- list list all open tombs or the one called FILE
- close close the open tomb called FILE (or all)
- slam close tomb FILE and kill all pids using it
- passwd change the password of a tomb key FILE
- resize resize a tomb FILE (only bigger, needs size)
+ dig create a new empty TOMB file of --size in MB
+ forge create a new KEY file and set its password
+ lock installs a lock on a TOMB to use it with KEY
+
+ open open an existing TOMB
+
+ list list open TOMBs
+
+ close close a TOMB (or all)
+ slam slam a TOMB killing all programs using it
+
+ passwd change the password of a KEY
+ resize resize a TOMB to a new --size (can only grow)
EOF
if [ "$STEGHIDE" = 1 ]; then
cat <<EOF
- bury hide a tomb key FILE inside a jpeg PLACE
- exhume extract a tomb key FILE from a jpeg PLACE
+ bury hide a KEY inside a JPEG image
+ exhume extract a KEY from a JPEG image
EOF
fi
cat <<EOF
@@ -634,195 +638,6 @@ exec_safe_post_hooks() {
# }}}
# {{{ TOMB SUB-COMMANDS
-# {{{ - Create
-# $1 is the tomb path
-
-create_tomb() {
- _message "Commanded to create tomb $1"
-
- # we run as root, but remember the original uid:gid to drop
- # privileges when not needed anymore
- if option_is_set -U; then _uid="`option_value -U`"; fi
- if option_is_set -G; then _gid="`option_value -G`"; fi
-
- # if swap is on, we remind the user about possible data leaks to disk
- if ! option_is_set -f && ! option_is_set --ignore-swap; then check_swap; fi
-
- if ! [ $1 ]; then
- _warning "no tomb name specified for creation"
- return 1
- fi
-
- # the encryption cipher for a tomb can be set at creation using -o
- if ! option_is_set -o; then
- create_cipher="`option_value -o`"
- else
- create_cipher=aes-cbc-essiv:sha256
- fi
-
- tombfile=`basename $1`
- tombdir=`dirname $1`
- # make sure the file has a .tomb extension
- tombname=${tombfile%%\.*}
- tombfile=${tombname}.tomb
-
-
- # require the specification of the size of the tomb (-s) in MB
- tombsize="`option_value -s`"
-
- [ $tombsize ] || die "Size argument missing, use --size"
-
- [[ $tombsize != <-> ]] && die "Size argument is not an integer"
-
- if [ -e ${tombdir}/${tombfile} ]; then
- _warning "tomb exists already. I'm not digging here:"
- ls -lh ${tombdir}/${tombfile}
- return 1
- fi
-
- # check if the key is set manually then use the one existing
- if option_is_set -k; then
- tombkey="`option_value -k`"
- if [ -e "${tombkey}" ]; then
- _message "Use an existing key to lock the new tomb:"
- ls -lh ${tombkey}
- fi
-
- # this does a check on the file header, virtuosism by hellekin
- # [[ `file =(awk '/^-+BEGIN/,0' $1) -bi` =~ application/pgp ]]
- if ! is_valid_key ${tombkey}; then
- _warning "The key seems invalid, the application/pgp header is missing"
- die "Operation aborted."
- fi
- else
- tombkey="new" # generate it new later
- fi
-
- _success "Creating a new tomb in ${tombdir}/${tombfile}"
-
- if [ -z $tombsize ]; then
- _message "No size specified, summoning the Tomb Undertaker to guide us in the creation."
- "$TOMBOPENEXEC" &
- wait $!
- return 0
- fi
-
- tombsize_4k=`expr $tombsize \* 1024 / 4`
- _message "Generating ${tombfile} of ${tombsize}Mb (${tombsize_4k} blocks of 4Kb)"
- # we will first touch the file and set permissions: this way, even if interrupted, permissions are right
- touch ${tombdir}/${tombfile}
- chown ${_uid}:${_gid} "${tombdir}/${tombfile}"
- chmod 0600 "${tombdir}/${tombfile}"
- $DD if=/dev/urandom bs=4k count=${tombsize_4k} of=${tombdir}/${tombfile}
-
- if [ $? = 0 -a -e ${tombdir}/${tombfile} ]; then
- _success "OK: `ls -lh ${tombdir}/${tombfile}`"
- else
- die "Error creating the tomb ${tombdir}/${tombfile}, operation aborted."
- fi
-
- nstloop=`losetup -f` # get the number for next loopback device
- losetup -f ${tombdir}/${tombfile} # allocates the next loopback for our file
-
- # create the keyfile in tmpfs so that we leave less traces in RAM
- keytmp=`safe_dir tomb`
- (( $? )) && die "error creating temp dir"
- xxx "safe_dir at $keytmp"
-
- #rm -f $keytmp
- # ?????? creo, cancello e ricreo ??????
- #mkdir -p $keytmp
- mount tmpfs "${keytmp}" -t tmpfs -o size=1m
- if [ $? != 0 ]; then
- _warning "cannot mount tmpfs filesystem in volatile memory"
- losetup -d $nstloop
- rm -r "${keytmp}"
- die "operation aborted."
- fi
- _message "Generating secret key..."
- _message "this operation takes time, keep using this computer on other tasks,"
- _message "once done you will be asked to choose a password for your tomb."
- _message "To make it faster you can move the mouse around"
- touch ${keytmp}/tomb.tmp
- chmod 0600 ${keytmp}/tomb.tmp
- random_source=/dev/random
- if option_is_set --use-urandom; then
- random_source=/dev/urandom
- fi
- if [[ $DD = "dcfldd" ]]; then
- $DD bs=1 count=256 if=$random_source of=${keytmp}/tomb.tmp statusinterval=1
- else
- $DD bs=1 count=256 if=$random_source of=${keytmp}/tomb.tmp
- fi
- if ! [ -r ${keytmp}/tomb.tmp ]; then
- _warning "cannot generate encryption key"
- umount ${keytmp}
- losetup -d $nstloop
- rm -r $keytmp
- die "operation aborted."
- fi
-
- _success "Setup your secret key file ${tombkey}"
- if [ "$tombkey" = "new" ]; then
- tombkey="${tombdir}/${tombfile}.key"
- touch ${tombkey}
- chown ${_uid}:${_gid} ${tombkey}
- chmod 0600 ${tombkey}
- gen_key ${keytmp}/tomb.tmp > ${tombkey}
- fi
-
- if ! is_valid_key ${tombkey}; then
- _warning "The key does not seem to be valid"
- fi
-
- # if [ $? != 0 ]; then
- # _warning "setting password failed: gnupg returns 2"
- # umount ${keytmp}
- # losetup -d $nstloop
- # rm -r $keytmp
- # exit 1
- # fi
-
- _message "formatting Luks mapped device"
- # we use aes-cbc-essiv with sha256
- # for security, performance and compatibility
- # XXX: More for compatibility then, because xts-plain is better nowadays.
- cryptsetup --batch-mode \
- --cipher ${create_cipher} --key-size 256 \
- luksFormat ${nstloop} ${keytmp}/tomb.tmp
-
- if ! [ $? = 0 ]; then
- umount ${keytmp}
- losetup -d $nstloop
- rm -r $keytmp
- rm ${tombdir}/${tombfile}
- die "operation aborted." 0
- fi
-
- cryptsetup --key-file ${keytmp}/tomb.tmp --cipher ${create_cipher} luksOpen ${nstloop} tomb.tmp
- ${=WIPE} ${keytmp}/tomb.tmp
- umount ${keytmp}
- rm -r ${keytmp}
-
- # cryptsetup luksDump ${nstloop}
-
- _message "formatting your Tomb with Ext3/Ext4 filesystem"
- ${=MKFS} ${tombname} /dev/mapper/tomb.tmp
-
- if [ $? != 0 ]; then
- _warning "Tomb format returned an error:"
- _warning "your tomb ${tombfile} may be corrupted."
- fi
-
- sync
-
- cryptsetup luksClose tomb.tmp
- losetup -d ${nstloop}
-
- _message "done creating $tombname encrypted storage (using Luks dm-crypt ${create_cipher})"
- _success "Your tomb is ready in ${tombdir}/${tombfile} and secured with key ${tombkey}"
-}
-
# This is a new way to create tombs which dissects the whole create_tomb() into 3 clear steps:
# - dig a .tomb (the large file) using /dev/random (takes some minutes at least)
# - forge a .key (the small file) using /dev/urandom (good entropy needed)
@@ -2191,10 +2006,6 @@ main() {
xxx "Tomb command: $subcommand ${PARAM}"
case "$subcommand" in
- create)
- check_priv
- create_tomb ${=PARAM}
- ;;
# new creation in three steps
forge)