diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 17:44:12 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 17:44:12 +0000 |
commit | 1be69c2c660b70ac2f4de2a5326e27e3e60eb82d (patch) | |
tree | bb299ab6f411f4fccd735907035de710e4ec6abc /misc/luks-header-from-active | |
parent | Initial commit. (diff) | |
download | cryptsetup-9eddc734c478e50782ad0d1e21fe2d3218ed3213.tar.xz cryptsetup-9eddc734c478e50782ad0d1e21fe2d3218ed3213.zip |
Adding upstream version 2:2.3.7.upstream/2%2.3.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rwxr-xr-x | misc/luks-header-from-active | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/misc/luks-header-from-active b/misc/luks-header-from-active new file mode 100755 index 0000000..a94ad33 --- /dev/null +++ b/misc/luks-header-from-active @@ -0,0 +1,59 @@ +#!/bin/bash + +# Try to get LUKS info and master key from active mapping and prepare parameters for cryptsetup. +# +# Copyright (C) 2010,2011,2012 Milan Broz <gmazyland@gmail.com> +# +# This copyrighted material is made available to anyone wishing to use, +# modify, copy, or redistribute it subject to the terms and conditions +# of the GNU General Public License v.2. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +umask 0077 + +fail() { echo -e $1 ; exit 1 ; } +field() { echo $(dmsetup table --target crypt --showkeys $DEVICE | sed 's/.*: //' | cut -d' ' -f$1) ; } +field_uuid() { echo $(dmsetup info $1 --noheadings -c -o uuid) ; } +field_device() { + TEMP=$(readlink /sys/dev/block/$1 | sed -e 's/.*\///') + if [ ${TEMP:0:3} = "dm-" -a -e /sys/block/$TEMP/dm/name ] ; then + TEMP=/dev/mapper/$(cat /sys/block/$TEMP/dm/name) + else + TEMP=/dev/$TEMP + fi + echo $TEMP +} + +which readlink >/dev/null || fail "You need readlink (part of coreutils package)." +which xxd >/dev/null || fail "You need xxd (part of vim package) installed to convert key." + +[ -z "$2" ] && fail "Recover LUKS header from active mapping, use:\n $0 crypt_mapped_device mk_file_name" + +DEVICE=$1 +MK_FILE=$2 + +[ -z "$(field 4)" ] && fail "Mapping $1 not active or it is not crypt target." + +CIPHER=$(field 4) +OFFSET=$(field 8) +SYS_DEVICE=$(field 7) +REAL_DEVICE=$(field_device $SYS_DEVICE) +KEY=$(field 5) +KEY_SIZE=$(( ${#KEY} / 2 * 8 )) +SYS_UUID=$(field_uuid $DEVICE) +UUID="${SYS_UUID:12:8}-${SYS_UUID:20:4}-${SYS_UUID:24:4}-${SYS_UUID:28:4}-${SYS_UUID:32:12}" + +#echo "CIPHER=$CIPHER OFFSET=$OFFSET SYS_DEVICE=$SYS_DEVICE REAL_DEVICE=$REAL_DEVICE KEY_SIZE=$KEY_SIZE KEY=$KEY UUID=$UUID SYS_UUID=$SYS_UUID" + +[ -z "$CIPHER" -o -z "$OFFSET" -o "$OFFSET" -le 383 -o \ +-z "$KEY" -o -z "$UUID" -o -z "$REAL_DEVICE" -o "${SYS_UUID:0:12}" != "CRYPT-LUKS1-" ] && \ +fail "Incompatible device, sorry." + +echo "Generating master key to file $MK_FILE." +echo -E -n $KEY| xxd -r -p >$MK_FILE + +echo "You can now try to reformat LUKS device using:" +echo " cryptsetup luksFormat -c $CIPHER -s $KEY_SIZE --align-payload=$OFFSET --master-key-file=$MK_FILE --uuid=$UUID $REAL_DEVICE" |