1148459Spjd# $FreeBSD: stable/11/tests/sys/geom/class/eli/onetime_test.sh 345394 2019-03-21 22:23:52Z asomers $
2148459Spjd
3345394Sasomers. $(atf_get_srcdir)/conf.sh
4345394Sasomers
5328811Sasomersonetime_test()
6328811Sasomers{
7328811Sasomers	cipher=$1
8328811Sasomers	secsize=$2
9328811Sasomers	ealgo=${cipher%%:*}
10328811Sasomers	keylen=${cipher##*:}
11293436Sngie
12328811Sasomers	atf_check -s exit:0 -o ignore -e ignore \
13328811Sasomers		geli onetime -e $ealgo -l $keylen -s $secsize ${md}
14148459Spjd
15328811Sasomers	atf_check dd if=rnd of=/dev/${md}.eli bs=${secsize} count=${sectors} status=none
16148459Spjd
17328811Sasomers	md_rnd=`dd if=rnd bs=${secsize} count=${sectors} status=none | md5`
18328811Sasomers	atf_check_equal 0 $?
19328811Sasomers	md_ddev=`dd if=/dev/${md}.eli bs=${secsize} count=${sectors} status=none | md5`
20328811Sasomers	atf_check_equal 0 $?
21328811Sasomers	md_edev=`dd if=/dev/${md} bs=${secsize} count=${sectors} status=none | md5`
22328811Sasomers	atf_check_equal 0 $?
23328811Sasomers
24328811Sasomers	if [ ${md_rnd} != ${md_ddev} ]; then
25328811Sasomers		atf_fail "geli did not return the original data"
26328811Sasomers	fi
27328811Sasomers	if [ ${md_rnd} == ${md_edev} ]; then
28328811Sasomers		atf_fail "geli did not encrypt the data"
29328811Sasomers	fi
30328811Sasomers}
31328811Sasomersatf_test_case onetime cleanup
32328811Sasomersonetime_head()
33328811Sasomers{
34328811Sasomers	atf_set "descr" "geli onetime can create temporary providers"
35328811Sasomers	atf_set "require.user" "root"
36328811Sasomers	atf_set "timeout" 1800
37328811Sasomers}
38328811Sasomersonetime_body()
39328811Sasomers{
40345394Sasomers	geli_test_setup
41345394Sasomers
42328811Sasomers	sectors=100
43328811Sasomers
44328811Sasomers	dd if=/dev/random of=rnd bs=${MAX_SECSIZE} count=${sectors} status=none
45328811Sasomers	for_each_geli_config_nointegrity onetime_test
46328811Sasomers}
47328811Sasomersonetime_cleanup()
48328811Sasomers{
49328811Sasomers	geli_test_cleanup
50328811Sasomers}
51328811Sasomers
52328811Sasomersonetime_a_test()
53328811Sasomers{
54312829Sasomers	cipher=$1
55328811Sasomers	aalgo=$2
56328811Sasomers	secsize=$3
57159327Spjd	ealgo=${cipher%%:*}
58148459Spjd	keylen=${cipher##*:}
59148459Spjd
60328811Sasomers	atf_check -s exit:0 -o ignore -e ignore \
61328811Sasomers		geli onetime -a $aalgo -e $ealgo -l $keylen -s $secsize ${md}
62148459Spjd
63328811Sasomers	atf_check dd if=rnd of=/dev/${md}.eli bs=${secsize} count=${sectors} status=none
64148459Spjd
65328811Sasomers	md_rnd=`dd if=rnd bs=${secsize} count=${sectors} status=none | md5`
66328811Sasomers	atf_check_equal 0 $?
67328811Sasomers	md_ddev=`dd if=/dev/${md}.eli bs=${secsize} count=${sectors} status=none | md5`
68328811Sasomers	atf_check_equal 0 $?
69148459Spjd
70328811Sasomers	if [ ${md_rnd} != ${md_ddev} ]; then
71328811Sasomers		atf_fail "Miscompare for aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}"
72328811Sasomers	fi
73328811Sasomers}
74328811Sasomersatf_test_case onetime_a cleanup
75328811Sasomersonetime_a_head()
76328811Sasomers{
77328811Sasomers	atf_set "descr" "geli onetime with HMACs"
78328811Sasomers	atf_set "require.user" "root"
79328811Sasomers	atf_set "timeout" 1800
80328811Sasomers}
81328811Sasomersonetime_a_body()
82328811Sasomers{
83345394Sasomers	geli_test_setup
84345394Sasomers
85328811Sasomers	sectors=8
86148459Spjd
87328811Sasomers	atf_check dd if=/dev/random of=rnd bs=$MAX_SECSIZE count=$sectors \
88328811Sasomers		status=none
89328811Sasomers	for_each_geli_config onetime_a_test
90328811Sasomers}
91328811Sasomersonetime_a_cleanup()
92328811Sasomers{
93328811Sasomers	geli_test_cleanup
94328811Sasomers}
95148459Spjd
96328811Sasomersatf_test_case onetime_d cleanup
97328811Sasomersonetime_d_head()
98328811Sasomers{
99328811Sasomers	atf_set "descr" "geli onetime -d will create providers that detach on last close"
100328811Sasomers	atf_set "require.user" "root"
101328811Sasomers}
102328811Sasomersonetime_d_body()
103328811Sasomers{
104345394Sasomers	geli_test_setup
105328811Sasomers
106328811Sasomers	sectors=100
107328811Sasomers	md=$(attach_md -t malloc -s $sectors)
108328811Sasomers
109328811Sasomers	atf_check geli onetime -d ${md}
110328811Sasomers	if [ ! -c /dev/${md}.eli ]; then
111328811Sasomers		atf_fail "Provider not created, or immediately detached"
112312829Sasomers	fi
113328811Sasomers
114328811Sasomers	# Be sure it doesn't detach on read.
115328811Sasomers	atf_check dd if=/dev/${md}.eli of=/dev/null status=none
116328811Sasomers	sleep 1
117328811Sasomers	if [ ! -c /dev/${md}.eli ]; then
118328811Sasomers		atf_fail "Provider detached when a reader closed"
119312829Sasomers	fi
120312829Sasomers
121328811Sasomers	# It should detach when a writer closes
122328811Sasomers	true > /dev/${md}.eli
123328811Sasomers	sleep 1
124328811Sasomers	if [ -c /dev/${md}.eli ]; then
125328811Sasomers		atf_fail "Provider didn't detach on last close of a writer"
126328811Sasomers	fi
127312829Sasomers}
128328811Sasomersonetime_d_cleanup()
129328811Sasomers{
130328811Sasomers	geli_test_cleanup
131328811Sasomers}
132312829Sasomers
133328811Sasomersatf_init_test_cases()
134328811Sasomers{
135328811Sasomers	atf_add_test_case onetime
136328811Sasomers	atf_add_test_case onetime_a
137328811Sasomers	atf_add_test_case onetime_d
138328811Sasomers}
139