xref: /freebsd/tests/sys/geom/class/eli/conf.sh (revision 22cf89c938886d14f5796fc49f9f020c23ea8eaf)
1#!/bin/sh
2
3class="eli"
4base=$(atf_get ident)
5MAX_SECSIZE=8192
6
7attach_md()
8{
9	local test_md
10
11	[ -c /dev/mdctl ] || atf_skip "no /dev/mdctl to create md devices"
12	test_md=$(mdconfig -a "$@") || atf_fail "failed to allocate md(4)"
13	echo $test_md >> $TEST_MDS_FILE || exit
14	echo $test_md
15}
16
17# Execute `func` for each combination of cipher, sectorsize, and hmac algo
18# `func` usage should be:
19# func <cipher> <aalgo> <secsize>
20for_each_geli_config() {
21	func=$1
22	backing_filename=$2
23
24	# Double the sector size to allow for the HMACs' storage space.
25	osecsize=$(( $MAX_SECSIZE * 2 ))
26	# geli needs 512B for the label.
27	bytes=`expr $osecsize \* $sectors + 512`b
28
29	if [ -n "$backing_filename" ]; then
30		# Use a file-backed md(4) device, so we can deliberatly corrupt
31		# it without detaching the geli device first.
32		truncate -s $bytes backing_file
33		md=$(attach_md -t vnode -f backing_file)
34	else
35		md=$(attach_md -t malloc -s $bytes)
36	fi
37
38	for cipher in aes-xts:128 aes-xts:256 \
39	    aes-cbc:128 aes-cbc:192 aes-cbc:256 \
40	    camellia-cbc:128 camellia-cbc:192 camellia-cbc:256; do
41		ealgo=${cipher%%:*}
42		keylen=${cipher##*:}
43		for aalgo in hmac/sha1 hmac/ripemd160 hmac/sha256 \
44		    hmac/sha384 hmac/sha512; do
45			for secsize in 512 1024 2048 4096 $MAX_SECSIZE; do
46				${func} $cipher $aalgo $secsize
47				geli detach ${md} 2>/dev/null
48			done
49		done
50	done
51}
52
53# Execute `func` for each combination of cipher, and sectorsize, with no hmac
54# `func` usage should be:
55# func <cipher> <secsize>
56for_each_geli_config_nointegrity() {
57	func=$1
58
59	# geli needs 512B for the label.
60	bytes=`expr $MAX_SECSIZE \* $sectors + 512`b
61	md=$(attach_md -t malloc -s $bytes)
62	for cipher in aes-xts:128 aes-xts:256 \
63	    aes-cbc:128 aes-cbc:192 aes-cbc:256 \
64	    camellia-cbc:128 camellia-cbc:192 camellia-cbc:256; do
65		ealgo=${cipher%%:*}
66		keylen=${cipher##*:}
67		for secsize in 512 1024 2048 4096 $MAX_SECSIZE; do
68			${func} $cipher $secsize
69			geli detach ${md} 2>/dev/null
70		done
71	done
72}
73
74geli_test_cleanup()
75{
76	if [ -f "$TEST_MDS_FILE" ]; then
77		while read md; do
78			[ -c /dev/${md}.eli ] && \
79				geli detach $md.eli 2>/dev/null
80			mdconfig -d -u $md 2>/dev/null
81		done < $TEST_MDS_FILE
82	fi
83	true
84}
85
86geli_test_setup()
87{
88	geom_atf_test_setup
89}
90
91ATF_TEST=true
92. `dirname $0`/../geom_subr.sh
93