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