Add defaults to --help output.
[platform/upstream/cryptsetup.git] / tests / loopaes-test
1 #!/bin/bash
2
3 CRYPTSETUP=../src/cryptsetup
4
5 # try to validate using loop-AES losetup/kernel if available
6 LOSETUP_AES=/losetup-aes
7
8 LOOP_DD_PARAM="bs=1k count=10000"
9 EXPSUM="31e00e0e4c233c89051cd748122fde2c98db0121ca09ba93a3820817ea037bc5"
10 DEV_NAME=dummy
11 IMG=loopaes.img
12 KEYv1=key_v1
13 KEYv2=key_v2
14 KEYv3=key_v3
15 LOOPDEV=$(losetup -f 2>/dev/null)
16
17 function dmremove() { # device
18         udevadm settle >/dev/null 2>&1
19         dmsetup remove $1 >/dev/null 2>&1
20 }
21
22 function remove_mapping()
23 {
24         [ -b /dev/mapper/$DEV_NAME2 ] && dmremove $DEV_NAME2
25         [ -b /dev/mapper/$DEV_NAME ] && dmremove $DEV_NAME
26         losetup -d $LOOPDEV >/dev/null 2>&1
27         rm -f $IMG $KEYv1 $KEYv2 $KEYv3 >/dev/null 2>&1
28 }
29
30 function fail()
31 {
32         remove_mapping
33         echo "FAILED"
34         exit 2
35 }
36
37 function skip()
38 {
39         [ -n "$1" ] && echo "$1"
40         exit 0
41 }
42
43 function prepare()
44 {
45         remove_mapping
46         dd if=/dev/zero of=$IMG $LOOP_DD_PARAM >/dev/null 2>&1
47         sync
48         losetup $LOOPDEV $IMG
49
50         # Prepare raw key: v1 - one key, v2 - 64 keys, v3 - 64 + one IV
51         if [ ! -e $KEYv3 ]; then
52                 head -c 3705 /dev/urandom | uuencode -m - | head -n 66 | tail -n 65 >$KEYv3
53                 head -n 1 $KEYv3 > $KEYv1
54                 head -n 64 $KEYv3 > $KEYv2
55         fi
56         [ -n "$1" ] && echo -n "$1 "
57 }
58
59 function check_exists()
60 {
61         [ -b /dev/mapper/$DEV_NAME ] || fail
62 }
63
64 function check_sum() # $key $keysize
65 {
66         # Fill device with zeroes and reopen it
67         dd if=/dev/zero of=/dev/mapper/$DEV_NAME bs=1k $LOOP_DD_PARAM >/dev/null 2>&1
68         sync
69         dmremove $DEV_NAME
70
71         $CRYPTSETUP loopaesOpen $LOOPDEV $DEV_NAME -s $2 --key-file $1 >/dev/null 2>&1
72         ret=$?
73         VSUM=$(sha256sum /dev/mapper/$DEV_NAME | cut -d' ' -f 1)
74         if [ $ret -eq 0 -a "$VSUM" = "$EXPSUM" ] ; then
75                 echo -n "[OK]"
76         else
77                 echo "[FAIL]"
78                 echo " Expecting $EXPSUM got $VSUM."
79                 fail
80         fi
81 }
82
83 function check_sum_losetup() # $key $alg
84 {
85         [ ! -x $LOSETUP_AES ] && echo && return
86
87         echo -n " Verification using loop-AES: "
88
89         losetup -d $LOOPDEV >/dev/null 2>&1
90         cat $1 | $LOSETUP_AES -p 0 -e $2 $LOOPDEV $IMG
91         ret=$?
92         VSUM=$(sha256sum $LOOPDEV | cut -d' ' -f 1)
93         if [ $ret -eq 0 -a "$VSUM" = "$EXPSUM" ] ; then
94                 echo "[OK]"
95         else
96                 echo "[FAIL]"
97                 echo " Expecting $EXPSUM got $VSUM (loop-AES)."
98                 fail
99         fi
100         losetup -d $LOOPDEV >/dev/null 2>&1
101 }
102
103 function check_version()
104 {
105         VER_STR=$(dmsetup version | grep Driver)
106         VER_MIN=$(echo $VER_STR | cut -f 2 -d.)
107         VER_PATCH=$(echo $VER_STR | cut -f 3 -d.)
108
109         test $VER_MIN -lt 19 && return 1
110         test $VER_MIN -eq 19 -a $VER_PATCH -ge 6 && return 1 # RHEL
111         return 0
112 }
113
114 [ $(id -u) != 0 ] && skip "WARNING: You must be root to run this test, test skipped."
115 [ -z "$LOOPDEV" ] && skip "Cannot find free loop device, test skipped."
116 which uuencode >/dev/null || skip "WARNING: test require uuencode binary, test skipped."
117 check_version || skip "Probably old kernel, test skipped."
118
119 # loop-AES tests
120 KEY_SIZES="128 256"
121 KEY_FILES="$KEYv1 $KEYv2 $KEYv3"
122
123 for key_size in $KEY_SIZES ; do
124         for key in $KEY_FILES ; do
125                 prepare "Open loop-AES $key / AES-$key_size"
126                 $CRYPTSETUP loopaesOpen $LOOPDEV $DEV_NAME -s $key_size --key-file $key || fail
127                 check_exists
128                 check_sum $key $key_size
129                 $CRYPTSETUP loopaesClose $DEV_NAME || fail
130                 check_sum_losetup $key AES$key_size
131         done
132 done
133
134 remove_mapping
135 exit 0