40632aae71cf4bd5cf8e371293e526a5c3d06049
[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
69 [ ! -d $TST_DIR ] && tar xjf tcrypt-images.tar.bz2
70
71 echo "HEADER CHECK"
72 for file in $(ls $TST_DIR/tc_*) ; do
73         echo -n " $file"
74         echo $PASSWORD | $CRYPTSETUP tcryptDump $file >/dev/null || fail
75         echo " [OK]"
76 done
77
78 echo "HEADER CHECK (HIDDEN)"
79 for file in $(ls $TST_DIR/tc_*-hidden) ; do
80         echo -n " $file (hidden)"
81         echo $PASSWORD_HIDDEN | $CRYPTSETUP tcryptDump --tcrypt-hidden $file >/dev/null || fail
82         echo " [OK]"
83 done
84
85 echo "HEADER KEYFILES CHECK"
86 for file in $(ls $TST_DIR/tck_*) ; do
87         echo -n " $file"
88         echo $PASSWORD | $CRYPTSETUP tcryptDump -d $TST_DIR/keyfile1 -d $TST_DIR/keyfile2 $file >/dev/null || fail
89         echo " [OK]"
90 done
91
92
93 if [ $(id -u) != 0 ]; then
94         echo "WARNING: You must be root to run activation part of test, test skipped."
95         exit 0
96 fi
97
98 echo "ACTIVATION FS UUID CHECK (LRW/XTS modes only)"
99 for file in $(ls $TST_DIR/tc_*-lrw-* $TST_DIR/tc_*-xts-*) ; do
100         echo -n " $file"
101         echo $PASSWORD | $CRYPTSETUP tcryptOpen -r $file $MAP || fail
102         $CRYPTSETUP status $MAP >/dev/null || fail
103         $CRYPTSETUP status /dev/mapper/$MAP >/dev/null || fail
104         UUID=$(lsblk -n -o UUID /dev/mapper/$MAP)
105         $CRYPTSETUP remove $MAP || fail
106         [ "$UUID" != "DEAD-BABE" ] && fail "UUID check failed."
107         echo " [OK]"
108 done
109
110 echo "ACTIVATION FS UUID (HIDDEN) CHECK (LRW/XTS modes only)"
111 for file in $(ls $TST_DIR/tc_*-lrw-*-hidden $TST_DIR/tc_*-xts-*-hidden) ; do
112         echo -n " $file"
113         echo $PASSWORD_HIDDEN | $CRYPTSETUP tcryptOpen -r $file $MAP --tcrypt-hidden || fail
114         UUID=$(lsblk -n -o UUID /dev/mapper/$MAP)
115         $CRYPTSETUP remove $MAP || fail
116         [ "$UUID" != "CAFE-BABE" ] && fail "UUID check failed."
117         echo " [OK]"
118 done