xref: /freebsd/tests/sys/geom/class/eli/onetime_test.sh (revision 96950419f15510287080c557174e0d8409f06956)
109d98641SEnji Cooper
2cf551b8aSAlan Somers. $(atf_get_srcdir)/conf.sh
3cf551b8aSAlan Somers
4f397a004SAlan Somersonetime_test()
5f397a004SAlan Somers{
6f92ce022SAlan Somers	cipher=$1
7f92ce022SAlan Somers	secsize=$2
809d98641SEnji Cooper	ealgo=${cipher%%:*}
909d98641SEnji Cooper	keylen=${cipher##*:}
10f92ce022SAlan Somers
11f397a004SAlan Somers	atf_check -s exit:0 -o ignore -e ignore \
12f397a004SAlan Somers		geli onetime -e $ealgo -l $keylen -s $secsize ${md}
1309d98641SEnji Cooper
145dce212dSAlan Somers	atf_check dd if=rnd of=/dev/${md}.eli bs=${secsize} count=${sectors} status=none
1509d98641SEnji Cooper
165dce212dSAlan Somers	md_rnd=`dd if=rnd bs=${secsize} count=${sectors} status=none | md5`
17f397a004SAlan Somers	atf_check_equal 0 $?
185dce212dSAlan Somers	md_ddev=`dd if=/dev/${md}.eli bs=${secsize} count=${sectors} status=none | md5`
19f397a004SAlan Somers	atf_check_equal 0 $?
205dce212dSAlan Somers	md_edev=`dd if=/dev/${md} bs=${secsize} count=${sectors} status=none | md5`
21f397a004SAlan Somers	atf_check_equal 0 $?
2209d98641SEnji Cooper
23f397a004SAlan Somers	if [ ${md_rnd} != ${md_ddev} ]; then
24f397a004SAlan Somers		atf_fail "geli did not return the original data"
2509d98641SEnji Cooper	fi
26f397a004SAlan Somers	if [ ${md_rnd} == ${md_edev} ]; then
27f397a004SAlan Somers		atf_fail "geli did not encrypt the data"
2809d98641SEnji Cooper	fi
29f397a004SAlan Somers}
30f397a004SAlan Somersatf_test_case onetime cleanup
31f397a004SAlan Somersonetime_head()
32f397a004SAlan Somers{
33f397a004SAlan Somers	atf_set "descr" "geli onetime can create temporary providers"
34f397a004SAlan Somers	atf_set "require.user" "root"
35f397a004SAlan Somers	atf_set "timeout" 1800
36f397a004SAlan Somers}
37f397a004SAlan Somersonetime_body()
38f397a004SAlan Somers{
39cf551b8aSAlan Somers	geli_test_setup
40cf551b8aSAlan Somers
41f397a004SAlan Somers	sectors=100
4209d98641SEnji Cooper
435dce212dSAlan Somers	dd if=/dev/random of=rnd bs=${MAX_SECSIZE} count=${sectors} status=none
44f397a004SAlan Somers	for_each_geli_config_nointegrity onetime_test
45f397a004SAlan Somers}
46f397a004SAlan Somersonetime_cleanup()
47f397a004SAlan Somers{
48f397a004SAlan Somers	geli_test_cleanup
49f92ce022SAlan Somers}
50f92ce022SAlan Somers
51f397a004SAlan Somersonetime_a_test()
52f397a004SAlan Somers{
53f397a004SAlan Somers	cipher=$1
54f397a004SAlan Somers	aalgo=$2
55f397a004SAlan Somers	secsize=$3
56f397a004SAlan Somers	ealgo=${cipher%%:*}
57f397a004SAlan Somers	keylen=${cipher##*:}
58f397a004SAlan Somers
59f397a004SAlan Somers	atf_check -s exit:0 -o ignore -e ignore \
60f397a004SAlan Somers		geli onetime -a $aalgo -e $ealgo -l $keylen -s $secsize ${md}
61f397a004SAlan Somers
625dce212dSAlan Somers	atf_check dd if=rnd of=/dev/${md}.eli bs=${secsize} count=${sectors} status=none
63f397a004SAlan Somers
645dce212dSAlan Somers	md_rnd=`dd if=rnd bs=${secsize} count=${sectors} status=none | md5`
65f397a004SAlan Somers	atf_check_equal 0 $?
665dce212dSAlan Somers	md_ddev=`dd if=/dev/${md}.eli bs=${secsize} count=${sectors} status=none | md5`
67f397a004SAlan Somers	atf_check_equal 0 $?
68f397a004SAlan Somers
69f397a004SAlan Somers	if [ ${md_rnd} != ${md_ddev} ]; then
70f397a004SAlan Somers		atf_fail "Miscompare for aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}"
71f397a004SAlan Somers	fi
72f397a004SAlan Somers}
73f397a004SAlan Somersatf_test_case onetime_a cleanup
74f397a004SAlan Somersonetime_a_head()
75f397a004SAlan Somers{
76f397a004SAlan Somers	atf_set "descr" "geli onetime with HMACs"
77f397a004SAlan Somers	atf_set "require.user" "root"
78f397a004SAlan Somers	atf_set "timeout" 1800
79f397a004SAlan Somers}
80f397a004SAlan Somersonetime_a_body()
81f397a004SAlan Somers{
82cf551b8aSAlan Somers	geli_test_setup
83cf551b8aSAlan Somers
84f397a004SAlan Somers	sectors=8
85f397a004SAlan Somers
861d23aa6eSAlan Somers	atf_check dd if=/dev/random of=rnd bs=$MAX_SECSIZE count=$sectors \
871d23aa6eSAlan Somers		status=none
88f397a004SAlan Somers	for_each_geli_config onetime_a_test
89f397a004SAlan Somers}
90f397a004SAlan Somersonetime_a_cleanup()
91f397a004SAlan Somers{
92f397a004SAlan Somers	geli_test_cleanup
93f397a004SAlan Somers}
94f397a004SAlan Somers
95f397a004SAlan Somersatf_test_case onetime_d cleanup
96f397a004SAlan Somersonetime_d_head()
97f397a004SAlan Somers{
98f397a004SAlan Somers	atf_set "descr" "geli onetime -d will create providers that detach on last close"
99f397a004SAlan Somers	atf_set "require.user" "root"
100f397a004SAlan Somers}
101f397a004SAlan Somersonetime_d_body()
102f397a004SAlan Somers{
103cf551b8aSAlan Somers	geli_test_setup
104f397a004SAlan Somers
105f397a004SAlan Somers	sectors=100
106*96950419SGleb Smirnoff	attach_md md -t malloc -s $sectors
107f397a004SAlan Somers
108f397a004SAlan Somers	atf_check geli onetime -d ${md}
109f397a004SAlan Somers	if [ ! -c /dev/${md}.eli ]; then
110f397a004SAlan Somers		atf_fail "Provider not created, or immediately detached"
111f397a004SAlan Somers	fi
112f397a004SAlan Somers
113f397a004SAlan Somers	# Be sure it doesn't detach on read.
114f397a004SAlan Somers	atf_check dd if=/dev/${md}.eli of=/dev/null status=none
115f397a004SAlan Somers	sleep 1
116f397a004SAlan Somers	if [ ! -c /dev/${md}.eli ]; then
117f397a004SAlan Somers		atf_fail "Provider detached when a reader closed"
118f397a004SAlan Somers	fi
119f397a004SAlan Somers
120f397a004SAlan Somers	# It should detach when a writer closes
121f397a004SAlan Somers	true > /dev/${md}.eli
122f397a004SAlan Somers	sleep 1
123f397a004SAlan Somers	if [ -c /dev/${md}.eli ]; then
124f397a004SAlan Somers		atf_fail "Provider didn't detach on last close of a writer"
125f397a004SAlan Somers	fi
126f397a004SAlan Somers}
127f397a004SAlan Somersonetime_d_cleanup()
128f397a004SAlan Somers{
129f397a004SAlan Somers	geli_test_cleanup
130f397a004SAlan Somers}
131f397a004SAlan Somers
1325f2d3b42SLi-Wen Hsuatf_test_case onetime_null cleanup
133aafaa8b7SAlan Somersonetime_null_head()
134aafaa8b7SAlan Somers{
135aafaa8b7SAlan Somers	atf_set "descr" "geli onetime can use the null cipher"
136aafaa8b7SAlan Somers	atf_set "require.user" "root"
137aafaa8b7SAlan Somers}
138aafaa8b7SAlan Somersonetime_null_body()
139aafaa8b7SAlan Somers{
140aafaa8b7SAlan Somers	geli_test_setup
141aafaa8b7SAlan Somers
142aafaa8b7SAlan Somers	sectors=100
143aafaa8b7SAlan Somers
144aafaa8b7SAlan Somers	dd if=/dev/random of=rnd bs=${MAX_SECSIZE} count=${sectors} status=none
145aafaa8b7SAlan Somers
146aafaa8b7SAlan Somers	secsize=512
147aafaa8b7SAlan Somers	ealgo=${cipher%%:*}
148aafaa8b7SAlan Somers	keylen=${cipher##*:}
149aafaa8b7SAlan Somers
150*96950419SGleb Smirnoff	attach_md md -t malloc -s 100k
151aafaa8b7SAlan Somers
152aafaa8b7SAlan Somers	atf_check -s exit:0 -o ignore -e ignore \
153aafaa8b7SAlan Somers		geli onetime -e null -s ${secsize} ${md}
154aafaa8b7SAlan Somers
155aafaa8b7SAlan Somers	atf_check dd if=rnd of=/dev/${md}.eli bs=${secsize} count=${sectors} status=none
156aafaa8b7SAlan Somers
157aafaa8b7SAlan Somers	md_rnd=`dd if=rnd bs=${secsize} count=${sectors} status=none | md5`
158aafaa8b7SAlan Somers	atf_check_equal 0 $?
159aafaa8b7SAlan Somers	md_ddev=`dd if=/dev/${md}.eli bs=${secsize} count=${sectors} status=none | md5`
160aafaa8b7SAlan Somers	atf_check_equal 0 $?
161aafaa8b7SAlan Somers	md_edev=`dd if=/dev/${md} bs=${secsize} count=${sectors} status=none | md5`
162aafaa8b7SAlan Somers	atf_check_equal 0 $?
163aafaa8b7SAlan Somers
164aafaa8b7SAlan Somers	if [ ${md_rnd} != ${md_ddev} ]; then
165aafaa8b7SAlan Somers		atf_fail "geli did not return the original data"
166aafaa8b7SAlan Somers	fi
167aafaa8b7SAlan Somers	if [ ${md_rnd} != ${md_edev} ]; then
168aafaa8b7SAlan Somers		atf_fail "geli encrypted the data even with the null cipher"
169aafaa8b7SAlan Somers	fi
170aafaa8b7SAlan Somers}
171aafaa8b7SAlan Somersonetime_null_cleanup()
172aafaa8b7SAlan Somers{
173aafaa8b7SAlan Somers	geli_test_cleanup
174aafaa8b7SAlan Somers}
175aafaa8b7SAlan Somers
176f397a004SAlan Somersatf_init_test_cases()
177f397a004SAlan Somers{
178f397a004SAlan Somers	atf_add_test_case onetime
179f397a004SAlan Somers	atf_add_test_case onetime_a
180f397a004SAlan Somers	atf_add_test_case onetime_d
181aafaa8b7SAlan Somers	atf_add_test_case onetime_null
182f397a004SAlan Somers}
183