xref: /freebsd/tests/sys/geom/class/eli/onetime_test.sh (revision 5dce212d6777e3a624b4bf766cdac67810c57105)
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
13*5dce212dSAlan Somers	atf_check dd if=/dev/random of=rnd bs=${secsize} count=${sectors} status=none
14*5dce212dSAlan Somers	atf_check dd if=rnd of=/dev/${md}.eli bs=${secsize} count=${sectors} status=none
1509d98641SEnji Cooper
16*5dce212dSAlan Somers	md_rnd=`dd if=rnd bs=${secsize} count=${sectors} status=none | md5`
17f397a004SAlan Somers	atf_check_equal 0 $?
18*5dce212dSAlan Somers	md_ddev=`dd if=/dev/${md}.eli bs=${secsize} count=${sectors} status=none | md5`
19f397a004SAlan Somers	atf_check_equal 0 $?
20*5dce212dSAlan 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{
39f397a004SAlan Somers	. $(atf_get_srcdir)/conf.sh
40f397a004SAlan Somers	sectors=100
4109d98641SEnji Cooper
42*5dce212dSAlan Somers	dd if=/dev/random of=rnd bs=${MAX_SECSIZE} count=${sectors} status=none
43f397a004SAlan Somers	for_each_geli_config_nointegrity onetime_test
44f397a004SAlan Somers}
45f397a004SAlan Somersonetime_cleanup()
46f397a004SAlan Somers{
47f397a004SAlan Somers	. $(atf_get_srcdir)/conf.sh
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
62*5dce212dSAlan Somers	atf_check dd if=rnd of=/dev/${md}.eli bs=${secsize} count=${sectors} status=none
63f397a004SAlan Somers
64*5dce212dSAlan Somers	md_rnd=`dd if=rnd bs=${secsize} count=${sectors} status=none | md5`
65f397a004SAlan Somers	atf_check_equal 0 $?
66*5dce212dSAlan 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{
82f397a004SAlan Somers	. $(atf_get_srcdir)/conf.sh
83f397a004SAlan Somers	sectors=8
84f397a004SAlan Somers
85f397a004SAlan Somers	atf_check dd if=/dev/random of=rnd bs=1024 count=1024 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