Imported Upstream version 2.6.1
[platform/upstream/cryptsetup.git] / tests / compat-test2
1 #!/bin/bash
2
3 PS4='$LINENO:'
4 [ -z "$CRYPTSETUP_PATH" ] && CRYPTSETUP_PATH=".."
5 CRYPTSETUP=$CRYPTSETUP_PATH/cryptsetup
6
7 CRYPTSETUP_VALGRIND=../.libs/cryptsetup
8 CRYPTSETUP_LIB_VALGRIND=../.libs
9
10 DEV_NAME=dummy
11 DEV_NAME2=dummy2
12 DEV_NAME3=dummy3
13 ORIG_IMG=luks-test-orig
14 IMG=luks-test
15 IMG10=luks-test-v10
16 HEADER_IMG=luks-header
17 HEADER_KEYU=luks2_keyslot_unassigned.img
18 HEADER_LUKS2_PV=blkid-luks2-pv.img
19 KEY1=key1
20 KEY2=key2
21 KEY5=key5
22 KEYE=keye
23 PWD0="compatkey"
24 PWD1="93R4P4pIqAH8"
25 PWD2="mymJeD8ivEhE"
26 PWD3="ocMakf3fAcQO"
27 PWD4="Qx3qn46vq0v"
28 PWDW="rUkL4RUryBom"
29 TEST_KEYRING_NAME="compattest2_keyring"
30 TEST_TOKEN0="compattest2_desc0"
31 TEST_TOKEN1="compattest2_desc1"
32 TEST_TOKEN2="compattest2_desc2"
33 VK_FILE="compattest2_vkfile"
34 IMPORT_TOKEN="{\"type\":\"some_type\",\"keyslots\":[],\"base64_data\":\"zxI7vKB1Qwl4VPB4D-N-OgcC14hPCG0IDu8O7eCqaQ\"}"
35 TOKEN_FILE0=test-token-file0
36 TOKEN_FILE1=test-token-file1
37 KEY_FILE0=test-key-file0
38 KEY_FILE1=test-key-file1
39
40 FAST_PBKDF_OPT="--pbkdf pbkdf2 --pbkdf-force-iterations 1000"
41
42 TEST_UUID="12345678-1234-1234-1234-123456789abc"
43
44 LOOPDEV=$(losetup -f 2>/dev/null)
45 FIPS_MODE=$(cat /proc/sys/crypto/fips_enabled 2>/dev/null)
46
47 function remove_mapping()
48 {
49         [ -b /dev/mapper/$DEV_NAME3 ] && dmsetup remove --retry $DEV_NAME3
50         [ -b /dev/mapper/$DEV_NAME2 ] && dmsetup remove --retry $DEV_NAME2
51         [ -b /dev/mapper/$DEV_NAME ] && dmsetup remove --retry $DEV_NAME
52         losetup -d $LOOPDEV >/dev/null 2>&1
53         rm -f $ORIG_IMG $IMG $IMG10 $KEY1 $KEY2 $KEY5 $KEYE $HEADER_IMG $HEADER_KEYU $VK_FILE $HEADER_LUKS2_PV missing-file $TOKEN_FILE0 $TOKEN_FILE1 test_image_* $KEY_FILE0 $KEY_FILE1 >/dev/null 2>&1
54
55         # unlink whole test keyring
56         [ -n "$TEST_KEYRING" ] && keyctl unlink $TEST_KEYRING "@u" >/dev/null
57         unset TEST_KEYRING
58
59         rmmod scsi_debug >/dev/null 2>&1
60         scsi_debug_teardown $DEV
61 }
62
63 function force_uevent()
64 {
65         DNAME=$(echo $LOOPDEV | cut -f3 -d /)
66         echo "change" >/sys/block/$DNAME/uevent
67 }
68
69 function fail()
70 {
71         [ -n "$1" ] && echo "$1"
72         remove_mapping
73         echo "FAILED backtrace:"
74         while caller $frame; do ((frame++)); done
75         exit 2
76 }
77
78 function fips_mode()
79 {
80         [ -n "$FIPS_MODE" ] && [ "$FIPS_MODE" -gt 0 ]
81 }
82
83 function can_fail_fips()
84 {
85         # Ignore this fail if running in FIPS mode
86         fips_mode || fail $1
87 }
88
89 function skip()
90 {
91         [ -n "$1" ] && echo "$1"
92         remove_mapping
93         exit 77
94 }
95
96 function prepare()
97 {
98         [ -b /dev/mapper/$DEV_NAME ] && dmsetup remove --retry $DEV_NAME
99
100         case "$2" in
101         wipe)
102                 remove_mapping
103                 dd if=/dev/zero of=$IMG bs=1M count=40 >/dev/null 2>&1
104                 sync
105                 losetup $LOOPDEV $IMG
106                 ;;
107         new)
108                 remove_mapping
109                 xz -cd compatimage.img.xz > $IMG
110                 xz -dk $HEADER_KEYU.xz
111                 # FIXME: switch to internal loop (no losetup at all)
112                 echo "bad" | $CRYPTSETUP luksOpen --key-slot 0 --test-passphrase $IMG 2>&1 | \
113                         grep "autoclear flag" && skip "WARNING: Too old kernel, test skipped."
114                 losetup $LOOPDEV $IMG
115                 xz -cd compatv10image.img.xz > $IMG10
116                 ;;
117         reuse | *)
118                 if [ ! -e $IMG ]; then
119                         xz -cd compatimage.img.xz > $IMG
120                         losetup $LOOPDEV $IMG
121                 fi
122                 [ ! -e $IMG10 ] && xz -cd compatv10image.img.xz > $IMG10
123                 ;;
124         esac
125
126         if [ ! -e $KEY1 ]; then
127                 #dd if=/dev/urandom of=$KEY1 count=1 bs=32 >/dev/null 2>&1
128                 echo -n $'\x48\xc6\x74\x4f\x41\x4e\x50\xc0\x79\xc2\x2d\x5b\x5f\x68\x84\x17' >$KEY1
129                 echo -n $'\x9c\x03\x5e\x1b\x4d\x0f\x9a\x75\xb3\x90\x70\x32\x0a\xf8\xae\xc4'>>$KEY1
130         fi
131
132         if [ ! -e $KEY2 ]; then
133                 dd if=/dev/urandom of=$KEY2 count=1 bs=16 >/dev/null 2>&1
134         fi
135
136         if [ ! -e $KEY5 ]; then
137                 dd if=/dev/urandom of=$KEY5 count=1 bs=16 >/dev/null 2>&1
138         fi
139
140         if [ ! -e $KEYE ]; then
141                 touch $KEYE
142         fi
143
144         cp $IMG $ORIG_IMG
145         [ -n "$1" ] && echo "CASE: $1"
146 }
147
148 function check_exists()
149 {
150         [ -b /dev/mapper/$DEV_NAME ] || fail
151 }
152
153 function valgrind_setup()
154 {
155         command -v valgrind >/dev/null || fail "Cannot find valgrind."
156         [ ! -f $CRYPTSETUP_VALGRIND ] && fail "Unable to get location of cryptsetup executable."
157         export LD_LIBRARY_PATH="$CRYPTSETUP_LIB_VALGRIND:$LD_LIBRARY_PATH"
158 }
159
160 function valgrind_run()
161 {
162         INFOSTRING="$(basename ${BASH_SOURCE[1]})-line-${BASH_LINENO[0]}" ./valg.sh ${CRYPTSETUP_VALGRIND} "$@"
163 }
164
165 function dm_crypt_keyring_support()
166 {
167         VER_STR=$(dmsetup targets | grep crypt | cut -f2 -dv)
168         [ -z "$VER_STR" ] && fail "Failed to parse dm-crypt version."
169
170         VER_MAJ=$(echo $VER_STR | cut -f 1 -d.)
171         VER_MIN=$(echo $VER_STR | cut -f 2 -d.)
172         VER_PTC=$(echo $VER_STR | cut -f 3 -d.)
173
174         test -d /proc/sys/kernel/keys || return 1
175
176         [ $VER_MAJ -gt 1 ] && return 0
177         [ $VER_MAJ -eq 1 -a $VER_MIN -gt 18 ] && return 0
178         [ $VER_MAJ -eq 1 -a $VER_MIN -eq 18 -a $VER_PTC -ge 1 ] && return 0
179         return 1
180 }
181
182 function dm_crypt_keyring_flawed()
183 {
184         dm_crypt_keyring_support && return 1;
185
186         [ $VER_MAJ -gt 1 ] && return 0
187         [ $VER_MAJ -eq 1 -a $VER_MIN -ge 15 ] && return 0
188         return 1
189 }
190
191 function dm_crypt_keyring_new_kernel()
192 {
193         KER_STR=$(uname -r)
194         [ -z "$KER_STR" ] && fail "Failed to parse kernel version."
195         KER_MAJ=$(echo $KER_STR | cut -f 1 -d.)
196         KER_MIN=$(echo $KER_STR | cut -f 2 -d.)
197
198         [ $KER_MAJ -ge 5 ] && return 0
199         [ $KER_MAJ -eq 4 -a $KER_MIN -ge 15 ] && return 0
200         return 1
201 }
202
203 function dm_crypt_sector_size_support()
204 {
205         VER_STR=$(dmsetup targets | grep crypt | cut -f2 -dv)
206         [ -z "$VER_STR" ] && fail "Failed to parse dm-crypt version."
207
208         VER_MAJ=$(echo $VER_STR | cut -f 1 -d.)
209         VER_MIN=$(echo $VER_STR | cut -f 2 -d.)
210         VER_PTC=$(echo $VER_STR | cut -f 3 -d.)
211
212         if [ $VER_MIN -ge 17 -o \( $VER_MIN -eq 14 -a $VER_PTC -ge 5 \) ]; then
213                 return 0
214         fi
215
216         return 1
217 }
218
219 function test_and_prepare_keyring() {
220         command -v keyctl >/dev/null || skip "Cannot find keyctl, test skipped"
221         keyctl list "@s" > /dev/null || skip "Current session keyring is unreachable, test skipped"
222         TEST_KEYRING=$(keyctl newring $TEST_KEYRING_NAME "@u" 2> /dev/null)
223         test -n "$TEST_KEYRING" || skip "Failed to create keyring in user keyring"
224         keyctl search "@s" keyring "$TEST_KEYRING" > /dev/null 2>&1 || keyctl link "@u" "@s" > /dev/null 2>&1
225         load_key user test_key test_data "$TEST_KEYRING" || skip "Kernel keyring service is useless on this system, test skipped."
226 }
227
228 # $1 type
229 # $2 description
230 # $3 payload
231 # $4 keyring
232 function load_key()
233 {
234         keyctl add $@ >/dev/null
235 }
236
237 function setup_luks2_env() {
238         echo $PWD1 | $CRYPTSETUP luksFormat --type luks2 $FAST_PBKDF_OPT $LOOPDEV || fail
239         $CRYPTSETUP luksDump $LOOPDEV >/dev/null || fail
240         echo $PWD1 | $CRYPTSETUP open $LOOPDEV $DEV_NAME || fail
241         HAVE_KEYRING=$($CRYPTSETUP status $DEV_NAME | grep "keyring")
242         if [ -n "$HAVE_KEYRING" ]; then
243                 HAVE_KEYRING=1
244         else
245                 HAVE_KEYRING=0
246         fi
247         if $($CRYPTSETUP --version | grep -q "BLKID"); then
248                 HAVE_BLKID=1
249         else
250                 HAVE_BLKID=0
251         fi
252         $CRYPTSETUP close $DEV_NAME || fail
253 }
254
255 # $1 path to scsi debug bdev
256 scsi_debug_teardown() {
257         local _tries=15;
258
259         while [ -b "$1" -a $_tries -gt 0 ]; do
260                 rmmod scsi_debug >/dev/null 2>&1
261                 if [ -b "$1" ]; then
262                         sleep .1
263                         _tries=$((_tries-1))
264                 fi
265         done
266
267         test ! -b "$1" || rmmod scsi_debug >/dev/null 2>&1
268 }
269
270 function add_scsi_device() {
271         scsi_debug_teardown $DEV
272         if [ -d /sys/module/scsi_debug ] ; then
273                 echo "Cannot use scsi_debug module (in use or compiled-in), test skipped."
274                 exit 77
275         fi
276         modprobe scsi_debug $@ delay=0 >/dev/null 2>&1
277         if [ $? -ne 0 ] ; then
278                 echo "This kernel seems to not support proper scsi_debug module, test skipped."
279                 exit 77
280         fi
281
282         sleep 1
283         DEV="/dev/"$(grep -l -e scsi_debug /sys/block/*/device/model | cut -f4 -d /)
284         [ -b $DEV ] || fail "Cannot find $DEV."
285 }
286
287 export LANG=C
288
289 [ ! -x "$CRYPTSETUP" ] && skip "Cannot find $CRYPTSETUP, test skipped."
290 [ $(id -u) != 0 ] && skip "WARNING: You must be root to run this test, test skipped."
291 [ -z "$LOOPDEV" ] && skip "WARNING: Cannot find free loop device, test skipped."
292
293 prepare "[0] Detect LUKS2 environment" wipe
294 setup_luks2_env
295
296 [ -n "$VALG" ] && valgrind_setup && CRYPTSETUP=valgrind_run
297
298 prepare "[1] Data offset" wipe
299 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --offset 1 2>/dev/null && fail
300 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --offset 16385 2>/dev/null && fail
301 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --offset 32 2>/dev/null && fail
302 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --align-payload 16384 --offset 16384 2>/dev/null && fail
303 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --offset 16384 || fail
304 $CRYPTSETUP -q luksDump  $LOOPDEV | grep -q "offset: $((512 * 16384)) \[bytes\]" || fail
305 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size 1024 --offset 16384 >/dev/null || fail
306 $CRYPTSETUP -q luksDump  $LOOPDEV | grep -q "offset: $((512 * 16384)) \[bytes\]" || fail
307 truncate -s 4096 $HEADER_IMG
308 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --header $HEADER_IMG -q --offset 80000 >/dev/null 2>&1 || fail
309
310 prepare "[2] Sector size and old payload alignment" wipe
311 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size  511 2>/dev/null && fail
312 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size  256 2>/dev/null && fail
313 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size 8192 2>/dev/null && fail
314 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size  512 || fail
315 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --align-payload 5 || fail
316 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size  512 --align-payload 5 || fail
317 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size 2048 --align-payload 32 >/dev/null || fail
318 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size 4096 >/dev/null || fail
319 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size 2048 --align-payload 32768 >/dev/null || fail
320 $CRYPTSETUP -q luksDump  $LOOPDEV | grep -q "offset: $((512 * 32768)) \[bytes\]" || fail
321 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size 2048 >/dev/null || fail
322 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -q --sector-size 4096 --align-payload 32768 >/dev/null || fail
323 $CRYPTSETUP -q luksDump  $LOOPDEV | grep -q "offset: $((512 * 32768)) \[bytes\]" || fail
324
325 prepare "[3] format" wipe
326 echo $PWD1 | $CRYPTSETUP -q $FAST_PBKDF_OPT -c aes-cbc-essiv:sha256 -s 128 luksFormat --type luks2 $LOOPDEV || fail
327 prepare "[4] format using hash sha512" wipe
328 echo $PWD1 | $CRYPTSETUP $FAST_PBKDF_OPT -h sha512 -c aes-cbc-essiv:sha256 -s 128 luksFormat --type luks2 $LOOPDEV || fail
329 $CRYPTSETUP -q luksDump  $LOOPDEV | grep "0: pbkdf2" -A2 | grep "Hash:" | grep -qe sha512 || fail
330 # Check JSON dump for some mandatory section
331 $CRYPTSETUP -q luksDump  $LOOPDEV --dump-json-metadata | grep -q '"tokens":' || fail
332
333 prepare "[5] open"
334 echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME --test-passphrase || fail
335 echo $PWDW | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME --test-passphrase 2>/dev/null && fail
336 [ $? -ne 2 ] && fail "luksOpen should return EPERM exit code"
337 echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail
338 check_exists
339
340 # Key Slot 1 and key material section 1 must change, the rest must not.
341 prepare "[6] add key"
342 echo -e "$PWD1\n$PWD2" | $CRYPTSETUP luksAddKey $LOOPDEV $FAST_PBKDF_OPT || fail
343 echo $PWD2 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail
344
345 # Unsuccessful Key Delete - nothing may change
346 prepare "[7] unsuccessful delete"
347 echo $PWDW | $CRYPTSETUP luksKillSlot $LOOPDEV 1 2>/dev/null && fail
348 [ $? -ne 2 ] && fail "luksKillSlot should return EPERM exit code"
349 #FIXME
350 #$CRYPTSETUP -q luksKillSlot $LOOPDEV 8 2>/dev/null && fail
351 #$CRYPTSETUP -q luksKillSlot $LOOPDEV 7 2>/dev/null && fail
352
353 # Delete Key Test
354 # Key Slot 1 and key material section 1 must change, the rest must not
355 prepare "[8] successful delete"
356 $CRYPTSETUP -q luksKillSlot $LOOPDEV 1 || fail
357 echo $PWD2 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME 2> /dev/null && fail
358 [ $? -ne 2 ] && fail "luksOpen should return EPERM exit code"
359 echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail
360
361 # Key Slot 1 and key material section 1 must change, the rest must not
362 prepare "[9] add key test for key files"
363 echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV $KEY1 || fail
364 $CRYPTSETUP -d $KEY1 luksOpen $LOOPDEV $DEV_NAME || fail
365
366 # Key Slot 1 and key material section 1 must change, the rest must not
367 prepare "[10] delete key test with key1 as remaining key"
368 $CRYPTSETUP -d $KEY1 luksKillSlot $LOOPDEV 0 || fail
369 echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
370 $CRYPTSETUP luksOpen -d $KEY1 $LOOPDEV $DEV_NAME || fail
371
372 # Delete last slot
373 prepare "[11] delete last key" wipe
374 echo $PWD1 | $CRYPTSETUP luksFormat --type luks2 $LOOPDEV $FAST_PBKDF_OPT || fail
375 echo $PWD1 | $CRYPTSETUP luksKillSlot $LOOPDEV 0 || fail
376 echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
377
378 # Format test for ESSIV, and some other parameters.
379 prepare "[12] parameter variation test" wipe
380 $CRYPTSETUP -q $FAST_PBKDF_OPT -c aes-cbc-essiv:sha256 -s 128 luksFormat --type luks2 $LOOPDEV $KEY1 || fail
381 $CRYPTSETUP -d $KEY1 luksOpen $LOOPDEV $DEV_NAME || fail
382
383 prepare "[13] open/close - stacked devices" wipe
384 echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 $LOOPDEV $FAST_PBKDF_OPT || fail
385 echo $PWD1 | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME || fail
386 echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 /dev/mapper/$DEV_NAME $FAST_PBKDF_OPT || fail
387 echo $PWD1 | $CRYPTSETUP -q luksOpen /dev/mapper/$DEV_NAME $DEV_NAME2 || fail
388 $CRYPTSETUP -q luksClose  $DEV_NAME2 || fail
389 $CRYPTSETUP -q luksClose  $DEV_NAME || fail
390
391 prepare "[14] format/open - passphrase on stdin & new line" wipe
392 # stdin defined by "-" must take even newline
393 #echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP -q luksFormat $LOOPDEV - || fail
394 echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP $FAST_PBKDF_OPT -q --key-file=- luksFormat --type luks2 $LOOPDEV || fail
395 echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP -q --key-file=- luksOpen $LOOPDEV $DEV_NAME || fail
396 $CRYPTSETUP -q luksClose  $DEV_NAME || fail
397 echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
398 # now also try --key-file
399 echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP $FAST_PBKDF_OPT -q luksFormat --type luks2 $LOOPDEV --key-file=- || fail
400 echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP -q --key-file=- luksOpen $LOOPDEV $DEV_NAME || fail
401 $CRYPTSETUP -q luksClose  $DEV_NAME || fail
402 # process newline if from stdin
403 echo -n -e "$PWD1\n$PWD2" | $CRYPTSETUP $FAST_PBKDF_OPT -q luksFormat --type luks2 $LOOPDEV || fail
404 echo "$PWD1" | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME || fail
405 $CRYPTSETUP -q luksClose  $DEV_NAME || fail
406
407 prepare "[15] UUID - use and report provided UUID" wipe
408 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --uuid blah --type luks2 $LOOPDEV 2>/dev/null && fail
409 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --uuid $TEST_UUID --type luks2 $LOOPDEV || fail
410 tst=$($CRYPTSETUP -q luksUUID $LOOPDEV)
411 [ "$tst"x = "$TEST_UUID"x ] || fail
412 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV || fail
413 $CRYPTSETUP -q luksUUID --uuid $TEST_UUID $LOOPDEV || fail
414 tst=$($CRYPTSETUP -q luksUUID $LOOPDEV)
415 [ "$tst"x = "$TEST_UUID"x ] || fail
416
417 prepare "[16] luksFormat" wipe
418 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --volume-key-file /dev/urandom --type luks2 $LOOPDEV || fail
419 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --volume-key-file /dev/urandom --type luks2 $LOOPDEV -d $KEY1 || fail
420 $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --volume-key-file /dev/urandom -s 256 --uuid $TEST_UUID --type luks2 $LOOPDEV $KEY1 || fail
421 $CRYPTSETUP luksOpen -d $KEY1 $LOOPDEV $DEV_NAME || fail
422 $CRYPTSETUP -q luksClose  $DEV_NAME || fail
423 # open by UUID
424 if [ -d /dev/disk/by-uuid ] ; then
425         force_uevent # some systems do not update loop by-uuid
426         $CRYPTSETUP luksOpen -d $KEY1 UUID=X$TEST_UUID $DEV_NAME 2>/dev/null && fail
427         $CRYPTSETUP luksOpen -d $KEY1 UUID=$TEST_UUID $DEV_NAME || fail
428         $CRYPTSETUP -q luksClose  $DEV_NAME || fail
429 fi
430 # skip tests using empty passphrases
431 if [ ! fips_mode ]; then
432 # empty keyfile
433 $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV $KEYE || fail
434 $CRYPTSETUP luksOpen -d $KEYE $LOOPDEV $DEV_NAME || fail
435 $CRYPTSETUP -q luksClose  $DEV_NAME || fail
436 fi
437
438 # open by volume key
439 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT -s 256 --volume-key-file $KEY1 --type luks2 $LOOPDEV || fail
440 $CRYPTSETUP luksOpen --volume-key-file /dev/urandom $LOOPDEV $DEV_NAME 2>/dev/null && fail
441 $CRYPTSETUP luksOpen --volume-key-file $KEY1 $LOOPDEV $DEV_NAME || fail
442 $CRYPTSETUP -q luksClose  $DEV_NAME || fail
443
444 prepare "[17] AddKey volume key, passphrase and keyfile" wipe
445 # volumekey
446 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --volume-key-file /dev/zero --key-slot 3 || fail
447 echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV --test-passphrase || fail
448 $CRYPTSETUP luksDump $LOOPDEV | grep -q "3: luks2" || fail
449 echo $PWD2 | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT $LOOPDEV --volume-key-file /dev/zero --key-slot 4 || fail
450 echo $PWD2 | $CRYPTSETUP luksOpen $LOOPDEV --test-passphrase --key-slot 4 || fail
451 $CRYPTSETUP luksDump $LOOPDEV | grep -q "4: luks2" || fail
452 echo $PWD3 | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT $LOOPDEV --volume-key-file /dev/null --key-slot 5 2>/dev/null && fail
453 $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT $LOOPDEV --volume-key-file /dev/zero --key-slot 5 $KEY1 || fail
454 $CRYPTSETUP luksOpen $LOOPDEV --test-passphrase --key-slot 5 -d $KEY1 || fail
455 $CRYPTSETUP luksDump $LOOPDEV | grep -q "5: luks2" || fail
456
457 # special "-" handling
458 $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV $KEY1 --key-slot 3 || fail
459 echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV -d $KEY1 - || fail
460 echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV --test-passphrase 2>/dev/null && fail
461 echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV -d - --test-passphrase || fail
462 echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV -d - $KEY2 || fail
463 $CRYPTSETUP luksOpen $LOOPDEV -d $KEY2 --test-passphrase || fail
464 echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV -d - -d $KEY1 --test-passphrase 2>/dev/null && fail
465 echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV -d $KEY1 -d $KEY1 --test-passphrase 2>/dev/null && fail
466
467 # [0]PWD1 [1]PWD2 [2]$KEY1/1 [3]$KEY1 [4]$KEY2
468 $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV $KEY1 --key-slot 3 || fail
469 $CRYPTSETUP luksDump $LOOPDEV | grep -q "3: luks2" || fail
470 $CRYPTSETUP luksAddKey -q $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 $KEY2 --key-slot 3 2>/dev/null && fail
471 # keyfile/keyfile
472 $CRYPTSETUP luksAddKey -q $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 $KEY2 --key-slot 4 || fail
473 $CRYPTSETUP luksOpen $LOOPDEV -d $KEY2 --test-passphrase --key-slot 4 || fail
474 $CRYPTSETUP luksDump $LOOPDEV | grep -q "4: luks2" || fail
475 # passphrase/keyfile
476 echo $PWD1 | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT $LOOPDEV -d $KEY1 --key-slot 0 || fail
477 $CRYPTSETUP luksDump $LOOPDEV | grep -q "0: luks2" || fail
478 echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV --test-passphrase --key-slot 0 || fail
479 # passphrase/passphrase
480 echo -e "$PWD1\n$PWD2\n" | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT $LOOPDEV --key-slot 1 || fail
481 echo $PWD2 | $CRYPTSETUP luksOpen $LOOPDEV --test-passphrase --key-slot 1 || fail
482 $CRYPTSETUP luksDump $LOOPDEV | grep -q "1: luks2" || fail
483 # keyfile/passphrase
484 echo -e "$PWD2\n" | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT $LOOPDEV $KEY1 --key-slot 2 --new-keyfile-size 8 || fail
485 $CRYPTSETUP luksDump $LOOPDEV | grep -q "2: luks2" || fail
486
487 prepare "[18] RemoveKey passphrase and keyfile" reuse
488 $CRYPTSETUP luksDump $LOOPDEV | grep -q "3: luks2" || fail
489 $CRYPTSETUP luksRemoveKey $LOOPDEV $KEY1 || fail
490 $CRYPTSETUP luksDump $LOOPDEV | grep -q "3: luks2" && fail
491 $CRYPTSETUP luksRemoveKey $LOOPDEV $KEY1 2>/dev/null && fail
492 [ $? -ne 2 ] && fail "luksRemoveKey should return EPERM exit code"
493 $CRYPTSETUP luksRemoveKey $LOOPDEV $KEY2 --keyfile-size 1 2>/dev/null && fail
494 $CRYPTSETUP luksDump $LOOPDEV | grep -q "4: luks2" || fail
495 $CRYPTSETUP luksRemoveKey $LOOPDEV $KEY2 || fail
496 $CRYPTSETUP luksDump $LOOPDEV | grep -q "4: luks2" && fail
497 # if password or keyfile is provided, batch mode must not suppress it
498 echo "badpw" | $CRYPTSETUP luksKillSlot $LOOPDEV 2 2>/dev/null && fail
499 echo "badpw" | $CRYPTSETUP luksKillSlot $LOOPDEV 2 -q 2>/dev/null && fail
500 echo "badpw" | $CRYPTSETUP luksKillSlot $LOOPDEV 2 --key-file=- 2>/dev/null && fail
501 echo "badpw" | $CRYPTSETUP luksKillSlot $LOOPDEV 2 --key-file=- -q 2>/dev/null && fail
502 $CRYPTSETUP luksDump $LOOPDEV | grep -q "2: luks2" || fail
503 # kill slot using passphrase from 1
504 echo $PWD2 | $CRYPTSETUP luksKillSlot $LOOPDEV 2 2>/dev/null || fail
505 $CRYPTSETUP luksDump $LOOPDEV | grep -q "2: luks2" && fail
506 # remove key0 / slot 0
507 echo $PWD1 | $CRYPTSETUP luksRemoveKey $LOOPDEV || fail
508 $CRYPTSETUP luksDump $LOOPDEV | grep -q "0: luks2" && fail
509 # last keyslot, in batch mode no passphrase needed...
510 $CRYPTSETUP luksKillSlot -q $LOOPDEV 1 || fail
511 $CRYPTSETUP luksDump $LOOPDEV | grep -q "1: luks2" && fail
512
513 prepare "[19] create & status & resize" wipe
514 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV || fail
515 echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail
516 if dm_crypt_keyring_support; then
517         echo | $CRYPTSETUP -q resize --size 100 $DEV_NAME 2>/dev/null && fail
518         if [ $HAVE_KEYRING -gt 0 -a -d /proc/sys/kernel/keys ]; then
519                 test_and_prepare_keyring
520                 load_key user $TEST_TOKEN2 $PWD1 "$TEST_KEYRING" || skip "Kernel keyring service is useless on this system, test skipped."
521                 $CRYPTSETUP token add $LOOPDEV --key-description $TEST_TOKEN2 --token-id 1 || fail
522                 $CRYPTSETUP -q resize --size 99 $DEV_NAME <&- || fail
523                 $CRYPTSETUP -q status  $DEV_NAME | grep "size:" | grep -q "99 sectors" || fail
524                 #replace kernel key with wrong pass
525                 load_key user $TEST_TOKEN2 $PWD2 "$TEST_KEYRING" || skip "Kernel keyring service is useless on this system, test skipped."
526                 # must fail due to --token-only
527                 echo $PWD1 | $CRYPTSETUP -q resize --token-only --size 100 $DEV_NAME && fail
528                 $CRYPTSETUP -q status  $DEV_NAME | grep "size:" | grep -q "100 sectors" && fail
529         fi
530 fi
531 echo $PWD1 | $CRYPTSETUP -q resize --size 100 $DEV_NAME || fail
532 $CRYPTSETUP -q status  $DEV_NAME | grep "size:" | grep -q "100 sectors" || fail
533 echo $PWD1 | $CRYPTSETUP -q resize --device-size 51200 $DEV_NAME || fail
534 $CRYPTSETUP -q status  $DEV_NAME | grep "size:" | grep -q "100 sectors" || fail
535 echo $PWD1 | $CRYPTSETUP -q resize --device-size 1M $DEV_NAME || fail
536 $CRYPTSETUP -q status  $DEV_NAME | grep "size:" | grep -q "2048 sectors" || fail
537 echo $PWD1 | $CRYPTSETUP -q resize --device-size 512k --size 1024 $DEV_NAME > /dev/null 2>&1 && fail
538 echo $PWD1 | $CRYPTSETUP -q resize --device-size 4097 $DEV_NAME > /dev/null 2>&1 && fail
539 $CRYPTSETUP -q status  $DEV_NAME | grep "size:" | grep -q "2048 sectors" || fail
540 $CRYPTSETUP close $DEV_NAME || fail
541 echo $PWD1 | $CRYPTSETUP luksOpen --disable-keyring $LOOPDEV $DEV_NAME || fail
542 echo | $CRYPTSETUP -q resize --size 100 $DEV_NAME || fail
543 $CRYPTSETUP -q status  $DEV_NAME | grep "size:" | grep -q "100 sectors" || fail
544 $CRYPTSETUP close $DEV_NAME || fail
545 echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail
546 if dm_crypt_keyring_support; then
547         $CRYPTSETUP -q resize --disable-keyring --size 100 $DEV_NAME 2>/dev/null && fail
548 fi
549 if dm_crypt_sector_size_support; then
550         $CRYPTSETUP close $DEV_NAME || fail
551         echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 --sector-size 4096 $LOOPDEV > /dev/null || fail
552         echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail
553         echo $PWD1 | $CRYPTSETUP -q resize --device-size 1M $DEV_NAME || fail
554         $CRYPTSETUP -q status  $DEV_NAME | grep "size:" | grep -q "2048 sectors" || fail
555         echo $PWD1 | $CRYPTSETUP -q resize --device-size 2049s $DEV_NAME > /dev/null 2>&1 && fail
556         echo $PWD1 | $CRYPTSETUP -q resize --size 2049 $DEV_NAME > /dev/null 2>&1 && fail
557         $CRYPTSETUP -q status  $DEV_NAME | grep "size:" | grep -q "2048 sectors" || fail
558 fi
559 $CRYPTSETUP close $DEV_NAME || fail
560 # Resize not aligned to logical block size
561 add_scsi_device dev_size_mb=32 sector_size=4096
562 echo $PWD1 | $CRYPTSETUP luksFormat --type luks2 $FAST_PBKDF_OPT $DEV || fail
563 echo $PWD1 | $CRYPTSETUP open $DEV $DEV_NAME || fail
564 OLD_SIZE=$($CRYPTSETUP status $DEV_NAME | grep "^ \+size:" | sed 's/.* \([0-9]\+\) .*/\1/') #'
565 echo $PWD1 | $CRYPTSETUP resize $DEV_NAME -b 7 2> /dev/null && fail
566 dmsetup info $DEV_NAME | grep -q SUSPENDED && fail
567 NEW_SIZE=$($CRYPTSETUP status $DEV_NAME | grep "^ \+size:" | sed 's/.* \([0-9]\+\) .*/\1/') #'
568 test $OLD_SIZE -eq $NEW_SIZE || fail
569 $CRYPTSETUP close $DEV_NAME || fail
570
571 prepare "[20] Disallow open/create if already mapped." wipe
572 $CRYPTSETUP create $DEV_NAME $LOOPDEV -d $KEY1 || fail
573 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV 2>/dev/null && fail
574 $CRYPTSETUP remove  $DEV_NAME || fail
575 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV || fail
576 echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME || fail
577 echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV $DEV_NAME2 2>/dev/null && fail
578 $CRYPTSETUP  luksClose  $DEV_NAME || fail
579
580 prepare "[21] luksDump" wipe
581 echo $PWD1 | $CRYPTSETUP -q luksFormat --key-size 256 $FAST_PBKDF_OPT --uuid $TEST_UUID --type luks2 $LOOPDEV $KEY1 || fail
582 echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT $LOOPDEV -d $KEY1 || fail
583 $CRYPTSETUP luksDump $LOOPDEV | grep -q "0: luks2" || fail
584 $CRYPTSETUP luksDump $LOOPDEV | grep -q $TEST_UUID || fail
585 echo $PWDW | $CRYPTSETUP luksDump $LOOPDEV --dump-volume-key 2>/dev/null && fail
586 echo $PWD1 | $CRYPTSETUP luksDump $LOOPDEV --dump-volume-key | grep -q "MK dump:" || fail
587 $CRYPTSETUP luksDump -q $LOOPDEV --dump-volume-key -d $KEY1 | grep -q "MK dump:" || fail
588 echo $PWD1 | $CRYPTSETUP luksDump -q $LOOPDEV --dump-master-key --master-key-file $VK_FILE >/dev/null || fail
589 rm -f $VK_FILE
590 echo $PWD1 | $CRYPTSETUP luksDump -q $LOOPDEV --dump-volume-key --volume-key-file $VK_FILE >/dev/null || fail
591 echo $PWD1 | $CRYPTSETUP luksDump -q $LOOPDEV --dump-volume-key --volume-key-file $VK_FILE 2>/dev/null && fail
592 echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT --volume-key-file $VK_FILE $LOOPDEV || fail
593 # Use volume key file without keyslots
594 $CRYPTSETUP luksErase -q $LOOPDEV || fail
595 $CRYPTSETUP luksOpen --volume-key-file $VK_FILE --key-size 256 --test-passphrase $LOOPDEV || fail
596 echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT --volume-key-file $VK_FILE --key-size 256 $LOOPDEV || fail
597 echo $PWD1 | $CRYPTSETUP luksOpen --test-passphrase $LOOPDEV || fail
598
599 prepare "[22] remove disappeared device" wipe
600 dmsetup create $DEV_NAME --table "0 39998 linear $LOOPDEV 2" || fail
601 echo $PWD1 | $CRYPTSETUP -q $FAST_PBKDF_OPT luksFormat --type luks2 /dev/mapper/$DEV_NAME || fail
602 echo $PWD1 | $CRYPTSETUP -q luksOpen /dev/mapper/$DEV_NAME $DEV_NAME2 || fail
603 # underlying device now returns error but node is still present
604 dmsetup load $DEV_NAME --table "0 40000 error" || fail
605 dmsetup resume $DEV_NAME || fail
606 $CRYPTSETUP -q luksClose $DEV_NAME2 || fail
607 dmsetup remove --retry $DEV_NAME || fail
608
609 prepare "[23] ChangeKey passphrase and keyfile" wipe
610 # [0]$KEY1 [1]key0
611 $CRYPTSETUP -q luksFormat --type luks2 $LOOPDEV $KEY1 $FAST_PBKDF_OPT --key-slot 0 --key-size 256 --luks2-keyslots-size 256k >/dev/null || fail
612 echo $PWD1 | $CRYPTSETUP luksAddKey -q $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 --key-slot 1 || fail
613 # keyfile [0] / keyfile [0]
614 $CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 $KEY2 --key-slot 0 || fail
615 # passphrase [1] / passphrase [1]
616 echo -e "$PWD1\n$PWD2\n" | $CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT --key-slot 1 || fail
617 # keyfile [0] / keyfile [new] - with LUKS2 it should stay
618 $CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY2 $KEY1 || fail
619 $CRYPTSETUP luksDump $LOOPDEV | grep -q "0: luks2" || fail
620 $CRYPTSETUP luksDump $LOOPDEV | grep -q "2: luks2" && fail
621 # passphrase [1] / passphrase [new]
622 echo -e "$PWD2\n$PWD1\n" | $CRYPTSETUP luksChangeKey $FAST_PBKDF_OPT $LOOPDEV || fail
623 $CRYPTSETUP luksDump $LOOPDEV | grep -q "1: luks2" || fail
624 $CRYPTSETUP luksDump $LOOPDEV | grep -q "2: luks2" && fail
625 # test out of raw area, change in-place (space only for 2 keyslots)
626 $CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 $KEY2 || fail
627 $CRYPTSETUP luksDump $LOOPDEV | grep -q "0: luks2" || fail
628 $CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 $KEY2 2>/dev/null && fail
629
630 prepare "[24] Keyfile limit" wipe
631 $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV $KEY1 --key-slot 0 -l 13 || fail
632 $CRYPTSETUP --key-file=$KEY1 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
633 $CRYPTSETUP --key-file=$KEY1 -l 0 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
634 $CRYPTSETUP --key-file=$KEY1 -l -1 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
635 $CRYPTSETUP --key-file=$KEY1 -l 14 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
636 $CRYPTSETUP --key-file=$KEY1 -l 13 --keyfile-offset 1 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
637 $CRYPTSETUP --key-file=$KEY1 -l 13 --keyfile-offset -1 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
638 $CRYPTSETUP --key-file=$KEY1 -l 13 luksOpen $LOOPDEV $DEV_NAME || fail
639 $CRYPTSETUP luksClose  $DEV_NAME || fail
640 $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 2>/dev/null && fail
641 $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 -l 14 2>/dev/null && fail
642 $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 -l -1 2>/dev/null && fail
643 $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT -l 13 --new-keyfile-size 12 || fail
644 $CRYPTSETUP luksRemoveKey $LOOPDEV $KEY2 2>/dev/null && fail
645 $CRYPTSETUP luksRemoveKey $LOOPDEV $KEY2 -l 12 || fail
646 $CRYPTSETUP luksChangeKey $LOOPDEV -d $KEY1 $KEY2 2>/dev/null && fail
647 [ $? -ne 2 ] && fail "luksChangeKey should return EPERM exit code"
648 $CRYPTSETUP luksChangeKey $LOOPDEV -d $KEY1 $KEY2 -l 14 2>/dev/null && fail
649 $CRYPTSETUP luksChangeKey $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT -l 13 || fail
650 # -l is ignored for stdin if _only_ passphrase is used
651 echo $PWD1 | $CRYPTSETUP luksAddKey $LOOPDEV -d $KEY2 $FAST_PBKDF_OPT || fail
652 # this is stupid, but expected
653 echo $PWD1 | $CRYPTSETUP luksRemoveKey $LOOPDEV -l 11 2>/dev/null && fail
654 echo $PWDW"0" | $CRYPTSETUP luksRemoveKey $LOOPDEV -l 12 2>/dev/null && fail
655 echo -e "$PWD1\n" | $CRYPTSETUP luksRemoveKey $LOOPDEV -d- -l 12 || fail
656 # offset
657 $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV $KEY1 --key-slot 0 -l 13 --keyfile-offset 16 || fail
658 $CRYPTSETUP --key-file=$KEY1 -l 13 --keyfile-offset 15 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
659 $CRYPTSETUP --key-file=$KEY1 -l 13 --keyfile-offset 16 luksOpen $LOOPDEV $DEV_NAME || fail
660 $CRYPTSETUP luksClose  $DEV_NAME || fail
661 $CRYPTSETUP luksAddKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY1 -l 13 --keyfile-offset 16 $KEY2 --new-keyfile-offset 1 || fail
662 $CRYPTSETUP --key-file=$KEY2 --keyfile-offset 11 luksOpen $LOOPDEV $DEV_NAME 2>/dev/null && fail
663 $CRYPTSETUP --key-file=$KEY2 --keyfile-offset 1 luksOpen $LOOPDEV $DEV_NAME || fail
664 $CRYPTSETUP luksClose  $DEV_NAME || fail
665 $CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY2 --keyfile-offset 1 $KEY2 --new-keyfile-offset 0 || fail
666 $CRYPTSETUP luksOpen -d $KEY2 $LOOPDEV $DEV_NAME || fail
667 $CRYPTSETUP luksClose $DEV_NAME || fail
668
669 prepare "[26] Suspend/Resume" wipe
670 # LUKS
671 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV || fail
672 echo $PWD1 | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME || fail
673 $CRYPTSETUP luksSuspend $DEV_NAME || fail
674 $CRYPTSETUP -q status  $DEV_NAME | grep -q "(suspended)" || fail
675 $CRYPTSETUP -q resize  $DEV_NAME 2>/dev/null && fail
676 echo $PWDW | $CRYPTSETUP luksResume $DEV_NAME 2>/dev/null && fail
677 [ $? -ne 2 ] && fail "luksResume should return EPERM exit code"
678 echo $PWD1 | $CRYPTSETUP luksResume $DEV_NAME  || fail
679 $CRYPTSETUP -q luksClose $DEV_NAME || fail
680 echo $PWD1 | $CRYPTSETUP -q luksFormat -c null $FAST_PBKDF_OPT --type luks2 $LOOPDEV || fail
681 echo $PWD1 | $CRYPTSETUP -q luksOpen $LOOPDEV $DEV_NAME || fail
682 $CRYPTSETUP luksSuspend $DEV_NAME || fail
683 $CRYPTSETUP -q status  $DEV_NAME | grep -q "(suspended)" || fail
684 echo $PWD1 | $CRYPTSETUP luksResume $DEV_NAME  || fail
685 $CRYPTSETUP -q luksClose $DEV_NAME || fail
686
687 prepare "[27] luksOpen/Resume with specified key slot number" wipe
688 # first, let's try passphrase option
689 echo $PWD3 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT -S 5 --type luks2 $LOOPDEV || fail
690 echo $PWD3 | $CRYPTSETUP luksOpen -S 4 $LOOPDEV $DEV_NAME 2>/dev/null && fail
691 [ -b /dev/mapper/$DEV_NAME ] && fail
692 echo $PWD3 | $CRYPTSETUP luksOpen -S 5 $LOOPDEV $DEV_NAME || fail
693 check_exists
694 $CRYPTSETUP luksSuspend $DEV_NAME || fail
695 echo $PWD3 | $CRYPTSETUP luksResume -S 4 $DEV_NAME 2>/dev/null && fail
696 $CRYPTSETUP -q status $DEV_NAME | grep -q "(suspended)" || fail
697 echo $PWD3 | $CRYPTSETUP luksResume -S 5 $DEV_NAME || fail
698 $CRYPTSETUP luksClose $DEV_NAME || fail
699 echo -e "$PWD3\n$PWD1" | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT -S 0 $LOOPDEV || fail
700 echo $PWD3 | $CRYPTSETUP luksOpen -S 0 $LOOPDEV $DEV_NAME 2>/dev/null && fail
701 [ -b /dev/mapper/$DEV_NAME ] && fail
702 echo $PWD1 | $CRYPTSETUP luksOpen -S 5 $LOOPDEV $DEV_NAME 2>/dev/null && fail
703 [ -b /dev/mapper/$DEV_NAME ] && fail
704 # second, try it with keyfiles
705 $CRYPTSETUP -q luksFormat -q -S 5 $FAST_PBKDF_OPT -d $KEY5 --type luks2 $LOOPDEV || fail
706 $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT -S 1 -d $KEY5 $LOOPDEV $KEY1 || fail
707 $CRYPTSETUP luksOpen -S 5 -d $KEY5 $LOOPDEV $DEV_NAME || fail
708 check_exists
709 $CRYPTSETUP luksSuspend $DEV_NAME || fail
710 $CRYPTSETUP luksResume -S 1 -d $KEY5 $DEV_NAME 2>/dev/null && fail
711 $CRYPTSETUP -q status $DEV_NAME | grep -q "(suspended)" || fail
712 $CRYPTSETUP luksResume -S 5 -d $KEY5 $DEV_NAME || fail
713 $CRYPTSETUP luksClose $DEV_NAME || fail
714 $CRYPTSETUP luksOpen -S 1 -d $KEY5 $LOOPDEV $DEV_NAME 2>/dev/null && fail
715 [ -b /dev/mapper/$DEV_NAME ] && fail
716 $CRYPTSETUP luksOpen -S 5 -d $KEY1 $LOOPDEV $DEV_NAME 2>/dev/null && fail
717 [ -b /dev/mapper/$DEV_NAME ] && fail
718 # test keyslot not assigned to segment is unable to unlock volume
719 # otoh it should be allowed to test for proper passphrase
720 prepare "" new
721 echo $PWD1 | $CRYPTSETUP open -S1 --test-passphrase $HEADER_KEYU || fail
722 echo $PWD1 | $CRYPTSETUP open --unbound --test-passphrase $HEADER_KEYU || fail
723 echo $PWD1 | $CRYPTSETUP open -S1 $HEADER_KEYU $DEV_NAME 2>/dev/null && fail
724 [ -b /dev/mapper/$DEV_NAME ] && fail
725 echo $PWD1 | $CRYPTSETUP open $HEADER_KEYU $DEV_NAME 2>/dev/null && fail
726 [ -b /dev/mapper/$DEV_NAME ] && fail
727 echo $PWD0 | $CRYPTSETUP open -S1 --test-passphrase $HEADER_KEYU $DEV_NAME 2>/dev/null && fail
728 $CRYPTSETUP luksKillSlot -q $HEADER_KEYU 0
729 $CRYPTSETUP luksDump $HEADER_KEYU | grep -q "0: luks2" && fail
730 echo $PWD1 | $CRYPTSETUP open -S1 --test-passphrase $HEADER_KEYU || fail
731 echo $PWD1 | $CRYPTSETUP open --unbound --test-passphrase $HEADER_KEYU || fail
732 echo $PWD1 | $CRYPTSETUP open -S1 $HEADER_KEYU $DEV_NAME 2>/dev/null && fail
733
734 prepare "[28] Detached LUKS header" wipe
735 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --header $HEADER_IMG || fail
736 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --header $HEADER_IMG --align-payload 1 >/dev/null 2>&1 && fail
737 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --header $HEADER_IMG --align-payload 8192 || fail
738 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --header $HEADER_IMG --align-payload 4096 >/dev/null || fail
739 $CRYPTSETUP luksDump $HEADER_IMG | grep -e "0: crypt" -A1 | grep -qe $((4096*512)) || fail
740 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --header $HEADER_IMG --align-payload 0 --sector-size 512 || fail
741 echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV-missing --header $HEADER_IMG $DEV_NAME 2>/dev/null && fail
742 echo $PWD1 | $CRYPTSETUP luksOpen $LOOPDEV --header $HEADER_IMG $DEV_NAME || fail
743 echo $PWD1 | $CRYPTSETUP -q resize  $DEV_NAME --size 100 --header $HEADER_IMG || fail
744 $CRYPTSETUP -q status  $DEV_NAME --header $HEADER_IMG | grep "size:" | grep -q "100 sectors" || fail
745 $CRYPTSETUP -q status  $DEV_NAME | grep "type:" | grep -q "n/a" || fail
746 $CRYPTSETUP -q status  $DEV_NAME | grep "size:" | grep -q "100 sectors" || fail
747 $CRYPTSETUP luksSuspend $DEV_NAME --header $HEADER_IMG || fail
748 echo $PWD1 | $CRYPTSETUP luksResume $DEV_NAME --header $HEADER_IMG || fail
749 $CRYPTSETUP luksSuspend $DEV_NAME || fail
750 echo $PWD1 | $CRYPTSETUP luksResume $DEV_NAME 2>/dev/null && fail
751 echo $PWD1 | $CRYPTSETUP luksResume $DEV_NAME --header $HEADER_IMG || fail
752 $CRYPTSETUP luksClose $DEV_NAME || fail
753 echo $PWD1 | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT -S 5 _fakedev_ --header $HEADER_IMG $KEY5 || fail
754 $CRYPTSETUP luksDump _fakedev_ --header $HEADER_IMG | grep -q "5: luks2" || fail
755 $CRYPTSETUP luksKillSlot -q _fakedev_ --header $HEADER_IMG 5 || fail
756 $CRYPTSETUP luksDump _fakedev_ --header $HEADER_IMG | grep -q "5: luks2" && fail
757 echo $PWD1 | $CRYPTSETUP open --test-passphrase $HEADER_IMG || fail
758 rm $HEADER_IMG || fail
759 # create exactly 16 MiBs LUKS2 header
760 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --header $HEADER_IMG --luks2-keyslots-size 16352k --luks2-metadata-size 16k --offset 131072 >/dev/null || fail
761 SIZE=$(stat --printf=%s $HEADER_IMG)
762 test $SIZE -eq 16777216 || fail
763 $CRYPTSETUP -q luksDump  $HEADER_IMG | grep -q "offset: $((512 * 131072)) \[bytes\]" || fail
764
765 prepare "[29] Repair metadata" wipe
766 xz -dk $HEADER_LUKS2_PV.xz
767 if [ "$HAVE_BLKID" -gt 0 ]; then
768         $CRYPTSETUP isLuks --disable-locks $HEADER_LUKS2_PV && fail
769         $CRYPTSETUP isLuks $HEADER_LUKS2_PV && fail
770         $CRYPTSETUP isLuks --disable-locks --type luks2 $HEADER_LUKS2_PV && fail
771         $CRYPTSETUP isLuks --type luks2 $HEADER_LUKS2_PV && fail
772 fi
773 $CRYPTSETUP -q repair $HEADER_LUKS2_PV || fail
774 $CRYPTSETUP isLuks $HEADER_LUKS2_PV || fail
775 $CRYPTSETUP isLuks --type luks2 $HEADER_LUKS2_PV || fail
776 $CRYPTSETUP isLuks --type luks1 $HEADER_LUKS2_PV && fail
777
778 prepare "[30] LUKS erase" wipe
779 $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV $KEY5 --key-slot 5 || fail
780 $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT -S 1 -d $KEY5 $LOOPDEV $KEY1 || fail
781 $CRYPTSETUP luksDump $LOOPDEV | grep -q "1: luks2" || fail
782 $CRYPTSETUP luksDump $LOOPDEV | grep -q "5: luks2" || fail
783 $CRYPTSETUP luksErase -q $LOOPDEV || fail
784 $CRYPTSETUP luksDump $LOOPDEV | grep -q "1: luks2" && fail
785 $CRYPTSETUP luksDump $LOOPDEV | grep -q "5: luks2" && fail
786
787 prepare "[31] LUKS convert" wipe
788 $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks1 $LOOPDEV $KEY5 --key-slot 5 || fail
789 $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT -S 1 -d $KEY5 $LOOPDEV $KEY1 || fail
790 $CRYPTSETUP -q luksDump  $LOOPDEV --dump-json-metadata >/dev/null 2>&1 && fail
791 $CRYPTSETUP -q convert --type luks1 $LOOPDEV >/dev/null 2>&1 && fail
792 $CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 1: ENABLED" || fail
793 $CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 5: ENABLED" || fail
794 $CRYPTSETUP -q convert --type luks2 $LOOPDEV || fail
795 $CRYPTSETUP luksDump $LOOPDEV | grep -q "1: luks2" || fail
796 $CRYPTSETUP luksDump $LOOPDEV | grep -q "5: luks2" || fail
797 $CRYPTSETUP -q convert --type luks1 $LOOPDEV || fail
798 # hash test
799 $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 --sector-size 512 $LOOPDEV $KEY5 -S 0 --hash sha512 || fail
800 $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT -S 1 -d $KEY5 $LOOPDEV $KEY1 --hash sha256 || fail
801 $CRYPTSETUP -q convert --type luks1 $LOOPDEV >/dev/null 2>&1 && fail
802 $CRYPTSETUP -q luksKillSlot $LOOPDEV 1 || fail
803 $CRYPTSETUP -q convert --type luks1 $LOOPDEV || fail
804 $CRYPTSETUP luksDump $LOOPDEV | grep -q "Key Slot 0: ENABLED" || fail
805 $CRYPTSETUP luksOpen $LOOPDEV --test-passphrase --key-slot 0 -d $KEY5 || fail
806 # sector size test
807 $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 --sector-size 1024 $LOOPDEV $KEY5 || fail
808 $CRYPTSETUP -q convert --type luks1 $LOOPDEV >/dev/null 2>&1 && fail
809
810 # create LUKS1 with data offset not aligned to 4KiB
811 $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks1 $LOOPDEV $KEY5 --align-payload 4097 || fail
812 $CRYPTSETUP -q convert --type luks2 $LOOPDEV || fail
813 $CRYPTSETUP isLuks --type luks2 $LOOPDEV || fail
814 $CRYPTSETUP luksOpen $LOOPDEV --test-passphrase --key-slot 0 -d $KEY5 || fail
815
816 # keyslot 1 area offset is higher than keyslot 0 area
817 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 --key-slot 0 $LOOPDEV || fail
818 echo -e "$PWD1\n$PWD2" | $CRYPTSETUP -q luksAddKey $FAST_PBKDF_OPT --key-slot 1 $LOOPDEV || fail
819 echo -e "$PWD1\n$PWD1" | $CRYPTSETUP -q luksChangeKey $FAST_PBKDF_OPT $LOOPDEV || fail
820 # convert to LUKS1 and back; LUKS1 does not store length, only offset
821 $CRYPTSETUP -q convert --type luks1 $LOOPDEV || fail
822 echo $PWD1 | $CRYPTSETUP -q open --test-passphrase $LOOPDEV || fail
823 echo $PWD2 | $CRYPTSETUP -q open --test-passphrase $LOOPDEV || fail
824 $CRYPTSETUP -q convert --type luks2 $LOOPDEV || fail
825 echo $PWD1 | $CRYPTSETUP -q open --test-passphrase $LOOPDEV || fail
826 echo $PWD2 | $CRYPTSETUP -q open --test-passphrase $LOOPDEV || fail
827
828 if dm_crypt_keyring_flawed; then
829         prepare "[32a] LUKS2 keyring dm-crypt bug" wipe
830         echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --header $HEADER_IMG || fail
831         echo $PWD1 | $CRYPTSETUP open $LOOPDEV --header $HEADER_IMG $DEV_NAME || fail
832         $CRYPTSETUP -q status $DEV_NAME | grep "key location:" | grep -q "dm-crypt" || fail
833         $CRYPTSETUP close $DEV_NAME || fail
834         # key must not load in kernel key even when dm-crypt module is missing
835         if rmmod dm-crypt >/dev/null 2>&1; then
836                 echo $PWD1 | $CRYPTSETUP open $LOOPDEV --header $HEADER_IMG $DEV_NAME || fail
837                 $CRYPTSETUP -q status $DEV_NAME | grep "key location:" | grep -q "dm-crypt" || fail
838                 $CRYPTSETUP close $DEV_NAME || fail
839         fi
840 fi
841
842 if dm_crypt_keyring_support && dm_crypt_keyring_new_kernel; then
843         prepare "[32] LUKS2 key in keyring" wipe
844         echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --header $HEADER_IMG || fail
845
846         # check keyring support detection works as expected
847         rmmod dm-crypt >/dev/null 2>&1 || true
848         echo $PWD1 | $CRYPTSETUP open $LOOPDEV --header $HEADER_IMG $DEV_NAME || fail
849         $CRYPTSETUP -q status $DEV_NAME | grep "key location:" | grep -q "keyring" || fail
850         $CRYPTSETUP close $DEV_NAME || fail
851
852         echo $PWD1 | $CRYPTSETUP open  $LOOPDEV --disable-keyring --header $HEADER_IMG $DEV_NAME || fail
853         $CRYPTSETUP -q status $DEV_NAME | grep "key location:" | grep -q "dm-crypt" || fail
854         $CRYPTSETUP close $DEV_NAME || fail
855
856         echo $PWD1 | $CRYPTSETUP open $LOOPDEV --disable-keyring --header $HEADER_IMG $DEV_NAME || fail
857         $CRYPTSETUP luksSuspend $DEV_NAME || fail
858         echo $PWD1 | $CRYPTSETUP luksResume $DEV_NAME --header $HEADER_IMG || fail
859         $CRYPTSETUP -q status $DEV_NAME | grep "key location:" | grep -q "keyring" || fail
860         $CRYPTSETUP close $DEV_NAME || fail
861
862         echo $PWD1 | $CRYPTSETUP open $LOOPDEV --header $HEADER_IMG $DEV_NAME || fail
863         $CRYPTSETUP luksSuspend $DEV_NAME || fail
864         echo $PWD1 | $CRYPTSETUP luksResume --disable-keyring $DEV_NAME --header $HEADER_IMG || fail
865         $CRYPTSETUP -q status $DEV_NAME | grep "key location:" | grep -q "dm-crypt" || fail
866         $CRYPTSETUP close $DEV_NAME || fail
867 fi
868
869 # FIXME: candidate for non-root tests
870 prepare "[33] tokens" wipe
871 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV || fail
872 if [ $HAVE_KEYRING -gt 0 -a -d /proc/sys/kernel/keys ]; then
873
874         test_and_prepare_keyring
875
876         $CRYPTSETUP token add $LOOPDEV --key-description $TEST_TOKEN0 --token-id 3 || fail
877         $CRYPTSETUP luksDump $LOOPDEV | grep -q -e "3: luks2-keyring" || fail
878         # keyslot 5 is inactive
879         $CRYPTSETUP token add $LOOPDEV --key-description $TEST_TOKEN1 --key-slot 5 2> /dev/null && fail
880         # key description is not reachable
881         $CRYPTSETUP open --token-only $LOOPDEV --test-passphrase && fail
882         # wrong passphrase
883         load_key user $TEST_TOKEN0 "blabla" "$TEST_KEYRING" || fail "Cannot load 32 byte user key type"
884         $CRYPTSETUP open --token-only $LOOPDEV --test-passphrase 2>/dev/null && fail
885         load_key user $TEST_TOKEN0 $PWD1 "$TEST_KEYRING" || fail "Cannot load 32 byte user key type"
886         $CRYPTSETUP open --token-only $LOOPDEV --test-passphrase || fail
887         $CRYPTSETUP open --token-only $LOOPDEV $DEV_NAME || fail
888         $CRYPTSETUP status $DEV_NAME > /dev/null || fail
889         $CRYPTSETUP luksSuspend $DEV_NAME || fail
890         $CRYPTSETUP luksResume $DEV_NAME <&- || fail
891         $CRYPTSETUP -q status  $DEV_NAME | grep -q "(suspended)" && fail
892         $CRYPTSETUP luksSuspend $DEV_NAME || fail
893         $CRYPTSETUP luksResume $DEV_NAME --token-type luks2-keyring <&- || fail
894         $CRYPTSETUP close $DEV_NAME || fail
895
896         # check --token-type sort of works (TODO: extend tests when native systemd tokens are available)
897         echo -n "$IMPORT_TOKEN" | $CRYPTSETUP token import $LOOPDEV --token-id 22 || fail
898         # this excludes keyring tokens from unlocking device
899         $CRYPTSETUP open --token-only --token-type some_type $LOOPDEV --test-passphrase && fail
900         $CRYPTSETUP open --token-only --token-type some_type $LOOPDEV $DEV_NAME && fail
901         $CRYPTSETUP status $DEV_NAME > /dev/null && fail
902
903         $CRYPTSETUP token remove --token-id 3 $LOOPDEV || fail
904         $CRYPTSETUP luksDump $LOOPDEV | grep -q -e "3: luks2-keyring" && fail
905
906         # test we can remove keyslot with token
907         echo -e "$PWD1\n$PWD2" | $CRYPTSETUP luksAddKey -q -S4 $FAST_PBKDF_OPT $LOOPDEV || fail
908         $CRYPTSETUP token add $LOOPDEV --key-description $TEST_TOKEN1 --key-slot 4 --token-id 0 || fail
909         $CRYPTSETUP -q luksKillSlot $LOOPDEV 4 || fail
910         $CRYPTSETUP token remove --token-id 0 $LOOPDEV || fail
911
912         # test we can add unassigned token
913         $CRYPTSETUP token add $LOOPDEV --key-description $TEST_TOKEN0 --unbound --token-id 0 || fail
914         $CRYPTSETUP open --token-only --token-id 0 --test-passphrase $LOOPDEV && fail
915         $CRYPTSETUP token remove --token-id 0 $LOOPDEV || fail
916
917         # test token unassign works
918         $CRYPTSETUP token add $LOOPDEV --key-description $TEST_TOKEN0 -S0 --token-id 0 || fail
919         $CRYPTSETUP open --token-only --token-id 0 --test-passphrase $LOOPDEV || fail
920         $CRYPTSETUP token unassign --token-id 0 $LOOPDEV 2>/dev/null && fail
921         $CRYPTSETUP token unassign -S0 $LOOPDEV 2>/dev/null && fail
922         $CRYPTSETUP token unassign --token-id 0 -S0 $LOOPDEV || fail
923         $CRYPTSETUP open --token-only --token-id 0 --test-passphrase $LOOPDEV && fail
924         $CRYPTSETUP token unassign --token-id 0 -S0 $LOOPDEV 2>/dev/null && fail
925         $CRYPTSETUP token unassign --token-id 0 -S44 $LOOPDEV 2>/dev/null && fail
926         $CRYPTSETUP token unassign --token-id 44 -S0 $LOOPDEV 2>/dev/null && fail
927 fi
928 echo -n "$IMPORT_TOKEN" | $CRYPTSETUP token import $LOOPDEV --token-id 10 || fail
929 echo -n "$IMPORT_TOKEN" | $CRYPTSETUP token import $LOOPDEV --token-id 11 --json-file - || fail
930 echo -n "$IMPORT_TOKEN" > $TOKEN_FILE0
931 $CRYPTSETUP token import $LOOPDEV --token-id 12 --json-file $TOKEN_FILE0 || fail
932 $CRYPTSETUP token import $LOOPDEV --token-id 12 --json-file $TOKEN_FILE0 2>/dev/null && fail
933 $CRYPTSETUP token export $LOOPDEV --token-id 10 >$TOKEN_FILE1 || fail
934 diff $TOKEN_FILE0 $TOKEN_FILE1 || fail
935 $CRYPTSETUP token export $LOOPDEV --token-id 11 >$TOKEN_FILE1 || fail
936 diff $TOKEN_FILE0 $TOKEN_FILE1 || fail
937 $CRYPTSETUP token export $LOOPDEV --token-id 12 >$TOKEN_FILE1 || fail
938 diff $TOKEN_FILE0 $TOKEN_FILE1 || fail
939 $CRYPTSETUP token export $LOOPDEV --token-id 12 --json-file $TOKEN_FILE1 || fail
940 diff $TOKEN_FILE0 $TOKEN_FILE1 || fail
941 $CRYPTSETUP token export $LOOPDEV --token-id 12 > $TOKEN_FILE1 || fail
942 diff $TOKEN_FILE0 $TOKEN_FILE1 || fail
943
944 prepare "[34] LUKS keyslot priority" wipe
945 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV -S 1 || fail
946 echo -e "$PWD1\n$PWD2" | $CRYPTSETUP luksAddKey -q $LOOPDEV $FAST_PBKDF_OPT -S 5 || fail
947 $CRYPTSETUP config $LOOPDEV -S 0 --priority prefer && fail
948 $CRYPTSETUP config $LOOPDEV -S 1 --priority bla >/dev/null 2>&1 && fail
949 $CRYPTSETUP config $LOOPDEV -S 1 --priority ignore || fail
950 echo $PWD1 | $CRYPTSETUP open $LOOPDEV --test-passphrase 2>/dev/null && fail
951 echo $PWD1 | $CRYPTSETUP open $LOOPDEV --test-passphrase -S 1 || fail
952 echo $PWD2 | $CRYPTSETUP open $LOOPDEV --test-passphrase || fail
953 $CRYPTSETUP config $LOOPDEV -S 1 --priority normal || fail
954 echo $PWD1 | $CRYPTSETUP open $LOOPDEV --test-passphrase || fail
955 $CRYPTSETUP config $LOOPDEV -S 1 --priority ignore || fail
956 echo $PWD1 | $CRYPTSETUP open $LOOPDEV --test-passphrase 2>/dev/null && fail
957
958 prepare "[35] LUKS label and subsystem" wipe
959 echo $PWD1 | $CRYPTSETUP luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV || fail
960 $CRYPTSETUP luksDump $LOOPDEV | grep "Subsystem:" | grep -q "(no subsystem)" || fail
961 $CRYPTSETUP luksDump $LOOPDEV | grep "Label:" | grep -q "(no label)" || fail
962 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --subsystem SatelliteTwo --label TheLabel || fail
963 $CRYPTSETUP luksDump $LOOPDEV | grep "Subsystem:" | grep -q "SatelliteTwo" || fail
964 $CRYPTSETUP luksDump $LOOPDEV | grep "Label:" | grep -q "TheLabel" || fail
965 $CRYPTSETUP config $LOOPDEV --subsystem SatelliteThree
966 $CRYPTSETUP luksDump $LOOPDEV | grep "Subsystem:" | grep -q "SatelliteThree" || fail
967 $CRYPTSETUP luksDump $LOOPDEV | grep "Label:" | grep -q "(no label)" || fail
968 $CRYPTSETUP config $LOOPDEV --subsystem SatelliteThree --label TheLabel
969 $CRYPTSETUP luksDump $LOOPDEV | grep "Subsystem:" | grep -q "SatelliteThree" || fail
970 $CRYPTSETUP luksDump $LOOPDEV | grep "Label:" | grep -q "TheLabel" || fail
971
972 prepare "[36] LUKS PBKDF setting" wipe
973 echo $PWD1 | $CRYPTSETUP luksFormat --type luks2 --pbkdf bla $LOOPDEV >/dev/null 2>&1 && fail
974 # Force setting, no benchmark. PBKDF2 has 1000 iterations as a minimum
975 echo $PWD1 | $CRYPTSETUP luksFormat --type luks2 --pbkdf pbkdf2   --pbkdf-force-iterations 999 $LOOPDEV 2>/dev/null && fail
976 echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 --pbkdf pbkdf2   --pbkdf-force-iterations 1234 $LOOPDEV || fail
977 $CRYPTSETUP luksDump $LOOPDEV | grep "Iterations:" | grep -q "1234" || fail
978 echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 --pbkdf argon2id --pbkdf-force-iterations 3 $LOOPDEV 2>/dev/null && fail
979 echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 --pbkdf argon2id --pbkdf-force-iterations 4 --pbkdf-memory 100000 $LOOPDEV || can_fail_fips
980 $CRYPTSETUP luksDump $LOOPDEV | grep "PBKDF:" | grep -q "argon2id" || can_fail_fips
981 echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 --pbkdf argon2i  --pbkdf-force-iterations 4 \
982         --pbkdf-memory 1234 --pbkdf-parallel 1 $LOOPDEV || can_fail_fips
983 $CRYPTSETUP luksDump $LOOPDEV | grep "PBKDF:" | grep -q "argon2i" || can_fail_fips
984 $CRYPTSETUP luksDump $LOOPDEV | grep "Time cost:" | grep -q "4" || can_fail_fips
985 $CRYPTSETUP luksDump $LOOPDEV | grep "Memory:" | grep -q "1234" || can_fail_fips
986 $CRYPTSETUP luksDump $LOOPDEV | grep "Threads:" | grep -q "1" || can_fail_fips
987 # Benchmark
988 echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 --pbkdf argon2i -i 500 --pbkdf-memory 1234 --pbkdf-parallel 1 $LOOPDEV || can_fail_fips
989 [ 0"$($CRYPTSETUP luksDump $LOOPDEV | grep "Time cost:" | cut -d: -f 2 | sed -e 's/\ //g')" -gt 0 ] || can_fail_fips
990 [ 0"$($CRYPTSETUP luksDump $LOOPDEV | grep "Memory:" | cut -d: -f 2 | sed -e 's/\ //g')" -gt 0 ] || can_fail_fips
991 echo $PWD1 | $CRYPTSETUP -q luksFormat --type luks2 --pbkdf pbkdf2 -i 500 $LOOPDEV || fail
992 [ 0"$($CRYPTSETUP luksDump $LOOPDEV | grep -m1 "Iterations:" | cut -d' ' -f 2 | sed -e 's/\ //g')" -gt 1000 ] || fail
993
994 prepare "[37] LUKS Keyslot convert" wipe
995 $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks1 $LOOPDEV $KEY5 --key-slot 5 || fail
996 $CRYPTSETUP -q luksConvertKey $LOOPDEV --key-file $KEY5 2>/dev/null && fail
997 $CRYPTSETUP -q convert --type luks2 $LOOPDEV || fail
998 $CRYPTSETUP luksDump $LOOPDEV | grep -q "5: luks2" || fail
999 $CRYPTSETUP luksDump $LOOPDEV | grep "PBKDF:" | grep -q "pbkdf2" || fail
1000 $CRYPTSETUP -q luksConvertKey $LOOPDEV -S 5 --key-file $KEY5 --pbkdf argon2i -i1 --pbkdf-memory 32 || can_fail_fips
1001 $CRYPTSETUP luksDump $LOOPDEV | grep -q "5: luks2" || can_fail_fips
1002 echo $PWD1 | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT $LOOPDEV -S 1 --key-file $KEY5 || fail
1003 $CRYPTSETUP -q luksKillSlot $LOOPDEV 5 || fail
1004 $CRYPTSETUP luksDump $LOOPDEV | grep -q "1: luks2" || fail
1005 $CRYPTSETUP luksDump $LOOPDEV | grep "PBKDF:" | grep -q "pbkdf2" || fail
1006 echo $PWD1 | $CRYPTSETUP -q luksConvertKey $LOOPDEV -S 1 --pbkdf argon2i -i1 --pbkdf-memory 32 || can_fail_fips
1007 $CRYPTSETUP luksDump $LOOPDEV | grep -q "1: luks2" || can_fail_fips
1008 echo $PWD3 | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT -S 21 --unbound -s 72 $LOOPDEV || fail
1009 echo $PWD3 | $CRYPTSETUP luksConvertKey --pbkdf-force-iterations 1001 --pbkdf pbkdf2 -S 21 $LOOPDEV || fail
1010
1011 prepare "[38] luksAddKey unbound tests" wipe
1012 $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV $KEY5 --key-slot 5 || fail
1013 # unbound key may have arbitrary size
1014 echo $PWD1 | $CRYPTSETUP luksAddKey $FAST_PBKDF_OPT --unbound -s 72 $LOOPDEV || fail
1015 echo $PWD2 | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT --unbound -s 72 -S 2 $LOOPDEV || fail
1016 $CRYPTSETUP luksDump $LOOPDEV | grep -q "2: luks2 (unbound)" || fail
1017 dd if=/dev/urandom of=$KEY_FILE0 bs=64 count=1 > /dev/null 2>&1 || fail
1018 echo $PWD3 | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT --unbound -s 512 -S 3 --volume-key-file $KEY_FILE0 $LOOPDEV || fail
1019 $CRYPTSETUP luksDump $LOOPDEV | grep -q "3: luks2 (unbound)" || fail
1020 # unbound key size is required
1021 echo $PWD1 | $CRYPTSETUP -q luksAddKey --unbound $LOOPDEV 2>/dev/null && fail
1022 echo $PWD3 | $CRYPTSETUP -q luksAddKey --unbound --volume-key-file /dev/urandom $LOOPDEV 2> /dev/null && fail
1023 # do not allow one to replace keyslot by unbound slot
1024 echo $PWD1 | $CRYPTSETUP -q luksAddKey -S5 --unbound -s 32 $LOOPDEV 2>/dev/null && fail
1025 echo $PWD2 | $CRYPTSETUP -q open $LOOPDEV $DEV_NAME 2> /dev/null && fail
1026 echo $PWD2 | $CRYPTSETUP -q open -S2 $LOOPDEV $DEV_NAME 2> /dev/null && fail
1027 echo $PWD2 | $CRYPTSETUP -q open -S2 $LOOPDEV --test-passphrase || fail
1028 echo $PWD1 | $CRYPTSETUP -q open $LOOPDEV $DEV_NAME 2> /dev/null && fail
1029 # check we're able to change passphrase for unbound keyslot
1030 echo -e "$PWD2\n$PWD3" | $CRYPTSETUP luksChangeKey $FAST_PBKDF_OPT -S 2 $LOOPDEV || fail
1031 echo $PWD3 | $CRYPTSETUP open --test-passphrase -S 2 $LOOPDEV || fail
1032 echo $PWD3 | $CRYPTSETUP -q open -S 2 $LOOPDEV $DEV_NAME 2> /dev/null && fail
1033 # do not allow adding keyslot by unbound keyslot
1034 echo -e "$PWD3\n$PWD1" | $CRYPTSETUP -q luksAddKey $LOOPDEV 2> /dev/null && fail
1035 # check adding keyslot works when there's unbound keyslot
1036 echo $PWD1 | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT $LOOPDEV --key-file $KEY5 -S8 || fail
1037 echo $PWD1 | $CRYPTSETUP open $LOOPDEV $DEV_NAME || fail
1038 $CRYPTSETUP close $DEV_NAME || fail
1039 $CRYPTSETUP luksKillSlot -q $LOOPDEV 2
1040 $CRYPTSETUP luksDump $LOOPDEV | grep -q "2: luks2 (unbound)" && fail
1041 echo $PWD3 | $CRYPTSETUP luksDump --unbound --volume-key-file $KEY_FILE1 $LOOPDEV 2> /dev/null && fail
1042 echo $PWD3 | $CRYPTSETUP luksDump --unbound 2> /dev/null $LOOPDEV 2> /dev/null && fail
1043 echo $PWD3 | $CRYPTSETUP luksDump --unbound --volume-key-file $KEY_FILE1 -S3 $LOOPDEV > /dev/null || fail
1044 diff $KEY_FILE0 $KEY_FILE1 || fail
1045 echo $PWD3 | $CRYPTSETUP luksDump --unbound --volume-key-file $KEY_FILE1 -S3 $LOOPDEV 2> /dev/null && fail
1046 diff $KEY_FILE0 $KEY_FILE1 || fail
1047 rm $KEY_FILE1 || fail
1048 echo $PWD3 | $CRYPTSETUP luksDump --unbound --volume-key-file $KEY_FILE1 -S3 $LOOPDEV | grep -q "Unbound Key:" && fail
1049 echo $PWD3 | $CRYPTSETUP luksDump --unbound -S3 $LOOPDEV | grep -q "Unbound Key:" || fail
1050 $CRYPTSETUP luksKillSlot -q $LOOPDEV 3 || fail
1051 $CRYPTSETUP luksDump $LOOPDEV | grep -q "3: luks2 (unbound)" && fail
1052
1053 prepare "[39] LUKS2 metadata variants" wipe
1054 tar xJf luks2_mda_images.tar.xz
1055 echo -n "$IMPORT_TOKEN" > $TOKEN_FILE0
1056 for mda in 16 32 64 128 256 512 1024 2048 4096 ; do
1057         echo -n "[$mda KiB]"
1058         echo $PWD4 | $CRYPTSETUP open test_image_$mda $DEV_NAME || fail
1059         $CRYPTSETUP close $DEV_NAME || fail
1060         echo -e "$PWD4\n$PWD3" | $CRYPTSETUP luksAddKey -q -S9 $FAST_PBKDF_OPT test_image_$mda || fail
1061         echo $PWD4 | $CRYPTSETUP open --test-passphrase test_image_$mda || fail
1062         echo $PWD3 | $CRYPTSETUP open -S9 --test-passphrase test_image_$mda || fail
1063         echo -n "$IMPORT_TOKEN" | $CRYPTSETUP token import test_image_$mda --token-id 10 || fail
1064         $CRYPTSETUP token export test_image_$mda --token-id 10 >$TOKEN_FILE1 || fail
1065         diff $TOKEN_FILE1 $TOKEN_FILE0 || fail
1066         echo -n "[OK]"
1067 done
1068 echo
1069
1070 prepare "[40] LUKS2 metadata areas" wipe
1071 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV 2> /dev/null || fail
1072 DEFAULT_OFFSET=$($CRYPTSETUP luksDump $LOOPDEV | grep "offset: " | cut -f 2 -d ' ')
1073 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks1 $LOOPDEV --key-size 256 --luks2-metadata-size=128k --luks2-keyslots-size=128k 2> /dev/null && fail
1074 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --luks2-metadata-size=128k --luks2-keyslots-size=127k 2> /dev/null && fail
1075 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --luks2-metadata-size=127k --luks2-keyslots-size=128k 2> /dev/null && fail
1076 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --luks2-metadata-size=128k --luks2-keyslots-size=128M >/dev/null 2>&1 && fail
1077 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --luks2-metadata-size=128k --luks2-keyslots-size=128k >/dev/null || fail
1078 $CRYPTSETUP luksDump $LOOPDEV | grep "Metadata area:" | grep -q "131072 \[bytes\]" || fail
1079 $CRYPTSETUP luksDump $LOOPDEV | grep "Keyslots area:" | grep -q "131072 \[bytes\]" || fail
1080 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --luks2-metadata-size=128k || fail
1081 $CRYPTSETUP luksDump $LOOPDEV | grep "Metadata area:" | grep -q "131072 \[bytes\]" || fail
1082 $CRYPTSETUP luksDump $LOOPDEV | grep "Keyslots area:" | grep -q "$((DEFAULT_OFFSET-2*131072)) \[bytes\]" || fail
1083 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --luks2-keyslots-size=128k >/dev/null || fail
1084 $CRYPTSETUP luksDump $LOOPDEV | grep "Metadata area:" | grep -q "16384 \[bytes\]" || fail
1085 $CRYPTSETUP luksDump $LOOPDEV | grep "Keyslots area:" | grep -q "131072 \[bytes\]" || fail
1086 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --offset 16384 || fail
1087 $CRYPTSETUP luksDump $LOOPDEV | grep "Metadata area:" | grep -q "16384 \[bytes\]" || fail
1088 $CRYPTSETUP luksDump $LOOPDEV | grep "Keyslots area:" | grep -q "8355840 \[bytes\]" || fail
1089 # data offset vs area size
1090 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --offset 64 --luks2-keyslots-size=8192 >/dev/null 2>&1 && fail
1091 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --offset $((256+56)) >/dev/null 2>&1 && fail
1092 echo $PWD1 | $CRYPTSETUP -q luksFormat $FAST_PBKDF_OPT --type luks2 $LOOPDEV --key-size 256 --offset $((256+64)) >/dev/null || fail
1093
1094 prepare "[41] Per-keyslot encryption parameters" wipe
1095 KEYSLOT_CIPHER="aes-cbc-plain64"
1096 $CRYPTSETUP -q luksFormat --type luks2 $LOOPDEV $KEY1 $FAST_PBKDF_OPT --key-slot 0 --keyslot-cipher $KEYSLOT_CIPHER --keyslot-key-size 128 || fail
1097 [ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "0: luks2" | grep "Cipher:"    | sed -e 's/[[:space:]]\+Cipher:\ \+//g')" = $KEYSLOT_CIPHER ] || fail
1098 [ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "0: luks2" | grep "Cipher key:"| sed -e 's/[[:space:]]\+Cipher\ key:\ \+//g')" = "128 bits" ] || fail
1099 $CRYPTSETUP luksAddKey -q $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT --key-slot 1 --keyslot-cipher $KEYSLOT_CIPHER --keyslot-key-size 128 || fail
1100 [ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "1: luks2" | grep "Cipher:"    | sed -e 's/[[:space:]]\+Cipher:\ \+//g')" = $KEYSLOT_CIPHER ] || fail
1101 [ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "1: luks2" | grep "Cipher key:"| sed -e 's/[[:space:]]\+Cipher\ key:\ \+//g')" = "128 bits" ] || fail
1102 $CRYPTSETUP luksAddKey -q $LOOPDEV -d $KEY1 $KEY2 $FAST_PBKDF_OPT --key-slot 2 || fail
1103 $CRYPTSETUP luksChangeKey $LOOPDEV $FAST_PBKDF_OPT -d $KEY2 $KEY1 --key-slot 2 --keyslot-cipher $KEYSLOT_CIPHER --keyslot-key-size 128 || fail
1104 [ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "2: luks2" | grep "Cipher:"    | sed -e 's/[[:space:]]\+Cipher:\ \+//g')" = $KEYSLOT_CIPHER ] || fail
1105 [ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "2: luks2" | grep "Cipher key:"| sed -e 's/[[:space:]]\+Cipher\ key:\ \+//g')" = "128 bits" ] || fail
1106 # unbound keyslot
1107 echo $PWD3 | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT --key-slot 21 --unbound -s 72 --keyslot-cipher $KEYSLOT_CIPHER --keyslot-key-size 128 $LOOPDEV || fail
1108 [ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "21: luks2" | grep "Cipher:"    | sed -e 's/[[:space:]]\+Cipher:\ \+//g')" = $KEYSLOT_CIPHER ] || fail
1109 [ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "21: luks2" | grep "Cipher key:"| sed -e 's/[[:space:]]\+Cipher\ key:\ \+//g')" = "128 bits" ] || fail
1110 echo $PWD3 | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT --key-slot 22 --unbound -s 72 $LOOPDEV || fail
1111 echo $PWD3 | $CRYPTSETUP luksConvertKey --key-slot 22 $LOOPDEV --keyslot-cipher $KEYSLOT_CIPHER --keyslot-key-size 128 $LOOPDEV || fail
1112 [ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "22: luks2" | grep "Cipher:"    | sed -e 's/[[:space:]]\+Cipher:\ \+//g')" = $KEYSLOT_CIPHER ] || fail
1113 [ "$($CRYPTSETUP luksDump $IMG | grep -A8 -m1 "22: luks2" | grep "Cipher key:"| sed -e 's/[[:space:]]\+Cipher\ key:\ \+//g')" = "128 bits" ] || fail
1114
1115 prepare "[42] Some encryption compatibility mode tests" wipe
1116 CIPHERS="aes-ecb aes-cbc-null aes-cbc-plain64 aes-cbc-essiv:sha256 aes-xts-plain64"
1117 key_size=256
1118 for cipher in $CIPHERS ; do
1119         echo -n "[$cipher/$key_size]"
1120         $CRYPTSETUP -q luksFormat --type luks2 $LOOPDEV $KEY1 $FAST_PBKDF_OPT --cipher $cipher --key-size $key_size || fail
1121 done
1122 echo
1123
1124 prepare "[43] New luksAddKey options." wipe
1125 rm -f $VK_FILE
1126 echo "$PWD1" | $CRYPTSETUP luksFormat --type luks2 $FAST_PBKDF_OPT $IMG || fail
1127 echo $PWD1 | $CRYPTSETUP luksDump -q $IMG --dump-volume-key --volume-key-file $VK_FILE >/dev/null || fail
1128
1129 # pass pass
1130 echo -e "$PWD1\n$PWD2" | $CRYPTSETUP luksAddKey -q -S1 $FAST_PBKDF_OPT $IMG || fail
1131 echo $PWD2 | $CRYPTSETUP open -q --test-passphrase -S1 $IMG || fail
1132
1133 # pass file
1134 echo "$PWD2" | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT -S1 --new-key-slot 2 $IMG $KEY1 || fail
1135 $CRYPTSETUP open --test-passphrase -q -S2 -d $KEY1 $IMG || fail
1136
1137 # file pass
1138 echo "$PWD3" | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT -S2 -d $KEY1 --new-key-slot 3 $IMG || fail
1139 echo $PWD3 | $CRYPTSETUP open -q --test-passphrase -S3 $IMG || fail
1140
1141 # file file
1142 $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT -S2 --new-key-slot 4 -d $KEY1 --new-keyfile $KEY2 $IMG || fail
1143 $CRYPTSETUP open --test-passphrase -q -S4 -d $KEY2 $IMG || fail
1144
1145 # vk pass
1146 echo $PWD4 | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT -S5 --volume-key-file $VK_FILE $IMG || fail
1147 echo $PWD4 | $CRYPTSETUP open -q --test-passphrase -S5 $IMG || fail
1148
1149 # vk file
1150 $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT -S6 --volume-key-file $VK_FILE --new-keyfile $KEY5 $IMG || fail
1151 $CRYPTSETUP open --test-passphrase -q -S6 -d $KEY5 $IMG || fail
1152
1153 if [ $HAVE_KEYRING -gt 0 -a -d /proc/sys/kernel/keys ]; then
1154         test_and_prepare_keyring
1155         load_key user $TEST_TOKEN0 $PWD1 "$TEST_KEYRING" || fail "Cannot load 32 byte user key type"
1156         load_key user $TEST_TOKEN1 $PWDW "$TEST_KEYRING" || fail "Cannot load 32 byte user key type"
1157         $CRYPTSETUP token add $IMG --key-description $TEST_TOKEN0 --token-id 0 -S0 || fail
1158         $CRYPTSETUP token add $IMG --key-description $TEST_TOKEN1 --token-id 1 --unbound || fail
1159
1160         # pass token
1161         echo -e "$PWD1" | $CRYPTSETUP luksAddKey -q -S7 --new-token-id 1 $FAST_PBKDF_OPT $IMG || fail
1162         $CRYPTSETUP open -q --test-passphrase --token-only --token-id 1 -q $IMG || fail
1163         echo $PWD1 | $CRYPTSETUP luksKillSlot $IMG 7 || fail
1164         $CRYPTSETUP open -q --test-passphrase --token-only --token-id 1 -q $IMG && fail
1165
1166         # file token
1167         $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT -S2 --new-key-slot 7 --new-token-id 1 -d $KEY1 $IMG || fail
1168         $CRYPTSETUP open -q --test-passphrase --token-only --token-id 1 -q $IMG || fail
1169         echo $PWD1 | $CRYPTSETUP luksKillSlot $IMG 7 || fail
1170         $CRYPTSETUP open -q --test-passphrase --token-only --token-id 1 -q $IMG && fail
1171
1172         # vk token
1173         $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT -S7 --volume-key-file $VK_FILE --new-token-id 1 $IMG || fail
1174         $CRYPTSETUP open -q --test-passphrase --token-only --token-id 1 -q $IMG || fail
1175         echo $PWD1 | $CRYPTSETUP luksKillSlot $IMG 7 || fail
1176         $CRYPTSETUP open -q --test-passphrase --token-only --token-id 1 -q $IMG && fail
1177
1178         # token pass
1179         echo $PWD4 | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT -S7 --token-id 0 $IMG || fail
1180         echo $PWD4 | $CRYPTSETUP open -q --test-passphrase -S7 $IMG || fail
1181
1182         # token file
1183         echo $PWD4 | $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT -S8 --token-id 0 $IMG $KEY2 || fail
1184         $CRYPTSETUP open -q --test-passphrase -S8 --key-file $KEY2 $IMG || fail
1185
1186         # token token
1187         $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT -S9 --token-id 0 --new-token-id 1 $IMG || fail
1188         $CRYPTSETUP open -q --test-passphrase --token-only --token-id 1 -q $IMG || fail
1189         echo $PWD1 | $CRYPTSETUP luksKillSlot $IMG 9 || fail
1190         $CRYPTSETUP open -q --test-passphrase --token-only --token-id 1 -q $IMG && fail
1191
1192         # reuse same token
1193         $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT -S0 --new-key-slot 9 --token-id 0 --new-token-id 0 $IMG || fail
1194         $CRYPTSETUP open -q --test-passphrase --token-only --token-id 0 -q $IMG || fail
1195         echo $PWD1 | $CRYPTSETUP luksKillSlot $IMG 9 || fail
1196
1197         # reuse same token
1198         $CRYPTSETUP luksAddKey -q $FAST_PBKDF_OPT --token-id 0 --new-token-id 0 $IMG || fail
1199         echo $PWD1 | $CRYPTSETUP luksKillSlot $IMG 9 || fail
1200         $CRYPTSETUP open -q --test-passphrase --token-only --token-id 0 -q $IMG || fail
1201 fi
1202
1203 remove_mapping
1204 exit 0