xref: /freebsd/tests/sys/geom/class/eli/onetime_test.sh (revision 1d23aa6ec73baf53cb6f336c4ce91d6cb1c1fb0f)
109d98641SEnji Cooper# $FreeBSD$
209d98641SEnji Cooper
3f397a004SAlan Somersonetime_test()
4f397a004SAlan Somers{
5f92ce022SAlan Somers	cipher=$1
6f92ce022SAlan Somers	secsize=$2
709d98641SEnji Cooper	ealgo=${cipher%%:*}
809d98641SEnji Cooper	keylen=${cipher##*:}
9f92ce022SAlan Somers
10f397a004SAlan Somers	atf_check -s exit:0 -o ignore -e ignore \
11f397a004SAlan Somers		geli onetime -e $ealgo -l $keylen -s $secsize ${md}
1209d98641SEnji Cooper
135dce212dSAlan Somers	atf_check dd if=rnd of=/dev/${md}.eli bs=${secsize} count=${sectors} status=none
1409d98641SEnji Cooper
155dce212dSAlan Somers	md_rnd=`dd if=rnd bs=${secsize} count=${sectors} status=none | md5`
16f397a004SAlan Somers	atf_check_equal 0 $?
175dce212dSAlan Somers	md_ddev=`dd if=/dev/${md}.eli bs=${secsize} count=${sectors} status=none | md5`
18f397a004SAlan Somers	atf_check_equal 0 $?
195dce212dSAlan Somers	md_edev=`dd if=/dev/${md} bs=${secsize} count=${sectors} status=none | md5`
20f397a004SAlan Somers	atf_check_equal 0 $?
2109d98641SEnji Cooper
22f397a004SAlan Somers	if [ ${md_rnd} != ${md_ddev} ]; then
23f397a004SAlan Somers		atf_fail "geli did not return the original data"
2409d98641SEnji Cooper	fi
25f397a004SAlan Somers	if [ ${md_rnd} == ${md_edev} ]; then
26f397a004SAlan Somers		atf_fail "geli did not encrypt the data"
2709d98641SEnji Cooper	fi
28f397a004SAlan Somers}
29f397a004SAlan Somersatf_test_case onetime cleanup
30f397a004SAlan Somersonetime_head()
31f397a004SAlan Somers{
32f397a004SAlan Somers	atf_set "descr" "geli onetime can create temporary providers"
33f397a004SAlan Somers	atf_set "require.user" "root"
34f397a004SAlan Somers	atf_set "timeout" 1800
35f397a004SAlan Somers}
36f397a004SAlan Somersonetime_body()
37f397a004SAlan Somers{
38f397a004SAlan Somers	. $(atf_get_srcdir)/conf.sh
39f397a004SAlan Somers	sectors=100
4009d98641SEnji Cooper
415dce212dSAlan Somers	dd if=/dev/random of=rnd bs=${MAX_SECSIZE} count=${sectors} status=none
42f397a004SAlan Somers	for_each_geli_config_nointegrity onetime_test
43f397a004SAlan Somers}
44f397a004SAlan Somersonetime_cleanup()
45f397a004SAlan Somers{
46f397a004SAlan Somers	. $(atf_get_srcdir)/conf.sh
47f397a004SAlan Somers	geli_test_cleanup
48f92ce022SAlan Somers}
49f92ce022SAlan Somers
50f397a004SAlan Somersonetime_a_test()
51f397a004SAlan Somers{
52f397a004SAlan Somers	cipher=$1
53f397a004SAlan Somers	aalgo=$2
54f397a004SAlan Somers	secsize=$3
55f397a004SAlan Somers	ealgo=${cipher%%:*}
56f397a004SAlan Somers	keylen=${cipher##*:}
57f397a004SAlan Somers
58f397a004SAlan Somers	atf_check -s exit:0 -o ignore -e ignore \
59f397a004SAlan Somers		geli onetime -a $aalgo -e $ealgo -l $keylen -s $secsize ${md}
60f397a004SAlan Somers
615dce212dSAlan Somers	atf_check dd if=rnd of=/dev/${md}.eli bs=${secsize} count=${sectors} status=none
62f397a004SAlan Somers
635dce212dSAlan Somers	md_rnd=`dd if=rnd bs=${secsize} count=${sectors} status=none | md5`
64f397a004SAlan Somers	atf_check_equal 0 $?
655dce212dSAlan Somers	md_ddev=`dd if=/dev/${md}.eli bs=${secsize} count=${sectors} status=none | md5`
66f397a004SAlan Somers	atf_check_equal 0 $?
67f397a004SAlan Somers
68f397a004SAlan Somers	if [ ${md_rnd} != ${md_ddev} ]; then
69f397a004SAlan Somers		atf_fail "Miscompare for aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}"
70f397a004SAlan Somers	fi
71f397a004SAlan Somers}
72f397a004SAlan Somersatf_test_case onetime_a cleanup
73f397a004SAlan Somersonetime_a_head()
74f397a004SAlan Somers{
75f397a004SAlan Somers	atf_set "descr" "geli onetime with HMACs"
76f397a004SAlan Somers	atf_set "require.user" "root"
77f397a004SAlan Somers	atf_set "timeout" 1800
78f397a004SAlan Somers}
79f397a004SAlan Somersonetime_a_body()
80f397a004SAlan Somers{
81f397a004SAlan Somers	. $(atf_get_srcdir)/conf.sh
82f397a004SAlan Somers	sectors=8
83f397a004SAlan Somers
84*1d23aa6eSAlan Somers	atf_check dd if=/dev/random of=rnd bs=$MAX_SECSIZE count=$sectors \
85*1d23aa6eSAlan Somers		status=none
86f397a004SAlan Somers	for_each_geli_config onetime_a_test
87f397a004SAlan Somers}
88f397a004SAlan Somersonetime_a_cleanup()
89f397a004SAlan Somers{
90f397a004SAlan Somers	. $(atf_get_srcdir)/conf.sh
91f397a004SAlan Somers	geli_test_cleanup
92f397a004SAlan Somers}
93f397a004SAlan Somers
94f397a004SAlan Somersatf_test_case onetime_d cleanup
95f397a004SAlan Somersonetime_d_head()
96f397a004SAlan Somers{
97f397a004SAlan Somers	atf_set "descr" "geli onetime -d will create providers that detach on last close"
98f397a004SAlan Somers	atf_set "require.user" "root"
99f397a004SAlan Somers}
100f397a004SAlan Somersonetime_d_body()
101f397a004SAlan Somers{
102f397a004SAlan Somers	. $(atf_get_srcdir)/conf.sh
103f397a004SAlan Somers
104f397a004SAlan Somers	sectors=100
105f397a004SAlan Somers	md=$(attach_md -t malloc -s $sectors)
106f397a004SAlan Somers
107f397a004SAlan Somers	atf_check geli onetime -d ${md}
108f397a004SAlan Somers	if [ ! -c /dev/${md}.eli ]; then
109f397a004SAlan Somers		atf_fail "Provider not created, or immediately detached"
110f397a004SAlan Somers	fi
111f397a004SAlan Somers
112f397a004SAlan Somers	# Be sure it doesn't detach on read.
113f397a004SAlan Somers	atf_check dd if=/dev/${md}.eli of=/dev/null status=none
114f397a004SAlan Somers	sleep 1
115f397a004SAlan Somers	if [ ! -c /dev/${md}.eli ]; then
116f397a004SAlan Somers		atf_fail "Provider detached when a reader closed"
117f397a004SAlan Somers	fi
118f397a004SAlan Somers
119f397a004SAlan Somers	# It should detach when a writer closes
120f397a004SAlan Somers	true > /dev/${md}.eli
121f397a004SAlan Somers	sleep 1
122f397a004SAlan Somers	if [ -c /dev/${md}.eli ]; then
123f397a004SAlan Somers		atf_fail "Provider didn't detach on last close of a writer"
124f397a004SAlan Somers	fi
125f397a004SAlan Somers}
126f397a004SAlan Somersonetime_d_cleanup()
127f397a004SAlan Somers{
128f397a004SAlan Somers	. $(atf_get_srcdir)/conf.sh
129f397a004SAlan Somers	geli_test_cleanup
130f397a004SAlan Somers}
131f397a004SAlan Somers
132f397a004SAlan Somersatf_init_test_cases()
133f397a004SAlan Somers{
134f397a004SAlan Somers	atf_add_test_case onetime
135f397a004SAlan Somers	atf_add_test_case onetime_a
136f397a004SAlan Somers	atf_add_test_case onetime_d
137f397a004SAlan Somers}
138