Add some valgrind checks (thanks to okozina).
[platform/upstream/cryptsetup.git] / tests / compat-test
1 #!/bin/bash
2
3 CRYPTSETUP=../src/cryptsetup
4
5 DEV_NAME=dummy
6 DEV_NAME2=dummy2
7 DEV_NAME3=dummy3
8 ORIG_IMG=luks-test-orig
9 IMG=luks-test
10 KEY1=key1
11 KEY2=key2
12
13 LUKS_HEADER="S0-5 S6-7 S8-39 S40-71 S72-103 S104-107 S108-111 R112-131 R132-163 S164-167 S168-207 A0-591"
14 KEY_SLOT0="S208-211 S212-215 R216-247 A248-251 A251-255"
15 KEY_MATERIAL0="R4096-68096"
16 KEY_MATERIAL0_EXT="R4096-68096"
17
18 KEY_SLOT1="S256-259 S260-263 R264-295 A296-299 A300-303"
19 KEY_MATERIAL1="R69632-133632"
20 KEY_MATERIAL1_EXT="S69632-133632"
21
22 TEST_UUID="12345678-1234-1234-1234-123456789abc"
23
24 LOOPDEV=$(losetup -f 2>/dev/null)
25
26 function remove_mapping()
27 {
28         [ -b /dev/mapper/$DEV_NAME3 ] && dmsetup remove $DEV_NAME3
29         [ -b /dev/mapper/$DEV_NAME2 ] && dmsetup remove $DEV_NAME2
30         [ -b /dev/mapper/$DEV_NAME ] && dmsetup remove $DEV_NAME
31         losetup -d $LOOPDEV >/dev/null 2>&1
32         rm -f $ORIG_IMG $IMG $KEY1 $KEY2 >/dev/null 2>&1
33 }
34
35 function fail()
36 {
37         [ -n "$1" ] && echo "$1"
38         remove_mapping
39         echo "FAILED"
40         exit 2
41 }
42
43 function skip()
44 {
45         [ -n "$1" ] && echo "$1"
46         exit 0
47 }
48
49 function prepare()
50 {
51         [ -b /dev/mapper/$DEV_NAME ] && dmsetup remove $DEV_NAME
52
53         case "$2" in
54         wipe)
55                 remove_mapping
56                 dd if=/dev/zero of=$IMG bs=1k count=10000 >/dev/null 2>&1
57                 sync
58                 losetup $LOOPDEV $IMG
59                 ;;
60         new)
61                 remove_mapping
62                 bzip2 -cd compatimage.img.bz2 > $IMG
63                 losetup $LOOPDEV $IMG
64                 ;;
65         reuse | *)
66                 if [ ! -e $IMG ]; then
67                         bzip2 -cd compatimage.img.bz2 > $IMG
68                         losetup $LOOPDEV $IMG
69                 fi
70                 ;;
71         esac
72
73         if [ ! -e $KEY1 ]; then
74                 dd if=/dev/urandom of=$KEY1 count=1 bs=32 >/dev/null 2>&1
75         fi
76
77         if [ ! -e $KEY2 ]; then
78                 dd if=/dev/urandom of=$KEY2 count=1 bs=16 >/dev/null 2>&1
79         fi
80
81         cp $IMG $ORIG_IMG
82         [ -n "$1" ] && echo "CASE: $1"
83 }
84
85 function check()
86 {
87         sync
88         [ -z "$1" ] && return
89         ./differ $ORIG_IMG $IMG $1 || fail
90 }
91
92 function check_exists()
93 {
94         [ -b /dev/mapper/$DEV_NAME ] || fail
95         check $1
96 }
97
98 function valgrind_setup()
99 {
100         which valgrind >/dev/null 2>&1 || fail "Cannot find valgrind"
101
102         CRYPTSETUP_BIN=$($CRYPTSETUP --lt-debug --version 2>&1 \
103                         | grep "newargv\[0\]" \
104                         | sed 's/.*newargv\[0\]\:[[:space:]]\+\(.*\)$/\1/g')
105         [ -z "$CRYPTSETUP_BIN" ] && fail "Unable to get location of cryptsetup executable."
106         export LD_LIBRARY_PATH="../lib/.libs:$LD_LIBRARY_PATH"
107 }
108
109 function valgrind_run()
110 {
111         INFOSTRING="$(basename ${BASH_SOURCE[1]})-line-${BASH_LINENO[0]}" ./valg.sh ${CRYPTSETUP_BIN} "$@"
112 }
113
114 [ $(id -u) != 0 ] && skip "WARNING: You must be root to run this test, test skipped."
115 [ -z "$LOOPDEV" ] && skip "Cannot find free loop device, test skipped."
116
117 [ -n "$VALG" ] && valgrind_setup && CRYPTSETUP=valgrind_run
118
119 # LUKS tests
120
121 prepare "[1] open - compat image - acceptance check" new
122 echo "compatkey" | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail
123 check_exists
124 ORG_SHA1=$(sha1sum -b /dev/mapper/$DEV_NAME | cut -f 1 -d' ')
125 [ "$ORG_SHA1" = 676062b66ebf36669dab705442ea0762dfc091b0 ] || fail
126
127 prepare "[2] open - compat image - denial check" new
128 echo "wrongkey" | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
129 check
130
131 # All headers items and first key material section must change
132 prepare "[3] format" wipe
133 echo "key0" | $CRYPTSETUP -i 1000 -c aes-cbc-essiv:sha256 -s 128 luksFormat $LOOPDEV || fail
134 check "$LUKS_HEADER $KEY_SLOT0 $KEY_MATERIAL0"
135
136 prepare "[4] format using hash sha512" wipe
137 echo "key0" | $CRYPTSETUP -i 1000 -h sha512 -c aes-cbc-essiv:sha256 -s 128 luksFormat $LOOPDEV || fail
138 check "$LUKS_HEADER $KEY_SLOT0 $KEY_MATERIAL0"
139
140 prepare "[5] open"
141 echo "key0" | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail
142 check_exists
143
144 # Key Slot 1 and key material section 1 must change, the rest must not.
145 prepare "[6] add key"
146 echo -e "key0\nkey1" | $CRYPTSETUP luksAddKey $LOOPDEV || fail
147 check "$KEY_SLOT1 $KEY_MATERIAL1"
148 echo "key1" | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail
149
150 # Unsuccessful Key Delete - nothing may change
151 prepare "[7] unsuccessful delete"
152 echo "invalid" | $CRYPTSETUP luksKillSlot $LOOPDEV 1 2>/dev/null && fail
153 check
154
155 # Delete Key Test
156 # Key Slot 1 and key material section 1 must change, the rest must not
157 prepare "[8] successful delete"
158 $CRYPTSETUP -q luksKillSlot $LOOPDEV 1 || fail
159 check "$KEY_SLOT1 $KEY_MATERIAL1_EXT"
160 echo "key1" | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME 2> /dev/null && fail
161 echo "key0" | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail
162
163 # Key Slot 1 and key material section 1 must change, the rest must not
164 prepare "[9] add key test for key files"
165 echo "key0" | $CRYPTSETUP luksAddKey $LOOPDEV $KEY1 || fail
166 check "$KEY_SLOT1 $KEY_MATERIAL1"
167 $CRYPTSETUP -d $KEY1 luksOpen $LOOPDEV $DEV_NAME || fail
168
169 # Key Slot 1 and key material section 1 must change, the rest must not
170 prepare "[10] delete key test with key1 as remaining key"
171 $CRYPTSETUP -d $KEY1 luksKillSlot $LOOPDEV 0 || fail
172 check "$KEY_SLOT0 $KEY_MATERIAL0_EXT"
173 echo "key0" | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
174 $CRYPTSETUP luksOpen -d $KEY1 $LOOPDEV $DEV_NAME || fail
175
176 # Delete last slot
177 prepare "[11] delete last key" wipe
178 echo "key0" | $CRYPTSETUP luksFormat $LOOPDEV || fail
179 echo "key0" | $CRYPTSETUP luksKillSlot $LOOPDEV 0 || fail
180 echo "key0" | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
181
182 # Format test for ESSIV, and some other parameters.
183 prepare "[12] parameter variation test" wipe
184 $CRYPTSETUP -q -i 1000 -c aes-cbc-essiv:sha256 -s 128 luksFormat $LOOPDEV $KEY1 || fail
185 check "$LUKS_HEADER $KEY_SLOT0 $KEY_MATERIAL0"
186 $CRYPTSETUP -d $KEY1 luksOpen $LOOPDEV $DEV_NAME || fail
187
188 prepare "[13] open/close - stacked devices" wipe
189 echo "key0" | $CRYPTSETUP -q luksFormat $LOOPDEV || fail
190 echo "key0" | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME || fail
191 echo "key0" | $CRYPTSETUP -q luksFormat /dev/mapper/$DEV_NAME || fail
192 echo "key0" | $CRYPTSETUP -q luksOpen /dev/mapper/$DEV_NAME $DEV_NAME2 || fail
193 $CRYPTSETUP -q luksClose  $DEV_NAME2 || fail
194 $CRYPTSETUP -q luksClose  $DEV_NAME || fail
195
196 prepare "[14] format/open - passphrase on stdin & new line" wipe
197 # stdin defined by "-" must take even newline
198 #echo -n $'foo\nbar' | $CRYPTSETUP -q luksFormat $LOOPDEV - || fail
199 echo -n $'foo\nbar' | $CRYPTSETUP -q --key-file=- luksFormat $LOOPDEV || fail
200 echo -n $'foo\nbar' | $CRYPTSETUP -q --key-file=- luksOpen $LOOPDEV $DEV_NAME || fail
201 $CRYPTSETUP -q luksClose  $DEV_NAME || fail
202 echo -n $'foo\nbar' | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
203 # now also try --key-file
204 echo -n $'foo\nbar' | $CRYPTSETUP -q luksFormat $LOOPDEV --key-file=- || fail
205 echo -n $'foo\nbar' | $CRYPTSETUP -q --key-file=- luksOpen $LOOPDEV $DEV_NAME || fail
206 $CRYPTSETUP -q luksClose  $DEV_NAME || fail
207 # process newline if from stdin
208 echo -n $'foo\nbar' | $CRYPTSETUP -q luksFormat $LOOPDEV || fail
209 echo 'foo' | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME || fail
210 $CRYPTSETUP -q luksClose  $DEV_NAME || fail
211
212 prepare "[15] UUID - use and report provided UUID" wipe
213 echo "key0" | $CRYPTSETUP -q luksFormat --uuid blah $LOOPDEV 2>/dev/null && fail
214 echo "key0" | $CRYPTSETUP -q luksFormat --uuid $TEST_UUID $LOOPDEV || fail
215 tst=$($CRYPTSETUP -q luksUUID $LOOPDEV)
216 [ "$tst"x = "$TEST_UUID"x ] || fail
217 echo "key0" | $CRYPTSETUP -q luksFormat $LOOPDEV || fail
218 $CRYPTSETUP -q luksUUID --uuid $TEST_UUID $LOOPDEV || fail
219 tst=$($CRYPTSETUP -q luksUUID $LOOPDEV)
220 [ "$tst"x = "$TEST_UUID"x ] || fail
221
222 prepare "[16] luksFormat" wipe
223 echo "key0" | $CRYPTSETUP -q luksFormat --master-key-file /dev/urandom $LOOPDEV || fail
224 echo "key0" | $CRYPTSETUP -q luksFormat --master-key-file /dev/urandom $LOOPDEV -d $KEY1 || fail
225 $CRYPTSETUP -q luksFormat --master-key-file /dev/urandom -s 256 --uuid $TEST_UUID $LOOPDEV $KEY1 || fail
226 $CRYPTSETUP luksOpen -d $KEY1 $LOOPDEV $DEV_NAME || fail
227 $CRYPTSETUP -q luksClose  $DEV_NAME || fail
228
229 prepare "[17] AddKey volume key, passphrase and keyfile" wipe
230 # masterkey
231 echo "key0" | $CRYPTSETUP -q luksFormat $LOOPDEV --master-key-file /dev/zero --key-slot 3 || fail
232 $CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 3: ENABLED" || fail
233 echo "key1" | $CRYPTSETUP luksAddKey $LOOPDEV --master-key-file /dev/zero --key-slot 4 || fail
234 $CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 4: ENABLED" || fail
235 echo "key2" | $CRYPTSETUP luksAddKey $LOOPDEV --master-key-file /dev/null --key-slot 5 2>/dev/null && fail
236 # [0]key0 [1]key1 [2]$KEY1/1 [3]$KEY1 [4]$KEY2
237 $CRYPTSETUP -q luksFormat $LOOPDEV $KEY1 --key-slot 3 || fail
238 $CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 3: ENABLED" || fail
239 $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 --key-slot 3 2>/dev/null && fail
240 # keyfile/keyfile
241 $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 --key-slot 4 || fail
242 $CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 4: ENABLED" || fail
243 # passphrase/keyfile
244 echo "key0" | $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 --key-slot 0 || fail
245 $CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 0: ENABLED" || fail
246 # passphrase/passphrase
247 echo -e "key0\nkey1\n" | $CRYPTSETUP luksAddKey $LOOPDEV --key-slot 1 || fail
248 $CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 1: ENABLED" || fail
249 # keyfile/passphrase
250 echo -e "key1\n" | $CRYPTSETUP luksAddKey $LOOPDEV $KEY1 --key-slot 2 --new-keyfile-size 1 || fail
251 $CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 2: ENABLED" || fail
252
253 prepare "[18] RemoveKey passphrase and keyfile" reuse
254 $CRYPTSETUP luksRemoveKey $LOOPDEV $KEY1 || fail
255 $CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 3: DISABLED" || fail
256 $CRYPTSETUP luksRemoveKey $LOOPDEV $KEY1 2>/dev/null && fail
257 $CRYPTSETUP luksRemoveKey $LOOPDEV $KEY2 --keyfile-size 1 2>/dev/null && fail
258 $CRYPTSETUP luksRemoveKey $LOOPDEV $KEY2 || fail
259 $CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 4: DISABLED" || fail
260 # kill slot using passphrase from 1
261 echo "key1" | $CRYPTSETUP luksKillSlot $LOOPDEV 2 || fail
262 $CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 2: DISABLED" || fail
263 # remove key0 / slot 0
264 echo "key0" | $CRYPTSETUP luksRemoveKey $LOOPDEV || fail
265 $CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 0: DISABLED" || fail
266 # last keyslot, in batch mode no passphrase needed...
267 $CRYPTSETUP luksKillSlot -q $LOOPDEV 1 || fail
268 $CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 1: DISABLED" || fail
269
270 prepare "[19] create & status & resize" wipe
271 echo "key0" | $CRYPTSETUP create $DEV_NAME $LOOPDEV --hash xxx 2>/dev/null && fail
272 echo "key0" | $CRYPTSETUP create $DEV_NAME $LOOPDEV --hash sha1 --cipher aes-cbc-essiv:sha256 --offset 3 --skip 4 --readonly || fail
273 $CRYPTSETUP -q status  $DEV_NAME | grep "offset:" | grep -q "3 sectors" || fail
274 $CRYPTSETUP -q status  $DEV_NAME | grep "skipped:" | grep -q "4 sectors" || fail
275 $CRYPTSETUP -q status  $DEV_NAME | grep "mode:" | grep -q "readonly" || fail
276 $CRYPTSETUP -q resize  $DEV_NAME --size 100 || fail
277 $CRYPTSETUP -q status  $DEV_NAME | grep "size:" | grep -q "100 sectors" || fail
278 $CRYPTSETUP -q resize  $DEV_NAME || fail
279 $CRYPTSETUP -q status  $DEV_NAME | grep "size:" | grep -q "19997 sectors" || fail
280 $CRYPTSETUP -q remove  $DEV_NAME || fail
281 $CRYPTSETUP -q status  $DEV_NAME >/dev/null && fail
282 echo "key0" | $CRYPTSETUP create $DEV_NAME --hash sha1 $LOOPDEV || fail
283 $CRYPTSETUP -q remove  $DEV_NAME || fail
284 echo "key0" | $CRYPTSETUP -q create $DEV_NAME --hash sha1 $LOOPDEV || fail
285 $CRYPTSETUP -q remove  $DEV_NAME || fail
286 echo "key0" | $CRYPTSETUP -q create $DEV_NAME --hash sha1 --size 100 $LOOPDEV || fail
287 $CRYPTSETUP -q status  $DEV_NAME | grep "size:" | grep -q "100 sectors" || fail
288 $CRYPTSETUP -q remove  $DEV_NAME || fail
289 # verify is ignored on non-tty input
290 echo "key0" | $CRYPTSETUP create $DEV_NAME $LOOPDEV --hash sha1 --verify-passphrase || fail
291 $CRYPTSETUP -q remove  $DEV_NAME || fail
292 $CRYPTSETUP create $DEV_NAME $LOOPDEV -d $KEY1 --key-size 255 2>/dev/null && fail
293 $CRYPTSETUP create $DEV_NAME $LOOPDEV -d $KEY1 --key-size -1 2>/dev/null && fail
294 $CRYPTSETUP create $DEV_NAME $LOOPDEV -d $KEY1 -l -1 2>/dev/null && fail
295 $CRYPTSETUP create $DEV_NAME $LOOPDEV -d $KEY1  || fail
296 $CRYPTSETUP create $DEV_NAME $LOOPDEV -d $KEY1 2>/dev/null && fail
297 $CRYPTSETUP create $DEV_NAME $LOOPDEV -d blah 2>/dev/null && fail
298 $CRYPTSETUP -q remove  $DEV_NAME || fail
299 $CRYPTSETUP create $DEV_NAME $LOOPDEV -d /dev/urandom || fail
300 $CRYPTSETUP -q remove  $DEV_NAME || fail
301
302 prepare "[20] Disallow open/create if already mapped." wipe
303 $CRYPTSETUP create $DEV_NAME $LOOPDEV -d $KEY1 || fail
304 $CRYPTSETUP create $DEV_NAME $LOOPDEV -d $KEY1 2>/dev/null && fail
305 $CRYPTSETUP create $DEV_NAME2 $LOOPDEV -d $KEY1 2>/dev/null && fail
306 echo "key0" | $CRYPTSETUP -q luksFormat $LOOPDEV 2>/dev/null && fail
307 $CRYPTSETUP remove  $DEV_NAME || fail
308 echo "key0" | $CRYPTSETUP -q luksFormat $LOOPDEV || fail
309 echo "key0" | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail
310 echo "key0" | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME2 2>/dev/null && fail
311 $CRYPTSETUP  luksClose  $DEV_NAME || fail
312
313 prepare "[21] luksDump" wipe
314 echo "key0" | $CRYPTSETUP -q luksFormat --uuid $TEST_UUID $LOOPDEV $KEY1 || fail
315 echo "key0" | $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 || fail
316 $CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 0: ENABLED" || fail
317 $CRYPTSETUP luksDump $LOOPDEV | grep -q $TEST_UUID || fail
318 echo "bad" | $CRYPTSETUP luksDump $LOOPDEV --dump-master-key 2>/dev/null && fail
319 echo "key0" | $CRYPTSETUP luksDump $LOOPDEV --dump-master-key | grep -q "MK dump:" || fail
320 $CRYPTSETUP luksDump -q $LOOPDEV --dump-master-key -d $KEY1 | grep -q "MK dump:" || fail
321
322 prepare "[22] remove disappeared device" wipe
323 dmsetup create $DEV_NAME --table "0 5000 linear $LOOPDEV 2" || fail
324 echo "key0" | $CRYPTSETUP -q -i 0 luksFormat /dev/mapper/$DEV_NAME || fail
325 echo "key0" | $CRYPTSETUP -q luksOpen /dev/mapper/$DEV_NAME $DEV_NAME2 || fail
326 # underlying device now returns error but node is still present
327 dmsetup load $DEV_NAME --table "0 5000 error" || fail
328 dmsetup resume $DEV_NAME || fail
329 $CRYPTSETUP -q luksClose $DEV_NAME2 || fail
330 dmsetup remove $DEV_NAME || fail
331
332 prepare "[23] ChangeKey passphrase and keyfile" wipe
333 # [0]$KEY1 [1]key0
334 $CRYPTSETUP -q luksFormat $LOOPDEV $KEY1 --key-slot 0 || fail
335 echo "key0" | $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 --key-slot 1 || fail
336 # keyfile [0] / keyfile [0]
337 $CRYPTSETUP luksChangeKey $LOOPDEV -d $KEY1 $KEY2 --key-slot 0 || fail
338 # passphrase [1] / passphrase [1]
339 echo -e "key0\nkey1\n" | $CRYPTSETUP luksChangeKey $LOOPDEV --key-slot 1 || fail
340 # keyfile [0] / keyfile [new]
341 $CRYPTSETUP luksChangeKey $LOOPDEV -d $KEY2 $KEY1 || fail
342 $CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 0: DISABLED" || fail
343 # passphrase [1] / passphrase [new]
344 echo -e "key1\nkey0\n" | $CRYPTSETUP luksChangeKey $LOOPDEV || fail
345 $CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 1: DISABLED" || fail
346 # use all slots
347 $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 -i 1 || fail
348 $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 -i 1 || fail
349 $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 -i 1 || fail
350 $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 -i 1 || fail
351 $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 -i 1 || fail
352 $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 -i 1 || fail
353 # still allows replace
354 $CRYPTSETUP luksChangeKey $LOOPDEV -d $KEY1 $KEY2 || fail
355 $CRYPTSETUP luksChangeKey $LOOPDEV -d $KEY1 $KEY2 2>/dev/null && fail
356
357 prepare "[24] Keyfile limit" wipe
358 $CRYPTSETUP -q luksFormat -i1 $LOOPDEV $KEY1 --key-slot 0 -l 13 || fail
359 $CRYPTSETUP --key-file=$KEY1 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
360 $CRYPTSETUP --key-file=$KEY1 -l 0 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
361 $CRYPTSETUP --key-file=$KEY1 -l -1 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
362 $CRYPTSETUP --key-file=$KEY1 -l 14 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
363 $CRYPTSETUP --key-file=$KEY1 -l 13 luksOpen $LOOPDEV $DEV_NAME || fail
364 $CRYPTSETUP luksClose  $DEV_NAME || fail
365 $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 2>/dev/null && fail
366 $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 -l 14 2>/dev/null && fail
367 $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 -l -1 2>/dev/null && fail
368 $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 -i1 -l 13 --new-keyfile-size 12 || fail
369 $CRYPTSETUP luksRemoveKey $LOOPDEV $KEY2 2>/dev/null && fail
370 $CRYPTSETUP luksRemoveKey $LOOPDEV $KEY2 -l 12 || fail
371 $CRYPTSETUP luksChangeKey $LOOPDEV -d $KEY1 $KEY2 2>/dev/null && fail
372 $CRYPTSETUP luksChangeKey $LOOPDEV -d $KEY1 $KEY2 -l 14 2>/dev/null && fail
373 $CRYPTSETUP luksChangeKey $LOOPDEV -d $KEY1 $KEY2 -i1 -l 13 || fail
374 # -l is ignored for stdin if _only_ passphrase is used
375 echo "key0" | $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY2 -i1 || fail
376 # this is stupid, but expected
377 echo "key0" | $CRYPTSETUP luksRemoveKey $LOOPDEV -l 2 2>/dev/null && fail
378 echo "key01" | $CRYPTSETUP luksRemoveKey $LOOPDEV -d 4 2>/dev/null && fail
379 echo -e "key0\n" | $CRYPTSETUP luksRemoveKey $LOOPDEV -d- -l 4 || fail
380
381 prepare "[25] Create non-overlapping segments" wipe
382 echo "key0" | $CRYPTSETUP create $DEV_NAME $LOOPDEV  --hash sha1 --offset   0 --size 256 || fail
383 echo "key0" | $CRYPTSETUP create $DEV_NAME2 $LOOPDEV --hash sha1 --offset 512 --size 256 2>/dev/null && fail
384 echo "key0" | $CRYPTSETUP create $DEV_NAME2 $LOOPDEV --hash sha1 --offset 512 --size 256 --shared || fail
385 echo "key0" | $CRYPTSETUP create $DEV_NAME3 $LOOPDEV --hash sha1 --offset 255 --size 256 --shared 2>/dev/null && fail
386 echo "key0" | $CRYPTSETUP create $DEV_NAME3 $LOOPDEV --hash sha1 --offset 256 --size 257 --shared 2>/dev/null && fail
387 echo "key0" | $CRYPTSETUP create $DEV_NAME3 $LOOPDEV --hash sha1 --offset 256 --size 1024 --shared 2>/dev/null && fail
388 echo "key0" | $CRYPTSETUP create $DEV_NAME3 $LOOPDEV --hash sha1 --offset 256 --size 256 --shared || fail
389 $CRYPTSETUP -q remove  $DEV_NAME3 || fail
390 $CRYPTSETUP -q remove  $DEV_NAME2 || fail
391 $CRYPTSETUP -q remove  $DEV_NAME || fail
392
393 prepare "[26] Suspend/Resume" wipe
394 # only LUKS is supported
395 echo "key0" | $CRYPTSETUP create $DEV_NAME --hash sha1 $LOOPDEV || fail
396 $CRYPTSETUP luksSuspend $DEV_NAME 2>/dev/null && fail
397 $CRYPTSETUP luksResume $DEV_NAME 2>/dev/null && fail
398 $CRYPTSETUP -q remove  $DEV_NAME || fail
399 $CRYPTSETUP luksSuspend $DEV_NAME 2>/dev/null && fail
400 # LUKS
401 echo "key0" | $CRYPTSETUP -q luksFormat $LOOPDEV || fail
402 echo "key0" | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME || fail
403 $CRYPTSETUP luksSuspend $DEV_NAME || fail
404 $CRYPTSETUP -q resize  $DEV_NAME 2>/dev/null && fail
405 echo "xxx" | $CRYPTSETUP luksResume $DEV_NAME -T 1 2>/dev/null && fail
406 echo "key0" | $CRYPTSETUP luksResume $DEV_NAME  || fail
407 $CRYPTSETUP -q luksClose $DEV_NAME || fail
408
409 remove_mapping
410 exit 0