xref: /dflybsd-src/contrib/cryptsetup/tests/compat-test (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
186d7f5d3SJohn Marino#!/usr/bin/env bash
286d7f5d3SJohn Marino
386d7f5d3SJohn MarinoCRYPTSETUP=/sbin/cryptsetup
486d7f5d3SJohn Marino
586d7f5d3SJohn MarinoLOOPDEV=/dev/vn1
686d7f5d3SJohn MarinoDEV_NAME=dummy
786d7f5d3SJohn MarinoDEV_NAME2=dummy2
886d7f5d3SJohn MarinoORIG_IMG=luks-test-orig
986d7f5d3SJohn MarinoIMG=luks-test
1086d7f5d3SJohn MarinoIMG1=luks-test1
1186d7f5d3SJohn MarinoKEY1=key1
1286d7f5d3SJohn Marino
1386d7f5d3SJohn MarinoLUKS_HEADER="S0-5 S6-7 S8-39 S40-71 S72-103 S104-107 S108-111 R112-131 R132-163 S164-167 S168-207 A0-591"
1486d7f5d3SJohn MarinoKEY_SLOT0="S208-211 S212-215 R216-247 S248-251 S251-255"
1586d7f5d3SJohn MarinoKEY_MATERIAL0="R4096-68096"
1686d7f5d3SJohn MarinoKEY_MATERIAL0_EXT="R4096-68096"
1786d7f5d3SJohn Marino
1886d7f5d3SJohn MarinoKEY_SLOT1="S256-259 S260-263 R264-295 S296-299 S300-303"
1986d7f5d3SJohn MarinoKEY_MATERIAL1="R69632-133632"
2086d7f5d3SJohn MarinoKEY_MATERIAL1_EXT="S69632-133632"
2186d7f5d3SJohn Marino
2286d7f5d3SJohn Marinofunction remove_mapping()
2386d7f5d3SJohn Marino{
2486d7f5d3SJohn Marino	[ -e /dev/mapper/$DEV_NAME2 ] && dmsetup remove $DEV_NAME2
2586d7f5d3SJohn Marino	[ -e /dev/mapper/$DEV_NAME ] && dmsetup remove $DEV_NAME
2686d7f5d3SJohn Marino	vnconfig -u $LOOPDEV >/dev/null 2>&1
2786d7f5d3SJohn Marino#	losetup -d $LOOPDEV >/dev/null 2>&1
2886d7f5d3SJohn Marino	rm -f $ORIG_IMG $IMG $IMG1 $KEY1 >/dev/null 2>&1
2986d7f5d3SJohn Marino}
3086d7f5d3SJohn Marino
3186d7f5d3SJohn Marinofunction fail()
3286d7f5d3SJohn Marino{
3386d7f5d3SJohn Marino	echo "last ret: $?"
3486d7f5d3SJohn Marino	remove_mapping
3586d7f5d3SJohn Marino	echo "FAILED"
3686d7f5d3SJohn Marino	exit 2
3786d7f5d3SJohn Marino}
3886d7f5d3SJohn Marino
3986d7f5d3SJohn Marinofunction prepare()
4086d7f5d3SJohn Marino{
4186d7f5d3SJohn Marino	if [ $(id -u) != 0 ]; then
4286d7f5d3SJohn Marino		echo "WARNING: You must be root to run this test, test skipped."
4386d7f5d3SJohn Marino		exit 0
4486d7f5d3SJohn Marino	fi
4586d7f5d3SJohn Marino
4686d7f5d3SJohn Marino	[ -e /dev/mapper/$DEV_NAME ] && dmsetup remove $DEV_NAME
4786d7f5d3SJohn Marino
4886d7f5d3SJohn Marino	if [ ! -e $KEY1 ]; then
4986d7f5d3SJohn Marino		dd if=/dev/urandom of=$KEY1 count=1 bs=32 >/dev/null 2>&1
5086d7f5d3SJohn Marino	fi
5186d7f5d3SJohn Marino
5286d7f5d3SJohn Marino	if [ ! -e $IMG ]; then
5386d7f5d3SJohn Marino		bzip2 -cd compatimage.img.bz2 > $IMG
5486d7f5d3SJohn Marino		vnconfig -u $LOOPDEV >/dev/null 2>&1
5586d7f5d3SJohn Marino		vnconfig -S labels -T $LOOPDEV $IMG
5686d7f5d3SJohn Marino#		losetup -d $LOOPDEV >/dev/null 2>&1
5786d7f5d3SJohn Marino#		losetup $LOOPDEV $IMG
5886d7f5d3SJohn Marino	fi
5986d7f5d3SJohn Marino
6086d7f5d3SJohn Marino	cp $IMG $ORIG_IMG
6186d7f5d3SJohn Marino
6286d7f5d3SJohn Marino	echo "CASE: $1"
6386d7f5d3SJohn Marino}
6486d7f5d3SJohn Marino
6586d7f5d3SJohn Marinofunction check()
6686d7f5d3SJohn Marino{
6786d7f5d3SJohn Marino	sync
6886d7f5d3SJohn Marino	sync
6986d7f5d3SJohn Marino	sync
7086d7f5d3SJohn Marino	./fileDiffer.py $IMG $ORIG_IMG $1|| fail
7186d7f5d3SJohn Marino}
7286d7f5d3SJohn Marino
7386d7f5d3SJohn Marinofunction check_exists()
7486d7f5d3SJohn Marino{
7586d7f5d3SJohn Marino	[ -e /dev/mapper/$DEV_NAME ] || fail
7686d7f5d3SJohn Marino	check $1
7786d7f5d3SJohn Marino}
7886d7f5d3SJohn Marino
7986d7f5d3SJohn Marino# LUKS tests
8086d7f5d3SJohn Marino
8186d7f5d3SJohn Marinoprepare	"[1] open - compat image - acceptance check"
8286d7f5d3SJohn Marinoecho "compatkey" | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail
8386d7f5d3SJohn Marinocheck_exists
8486d7f5d3SJohn Marino
8586d7f5d3SJohn Marinoprepare "[2] open - compat image - denial check"
8686d7f5d3SJohn Marinoecho "wrongkey" | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME && fail
8786d7f5d3SJohn Marinocheck
8886d7f5d3SJohn Marino
8986d7f5d3SJohn Marino# All headers items and first key material section must change
9086d7f5d3SJohn Marinoprepare "[3] format"
9186d7f5d3SJohn Marinoecho "key0" | $CRYPTSETUP -i 1000 -c aes-cbc-essiv:sha256 -s 128 luksFormat $LOOPDEV || fail
9286d7f5d3SJohn Marinocheck "$LUKS_HEADER $KEY_SLOT0 $KEY_MATERIAL0"
9386d7f5d3SJohn Marino
9486d7f5d3SJohn Marinoprepare "[4] format using hash sha512"
9586d7f5d3SJohn Marinoecho "key0" | $CRYPTSETUP -i 1000 -h sha512 -c aes-cbc-essiv:sha256 -s 128 luksFormat $LOOPDEV || fail
9686d7f5d3SJohn Marinocheck "$LUKS_HEADER $KEY_SLOT0 $KEY_MATERIAL0"
9786d7f5d3SJohn Marino
9886d7f5d3SJohn Marinoprepare "[5] open"
9986d7f5d3SJohn Marinoecho "key0" | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail
10086d7f5d3SJohn Marinocheck_exists
10186d7f5d3SJohn Marino
10286d7f5d3SJohn Marino# Key Slot 1 and key material section 1 must change, the rest must not.
10386d7f5d3SJohn Marinoprepare "[6] add key"
10486d7f5d3SJohn Marinoecho -e "key0\nkey1" | $CRYPTSETUP luksAddKey $LOOPDEV || fail
10586d7f5d3SJohn Marinocheck "$KEY_SLOT1 $KEY_MATERIAL1"
10686d7f5d3SJohn Marinoecho "key1" | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail
10786d7f5d3SJohn Marino
10886d7f5d3SJohn Marino# Unsuccessful Key Delete - nothing may change
10986d7f5d3SJohn Marinoprepare "[7] unsuccessful delete"
11086d7f5d3SJohn Marinoecho "invalid" | $CRYPTSETUP luksDelKey $LOOPDEV 1 && fail
11186d7f5d3SJohn Marinocheck
11286d7f5d3SJohn Marino
11386d7f5d3SJohn Marino# Delete Key Test
11486d7f5d3SJohn Marino# Key Slot 1 and key material section 1 must change, the rest must not
11586d7f5d3SJohn Marinoprepare "[8] successful delete"
11686d7f5d3SJohn Marino$CRYPTSETUP -q luksDelKey $LOOPDEV 1 || fail
11786d7f5d3SJohn Marinocheck "$KEY_SLOT1 $KEY_MATERIAL1_EXT"
11886d7f5d3SJohn Marinoecho "key1" | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME && fail
11986d7f5d3SJohn Marinoecho "key0" | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail
12086d7f5d3SJohn Marino
12186d7f5d3SJohn Marino# Key Slot 1 and key material section 1 must change, the rest must not
12286d7f5d3SJohn Marinoprepare "[9] add key test for key files"
12386d7f5d3SJohn Marinoecho "key0" | $CRYPTSETUP luksAddKey $LOOPDEV $KEY1 || fail
12486d7f5d3SJohn Marinocheck "$KEY_SLOT1 $KEY_MATERIAL1"
12586d7f5d3SJohn Marino$CRYPTSETUP -d $KEY1 luksOpen $LOOPDEV $DEV_NAME || fail
12686d7f5d3SJohn Marino
12786d7f5d3SJohn Marino# Key Slot 1 and key material section 1 must change, the rest must not
12886d7f5d3SJohn Marinoprepare "[10] delete key test with key1 as remaining key"
12986d7f5d3SJohn Marino$CRYPTSETUP -d $KEY1 luksDelKey $LOOPDEV 0 || fail
13086d7f5d3SJohn Marinocheck "$KEY_SLOT0 $KEY_MATERIAL0_EXT"
13186d7f5d3SJohn Marinoecho "key0" | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME && fail
13286d7f5d3SJohn Marino$CRYPTSETUP luksOpen -d $KEY1 $LOOPDEV $DEV_NAME || fail
13386d7f5d3SJohn Marino
13486d7f5d3SJohn Marino# Delete last slot
13586d7f5d3SJohn Marinoprepare "[11] delete last key"
13686d7f5d3SJohn Marinoecho "key0" | $CRYPTSETUP luksFormat $LOOPDEV || fail
13786d7f5d3SJohn Marinoecho "key0" | $CRYPTSETUP luksKillSlot $LOOPDEV 0 || fail
13886d7f5d3SJohn Marinoecho "key0" | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME && fail
13986d7f5d3SJohn Marino
14086d7f5d3SJohn Marino# Format test for ESSIV, and some other parameters.
14186d7f5d3SJohn Marinoprepare "[12] parameter variation test"
14286d7f5d3SJohn Marino$CRYPTSETUP -q -i 1000 -c aes-cbc-essiv:sha256 -s 128 luksFormat $LOOPDEV $KEY1 || fail
14386d7f5d3SJohn Marinocheck "$LUKS_HEADER $KEY_SLOT0 $KEY_MATERIAL0"
14486d7f5d3SJohn Marino$CRYPTSETUP -d $KEY1 luksOpen $LOOPDEV $DEV_NAME || fail
14586d7f5d3SJohn Marino
14686d7f5d3SJohn Marinoprepare	"[13] open/close - stacked devices"
14786d7f5d3SJohn Marinoecho "key0" | $CRYPTSETUP -q luksFormat $LOOPDEV || fail
14886d7f5d3SJohn Marinoecho "key0" | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME || fail
14986d7f5d3SJohn Marinoecho "key0" | $CRYPTSETUP -q luksFormat /dev/mapper/$DEV_NAME || fail
15086d7f5d3SJohn Marinoecho "key0" | $CRYPTSETUP -q luksOpen /dev/mapper/$DEV_NAME $DEV_NAME2 || fail
15186d7f5d3SJohn Marino$CRYPTSETUP -q luksClose  $DEV_NAME2 || fail
15286d7f5d3SJohn Marino$CRYPTSETUP -q luksClose  $DEV_NAME || fail
15386d7f5d3SJohn Marino
15486d7f5d3SJohn Marinoprepare	"[14] format/open - passphrase on stdin & new line"
15586d7f5d3SJohn Marino# stdin defined by "-" must take even newline
15686d7f5d3SJohn Marinoecho -n $'foo\nbar' | $CRYPTSETUP -q luksFormat $LOOPDEV - || fail
15786d7f5d3SJohn Marinoecho -n $'foo\nbar' | $CRYPTSETUP -q --key-file=- luksOpen $LOOPDEV $DEV_NAME || fail
15886d7f5d3SJohn Marino$CRYPTSETUP -q luksClose  $DEV_NAME || fail
15986d7f5d3SJohn Marinoecho -n $'foo\nbar' | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME && fail
16086d7f5d3SJohn Marino# now also try --key-file
16186d7f5d3SJohn Marinoecho -n $'foo\nbar' | $CRYPTSETUP -q luksFormat $LOOPDEV --key-file=- || fail
16286d7f5d3SJohn Marinoecho -n $'foo\nbar' | $CRYPTSETUP -q --key-file=- luksOpen $LOOPDEV $DEV_NAME || fail
16386d7f5d3SJohn Marino$CRYPTSETUP -q luksClose  $DEV_NAME || fail
16486d7f5d3SJohn Marino# process newline if from stdin
16586d7f5d3SJohn Marinoecho -n $'foo\nbar' | $CRYPTSETUP -q luksFormat $LOOPDEV || fail
16686d7f5d3SJohn Marinoecho 'foo' | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME || fail
16786d7f5d3SJohn Marino$CRYPTSETUP -q luksClose  $DEV_NAME || fail
16886d7f5d3SJohn Marino
16986d7f5d3SJohn Marinoremove_mapping
17086d7f5d3SJohn Marinoexit 0
171