Makefile: Add security compiling option (RELRO, SC, and FORTIFY)
[platform/upstream/cryptsetup.git] / tests / fvault2-compat-test
1 #!/bin/bash
2
3 [ -z "$CRYPTSETUP_PATH" ] && CRYPTSETUP_PATH=".."
4 CRYPTSETUP=$CRYPTSETUP_PATH/cryptsetup
5 MAP=fvault2test
6 TST_DIR=fvault2-images
7
8 CRYPTSETUP_VALGRIND=../.libs/cryptsetup
9 CRYPTSETUP_LIB_VALGRIND=../.libs
10
11 [ -z "$srcdir" ] && srcdir="."
12
13 function create_mapping()
14 {
15         local image=$1
16         local passphrase=$2
17         echo -n "$passphrase" | "$CRYPTSETUP" open --type fvault2 --key-file - \
18                 "$image" "$MAP"
19 }
20
21 function remove_mapping()
22 {
23         [ -b "/dev/mapper/$MAP" ] && dmsetup remove --retry "$MAP"
24         rm -rf $TST_DIR
25 }
26
27 function fail()
28 {
29         [ -n "$1" ] && echo "$1"
30         echo " [FAILED]"
31         echo "FAILED backtrace:"
32         while caller $frame; do ((frame++)); done
33         remove_mapping
34         exit 2
35 }
36
37 function skip()
38 {
39         [ -n "$1" ] && echo "$1"
40         echo "Test skipped."
41         remove_mapping
42         exit 77
43 }
44
45 function produce_dump()
46 {
47         "$CRYPTSETUP" fvault2Dump "$1" || fail
48 }
49
50 function produce_dump_key()
51 {
52         echo "$2" | "$CRYPTSETUP" fvault2Dump "$1" --dump-volume-key || fail
53 }
54
55 function check_dump()
56 {
57         local dump=$1
58         local key=$2
59         local exp_value=$3
60         local regex="$key:\s*\(.*\)"
61         local value=$(echo "$dump" | sed -n "s|$regex|\1|p" | sed 's|\s*$||')
62         [ "$value" = "$exp_value" ] || fail \
63                 "$key check failed: expected \"$exp_value\", got \"$value\""
64 }
65
66 function check_uuid()
67 {
68         local exp_uuid=$1
69         local uuid=$(blkid -po value -s UUID "/dev/mapper/$MAP")
70         [ "$uuid" = "$exp_uuid" ] || fail \
71                 "UUID check failed: expected \"$exp_uuid\", got \"$uuid\""
72 }
73
74 function check_sha256()
75 {
76         local exp_sum=$1
77         local sum=$(sha256sum /dev/mapper/$MAP | head -c 64)
78         [ "$sum" = "$exp_sum" ] || fail \
79                 "SHA256 sum check failed: expected \"$exp_sum\", got \"$sum\""
80 }
81
82 function valgrind_setup()
83 {
84         command -v valgrind >/dev/null || fail "Cannot find valgrind."
85         [ ! -f $CRYPTSETUP_VALGRIND ] && fail "Unable to get location of cryptsetup executable."
86         export LD_LIBRARY_PATH="$CRYPTSETUP_LIB_VALGRIND:$LD_LIBRARY_PATH"
87 }
88
89 function valgrind_run()
90 {
91         INFOSTRING="$(basename ${BASH_SOURCE[1]})-line-${BASH_LINENO[0]}" ./valg.sh ${CRYPTSETUP_VALGRIND} "$@"
92 }
93
94 export LANG=C
95 [ ! -x "$CRYPTSETUP" ] && skip "Cannot find $CRYPTSETUP, test skipped."
96
97 if [ ! -d $TST_DIR ]; then
98         tar xJSf $srcdir/fvault2-images.tar.xz --no-same-owner 2>/dev/null || skip "Incompatible tar."
99 fi
100
101 [ -n "$VALG" ] && valgrind_setup && CRYPTSETUP=valgrind_run
102
103 echo "HEADER CHECK"
104 IMG="$TST_DIR/small"
105 PWD="heslo123"
106
107 echo -n " $IMG"
108 dump=$(produce_dump $IMG)
109 check_dump "$dump" 'Physical volume UUID' fc52bfae-5a1f-4f9b-b3a6-f33303a0e401
110 check_dump "$dump" 'Family UUID' 33a76caa-1481-4bc5-8d04-1ac1707c19c0
111 check_dump "$dump" 'Logical volume offset' '67108864 [bytes]'
112 check_dump "$dump" 'Logical volume size' '167772160 [bytes]'
113 check_dump "$dump" 'PBKDF2 iterations' 204222
114 check_dump "$dump" 'PBKDF2 salt' '2c 24 9e db 66 63 d6 fb cc 79 05 b7 a4 d7 27 52'
115 dump=$(produce_dump_key $IMG heslo123)
116 check_dump "$dump" 'Volume key' '20 73 4d 33 89 21 27 74 d7 61 0c 29 d7 32 88 09 16 f3 be 14 c4 b1 2a c7 aa f0 7e 5c cc 77 b3 19'
117 echo $PWD | $CRYPTSETUP open --type fvault2 --test-passphrase $IMG || fail
118 echo " [OK]"
119
120 if [ $(id -u) != 0 ]; then
121         echo "WARNING: You must be root to run activation part of test, test skipped."
122         remove_mapping
123         exit 0
124 fi
125
126 echo "ACTIVATION CHECK"
127 echo -n " $IMG"
128 create_mapping $IMG heslo123
129 check_uuid de124d8a-2164-394e-924f-8e28db0a09cb
130 check_sha256 2c662e36c0f7e2f5583e6a939bbcbdc660805692d0fccaa45ad4052beb3b8e18
131 echo " [OK]"
132
133 remove_mapping
134 exit 0