Include 'sys/sysmacros.h' for GCC-9
[platform/upstream/cryptsetup.git] / tests / tcrypt-compat-test
1 #!/bin/bash
2
3 # check tcrypt images parsing
4
5 CRYPTSETUP=../src/cryptsetup
6 TST_DIR=tcrypt-images
7 MAP=tctst
8 PASSWORD="aaaaaaaaaaaa"
9 PASSWORD_HIDDEN="bbbbbbbbbbbb"
10
11 function remove_mapping()
12 {
13         [ -b /dev/mapper/$MAP ] && dmsetup remove $MAP
14         [ -b /dev/mapper/"$MAP"_1 ] && dmsetup remove "$MAP"_1
15         [ -b /dev/mapper/"$MAP"_2 ] && dmsetup remove "$MAP"_2
16 }
17
18 function fail()
19 {
20         [ -n "$1" ] && echo "$1"
21         echo " [FAILED]"
22         remove_mapping
23         exit 2
24 }
25
26 function skip()
27 {
28         [ -n "$1" ] && echo "$1"
29         echo "Test skipped."
30         exit 0
31 }
32
33 function test_one()
34 {
35         $CRYPTSETUP benchmark -c "$1" -s "$2" | grep -v "#" || skip
36 }
37
38 function test_required()
39 {
40         which lsblk >/dev/null 2>&1 || skip "WARNING: lsblk tool required."
41
42         echo "REQUIRED KDF TEST"
43         $CRYPTSETUP benchmark -h ripemd160 | grep "N/A" && skip
44         $CRYPTSETUP benchmark -h whirlpool | grep "N/A" && skip
45
46         echo "REQUIRED CIPHERS TEST"
47         echo "#  Algorithm | Key |  Encryption |  Decryption"
48
49         test_one aes-cbc 256
50         test_one aes-lrw 384
51         test_one aes-xts 512
52
53         test_one twofish-cbc 256
54         test_one twofish-lrw 384
55         test_one twofish-xts 512
56
57         test_one serpent-cbc 256
58         test_one serpent-lrw 384
59         test_one serpent-xts 512
60
61         test_one blowfish-cbc 256
62
63         test_one des3_ede-cbc 192
64         test_one cast5 128
65 }
66
67 test_required
68 export LANG=C
69
70 [ ! -d $TST_DIR ] && tar xjf tcrypt-images.tar.bz2
71
72 echo "HEADER CHECK"
73 for file in $(ls $TST_DIR/[tv]c_*) ; do
74         echo -n " $file"
75         echo $PASSWORD | $CRYPTSETUP tcryptDump --veracrypt $file >/dev/null || fail
76         echo " [OK]"
77 done
78
79 echo "HEADER CHECK (HIDDEN)"
80 for file in $(ls $TST_DIR/[tv]c_*-hidden) ; do
81         echo -n " $file (hidden)"
82         echo $PASSWORD_HIDDEN | $CRYPTSETUP tcryptDump --tcrypt-hidden --veracrypt $file >/dev/null || fail
83         echo " [OK]"
84 done
85
86 echo "HEADER KEYFILES CHECK"
87 for file in $(ls $TST_DIR/[tv]ck_*) ; do
88         echo -n " $file"
89         echo $PASSWORD | $CRYPTSETUP tcryptDump --veracrypt -d $TST_DIR/keyfile1 -d $TST_DIR/keyfile2 $file >/dev/null || fail
90         echo " [OK]"
91 done
92
93
94 if [ $(id -u) != 0 ]; then
95         echo "WARNING: You must be root to run activation part of test, test skipped."
96         exit 0
97 fi
98
99 echo "ACTIVATION FS UUID CHECK"
100 for file in $(ls $TST_DIR/[tv]c_*) ; do
101         echo -n " $file"
102         out=$(echo $PASSWORD | $CRYPTSETUP tcryptOpen --veracrypt -r $file $MAP 2>&1)
103         ret=$?
104         [ $ret -eq 1 ] && ( echo "$out" | grep -q -e "TCRYPT legacy mode" ) && echo " [N/A]" && continue
105         [ $ret -eq 1 ] && ( echo "$out" | grep -q -e "TCRYPT compatible mapping" ) && echo " [N/A]" && continue
106         [ $ret -ne 0 ] && fail
107         $CRYPTSETUP status $MAP >/dev/null || fail
108         $CRYPTSETUP status /dev/mapper/$MAP >/dev/null || fail
109         UUID=$(lsblk -n -o UUID /dev/mapper/$MAP)
110         $CRYPTSETUP remove $MAP || fail
111         [ "$UUID" != "DEAD-BABE" ] && fail "UUID check failed."
112         echo " [OK]"
113 done
114
115 echo "ACTIVATION FS UUID (HIDDEN) CHECK"
116 for file in $(ls $TST_DIR/[tv]c_*-hidden) ; do
117         echo -n " $file"
118         out=$(echo $PASSWORD_HIDDEN | $CRYPTSETUP tcryptOpen --veracrypt -r $file $MAP --tcrypt-hidden 2>&1)
119         ret=$?
120         [ $ret -eq 1 ] && ( echo "$out" | grep -q -e "TCRYPT legacy mode" ) && echo " [N/A]" && continue
121         [ $ret -eq 1 ] && ( echo "$out" | grep -q -e "TCRYPT compatible mapping" ) && echo " [N/A]" && continue
122         [ $ret -ne 0 ] && fail
123         UUID=$(lsblk -n -o UUID /dev/mapper/$MAP)
124         $CRYPTSETUP remove $MAP || fail
125         [ "$UUID" != "CAFE-BABE" ] && fail "UUID check failed."
126         echo " [OK]"
127 done