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