Makefile: Add security compiling option (RELRO, SC, and FORTIFY)
[platform/upstream/cryptsetup.git] / tests / luks1-compat-test
1 #!/bin/bash
2
3 [ -z "$CRYPTSETUP_PATH" ] && CRYPTSETUP_PATH=".."
4 CRYPTSETUP=$CRYPTSETUP_PATH/cryptsetup
5 TST_DIR=luks1-images
6 MAP=luks1tst
7 KEYFILE=keyfile1
8
9 CRYPTSETUP_VALGRIND=../.libs/cryptsetup
10 CRYPTSETUP_LIB_VALGRIND=../.libs
11
12 [ -z "$srcdir" ] && srcdir="."
13
14 function remove_mapping()
15 {
16         [ -b /dev/mapper/$MAP ] && dmsetup remove --retry $MAP
17         rm -rf $TST_DIR
18 }
19
20 function fail()
21 {
22         [ -n "$1" ] && echo "$1"
23         echo " [FAILED]"
24         echo "FAILED backtrace:"
25         while caller $frame; do ((frame++)); done
26         remove_mapping
27         exit 2
28 }
29
30 function skip()
31 {
32         [ -n "$1" ] && echo "$1"
33         remove_mapping
34         exit 77
35 }
36
37 function valgrind_setup()
38 {
39         command -v valgrind >/dev/null || fail "Cannot find valgrind."
40         [ ! -f $CRYPTSETUP_VALGRIND ] && fail "Unable to get location of cryptsetup executable."
41         export LD_LIBRARY_PATH="$CRYPTSETUP_LIB_VALGRIND:$LD_LIBRARY_PATH"
42 }
43
44 function valgrind_run()
45 {
46         INFOSTRING="$(basename ${BASH_SOURCE[1]})-line-${BASH_LINENO[0]}" ./valg.sh ${CRYPTSETUP_VALGRIND} "$@"
47 }
48
49 function remove_imgs()
50 {
51         echo "WARNING: $1 not available, not testing some images."
52         rm $(ls $TST_DIR/*$1*.img)
53 }
54
55 function test_one()
56 {
57         $CRYPTSETUP benchmark -c "$1" -s "$2" | grep -v "#" || remove_imgs $1
58 }
59
60 function test_required()
61 {
62         echo "REQUIRED KDF TEST"
63         $CRYPTSETUP benchmark -h whirlpool | grep "N/A" && remove_imgs whirlpool
64
65         echo "REQUIRED CIPHERS TEST"
66         echo "#     Algorithm | Key |  Encryption |  Decryption"
67
68         test_one aes-xts 256
69         test_one twofish-xts 256
70         test_one serpent-xts 256
71         test_one aes-cbc 256
72         test_one aes-lrw 256
73 }
74
75 export LANG=C
76 [ ! -x "$CRYPTSETUP" ] && skip "Cannot find $CRYPTSETUP, test skipped."
77 command -v blkid >/dev/null || skip "blkid tool required, test skipped."
78 [ -n "$VALG" ] && valgrind_setup && CRYPTSETUP=valgrind_run
79 [ ! -d $TST_DIR ] && tar xJf $srcdir/luks1-images.tar.xz --no-same-owner
80 test_required
81
82 echo "PASSPHRASE CHECK"
83 for file in $(ls $TST_DIR/luks1_*) ; do
84         echo -n " $file"
85         $CRYPTSETUP luksOpen -d $TST_DIR/$KEYFILE $file --test-passphrase 2>/dev/null
86         ret=$?
87         # ignore missing whirlpool (pwd failed is exit code 2)
88         [ $ret -eq 1 ] && (echo $file | grep -q -e "whirlpool") && echo " [N/A]" && continue
89         # ignore flawed whirlpool (pwd failed is exit code 2)
90         [ $ret -eq 2 ] && (echo $file | grep -q -e "whirlpool") && \
91                 ($CRYPTSETUP luksDump $file --debug | grep -q -e "flawed whirlpool") && \
92                 echo " [IGNORED (flawed Whirlpool library)]" && continue
93         [ $ret -ne 0 ] && fail
94         echo " [OK]"
95 done
96
97 if [ $(id -u) != 0 ]; then
98         echo "WARNING: You must be root to run activation part of test, test skipped."
99         remove_mapping
100         exit 0
101 fi
102
103 echo "ACTIVATION FS UUID CHECK"
104 for file in $(ls $TST_DIR/luks1_*) ; do
105         echo -n " $file"
106         $CRYPTSETUP luksOpen -d $TST_DIR/$KEYFILE $file $MAP 2>/dev/null
107         ret=$?
108         # ignore missing whirlpool (pwd failed is exit code 2)
109         [ $ret -eq 1 ] && (echo $file | grep -q -e "whirlpool") && echo " [N/A]" && continue
110         # ignore flawed whirlpool (pwd failed is exit code 2)
111         [ $ret -eq 2 ] && (echo $file | grep -q -e "whirlpool") && \
112                 ($CRYPTSETUP luksDump $file --debug | grep -q -e "flawed whirlpool") && \
113                 echo " [IGNORED (flawed Whirlpool library)]" && continue
114         [ $ret -ne 0 ] && fail
115         $CRYPTSETUP status $MAP >/dev/null || fail
116         $CRYPTSETUP status /dev/mapper/$MAP >/dev/null || fail
117         UUID=$(blkid -p -o value -s UUID /dev/mapper/$MAP)
118         $CRYPTSETUP remove $MAP || fail
119         [ "$UUID" != "DEAD-BABE" ] && fail "UUID check failed."
120         echo " [OK]"
121 done
122
123 remove_mapping
124 exit 0