]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tests/sys/geom/class/eli/conf.sh
MFC r341390, r341392, r341667
[FreeBSD/FreeBSD.git] / tests / sys / geom / class / eli / conf.sh
1 #!/bin/sh
2 # $FreeBSD$
3
4 class="eli"
5 base=$(atf_get ident)
6 MAX_SECSIZE=8192
7
8 attach_md()
9 {
10         local test_md
11
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>
20 for_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             3des-cbc:192 \
41             blowfish-cbc:128 blowfish-cbc:160 blowfish-cbc:192 \
42             blowfish-cbc:224 blowfish-cbc:256 blowfish-cbc:288 \
43             blowfish-cbc:320 blowfish-cbc:352 blowfish-cbc:384 \
44             blowfish-cbc:416 blowfish-cbc:448 \
45             camellia-cbc:128 camellia-cbc:192 camellia-cbc:256; do
46                 ealgo=${cipher%%:*}
47                 keylen=${cipher##*:}
48                 for aalgo in hmac/md5 hmac/sha1 hmac/ripemd160 hmac/sha256 \
49                     hmac/sha384 hmac/sha512; do
50                         for secsize in 512 1024 2048 4096 $MAX_SECSIZE; do
51                                 ${func} $cipher $aalgo $secsize
52                                 geli detach ${md} 2>/dev/null
53                         done
54                 done
55         done
56 }
57
58 # Execute `func` for each combination of cipher, and sectorsize, with no hmac
59 # `func` usage should be:
60 # func <cipher> <secsize>
61 for_each_geli_config_nointegrity() {
62         func=$1
63
64         # geli needs 512B for the label.
65         bytes=`expr $MAX_SECSIZE \* $sectors + 512`b
66         md=$(attach_md -t malloc -s $bytes)
67         for cipher in aes-xts:128 aes-xts:256 \
68             aes-cbc:128 aes-cbc:192 aes-cbc:256 \
69             3des-cbc:192 \
70             blowfish-cbc:128 blowfish-cbc:160 blowfish-cbc:192 \
71             blowfish-cbc:224 blowfish-cbc:256 blowfish-cbc:288 \
72             blowfish-cbc:320 blowfish-cbc:352 blowfish-cbc:384 \
73             blowfish-cbc:416 blowfish-cbc:448 \
74             camellia-cbc:128 camellia-cbc:192 camellia-cbc:256; do
75                 ealgo=${cipher%%:*}
76                 keylen=${cipher##*:}
77                 for secsize in 512 1024 2048 4096 $MAX_SECSIZE; do
78                         ${func} $cipher $secsize
79                         geli detach ${md} 2>/dev/null
80                 done
81         done
82 }
83
84 geli_test_cleanup()
85 {
86         if [ -f "$TEST_MDS_FILE" ]; then
87                 while read md; do
88                         [ -c /dev/${md}.eli ] && \
89                                 geli detach $md.eli 2>/dev/null
90                         mdconfig -d -u $md 2>/dev/null
91                 done < $TEST_MDS_FILE
92         fi
93         true
94 }
95
96 geli_test_setup()
97 {
98         geom_atf_test_setup
99 }
100
101 ATF_TEST=true
102 . `dirname $0`/../geom_subr.sh