Fixed the build error for riscv64 arch using gcc 13
[platform/upstream/cryptsetup.git] / tests / bitlk-compat-test
1 #!/bin/bash
2
3 # check bitlk images parsing
4
5 [ -z "$CRYPTSETUP_PATH" ] && CRYPTSETUP_PATH=".."
6 CRYPTSETUP=$CRYPTSETUP_PATH/cryptsetup
7 TST_DIR=bitlk-images
8 MAP=bitlktst
9
10 CRYPTSETUP_VALGRIND=../.libs/cryptsetup
11 CRYPTSETUP_LIB_VALGRIND=../.libs
12
13 [ -z "$srcdir" ] && srcdir="."
14
15 function remove_mapping()
16 {
17         [ -b /dev/mapper/$MAP ] && dmsetup remove --retry $MAP
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         echo "Test skipped."
34         exit 77
35 }
36
37 function load_vars()
38 {
39         local file=$(echo $1 | sed -e s/^$TST_DIR\\/// | sed -e s/\.img$//)
40         source <(grep = <(grep -A8 "\[$file\]" $TST_DIR/images.conf))
41 }
42
43 function check_dump()
44 {
45         dump=$1
46         file=$2
47
48         # load variables for this image from config file
49         load_vars $file
50
51         # GUID
52         dump_guid=$(echo "$dump" | grep Version -A 1 | tail -1 | cut -d: -f2 | tr -d "\t\n ")
53         [ ! -z "$GUID" -a "$dump_guid" = "$GUID"  ] || fail " GUID check from dump failed."
54
55         # cipher
56         dump_cipher=$(echo "$dump" | grep "Cipher name" | cut -d: -f2 | tr -d "\t\n ")
57         dump_mode=$(echo "$dump" | grep "Cipher mode" | cut -d: -f2 | tr -d "\t\n ")
58         cipher=$(echo "$dump_cipher-$dump_mode")
59         [ ! -z "$CIPHER" -a "$cipher" = "$CIPHER" ] || fail " cipher check from dump failed."
60
61         if echo "$file" | grep -q -e "smart-card"; then
62                 # smart card protected VMK GUID
63                 dump_sc_vmk=$(echo "$dump" | grep "VMK protected with smart card" -B 1 | head -1 | cut -d: -f2 | tr -d "\t ")
64                 [ ! -z "$SC_VMK_GUID" -a "$dump_sc_vmk" = "$SC_VMK_GUID" ] || fail " smart card protected VMK GUID check from dump failed."
65         elif echo "$file" | grep -q -e "startup-key"; then
66                 # startup key protected VMK GUID
67                 dump_sk_vmk=$(echo "$dump" | grep "VMK protected with startup key" -B 1 | head -1 | cut -d: -f2 | tr -d "\t ")
68                 [ ! -z "$SK_VMK_GUID" -a "$dump_sk_vmk" = "$SK_VMK_GUID" ] || fail " startup key protected VMK GUID check from dump failed."
69         else
70                 # password protected VMK GUID
71                 dump_pw_vmk=$(echo "$dump" | grep "VMK protected with passphrase" -B 1 | head -1 | cut -d: -f2 | tr -d "\t ")
72                 [ ! -z "$PW_VMK_GUID" -a "$dump_pw_vmk" = "$PW_VMK_GUID" ] || fail " password protected VMK GUID check from dump failed."
73         fi
74
75         # recovery password protected VMK GUID
76         dump_rp_vmk=$(echo "$dump" | grep "VMK protected with recovery passphrase" -B 1 | head -1 | cut -d: -f2 | tr -d "\t ")
77         [ ! -z "$RP_VMK_GUID" -a "$dump_rp_vmk" = "$RP_VMK_GUID" ] || fail " recovery password protected VMK GUID check from dump failed."
78
79 }
80
81 function valgrind_setup()
82 {
83         which valgrind >/dev/null 2>&1 || fail "Cannot find valgrind."
84         [ ! -f $CRYPTSETUP_VALGRIND ] && fail "Unable to get location of cryptsetup executable."
85         export LD_LIBRARY_PATH="$CRYPTSETUP_LIB_VALGRIND:$LD_LIBRARY_PATH"
86 }
87
88 function valgrind_run()
89 {
90         INFOSTRING="$(basename ${BASH_SOURCE[1]})-line-${BASH_LINENO[0]}" ./valg.sh ${CRYPTSETUP_VALGRIND} "$@"
91 }
92
93 export LANG=C
94 [ ! -d $TST_DIR ] && tar xJSf $srcdir/bitlk-images.tar.xz --no-same-owner
95
96 [ -n "$VALG" ] && valgrind_setup && CRYPTSETUP=valgrind_run
97
98 echo "HEADER CHECK"
99 for file in $(ls $TST_DIR/bitlk-*) ; do
100         echo -n " $file"
101         out=$($CRYPTSETUP bitlkDump $file)
102         check_dump "$out" "$file"
103         echo " [OK]"
104 done
105
106 if [ $(id -u) != 0 ]; then
107         echo "WARNING: You must be root to run activation part of test, test skipped."
108         exit 0
109 fi
110
111 remove_mapping
112
113 echo "ACTIVATION FS UUID CHECK"
114 for file in $(ls $TST_DIR/bitlk-*) ; do
115         # load variables for this image from config file
116         load_vars $file
117
118         # test with both passphrase and recovery passphrase
119         for PASSPHRASE in $PW $RP ; do
120                 echo -n " $file"
121                 echo $PASSPHRASE | $CRYPTSETUP bitlkOpen -r $file --test-passphrase >/dev/null 2>&1
122                 ret=$?
123                 [ $ret -eq 1 ] && echo " [N/A]" && continue
124                 echo $PASSPHRASE | $CRYPTSETUP bitlkOpen -r $file $MAP >/dev/null 2>&1
125                 ret=$?
126                 [ $ret -eq 1 ] && ( echo "$file" | grep -q -e "aes-cbc" ) && echo " [N/A]" && continue
127                 [ $ret -eq 1 ] && ( echo "$file" | grep -q -e "aes-cbc-elephant" ) && echo " [N/A]" && continue
128                 [ $ret -eq 1 ] && ( echo "$file" | grep -q -e "clearkey" ) && echo " [N/A]" && continue
129                 [ $ret -eq 1 ] && ( echo "$file" | grep -q -e "eow" ) && echo " [N/A]" && continue
130                 [ $ret -eq 1 ] && ( echo "$file" | grep -q -e "-4k.img" ) && echo " [N/A]" && continue
131                 [ $ret -eq 0 ] || fail " failed to open $file ($ret)"
132                 $CRYPTSETUP status $MAP >/dev/null || fail
133                 $CRYPTSETUP status /dev/mapper/$MAP >/dev/null || fail
134                 uuid=$(lsblk -n -o UUID /dev/mapper/$MAP)
135                 sha256sum=$(sha256sum /dev/mapper/$MAP | cut -d" " -f1)
136                 $CRYPTSETUP remove $MAP || fail
137                 [ "$uuid" = "$UUID" ] || fail " UUID check failed."
138                 [ "$sha256sum" = "$SHA256SUM" ] || fail " SHA256 sum check failed."
139                 echo " [OK]"
140         done
141
142         # startup key test -- we need to use BEK file from the archive
143         if echo "$file" | grep -q -e "startup-key"; then
144                 echo -n " $file"
145                 bek_file=$(echo $SK_VMK_GUID.BEK | tr /a-z/ /A-Z/)
146                 $CRYPTSETUP bitlkOpen -r $file --test-passphrase --key-file $TST_DIR/$bek_file
147                 ret=$?
148                 [ $ret -eq 1 ] && echo " [N/A]" && continue
149                 $CRYPTSETUP bitlkOpen -r $file $MAP --key-file $TST_DIR/$bek_file >/dev/null 2>&1
150                 ret=$?
151                 [ $ret -eq 0 ] || fail " failed to open $file ($ret)"
152                 $CRYPTSETUP status $MAP >/dev/null || fail
153                 $CRYPTSETUP status /dev/mapper/$MAP >/dev/null || fail
154                 uuid=$(lsblk -n -o UUID /dev/mapper/$MAP)
155                 sha256sum=$(sha256sum /dev/mapper/$MAP | cut -d" " -f1)
156                 $CRYPTSETUP remove $MAP || fail
157                 [ "$uuid" = "$UUID" ] || fail " UUID check failed."
158                 [ "$sha256sum" = "$SHA256SUM" ] || fail " SHA256 sum check failed."
159                 echo " [OK]"
160
161         fi
162 done