# cr_mount <cryptofs file> <mount point>
# Note: You'll be asked for passphrase.
#
# cr_umount <mount point>
function cr_mount()
{
local CRYPTOFS_LOOPDEV_NAME
local CRYPTOFS_MAP_NAME
if [ $# -gt 1 ]; then
CRYPTOFS_MAP_NAME=cryptofs$( date +%s%N )
CRYPTOFS_LOOPDEV_NAME=$( losetup -j $( realpath "${1}" ) | cut -d : -f 1; )
if [ -z "$CRYPTOFS_LOOPDEV_NAME" ]; then
CRYPTOFS_MAP_LOOP=$( losetup -f --show $( realpath "${1}" ) ) || return 1;
else
echo REMOVING UNNEEDED LOOP DEVICES
losetup -d "${CRYPTOFS_LOOPDEV_NAME}"
fi
cryptsetup create "${CRYPTOFS_MAP_NAME}" "${CRYPTOFS_MAP_LOOP}" && \
mount "/dev/mapper/${CRYPTOFS_MAP_NAME}" "${2}" && { echo Mounted "${1}" properly. Use cr_umount to unmount.; } || \
{
echo Mount failed. Bad password?; \
cryptsetup remove "${CRYPTOFS_MAP_NAME}" "${CRYPTOFS_MAP_LOOP}" ; \
losetup -d "${CRYPTOFS_MAP_LOOP}";
}
else
echo "${FUNCNAME} <encrypted file path> <mount point>"
fi
}
function cr_umount()
{
local CRYPTOFS_LOOPDEV_NAME
local CRYPTOFS_MAP_NAME
if [ $# -gt 0 ]; then
CRYPTOFS_MAP_NAME=$( basename $( df "${1}" --output=source | ( read; read -r devn ; echo "${devn}" ) ) ) || return 1;
CRYPTOFS_LOOPDEV_NAME=$( cryptsetup status "${CRYPTOFS_MAP_NAME}" | sed -n 's/\(.*device: \)\(.*\).*$/\2/p' ) || return 1;
mount | fgrep mapper &> /dev/null && { umount "${1}" || return 1; } || echo Not mounted.
if [ -n "${CRYPTOFS_MAP_NAME}" -a -n "${CRYPTOFS_LOOPDEV_NAME}" ]; then
cryptsetup remove "${CRYPTOFS_MAP_NAME}"
losetup -d "${CRYPTOFS_LOOPDEV_NAME}"
fi
else
echo "${FUNCNAME} <mount point>"
fi
}