diff options
Diffstat (limited to 'tests/sys/geom/class/eli/conf.sh')
| -rw-r--r-- | tests/sys/geom/class/eli/conf.sh | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/tests/sys/geom/class/eli/conf.sh b/tests/sys/geom/class/eli/conf.sh new file mode 100644 index 000000000000..05ee4e9bb550 --- /dev/null +++ b/tests/sys/geom/class/eli/conf.sh @@ -0,0 +1,94 @@ +#!/bin/sh + +class="eli" +base=$(atf_get ident) +MAX_SECSIZE=8192 + +attach_md() +{ + local _md + local rv=$1 + shift + + [ -c /dev/mdctl ] || atf_skip "no /dev/mdctl to create md devices" + _md=$(mdconfig -a "$@") || atf_fail "failed to allocate md(4)" + echo $_md >> $TEST_MDS_FILE || exit + eval "${rv}='${_md}'" +} + +# Execute `func` for each combination of cipher, sectorsize, and hmac algo +# `func` usage should be: +# func <cipher> <aalgo> <secsize> +for_each_geli_config() { + func=$1 + backing_filename=$2 + + # Double the sector size to allow for the HMACs' storage space. + osecsize=$(( $MAX_SECSIZE * 2 )) + # geli needs 512B for the label. + bytes=`expr $osecsize \* $sectors + 512`b + + if [ -n "$backing_filename" ]; then + # Use a file-backed md(4) device, so we can deliberatly corrupt + # it without detaching the geli device first. + truncate -s $bytes backing_file + attach_md md -t vnode -f backing_file + else + attach_md md -t malloc -s $bytes + fi + + for cipher in aes-xts:128 aes-xts:256 \ + aes-cbc:128 aes-cbc:192 aes-cbc:256 \ + camellia-cbc:128 camellia-cbc:192 camellia-cbc:256; do + ealgo=${cipher%%:*} + keylen=${cipher##*:} + for aalgo in hmac/sha1 hmac/ripemd160 hmac/sha256 \ + hmac/sha384 hmac/sha512; do + for secsize in 512 1024 2048 4096 $MAX_SECSIZE; do + ${func} $cipher $aalgo $secsize + geli detach ${md} 2>/dev/null + done + done + done +} + +# Execute `func` for each combination of cipher, and sectorsize, with no hmac +# `func` usage should be: +# func <cipher> <secsize> +for_each_geli_config_nointegrity() { + func=$1 + + # geli needs 512B for the label. + bytes=`expr $MAX_SECSIZE \* $sectors + 512`b + attach_md md -t malloc -s $bytes + for cipher in aes-xts:128 aes-xts:256 \ + aes-cbc:128 aes-cbc:192 aes-cbc:256 \ + camellia-cbc:128 camellia-cbc:192 camellia-cbc:256; do + ealgo=${cipher%%:*} + keylen=${cipher##*:} + for secsize in 512 1024 2048 4096 $MAX_SECSIZE; do + ${func} $cipher $secsize + geli detach ${md} 2>/dev/null + done + done +} + +geli_test_cleanup() +{ + if [ -f "$TEST_MDS_FILE" ]; then + while read md; do + [ -c /dev/${md}.eli ] && \ + geli detach $md.eli 2>/dev/null + mdconfig -d -u $md 2>/dev/null + done < $TEST_MDS_FILE + fi + true +} + +geli_test_setup() +{ + geom_atf_test_setup +} + +ATF_TEST=true +. `dirname $0`/../geom_subr.sh |
