Path: blob/main/tests/sys/geom/class/eli/init_test.sh
39635 views
#!/bin/sh12. $(atf_get_srcdir)/conf.sh34init_test()5{6cipher=$17secsize=$28ealgo=${cipher%%:*}9keylen=${cipher##*:}1011atf_check -s exit:0 -e ignore \12geli init -B none -e $ealgo -l $keylen -P -K keyfile \13-s $secsize ${md}14atf_check geli attach -p -k keyfile ${md}1516atf_check dd if=rnd of=/dev/${md}.eli bs=${secsize} count=${sectors} \17status=none1819md_rnd=`dd if=rnd bs=${secsize} count=${sectors} status=none | md5`20atf_check_equal 0 $?21md_ddev=`dd if=/dev/${md}.eli bs=${secsize} count=${sectors} status=none | md5`22atf_check_equal 0 $?23md_edev=`dd if=/dev/${md} bs=${secsize} count=${sectors} status=none | md5`24atf_check_equal 0 $?2526if [ ${md_rnd} != ${md_ddev} ]; then27atf_fail "Miscompare for ealgo=${ealgo} keylen=${keylen} sec=${secsize}"28fi29if [ ${md_rnd} == ${md_edev} ]; then30atf_fail "Data was not encrypted for ealgo=${ealgo} keylen=${keylen} sec=${secsize}"31fi32}33atf_test_case init cleanup34init_head()35{36atf_set "descr" "Basic I/O with geli"37atf_set "require.user" "root"38atf_set "timeout" 60039}40init_body()41{42geli_test_setup4344sectors=324546atf_check dd if=/dev/random of=keyfile bs=512 count=16 status=none47atf_check dd if=/dev/random of=rnd bs=$MAX_SECSIZE count=${sectors} \48status=none49for_each_geli_config_nointegrity init_test50}51init_cleanup()52{53geli_test_cleanup54}5556atf_test_case init_B cleanup57init_B_head()58{59atf_set "descr" "init -B can select an alternate backup metadata file"60atf_set "require.user" "root"61}62init_B_body()63{64geli_test_setup6566sectors=1006768atf_check dd if=/dev/random of=keyfile bs=512 count=16 status=none6970attach_md md -t malloc -s $sectors7172# -B none73rm -f /var/backups/${md}.eli74atf_check -s exit:0 -o ignore geli init -B none -P -K keyfile ${md}75if [ -f /var/backups/${md}.eli ]; then76atf_fail "geli created a backup file even with -B none"77fi7879# no -B80rm -f /var/backups/${md}.eli81atf_check -s exit:0 -o ignore geli init -P -K keyfile ${md}82if [ ! -f /var/backups/${md}.eli ]; then83atf_fail "geli did not create a backup file"84fi85atf_check geli clear ${md}86atf_check -s not-exit:0 -e ignore geli attach -p -k keyfile ${md}87atf_check -s exit:0 -o ignore geli restore /var/backups/${md}.eli ${md}88atf_check -s exit:0 -o ignore geli attach -p -k keyfile ${md}89atf_check geli detach ${md}90rm -f /var/backups/${md}.eli9192# -B file93rm -f backupfile94atf_check -s exit:0 -o ignore \95geli init -B backupfile -P -K keyfile ${md}96if [ ! -f backupfile ]; then97atf_fail "geli init -B did not create a backup file"98fi99atf_check geli clear ${md}100atf_check -s not-exit:0 -e ignore geli attach -p -k keyfile ${md}101atf_check geli restore backupfile ${md}102atf_check geli attach -p -k keyfile ${md}103}104init_B_cleanup()105{106geli_test_cleanup107}108109atf_test_case init_J cleanup110init_J_head()111{112atf_set "descr" "init -J accepts a passfile"113atf_set "require.user" "root"114}115init_J_body()116{117geli_test_setup118119sectors=100120attach_md md -t malloc -s `expr $sectors + 1`121122atf_check dd if=/dev/random of=keyfile0 bs=512 count=16 status=none123atf_check dd if=/dev/random of=keyfile1 bs=512 count=16 status=none124dd if=/dev/random bs=512 count=16 status=none | sha1 > passfile0125atf_check_equal 0 $?126dd if=/dev/random bs=512 count=16 status=none | sha1 > passfile1127atf_check_equal 0 $?128129for iter in -1 0 64; do130atf_check -s not-exit:0 -e ignore \131geli init -i ${iter} -B none -J passfile0 -P ${md}132atf_check -s not-exit:0 -e ignore \133geli init -i ${iter} -B none -J passfile0 -P -K keyfile0 ${md}134atf_check geli init -i ${iter} -B none -J passfile0 -K keyfile0 ${md}135atf_check -s not-exit:0 -e ignore \136geli attach -k keyfile0 -p ${md}137atf_check -s not-exit:0 -e ignore \138geli attach -j passfile0 ${md}139atf_check -s not-exit:0 -e ignore \140geli attach -j keyfile0 ${md}141atf_check -s not-exit:0 -e ignore \142geli attach -k passfile0 -p ${md}143atf_check -s not-exit:0 -e ignore \144geli attach -j keyfile0 -k passfile0 ${md}145atf_check -s not-exit:0 -e ignore \146geli attach -j keyfile0 -k keyfile0 ${md}147atf_check -s not-exit:0 -e ignore \148geli attach -j passfile0 -k passfile0 ${md}149atf_check -s exit:0 -e ignore \150geli attach -j passfile0 -k keyfile0 ${md}151atf_check -s exit:0 -e ignore geli detach ${md}152atf_check -s exit:0 -e ignore -x \153"cat keyfile0 | geli attach -j passfile0 -k - ${md}"154atf_check -s exit:0 -e ignore geli detach ${md}155atf_check -s exit:0 -e ignore -x \156"cat passfile0 | geli attach -j - -k keyfile0 ${md}"157atf_check -s exit:0 -e ignore geli detach ${md}158159atf_check -s not-exit:0 -e ignore \160geli init -i ${iter} -B none -J passfile0 -J passfile1 -P ${md}161atf_check -s not-exit:0 -e ignore \162geli init -i ${iter} -B none -J passfile0 -J passfile1 -P -K keyfile0 -K keyfile1 ${md}163atf_check -s exit:0 -e ignore \164geli init -i ${iter} -B none -J passfile0 -J passfile1 -K keyfile0 -K keyfile1 ${md}165atf_check -s not-exit:0 -e ignore \166geli attach -k keyfile0 -p ${md}167atf_check -s not-exit:0 -e ignore \168geli attach -k keyfile1 -p ${md}169atf_check -s not-exit:0 -e ignore \170geli attach -j passfile0 ${md}171atf_check -s not-exit:0 -e ignore \172geli attach -j passfile1 ${md}173atf_check -s not-exit:0 -e ignore \174geli attach -k keyfile0 -k keyfile1 -p ${md}175atf_check -s not-exit:0 -e ignore \176geli attach -j passfile0 -j passfile1 ${md}177atf_check -s not-exit:0 -e ignore \178geli attach -k keyfile0 -j passfile0 ${md}179atf_check -s not-exit:0 -e ignore \180geli attach -k keyfile0 -j passfile1 ${md}181atf_check -s not-exit:0 -e ignore \182geli attach -k keyfile1 -j passfile0 ${md}183atf_check -s not-exit:0 -e ignore \184geli attach -k keyfile1 -j passfile1 ${md}185atf_check -s not-exit:0 -e ignore \186geli attach -k keyfile0 -j passfile0 -j passfile1 ${md}187atf_check -s not-exit:0 -e ignore \188geli attach -k keyfile1 -j passfile0 -j passfile1 ${md}189atf_check -s not-exit:0 -e ignore \190geli attach -k keyfile0 -k keyfile1 -j passfile0 ${md}191atf_check -s not-exit:0 -e ignore \192geli attach -k keyfile0 -k keyfile1 -j passfile1 ${md}193atf_check -s not-exit:0 -e ignore \194geli attach -k keyfile1 -k keyfile0 -j passfile0 -j passfile1 ${md}195atf_check -s not-exit:0 -e ignore \196geli attach -k keyfile0 -k keyfile1 -j passfile1 -j passfile0 ${md}197atf_check -s not-exit:0 -e ignore \198geli attach -k keyfile1 -k keyfile0 -j passfile1 -j passfile0 ${md}199atf_check -s exit:0 -e ignore \200geli attach -j passfile0 -j passfile1 -k keyfile0 -k keyfile1 ${md}201atf_check -s exit:0 -e ignore geli detach ${md}202atf_check -s exit:0 -e ignore -x \203"cat passfile0 | geli attach -j - -j passfile1 -k keyfile0 -k keyfile1 ${md}"204atf_check -s exit:0 -e ignore geli detach ${md}205atf_check -s exit:0 -e ignore -x \206"cat passfile1 | geli attach -j passfile0 -j - -k keyfile0 -k keyfile1 ${md}"207atf_check -s exit:0 -e ignore geli detach ${md}208atf_check -s exit:0 -e ignore -x \209"cat keyfile0 | geli attach -j passfile0 -j passfile1 -k - -k keyfile1 ${md}"210atf_check -s exit:0 -e ignore geli detach ${md}211atf_check -s exit:0 -e ignore -x \212"cat keyfile1 | geli attach -j passfile0 -j passfile1 -k keyfile0 -k - ${md}"213atf_check -s exit:0 -e ignore geli detach ${md}214atf_check -s exit:0 -e ignore -x \215"cat keyfile0 keyfile1 | geli attach -j passfile0 -j passfile1 -k - ${md}"216atf_check -s exit:0 -e ignore geli detach ${md}217atf_check -s exit:0 -e ignore -x \218"cat passfile0 passfile1 | awk '{printf \"%s\", \$0}' | geli attach -j - -k keyfile0 -k keyfile1 ${md}"219atf_check -s exit:0 -e ignore geli detach ${md}220done221}222init_J_cleanup()223{224geli_test_cleanup225}226227init_a_test()228{229cipher=$1230aalgo=$2231secsize=$3232ealgo=${cipher%%:*}233keylen=${cipher##*:}234235atf_check -s exit:0 -e ignore \236geli init -B none -a $aalgo -e $ealgo -l $keylen -P -K keyfile \237-s $secsize ${md}238atf_check geli attach -p -k keyfile ${md}239240atf_check dd if=rnd of=/dev/${md}.eli bs=${secsize} count=${sectors} status=none241242md_rnd=`dd if=rnd bs=${secsize} count=${sectors} status=none | md5`243atf_check_equal 0 $?244md_ddev=`dd if=/dev/${md}.eli bs=${secsize} count=${sectors} status=none | md5`245atf_check_equal 0 $?246247if [ ${md_rnd} != ${md_ddev} ]; then248atf_fail "Miscompare for aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}"249fi250}251atf_test_case init_a cleanup252init_a_head()253{254atf_set "descr" "I/O with geli and HMACs"255atf_set "require.user" "root"256atf_set "timeout" 3600257}258init_a_body()259{260geli_test_setup261262sectors=100263264atf_check dd if=/dev/random of=keyfile bs=512 count=16 status=none265atf_check dd if=/dev/random of=rnd bs=$MAX_SECSIZE count=${sectors} \266status=none267for_each_geli_config init_a_test268true269}270init_a_cleanup()271{272geli_test_cleanup273}274275init_alias_test() {276ealgo=$1277keylen=$2278expected_ealgo=$3279expected_keylen=$4280281atf_check geli init -B none -e $ealgo -l $keylen -P -K keyfile ${md}282atf_check geli attach -p -k keyfile ${md}283real_ealgo=`geli list ${md}.eli | awk '/EncryptionAlgorithm/ {print $2}'`284real_keylen=`geli list ${md}.eli | awk '/KeyLength/ {print $2}'`285286if [ "${real_ealgo}" != "${expected_ealgo}" ]; then287atf_fail "expected ${expected_ealgo} but got ${real_ealgo}"288fi289290if [ "${real_keylen}" != "${expected_keylen}" ]; then291atf_fail "expected ${expected_keylen} but got ${real_keylen}"292fi293atf_check geli detach ${md}294}295atf_test_case init_alias cleanup296init_alias_head()297{298atf_set "descr" "geli init accepts cipher aliases"299atf_set "require.user" "root"300}301init_alias_body()302{303geli_test_setup304305attach_md md -t malloc -s 1024k306atf_check dd if=/dev/random of=keyfile bs=512 count=16 status=none307308for spec in aes:0:AES-XTS:128 aes:128:AES-XTS:128 aes:256:AES-XTS:256 \309camellia:0:CAMELLIA-CBC:128 camellia:128:CAMELLIA-CBC:128 \310camellia:256:CAMELLIA-CBC:256 ; do311312ealgo=`echo $spec | cut -d : -f 1`313keylen=`echo $spec | cut -d : -f 2`314expected_ealgo=`echo $spec | cut -d : -f 3`315expected_keylen=`echo $spec | cut -d : -f 4`316317init_alias_test $ealgo $keylen $expected_ealgo $expected_keylen318done319}320init_alias_cleanup()321{322geli_test_cleanup323}324325atf_test_case init_i_P cleanup326init_i_P_head()327{328atf_set "descr" "geli: Options -i and -P are mutually exclusive"329atf_set "require.user" "root"330}331init_i_P_body()332{333geli_test_setup334335sectors=100336attach_md md -t malloc -s `expr $sectors + 1`337338atf_check dd if=/dev/random of=keyfile bs=512 count=16 status=none339340atf_check -s not-exit:0 -e "match:Options -i and -P are mutually exclusive"\341geli init -B none -i 64 -P -K keyfile $md342}343init_i_P_cleanup()344{345geli_test_cleanup346}347348atf_test_case nokey cleanup349nokey_head()350{351atf_set "descr" "geli init fails if called with no key component"352atf_set "require.user" "root"353}354nokey_body()355{356geli_test_setup357358sectors=100359attach_md md -t malloc -s `expr $sectors + 1`360361atf_check -s not-exit:0 -e match:"No key components given" \362geli init -B none -P ${md}363}364nokey_cleanup()365{366geli_test_cleanup367}368369atf_init_test_cases()370{371atf_add_test_case init372atf_add_test_case init_B373atf_add_test_case init_J374atf_add_test_case init_a375atf_add_test_case init_alias376atf_add_test_case init_i_P377atf_add_test_case nokey378}379380381